Vim에서 대화식 검색 / 대체 정규식?


265

전역 대체를 수행하는 정규식을 알고 있습니다.

     %s/old/new/g

Vim 에서 대화식 검색-교체를 어떻게합니까?

답변:


462

플래그 추가 C (Vim은 명령 프롬프트에서)를 :

:%s/old/new/gc

'old'가 나타날 때마다 예 / 아니오 프롬프트를 표시합니다.

텍스트에서 "old"가 강조 표시됩니다.  창 하단에 "새로운 것으로 교체 (y / n / a / q / l / ^ E / ^ y)?"

Vim의 내장 도움말은 확인을 통한 대체가 선택된 후 사용 가능한 옵션에 대한 유용한 정보를 제공합니다. 사용하다:

:h :s

그런 다음 확인 옵션 섹션으로 스크롤하십시오. 아래 스크린 샷 :

"[C] 각 대체를 확인하십시오. [...] CTRL-Y"라는 화면이 아래로 스크롤됩니다.

예를 들어,이 항목과 나머지 모든 일치 항목을 대체하려면을 사용하십시오 a.


30
+1, 오늘 새로운 것을 배웠습니다! vim에는 숨겨진 비밀이 너무 많습니다 .. :)
Marc Novakowski

10
vim 명령을 배우는 것은 Nethack을하는 것과 약간 비슷합니다. 당신은 하나의 캐릭터가 어떤 경이로움을 가지고 있는지 알지 못합니다.
Mark Biek

22
나는 "c"가 "확인"을위한 것이라고 상상한다
matpie

8
나는 정직하게 으스스한 모습을 보려고 노력하지는 않았지만 ": help : s"를 실행하면 ": help : s_flags"로 바로 연결될 수 있습니다.
Jeremy Cantrell

13
@jeremy : help 명령이 있다는 것을 알고 있어야하며 관련 도움말 파일로 이동하려면 "colon s"스위치를 입력해야합니다. 어떻게 또는 어디서 배울 수 있습니까?
Dennis

79

Mark Biek은 다음을 사용하여 지적했습니다.

%s/old/new/gc

전체 검색의 경우 각 대체에 대한 확인으로 바뀝니다. 그러나 이전 텍스트가 올바르게 일치하는지 대화식으로 확인하는 것도 좋습니다. 먼저 정규식으로 검색 한 다음 해당 패턴을 재사용합니다.

/old.pattern.to.match
%s//replacement/gc

s//마지막 검색 패턴을 사용합니다.


9
vim 사용 / 학습의 가장 큰 장점 중 하나는 토끼 구멍이 얼마나 깊다는 것입니다!
ken

2
니스는 항상 검색을 수행 한 다음 <Cr> /를 사용하여 마지막 검색을 대체 명령에 붙여 넣었습니다.
Atilla Filiz

Sublime Text에서 정확히 놓친 것!
Xenofex

이 답변은 단어의 인스턴스를 대체하기로 결정한 많은 시간을 상상할 때 특히 유용합니다. 방금 검색 한 단어입니다.
M_M

20

난 당신이 찾고있는 생각 c예를 들어 s/abc/123/gc,이 VIM은 교체를 확인하게됩니다. 자세한 내용은 : help : substitute를 참조하십시오.


9

나는 보통 find / substitute / next / repeat 명령을 사용합니다 :-)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

의 그 find "old", substitute 3 characters for "new", find next, repeat substitute, 등.

대규모 대체의 경우 고통 스럽지만 이전 항목을 선택적으로 무시할 수 있습니다 ( 대체를 반복하는 n대신 다음 항목을 찾기 위해 다시 누르면 됩니다 .).


나는 비슷한 텍스트에서도 이것을 사용합니다. (3cW <texthere> <ESC> <새 위치로 이동>. <move>. <move>.)
strager

1
반 패턴이 아닙니다! 달콤합니다. N을 사용하여 반대 방향으로 검색 할 수 있습니다. 단어를보고 변경하려는 경우 정말 좋습니다. * cwNewText <ESC> Nnn (커서 아래의 단어에서 벗어나지 만 다음 항목을 변경하자마자 뒤로 건너 뜁니다.
PEZ

무엇 <CR>입니까?
Sother

9

'abc'의 발생 횟수를 세고 싶다면 할 수 있습니다 %s/abc//gn. 이것은 아무것도 대체하지 않고 'abc'발생 횟수 만보고합니다.


3

일치하는 각 발생에 대해 대체 텍스트를 변경 해야하는 경우 (즉, 단일 대체를 적용하기 위해 단순히 예 / 아니요를 선택하지 않음) 대화식 대체 라는 Vim 플러그인을 사용할 수 있습니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.