Home » Vim 설정 관련 팁

Vim 설정 관련 팁

옵션 목록과 도움말 찾기

옵션을 설정하기 전에 옵션에 관한 도움말을 읽어보는 것을 권장한다. 전체 옵션을 한 눈에 볼 수 있는 명령으로 :opt 가 있다. 이 명령을 실행하면 현재 창에서 새 분할 창이 생겨서, 전체 옵션이 망라되고 간단한 설명과 현재 설정되어 있는 값을 확인할 수 있다. 분할창을 전체 창으로 보려면 ctrl-w o를 누른다. (<ctrl-w>를 누른 후 <o> 키를 한 번 더 누르면 된다.)

옵션 창에서 옵션 이름 위에서 K (대문자이므로 <shift-k>를 누를 것)를 누르면 해당 항목에 대한 도움말을 추가로 표시할 수 있다. 그외에 도움말을 보는 명령으로 :h 가 있는데, 참고로 vim 문서에서 모든 옵션은 홑따옴표로 싸여있기 때문에 따옴표를 먼저 넣고 앞부분을 타이핑하면 쉽게 자동완성할 수 있다. 이는 명령 모드에서 직접 설정을 변경할 때에도 유용하게 사용될 수 있다. 예를 들어 :set 'shi<Tab>을 치면 ‘shiftround’나 ‘shiftwidth’ 같은 옵션만 자동완성해서 찾아볼 수 있다.

:set 명령 사용법

Vim에는 동작을 제어하는 많은 옵션과 내부 변수들이 있다. 이 옵션들은 주로 불리언, 숫자, 문자열의 타입들로 설정된다. :set 명령은 옵션을 설정할 때 사용하는 명령이다. 이 명령은 :se로 줄여서 사용할 수 있다. 통상 “:set 옵션=값” 의 형태로 쓰거나, 토글되는 경우에는 “:set 옵션” / “:set no옵션“의 형태로 실행하여 옵션을 변경할 수 있다. 다음은 :set 명령에 대한 몇 가지 도움되는 정보이다.

  • :set – 디폴트가 아닌 모든 옵션을 보여준다.
  • :set {option}? – 특정한 옵션의 현재 설정값을 보여준다.
  • :set all – 모든 옵션을 보여준다. (터미널 옵션 제외)
  • :set termcap – 모든 터미널 옵션을 보여준다.
  • :set no{option} – 토글되는 옵션은 off 하기 위해 no를 접두어로 하는 옵션명이 존재한다.
  • :set {option}!no-를 쓰지 않고 옵션을 토글할 때 사용한다. 비슷하게 :set inv{option}이 있다.
  • :set {option}& – 해당 옵션을 디폴트값으로 되돌린다 {optioin}&vi 는 vi의 디폴트값으로 설정하며, {option}&vim은 vim의 디폴트값으로 설정된다. vi/vim 없이 끝에 & 만 있을 때의 동작은 compatible 옵션값에 의해 결정된다.
  • :set all& : 몇몇 옵션을 제외하고 모든 옵션을 리셋한다. 여기에 포함되지 않는 옵션은 다음과 같다. columns, crpytomethod, encoding, key, lines, term, ttymouse, ttytype
  • :set {option}={value}, :set {option}:{value} : 옵션 값을 설정하는 기본적인 문법이다.
  • :set {option}+={value} – 옵션값에 숫자값을 더하거나, 문자열/리스트 값이면 뒤에 추가한다.
  • :set {option}^={value} – 옵션값에 숫자값을 곱하거나, 문자열/리스트의 앞에 추가한다.
  • :set {option}-={value} – 옵션값에서 숫자값을 빼거나, 문자열/리스트 옵션에서 제거한다.

:set 명령은 한 번에 여러 개의 옵션을 설정할 수 있다.:set ai nosi sw=4 ts=4 이런 식으로 한 번에 여러 설정을 할 수 있다. 연관되는 옵션을 같은 줄에서 한 번에 설정하면 가독성을 높이는데 도움이 되고 나중에 관리하기도 편하다.

로컬 옵션

:setlocal 명령을 사용하면 특정 버퍼 혹은 창에만 한정되는 옵션을 설정할 수 있다. 이 명령은 주로 특정한 타입의 파일을 열었을 때 해당 버퍼에만 적용되는 설정을 적용할 때 사용한다. 따라서 :autocommand 블럭이나, 파일 타입별 스크립트 파일 내에서 사용되는 경우가 많다.

명령모드에서 :setlocal all을 실행하면 전역 옵션과 다른 모든 로컬 옵션들이 표시된다. 이 때 앞에 “–“이 붙는 옵션들이 있는데, 이런 옵션들은 로컬 옵션을 따로 가지지 않는 것들이라, 전역 옵션값이 그대로 사용되었음을 알려준다.

:setlocal {option}< 을 사용하면 전역 옵션 값을 로컬 옵션 값으로 덮어쓴다.

참고로 로컬옵션으로 설정된 값들은 창을 분할하여 새로운 창을 만들면 새로 만들어진 분할창으로 복사된다.


파일에 vim 설정을 기록해두는 모드라인

특정한 파일을 열었을 때, 별도의 파일타입 혹은 로컬 설정이 없더라도 어떤 옵션이 적용될 수 있도록 파일의 첫줄이나 끝줄에 옵션 정보를 기입해 둘 수 있다. 이를 modeline 이라 한다. 모드라인은 [텍스트]{공백} vi:{공백}[set]{옵션} ... 의 형태로 기록한다. 앞의 텍스트는 주로 주석을 표시하는 기호를 사용한다. vim은 이러한 모드라인을 포함한 파일을 열면, 연 직후에 해당 모드라인의 설정을 현재 버퍼에 적용해준다.


스크립트에서 옵션을 제어하는 방법

vimscript에서 옵션 값을 변수처럼 액세스하는 것이 가능한데, 모든 옵션은 &{옵션}의 모양으로 변수처럼 읽고 쓸 수 있다. 어떤 옵션들은 vim의 버전이나 컴파일 방법에 따라서 비활성화되거나 아예 존재하지 않을 수 있다. vimscript에서 이런 옵션들에 대해서 값을 세팅하게 되면 에러가 나지 않고 무시된다. 특정한 옵션이 있는 지를 검사하려면 exists() 함수를 사용하면 된다.

:echo exists('&mousefocus')

위 코드는 'mousefocus'옵션이 현재 사용중인 vim의 빌드에 존재하는지를 알려준다. 어떤 옵션들은 vim에 포함은 되어 있지만, 실제로 사용할 수 없는 옵션들도 있다. 실제 사용 가능한 옵션인지를 확인하려면 '&option' 대신 '+option'을 사용하면 된다.

" mousefocus 옵션이 존재하지만 사용할 수 없을 때
:echo exists('&mousefocus')
1
:echo exists('+mousefocus')
0
" 값을 설정해본다
:let &mousefocus=1
" 에러는 나지 않지만 사용할 수 없다. 사용할 수 없는 옵션 변수의 값은 항상 0이다.
:echo &mousefocus
0

댓글 남기기