vim을 사용하다보면 입력모드 만큼이나 명령모드도 많이 쓰게 된다. 오늘은 명령모드 혹은 Ex모드에서 알아두면 유용할 몇 가지 팁을 소개한다.
다음은 명령줄에서 명령을 입력할 때 사용할 수 있는 기본적인 편집키이다.
<Left>
,<Right>
: 좌우 화살표키로 커서를 옮길 수 있다.<UP>
,<Down>
: 이전, 이후 명령을 명령줄로 가져온다.<S-Left>
,<S-Right>
: Shift 를 누르면서 커서를 옮기면 커서가 지나간 자리가 선택된다.<Ins>
: 삽입/수정 모드를 전환한다.CTRL-B
,<Home>
: 명령줄의 처음으로 커서를 이동한다.CTRL-E
,<End>
: 명령줄의 끝으로 커서를 이동한다.CTRL-H
,<BS>
: 커서 왼쪽의 글자를 지운다.<Del>
: 커서 위치의 글자를 지운다.CTRL-W
: 커서 왼쪽의 단어를 지운다.CTRL-U
: 명령줄 전체를 지운다.
명령줄 자동완성
vim의 명령줄도 기본적으로 별도의 설정 없이도 <Tab>
키를 사용하여 문맥에 맞는 자동완성을 사용할 수 있다.
- 명령 이름은 일부만 입력한 후, 자동완성으로 입력 가능하다.
:tag
명령 다음에는 태그 이름을 자동 완성할 수 있다.- 파일 이름을 인자로 받는 명령이나, 파일 경로를 설정하는 경우, 파일 경로의 일부를 입력하여 경로를 자동완성할 수 있다.
:!cmd
나:r !cmd
등의 명령 다음에는 쉘 명령 자동완성이 가능하다.:set
명령 다음에는 옵션에 대한 자동완성이 지원된다.:if
,:call
다음에는 변수 및 함수에 대한 자동 완성이 지원된다.
명령줄에서 명령의 일부를 입력한 상태에서 <Tab>
키를 누르면 입력한 내용으로 시작하는 명령이나 설정 이름등이 자동 완성된다. 만약 매치하는 내용이 2개 이상이라면 <Tab>
키를 누를 때마다 매치 후보가 변경되면서 입력된다. 또 명령 모드에서만 가능한 기능으로, <C-D>
를 눌러서 가능한 전체 후보를 확인할 수 있다.
'wildmenu'
옵션을 설정하여 활성화하였다면, 탭 키를 눌러서 자동 완성을 시작할 때 매치 가능한 다른 후보들이 명령줄 위쪽으로 표시되어 미리 찾아 볼 수도 있다. 이 상태에서는 입력모드와 같이 이전/이후 후보를 이동할 수도 있다.
<Tab>
/<C-i>
: 자동완성 호출<C-P>
,<C-N>
: 자동완성 항목의 이전/다음 항목 선택<C-D>
: 매치가능한 모든 항목을 표시<C-A>
: 매치되는 모든 항목을 삽입
재밌는 점은 /
키를 통해 검색을 수행할 때, 검색 패턴을 입력하는 영역 역시 커맨드 라인이라는 점이며, 이 경우에는 다음과 같은 키가 추가적으로 지원된다.
<C-G>
,<C-T>
: 현재까지 입력한 패턴에 대해서 이전/다음 위치로 커서를 이동시킨다.<C-L>
: 입력한 내용에 매치되는 부분을 찾고, 점점 더 긴 패턴으로 확장한다.
<C-L>
의 경우가 재미있는데, 본문에 match
란 단어가 있을 때, /ma
까지 입력한 후 Ctrl+L을 누르면 t, c, h로 입력된 내용이 점점 매칭되는 패턴으로 확장된다.
명령줄용 키 맵핑
cmap
을 사용하면 명령 모드에서 명령 입력줄에서 편집할 때 사용될 키맵을 작성할 수 있다. 많이 쓰는 키맵 설정으로는 (개인적으로 즐겨쓰는) 입력모드와 마찬가지로 jk
를 눌러서 빠져 나온다던지, 혹은 <expr>
키 맵을 사용해서 특정한 변수나 함수 실행 결과를 바로 삽입하는 경우도 있다. 아래 예는 명령 모드에서 jk를 입력했을 때 다시 일반 모드로 빠져나오게 하는 것이다.
:cnoremap jk <Esc>
고급 편집 – 레지스터
명령 모드에서 명령줄을 입력하는 중에 <C-R>
을 누른 후 레지스터 이름을 입력하면 해당 레지스터의 내용을 명령줄에 입력할 수 있다.
"
: 이름 없는 레지스터. 방금 전 복사했거나 삭제한 내용%
: 현재 파일 이름#
: 대체 파일 이름*
: 클립보드 (+
도 가능)/
: 마지막 검색 패턴-
: 마지막 삭제 내용 (한줄 이내)=
: 표현식 패턴
<C-R>=
를 누르면 입력 프롬프트가 ‘=’ 으로 표시되는데, 여기에 표현식을 작성하여 그 결과를 명령줄에 삽입할 수 있다. 여기서는 간단한 연산외에도 함수를 호출할 수 있다.
그외에 <C-R>
을 누른 후 다음 키를 눌러서 입력을 확장할 수 있다. 이게 나름 유용하다.
<C-R><C-F>
: 커서위치의 파일 이름을 삽입
: 커서 위치의 파일 이름을 확장하여 삽입<C-R>
<C-P>
: 커서 위치의 단어,<C-R>
<C-W><C-A>
도 비슷함
: 커서 위치의 줄 전체를 명령줄에 추가한다. vim 명령을 버퍼에 기록해두고 명령줄에서 바로 실행하려는 경우 등에 유용하게 사용할 수 있다.<C-R>
<C-L>