Answers:
终端将尽其所能地方便地提供您要求的功能。
原因是在Terminal中运行的程序具有不同的规则将光标移动到行的开头/结尾,例如:
bash
(和其他外壳)使用CtrlA和CtrlEvi
用途0和$/Shift4其他程序可能使用其他键。没有用于将光标定位在行首/尾的通用键组合。
当然,终端可以维护许多常用程序的组合键列表,检查正在运行的程序并为您发送正确的键,也可以提供菜单项,例如将光标移到Shell⌘←中的行首,然后发送CtrlA在幕后。但是我猜苹果工程师认为,如果您在CLI领域冒险,您就会知道它的特质。
附带说明一下,Terminal提供了功能Option←,Option→并且行为bash
与您预期的一样,并将光标移动到上一个/下一个单词的开头。这是因为这些键组合已映射到Escb和Escb(man bash
有关更多信息,请参见“移动命令”一节)。vi
例如,在中,仅后者(一种)有效(在该答案的最后,我将显示如何配置vi
为与Option←和一起使用Option→)。
但由于的Automator,AppleScript的和bash别名,你可以得到⌘←,并⌘→与工作bash
(和其他可能的弹)和vi
。
第一步是映射⌘←,然后映射⌘→到CtrlA和CtrlE。在第二步中,我将向您展示如何配置vi
荣誉CtrlA和CtrlE(因此将使其vi
与⌘←和兼容⌘→)。
地图⌘←和⌘→到CtrlA和CtrlE
按+,选择“向左光标”,“ Control-Shift”作为修饰符,然后选择“发送文本:”。然后按CtrlA(\001
将出现在文本字段中)并使用进行确认OK:
(在此答案的先前版本中,我使用“ Shift”作为修饰符。我注意到⌘shift←,如果您不⌘立即放手,则此设置与会冲突,该设置会显示先前的“终端”标签。使用“ Control-Shift”解决该问题。)
现在为“向右光标”添加一个组合键,但是按CtrlE(\005
将出现在文本字段中)。用确认OK。
打开Automator(例如,单击⌘space以调出Spotlight并键入Automator),选择File> New并选择Service
:
拖动Run AppleScript
到右窗格:
输入以下脚本:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 123 using {shift down, control down}
end tell
end tell
end run
并另存为Move Cursor to Beginning of Line
:
使用此脚本重复步骤4.至6 .:
on run {input, parameters}
tell application "System Events"
tell application process "Terminal"
key code 124 using {shift down, control down}
end tell
end tell
end run
并另存为Move Cursor to End of Line
:
这是Terminal> Services现在的样子:
配置vi
以尊重CtrlA和CtrlE
.bashrc
用您喜欢的编辑器打开并添加以下行:
alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'
前两个map
命令告诉vim
interpret ControlE和ControlAas $和0,分别将光标移动到行的开头或结尾。
最后两个map
命令告诉vim
您将光标一次按一个单词移动一次,方法是按option←和Option→。
注意事项
您会注意到,在您按下⌘←或⌘→的时刻与光标实际移动的时刻之间存在短暂的延迟。
请记住,它仅适用于使用CtrlA/的程序CtrlE,因此您可能仍想了解在Terminal中使用的每个程序的特定组合键。
(在macOS Sierra 10.12.4上测试)
⌘
vi
与终端完全不同的应用程序)来改善它。