VimmerにとってVim以外の環境で普通にテキストを書かされるのは 非常に辛いことですが、 それを解決する色々な方法が考えられています。
vim-anywhereはテキスト入力時にVimを立ち上げて文字を入力しクリップボードに保存、 テキスト入力エリアに貼り付けられる様にしてくれます。
- vim-anywhere
- vim-anywhereのための準備
- vim-anywhereのインストール/アンインストール
- vim-anywhereを呼び出すショートカット設定
- vim-anywhereを使ってみる
- New MacVim Buffer With Selection
- まとめ
vim-anywhere
テキスト入力時にどこからでもVimを立ち上げてVimを使って文字入力をしよう、というソフトウェア。 対象OSはmacOSとLinuxでWindowsでは今のところ使えないようです。
vim-anywhereのための準備
実際にGUIなVimを立ち上げるためmacOSではMacVim、LinuxではgVimのインストールが必要になります。
Mac + HomebrewならMacVimは
$ brew cask install macvim
で。MacVimはHomebrew-coreのFormulaにもCaskにも両方あるのですが、
$ brew install macvim
だと/Applications/MacVim.appがインストールされません。
逆に以前Caskでは/usr/local/bin/mvim等がインストールされませんでしたが 現在は/Applications/MacVim.app/Contents/bin/mvimにリンクが貼られる様になっています。
なので現状macvim
はCaskでインストールした方が良いです。
macvim does not install MacVim.app · Issue #20707 · Homebrew/homebrew-core
vim-anywhereのインストール/アンインストール
vim-anywhere自体のインストールはスクリプトを使って
$ curl -fsSL https://raw.github.com/cknadler/vim-anywhere/master/install | bash
の様にします。
インストールすると~/.vim-anywhereというディレクトリができてその中にuninstallスクリプトなどが収納されています。 実際インストール時に何をやってるか見たかったら~/.vim-anywhere/installを見ると分かります。
アンインストールはこの~/.vim-anywhere/uninstallを実行するだけ。
$ ~/.vim-anywhere/uninstall
vim-anywhereを呼び出すショートカット設定
インストールするとMacなら設定のキーボードショートカットが開かれるはずです。
そこでサービスの一覧の下の方の一般のくくりにVimAnywhereが追加されてるので、 チェックを入れ、好きなショートカットに設定します。 (デフォルトはMacでは⌃-⌘-V。)
LinuxではGnomeなら
$ gconftool -t str --set /desktop/gnome/keybindings/vim-anywhere/binding '<Ctrl><Alt>v'
など。
I3WMを使っているなら
$ echo "bindsym Ctrl+Alt+v exec ~/.vim-anywhere/bin/run" >> ~/.i3/config
などとします。
ショートカットが被ると使えないことがあって、Macで ⌃-⌘-V だとMicrosoft Officeやテキストエディットで使えませんでした。
⌃-⌘-⇧-V とかすればそれらでも使えました。
vim-anywhereを使ってみる
準備が出来たら適当な入力欄に行って⌃-⌘-Vなどを押してみます。
押すと空の一時ファイルを開いたMacVimやgVimが立ち上がり、そこで何か書いて保存終了すると
その内容がクリップボードに入ります。
(一時ファイルの内容をmacOSならpbcopy
、Linuxならxclip
でクリップボードに入れる。)
終了時に元に居たアプリケーションの入力欄にフォーカスがあたるので そのまま⌘-Vとか押してペーストすればVimで書いた内容が書き込めます。
元々書き込んでいた内容などを編集することはできず、 追加したい内容をVimで編集してクリップボードに入れ、 貼り付けで追加する、といった形です。 (最初よく読まずにVimを終了したら自動で書き込まれると思っていたので、何も起こらずに上手く動作してないかと思いました。)
Macでvim-anywhereでMacVimを起動している間はメニューバーに 歯車が表れて実行中だということがわかります。
New MacVim Buffer With Selection
MacVimをインストールすると、上の絵にもあるようにサービスに New MacVim Buffer With Selectionという項目も追加されているはずです。
このメニューはブラウザでもどこでも文字列を選択した状態で 右クリックサービズのメニューの中に表れて、 これを選択すると選択した文字列が書かれたMacVimが立ち上がります。
このMacVimはファイルを開いてないので保存とかするにはファイルを指定したりする必要がありますが、 選択する文字列はテキスト入力エリアでなくても、 PDFの文字列でもなんでも良いので、適当なものをコピーしてすぐに編集したい、 という場合は使えます。
編集後はVimからコピーして他に貼り付けるか、新たなファイルとして保存したりします。
こちらもショートカットキーの指定も出来るので適当に割り当てても良いかもしれません。 (それほど使わないなら右クリックメニューでも十分かもしれませんが。)
まとめ
Vimをどこでも使う、という方法の1つですが、 これは実際にVimを呼び出す、ということで実現する方法です。
ブラウザでは拡張機能でテキストエリアからVimを呼び出して編集、 とかをすることが出来るものがありますが、 vim-anywhereはどのアプリからでもVimを呼び出せます。
ただし、入力欄をVimで編集するというよりは、 新たに入力する文字列をVimで準備すると言った感じです。
終了後に元のアプリの入力欄にフォーカスが戻る、というのが利点として書いてありますが、 元のアプリに戻る時、大概の場合は前にフォーカスが当たってた所に戻るので 特にこのソフトがどうこうでは無いところだと思います。
事前にVimのコピーをOSのクリップボードと繋げられていれば、 実際の所、これは自分でVimを立ち上げて、⌘-Tabで切り替えて入力、 Vim内で内容をコピー、⌘-Tabで元のアプリに切り替えて貼り付け、 で全く同じ事が出来ます。
vim-anywhereでVimを毎回立ち上げるのはちょっと時間がかかるため、 (Vimmerなら)普段から立ち上げてるVimやターミナルなどに切り替えて文字を入力してコピーして戻る、 的なことをした方が早いです。
個人的な感想としてはわざわざこれを使ってやることではないかな、、、という感じでした。 すでに入力してある文字列を含めて編集出来るのであれば大分使い勝手は違うと思いますが、 ユニバーサルな感じでやるにはかなり難しいのかな、と。
MacならVimを立ち上げる直前に⌘-A ⌘-C した上でVimを立ち上げてVimにクリップボードの内容を貼り付けて開始、 みたいなことも可能そうですが、⌘-Aが効かないアプリも中にはあるので 完璧にはならないかな。 (でもこんな感じで結構出来そうな感じがしないでもない。)
もしくは New MacVim Buffer With Selectionの機能の様に、 文字列を選択してる場合にはそれを初期値として使う、という機能があれば嬉しい。 (これは簡単にできそうな感じがする。)
まあパッとVimを呼び出せるだけでも嬉しい人も居るはずです。
この様に実際にVimを呼び出してしまう、という方法も1つですが、 Vim以外の環境でそのキーバインドを使おうというのも別の方法としてあります。 別途Vimアプリを立ち上げるとかではなく、そのアプリ上でそのまま入力しながらかつVimライクな動きをする、という方法。
そういったことを WindowsではAutoHotkey、MacではKarabiner-Elementsを使ってキーバインド設定して出来る様にしたものを以下では紹介しています。