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

vimのNERDTreeで開いているファイルをfindしつつハイライト

$
0
0

前置き

よくわからないなりにゴリ押しで設定しているため、何点か課題があります。
もっと良いやり方があったら教えてください。

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単語として認識できるようになります。

課題

  1. ファイル名先頭が.のものをハイライトできない
  2. 操作ファイルを変更してもハイライトが残り続けて、煩わしくなる

おわりに

大した記事ではありませんが、初めてvimでfunctionを作ったので記念に記録してみました。
細かいことは無視しているので、参考程度にどうぞ。


  1. 他にもこんな色とかこんな色が設定できるみたいです 


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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