前置き
よくわからないなりにゴリ押しで設定しているため、何点か課題があります。
もっと良いやり方があったら教えてください。
NERDTreeFind
コマンドにハイライト機能を追加する
NERDTreeにはFindコマンドがあり、Treeの中にある現在開いているファイルにカーソルを瞬間移動させることができます。
このときついでにファイル名をハイライトしたいと思い、試行錯誤しつつ設定を追加してみました。
最終的な設定
※ 本題はfunction部分です。
nnoremap [nerd]<Nop>
nmap <Space>n[nerd]" NERDTreeTabsを利用するように変更
nnoremap <silent><C-e>:NERDTreeTabsToggle<CR>
nnoremap <silent>[nerd]f:call NERDTreeFindAndHighlight()<CR>
nnoremap <silent>[nerd]h:call NERDTreeHighlight()<CR>" Findしつつファイルをハイライトするfunction! NERDTreeFindAndHighlight()
NERDTreeFind
:setlocal isk+=.
normal!0w
exe printf('match IncSearch /\<%s\>/', expand('<cword>')):setlocal isk-=.endfunction" 開いてるファイルをハイライトするfunction! NERDTreeHighlight():call NERDTreeFindAndHighlight():wincmdpendfunction
補足・説明
- ハイライト箇所
normal!0w
exe printf('match IncSearch /\<%s\>/', expand('<cword>'))
normalコマンドでnormalモードのキー操作を実行しています。
nerdtreeにカーソルが移動したときに必ずしも単語上にカーソルがないため、先頭に戻してから単語の箇所まで移動しています。
exeではcwordでカーソル下の単語を拾って、matchに喰わせています。
このときに、文字のハイライトをIncSearch
の色で設定してます。1
- isKeywordの一時的な変更
:setlocal isk+=.
" 何かしらの処理
:setlocal isk-=.
vimではisKeywordという設定を見て単語の区切りを調整しています。
ここではglobalな変更は変えずにlocalなスコープで.
を一連のキーワードとして認識するように設定しています。
この設定によりhogehoge.scala
のようなファイルを拡張子を含めて1単語として認識できるようになります。
課題
- ファイル名先頭が.のものをハイライトできない
- 操作ファイルを変更してもハイライトが残り続けて、煩わしくなる
おわりに
大した記事ではありませんが、初めてvimでfunctionを作ったので記念に記録してみました。
細かいことは無視しているので、参考程度にどうぞ。