nvimでVSCodeみたいなファイル横断検索・置換がしたい
なんちゃってvimmerのbunです。
私は普段 nvim
と VSCode
をエディターとして利用しております。
VSCodeに関しては neovim
拡張を利用しています。
(使い始めるための記事を以前書きました)
vimにおいてファイル横断検索や置換をするには vimgrepを利用すれば良いのですが
VSCodeのように自分で対象のファイルを選んだりするのを楽にしたいなぁ と考えておりました。
↓以下のような形で。また、vimなのでマウスを使わずに使用したい
なお私の環境は以下の通りです
- macOS Big Sur 11.5.1
- NVIM v0.5.0
- vimプラグイン管理: dein.vim
- ripgrep 13.0.0
far.vim と rgを利用する
今回は自分で色々コマンドを設定するのもだるかったので、far.vimというプラグインと Rust製のgrepということで非常に高速に動作する rg
(ripgrep)を利用するようにしました。
rgコマンドのインストール
公式にインストールの仕方が記載されていますので、ご自身の環境に合わせてインストールしてください。
Macの場合は brewでインストール可能です。
brew install ripgrep
far.vimのインストール
私は deinを利用しているので dein.toml
に以下のように記載します
[[plugins]]
repo = 'brooth/far.vim'
また、 init.vim などの設定ファイルに以下のように設定しました
" far.vim
let g:far#enable_undo=2
" farの検索をrgにする
let g:far#source="rgnvim"
set lazyredraw " improve scrolling performance when navigating through large results
set regexpengine=1 " use old regexp engine
set ignorecase smartcase " ignore case only when the pattern contains no capital letters
" ショートカット設定
" ctrl + g で置換のショートカット
nnoremap <C-g> :Far **/*<Left><Left><Left><Left><Left>
" ctrl + s で検索のショートカット
nnoremap <C-s> :F **/*<Left><Left><Left><Left><Left>
let g:far#window_layout="tab"
使用イメージ
私の場合 <C-s>
で横断検索のショートカットを設定しておりますので以下のように検索結果が表示されます。
検索ファイルに飛びたい場合はファイル名の上でEnterですぐに移動ができます。
また 置換の場合は <C-g>
でショートカットを呼び出し、置換するファイルを選べます
(t
を押下すると、ファイルの除外・含めるが切替できます)
ファイルを選んでから:Fardo
で置換を実行し、 u
でundoすることもできます
以上です。
vimmerの方からすれば標準機能でやりくりできるものかもしれませんが、どなたかのお役に立ってくれれば嬉しいです!
Discussion