Vim/Vi에서 텍스트를 찾고 대체하는 방법을 설명합니다.
Vim은 가장 인기 있는 명령줄 텍스트 편집기입니다. MacOS 및 대부분의 Linux 배포판에 사전 설치되어 제공됩니다. Vim에서 텍스트를 빠르고 쉽게 찾고 바꿀 수 있습니다.

기본 찾기 및 바꾸기
Vim에서 :substitute(:s) 명령을 사용하여 텍스트를 찾고 바꿀 수 있습니다.
Vim에서 명령을 실행하려면 편집기를 시작할 때 기본 모드인 일반 모드에 있어야 합니다. 다른 모드에서 정상 모드로 돌아가려면 'Esc' 키를 누르기만 하면 됩니다.
대체 명령의 일반적인 형식은 다음과 같습니다.
:[range]s/{pattern}/{string}/[flags] [count]
이 명령은 [range]의 각 행에서 {pattern}을(를) 검색하고 이를 {string}(으)로 바꿉니다. [count]는 명령을 곱하는 양의 정수입니다.
[range] 및 [count]가 지정되지 않은 경우 현재 라인에 있는 패턴만 바뀝니다. 현재 선은 커서가 배치되는 선입니다.
예를 들어, 현재 줄에서 'foo' 문자열이 처음 나타나는 것을 검색하고 'bar'로 바꾸려면 다음을 사용합니다.
:s/foo/bar/
현재 줄에 있는 검색 패턴의 모든 항목을 바꾸려면 g 플래그를 추가하십시오.
:s/foo/bar/g
전체 파일의 패턴을 검색하고 바꾸려면 백분율 문자 %를 범위로 사용하십시오. 이 문자는 파일의 첫 번째 줄부터 마지막 줄까지의 범위를 나타냅니다.
:%s/foo/bar/g
{string} 부분을 생략하면 빈 문자열로 간주되고 일치하는 패턴이 삭제됩니다. 다음 명령은 현재 줄에 있는 문자열 'foo'의 모든 인스턴스를 삭제합니다.
:s/foo//g
슬래시 문자(/) 대신 구분 기호로 사용하지 않는 다른 모든 영숫자 단일 바이트 문자를 사용할 수 있습니다. 이 옵션은 검색 패턴 또는 대체 문자열에 '/' 문자가 있을 때 유용합니다.
:s|foo|bar|
각 치환을 확인하려면 c 플래그를 사용합니다.
:s/foo/bar/gc
# replace with bar (y/n/a/q/l/^E/^Y)?
일치 항목을 바꾸려면 y를 누르고 일치 항목을 바꾸고 종료하려면 l을 누릅니다. 경기를 건너뛰려면 n을 누르고 대체를 종료하려면 q 또는 Esc를 누릅니다. a 옵션은 일치 항목과 나머지 모든 일치 항목을 대체합니다. 화면을 아래로 스크롤하려면 Ctrl+Y를 사용하고 위로 스크롤하려면 Ctrl+E를 사용합니다.
정규식을 검색 패턴으로 사용할 수도 있습니다. 아래 명령은 'foo'로 시작하는 모든 행을 'Vim is best'로 바꿉니다.
:%s/^foo.*/Vim is the best/gc
^(카레트) 기호는 행의 시작과 일치하며 .*는 임의의 문자 수와 일치합니다.
대소문자를 구분
기본적으로 검색 작업은 대소문자를 구분합니다. "FOO" 검색은 "Foo"와 일치하지 않습니다.
검색 패턴에 대한 대/소문자를 무시하려면 i 플래그를 사용합니다.
:s/Foo/bar/gi
대소문자를 무시하도록 강제하는 또 다른 방법은 검색 패턴 뒤에 \c를 추가하는 것입니다. 예를 들어 /Linux\c는 무시 사례 검색을 수행합니다.
기본 대/소문자 설정을 변경한 경우 대/소문자 구분 검색을 수행하려면 I 플래그를 사용하십시오.
:s/foo/bar/gi
패턴 뒤에 대문자 \C도 대문자 일치 검색을 강제합니다.
검색 범위
범위가 지정되지 않은 경우 대체 명령은 현재 라인에서만 작동합니다.
범위는 한 줄 또는 두 줄 사이의 범위일 수 있습니다. 행 지정자는 , 또는 ; 문자로 구분됩니다. 절대 라인 번호 또는 특수 기호를 사용하여 범위를 지정할 수 있습니다.
예를 들어, 3행에서 10행까지의 모든 행에서 'foo'를 'bar'로 치환하려면 다음을 사용합니다.
:3,10s/foo/bar/g
범위는 포함이며, 이는 첫 번째 줄과 마지막 줄이 범위에 포함됨을 의미합니다.
점 . 문자는 현재 줄을 나타내고 달러는 마지막 줄을 나타냅니다. 현재 줄에서 마지막 줄까지 모든 줄에서 'foo'로 대체하려면 다음과 같이 하십시오.
:.,$s/foo/bar/
또한 '+' 또는 '-' 기호를 사용하여 라인 지정자를 설정할 수 있으며, 그 뒤에 이전 라인 번호에서 더하거나 뺀 숫자를 사용할 수 있습니다. 기호 뒤에 있는 숫자를 생략하면 기본값은 1입니다.
예를 들어, 각 'foo'를 현재 행과 다음 네 줄에서 시작하는 'bar'로 대체하려면 다음을 입력합니다.
:.,+4s/foo/bar/g
전체 단어를 대체
대체 명령은 패턴을 전체 단어가 아닌 문자열로 찾습니다. 예를 들어, "gnu"를 검색하는 경우 "gnu"가 "cygnus" 또는 "magnum"과 같은 더 큰 단어에 포함된 일치 항목을 검색합니다.
전체 단어를 검색하려면 단어 시작을 표시하려면 \<을 입력하고 검색 패턴을 입력한 다음 단어 끝을 표시하려면 \>을 입력합니다.
예를 들어, "foo"라는 단어를 검색하려면 \<foo\>를 사용합니다.
:s/\<foo\>/bar/
대체 기록
Vim은 현재 세션에서 실행하는 모든 명령을 추적합니다. 이전 대체 명령 기록을 검색하려면 :s를 입력하고 화살표 위쪽/아래쪽 키를 사용하여 이전 대체 작업을 찾습니다. 명령을 실행하려면 Enter 키를 누르기만 하면 됩니다. 작업을 수행하기 전에 명령을 편집할 수도 있습니다.
예
주석 줄(줄 앞에 # 추가)을 5에서 20까지 표시합니다.
:5,20s/^/#/
5에서 20까지의 행을 주석 해제하고 이전 변경 사항을 되돌립니다.
:5,20s/^#//
'apple', 'Orange', 'mango'의 모든 인스턴스를 'fruit'로 바꿉니다.
:%s/apple\|orange\|mango/fruit/g
각 줄의 끝에서 후행 공백을 제거합니다.
:%s/\s\+$//e
검색 및 대체는 텍스트를 빠르게 변경할 수 있는 Vim의 강력한 기능입니다.