Vim / neovim で マルチカーソル という機能を利用してみました。
この記事では、Vim や neovim でマルチカーソルを導入する方法と使い方、その所感についてご紹介します。
Vimでマルチカーソルを利用しようとする発端
また、VScode ユーザーでは重宝するとの記事が次のように散見されました。
それぞれの記事内容を確認したところ、下記の機能性が主なメリットのようです。
- 複数の位置で同時に入力・編集ができる
- 複数箇所にある文字列を一括で変更・削除できる
正直なところ、Vimmer としては検索やビジュアルモードでやれてしまうので、便利さや必要性を感じないなとは思いました。
しかし、マルチカーソル自体が Vim / neovim で使えるのかは興味がありました。
そこで今回試すに至りました。
Vimでマルチカーソルを使うには
標準機能には無く、こちらのプラグインを導入する必要があります。
README.md がとても丁寧に書いてあって好感が持てます。
導入手順 – vim-plug
README.md では vim-plug でインストールする方法が記載されています。
vim-plug instructions
1. Paste this block into the top of
~/.vimrc
.2. Start vim and execute
:PlugInstall
.
下記を ~/.vimrc 記載して、:PlugInstall でインストールするだけみたいです。
call plug#begin()
Plug 'terryma/vim-multiple-cursors'
call plug#end()
導入手順 – dein
dein を記載している .vimrc もしくは init.vim のうち、dein でプラグインを記載している箇所に下記を追記します。
call dein#add('~/.cache/dein.vim')
プラグインを記載するTOMLファイルに下記を記述します。
[[plugins]]
repo = 'terryma/vim-multiple-cursors'
いくつかキーバインドに関する設定もありますが、とりあえずは標準でも利用可能です。
Vim でマルチカーソルを使う
例えば、Pythonの関数の引数となる変数名を変更してみます。
次の書籍の P406 の「マルチスレッド版 XKCDダウンローダー」のコードを拝借して、試して見ました。
実用的な Python コードのイメージとして試すと、下記のようになります。
- Alt-n で該当する単語全てを選択
- cキーで置換するインサートモードへ移行
- 新しい引数名を入力
- ESCキーで元に戻す
ビジュアルモードと違って、行が異なっても入力や置換ができるのは便利ですね。
標準でのキー操作はこちらです。
ノーマルモード | Ctrl-n | マルチカーソルを開始する。 仮想カーソルで選択範囲となる 単語を追加するモードへ遷移する。 |
ビジュアルモード | Ctrl-n | 選択した内容を対象に追加して マルチカーソルを開始する |
ノーマルモード | Alt-n | マルチカーソルを開始して、 カーソルのある単語をすべて対象に追加する |
ノーマルモード | g Ctrl-n | 境界無しにマッチした単語を選択する (g* の * に近い動き) |
ノーマルモード | g Alt-n | 境界無しにマッチした単語をすべて選択する |
マルチカーソル開始中 | Ctrl-n | カーソルの単語を対象に追加する |
マルチカーソル開始中 | Ctrl-p | カーソルの単語を対象から削除して 前の対象に戻る |
マルチカーソル開始中 | Ctrl-x | カーソルの単語を対象に追加する |
全てのモード | Esc | ノーマルモードに戻る |
これらは、次のような設定値を変更してカスタマイズすることもできますね。
let g:multi_cursor_use_default_mapping=0
" Default mapping
let g:multi_cursor_start_word_key = '<C-n>'
let g:multi_cursor_select_all_word_key = '<A-n>'
let g:multi_cursor_start_key = 'g<C-n>'
let g:multi_cursor_select_all_key = 'g<A-n>'
let g:multi_cursor_next_key = '<C-n>'
let g:multi_cursor_prev_key = '<C-p>'
let g:multi_cursor_skip_key = '<C-x>'
let g:multi_cursor_quit_key = '<Esc>'
上記は、先の README.md から引用しています。
Vim に マルチカーソルは必要か
正直なところ、マルチカーソルの必要性を感じない というのが所感です。
もちろん、便利さはあるとは思いますが、先にも書いたとおり、ビジュアルモードや置換機能で代用できるのが明白です。
1キー1キーの入力動作を見ながら作業ができる点はとても直感的ですが、慣れてしまえば先の機能で十分実現できてしまいます。
作業速度も、たぶん慣れてしまえばどちらにも差は無いでしょう。
また、こちらの記事にあった「いい感じに全部のケース変換をする」「全行にデバッグログを突っ込む」は、マルチカーソルならではだとは思うのですが、登場機会があまりにも少なすぎるなと感じます。
むしろ、マルチカーソルの使い方と使う場面を覚える学習コストがイマイチです。
恐らく大半の Vimmer 面倒くさがる、もしくはせっかくの活躍の機会に使い方を忘れてしまうのではないかと懸念します。
そのため、普段使いとして必須かと言われれば、Vimmerには不要と考えます。
他のエディタでのマルチカーソルの価値を批判するモノではないのですが、Vim / neovim に関しては上記のように感じました。
どうか、もう少し Vimmer でもマルチカーソルが必要不可欠だと言えるようなユースケースが出てきて欲しいものです。
このVimプラグインの補足情報
- 利用頻度
- 便利さ
- 導入の簡単さ
関連するVimヘルプ
こちらのプラグインには、Vim上のヘルプはありません。その代わり、非常に簡単なので、下記から README をご覧ください。
Vim力をもっと上げるには?
これらの書籍はバイブルです。必ず完読しましょう。
Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。
こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。
Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。