카테고리 없음

[정규식] VIM : 문자열의 각 인스턴스를 다른 값으로 바꾸는 방법

필살기쓰세요 2021. 2. 10. 14:25

모든 것이 +=다른 라인에서 발생하는 경우 :

:let c=0 | g/\m+=/ s!\m+=!\=['/=', '-=', '*='][c%3]! | let c+=1

+=같은 줄에 둘 이상이있을 수있는 경우 :

:fu! Cycle() | let c+=1 | return ['/=', '-=', '*='][c%3] | endf
:let c=-1 | %s/\m+=/\=Cycle()/g

참조 :

  • :h :global
  • :h s/\=
-------------------

@SatoKatsura의 대답의 더 짧은 변형이 있습니다. 먼저 대체 목록을 정의한 다음를 사용하여 목록의 :help sub-replace-expression첫 번째 요소를 제거합니다.

:let replacements = ['/=', '-=', '*='] | %s#+=#\=remove(replacements, 0)#

3 개 이상의 교체가 있고 교체를 반복하려면 다음을 사용하십시오.

:let replacements = ['/=', '-=', '*='] | %s#+=#\=add(replacements, remove(replacements, 0))[-1]#


출처
https://stackoverflow.com/questions/39930079