Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

[ Mac ] Vim/Emacs/VSCode/PyCharm向けKarabinerカスタマイズ

$
0
0

Karabinerをカスタマイズしてアプリケーションごとにキーボードの挙動を変えよう

エディタを色々使っていると、そのソフトごとにキーイベントを変更したいときがあります。

.vimrcやinit.el、その他ソフトの環境設定でできることもありますが、エディタ内の設定だけでは難しい処理もKarabinerを使えばうまくいく場合があります。

今回は特に下記を実現させてみました。

  • 端末上のVimでCtrl+Cを押すとエスケープ後自動で英数入力に切り替える(ノーマルモードに戻ったとき、すぐコマンドを使いたい!)
  • 端末上のEmacsでCtrl+Gを押すとエスケープ後自動で英数入力に切り替える
  • VSCodeでCtrl+Cを押すとコマンドパレットなども閉じたい(マルチカーソルの解除等もしたい)
  • [追記] VSCodeでコマンドパレットなどでもC-n/C-pで選択、C-mで確定機能を追加しました!

※ 本記事のKarabinerは現行最新バージョンの10.18.0を使用しています

設定方法

はじめに設定方法を記載し、特筆事項は後述します。

private.xmlの設定

private.xmlを/Users/[ユーザー名]/Library/Application Support/Karabiner/以下に保存します

private.xml
<?xml version="1.0"?><root><appdef><appname>TERMINAL</appname><equal>com.apple.Terminal</equal></appdef><appdef><appname>ITERM2</appname><equal>com.googlecode.iterm2</equal></appdef><appdef><appname>PYCHARM</appname><equal>com.jetbrains.pycharm</equal></appdef><appdef><appname>VSCODE</appname><equal>com.microsoft.VSCode</equal></appdef><windownamedef><name>VIM</name><regex>.*vim.*</regex></windownamedef><windownamedef><name>EMACS</name><regex>.*emacsclient.*</regex></windownamedef><item><name>Private Mapping</name><!-- vim --><item><name>Custom Vim Change CONTROL_C+EISUU</name><identifier>private.control_C_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>VIM</windowname_only><autogen>
                __KeyToKey__
                KeyCode::C, ModifierFlag::CONTROL_L,
                KeyCode::JIS_EISUU, KeyCode::C, ModifierFlag::CONTROL_L
            </autogen></item><item><name>Custom Vim Change ESC+EISUU</name><identifier>private.escape_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>VIM</windowname_only><autogen>
                __KeyToKey__
                KeyCode::ESCAPE,
                KeyCode::JIS_EISUU, KeyCode::ESCAPE
            </autogen></item><!-- Emacs --><item><name>Custom Emacs Change CONTROL_G+EISUU</name><identifier>private.control_g_plus_eisuu</identifier><only>TERMINAL,ITERM2</only><windowname_only>EMACS</windowname_only><autogen>
                __KeyToKey__
                KeyCode::G, ModifierFlag::CONTROL_L,
                KeyCode::JIS_EISUU, KeyCode::G, ModifierFlag::CONTROL_L
            </autogen></item><!-- PyCharm --><item><name>Custom PyCharm Change CONTROL_C+EISUU</name><identifier>private.control_C_plus_eisuu_pycharm</identifier><only>PYCHARM</only><autogen>
                __KeyToKey__
                KeyCode::C, ModifierFlag::CONTROL_L,
                KeyCode::JIS_EISUU, KeyCode::ESCAPE
            </autogen></item><item><name>Custom PyCharm Change ESC+EISUU</name><identifier>private.escape_plus_eisuu_pycharm</identifier><only>PYCHARM</only><autogen>
                __KeyToKey__
                KeyCode::ESCAPE,
                KeyCode::JIS_EISUU, KeyCode::ESCAPE
            </autogen></item><!-- VSCode --><item><name>Custom VSCode Ctrl+C to ESC</name><identifier>private.ctrl_c_to_escape_vscode</identifier><only>VSCODE</only><autogen>
                __KeyToKey__
                KeyCode::C, ModifierFlag::CONTROL_L,
                KeyCode::JIS_EISUU, KeyCode::ESCAPE
            </autogen></item><item><name>Custom VSCode Ctrl+N to Cursor Down</name><identifier>private.ctrl_n_to_cursor_down_vscode</identifier><only>VSCODE</only><autogen>
                __KeyToKey__
                KeyCode::N, ModifierFlag::CONTROL_L,
                KeyCode::CURSOR_DOWN
            </autogen></item><item><name>Custom VSCode Ctrl+P to Cursor Up</name><identifier>private.ctrl_p_to_cursor_up_vscode</identifier><only>VSCODE</only><autogen>
                __KeyToKey__
                KeyCode::P, ModifierFlag::CONTROL_L,
                KeyCode::CURSOR_UP
            </autogen></item><item><name>Custom VSCode Ctrl+M to Return</name><identifier>private.ctrl_m_to_return_vscode</identifier><only>VSCODE</only><autogen>
                __KeyToKey__
                KeyCode::M, ModifierFlag::CONTROL_L,
                KeyCode::RETURN
            </autogen></item></item></root>

カスタム設定をリロードし、チェックを入れます

  1. 最初に「Reload XML」をクリックして先ほどのprivate.xmlをリロードします
  2. Change KeyタブにPrivate Mappingの項目ができるので、全部にチェックを入れます

※ For Japaneseはお好みで

karabiner.jpg

使う

便利!!!!!

特筆事項など

Application Bundle Identiferを調べる

ターゲットとなるアプリケーションのApplication Bundle Identifer(com.apple.Terminalとか)を調べるにはEvent Viewerを使います。

  1. Spotlightでeventで検索すると出てくるので起動します
  2. 対象のアプリを起動し、Appタブで確認します
  3. なぜかEvent Viewerはcmd+Qでアプリケーション終了できないので、Application Bundle Identiferを調べ終わったらメインメニューからQuit EventViewerで。

eventviewer.jpg

Vim

僕は端末のVimしか使わないのでMacVimなどを使っている人は設定が変わると思います。
Ctrl+CでNormalモードに戻った際日本語入力が続くのは非常にストレスなので、オススメな設定です。

もちろん、Ctrl+[に本設定を割り当てても良いでしょう

VSCode

はじめはVSCodeのデフォルトショートカットから"escape"に割り当てられているものをすべて抜き出し、ctrl+cに追加割当してみました。

が、コマンドパレットなどはctrl+cで抜けられませんでした。これはイライラする!ということで、Karabinerを使った方法に切り替えたところうまくいったので、上記keybinding.jsonの設定は不要になりました。

また、C-n/C-p/C-mの機能をKarabinerに持たせたことにより、VSCode側のキーボード設定(keybindings.json)が非常にシンプルになりました。

最終的にVSCode側のキーボード設定は下記の通りになりました。(C-n/C-p/C-m/C-cに関する設定をすべて削除できました)

keybindings.json
//既定値を上書きするには、このファイル内にキーバインドを挿入します[{"key":"shift+cmd+\\","command":"workbench.action.splitEditor"},{"key":"cmd+ctrl+l","command":"editor.action.format","when":"editorTextFocus"},{"key":"ctrl+i","command":"jumpToNextSnippetPlaceholder","when":"editorTextFocus && inSnippetMode"},{"key":"cmd+ctrl+r","command":"workbench.action.tasks.runTask"},{"key":"cmd+ctrl+x","command":"workbench.action.tasks.terminate"}]

もちろん、エディタだけでなく色々なソフトのキーイベントを自分ごのみにカスタマイズしてはいかがでしょうか。

参考サイト


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>