- 是否存在我所不知道的用于跳转到行首和行尾的快捷键?(我主要使用终端、Chrome和LibreOffice)
- 是否有办法将这些键的功能重新绑定到我熟悉的功能上?我愿意放弃对文档的操作,因为它们对我来说几乎没有用处。
- 我不是系统上唯一的用户。如果我的用户设置会影响其他人的使用体验,那就最好不要破坏他们的体验。如果不可能的话,我认为我可能有最强烈的偏好!
- 我使用多种语言并切换键盘布局,所以任何解决方案都应该能够在多个键盘布局之间切换时正常工作。
~/Library/KeyBindings/
并保存一个类似以下内容的属性列表文件DefaultKeyBinding.dict
来重新映射Home和End键。
{
"\UF729" = moveToBeginningOfLine:; // home
"\UF72B" = moveToEndOfLine:; // end
"$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
"$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
}
大多数在OS X中用于编辑文本的键绑定都定义在`/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict`中。
应用更改需要重新打开应用程序。某些旧版本的Xcode(适用于最新版本6.3.1)、Terminal和许多跨平台应用程序将忽略DefaultKeyBinding.dict。
有关可自定义键绑定的更多信息,请参阅Cocoa Text System。
Terminal的键绑定可以在“偏好设置”>“配置文件”>“设置”>“键盘”中进行自定义。`\033OH`将光标移到行首,`\033OF`将光标移到行尾。
在Eclipse中,应该在“偏好设置”>“常规”>“键盘”中修改键绑定。您需要为命令“Line Start”和“Line End”修改默认绑定(将⌘←替换为↖,将⌘→替换为↘)。为了使选择工作,还需修改“Select Line Start”和“Select Line End”。
注意:您可能需要注销并重新登录才能使~/Library/KeyBindings/DefaultKeyBinding.dict
的更改生效。
/StandardKeyBinding.dict
是二进制文件,无法读取。 - Greensudo mkdir ~/Library/KeyBindings
sudo chown $(whoami):staff ~/Library/KeyBindings
touch ~/Library/KeyBindings/DefaultKeyBinding.dict
open -a TextEdit ~/Library/KeyBindings/DefaultKeyBinding.dict
- theSparky~/Library/KeyBindings/DefaultKeyBinding.dict
对我没有起作用。
我发现KeyRemap4MacBook系统偏好设置插件(现在称为Karabiner-Elements)非常好用,你还可以使用它重新映射各种按键,而无需编辑任何文本文件。例如,将页面上/下键更改为使光标也随之移动。
只需下载该插件,在系统偏好设置面板中浏览到“对于PC用户”部分,并勾选“使用PC风格的Home/End”。
请注意,我选择了(将Home键更改为Command+Left)
而不是(将Home键更改为Control+A)
,因为如果我选择了第一个选项,并且行被换行了,Home键会将我带到上方几行的包裹行的开头,而不是当前行的开头。
Ctrl+a
和Ctrl+e
,但这可能会导致其他不兼容性。 - joshfindit$ mkdir -p ~/Library/KeyBindings
然后在~/Library/KeyBindings/DefaultKeyBinding.dict
创建或编辑文件。如果之前不存在,添加整个部分。如果已存在,则在该块内添加四行新的内容。
{
"\UF729" = "moveToBeginningOfLine:";
"\UF72B" = "moveToEndOfLine:";
"$\UF729" = "moveToBeginningOfLineAndModifySelection:";
"$\UF72B" = "moveToEndOfLineAndModifySelection:";
}
为了激活设置,您需要退出用户并重新登录。
请注意,这包括正常移动光标的操作以及使用Shift+Home/End组合键在光标移动期间进行选择。
~/Library/KeyBindings/DefaultKeyBinding.dict
解决方案部分起作用:一些应用程序(如TextEdit)现在具有所需的行为,但其他应用程序则没有。Google Chrome和Slack是两个似乎不遵守DefaultKeyBinding.dict
文件的应用程序。
为了修复剩下的应用程序,我使用BetterTouchTool (legacy) / BetterTouchTool (current)创建了特定于应用程序的键盘快捷键绑定,将Home
和End
绑定到OS X的本机快捷键Ctrl+A
和Ctrl+E
。BetterTouchTool并非免费,但有一个45天的试用期。
要做到这一点:
安装并启动BetterTouchTool
转到手势>键盘选项卡
在“选择应用程序”下,点击+并选择您想要修复的应用程序。
点击“添加新快捷键”,在“记录快捷键”字段中分配Home键,并将“触发其他键盘快捷键”设置为Ctrl+A。对于End和Ctrl+E,请重复此操作。
完成后,面板应如下所示:~/.config/karabiner/karabiner.json
文件中的规则部分,将下面代码中的JSON数组添加进去。这样做可以重新映射Home和End键,使它们的工作方式与PC/Windows上的相同。
{
"rules": [
{
"description": "change home key to command + left_arrow",
"manipulators": [
{
"from": {
"key_code": "home"
},
"to": [
{
"key_code": "left_arrow",
"modifiers": [
"left_command"
]
}
],
"type": "basic"
}
]
},
{
"description": "change home key to command + left_arrow while presing shift (selection)",
"manipulators": [
{
"from": {
"key_code": "home",
"modifiers": {
"mandatory": [
"left_shift"
]
}
},
"to": [
{
"key_code": "left_arrow",
"modifiers": [
"left_command",
"left_shift"
]
}
],
"type": "basic"
}
]
},
{
"description": "change end key to command + right_arrow",
"manipulators": [
{
"from": {
"key_code": "end"
},
"to": [
{
"key_code": "right_arrow",
"modifiers": [
"left_command"
]
}
],
"type": "basic"
}
]
},
{
"description": "change end key to command + right_arrow while presing shift (selection)",
"manipulators": [
{
"from": {
"key_code": "end",
"modifiers": {
"mandatory": [
"left_shift"
]
}
},
"to": [
{
"key_code": "right_arrow",
"modifiers": [
"left_command",
"left_shift"
]
}
],
"type": "basic"
}
]
}
]
}
另请参阅:GitHub Gist
"modifiers": { "optional": [ "any"] }
来简化这个规则,避免为选择重复编写规则(这个注释的格式很糟糕,复制粘贴到编辑器中以正确阅读我猜)。{
"description": "Home is Beginning of line",
"type": "basic",
"from": {
"key_code": "home",
"modifiers": { "optional": [ "any"] }
},
"to": [{
"key_code": "left_arrow",
"modifiers": [ "left_command" ]
}]
}
- n-smits<?xml version="1.0"?>
<!-- ~/Library/Application Support/KeyRemap4MacBook/private.xml -->
<!-- Custom keyboard mappings for MBP using https://pqrs.org/macosx/keyremap4macbook/ -->
<root>
<item>
<name>Lari's PC Style Home/End</name>
<appendix>(Change Home to Command+Left)</appendix>
<appendix>(Change End to Command+Right)</appendix>
<appendix></appendix>
<appendix>{{ PC_STYLE_BINDINGS_IGNORE_APPS_DESCRIPTION }}</appendix>
<identifier>lari.remap.pclikehomeend</identifier>
<block>
<only>DREAMWEAVER</only>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME, ModifierFlag::SHIFT_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, KeyCode::END, ModifierFlag::SHIFT_L</autogen>
</block>
<block>
<only>BLUEFISH,WORD,EXCEL,POWERPOINT</only>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, KeyCode::END</autogen>
</block>
<!--
<block>
<only>EMACS, TERMINAL, X11, ECLIPSE</only>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::A, ModifierFlag::CONTROL_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, KeyCode::E, ModifierFlag::CONTROL_L</autogen>
</block>
-->
<block>
<not>{{ PC_STYLE_BINDINGS_IGNORE_APPS }}</not>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_UP, ModifierFlag::COMMAND_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_DOWN, ModifierFlag::COMMAND_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_DOWN, ModifierFlag::COMMAND_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::CURSOR_LEFT, ModifierFlag::COMMAND_L</autogen>
<autogen>__KeyToKey__ FROMKEYCODE_END, KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
</block>
</item>
</root>
moveToLeftEndOfLine
和moveToRightEndOfLine
。像@Lri那样使用moveToBeginningOfLine
和moveToEndOfLine
可能会导致不一致的行为。
苹果的快捷键和其他人的快捷键之间还有许多其他差异,我已经添加了。例如,ControlLeft和ControlRight应该用来在单词之间移动;而不是AltLeft和AltRight。我认为这还不是详尽无遗的,但目前对我来说运行得很好。我假设用户已经交换了Control和Super键以修复剪切、复制和粘贴问题。
~/Library/KeyBindings/DefaultKeyBinding.dict:
{
"\UF729" = moveToLeftEndOfLine:; // home
"\UF72B" = moveToRightEndOfLine:; // end
"$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
"$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
"@\UF700" = moveUp:; //super-up
"@\UF701" = moveDown:; //super-down
"@\UF702" = moveWordLeft:; //super-left
"@\UF703" = moveWordRight:; //super-right
"@$\UF700" = moveUpAndModifySelection:; // super-shift-up
"@$\UF701" = moveDownAndModifySelection:; // super-shift-down
"@$\UF702" = moveWordLeftAndModifySelection:; // super-shift-left
"@$\UF703" = moveWordRightAndModifySelection:; // super-shift-right
"@\UF728" = deleteWordForward:; // super-delete
"@\U7F" = deleteWordBackward:; // super-backspace
}
If you're using zsh, also do this:
1) Place the following in your
~/.zshrc
filebindkey "^[[1~" beginning-of-line bindkey "^[[4~" end-of-line
2) Run
source ~/.zshrc
in any open terminals.
bindkey "^[[~4" end-of-line
。请注意数字4的位置。 - Ty.^[[4~
会输出4
,而^[[~4
会将光标移动到行尾。 - Ty.^[[4~
的例子。你使用什么样的键盘和字符编码,也许这会有所不同? - RationalDev likes GoFundMonica/Library/KeyBindings/DefaultKeyBinding.dict (apply to all users)
或者
~/Library/KeyBindings/DefaultKeyBinding.dict (apply to yourself)
添加以下内容:
{
"\UF729" = moveToBeginningOfParagraph:; // home
"\UF72B" = moveToEndOfParagraph:; // end
"$\UF729" = moveToBeginningOfParagraphAndModifySelection:; // shift-home
"$\UF72B" = moveToEndOfParagraphAndModifySelection:; // shift-end
"^\UF729" = moveToBeginningOfDocument:; // ctrl-home
"^\UF72B" = moveToEndOfDocument:; // ctrl-end
"^$\UF729" = moveToBeginningOfDocumentAndModifySelection:; // ctrl-shift-home
"^$\UF72B" = moveToEndOfDocumentAndModifySelection:; // ctrl-shift-end
}