대화 형 : 대체 (검색 & 대체)를 할 수 있습니까?

때로는 :s를 옳거나 틀릴 수있는 복잡한 정규식과 함께 사용합니다. 모든 일치 항목을 바꾸고 싶은지 확실합니다.

텍스트를 실제로 바꾸기 전에 찾은 모든 일치 항목을 Vim에 확인할 수있는 방법이 있습니까?

답변

예! :substitutec 플래그를 사용하세요. >. From :help substitute :

[c] Confirm each substitution. Vim highlights the matching string (with hl-IncSearch). You can type: :s_c "y" to substitute this match "l" to substitute this match and then quit ("last") "n" to skip this match <Esc> to quit substituting "a" to substitute this and all remaining matches {not in Vi} "q" to quit substituting {not in Vi} CTRL-E to scroll the screen up {not in Vi, not available when compiled without the +insert_expand feature} CTRL-Y to scroll the screen down {not in Vi, not available when compiled without the +insert_expand feature} 

사용 예는 파이처럼 간단합니다.

%s/old/new/gc 

매우 유용하지만 2 주 전까지는 몰랐습니다. 🙂 ol에서도 사용할 수 있습니다. vi 🙂

보너스 팁 : :set nowrapscan를 사용할 수도 있습니다. 이렇게하면 Vim이 바닥에 닿을 때 위로 감싸지는 것을 방지합니다. c 플래그를 사용할 때이 기능이 특히 유용 있음을 발견했습니다.

댓글

  • 또한 동일한 줄에서 old의 모든 인스턴스를 바꾸려면 (첫 번째 항목뿐 아니라) 명령 끝에 총 %s/old/new/gc
  • 가 표시됩니다.

  • 오, 예, 그래서 예제에 추가하는 것을 잊는 경향이 있습니다 @ e271p314 😅

답변

Carpetsmoker의 말 외에도 :

Vim의 &incsearch (set incsearch) 설정은 정말 유용합니다. 유용하고 잘 알려지지 않은 트릭과 함께 사용하십시오.

트릭은 / 또는 명령. Vim은 &incsearch 설정을 사용하여 대화식으로 일치 항목을 표시합니다. Onc 정규식에 만족하면 :%s//replacement를 사용하여 vim이 이전 검색을 사용하도록 할 수 있습니다.

는 비어 있습니다 (검색 할 텍스트를 입력하는 위치). 비워두면 Vim에 이전 검색 정규식을 사용하도록 지시하는 것입니다. 이를 통해 /로 복잡한 정규식을 입력하고 set incsearch의 모든 이점을 얻은 다음 %s//replacement 명령을 사용하여 실제로 검색 및 바꾸기를 실행합니다.

:s 명령에 대해 incsearch와 유사한 것을 원한다면 vim-over 이지만 기본 Vim 방식을 선호합니다.

댓글

  • 이의 변형을 사용했습니다. :%s/pattern/replace/를 사용하고 실행 취소를 위해 u를 누르십시오. Vim이 변경 한 부분을 볼 수 있습니다. hlsearch를 활성화 한 경우. 그리고이 텍스트를 다시 ^R로 바꿀 수 있습니다.

Answer

내가 가장 좋아하는 대화 형 대체물은 / 를 사용하여 검색 하고 n .

그런 다음 선택 g 를 사용하여 일치 n 다음에 s 를 사용하여 텍스트를 대체 원하는대로 텍스트 .

다음 경기로 이동하고 를 눌러 반복 합니다.

댓글

  • 이 방법은 다음과 같습니다. (1) 대화 형, (2) 실수로 건너 뛴 경우 이전 경기로 이동할 수 있습니다. (:s/old/new/gc로는 할 수없는 일)

Answer

Neovim에는

옵션을 사용하면 입력하는 동안 :s 명령의 결과를 미리 볼 수 있습니다.

답변

모든 사용자를 위해 incsearch가 vim8에서 업데이트되어 패턴을 입력 할 때 미리보기도 표시됩니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다