✌️

nvimでVSCodeみたいなファイル横断検索・置換がしたい

2021/08/25に公開

なんちゃってvimmerのbunです。

私は普段 nvimVSCode をエディターとして利用しております。

VSCodeに関しては neovim 拡張を利用しています。
(使い始めるための記事を以前書きました)

https://zenn.dev/bun913/articles/02785aed0ba50e

vimにおいてファイル横断検索や置換をするには vimgrepを利用すれば良いのですが

VSCodeのように自分で対象のファイルを選んだりするのを楽にしたいなぁ と考えておりました。

↓以下のような形で。また、vimなのでマウスを使わずに使用したい

なお私の環境は以下の通りです

  • macOS Big Sur 11.5.1
  • NVIM v0.5.0
  • vimプラグイン管理: dein.vim
  • ripgrep 13.0.0

https://github.com/Shougo/dein.vim

far.vim と rgを利用する

今回は自分で色々コマンドを設定するのもだるかったので、far.vimというプラグインと Rust製のgrepということで非常に高速に動作する rg(ripgrep)を利用するようにしました。

rgコマンドのインストール

https://github.com/BurntSushi/ripgrep

公式にインストールの仕方が記載されていますので、ご自身の環境に合わせてインストールしてください。

Macの場合は brewでインストール可能です。

brew install ripgrep

far.vimのインストール

https://github.com/brooth/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