[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/
답변
현재 줄 번호를 입력 할 필요가 없습니다.
현재 줄 ( )과 다음 두 줄 ( ) foo
에 bar
대해 각각을 변경하려면 .
다음을 +2
수행하십시오.
:.,+2s/foo/bar/g
당신이 변경되기 전에 확인하려는 경우, 교체 g
로 gc
:
:.,+2s/foo/bar/gc