1. 노멀 모드

- 기본 모드로서, 하나 이상의 키를 입력하여 명령을 실행하는 모드. 대개 하나의 키로 명령을 수행하는 경우가 많지만 조합 방식에 따라 그 이상의 키를 입력하는 경우도 있다. 모든 모드의 기본 모드이므로, 다른 모드로 전환됐다가도 ESC키를 누르면 돌아올 수 있다.

- 이 모드에서는 키 입력으로 파일에 특정 내용을 삽입할 수 없다(이는 입력모드에서만 가능). 다만 삭제 같은 명령어를 통해 내용을 수정하는 것은 가능하다.

1) 이동 관련 명령

(1) 커서, 줄 단위 이동

  • h, j, k, l: 좌, 하, 상, 우

  • 숫자 + h,l, , , BACKSPACE, Space Bar: 현재 커서에서부터 그 숫자 개수만큼 좌/우로 글자 이동

  • 숫자 + , , j, k: 현재 커서에서부터 그 줄만큼 위/아래로 이동.

    • 13인치 노트북, 폰트 크기 13포인트일 때 한 페이지가 약 40줄 정도 되므로, PgUp이나 PgDn키를 누르고 싶다면 40줄 정도를 기준으로 이동할 줄수를 계산해서 이동하면 된다.

      • 100줄 미만 이동할 땐 이 방식은 다소 비효율적으로 느껴지지만, 그 이상 이동할 땐 매우 효율적이다. 예를 들어 111줄, 222줄을 이동하는 건 PgUp, PgDn키 연타보다 이 방식이 더 효율적이다.

      • 페이지 안에서 이동할 때에도 이 방식이 화살표를 연타하는 것보다 훨씬 효율적이다. 예를 들어 페이지 최상단 또는 최하단으로 이동하고자 할 땐 11줄, 22줄을 입력해 빠른 시간 내에 커서를 이동할 수 있다.

  • 숫자 + G: 그 숫자에 해당하는 줄로 이동.

(2) 단어 단위 이동

  • w: 현재 있는 단어의 다음 단어의 시작 위치로 이동. (“word”에서 따옴.)

  • e, b: 현재 있는 단어의 끝위치(e, “end”에서 따옴) 또는 처음 위치(b, “begin”에서 따옴)로 이동. 만약 이미 그 단어의 끝위치 또는 처음 위치에 있다면 그 단어의 바로 다음 단어의 끝위치 또는 전 단어의 처음 위치로 이동한다.

    • 텍스트 편집과 커서 이동에서 중요한 것은 현재 커서가 있는 위치의 앞/뒤 단어의 시작 위치로 이동하는 것이고, 이 점에서 앞으로 가기 위해서는 b를 연타하는 것이 좋고, 뒤로 갈 때는 w를 누르는 것이 좋다.
  • ge: 현재 있는 단어의 바로 전 단어의 끝위치로 이동.

  • 숫자 + w, e, b, ge: 그 숫자 개수만큼의 단어를 이동한다.

    • wb가 가장 유용하기 때문에 이 두 키와 숫자의 조합 역시 잘 기억해두는 게 좋다.
  • #, *: 현재 있는 단어와 일치하는 단어를 파일 내에서 찾아 그 앞/뒤에서 가장 가까운 위치로 이동한다.

  • 숫자 + #, *: 그 숫자 개수만큼의 단어를 이동한다.

(3) 줄 안에서의 이동

  • f + 글자: 그 줄에서 현재 커서보다 뒤에 있는 문자 중 그 글자와 일치하는 글자가 있는 가장 가까운 위치로 이동한다.

  • ^, $: 현재 있는 줄의 맨앞(들여쓰기 뒤) 또는 맨뒤로 이동.

  • 0: 현재 있는 줄의 들여쓰기 포함한 맨 앞 글자로 이동.

  • 숫자 + $: 그 숫자 개수만큼 아랫줄 맨 뒤로 이동한다.

(4) 괄호 단위 이동

  • %: 현재 속한 괄호의 첫 위치로 이동. 만약 첫 위치 또는 괄호 밖이라면, 가장 가까운 괄호의 끝 위치로 이동.

(5) 문단 단위 이동

  • {, } 또는 ): 현재 있는 문단의 첫줄 바로 위, 끝줄 바로 다음으로 이동. 이미 그 위치에 있다면 바로 그 위/아래 문단으로 이동.

  • (: 현재 있는 문단의 첫줄 맨앞 위치로 이동.

  • 숫자 + (, ), {, } : 그 숫자 개수만큼의 문단 이동

(6) 페이지 단위 이동

  • Ctrl + u, d: 페이지 업, 페이지 다운

(7) 화면 최상단, 최하단

  • gg, G: 최상단, 최하단

(8) 파일 탭 단위 이동

  • gt, gT: 현재 있는 탭의 바로 다음 탭/바로 앞 탭으로 이동.

2) 비주얼 모드

- 일반적인 텍스트 편집기에서 Shift + 방향키로 텍스트 블록을 설정하는 것 같은 작업을 Vim에서도 할 수 있는데, Vim에서는 블록 설정을 수행하는 작업모드를 비주얼 모드라 한다.

- 비주얼 모드로 전환한 후 커서 이동을 위한 노멀 모드 명령어를 입력하면 비주얼 모드로 전환을 시작한 지점에서부터 노멀 모드 명령어 입력으로 커서가 이동한 위치까지 블록이 설정되며, 그 상태에서 삭제/복사 등의 작업을 수행할 수 있다.

  • v: 현재 커서가 있는 글자에서부터 비주얼 모드 전환.

  • V: 현재 커서가 있는 에서부터 비주얼 모드 전환.

  • Ctrl + v: 열 단위 비주얼모드 전환.

3) 복사, 삭제/삭제 후 입력, 선택

- 복사 키(y), 삭제 키(x, d), 삭제 후 입력 키(s, c), 선택 키(v)와 숫자, 글자를 조합해 보다 넓은 범위의 영역에 대해 이러한 작업을 수행할 수 있다.

- 아래는 삭제 키(x, d)를 기준으로 설명하나, 다른 키 조합으로도 같은 범위의 영역에 대해 각 작업을 수행할 수 있다.

  • x, dd: 현재 커서가 있는 글자, 줄 삭제. 단, 이는 엄밀히 말해 ‘잘라내기’에 해당해 여기서 삭제한 후 커서를 이동해 그곳에 p를 통해 그 내용을 붙여넣기 할 수 있다.

  • 숫자 + x: 현재 커서에서부터 그 숫자 개수만큼의 글자 삭제.

  • 숫자 + dd: 현재 커서에서부터 그 숫자 개수만큼의 줄 삭제.

  • dw 또는 de, d$: 현재 커서가 있는 위치부터 그 단어/줄 끝까지 삭제.

  • db, d^: 현재 커서가 있는 위치부터 그 단어/줄 맨앞까지 삭제.

  • d + 숫자 + w, e, b, ge: 그 숫자 개수만큼의 단어를 삭제한다.

  • d + 숫자 + j, k: 현재 커서가 있는 데서부터 숫자 개수만큼의 줄을 삭제한다.

  • da 또는 di + w, p: 현재 커서가 있는 데서부터 하나의 단어, 문단을 삭제한다.

  • da 또는 di + (, ), {, }, [, ], ', ": 현재 커서를 둘러싼 괄호, 따옴표 안 전체를 삭제한다. (di는 괄호, 따옴표 포함 삭제. da는 제외.)

  • df 또는 dt + 글자: 현재 커서가 있는 데서부터 이 이후 그 글자가 나올 때까지 모두 삭제한다. (f는 그 글자 포함 삭제. t는 제외.)

  • d + /, ?로 시작하는 검색 쿼리: 현재 커서가 있는 데서부터 그 검색 쿼리까지 모두 삭제한다.

4) 기타 텍스트 편집

  • xp: 현재 커서가 있는 글자와 그 바로 뒤 글자의 순서를 바꾼다. (x가 현재 커서가 있는 글자를 자르는 키고, p가 이를 붙여넣는 키라 만들어진 조합.)

  • J: 현재 커서가 있는 줄의 바로 다음 줄을 그 윗줄의 뒤에 이어 붙인다.

  • ~: 현재 커서가 있는 글자의 대소문자를 바꾼다.

  • .: 방금 수행한 텍스트 편집 명령을 반복한다.

  • <<, >>: 들여쓰기를 추가하거나 지운다.

2. 커맨드 라인 모드

- :, /, ? 같이 커맨드 라인 모드임을 알리는 키와 조합하여 여러 개의 커맨드를 입력하고 엔터를 쳤을 때 비로소 입력한 명령들이 실행되는 모드. 노멀 모드에서 :, /, ? 키를 눌렀을 때 커맨드 라인 모드로 전환된다.

(1) 이동 관련 명령

  • : + 숫자: 그 수에 해당하는 줄로 이동한다.

(2) 찾아 바꾸기

  • :s/ + (찾으려는 텍스트) + / + (바꾸려는 텍스트): 그 줄에서 텍스트를 찾아 지정한 텍스트로 맨 앞 하나만 변경한다. 옵션 추가 시 모든 텍스트 한 번에 변경할 수 있다.

  • :%s/ + (찾으려는 텍스트) + / + (바꾸려는 텍스트): 파일 전체에서 텍스트를 찾아 지정한 텍스트로 각 줄의 맨 앞 하나만 변경한다. 옵션 추가 시 모든 텍스트 한 번에 변경할 수 있다.

  • : + (시작 행번호) + , + (끝 행번호) + s/ + (찾으려는 텍스트) + / + (바꾸려는 텍스트): 두 줄 사이에서 텍스트를 찾아 지정한 텍스트로 각 줄의 맨 앞 하나만 변경한다. 옵션 추가 시 모든 텍스트 한 번에 변경할 수 있다.

    • /g: 각 줄의 모든 텍스트를 변경하는 옵션. (“global”에서 따온 것.)

    • /gc: 각 줄의 모든 텍스트를 변경하되 물어보면서 변경하는 옵션. (“confirm”에서 따온 것.)

(3) 검색

  • / 또는 ? + (찾으려는 키워드): 문서 내에서 텍스트를 찾을 때 사용하는 커맨드. 엔터 입력 시 현재 커서에서 아래(/의 경우) 또는 (?의 경우)에 있는 텍스트 중 입력된 키워드와 일치하는 텍스트가 가장 먼저 나타나는 곳으로 이동한다.

    • n, N: 검색 키워드 입력 후 그 키워드를 발견한 위치에 도착했을 때, 다음 검색 위치/이전 검색 위치로 이동하게 하는 명령키.

3. 입력 모드

- 필수적으로 알아야만 하는 키는 i이지만, a(커서 위치한 글자 뒤에서 입력모드 전환), o(커서 위치한 아랫줄에 빈줄 추가하고 입력모드 전환), A(커서 위치한 줄 끝에서 입력모드로 전환), s, c(커서 위치 글자 지우고 입력모드 전환)키도 익숙해지면 Vim을 매우 효과적으로 활용할 수 있다.

  • i, a: 현재 커서가 위치한 문자의 앞/뒤에서 입력 모드로 전환.

  • I, A: 현재 커서가 위치한 줄의 맨앞/맨뒤에서 입력모드로 전환. ^i, $a와 같다.

    • A는 어떤 줄에서 코드를 작성하다 커서를 옮겨 다른 부분을 수정한 후 다시 그 줄로 왔을 때 유용하다.
  • O, o: 현재 커서가 위치한 줄의 바로 윗줄/아랫줄에 빈 줄을 추가하고 그 빈 줄에서 입력모드로 전환. I 또는 A + Enter와 같다.

    • o는 코드 내에 새로운 코드를 쓸 빈줄을 만들 때 특히 유용하다.
  • R: 덮어쓰기를 하는 입력 모드로 전환. 일반적인 워드프로세서에서 Insert키를 입력해 전환하는 모드와 같다.




* Google Chrome Extension인 Vimium 전용 단축키

(1) 기존 Vim의 모드들

  • 노멀 모드: 원칙적으로 페이지가 열린 상태에서 키 입력은 노멀 모드에 대한 입력으로 간주됨. (그 페이지가 원래 JS로 키보드 입력을 리슨하는 이벤트 리스너가 있어도 작동하지 않는다.) 단, <textareat> 태그나 <input> 태그에 커서가 있을 땐 Vimium의 모든 기능이 동작하지 않는다. (ESC키로 빠져나와야 하며, 빠져나올 수 없는 페이지에서는 사용할 수 없음.)

  • 비주얼 모드: 페이지 내 텍스트를 선택해서 카피하고자 할 때 사용할 수 있는 모드. /을 통해 본문에서 카피할 텍스트 위치를 찾고(이때 커서가 그 텍스트 위치로 이동한다) 그 위치에서 비주얼 모드로 전환한 다음에 커서를 이동시켜 카피할 전체적 텍스트 범위를 확정한다.

  • 입력 모드: JS로 키보드 입력을 리슨하는 이벤트리스너가 있을 때, 입력 모드로 전환하면 그 이벤트리스너가 키 입력을 받아들인다.

  • 커맨드 라인 모드: /가 지원된다.

(2) 페이지 내 기능

  • d, u: 반페이지 아래, 위

  • f, F: 페이지 안에 클릭할 수 있는 모든 객체들에게 단축키를 지정해 이름표를 띄워준다. 핵심기능. (F는 선택 시 새 창을 띄워줌.)

  • r: 새로고침

  • x, X: 탭 닫기, 닫은 탭 복구

  • gi: 페이지 내 첫 번째 텍스트 입력창에 포커스

  • gf: 페이지 내 아이프레임이 있을 때, 현재 아이프레임에서 다음 아이프레임으로 넘어가게 하기

  • gF: 페이지 내에서 가장 바깥 단계에 있는 아이프레임에 포커스

  • m + 한 글자: 페이지 내에서 현재 보고 있는 위치에 ‘마크’를 설정. 이와 같이 마크를 설정했다면, 이후 페이지 내 다른 영역으로 스크롤을 이동했다 하더라도 `를 누른 후 그 글자를 눌러 그 글자로 마크를 표시한 곳으로 즉시 이동할 수 있다.

    • Vimium에서는 숫자를 쓸 일이 없으므로 숫자를 통해 마크를 지정하는 게 가장 편하다.

(3) 페이지 이동 구

  • H, L: 뒤로, 앞으로

  • o, O: 북마크, 내가 방문한 히스토리에서 검색해 이동하기. (O는 선택 시 새 창을 띄워줌.)

  • b, B: 북마크에서 검색해 이동하기. (B는 선택 시 새 창을 띄워줌.)

(4) 탭 이동

  • T: 현재 열려있는 모든 탭 목록을 띄워준다. 탭 이름을 검색해 이동할 수 있다.

  • ^: 현재 탭 오기 전 마지막 탭을 다시 열어준다.

  • t: 새 탭을 띄워준다.

  • yt: 현재 탭을 복제한다.

  • p, P: 클립보드 내용을 주소창에 붙여넣어 검색 또는 이동한다. (P는 새 창을 띄워줌.)