AtomのVim Modeを使いやすくする
Atomの前はVimを使っていたので、結構快適になった。ガチのVimmerの人たちには物足りないかもしれないけど、自分程度のなんちゃってVimmerは特に不満なく使ってる。
ただ、以下の二つがあればもっと使いやすいと思った。
どっちもAtomのinit.coffeeになんか書くことで実現できないかなと思って調べ始めた。
結論から言うと、1.はKarabiner(旧KeyRemap4MacBook)の設定で実現できた。
2.についてはinit.coffeeでやろうとしたけど、中途半端なところで諦めた。
以下で詳しく書く。
ノーマルモードに入るとき自動でIMEオフ
ググったらすでにやってる人の記事が簡単に見つかって、その人はKarabinerでやってた。
Atomをmarkdownエディタとして使い始めたのでメモ - Qiita
ということで、これを真似て、Karabinerのprivate.xmlを書いた。書き方は一部自分好みに変えた。
<?xml version="1.0"?> <root> <appdef> <appname>ATOM</appname> <equal>com.github.atom</equal> </appdef> <item> <name>Leave InsertMode With Eisuu For Atom Vim Mode</name> <identifier>private.app_atom_esc_with_eisuu</identifier> <only>ATOM</only> <autogen> --KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU </autogen> <autogen> --KeyToKey-- KeyCode::BRACKET_LEFT, VK_CONTROL, KeyCode::ESCAPE, KeyCode::JIS_EISUU </autogen> <autogen> --KeyToKey-- KeyCode::C, VK_CONTROL, KeyCode::ESCAPE, KeyCode::JIS_EISUU </autogen> </item> </root>
identifierの内容が微妙なのは否めない。
上記リンクと、以下の本家のドキュメントを参考にした。
How to add your own settings / Karabiner - Software for OS X
ドキュメントを参考にxmlを編集してリロードして、チェックボックスをオンにするとすぐに使えるようになる。便利。
今のところ意図通りに動いていて、ノーマルモードで意気揚々とキーを叩いたら日本語入力になっててあれれってのがなくなった。とても快適。
Atomから離れるときに自動的にノーマルモードに戻る
こっちはググっても見つけられなかったので、init.coffeeをいじって実現できないか試してみることにした。
まずAtomのAPIから、フォーカスを失ったときというかアクティブじゃなくなったときというか、そういう感じのイベントが無いか探してみた。
Atom API(やっぱりやたら重い)
で、たぶん無かった。
じゃあ逆にアクティブになったときにノーマルモードに戻せばいいんだと思って、今度はそういうイベントが無いか探した。
そしたらPaneオブジェクトにonDidActivate
というイベントが見つかったので、以下を参考にinit.coffeeに追記してみた。
Atom API / Pane#instance-onDidActivate
A1.1 Upgrading to 1.0 APIs : Upgrading Your Package
init.coffee
pane = atom.workspace.getActivePane() disposable = pane.onDidActivate -> editor = atom.workspace.getActiveTextEditor() editorElement = atom.views.getView(editor) atom.commands.dispatch editorElement, 'vim-mode:reset-command-mode' # Atomの0.194.0ではこのコード片がinit.coffeeにあると、Atom起動時にTypeError例外が発生します
ActivePaneのonDidActivate
イベントに、'vim-mode:reset-command-mode'
を呼び出すコードを登録する。
(ちなみに前回init.coffeeについて書いた記事では、新しいAPIでのコマンドの実行方法が分からないと書いたんだけど、普通に上のリンクの2つ目(前回も貼り付けた)に載ってた。atom.commands.dispatch
でできる。)
これでうまくいくはず!と思って試したら、
- Pane間の移動時にしか発火されない
- 起動時のActivePaneでしか有効じゃない
2.についてはコード書いてるときから気付いてて、何かしら対処はできそうだと思った。
問題は1.の方で、他のPaneから戻って来たときにはイベントが発火されてノーマルモードになるけど、他のアプリからAtomに戻ったときには発火されなかった。
今回はアプリの切り替え時にノーマルモードにすることを想定していたので、これが無理となるとやる気がなくなって2.の方もどうでもいいやとなってしまった。
しかも、コード内にコメントで示した通り、コードを書きながらリロードしてテストしている間は気が付かなかったけれど、いったんAtomを終了して再起動すると例外が発生して使えなくなったので、今結局コメントアウトしてる。
しかし、エディタを離れたときにノーマルモードに移るっていうのは、ググっても本家Vimに対しての情報もあんまりヒットしないんだけど、そういう要望はあんまりないのだろうか。それとも調べ方が悪いのかな。
もし調べ方が悪いのではなく要望がないのだとしたら、熟練のVimmerは、
のどれかなのだろうか。わからない。
まとめ
- 作者: DrewNeil,新丈径
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/28
- メディア: Kindle版
- この商品を含むブログ (3件) を見る