読者です 読者をやめる 読者になる 読者になる

ぱちコマな日々

ざれごと、たわごと、うわごと、しごと。

Neovimで複数の単語をハイライト(vim-quickhl.vim) @Windows10

Neovim vim plugin しごと

※この記事は、dein.vimによりプラグイン管理を行うことを前提で説明します。
まだdein.vimを入れてない人はいつぞやの記事などを参考に入れて下さいまし。

確認環境

Spec / Version
PC mouse LB-J770X-SH2
OS Windows10 Home (ver 1607 build 14393.693)
neovim v0.2.0-621-ge901868f
neovim-qt v0.2.4

複数の単語を同時にハイライト vim-quickhl.vim

人間生きていれば、ある変数にスポットライトを当てたい場面が幾度となくあります。
例えば、関数内での変数の生態を知りたいときです。
そんなときは*キーで検索すればOKです。
隠れてる変数だってばっちりハイライトされるので見落とすこともないでしょう。
あれ、でももし同時に探したい変数が2種類以上になったらどうしましょ。
 
はい、そんなときは vim-quickhl.vim の出番です。
 
複数の単語を同時に異なる色でハイライトすることができます。
カーソル位置に追従した単語のハイライトや、ctagsに登録された変数/関数だってハイライトできちゃいます。

使用イメージ

vim-quickhl.vimでハイライトしたときの画面がこちらです。
わーなんてカラフル。ワンダフル。日本語だって大丈夫。

f:id:pachicoma:20170305204010p:plain

dein(*.tomlファイル)の設定サンプル

参考までに私の設定サンプルです。

[[plugins]]
repo = 't9md/vim-quickhl'
hook_add = '''
"let g:quickhl_cword_enable_at_startup = 1        " カーソル位置ハイライトを最初から有効
" 指定単語のハイライト有効/無効
nmap <Leader>* <Plug>(quickhl-manual-toggle)
" 現在のカーソル位置/または選択中の単語ハイライトを有効/無効
vmap <Leader>; <Plug>(quickhl-manual-this)
nmap <Leader>; <Plug>(quickhl-manual-this)
" カーソルに追従した単語ハイライトを有効/無効
nmap <Leader>+ <Plug>(quickhl-cword-toggle)
" タグファイルの単語ハイライトを有効/無効
nmap <Leader>] <Plug>(quickhl-tag-toggle)
" `quickhl-manual-*`で登録した単語のハイライトを解除する
vmap <Leader><Esc> <Plug>(quickhl-manual-reset)
nmap <Leader><Esc> <Plug>(quickhl-manual-reset)
" 指定の単語のハイライト色
"highlight Search gui=underline guibg=None guifg=None
let g:quickhl_manual_colors = [
   \ "gui=none ctermfg=7   ctermbg=153 guibg=#4169e1 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=1   guibg=#70a040 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=2   guibg=#ffa500 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=3   guibg=#cd4040 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=4   guibg=#20b2aa guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=5   guibg=#6a5acd guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=6   guibg=#f08080 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=45  guibg=#1060a0 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=16  guibg=#2e8b57 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=21  guibg=#a9a9a9 guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=22  guibg=#e0c67c guifg=#ffffff",
   \ "gui=none ctermfg=7   ctermbg=56  guibg=#dd0add guifg=#ffffff",
   \ "gui=none ctermfg=16  ctermbg=50  guibg=#00ffff guifg=#222222",
   \ ]
" カーソルに追従するハイライト色
let g:quickhl_cword_hl_command = "QuickhlCword gui=underline,bold cterm=underline term=underline"
" タグファイル登録単語のハイライト色
let g:quickhl_tag_hl_command = "QuickhlTag gui=underline cterm=underline term=underline"
" 常にハイライトさせる単語
let g:quickhl_manual_enable_at_startup = 1
let g:quickhl_manual_keywords = [
   \ "pachicoma",
   \ {"pattern": '\s\+$', "regexp": 1 },  
   \ ]
'''

ハイライトON/OFF

各ハイライトのON/OFFには関数が提供されています。
よく使いそうなものを以下に抜粋しました。

関数 意味
<Plug>(quickhl-manual-toggle) 指定単語のハイライトON/OFF
<Plug>(quickhl-manual-this) カーソル位置/または選択中の単語ハイライトON/OFF
<Plug>(quickhl-cword-toggle) カーソルに追従した単語ハイライトON/OFF
<Plug>(quickhl-tag-toggle) タグファイル登録単語ハイライトON/OFF
<Plug>(quickhl-manual-reset) quickhl-manual-*で指定した単語ハイライトOFF

お好きなキーに割り当てて下さいまし。

ハイライト色の設定

ハイライト色も下記変数で好きに設定することができます。

変数 ハイライト色の指定対象 サンプルの設定内容
g:quickhl_manual_colors 指定の単語 細字かつ色を下画像のように変更
g:quickhl_cword_hl_command カーソル追従 太字+下線、色はそのまま
g:quickhl_tag_hl_command ctags登録単語 下線、色はそのまま

 
サンプル設定でのハイライト結果が下です(ctags登録単語は除く)。
我ながら色彩センスが無いことで。。。皆さんも好きに設定して下さいな。
デフォルト色でも良い人は、上記変数の設定をまるごと消しちゃって下さい。 f:id:pachicoma:20170306143500p:plain:w500

デフォルトでは、同時にハイライトできる単語数は13個までです。
もし増やしたい場合は、増やしたい分だけg:quickhl_manual_colorsに色の設定を追加しましょう。

登録単語のハイライト

予め辞書変数に登録した単語を常にハイライトすることもできちゃいます。あまり活躍の場は思い浮かびませんが。
サンプルでは下のように任意の単語pachicomaと、正規表現により行末の空白をハイライトするようにしてます。
f:id:pachicoma:20170305204036p:plain:w400

因みにですが、プラグインを使わなくてもvimの設定でタブ文字や行末空白の表示はできちゃいます。

"不可視文字の表示
set list listchars=tab:>_,trail:_
highlight SpecialKey term=underline guifg=gray

下画像の34,35行目の>___がタブ文字、38行目末尾の_が末尾スペースです。

f:id:pachicoma:20170306115950p:plain:w400

詳しくはh: listcharsを読んでねと。

備考

プラグインが提供するのはハイライト機能だけです。
通常の検索ように、次のハイライト箇所にジャンプする機能はありませんのでご注意を。

まとめ

今回はNeovimで複数の単語をハイライトさせる素晴らしい能力を手に入れました。
これであなたも変数ハンターになれること間違いなしです。
 
おしまい。

参考