Vim 사용자 정의 파일 타입 꾸미기
Linux Programmer 자리에서 쉽게 찾아 볼 수 있는 Vim Cheat Sheet 입니다!! 이 글은 Emacs 파는 skip 하셔도 됩니다. ^^;
0. Syntax Hightlight
이 글은 "우리만의 log format", "SQL 같은 Syntax 를 지원하는", "Unknown File Format" 등을 highlight 없이 무미건조하게 보다는 경우를 위해서 Vim Syntax Hightlight 적용방법을 설명합니다. 실제로 개발, 디버깅을 하다보면 apps.log , apps.log.1 , proc1.xlog , ... 등 별의별 파일을 tail -f , grep , 등등 모니터링하고, 분석하고, 열었다가 닫았다가 하다보면 눈이 핑핑돌곤 합니다. 이럴 때에 syntax highlight 까지 안되어 있으면 정말 별거 아닌 오타를 놓쳐서 엄청난 시간을 남비하는 경우가 다반사입니다. "i" 와 "I" 를 대소문자 에러가 웃습다고 생각하지만, 실제로 이런 경우가 다반사입니다.
다음은 /var/log/message 파일 syntax on / off 일 때입니다. " IP Adress 들을 체크해보세요!! "
1
: syntax on
1
: syntax clear
본 글에서는 *.xlog 란 가상의 파일에 대한 Vim syntax highlight 를 만들어서 추가하여 보겠습니다.
1. SQL >= MySQL
본격적인 설명에 들어가기 앞서서 SQL 이란 좋은 예제가 있어서 설명을 드립니다.
많은 분들이 잘 아시겠지만, Vim 은 다양한 파일의 syntax highlight 를 제공합니다. 그리고, 필요에 따라서 기본에 syntax file 을 custom 하여 사용하기도 합니다.
1 2
$ ls /usr/share/vim/vim74/syntax | wc -l 566
SAP HANA 는 불과 몇년전까지 없는 제품인데, saphava.vim 이 추가 되어 있습니다. ( 필자는 이런 식으로 제가 근무했던 회사의 SQL.vim 을 만들어서 사용하였습니다. )
1 2 3
$ ls /usr/share/vim/vim74/syntax/*sql* esqlc.vim msql.vim mysql.vim plsql.vim sqlanywhere.vim sqlforms.vim sqlhana.vim sqlinformix.vim sqlj.vim sqloracle.vim sql.vim
그리고, 파일 확장자 ( file extension )으로 syntax highlight 가 적용되기 때문에, 확장자는 매우 중요합니다. file format 을 잘모를 경우에는 최대한 유사한 syntax file 을 찾아서 사용하는 것도 한 방법입니다.
LIMIT Clause 는 MySQL Syntax 이고, ROWNUM pseudocolumn 은 Oracle Syntax 입니다.
1 2 3 4 5 6 7
SELECT * FROM tbl LIMIT 0, 100; SELECT * FROM tbl WHERE ROWNUM < 11 ORDER BY last_name;
*.SQL 파일은 기본적으로 sqloracle.vim 을 포함하고 있기 때문에 기본적으로 ROWNUM 이 highlight 되어서 보이고 있고, LIMIIT Clause 는 MySQL Syntax 이기 때문에 *.SQL 파일형식에서는 highlight 가 되고 있지 않습니다.
다음과 같이 file extension 을 TEST.mysql 로 하거나, Vim 에서 :set filetype=mysql 으로 변경해주면, LIMIT 과 ROWNUM 의 highlight 가 변경됩니다.
1 2 3
$ vim TEST.mysql or : set filetype=mysql
2. New FileType
모든 작업전에 backup 파일을 반드시 복사하시길 바랍니다. 여차하면 Vim 설정 어디를 고쳤는지 모르기 때문에 재설치를 해야 하는 경우가 발생합니다. ( 열어보는 파일도 backup 해주면 좋습니다. 만일의 하나를 위해서... )
1
$ cp /usr/share/vim/vim74/filetype.vim /usr/share/vim/vim74/filetype.vim.bak
file extension 을 추가해줍니다. 알파벳 ( Alphabet ) 순으로 정렬되어 있기 때문에 적당한 적당한 위치를 추가하여 줍니다. 자세한 내용은 Vim help 를 통해서... ( 저도 잘 모릅니다. ㅠㅠ )
1 2 3 4 5 6 7 8 9
$ vim /usr/share/vim/vim74/filetype.vim 2404 " Xslt 2405 au BufNewFile,BufRead *.xsl,*.xslt setf xslt 2406 2407 " xlog 2408 au BufNewFile,BufRead *.xlog setf xlog 2409 2410 " Yacc 2411 au BufNewFile,BufRead *.yy setf yacc
3. New xlog.vim
TEST 파일을 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13
$ vim TEST.xlog 2016-09-13 11:00:00 [STAT] DEV_01 "Good" 2016-09-13 12:00:00 [INFO] DEV_01 "This is S.P.A.R.T.A" 2016-09-13 12:01:00 [WARN] DEV_01 "PopIt" 2016-09-13 12:02:00 [ERRO] DEV_01 "Hello World" 2016-09-13 12:02:30 [STAT] DEV_02 "Hello World" 2016-09-13 12:03:00 [INFO] DEV_03 "..." 2016-09-13 12:04:00 [WARN] LIVE_01 "..." 2016-09-13 12:05:00 [INFO] DEV_02 "..." 2016-09-13 12:05:30 [WARN] DEV_02 "..." 2016-09-13 12:06:00 [FATA] DEV_03 "===== FATAL =====" 2016-09-13 12:07:00 [EXCE] DEV_04 "..." 2016-09-13 12:08:00 [EXIT] LIVE_02 "The End."
TEST 파일에서 다음과 같은 부분을 syntax highlight 하고 싶을 때
- INFO, WARN, EXCE, ERRO, FATA, EXIT, STAT
- LIVE_* ( LIVE_01, LIVE_11, ... )
- "..."
이제 syntax file 을 만듭니다. 필요한건 566 개의 *.vim 파일들을 열어 보셔서 필요한 RE ( Regular Expression ) 이나 Role 을 copy & paste 하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
$ vim /usr/share/vim/vim74/syntax/xlog.vim " Vim syntax file " This is a GENERATED FILE. Please always refer to source file at the URI below. " Language: xlog file " Maintainer: sql2 " Last Change: 2016-09-15 " URL: http://popit.kr/sql2 " Setup if version >= 600 if exists("b:current_syntax") finish endif else syntax clear endif syn case ignore " INFO LEVEL syntax keyword xlogInfo INFO WARN syn keyword xlogErro EXCE ERRO FATA EXIT syn keyword xlogStat STAT " Server Name syn match xlogLive "LIVE_\w*" " STRING syn region xlogString start=+"+ end=+"+ contains=@Spell highlight default link xlogInfo Type hi def link xlogErro Error hi def link xlogStat Type hi def link xlogLive Special hi def link xlogString String let b:current_syntax = "xlog"
자세한 설명은 필요가 없을 정도로 간단합니다. 10분만 쳐다보시면 금방 보입니다. ^^;
http://vimdoc.sourceforge.net/htmldoc/syntax.html
INFO, WARN, EXCE, ERRO, FATA, EXIT, STAT 과 같은 키워드 ( keyword ) 는 다음과 같은 형식으로 작성해주시면 됩니다.
sy[ntax] , keyword, hi[ghlight] , de[fault] 는 모두 예약어 ( reserved word ) 입니다.
5. Definig a syntax
1
:sy[ntax] keyword <a href="http://vimdoc.sourceforge.net/htmldoc/syntax.html#{group-name}">{group-name}</a> [{options}] {keyword} .. [{options}]
Server name 과 같은 경우는 RE ( Regular Expression ) 형식으로 작성해주시면 됩니다.
5. Definig a syntax
1
:sy[ntax] match <a href="http://vimdoc.sourceforge.net/htmldoc/syntax.html#{group-name}">{group-name}</a> [{options}] [excludenl] {pattern} [{options}]
color 지정은 다음과 같이 해주시면 됩니다. 실제로는 group 을 지정되는 겁니다. syncolor.vim 에서 해당 group 에 대한 color 가 설정되어 있습니다. )
13. Linking groups
1
:hi[ghlight][!] [default] link {from-group} {to-group}
Type, Error, Special, String 은 이미 정해진 color group 입니다. 필요한 syntax color 는 다음을 참고하시면 됩니다.
1
$ vim /usr/share/vim/vim74/syntax/syncolor.vim
TEST 파일을 열어 보시면 다음과 같이 syntax highlight 가 적용되었습니다.
잘하시는 분은 저도 좀 알려주세요. 잉여력 부족!! ㅠㅠ
참고 :
http://vimdoc.sourceforge.net/htmldoc/syntax.html