대화 형 : 대체 (검색 및 바꾸기)를 할 수 있습니까?


17

때로는 :s정확한 정규식 또는 정확하지 않은 복잡한 정규 표현식을 사용 하거나 모든 일치 항목 을 교체할지 확실하지 않은 경우 가 있습니다.

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

답변:


20

예! 에 c플래그를 사용하십시오 :substitute. 보낸 사람 :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/c

이것은 매우 유용하지만 2 주 전까지는 알지 못했습니다 :-) 그리고 심지어 ol 'vi :-)에서도 사용할 수 있습니다.

보너스 팁 : 사용하고 싶을 수도 있습니다 :set nowrapscan; 이렇게하면 Vim이 바닥에 닿을 때 위로 포장되지 않습니다. 플래그를 사용할 때 특히 유용한 것으로 나타났습니다 c.


19

Carpetsmoker가 말한 것 외에도 :

Vim 의 &incsearch( set incsearch) 설정은 정말 유용합니다. 유용하고 거의 알려지지 않은 트릭과 함께 사용할 수 있습니다.

트릭은 /또는 ?명령을 사용하여 복잡한 정규식을 시험해 보는 것 입니다. Vim은이 &incsearch설정을 사용하여 일치하는 대화식을 표시합니다. 정규식에 만족하면 :%s//replacementvim이 이전 검색을 사용 하도록 할 수 있습니다 .

부품 //이 비어있는 방법 (텍스트를 검색 할 위치)을 확인하십시오. 비워두면 Vim에게 이전 검색 정규식을 사용하도록 지시합니다. 이것으로 복잡한 정규 표현식을 입력하고의 /모든 이점을 누릴 set incsearch수 있으며 %s//replacement명령을 사용하여 실제로 검색 및 바꾸기를 실행할 수 있습니다.

incsearch와 비슷한 :s명령 을 원한다면 vim-over를 확인하십시오 .하지만 기본 Vim 방식을 선호합니다.


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

7

내가 가장 좋아하는 대화식 대체 방법은을 사용하여 검색/ 하고 일치하는 항목 을 탐색 하는 것 n입니다.

그런 다음 선택 일치 사용하여 gn다음 s대체 내가 원하는대로 텍스트를.

그리고 다음 경기로 이동하고를 눌러 반복하십시오.


이것은 (1) 대화식, (2) 실수로 건너 뛴 경우 (당신이 사용할 수없는 것 :s/old/new/gc) 이전 경기로 갈 수 있기 때문에 매우 좋은 트릭 입니다.
Ayrat


1

모두의 이익을 incsearch위해, 패턴을 입력 할 때 미리보기를 표시하도록 vim8에서 업데이트되었습니다

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