jsonのダブルクォートが表示されない (vim)

2022年11月18日

問題

Yggdroot/indentLine はとてもいいプラグインだが、1点問題があって、jsonファイルをひらくとダブルクォートが表示されなくなってしまう。

却下案

以下のように elzr/vim-json を入れるなどの手があるようだ。

Plugin 'elzr/vim-json'
let g:vim_json_syntax_conceal = 0

ただ、(neovimを使用しているから?)こちらのオプションが機能しない。

let g:vim_json_syntax_conceal = 0

無効にはできるが、 json外になにかしら 以下のように hogeなど文字列が入っていると、このhogeが vim上で表示されず、大変困ったことになった。

hoge
{ 
  "fuga": 1
}

見ている内容と実際の内容が違うのだから。

解決法

jsonファイルだけ Yggdroot/indentLine を無効にすることで対応。 以下のようにvimrcで設定する。

autocmd BufNewFile,BufRead,BufEnter * :let g:indentLine_setConceal = (&ft=='json' ? 0 : 1)

dein.toml等なら 以下のように書く

[[plugins]]
repo = 'Yggdroot/indentLine'
hook_add = '''
autocmd BufNewFile,BufRead,BufEnter * :let g:indentLine_setConceal = (&ft=='json' ? 0 : 1)
'''

ちなみに BufNewFile がないと vim hoge.json などで新しくファイル作る時に有効になってしまう BufReadがないと、読み込んだ時に有効になってしまう。 また、BufEnterがないと、バッファ切り替えて戻ってきた時に有効になってしまう。