vim
Vim 사용법
1. 비주얼 모드
비주얼 모드는 일반 편집기에서 텍스트를 마우스로 드래그하듯이 선택할 수 있는 모드이다. 일반모드에서 비주얼 모드로 진입하는 방법은 크게 3가지이다.
- v : 칸 단위 선택 (— VISUAL —)
- V : 줄 단위 선택(— VISUAL LINE —)
- ctrl + v : 블록 단위 선택 (— VISUAL BLOCK —)
칸 단위 비주얼 모드에 진입 후, 일반모드에서 처럼 커서를 이동하면 아래처럼 텍스트를 선택하게 된다.
이 상태에서 y
를 누르면 선택된 텍스트가 복사(yank)되고, p
를 눌러 복사된 내용을 붙여넣기 할 수 있다.
y 대신 d
키로 자르기도 가능하다.
줄 단위 모드는 선택을 라인단위로 하고, 블록단위는 Ultraedit의 열모드와 유사하게 종단위로 텍스트를 선택할 수 있다.
복사/붙여넣기 기능을 자유자재로 사용하기 위해서는 비주얼 모드에 익숙해져야 하니 연습해보자.
2. 이동
- 1칸씩 이동
상하좌우 이동 : k, j, h, l
- 단어 단위 이동
다음 단어 첫 문자로 이동 : w
이전 단어 첫 문자로 이동 : b
다음 단어 끝 문자로 이동 : e
- 공백 단위 이동
공백 단위로 다음 단어 첫 문자로 이동 : W
공백 단위로 이전 단어 첫 문자로 이동 : B
공백 단위로 다음 단어 끝 문자로 이동 : E
- 문장 단위 이동
행에서 맨 앞으로 이동 : 0
행에서 맨 뒤로 이동 : $
행에서 공백을 제외한 맨 앞 문자로 이동 : ^
행에서 해당 문자로 이동 : f + 문자
행에서 해당 문자 앞으로 이동 : t + 문자
f나 t 명령어 수행 후
정방향으로 명령어 반복 수행 : ;
역방향으로 명령어 반복 수행 : ,
행에서 해당 문자로 이동(역방향) : F + 문자
행에서 해당 문자 앞으로 이동 (역방향) : T + 문자
- 스크롤
한 줄씩 아래로 스크롤 : Ctrl + e
한 줄씩 위로 스크롤 : Ctrl + y
반 페이지 아래로 스크롤 : Ctrl + d
반 페이지 위로 스크롤 : Ctrl + u
페이지 맨 위로 이동 : gg
페이지 맨 아래로 이동 : G
특정 행으로 이동 : :행번호
- 6번 행으로 이동 : :6 + Enter
3. Vim 의 변경 사항을 실행 취소
Vim은 현재 세션에서 변경한 모든 내용을 추적합니다.
실행 취소 명령은 하나 이상의 변경 사항을 수행한 순서대로 실행 취소합니다.
Vim 및 Vi의 변경 사항을 실행 취소하려면 u, :u
또는 :undo
명령을 사용합니다.
삽입 모드 또는 다른 모드에 있는 경우 Esc 키를 눌러 명령 모드라고도 하는 일반 모드로 돌아갑니다.
마지막 변경을 취소하려면 u
를 입력합니다.
Vim에서는 u 명령으로도 정량자를 사용할 수 있습니다.
예를 들어, 마지막 네 가지 변경 사항을 실행 취소하려면 4u
를 사용합니다.
대문자 U 명령이 아닌 소문자 u를 입력하여 한 줄에서 모든 최신 변경 내용을 실행 취소해야 합니다.
실수로 U를 입력하면 u로 변경 사항을 취소할 수 있습니다.
실행 취소 명령을 사용하여 삭제, 붙여넣기, 검색 및 바꾸기 등과 같은 다른 명령에서 변경한 내용을 되돌릴 수 있습니다.
삽입 모드에서 작업할 때 텍스트에 대한 모든 변경 사항은 실행 취소 트리에서 하나의 항목으로 간주됩니다.
예를 들어, 삽입 모드로 전환하고 5줄을 입력한 다음 일반 모드로 돌아가서 u를 눌러 변경을 취소하면 5개 라인이 모두 제거됩니다.
4. Vim 에서 변경 사항을 다시 실행
redo 기능은 실행 취소 작업을 반전합니다.
Vim 및 Vi를 다시 변경하려면 Ctrl-R
또는 :redo
를 사용합니다.
Esc 키를 눌러 정상 모드로 돌아갑니다.
마지막 변경을 다시 수행하려면 Ctrl-R(Ctrl 키를 누른 채로 r을 누름)을 사용합니다.
Vim에서는 정량자를 사용할 수도 있습니다.
예를 들어 마지막 변경 4개를 다시 실행하려면 4Ctrl-R
을 입력합니다.
각 실행 취소 명령은 redo 명령으로 되돌릴 수 있습니다.
Vim/Vi 변경 내용을 실행 취소하고 실행 취소된 변경을 다시 실행하려면 Ctrl-R 키 시퀀스를 사용합니다.
Vim은 분기 실행 취소도 지원합니다.
5. 문자열 검색하기
vim에서 특정 문자열을 검색하기 위해서는 일반모드에서 슬래시( /
) 키를 이용하여 검색 대화창을 띄워야 합니다.
화면 하단에 /
문자가 표시되며 커서가 활성화 되면 원하는 검색어를 입력할 수 있습니다.
간단하게 exit 라는 검색어를 입력해보겠습니다.
위와 같이 문서 전체에서 exit 라는 문자열을 모두 찾아 음영으로 표시해줍니다.
이 때 커서 위치는 현재 커서에서 가장 가까운 검색 결과로 자동으로 이동됩니다.
이 상태에서 n
키를 누르면 다음 검색 결과로 커서가 이동되며, N
(shift + n) 키를 누르게 되면 이전 검색 결과로 커서가 이동됩니다.
검색 결과의 마지막에 도달한 경우 n 키를 한번 더 누르면 맨 처음 결과로 되돌아갑니다.
6. 정규표현식으로 검색하기
앞서 말씀드린대로 vim에서의 검색 기능은 정규표현식을 지원하기 때문에 매우 강력합니다.
아래는 정규표현식을 써서 " " 로 감싸여 있는 문자열만 검색하는 예제입니다.
위에서 입력된 정규표현식 “.*” 를 간단하게 설명드리겠습니다.
먼저 특수기호 .
(마침표) 와 *
(별표: 애스터리스크)는 특별한 의미를 지니는 문자입니다.
.
기호는 모든 문자 1개와 매칭이 됩니다. 즉, 어떤 문자가 와도 상관이 없다는 의미입니다.
*
기호는 바로 앞 문자가 0개 이상 반복된다는 의미입니다.
0개부터 무한대로 반복되죠.
전체를 다 해석해보면 ” 로 시작하고 ” 로 끝나며 ” ” 사이에 어떤 문자가 몇 글자가 오던 전부 매칭이 되는 것이죠.
즉, ” ” 로 감싸여진 모든 문자열과 매칭됩니다.
7. 문자열 바꾸기
vim에서 문자열을 바꾸기 위해서는 명령행 모드에서 치환 명령어를 입력해야 합니다.
문자열을 바꾸는 명령어는 substitute 라는 단어에서 따온 s 이며 아래와 같은 형식으로 구성되어 있습니다.
(시작줄),(끝줄)s/찾을패턴/바꿀문자열/옵션
위와 같이 s 명령어 바로 앞에는 범위를 지정할 수 있는데, 문서 전체에서 바꾸기를 원하는 경우 %
라는 특수 기호를 사용합니다.
아래 예제에서는 : 키를 눌러 명령행 모드로 진입한 뒤 %s/exit/change/g
라고 치환 명령어를 입력하여 문자열을 바꿔봤습니다.
exit 를 change 으로 변경하는 예제. 변경이 적용된 라인 수를 알 수 있다.
위 예제에서는 /
(슬래시) 를 구분자(delimeter)로 사용하였지만, 바꾸고자 하는 패턴이나 문자열에 슬래시가 있는 경우 구분자를 @
또는 |
등으로 변경해서 사용할 수 있습니다.
%s!score!num!g
%s?score?num?g
%s#score#num#g
한 가지 주의하셔야 할 부분은 구분자를 위와 같이 통일시켜야 한다는 것입니다.
일부만 바꿔 쓰는 것은 허용되지 않습니다.
명령어의 가장 뒤에 옵션 부분에는 아래와 같은 옵션을 지정할 수 있습니다.
g
: 매칭되는 문자열을 물어보지 않고 변경
i
: 대소문자를 구분하지 않고 변경 (ignore cases)
c
: 매칭되는 문자열마다 바꿀 것인지 사용자에게 물어보고 변경
옵션은 두가지 이상 한번에 지정할 수 있지만 g
옵션보다 c
옵션이 더 우선됩니다.
찾을 패턴에는 정규 표현식을 사용할 수 있기 때문에 활용도가 매우 높습니다.
패턴을 사용하여 변경하는 경우 패턴이 의도한대로 동작하는지 검색을 통해 확인한 뒤에 바꾸기를 하는 것이 좋습니다.