Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

dein.vimのtomlのhook_*部分をシンタックスハイライトさせる

$
0
0

image.png
こんな感じにする。

SyntaxRangeというプラグインを使うと、ある範囲のシンタックスハイライトを違うファイルタイプのシンタックスでハイライトにできる。

call SyntaxRange#Include("hook_add = '''", "'''", 'vim', '')

hook_add = '''から始まって'''で終わる範囲をvimのシンタックスでハイライトできる。最後の引数は始まりと終わり部分の文字列のハイライトグループ(NonTextなど)の設定。ここでは空にしているので、なにも設定しない。

これを他のhook_*とか"""で囲んだときにも対応させて、dein*.tomlのファイルを開いたときに実行するように設定するとこんな感じ。

augroup MyVimrc
    autocmd!
augroup END

autocmd MyVimrc BufNewFile,BufRead dein*.toml call s:syntax_range_dein()function! s:syntax_range_dein() abort
  letstart='^\s*hook_\%('.
  \           'add\|source\|post_source\|post_update'.
  \           '\)\s*=\s*%s'call SyntaxRange#Include(printf(start,"'''"),"'''",'vim','')call SyntaxRange#Include(printf(start,'"""'),'"""','vim','')endfunction

元々のプラグインでは問題が出たのでforkして修正したのがこちらを使うと良い。

修正点

元々のSyntaxRangeでは、SyntaxRange#Includeするたびに、すでに読み込み済みのシンタックスファイルも

unlet b:current_syntax
syntax include @vim syntax/vim.vim

して再読込している。vimのシンタックスファイルを再読込すると

runtime/syntax/vim.vim
synsync linecont "^\s\+\\"

の部分で「E403: 構文同期: 連続行パターンが2度指定されました」というエラーが出てしまう。
なので、読み込み済みのシンタックスファイルは読み込まないようにする処理を追加する必要がある。

また、SyntaxRange#Includeで渡した文字列をprintf

start="%s"end="%s"

のように直接当てはめているので、文字列に"を含む場合はおかしくなるので、"をescapeしてやる必要がある。

オリジナルとのdiff


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>