概要
みなさんこんにちはcandleです。今回はiTerm2上の記号系のキーバインドが使えない問題を解決します。
iTerm2上のemacsは基本的に control + 記号のキーバインドが使えません。
詳しいことはこちらの記事に書かれています。
http://memo.sugyan.com/entry/20120224/1330051378
どうやらctrlキーが制御できるASCIIの範囲が決まっているらしいです。
今回の記事はこちらの記事を参考にさせてもらいました。
記号のキーバインドは数年前挑戦して、挫折したのですが、本当に助かりました。
ありがとうございます。
また、下の記事ではControll + Shift + 記号のキーバインドにも対応した書き方をしているので、
そちらに挑戦したい方はぜひ参考にしてください。
http://d.akinori.org/2012/01/02/
前提
emacsを使っている。
iTerm2を使っている。
設定の方針
まず、概要にも書いた様に、iterm2では直接 control + 記号のキーバーンドは打てません。
そこでemacsの機能を使ってあたかもcontrol + 記号を打った様にするわけです。
私はあまりemacsの細かいことはわからないので、先ほどの記事から引用させていただきました。
この機能を使います。
例えば、C-. を実現するなら C-x @ c .とします。
試しにemacs上でC-x @ c .と実行すればC-.と同じアクションが実行されるでしょう。
もちろんそのキーバインドが設定されていればですが。
次に、iterm2の機能でグローバルなショートカットキーを使います。
iterm2で「C-.」と打った時、emacsには「C-x @ c .」を送信する様にしれば、C-.のキーバインドが使えるということです。
iterm2のキー設定
iterm2を開いて、上のメニューから「iTerm2」から「Preferences…」を選びます。
「Keys」を選び、+ボタンを押します。
試しに C-.を追加します。
keybord shortcutのフィールドがアクティブな状態で 「control + .」を打ち込みます。打ち込むと「^.」となります。
次にプルダウンメニューから「Send Hex Code」を選びます。
新しく出てきたテキストフィールドに以下を記述します。
このHex codeはこの様に対応しています。
40 = @
63 = c
2e = .
つまり
になっています。
okボタンを押しましょう。
他のキーバインドは以下の様になっています。
ショートカットキー | Hex code |
---|---|
C-, | 18 40 63 2c |
C-. | 18 40 63 2e |
C-: | 18 40 63 3a |
C-; | 18 40 63 3b |
C-< | 18 40 63 3c |
C-> | 18 40 63 3e |
注意してほしいのは
「C-<」は Control + Shift + < で
「C->」は Control + Shift + >で登録します。
上の画像をみてもわかる様に、違っているのは最後のhex codeだけです。
他にも C-(やC-/などを割り当てたい方は以下のサイトの表からhex codeを参照してください。
http://www9.plala.or.jp/sgwr-t/c_sub/ascii.html
iterm2の設定は以上です。
emacsでキーを割り当てる
試しに、先ほど設定したC-.に割り当てます。
ファイルのパスを表示する関数を作りショートカットを割り当ています。
emacsの設定ファイルを開きます。
emacs .emacs.d/init.el
以下を書き込みます。
(defun show-file-name () "Show the full path file name in the minibuffer." (interactive) (message (buffer-file-name))) (global-set-key (kbd "C-.") 'show-file-name)
保存して、設定ファイルを再読み込みします。
M-x eval-buffer
そして先ほどのC-.を実行します。
C-.
これはつまり、キーボードで入力した C-. がiterm2で C-x @ c .
に変換されemacs上でうまくキーバインドが機能したことをあらわしています。
うまくいきました。
まとめ
この方法をとれば、より多くのショートカットキーを簡単なキーバインドで定義できるようになります。
emacsを使った素早いコーディングが可能になりますね。