5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DefaultKeyBinding.dictを使って、macOSのキーバインドを変更

Last updated at Posted at 2016-12-21

久しぶりにキーバインドをいろいろと見直したので、ついでに作成したメモです。

DefaultKeyBinding.dictを編集して、macOS全体で使えるキーバインドを変更してしまいます。主に、カーソルキー周りのキーバインドを変更しています。

情報を確認した環境

環境 情報
OS macOS Mojave(10.14.4)
Date 2019/04/24

何をやっているのか?

簡単に言うと『~/Library/KeyBindings/DefaultKeyBinding.dict』を編集することで、キーバインドを変更しています。詳しい話はこちらのサイトを参考に。

テキスト編集のキー操作を自在にコントロールする - ザリガニが見ていた...。
http://d.hatena.ne.jp/zariganitosh/20101026/text_key_binding

変更内容

control + up / down

元々はスクロールだったのを、実際にカーソルも移動するように変更。

  • 元々の設定
	"^\Uf700" = "scrollPageUp:";
	"^\Uf701" = "scrollPageDown:";
	"$\Uf700" = "moveUpAndModifySelection:";
	"$\Uf701" = "moveDownAndModifySelection:";
  • 変更後
	"^\Uf700" = "pageUp:";
	"^\Uf701" = "pageDown:";
	"$^\Uf700" = "pageUpAndModifySelection:";
	"$^\Uf701" = "pageDownAndModifySelection:";

command + up / down

ドキュメントの先頭/最後への移動はあまり使わないので、1行単位のスクロールに変更。

  • 元々の設定
	"@\Uf700" = "moveToBeginningOfDocument:";
	"@\Uf701" = "moveToEndOfDocument:";
	"@$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
	"@$\Uf701" = "moveToEndOfDocumentAndModifySelection:";
  • 変更後
	"@\Uf700" = "scrollLineUp:";
	"@\Uf701" = "scrollLineDown:";
	"@$\Uf700" = "scrollLineUp:";
	"@$\Uf701" = "scrollLineDown:";

option + up / down

行頭/行末をたどる上下移動は使わないので、これをドキュメントの先頭/最後への移動に割り当て。

  • 元々の設定
	"~\Uf700" = (
		"moveBackward:",
		"moveToBeginningOfParagraph:",
	);
	"~\Uf701" = (
		"moveForward:",
		"moveToEndOfParagraph:",
	);
	"~$\Uf700" = "moveParagraphBackwardAndModifySelection:";
	"~$\Uf701" = "moveParagraphForwardAndModifySelection:";
  • 変更後
	"~\Uf700" = "moveToBeginningOfDocument:";
	"~\Uf701" = "moveToEndOfDocument:";
	"~$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
	"~$\Uf701" = "moveToEndOfDocumentAndModifySelection:";

control + left / right

行頭/行末への移動はcommandのコンビネーションで出来るので、controlは単語単位の移動に割り当て。ある意味、この変更がしたくてキーバインドをいじったようなもの。

  • 元々の設定
	"^\Uf702" = "moveToLeftEndOfLine:";
	"^\Uf703" = "moveToRightEndOfLine:";
	"^$\Uf702" = "moveToLeftEndOfLineAndModifySelection:";
	"^$\Uf703" = "moveToRightEndOfLineAndModifySelection:";
  • 変更後
	"^\Uf702" = "moveWordLeft:";
	"^\Uf703" = "moveWordRight:";
	"^$\Uf702" = "moveWordLeftAndModifySelection:";
	"^$\Uf703" = "moveWordRightAndModifySelection:";

home / end

外付けのキーボードでHome/Endの動作が気になったので、行頭/行末への移動を割り当ててみました。問題があるようだったら、これはOFFで。

  • 変更後
	"\Uf729" = "moveToLeftEndOfLine:";
	"\Uf72b" = "moveToRightEndOfLine:";
	"$\Uf729" = "moveToLeftEndOfLineAndModifySelection:";
	"$\Uf72b" = "moveToRightEndOfLineAndModifySelection:";

その他

あると便利な単語選択を、余ってるキーに割り当て。

  • 追加
	"^r" = "selectWord:";

DefaultKeyBinding.dict

最終的に、DefaultKeyBinding.dictはこんな感じになりました。

{
	// /////////////////////////////////////////////////////////////
	// MARK: - up / down

	// ctrl + up/downでページ単位の移動
	"^\Uf700" = "pageUp:";
	"^\Uf701" = "pageDown:";
	"$^\Uf700" = "pageUpAndModifySelection:";
	"$^\Uf701" = "pageDownAndModifySelection:";

	// cmd + up/downで行単位のスクロール
	"@\Uf700" = "scrollLineUp:";
	"@\Uf701" = "scrollLineDown:";
	"@$\Uf700" = "scrollLineUp:";
	"@$\Uf701" = "scrollLineDown:";

	// opt + up/downで全体の先頭・最後へ移動
	"~\Uf700" = "moveToBeginningOfDocument:";
	"~\Uf701" = "moveToEndOfDocument:";
	"~$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
	"~$\Uf701" = "moveToEndOfDocumentAndModifySelection:";

	// /////////////////////////////////////////////////////////////
	// MARK: - left / right

	 // ctrl + left/rightで単語単位の移動
	"^\Uf702" = "moveWordLeft:";
	"^\Uf703" = "moveWordRight:";
	"^$\Uf702" = "moveWordLeftAndModifySelection:";
	"^$\Uf703" = "moveWordRightAndModifySelection:";

	// /////////////////////////////////////////////////////////////
	// MARK: - home / end

	// home / endで行頭・行末へ移動
	"\Uf729" = "moveToLeftEndOfLine:";
	"\Uf72b" = "moveToRightEndOfLine:";

	// shift + home / endで行頭・行末まで選択
	"$\Uf729" = "moveToLeftEndOfLineAndModifySelection:";
	"$\Uf72b" = "moveToRightEndOfLineAndModifySelection:";

	// /////////////////////////////////////////////////////////////
	// MARK: - その他

	// ctrl + rで単語選択
	"^r" = "selectWord:";
}

感想(?)

  • 『command + .』がcancelOperationに割り当てられてるのを発見

  • クリップボード関係の割り当ては、アプリによってはうまく動作しないのであきらめた

  • → 仕方が無いので、行単位の編集を標準にしたかったのも断念

  • 行単位のスクロールもアプリによってはうまく動かないけど、これは使えるときだけ使う

  • Karabiner-Elementsさんは便利だけど、まだまだ、ちょっとしたキー割り当てでも面倒すぎる

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?