Vim) 찾아바꾸기 Find And Replace

작성: 2021.12.23

수정: 2021.12.23

읽는시간: 00 분

Development/Develop Tools

반응형

https://vim.fandom.com/wiki/Search_and_replace

검색

vim에서 검색을 할 때에는 입력 모드가 아닌 일반모드에서 / 키를 입력해 검색 대화 창을 띄우고 검색할 문자를 입력해 엔터키를 입력 하면 해당 문자열을 찾아 커서를 그 위치로 이동합니다.

그 상태에서 다음 검색결과로 넘어가려면 그 상태에서 n키를 누르고, 이전 검색결과는 N(Shift 키를 함께 입력)를 입력해 이동 할 수 있습니다.

찾아 바꾸기

단순 변경

:substitute 커맨드는 text pattern을 찾아 text string으로 치환합니다. 많은 옵션이 있지만 보통은 아래의 내용이 필요합니다.

:s/foo/bar/g

현재 라인의 foo를 찾아 bar로 변경

:%s/foo/bar/g

모든 foo를 찾아 bar로 한번에 변경

/ 를 구분자로 사용 할 수 있지만, 바꾸고자 하는 문자열에 이미 포함되었을 경우에는 따로 escape 할 필요 없이 @,#,! 혹은 | 와 ? 등등 다른 구분자를 사용할 수 있습니다.

아래의 예제는 http://localhost:8080/api 를 모두 ${API_URI}로 변경합니다.

문자열에 /이 포함 되어있기 때문에 @를 대신 구분자로 사용 하였습니다.

:%s@http://localhost:8080/api@${API_URI}@g

변경전 확인

마지막 구분자 뒤의 g는 confirmation 없이 변경하는 것 이며, c 옵션을 준다면 매번 매칭되는 문자열마다 변경할지를 한번 더 확인 합니다.

:%s/foo/bar/gc

모든 foobar로 변경 하지만, 처음에 정말 바꿀지 물어봅니다.

:%s/foo/bar/gci

i 옵션은 모든 foo를 변경하지만, 대소문자를 구분하지 않습니다(ignorecase).

vim에서는 기본설정으로 :set noignorecase되어 있기 때문에 대소문자 구분을 하지 않으려면 i 옵션을 붙여 주어야 합니다.

:%s/foo/bar/gcI

대문자 I 옵션을 주면 case sensitive가 되어 대소문자를 구분 합니다.

대소문자 구분을 원하지 않아 :set ignorecase 옵션을 준 경우에는 대소문자 구분을 위해 필요합니다.

반응형