刚接触 Mac 时,最喜欢的就是 Mac 所有输入框都有类似 Emacs 的快捷键(因为有过 vim 和 Emacs 经验),日常也经常使用这些快捷键。 一直不知道原来这些快捷键还可以自定义,今天因为 iTerm2 里无法使用 Option + . 快捷键的问题,搜索到一个回答提到了怎么自定义这些快捷键。
Customize the behavior of Cocoa ’ s text system
苹果关于 Cocoa 的文档
下面是我的配置(在 MWeb 和 TextMate 里测试通过):
- 更多 emacs 里移动和删除单词的
- 选中单词的
- Vscode 里很喜欢的上下移动行及往上下复制行的快捷键(使用了 vim 里的上下 j, k )
// 在 ~/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/
