Vim 사용자 정의 파일 타입 꾸미기

7173
2016-10-06

vim_cheat_sheet_for_programmers_print

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 

snag-0011-2016-09-14-오전-2-59-20

1
: syntax clear

snag-0012-2016-09-14-오전-2-59-38

본 글에서는 *.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 가 되고 있지 않습니다.

snag-0009-2016-09-14-오전-2-44-30

다음과 같이 file extension 을 TEST.mysql 로 하거나, Vim 에서 :set filetype=mysql 으로 변경해주면, LIMIT 과 ROWNUM 의 highlight 가 변경됩니다.

1
2
3
$ vim TEST.mysql 
or
: set filetype=mysql

snag-0010-2016-09-14-오전-2-44-47

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 하고 싶을 때

  1. INFO, WARN, EXCE, ERRO, FATA, EXIT, STAT
  2. LIVE_*  ( LIVE_01, LIVE_11, ... )
  3. "..." 

이제 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 가 적용되었습니다.

snag-0007-2016-09-14-오전-2-39-36

잘하시는 분은 저도 좀 알려주세요. 잉여력 부족!! ㅠㅠ

참고 :

http://vimdoc.sourceforge.net/htmldoc/syntax.html


Popit은 페이스북 댓글만 사용하고 있습니다. 페이스북 로그인 후 글을 보시면 댓글이 나타납니다.