Vim의 여러 파일에서 문자열을 검색하고 바꾸는 방법
3417 단어 replacevimsubstitutesearch
VSCode 및 Atom과 같은 인기 있는 편집기의 유용한 기능은 프로젝트의 여러 파일에서 문자열을 검색하고 교체하는 기능입니다. Vim이 같은 일을 할 수 있다면 좋지 않을까요?
다행스럽게도 Vim도 그렇게 할 수 있지만 처음에는 직관적이지 않을 수 있습니다. 가장 좋은 점은 이를 위해 플러그인을 설치할 필요가 없다는 것입니다! Vim에서 여러 파일을 검색하고 바꾸는 방법 두 가지를 보여드리겠습니다. 하지만 그 전에 기본 사항을 살펴보겠습니다.
단일 파일 검색 및 바꾸기(대체)
Vim의 기본 대체 방법을 알고 있다면 다음 섹션으로 건너뛰세요.
vim에서 대체는 다음과 같이 수행됩니다.
:%s/stringToBeReplaced/replacementString/g
정규식도 작동합니다. 여기서는 정규식 세부 정보를 건너뛰지만 :h substitute
에서 자세한 내용을 읽을 수 있습니다.
인수
Vim에 파일 목록을 허용하는 명령:ar[gs]
이 있다는 것을 알고 있습니까?
args를 어떻게 사용할 수 있는지 보여드리겠습니다. 디렉토리에 다음과 같은 내용이 포함되어 있다고 가정해 보겠습니다.
├── index.js
├── server.js
index.js
및 server.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 해킹이 포함되어 있습니다!!
Reference
이 문제에 관하여(Vim의 여러 파일에서 문자열을 검색하고 바꾸는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/iggredible/how-to-search-and-replace-string-in-multiple-files-in-vim-20g2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
:%s/stringToBeReplaced/replacementString/g
Vim에 파일 목록을 허용하는 명령
:ar[gs]
이 있다는 것을 알고 있습니까?args를 어떻게 사용할 수 있는지 보여드리겠습니다. 디렉토리에 다음과 같은 내용이 포함되어 있다고 가정해 보겠습니다.
├── index.js
├── server.js
index.js
및 server.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 해킹이 포함되어 있습니다!!
Reference
이 문제에 관하여(Vim의 여러 파일에서 문자열을 검색하고 바꾸는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/iggredible/how-to-search-and-replace-string-in-multiple-files-in-vim-20g2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
:argdo %s/stringToBeReplaced/replacementString/g | update
Execute {cmd} for each file in the argument list...
매크로를 기록하는 동안 하나의 파일에서 대체를 수행하고 모든 인수에서 매크로를 반복합니다.
동일한 폴더 구조와 인수를 가정하면 다음과 같이 수행됩니다.
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 해킹이 포함되어 있습니다!!
Reference
이 문제에 관하여(Vim의 여러 파일에서 문자열을 검색하고 바꾸는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/iggredible/how-to-search-and-replace-string-in-multiple-files-in-vim-20g2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)