- 更新日: 2017年6月18日
- Vim
Vimでカーソル下の文字列をgrep(vimgrep)する.vimrc設定
Vim を使ってて、何かしらの文字列でファイルを検索したい場合や、ctags によるタグジャンプが効かない時とか grep(vimgrep)検索を頻繁に使っています。vimgrep は、Vim のコマンドモードで以下のように使う。
1 2 3 |
:vimgrep /foo_bar_baz/ **/* | cwin |
カーソル下の文字列で vimgrep 検索をかけたい場合も多く、これを毎回打つのが面倒くさいので、カーソル下の文字列で vimgrep を実行するショートカットキー用のマップを .vimrc に設定しました。
<Space>cg, <Space>g でカレントディレクトリ、プロジェクトルートディレクトリを対象に vimgrep
.vimrc に書いた設定は以下の通りです。
~/.vimrc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
" <Space>cd で編集中ファイルのカレントディレクトリに移動 command! -nargs=? -complete=dir -bang CD call s:ChangeCurrentDir('<args>', '<bang>') function! s:ChangeCurrentDir(directory, bang) if a:directory == '' lcd %:p:h else execute 'lcd' . a:directory endif if a:bang == '' pwd endif endfunction nnoremap <silent> <Space>cd :<C-u>CD<CR> " <Space>cr で git ルート(プロジェクトルート)のディレクトリに移動 command! -nargs=? -complete=dir -bang CDROOT call s:ChangeRootDir() function! s:ChangeRootDir() let rootDir = system("git rev-parse --show-toplevel") execute 'lcd' . rootDir endfunction nnoremap <silent> <Space>cr :<C-u>CDROOT<CR> " <Space>cg でカーソル下文字列で、編集中ファイルのカレントディレクトリを vimgrep noremap <Space>cg :<C-u>CD<CR>:vimgrep /<C-r><C-w>/ **/* \| cwin<CR> " <Space>g でカーソル下文字列で、ルートディレクトリを vimgrep noremap <Space>g :<C-u>CDROOT<CR>:vimgrep /<C-r><C-w>/ **/* \| cwin<CR> |
これでカーソル下の文字列を、<Space>cg でカレントディレクトリから vimgrep 検索、<Space>g でプロジェクトルートのディレクトリから vimgrep 検索できるようになりました。入力文字数が、2文字または3文字になったのでとても便利。
vim はコマンドモードで、<C-r><C-w> 入力でカーソル下の文字列を取得できます。なお、プロジェクトルートのディレクトリパスは、system(“git rev-parse –show-toplevel”) で取得しているので、プロジェクトルートのディレクトリが git 管理下になっている必要があります。
vimgrep の対象から外すディレクトリやファイルの設定
gem や node モジュールなどライブラリをインストールしたパスを vimgrep の検索対象に含めると、検索時間が長くかかりすぎるのでそれらのディレクトリ等は除外しています。以下は、Rails 用で vimgrep 検索から除外するディレクトリの設定例です。
~/.vimrc
1 2 3 4 |
" Rails 用 vimgrep の除外ディレクトリ :set wildignore+=log/**,tmp/**,vendor/**,.bundle/**,.git/**,node_modules/** |
以上 vimgrep のちょっとした Tips でした。
- Vim の関連記事
- VimでURLをブラウザで開く
- Vimで正規表現の後方参照を使って置換
- CoffeeLintのインストール・Vimで使う設定
- scss-lintのインストール・Vimで使う設定
- Vimでインデント/タブ幅をファイル拡張子ごとに設定
- RuboCopをVimで使う設定(Syntastic/プラグイン)
- You must install neosnippet-snippets or disable runtime snippets(Vim)
- neobundle#rc() is removed function エラー(Vim)
- VimでSpaceを使った便利なキーバインド用vimrc設定
- Vimで行を結合、複数行を一発で連結する
Leave Your Message!