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

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

     %s/old/new/g

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



답변

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

:%s/old/new/gc

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

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

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

:h :s

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

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

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


답변

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

%s/old/new/gc

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

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

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


답변

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


답변

나는 보통 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대신 다음 항목을 찾기 위해 다시 누르면 됩니다 .).


답변

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


답변

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


답변

Neovim 에는 이제 대체를 미리 볼 수있는 기능이 있습니다.

여기에 이미지 설명을 입력하십시오

이미지 : https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d
기능 설명서 : https://neovim.io/doc/user/options.html# ‘inccommand’