익숙해지면 강력한 텍스트 에디터 vim의 가장 기본적인 사용법을 정리한다.

기본 작동 논리

vim에 들어오면, 기본(normal) 모드로 시작하는데, 이는 명령어 대기 모드이다. 입력 모드가 아닌 상태에서는 키보드 입력이 바로 글자 입력으로 인식 되지 않는다. 간단히 i를 눌러서 입력 모드로 들어가보자. 그리고 키보드 입력을 열심히 하면, vim 창에 글자 입력이 된다. 그리고 ESC키를 누르면 입력 모드에서 빠져나와 기본 모드로 들어온다. 이제 기본 모드에서 dd를 입력해보자. dd라고 입력되지 않고 명령어 dd가 실행되며, 이 뜻은 커서가 위치한 줄 삭제이다. 자신이 쓴 내용이 지워짐을 확인할 수 있다.

방향키에 자유로워 지고 기본 모드, 입력 모드, 수정 모드 등의 간략한 모드들만 이해하면 vim은 매우 효율적인 텍스트 에디터가 될 것이다.

vim이 없다면? 설치해야지


$ sudo apt-get install vim
$ vimtutor # 실행하면 live tutorial을 시작할 수 있다.

아래 내용은 vimtutor의 내용을 정리한 것이다. 시간이 된다면 vimtutor를 직접 완주하기를 권한다.


커서 이동

hjkl: 기본 이동

0, $: 줄의 처음과 끝으로 이동

gg, G: 문서의 처음과 끝으로 이동

#G: #번째 줄로 이동

이전 커서 위치로 가기 ctrl+o, 다시 되돌아갈 때는 ctrl+i

w (word): 다음 단어의 첫 글자로 이동

e (end of word): 현재 단어 포함 다음 단어의 끝 글자로 이동

%: 가장 가까운 괄호 글자로 이동


입력 모드

i: 커서 위치에서 바로 입력 모드 시작

a: 커서 위치 바로 다음에서 입력 모드 시작

A: 커서 줄 끝에서 입력 모드 시작

o: 커서 다음 줄에 새로 한 줄 만들고 거기서 입력 모드 시작

O: 커서 이전 줄에 새로 한 줄 만들고 거기서 입력 모드 시작


지우기

x: 커서 위치의 글자 삭제

d: 지우기 operator

d+(action): 현재 커서 위치에서 (action) 대로 지운다, 아래는 (action) 리스트

  • w: 단어 끝까지 지움
  • $: 줄 끝까지 지움
  • d: 그냥 그 줄 전체를 지움

d#+(action): 숫자# 만큼 반복 실행, 예를 들면

  • d3w: 커서 위치부터 단어 3개 삭제
  • d5$: 커서 위치부터 5줄 삭제

vim에서 지우기 = 잘라내기임을 기억하자. 메모리에서 기억하고 있으므로 직전에 지웠던 내용을 붙여넣기할 수 있다.


수정 모드

R: 커서 위치부터 수정 모드 시작

r: 일회용 글자 단위 수정

c: 수정 operator

지우기 operator d처럼 c+(action)으로 여러 수정 행동을 할 수 있다.

  • cw 또는 ce: 현재 커서부터 한 단어 끝까지 지우고 입력 모드로 변경
  • c$: 현재 커서부터 줄 끝까지 지우고 입력 모드로 변경
  • c#+(action): 숫자# 만큼 반복 실행


실행 취소

u: 평범한 실행 취소

U: 해당 줄의 모든 변경 사항 취소

ctrl+r: 다시 실행


선택 모드, 복붙

v: 선택모드, v 입력 이후 hjkl키로 직접 영역 선택 가능

  • 선택 후 d 입력 시 선택 영역 삭제
  • 선택 후 : 입력 시 :'<,'> 라는 명령이 자동으로 입력되어 나오는데, 여기에 추가로 :'<,'>w filename 으로 선택 영역만 따로 저장
  • 선택 후 y 입력 시 복사

y: 복사 operator

  • y+(action): 커서부터 (action)에 따라 복사
  • yw: 한 단어 복사
  • y$: 줄 끝까지 복사
  • y#+(action): 자세한 설명은 생략한다

p: 붙여넣기


외부 명령 실행

:!: shell_command

  • 예) :!ls
  • 실행 후 enter 키를 통해 되돌아오거나, 계속 추가적으로 외부 명령을 입력할 수 있다.


파일 read/write

:q!: 저장 안하고 나가기

:wq: 저장하고 나가기

:w: 저장만 하기

:r filepath: 파일을 읽어서 현재 커서부터 그 내용 쓰기

  • 외부 명령의 output도 읽을 수 있다. 예) :r :!ls


찾기, 찾아바꾸기

/, ?: 찾기 operator / (순방향), ? (역방향)

  • /text, ?text 입력 후 enter키로 가장 가까운 것을 찾음
  • n으로 다음 검색, N으로 이전 검색 (순방향, 역방향에 따라 달라진다)

:s, :%s: 찾아바꾸기 명령

  • :s/old/new: 현재 위치한 줄에서 oldnew로 한 번 바꿈
  • :s/old/new/g: 현재 위치한 줄에서 모두 바꿈
  • :#1,#2s/old/new/g #1번째 줄부터 #2번째 줄까지 모두 바꿈
  • :%s/old/new: 문서 전체에서 한 번 바꿈
  • :%s/old/new/g: 문서 전체에서 모두 바꿈
  • :%s/old/new/gc: 문서 전체에서 모두 바꾸는데, 하나씩 물어봐준다.

\c: 명령 뒤에 붙여서 일회용으로 대소문자 구별 안하기 (e.g. /searchtext\c)


설정 변수 :set

여러 vim 설정을 바꿀 수 있다. 예를 들면 다음과 같은 찾기 관련 설정을 바꿀 수 있다.

:set ic (ignore case): 이제부터 대소문자 구별하지 않고 검색한다.

:set noic: 다시 대소문자 구별하게 검색한다.

:set hls (highlight search): 검색 결과를 하이라이트 표시해준다.

:set is (incremental search): 한 글자씩 쓸 때마다 검색이 반응 (직접 해보길)


이러한 설정들을 vim을 열 때마다 하나씩 다 입력하고 시작할 수는 없는 법. 설정 파일을 따로 만들어 저장하고, 이를 기반으로 vim을 시작하면 된다.

  • 새로 vim을 열고, :r $VIMRUNTIME/vimrc_example.vim 을 입력하면 예제 설정 템플릿을 로드할 수 있다.
  • :w .vimrc 로 저장
  • 이제 vim을 새로 시작하면 저장된 설정대로 vim이 작동할 것이다.


도움 받기

:help: 도움말 보기 (나갈 때는 :q)

:help command: 명령에 대한 도움말 보기 (e.g. :help w, :help c_CTRL-D, :help insert-index, :help user-manual)

실시간 도움 설정

  • :set nocp no-compatibility mode에서 가능하므로 이를 확실히 실행
  • :e 까지 입력 후 ctrl+d 를 누르면 e로 시작하는 명령 목록을 볼 수 있다. 탭키를 통해 자동 입력할 수 있다.