Vim의 여러 파일에서 문자열을 검색하고 바꾸는 방법

더 많은 Vim 팁과 요령을 보려면 팔로우하세요!

VSCode 및 Atom과 같은 인기 있는 편집기의 유용한 기능은 프로젝트의 여러 파일에서 문자열을 검색하고 교체하는 기능입니다. Vim이 같은 일을 할 수 있다면 좋지 않을까요?

다행스럽게도 Vim도 그렇게 할 수 있지만 처음에는 직관적이지 않을 수 있습니다. 가장 좋은 점은 이를 위해 플러그인을 설치할 필요가 없다는 것입니다! Vim에서 여러 파일을 검색하고 바꾸는 방법 두 가지를 보여드리겠습니다. 하지만 그 전에 기본 사항을 살펴보겠습니다.

단일 파일 검색 및 바꾸기(대체)



Vim의 기본 대체 방법을 알고 있다면 다음 섹션으로 건너뛰세요.

vim에서 대체는 다음과 같이 수행됩니다.

:%s/stringToBeReplaced/replacementString/g


정규식도 작동합니다. 여기서는 정규식 세부 정보를 건너뛰지만 :h substitute에서 자세한 내용을 읽을 수 있습니다.

인수



Vim에 파일 목록을 허용하는 명령:ar[gs]이 있다는 것을 알고 있습니까?

args를 어떻게 사용할 수 있는지 보여드리겠습니다. 디렉토리에 다음과 같은 내용이 포함되어 있다고 가정해 보겠습니다.

├── index.js
├── server.js

index.jsserver.js를 캡처하려면 :args *.js를 수행할 수 있습니다. 이제 :args를 입력하면 표시됩니다.

[index.js] server.js


다음 인수로 이동하려면 :n[ext]:prev[ious]를 입력하여 이전 인수 목록으로 이동하십시오.

args에 대해 glob을 사용하여 재귀적으로 검색할 수도 있습니다. 인수를 사용할 수 있는 더 많은 방법은 다음과 같습니다.

:args index.js server.js // captures only index and server js files
:args **/*.js            // captures every js files
:args **                 // captures everything 

:s:args 로 무장하여 대체를 수행할 준비가 되었습니다!

방법 1: argdo 사용



이제 모든 인수가 있으므로 정규 대체를 수행할 수 있습니다.
대체 방법을 기억하면서 argdo 와 결합합니다.

:argdo %s/stringToBeReplaced/replacementString/g | update


이것은 ALL foo를 bar로 바꾸고 모든 args에 적용합니다.

argdo에 당황했다면 혼자가 아닙니다. 너무 오래 전에 나는 그것에 대해 들어 본 적이 없습니다. 실제로는 매우 간단합니다. :h argdo 를 보면 다음과 같습니다.

Execute {cmd} for each file in the argument list...



즉, 모든 js 파일인 모든 인수 목록에 전달하는 모든 항목{cmd}을 사과합니다. 전달하는 것은 대체 명령입니다.
update는 선택 사항입니다. 교체된 모든 파일을 저장합니다. 보통 저장하는 것을 잊기 때문에 그렇게 합니다.

방법 2: 매크로로 대체 수행 및 반복



매크로를 기록하는 동안 하나의 파일에서 대체를 수행하고 모든 인수에서 매크로를 반복합니다.

동일한 폴더 구조와 인수를 가정하면 다음과 같이 수행됩니다.

qq                                          // start macro in q register
%s/stringToBeReplaced/replacementString/ge  // the e flag tells vim to not throw an error if there is no match
:wnext                                      //important. This is similar to `:next`, but it also writes the current file
q                                           // stop macro
999@q                                       //repeat this macros either 999 times or to remaining files.


그게 다야!

전역 검색 및 바꾸기를 수행하는 데 사용하는 또 다른 트릭이 있습니까? 듣고 싶어요!



Btw, 여기 재미있는 부분이 있습니다. 두 번째 방법은 실제로 Vim의 "영리한 트릭"사용자 설명서(vim 7.3 이상 및 Neovim에서 사용 가능)에 나열되어 있습니다. 시간이 있다면 전체 섹션( :h usr_12.txt )을 확인해야 합니다. 상당히 읽기 쉽고 짧으며 매우 재미있는 vim 해킹이 포함되어 있습니다!!

좋은 웹페이지 즐겨찾기