[vim] 여러 줄의 vim에서 문자열 찾기 및 바꾸기

내가 할 수있는 :%s/<search_string>/<replace_string>/g파일을 통해 문자열을 교체하기위한, 또는 :s/<search_string>/<replace_string>/현재 행에서 대체 할 수 있습니다.

vim에서 선택 줄에서 단어를 선택하고 바꾸려면 어떻게해야합니까?

예 : 라인에서 텍스트를 교체 6-10, 14-18하지만에서 11-13.



답변

:&&명령은 같은 플래그 지난 대체를 반복합니다. 추가 범위를 제공하고 원하는만큼 연결할 수 있습니다.

:6,10s/<search_string>/<replace_string>/g | 14,18&&

그래도 많은 범위 가 있다면 루프를 사용하는 것이 좋습니다.

:for range in split('6,10 14,18')| exe range 's/<search_string>/<replace_string>/g' | endfor


답변

전부 교체:

:%s/foo/bar/g

각 줄에서 ‘foo’를 찾아서 ‘bar’로 바꿉니다.

특정 라인의 경우 :

:6,10s/foo/bar/g

6 행에서 10 행까지의 모든 행에 대해 각 ‘foo’를 ‘bar’로 변경하십시오.


답변

참고로, 줄 번호를 입력하지 않고 시각적 모드 중 하나에서 찾거나 바꿀 줄을 강조 표시하십시오.

  • VISUAL모드 ( V)
  • VISUAL BLOCK모드 ( Ctrl+ V)
  • VISUAL LINE모드 ( Shift+ V, 귀하의 경우 가장 잘 작동합니다)

바꿀 줄을 선택했으면 다음 명령을 입력하십시오.

:s/<search_string>/<replace_string>/g

범위 '<,'>가 자동으로 삽입됩니다.

:'<,'>s/<search_string>/<replace_string>/g

여기서는 '<단순히 강조 표시된 첫 번째 줄'>의미하고 마지막 강조 표시된 줄을 의미 합니다 .

참고 행동이 예기치 될 수 있음을 때의 NORMAL모드 : '<'>시작과 중 하나를 수행 마지막 하이라이트의 끝 지점 VISUAL모드. 대신 NORMAL모드에서 특수 행 번호를 .사용할 수 있습니다. 이는 단순히 현재 행을 의미 합니다 . 따라서 다음과 같이 현재 줄에서만 찾을 수 있습니다.

:.s/<search_string>/<replace_string>/g

주목해야 할 또 다른 사항은 :range와 find / replace 명령 사이 에 초를 삽입 해도 아무런 영향을 미치지 않습니다. 즉, 이러한 명령은 여전히 ​​작동합니다.

:'<,'>:s/<search_string>/<replace_string>/g
:.:s/<search_string>/<replace_string>/g


답변

두 개의 찾기 / 바꾸기 시퀀스로 할 수 있습니다

  :6,10s/<search_string>/<replace_string>/g
  :14,18s/<search_string>/<replace_string>/g

두 번째로 조정해야 할 것은 범위이므로 모두 입력하는 대신 마지막 명령을 기억하고 범위 만 편집합니다.


답변

vim에서 모든 라인에 영향을 줄 혼란 스러우면 아래에서 사용하십시오.

 :%s/foo/bar/gc

각 ‘foo’를 ‘bar’로 변경하되 먼저 확인을 요청하십시오. 예인 경우 ‘y’를 누르고 아니오 인 경우 ‘n’을 누르십시오. 그 후 저장하는 것을 잊지 마세요

:wq


답변

VI 검색 및 바꾸기 명령 예제

“foo”라는 단어를 찾고“bar”로 바꾸고 싶다고합시다.

첫 번째 히트 [Esc]

: (콜론)을 %s/foo/bar/입력하고 [Enter] 키를 누르십시오

:%s/foo/bar/


답변

현재 줄 번호를 입력 할 필요가 없습니다.

현재 줄 ( )과 다음 두 줄 ( ) foobar대해 각각을 변경하려면 .다음을 +2수행하십시오.

:.,+2s/foo/bar/g

당신이 변경되기 전에 확인하려는 경우, 교체 ggc:

:.,+2s/foo/bar/gc