Vim入門 置換 ~プラグインを使って楽に置換~


ターゲットとしている人
 - Vim初心者の方
 - Vimで置換の方法がわからない人
 - Vimで置換のプラグインをまだ使ってない人

この記事を読むと理解できる事
- Vimで楽に置換をする方法が理解できる
- プラグインマネージャのインストールができる
- 置換プラグインを利用することができる

はじめに

この記事では初心者向けに置換の仕方やプラグインの利用の仕方までを簡潔にまとめたものです。
以下のsample.txtを例として置換する方法を記述します。

sample.txt
hoge
hoge
hoge
fuga
piyo
hoge

対象の文字全てを置換

対象の文字全てを置換する場合、vimでは以下のようにすることで置換することができます。

:%s/置換前の文字/置換後の文字/g

末尾のg対象のファイルの該当する全てに対して置換という意味です。

仮に、sample.txthogeという文字全てをfoo!!に変換したい状況だとしましょう

その場合は以下のようにすることで置換することが可能です!

:%s/hoge/foo!!/g

結果

sample.txt
foo!!
foo!!
foo!!
fuga
piyo
foo!!

特定した行のみ置換する

先ほどは全行の置換でした。以下のようにすると指定した行のみを置換することができます。

範囲の最初の行,範囲の最後の行s/置換前の文字/置換後の文字/g

仮に、sample.txt1 ~ 4行目のhogeという文字全てをfoo!!に変換したい状況だとしましょう

その場合は以下のようにします!

1,4s/hoge/foo!!/g

結果

sample.txt
foo!!
foo!!
foo!!
fuga
piyo
hoge

mapを活用しよう

でもちょっと待ってください。いちいち:%sなどをいちいちタイピングするのは非常に作業効率が悪いのではないのでしょうか。(めんどくさいし)

そんなときは.vimrcmapを追加して楽をしましょう!

.vimrc
" この行はお使いの.vimrcにまだ書いていないのなら、これを追加してください
let mapleader = "\<Space>"

" Spaceを押した後にrを押すと :%s/// が自動で入力される
nnoremap <Leader>r :%s///g<Left><Left><Left>

この設定を加えた後にSpaceを押してrを押すと以下のようになると思います

自動で:%s///と言う文字が入力されました!

このような感じでmapを利用すると楽をすることができるので、どんどん利用しましょう!

プラグインを使って置換する

プラグインを使って楽をして置換をすることができます。

筆者が調べた感じ、以下のプラグインが人気のようでした

いずれも高性能なプラグインなのでこちらを利用して見てください。

ついでに、自作したプラグインを宣伝させてください🙇‍♂️

vim-easy-replace (ソースコードはこちらから)

以下のような特徴があります
  • 置換対象となる文字をリアルタイムでハイライト
  • :%s/のような文字を打つ必要がない
  • 簡単操作
  • 指定した行数に対してのハイライト・置換が可能

インストール方法

既にVimプラグインマネージャを利用している方は読む必要はありません。

まずはVimのプラグインを管理するプラグインマネージャをインストールしましょう!

この記事では例としてvim-plugをインストールします。(より詳細を知りたい方はvim-plugのREADMEを見るとより理解が深まると思います)

まずはターミナルを開き、以下のコマンドでvim-plugをインストールしましょう

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

次に、.vimrcを開いて、以下を追加しましょう!!

.vimrc

call plug#begin('~/.vim/plugged')

" vim-easy-replaceを利用する
Plug 'kqito/vim-easy-replace'

call plug#end()

上記を追加したら、一旦vimを終了し、再度vimを開き直します。

最後に:PlugInstallと入力し、実行します。

これでvim-plugvim-easy-replaceのインストールが完了しました!

そして、以下のコードがまだ.vimrcに書いていないのなら追記しておきましょう!

vimrc
let mapleader = "\<Space>"

利用方法

一般的な利用

初期設定は<Leader>raとなっているので、「スペース、r、a」と押すことで起動することができます。

その後は置換対象を入力し、その後、置換後の文字を入れるだけです。

また、<Leader>rcと入力するとカーソル下にある単語を置換対象とすることができます。

指定した範囲での置換

Vimではvを押すとビジュアルモードに移ることができ、範囲を指定することができます。
この状態で<Leader>raまたは<Leader>rcすることでその範囲に対して置換することができます。

設定

<Leader>raなどのmapを変更したい場合には以下のような設定を.vimrcに追記することで変更が可能です。

.vimrc
" Easy-replaceを使う (デフォルト: <Leader>ra)
let g:easy_replace_launch_key = '新しいmap'

" ビジュアルモードからeasy-replaceを使う (デフォルト: <Leader>ra)
let g:easy_replace_launch_in_visual_key = '新しいmap'

" カーソル下の単語に対してeasy-replaceを使う (デフォルト: <Leader>rc)
let g:easy_replace_launch_cword_key = '新しいmap'

" カーソル下の単語に対してビジュアルモードからeasy-replaceを使う (デフォルト: <Leader>rc)
let g:easy_replace_launch_cword_in_visual_key = '新しいmap'

また、ハイライトの色を変えるには以下を追記します。

.vimrc
let g:easy_replace_highlight_ctermbg = '新しい色'
let g:easy_replace_highlight_guibg = '新しい色'

さらに詳しい設定はこちらにまとめてあります。

その他のプラグイン

世の中にはたくさんのプラグインがありますので是非利用してみてください

LSP系

筆者が利用しているおすすめプラグイン

こちらも参考になります