2016年2月14日日曜日

Atomのvim-modeでCtrl+[が効かない!(keyboard-localizationプラグインと日本語キーマップのあれこれ)

半年くらいずっと悩んでいたのですが、ようやく解決したのでここに書き残し候。


どういうこと?

QiNeelの開発にはウェブ開発に便利なAptana Studioを使っているのですが、なにしろ重い。Cazaryのようにファイル分割やモジュール化をしていない小さなプロジェクトではオーバースペック気味なので、そんなときはAtomを使っています。

ただし、エディタに関してはVimキーバインドじゃないと生きていけない体になってしまったので、プラグインにvim-modeex-modeを入れています。

かくしてカーソル移動はVimキーバインドを使えるようになったのですが、挿入モードからコマンドモードに戻るときにCtrl+[を入力すると行がインデントされてしまいました。既存のキーバインドがまだ有効なのかと思ってキーバインドの上書き方法を調べて試してみましたが、何も変わらず。

仕方ないのでEscキーで抜けて「よし保存しよう」と思って:wと入力…しても何も起きません。というかexモードに入らずwにだけ反応して1単語隣にカーソルが移動しました。

…と、これが半年ほど前。ときどき思い出してはいろいろ調べて諦めてしばらく放置を繰り返していました。

そしてある日

懲りずにまたAtomを起動して:wと入力…するはずが、間違えてShiftキーを押しながら:と入力したところ、なんとexモードになった!無事保存できました。

ある日というか、昨日の出来事です。

なんで?

何か理由があってex-modeの作者がキーバインドを特別にShift+:にしたんでしょうか。いやいやそんなアホな。そんなことしたら全世界のびまーからフルボッコに決まってます。なにか別の理由があるはず。

なんでShiftが必要なんだ…としばらく考えていると、天から声が聞こえてきました。

U S キ ー ボ ー ド

そう、US配列のキーボードは、:の場所はJIS配列でいうShift+:。Atomの内部でUS配列として扱われているとするならこの不可解な現象も説明がつく…と江戸川くんも真っ青の推理力を働かせて、もうひとつの謎だったCtrl+[を試してみることに。
USキーボードの[の場所は、JISキーボードでいう@。というわけで挿入モードでCltr+@を入力してみると…

キタ━━━━(゚∀゚)━━━━!!

ちゃんとコマンドモードに移動したよ!犯人はおまえだったのかバーロー。っていうか「Atom USキーボード」で検索したらもう先客がいたよ

解決方法は?

keyboard-localizationというプラグインでキーボードレイアウトにja-JPを指定すると:でexモードに移行できるようになります。上記の先客さんが日本語用のキーマップファイルを提供してくれたようです。

まだ終わらんよ

無事exモードに移行できるようにはなったのですが、Ctrl+[がまだ使えない。相変わらずインデントしてくれます。キーマップファイルが不十分なのかな。それともこの方の環境ではこれでちゃんと動くのかな。
この方の環境がわからないので断言はできませんが、上記記事内に「MSの.Netが強要されます。」というくだりがあるので、おそらくWindowsではないかと。

JIS配列にも106とか109とかありますが、これに関してはヒントになりそうな記述なし。かといって直接問い合わせる勇気も骨なしチキンなのでなし。

そして。

結局、こちらの環境(Linux/106キーボード)で使えるようにあらためてキーマップをカスタマイズしました。

同じ悩みを抱えている子のためにここに置いておきます。Gentoo/Ubuntuで動作確認しています。"Use Keyboard Layout From Path"に保存したファイルを指定するか、ホームディレクトリ内の.atom/packages/keyboard-localization/lib/keymaps/ja_JP.jsonに上書きしてください。

これでバッチリ使えるようになりました。今まではキーバインドのせいでなかなか常用できずにいたのですが、これからはバリバリ開発しますよ。

0 件のコメント:

コメントを投稿