[vim] 특정 줄의 vim에서 검색 및 바꾸기

나는 사용할 수있다

:5,12s/foo/bar/g

5 번과 12 번 줄 사이 에서 검색 foo하고 바꾸 bar려면 어떻게해야합니까?



답변

Vim에는 특정 행, 열 등에서 일치하는 특수 정규식 원자가 있습니다. 범위에 추가하여 사용할 수 있습니다.

:5,12s/\(\%5l\|\%12l\)foo/bar/g

보다 :help /\%l


답변

5 행에서 대체를 수행하고 12 행에서 최소한의 노력으로 반복 할 수 있습니다.

:5s/foo/bar
:12&

Ingo가 지적했듯이, :&깃발을 잊어 버립니다. 을 사용 /g하고 있으므로 올바른 명령은 다음과 :&&같습니다.

:5s/foo/bar/g
:12&&

보고 :help :&친구.


답변

항상 c끝에 a 를 추가 할 수 있습니다 . 이것은 매 경기마다 확인을 요청합니다.

:5,12s/foo/bar/gc


답변

흥미로운 질문입니다. 범위 선택 만 있고 여러 줄 선택이없는 것 같습니다.

http://vim.wikia.com/wiki/Ranges

그러나 5 번과 12 번 줄에 특별한 내용이있는 경우 :g연산자를 사용할 수 있습니다 . 파일이 다음과 같은 경우 (참조 용 번호) :

 1     line one
 2     line one
 3     line one
 4     line one
 5     enil one
 6     line one
 7     line one
 8     line one
 9     line one
10     line one
11     line one
12     enil one

그리고 당신은 대체 할 oneeno거기 라인에 enil대신 line:

:g/enil/s/one/eno/


답변

edvi 및 vim과 유사한 명령을 사용 하는 행 지향 텍스트 편집기를 사용할 수 있습니다 . 아마도 vi와 vim보다 앞선 것입니다.

스크립트 (EndCommand 마커까지 입력을 처리하는 here 문서 사용)에서는 다음과 같습니다.

ed file <<EndCommands
    5
    s/foo/bar/g
    7
    s/foo/bar/g
    wq
EndCommands

분명히 ed 명령은 명령 줄에서도 사용할 수 있습니다.


답변