유닉스 환경에서 널리 사용되는 vim 에디터는 문법 강조 기능을 제공한다. 이를테면 확장자가 .java로 끝나는 파일은 Java, .pl인 파일은 Perl 언어에 맞는 문법 강조가 적용된다. 확장자에 따른 문법 적용은 vim이 설치된 디렉토리의 filetype.vim에 정의되어 있다. 필자가 사용하는 서버에서는 /usr/share/vim/vim63/filetype.vim에 해당한다. 설치 위치와 vim 버전에 따라 위치가 조금씩 다를 수있다.
filetype.vim 파일의 중간쯤을 보면 아래와 같은 부분이 있다. 암호 같아 보이는 이 부분은 특정한 확장자에 적용된 문법 파일을 정의한다. 필자의 경우 문법 파일은 /usr/share/vim/vim63/syntax 디렉토리에 존재하며, 각 파일의 이름은 아래 예제에서 setf 뒤의 값에 해당한다. 보통 확장자와 동일하게 사용하는 편이다.
새로운 확장자 추가
새로운 확장자에 대한 문법 강조를 적용하고 싶다면 어떻게 할까? 이를테면 .vh 확장자 파일에 Verilog 문법을 적용시키고 싶다고 하자. 이를 위한 코드는 매우 간단하다.
문제는 이 코드를 어디에 추가할 것이냐에 있다. 크게는 아래와 같은 두 가지 방법이 있다.
기본 지원 확장자가 아닌 경우
가끔씩 문법 적용 파일이 아예 존재하지 않는 확장자들이 있다. 이를테면 Cadence Spectre 프로그램의 확장자인 .scs에 대한 문법 적용 파일은 vim에 포함되어 있지 않다. 하지만, 인터넷 검색을 통해 spectre.vim이라는 문법 적용 파일을 쉽게 얻을 수 있다. 문제를 이를 어떻게 .scs 확장자에 연결시키면 되는가 하는 점이다. 이는 아래와 같은 코드를 .vimrc에 포함시키면 된다. 주목할만한 점은 setf 대신에 so가 사용되었다는 점이다. 아래 코드는 파일 포맷을 정해주는 대신 specre.vim 파일을 그대로 읽어들여 실행한다.
filetype.vim 파일의 중간쯤을 보면 아래와 같은 부분이 있다. 암호 같아 보이는 이 부분은 특정한 확장자에 적용된 문법 파일을 정의한다. 필자의 경우 문법 파일은 /usr/share/vim/vim63/syntax 디렉토리에 존재하며, 각 파일의 이름은 아래 예제에서 setf 뒤의 값에 해당한다. 보통 확장자와 동일하게 사용하는 편이다.
" A-A-P recipe
au BufNewFile,BufRead *.aap setf aap
" ABC music notation
au BufNewFile,BufRead *.abc setf abc
" ABEL
au BufNewFile,BufRead *.abl setf abel
새로운 확장자 추가
새로운 확장자에 대한 문법 강조를 적용하고 싶다면 어떻게 할까? 이를테면 .vh 확장자 파일에 Verilog 문법을 적용시키고 싶다고 하자. 이를 위한 코드는 매우 간단하다.
" Add a mapping rule for *.vh files
au BufNewFile,BufRead *.vh setf verilog
문제는 이 코드를 어디에 추가할 것이냐에 있다. 크게는 아래와 같은 두 가지 방법이 있다.
- vim 설치 디렉토리의 filetype.vim에 추가
- 사용자 홈의 .vimrc 파일에 추가
기본 지원 확장자가 아닌 경우
가끔씩 문법 적용 파일이 아예 존재하지 않는 확장자들이 있다. 이를테면 Cadence Spectre 프로그램의 확장자인 .scs에 대한 문법 적용 파일은 vim에 포함되어 있지 않다. 하지만, 인터넷 검색을 통해 spectre.vim이라는 문법 적용 파일을 쉽게 얻을 수 있다. 문제를 이를 어떻게 .scs 확장자에 연결시키면 되는가 하는 점이다. 이는 아래와 같은 코드를 .vimrc에 포함시키면 된다. 주목할만한 점은 setf 대신에 so가 사용되었다는 점이다. 아래 코드는 파일 포맷을 정해주는 대신 specre.vim 파일을 그대로 읽어들여 실행한다.
au BufNewFile,BufRead *.scs so ~/spectre.vim


덧글