Vim 명령키
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: 그 숫자 개수만큼의 단어를 이동한다.w와b가 가장 유용하기 때문에 이 두 키와 숫자의 조합 역시 잘 기억해두는 게 좋다.
-
#,*: 현재 있는 단어와 일치하는 단어를 파일 내에서 찾아 그 앞/뒤에서 가장 가까운 위치로 이동한다. -
숫자 +
#,*: 그 숫자 개수만큼의 단어를 이동한다.
(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는 새 창을 띄워줌.)