나는 사용할 수있다
:5,12s/foo/bar/g
5 번과 12 번 줄 사이 에서 검색 foo하고 바꾸 bar려면 어떻게해야합니까?
답변:
5 행에서 대체를 수행하고 12 행에서 최소한의 노력으로 반복 할 수 있습니다.
:5s/foo/bar
:12&
Ingo가 지적했듯이, :&깃발을 잊어 버립니다. 을 사용 /g하고 있으므로 올바른 명령은 다음과 :&&같습니다.
:5s/foo/bar/g
:12&&
보고 :help :&친구.
:&사용을 위한 +1 . 플래그 (있는 경우 s/../../g), 하나는 사용하는 :&&...하지만,
\(\%5l\|\%12l\)보다 더 불분명:&
항상 c끝에 a 를 추가 할 수 있습니다 . 이것은 매 경기마다 확인을 요청합니다.
:5,12s/foo/bar/gc
g플래그가 진행
n5 ~ 6 번 누르는 것이 \(\%5l\|\%12l\)대체 문에 추가 하는 것보다 더 번거 롭 습니까?
흥미로운 질문입니다. 범위 선택 만 있고 여러 줄 선택이없는 것 같습니다.
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
그리고 당신은 대체 할 one가 eno거기 라인에 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 명령은 명령 줄에서도 사용할 수 있습니다.
vim대안에 비해 이점이 없다고 생각합니다 .
:s있지만 여전히 :s명령 의 중복이 있습니다 (romainl의 솔루션이 피함).
sed...하지만,