😎

Vimで好きなキーをEscに設定&ノーマルモード遷移時に半角入力にする

2020/11/14に公開2

最近vimを職場で使い始めたのですが、まだ操作に慣れていないことに加えて、
以下作業が煩わしく感じるようになりました。

  • Escキーが遠い。(CTRL + ] もちょっと遠い)
  • 全角入力のままノーマルモードに遷移してしまい、vimコマンドが効かなくなってしまう。

そこで、職場の人に教えていただいたり、ネット記事を参考にして、
好きなキーをEscに設定&ノーマルモード遷移時に半角入力にする設定を行ったので、
備忘録として残します。

具体的には以下作業を実施しました。

  1. 好きなキーをEscに設定 → .vimrcで好きなキーをキーバインド
  2. ノーマルモード遷移時に半角入力にする → Karabinerというアプリを使って、上記設定したキーを押下時に半角入力にする

KarabinerがmacOS用アプリのため、環境はMacを想定しています。

設定環境

macOS Catalina 10.15.7
キーボードはJISキーボードを使用しています。

好きなキーをEscに設定

こちらは以下記事を参考にしました。

Sublimeを捨ててVimmerを目指す素人

私は[Ctrl+j]をEscキーとして設定しました。
設定方法として、vim設定ファイルである".vimrc"にキーバインド情報を追記します。

ターミナルを開いて、以下コマンドを実行します。

noremap <C-j> <esc>
noremap! <C-j> <esc>

noremapを使ってキーを割り当てます。
noremapについては、以下を参考にしました。

【図解Vim】mapとnoremap

noremapを使うことでユーザが指定した他のキー割り当ての影響を受けません。

" noremapでキーバインドを設定
" 以下ではCtrl+jをEscキーに設定しています。
noremap! <C-j> <esc>

設定を保存して、vimを開き直すと設定したキーが、Escキーとして動くことが確認できると思います。

ノーマルモード遷移時に半角入力にする

karabinerというmacOSのキーボードをカスタマイズするためのアプリを使って、キーカスタマイズを行います。

karabiner公式サイト

こちらは、以下記事を参考にさせていただきました。

Karabiner-elementsを使って、ctrl+[を押して日本語→英語入力に切り替えたい(neovimをterminalから使っている)

上記記事では、もともとのEscキーと "Ctrl+[" 入力時に半角入力に戻す設定としています。

  1. karabiner-Elements の preferences を開きます。
  2. Complex modifications のタブを選択します。
  3. 左下の "Add rule" を選び、上部の import more rules from the internet (open a web browser) のボタンを押します。
  4. そうするとWebサイトに飛びます (https://ke-complex-modifications.pqrs.org/)
  5. For Japanese (日本語環境向けの設定) (rev 5) を探し、インストール(Importボタンより)します。
  6. その後、 Ctrl+[を押したときに、英数キーも送信する (vim用) (rev 2) をEnableにします。
  7. ついでにESCキーも同様の挙動にしたければ escキーを押したときに、英数キーも送信する (vim用) もEnableにします。

今回は自身で設定した、"Ctrl+j"押下時も半角入力に戻したいため自身で独自ルールを作成します。
こちらは以下サイトを参考にしました。

ターミナルでkarabinerの設定ファイルを編集します。

vim ~/.config/karabiner/karabiner.json

descriptionに自身が設定した"Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)"があります。こちらを参考にし、自身の独自ルールを作成しました。

注意
設定ファイルのため、必ずバックアップを取ってから編集してください。
またキーボード種類によって設定ファイルの内容が異なる場合があります。

【修正箇所】

"Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)"のルールより、
"open_bracket"の記述を、"j"に置換

karabiner.json
{
	"description": "Ctrl+をj押したときに、英数キーも送信する(vim用) (rev 2)",
		"manipulators": [
		{
			"conditions": [
			{
				"keyboard_types": [
					"ansi",
				"iso"
				],
				"type": "keyboard_type_if"
			}
			],
			"from": {
				"key_code": "j",
				"modifiers": {
					"mandatory": [
						"control"
					]
				}
			},
			"to": [
			{
				"key_code": "j",
				"modifiers": [
					"control"
				]
			},
			{
				"key_code": "japanese_eisuu"
			}
			],
			"type": "basic"
		},
		{
			"conditions": [
			{
				"keyboard_types": [
					"jis"
				],
				"type": "keyboard_type_if"
			}
			],
			"from": {
				"key_code": "close_bracket",
				"modifiers": {
					"mandatory": [
						"control"
					]
				}
			},
			"to": [
			{
				"key_code": "close_bracket",
				"modifiers": [
					"control"
				]
			},
			{
				"key_code": "japanese_eisuu"
			}
			],
			"type": "basic"
		}
	]
}

上記の設定を、"escキーを押したときに、英数キーも送信する(vim用)"ルールの上に挿入します。
(この設定の上に、挿入しないとうまく反映されなかった。。。)

保存するとkarbinerの設定画面で、自身の追記した設定が追加されたことが確認できます!

確認してみると、、、

ctrl+j押下で、、、

自身で設定したキーによってノーマルモードに遷移し、さらに半角入力にすることができました!

最後に

書いてみると意外と長くなり大変だった。
githubとかに設定ファイル置いておくのが便利だなと思いました。。。

Discussion