처음으로 Vim 플러그인을 직접 만들었습니다.

6591 단어 Vim
최근 처음으로 Vim 플러그인을 자작했으므로, 비망록도 겸해 만드는 방법을 정리해 둡니다. 똑같이 앞으로 Vim 플러그인을 만들어 보려고 하는 사람의 참고가 되면 다행입니다.

이번에는 fluentd 용으로 구문 강조하는 플러그인을 만들었습니다. 신택스 플러그인은 간단하게 단계가 정리되어 있는 기사가 적다고 했으므로, 다루기에는 딱 좋을지도 모릅니다. 구문이 아닌 일반적인 Vim 플러그인을 만드는 방법은 다른 기사를 참조하십시오.

실제로 만든 것은 이쪽이 됩니다.
htps : // 기주 b. 코 m/유조 이와사키/f 엔 td.ゔぃm

만들려고 한 이유는 한 번 Vim 플러그인을 자작하고 싶었고, fluentd 용의 신택스 플러그인으로 표준적인 것이 없을 것 같았다. 없었기 때문입니다.

syntax 디렉토리



구문 플러그인을 만들 때 syntax 디렉토리 아래에 <filetype>.vim 형식으로 구문 파일을 배치합니다.

syntax/fluentd.vim

" Vim syntax file
" Language: Fluentd configuration
" Maintainer: Yuzo Iwasaki <[email protected]>
" Last Change: Apr 7, 2020

if exists("b:current_syntax")
  finish
endif

syn match FluentdComment /#.*/

syn match FluentdDirective "<\/*\(source\|parse\|label\|match\|buffer\|format\)[^>]*>"
syn match FluentdDirective /@include/

syn match CommonPluginParameter /\(@type\|@label\)/
syn keyword CommonPluginParameter pos_file path tag expression
syn keyword CommonPluginParameter format format_firstline format1
syn keyword CommonPluginParameter s3_bucket s3_region s3_object_key_format store_as
syn keyword CommonPluginParameter timekey timekey_wait include_time_key

hi link FluentdComment Comment
hi link FluentdDirective Define
hi link CommonPluginParameter String

let b:current_syntax = "fluentd"

이하, 하나하나 설명하겠습니다.

서두의 코멘트는 작법인 것 같습니다. Language나 Maintainer를 기재합니다. 없어도 좋을 것 같습니다만, 기재하고 있는 플러그인이 많았기 때문에 거기에 따랐습니다.
" Vim syntax file
" Language: Fluentd configuration
" Maintainer: Yuzo Iwasaki <[email protected]>
" Last Change: Apr 7, 2020

이쪽도 작법으로, 같은 타입의 파일을 열었을 때에 중복해 읽히지 않게 하고 있습니다.
if exists("b:current_syntax")
  finish
endif
...

let b:current_syntax = "fluentd"

다음 부분이 신택스 플러그인의 본체가 됩니다. 간단히 말하면 syntax 명령으로 구문 그룹을 정의하고 highlight 명령으로 정의한 구문 그룹에 색을 지정합니다.

syntax 명령은 match를 인수로 사용하여 정규식을 사용할 수도 있습니다. 또한 동일한 구문 그룹에 대해 여러 번 요소를 정의할 수 있습니다. 자세한 구문은 이 문서를 참조하십시오.
htps : // ゔぃm jp. 오 rg/ゔぃm도 c-그럼/synx. HTML
syn match FluentdComment /#.*/

syn match FluentdDirective "<\/*\(source\|parse\|label\|match\|buffer\|format\)[^>]*>"
syn match FluentdDirective /@include/

syn match CommonPluginParameter /\(@type\|@label\)/
syn keyword CommonPluginParameter pos_file path tag expression
syn keyword CommonPluginParameter format format_firstline format1
syn keyword CommonPluginParameter s3_bucket s3_region s3_object_key_format store_as
syn keyword CommonPluginParameter timekey timekey_wait include_time_key

hi link FluentdComment Comment
hi link FluentdDirective Define
hi link CommonPluginParameter String

실제로 표시되는 색은 칼라 스키마에 의합니다만, 이번 작성한 것이라면 이런 느낌이 됩니다.


ftdetect 디렉토리



기본적으로는 syntax 디렉토리만으로 부족합니다만, 지정한 파일 타입을 자동적으로 인식시키고 싶은 경우, ftdetect 디렉토리 이하에도 파일을 배치하면 편리합니다. 처음에 다른 플러그인을 시도했을 때 잘 작동하지 않는 이유는 파일 형식이 인식되지 않았기 때문입니다.

ftdetect/fluentd.vim
autocmd BufRead,BufNewFile fluentd*.conf set ft=fluentd
autocmd BufRead,BufNewFile *fluentd.conf set ft=fluentd
autocmd BufRead,BufNewFile */fluentd/*.conf set ft=fluentd
autocmd BufRead,BufNewFile */fluentd/*.conf.template set ft=fluentd

마지막으로



이상, 간단합니다만 Vim의 신택스 플러그인을 만드는 방법이었습니다. 이번 내가 만든 것은 정말로 최저한의 내용이므로, 설정치에 대해서도 하이라이트 하는, 보다 구체적인 명명으로 그룹화하는 등 한층 더 리팩토링은 할 수 있다고 생각합니다.

최대한 바퀴의 재발명은 해서는 안 된다고 생각하면서도, 자신의 리포지토리가 .vimrc 에 있는 것은 기쁩니다. 여러분도 한번 올레오레신택스 플러그인을 만들어 보는 것은 어떻습니까?

좋은 웹페이지 즐겨찾기