![vi는 현재 검색된 문자열을 대체합니다.](https://linux55.com/image/96817/vi%EB%8A%94%20%ED%98%84%EC%9E%AC%20%EA%B2%80%EC%83%89%EB%90%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EB%8C%80%EC%B2%B4%ED%95%A9%EB%8B%88%EB%8B%A4..png)
전역적으로 또는 선택한 범위에서 문자열을 검색하고 바꾸는 방법을 알고 있습니다.
*
하지만 저는 단어를 탐색한 다음 클릭하여 해당 단어를 검색 하는 습관이 있습니다 . 이는 문자열이라는 단어를 검색할 뿐만 아니라 검색 문자열이 하위 문자열인 다른 문자열도 무시합니다. 따라서 검색은 \<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이 제안한대로.