때로는 :s
를 옳거나 틀릴 수있는 복잡한 정규식과 함께 사용합니다. 모든 일치 항목을 바꾸고 싶은지 확실합니다.
텍스트를 실제로 바꾸기 전에 찾은 모든 일치 항목을 Vim에 확인할 수있는 방법이 있습니까?
답변
예! :substitute
div에 c
플래그를 사용하세요. >. 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 방식을 선호합니다.
댓글
Answer
내가 가장 좋아하는 대화 형 대체물은 / 를 사용하여 검색 하고 n .
그런 다음 선택 g 를 사용하여 일치 n 다음에 s 를 사용하여 텍스트를 대체 원하는대로 텍스트 .
다음 경기로 이동하고 를 눌러 반복 합니다.
댓글
- 이 방법은 다음과 같습니다. (1) 대화 형, (2) 실수로 건너 뛴 경우 이전 경기로 이동할 수 있습니다. (
:s/old/new/gc
로는 할 수없는 일)
Answer
옵션을 사용하면 입력하는 동안 :s
명령의 결과를 미리 볼 수 있습니다.
답변
모든 사용자를 위해 incsearch
가 vim8에서 업데이트되어 패턴을 입력 할 때 미리보기도 표시됩니다.
:%s/pattern/replace/
를 사용하고 실행 취소를 위해u
를 누르십시오. Vim이 변경 한 부분을 볼 수 있습니다.hlsearch
를 활성화 한 경우. 그리고이 텍스트를 다시^R
로 바꿀 수 있습니다.