콘텐츠로 건너뛰기
Home » Vim – 명령 입력 모드의 편집 기능

Vim – 명령 입력 모드의 편집 기능

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> : 커서위치의 파일 이름을 삽입
  • <code><C-R><C-P> : 커서 위치의 파일 이름을 확장하여 삽입
  • <code><C-R><C-W> : 커서 위치의 단어, <C-A>도 비슷함
  • <code><C-R><C-L> : 커서 위치의 줄 전체를 명령줄에 추가한다. vim 명령을 버퍼에 기록해두고 명령줄에서 바로 실행하려는 경우 등에 유용하게 사용할 수 있다.