vi는 현재 검색된 문자열을 대체합니다.

vi는 현재 검색된 문자열을 대체합니다.

전역적으로 또는 선택한 범위에서 문자열을 검색하고 바꾸는 방법을 알고 있습니다.

*하지만 저는 단어를 탐색한 다음 클릭하여 해당 단어를 검색 하는 습관이 있습니다 . 이는 문자열이라는 단어를 검색할 뿐만 아니라 검색 문자열이 하위 문자열인 다른 문자열도 무시합니다. 따라서 검색은 \<word\>단지 word.

*이제 검색 및 바꾸기 명령을 위해 단어를 다시 입력할 필요 없이 단어를 클릭하고 해당 문자열에서 검색되고 강조 표시된 항목을 모두 바꿀 수 있기를 원합니다 . 좋은 제안이 있나요?

답변1

예시 텍스트:

cat
concatenate
scat
dog and cat

첫 번째 줄을 누르면 *패턴이 검색됩니다.\<cat\>

검색 및 바꾸기 중에 검색 문자열을 비워두면 마지막으로 일치하는 패턴을 재사용하므로 다음을 수행하십시오.

:%s//CAT/g

결과는 다음과 같습니다

CAT
concatenate
scat
dog and CAT


~에서:h :substitute

대체 명령의 {pattern}이 비어 있는 경우 해당 명령은 이전 대체 명령 또는 명령의 패턴을 사용합니다 :global. 존재하지 않지만 이전 검색 패턴이 있는 경우 해당 패턴이 사용됩니다. [r] 플래그를 사용하면 이 명령은 :global이전 바꾸기 또는 검색 명령의 패턴을 사용합니다.


전체 단어 대신 텍스트의 일부만 검색 *하도록 텍스트를 시각적으로 선택하는 동작을 변경하려면 다음을 수행합니다 .#

vnoremap * y/<C-R>"<CR>
vnoremap # y?<C-R>"<CR>

답변2

.from g*대신 사용할 수 있습니다 .*:help gstar

g*          Like "*", but don't put "\<" and "\>" around the word.
            This makes the search also find matches that are not a
            whole word.  {not in Vi}

g#          Like "#", but don't put "\<" and "\>" around the word.
            This makes the search also find matches that are not a
            whole word.  {not in Vi}

그런 다음 다음을 사용하십시오.

:%s//replacement/g

@Sundeep이 제안한대로.

관련 정보