Heesung Yang

소스코드 내에(텍스트 파일) vim 옵션 설정하기

가끔 원격 서버에서 vim으로 파일을 편집해야 할 때가 있다. 원격 서버는 개인용이 아니므로 보통 ~/.vimrc 설정이 없다. 이 경우 vim으로 파일을 열어 tab키를 누르면 8칸씩 들여쓰기가 되고 tab 문자가 입력된다. 사람마다 호불호가 갈리지만 필자는 tab 대신 space 사용을 선호하며 들여쓰기 간격은 4칸을 선호한다.

이를 위해 서버마다 ~/.vimrc 를 설정할 수는 없는 노릇이니 대신 내가 생성한 파일마다 이런 설정값을 넣을 수 있다. 이를 modeline 기능이라고 하며 다음과 같이 동작한다.

  • 파일의 시작 또는 끝부분 5줄을 읽어 들인다.

    • 5줄은 설정 변경 가능하다. 그러나 바꿀 경우는 거의 없다. 아래는 10줄로 바꾸는 방법.

      :set modelines=10
      
  • 읽어들인 내용에 아래 형식으로 된 문자열이 있을 경우, 해당 vim 옵션을 적용한다.

첫 번째 형식

[text]{white}{vi:|vim:|ex:}[white]{options}
  • [text] : 아무 문자(들) 또는 없어도 ok
    • 편집하는 파일이 프로그램 소스코드인 경우 주석처리를 해야 컴파일 오류나 실행 오류가 발생하지 않으므로 주석 문자 입력을 위해 필요한 부분
  • {white} : 공백 (Space or Tab)
  • {vi:|vim:|ex:} : vi: 또는 vim: 또는 ex:
  • [white] : 공백 있어도/없어도 ok
  • {options} : 적용하고자 하는 설정들, 공백 또는 : 문자로 각 설정을 구분

Examples

  • example #1

    #include <stdio.h>
    
    int main() {
        printf("hello vim!\n");
        return 0;
    }
    // vim: ts=4:sw=4:expandtab
    
  • example #2

    # vim: ts=4 sw=4 expandtab ai
    print("hello vim!")
    

두 번째 형식

vi와의 호환을 위한 형식이기 때문에 거의 사용되지 않는다.

[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
  • [text] : 아무 문자(들) 또는 없어도 ok
  • {white} : 공백 (Space or Tab)
  • {vi:|vim:|Vim:|ex:} : vi: 또는 vim: 또는 Vim: 또는 ex:
  • [white] : 공백 있어도/없어도 ok
  • se[t] : set 또는 se 입력 후 한칸 띄어쓰기. :Vim 으로 설정했을 경우 set으로 설정해야 함
  • {options} : 적용하고자 하는 설정들, 공백으로 각 설정을 구분
  • :[text] : : 이후 아무 문자(들) 또는 없어도 ok

examples

/* vim: set ai tw=75: */
/* Vim: set ai tw=75: */

Reference: :help modeline