Help us understand the problem. What is going on with this article?

実はたくさんあるVimエミュレーション

この記事はVim2 Advent Calendar 2019の7日目の記事です。

みなさんはVimエミュレーションは使っていますか?

Vimは使っているけれどVimエミュレーションは使っていない人もいれば、
Vimは使っていないけれどVimエミュレーションは使っている人もいる。
そんなVimエミュレーションですが、現在では多くのブラウザ、テキストエディタ、IDEで提供されるようになっており、
VimエミュレーションのおかげでVimの操作性を他のソフトウェアでも享受できるようになっています。

もし、Vimの外でVimのキーバインドが使えたらマウスを使わずにキーボードだけで操作できるのではないか、
もし、このテキストエディタの機能(マルチカーソルなど)と一緒にVimの機能が使えたらすごい編集ができるのではないか、
もし、この開発効率のいいIDEを使いつつVimのキーバインドも使えたならすごい快適なのではないだろうか、
そんなことを思ったことのある人は少なくないと思います。

Vimエミュレーションはそんなことを実現できたり…できなかったり…という感じなのですが、
当記事ではそんなVimエミュレーションについて、紹介したいと思います。

Vimエミュレーションとは何か

Vimエミュレーションは何かを一言で表すならば、ブラウザやテキストエディタ、IDEなどでVimのキーバインド及び概念を再現するもの、といったところでしょうか。
hjklでの上下左右の移動から始まり、dでの切り取り、pでの貼り付け、ノーマルモードや挿入モードといったモードの概念、マクロによる操作のリピート、テキストオブジェクト、など、各VimエミュレーションによってVimの機能をどれぐらい再現しているか、再現できているかは異なりますが、いずれも実現できる範囲でVimの機能を再現しています。

だいたいのVimエミュレーションではhjklをはじめとしたキーでカーソル移動、スクロールができるようになり、ノーマルモードによる素早いテキスト編集ができるようになります。全てのキーがショートカットキーになったような状態になるため、いつもとはまた違った操作性を得ることができます。

しかし、Vimエミュレーションがもたらすものは必ずしもメリットばかりという訳でもありません。
Vimを使っている人が必ずしもVimエミュレーションを使っているとは限らないのには理由がある訳ですね。
試してみる最初は気にしないで大丈夫なのですが、次のようなメリット、デメリットがあります。

メリット

主に4つ。

  1. キーボードで完結する操作が増える。
    • マウス、タッチパッドの利用頻度が減るためキーボードを触っている時間が増えます。また、矢印キーの利用頻度が減るためホームポジションを維持できる時間も増えます。
    • 環境によってはマウスを出しづらかったりするのでそういう場所でありがたいです。
  2. プレーンテキスト編集速度が向上する。
    • なんだかんだいってVimはプレーンテキストの編集が得意なのでVimの編集機能の再現度が高ければプレーンテキストの編集速度が上がります。
    • 場面場面によっては素のオリジナルのほうが速く編集できる場合もあります。また、フォーマット、リファクタリング等は専用のツールかIDEに任せたほうがいいでしょう。
  3. 操作の快適性が向上する。
    • ほぼ全ての操作がショートカットキー相当になります。程度の差こそ個人差はあれど多かれ少なかれVimを使っている人はVimの快適性を目当てにVimを使っているように、Vimの操作性を得ることで同様の快適性を得られます。
    • 個人差はありますが、あまり使っていない場合でもたまに使ってみると楽しかったりする…と思います。
  4. Vimへの抵抗感が減る。
    • Vimへの移行がしやすくなるでしょう。また、もしLinuxサーバ等に入って作業をする際、Linuxサーバには確実にVimが入っているのでファイル編集への抵抗感が減ります。
    • 個人差はありますが、とりあえずサーバではVimが使えるという安心感を享受できたりする…と思います。

デメリット

主に4つ。別でブラウザ特有のものが1つ。

  1. Vimの機能を100%再現しているわけではない。
    • Vimの機能を知っていれば知っているほど、Vimにはあったこれが無い…となります。無かったからといって詰むことはないんですが、快適性に影響します。
    • とはいえ、使い続けると慣れてきます。個人差はありますが…。また、Vimをがっつり使っていた訳ではなかったのであればあまり気にならないでしょう。
  2. 既存のショートカットキーを上書きする。
    • 既存のショートカットキーを上書きするため、既存の機能へのアクセスがしづらくなります。IDEでは特に編集以外のショートカットも多いので影響が大きいです。
    • これはVimエミュレーションの作り次第というか、既存の機能との共存をどのようにしているか次第ではあります。
  3. 日本語入力に苦労する。
    • Vimと同じで最初は日本語入力に苦労するはずです。Vimのモード(ノーマル/挿入)と日本語入力のモード(英数/ひらがな)の二つのモードが別々にあるので確実に混乱することでしょう。
    • これはVimと同様で慣れます(モード切り替えにはパターンがあるので)。それでも日本語多めだと編集速度は落ちますが…。
  4. Vimから離れづらくなる。
    • Vim特有の快適性みたいなものがあってVimエミュレーションにも同様の快適性があるんですが、それによってVimの快適性が得られない場面で辛くなります。CapsLockキーのCtrlキー化などと似た感じですね。
    • 個人差があります。操作感がVimと違うから…といって他のソフトを敬遠してしまったりするとよくないです。
  5. (ブラウザ特有) Hit-a-hintで事故をする。
    • ブラウザ向けのVimエミュレーションには大体Hit-a-hintといって特定のキーを押すと、各リンクにアルファベットが振られそのアルファベットを入力するとそのリンクに飛べる機能があるのですが、これが使っていてときどき事故します。
    • 例えば誤フォローしたりとか、誤いいねしたりとか。そこまで事故はしないんですが、事故するときは事故します。

使うか使わないかの決め方

趣味にあっていれば使う…ぐらいでいいと思います。
Vimエミュレーション抜きの操作感とVimエミュレーション抜きの操作感は異なるので、
どちらがいいかとは一概に言い難いです。それに、Vimを使うという選択肢もありますしね。

もしVimを使っていなかったとしても、Vimが気になっていたら試していいと思います。
ドットインストール等のVimの入門等で紹介されている範疇の操作であればだいたい再現されているはず…です。

また、同じVimエミュレーションでもブラウザ向けのVimエミュレーションはあくまでVim風というかVimと異なる独自の操作が色々あってほぼ別物なので、
ブラウザ向けのVimエミュレーションは単体で試してみて、よさそうだったら使っていいと思います。

Vimエミュレーションの一覧

さて、そんなVimエミュレーションにはどのようなものがあるのかですが、次のようなものがあります。
これらは2019年12月6日時点で1年以内に最終更新があり、確実に利用ができるVimエミュレーションの一覧になります。

Vimエミュレーションには以前からからあり今も保守されているものもあれば、
保守されなくなってしまったもの、APIの変更によりプロジェクトの終了を余儀なくされたものもあります。
そのため、一覧から外しているものもありますが、それらも込みのリストだともっと数があります。込みのリストはどこかで…。

テキストエディタ向け

テキストエディタ Vimエミュレーション
Emacs Evil
Visual Studio Code VSCodeVim
Atom vim-mode-plus
Sublime Text NeoVintageous
Sublime Six
Brackets Vimderbar

全体的に再現度が高めな気がします。マルチカーソルを併用できたりするのもいいですね。
(EmacsにはVIP、Viper、といったものがあったと聞きます。こちらはどうなのでしょうか…。Atomのvim-modeは非推奨になっていてvim-mode-plusが推奨されています。Sublime TextのVintageとVintageousはそれぞれ開発が止まっています。)

IDE向け

IDE Vimエミュレーション
Visual Studio VsVim
Xcode XVim2
Eclipse Vrapper
NetBeans jVi
IntelliJ IDEA IdeaVim

いずれも長く保守されていて、このIDEならこれといえる定番なものとなっています。
(変わったことといえばXcodeのXVimがXVim2になったことぐらいでしょうか。)

また、リストにはありませんが、Qt CreatorにはFakeVim、MonoDevelopにはVi ModeというVimエミュレーションを有効にする機能があります

ブラウザ向け

テキストエディタ Vimエミュレーション
Firefox Vimium-FF
Vim-Vixen
Tridactyl
Surfingkeys
VVimpulation
Chrome Vimium
Surfingkeys
Safari Vimari
sVim

5年前とはリストが大きく変わっています。
(FirefoxのVimエミュレーションはVimperatorやVimFxが動かせなくなり、使えるVimエミュレーションが大きく変わりました。Chromeにも以前ViChromeや、Vrome、cVimといったものがありました。SafariのVimariとsVimはMacを持ってなくて試せていないのですが今でも使える感じでしょうか…?)

用途が編集ではなくブラウジングなので他のVimエミュレーションとはまた違うのですが、
Vimのキーバインドを多く再現しており、キーボードだけで多くの操作ができるようになります。

また、VivaldiはリストにありませんがVivaldiはChromeの拡張をそのまま使えるためVivaldiでもVimエミュレーションは利用できます。

その他

ソフトウェア 種類
tig Gitインターフェース
cgdb GDBインターフェース
qutebrowser ブラウザ
Vimb ブラウザ
Luakit ブラウザ
Kakoune テキストエディタ
Shiba Markdownプレビュアー
Readline ライブラリ(C)
FakeVim ライブラリ(C++(Qt))
Ace ライブラリ(JavaScript)
CodeMirror ライブラリ(JavaScript)

VimエミュレーションというよりはVimを参考にしているもの…ぐらいの感じのような気もしますが、いずれもVimが提供するキーバインドと同じキーバインドを提供しています。

これとは別に、カウントされるかは怪しいですが、
いくつかのWebサイトにはVimのキーバインドがショートカットキーになっているサービスがあります。

Webサイト ショートカット内容
Twitter jkで選択ツイートを移動、/でキーワード検索にフォーカス
TweetDeck jkで選択ツイートを移動、hlで選択列を移動、/でキーワード検索にフォーカス
BookWalker hjklでページ送り(wasdでも可)
GoogleDrive hjklで選択ファイルを移動
GoogleCalender jkで月、週、日を移動
ニコニコ静画(漫画) jkで上下スクロール
はてなブックマーク jkで選択記事を移動
GitHub jkで選択ファイルを移動
Pocket jkで選択URLを移動
Pixiv jkでページ送り(2枚以上の投稿の場合のみ)

jkでのスクロールはホームポジションを崩さずにできる操作なので、もしかしたらVimは関係ないかもしれませんが、
BookWalkerやGoogleDriveのショートカットキーは恐らくVim由来…だと思います。

まとめ

Vimエミュレーションはこのようにたくさんの人が作っていています。
Vimエミュレーションが合うかどうかは人によりますが、
いずれも各々の熱意のこもったものに仕上がっています。
よければ触ってみてください!

また、もしリストに無いものがあったら是非教えてください…!

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away