Vimプラグイン

マルチカーソルは Vim をもっと便利にできるのか?

Vim / neovim で マルチカーソル という機能を利用してみました。

この記事では、Vim や neovim でマルチカーソルを導入する方法と使い方、その所感についてご紹介します。

Vimでマルチカーソルを利用しようとする発端

こちらの記事が Qiita で話題になっていました。

マルチカーソルで、VSCodeのスニペットをもっと便利に。 - Qiita
## ある日の弊社 社長「お〜い、やめ太郎」 ワイ「なんでっか、社長?」 社長「今度作るショッピングサイトの件なんやけど」 社長「**ドラッグ&ドロップ**機能を実装することになったから」 社長「それをやめ太郎にお願いしたいんや」...

また、VScode ユーザーでは重宝するとの記事が次のように散見されました。

それぞれの記事内容を確認したところ、下記の機能性が主なメリットのようです。

  • 複数の位置で同時に入力・編集ができる
  • 複数箇所にある文字列を一括で変更・削除できる

正直なところ、Vimmer としては検索やビジュアルモードでやれてしまうので、便利さや必要性を感じないなとは思いました。

しかし、マルチカーソル自体が Vim / neovim で使えるのかは興味がありました。

そこで今回試すに至りました。

Vimでマルチカーソルを使うには

標準機能には無く、こちらのプラグインを導入する必要があります。

GitHub - terryma/vim-multiple-cursors: True Sublime Text style multiple selections for 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ダウンローダー」のコードを拝借して、試して見ました。

Amazon CAPTCHA

実用的な Python コードのイメージとして試すと、下記のようになります。

vimでマルチカーソルを使って、関数の引数名を置換してみた
  1. Alt-n で該当する単語全てを選択
  2. cキーで置換するインサートモードへ移行
  3. 新しい引数名を入力
  4. 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プラグインの補足情報

  • 利用頻度3.0
  • 便利さ2.0
  • 導入の簡単さ4.0

関連するVimヘルプ

こちらのプラグインには、Vim上のヘルプはありません。その代わり、非常に簡単なので、下記から README をご覧ください。

terryma/vim-multiple-cursors
True Sublime Text style multiple selections for Vim - terryma/vim-multiple-cursors

Vim力をもっと上げるには?

これらの書籍はバイブルです。必ず完読しましょう。


Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。


こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。

Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。

プロフィール
管理人
Vim太郎

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

\フォローする/
\ シェアする /
\フォローする/
関連記事
Vim入門
タイトルとURLをコピーしました