このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

VSCodeのEmacsキーバインド

Google日本語入力のコマンドと状態遷移を解明する」にて:

色々と事情がありまして、Google日本語入力キーバインドを変更しようと思いました。...[snip]... その事情は別なブログ記事に書くかも知れません。
...[snip]...
今まで[変換キーを]トグル方式で便利に使っていたのですが、とある事情(今日は割愛)でトグルがとても使いにくくなってしまいました。それが、今回キー設定をやり直すことになった事情です。

ここで言っている「事情」とは、エディタをEmacsからVSCodeに切り替えたことです。Emacsのなかに籠もっていて、久しく忘れていた日本語入力との相性とか、文字コード〈character encoding〉問題とかに、またぶち当たることになりました。

内容:

Emacsはもうやめよう

実は、2017年の夏にEmacsはやめようと思って切り替えたのですが、その直後に日本語の文書を書く必要があって、慣れないエディタでは間に合わないのでEmacsに戻りました。で、そのままになってしまったんですわ。

老い先短い身としては、僕が生きているあいだくらいEmacsも使えるだろうから、Emacsと共に朽ち果てる選択肢もあります。が、最近では、VSCode拡張機能はあるけどEmacsパッケージはないケースも増えているわけで、「さすがにちょっと」な状況なんです。

エディタ移行に際して、キーバインドの違いは障害になるので、Emacsキーマップを導入して使おう、となります。これがね、なかなか一筋縄ではいかないのですよ。

Awesome Emacs Keymapはダメだった

VSCodeに対するEmacsキーマップでは、Awesome Emacs Keymapが評判も良く多く使われているようです。しかし、日本語入力のときに文字が消えてしまうのです。自分の固有な環境に依存するのかとも思ったのですが、そうでもないようです。

文字が消えるのでは使いものにならないので、Awesome Emacs Keymapは諦めました -- それ以外ではとても良さそうだったので残念です。代わりにEmacs Friendly Keymapを入れました。それほど精度が高いEmacsエミュレーションではありませんが、まーいいとしましょう。カーソル移動とかはEmacs同様です(そりゃそうだ)。

IME状態がわからない

Emacs Friendly Keymapで入力してみると、何かが違います。うまく入力できない。あっ、そうか! IME状態がわからないのです。それで、コマンド入力をひらがなでしてしまったり、日本語を書こうとして英数字だったりのミスをします。

Windows上のEmacsの場合、IMEがON/OFFするタイミングでフック〈イベントハンドラー〉を設定することが出来て、それによってカーソルの色・形状を変更できます。カーソルはいつでも見ていますから、特に意識しなくてもIME〈日本語入力〉のON/OFFは認識できて、上記のような間違った操作はあまり起きませんでした。

すぐさま、VSCodeにおいてIME状態を検出する方法を探しました。これが、どうも無理みたいです。Emacsとは違って、VSCodeは、OSと直接やり取りしてるわけではなくて、Chromium/Electronの上に実装されているので、イベントはChromium/Electronから受け取ることになります。OSレベルのイベントが全てVSCodeに届くとは限らないのです。で、IMEの状態変更イベントはVSCodeに届かないイベントのようです。

マウスポインターではダメだった

IME Statusというアプリケーションがあり、これはIME状態(ONかOFFか)をマウスポインターのそばに緑丸(ON)赤丸(OFF)で表示してくれます。試してみました。

IME Statusの表示は文字カーソルではなくてマウスポインターの場所なんですよね。文字入力中にマウスポインターを探して色を確認するというのは、やはりウマクないです。問題解決にはなりませんでした。

IME Statusの場合、表示場所はダメでしたが、IME状態をモニター出来ているのは確かなので、VSCodeとは別なプロセスが、VSCodeの文字カーソル〈カレット〉位置を取得してその近所にIME状態を表示できる可能性はあります。違うプロセスの文字カーソル位置を取得できるもんか? は知りません(出来ないような気もする)。

IMEのON/OFFにトグルキーをやめる

IMEのON/OFFが常にフィードバックされている状況はもう期待できないようです。これは辛い。辛いけどしょうがない。

今まで僕は、IMEのON/OFFに変換キーをトグルキーとして使っていました。現在の状態がわからないのにトグル方式はハナハダ使いにくい。IMEOnキーとIMEOffキーを分離すれば、トグルでまごまごしているよりはマシだろう、と思います。それで、Google日本語入力IME〉のキー設定を変更することにしたわけです。

現状では、ここらへんで妥協するしかなさそうです。

その他の問題点

インクリメンタル検索の挙動が、EmacsVSCodeではだいぶ違って、これもけっこうなストレス。コピー&ペーストにkillリングが使えないのも不便(とりあえず、Windows OSの履歴付きクリップボードでしのいでるけど)。エディタで文字化けも何年かぶりで経験しました。Emacsディレクトリエディタ〈dired〉と類似のVSCode機能拡張がありますが、Emacs dired(の強化版)には及びません。

しばらくは細かい問題で悩まされそうですが、慣れれば解決することも多そうなので、後戻りする気はありません。