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

fzf.vimでShift_JISもgrepできるようにする

$
0
0

今まで agThe Silver Searcherを使っていたのだけど、業務のカクカクシカジカでShift_JISを使うことが増えてた。agでSjift_JISをgrepするには nkfで変換を挟むなどの無理くり変換になりそうなので、他の方法を探すことにする。

Neovimを使っているので、fzf.vimでも使えるのが条件。

ripgrepならできそう

カクカクシカジカでripgrepならできそう。
名前だけ知っていた。

  • 正規表現をオプションなしで使えるなど、フィーチャーしてる。
  • 早い。体感的にも分かるくらい早い。
    単純なベンチマークだと agの1/5の値が出てるらしい。
  • .gitignoreをデフォルトで読み込み、無視するファイルを無視する。
  • オプションで数種のエンコーディングに対応する。
  • Rust製

ripgrepをインストールする

brewで入る。

$ brew install ripgrep

テストしてみる

UTF-8のgrep

$ echo$LANG
ja_JP.UTF-8
$ echo こんにちは > utf8.txt
$ rg こん
utf8.txt
1:こんにちは

分かりにくいけど、カラーで出てる。

SJISのgrep

$ echo こんばんは | nkf -s> sjis.txt
$ rg --encoding Shift_JIS こん
sjis.txt
1:こんばんは

できてる!

文字コードが混在するgrep

$ ls
sjis.txt  utf8.txt
$ rg こん
utf8.txt
1:こんにちは
$ rg --encoding Shift_JIS こん
sjis.txt
1:こんばんは

ここが少し惜しい。
文字コードの異なるファイルがあった場合、
オプションが指定されている方のみの結果になる。

fzf.vimの設定をする

Rgsコマンドを追加して割り当てる。
fzf.vimの公式に書いてあるものを、とりあえずそのまま使ってる。

~/.vimrc
command!-bang -nargs=* Rgs
  \call fzf#vim#grep(  \'rg --encoding Shift_JIS --column --line-number --no-heading --color=always --smart-case '.shellescape(<q-args>),1,  \<bang>0 ? fzf#vim#with_preview('up:60%')  \: fzf#vim#with_preview('right:50%:hidden','?'),  \<bang>0)

nnoremap <silent><Leader>ff :<C-u>Rg<CR>
nnoremap <silent><Leader>fs :<C-u>Rgs<CR>

これで :RgだとUTF-8のgrep、:RgsだとSJISのgrepができるようになった。
うれしい。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



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