刚接触 Mac 时,最喜欢的就是 Mac 所有输入框都有类似 Emacs 的快捷键(因为有过 vim 和 Emacs 经验),日常也经常使用这些快捷键。
一直不知道原来这些快捷键还可以自定义,今天因为 iTerm2 里无法使用 Option + . 快捷键的问题,搜索到一个回答提到了怎么自定义这些快捷键。

Customize the behavior of Cocoa’s text system

苹果关于 Cocoa 的文档

下面是我的配置(在 MWeb 和 TextMate 里测试通过):

  • 更多 emacs 里移动和删除单词的
  • 选中单词的
  • Vscode 里很喜欢的上下移动行及往上下复制行的快捷键(使用了 vim 里的上下 j, k)
Text
// 在 ~/Library/KeyBindings/ 目录下添加 DefaultKeyBinding.dict 文件,这个目录默认不存在,先创建
// targetDir=~/Library/KeyBindings; [ -d $targetDir ] || mkdir $targetDir; ln -sf ~/Dropbox/conf/DefaultKeyBinding.dict $targetDir
// 此文件更改后,完全退出某个 app,重新打开即可使用
{
/* Additional Emacs bindings */
"~f" = "moveWordForward:";
"~b" = "moveWordBackward:";
"~d" = "deleteWordForward:";
"~h" = "deleteWordBackward:";
"~<" = "moveToBeginningOfDocument:";
"~>" = "moveToEndOfDocument:";
"~v" = "pageUp:"; /* ^v pageDown */
// selections
"~F" = "moveWordForwardAndModifySelection:";
"~B" = "moveWordBackwardAndModifySelection:";
"^," = "moveToBeginningOfDocumentAndModifySelection:"; /* select to beginning */
"^." = "moveToEndOfDocumentAndModifySelection:"; /* select to ending */
"~l" = "selectLine:";
// compounds
// "~t" = "moveToBeginningOfLine:"; // this two line is for debugging
// "~y" = "deleteToEndOfLine:";
"^K" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "deleteForward:");
"~j" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "deleteForward:", "moveDown:", "yank:", "insertNewlineIgnoringFieldEditor:", "moveBackward:");
"~k" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "deleteBackward:", "moveUp:", "moveToEndOfLine:", "insertNewlineIgnoringFieldEditor:", "yank:");
"~J" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "yank:", "insertNewlineIgnoringFieldEditor:", "yank:");
"~K" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "yank:", "insertNewlineIgnoringFieldEditor:", "yank:", "moveUp:");
// "~K" = ("moveToBeginningOfLine:", "deleteToEndOfLine:", "yank:", "moveToBeginningOfLine:", "yank:", "insertNewlineIgnoringFieldEditor:", "moveBackward:");
}

Cocoa 默认快捷键定义在(可以看看哪些不知道的):
/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict

iTerm2 里无法使用 Option + . 问题

Preferences - Profiles - Keys
将下面的 Left ⌥ Key 改为 Esc+ 就可以了

参考

Cocoa 常用命令

原文地址:https://uedsky.com/2019-08/mac-custom-cocoa-text-system/
获取最佳阅读体验并参与讨论,请访问原文