如何使⌘←和⌘→在终端的家庭/终端组合中工作?


21

为什么fn- - 或他人)做家庭/结束在终端而是一个- 工作在其他地方?

因此,为了清楚起见,问题在于如何使Terminal接受Command+ 并返回首页和终点?

Answers:


21

终端将尽其所能地方便地提供您要求的功能。

原因是在Terminal中运行的程序具有不同的规则将光标移动到行的开头/结尾,例如:

  • bash(和其他外壳)使用CtrlACtrlE
  • vi用途0$/Shift4

其他程序可能使用其他键。没有用于将光标定位在行首/尾的通用键组合。

当然,终端可以维护许多常用程序的组合键列表,检查正在运行的程序并为您发送正确的键,也可以提供菜单项,例如将光标移到Shell⌘←中的行首,然后发送CtrlA在幕后。但是我猜苹果工程师认为,如果您在CLI领域冒险,您就会知道它的特质。

附带说明一下,Terminal提供了功能OptionOption并且行为bash与您预期的一样,并将光标移动到上一个/下一个单词的开头。这是因为这些键组合已映射到EscbEscbman bash有关更多信息,请参见“移动命令”一节)。vi例如,在中,仅后者(一种)有效(在该答案的最后,我将显示如何配置vi为与Option和一起使用Option)。

但由于的Automator,AppleScript的和bash别名,你可以得到,并与工作bash(和其他可能的弹)和vi

第一步是映射,然后映射CtrlACtrlE。在第二步中,我将向您展示如何配置vi荣誉CtrlACtrlE(因此将使其vi和兼容)。

地图CtrlACtrlE

  1. 在终端中,转到首选项...>设置> [您的活动配置文件]>键盘: 在此处输入图片说明

  2. +,选择“向左光标”,“ Control-Shift”作为修饰符,然后选择“发送文本:”。然后按CtrlA\001将出现在文本字段中)并使用进行确认OK在此处输入图片说明

    (在此答案的先前版本中,我使用“ Shift”作为修饰符。我注意到shift,如果您不立即放手,则此设置与会冲突,该设置会显示先前的“终端”标签。使用“ Control-Shift”解决该问题。)

  3. 现在为“向右光标”添加一个组合键,但是按CtrlE\005将出现在文本字段中)。用确认OK

  4. 打开Automator(例如,单击space以调出Spotlight并键入Automator),选择File> New并选择Service

    在此处输入图片说明

  5. 拖动Run AppleScript到右窗格: 在此处输入图片说明

  6. 输入以下脚本:

    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

    在此处输入图片说明

  7. 使用此脚本重复步骤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

    在此处输入图片说明

  8. 这是Terminal> Services现在的样子:

    在此处输入图片说明

配置vi以尊重CtrlACtrlE

  1. .bashrc用您喜欢的编辑器打开并添加以下行:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    前两个map命令告诉viminterpret ControlEControlAas $0,分别将光标移动到行的开头或结尾。

    最后两个map命令告诉vim您将光标一次按一个单词移动一次,方法是按optionOption

注意事项

您会注意到,在您按下的时刻与光标实际移动的时刻之间存在短暂的延迟。

请记住,它仅适用于使用CtrlA/的程序CtrlE,因此您可能仍想了解在Terminal中使用的每个程序的特定组合键。

(在macOS Sierra 10.12.4上测试)


3
感谢您提供详细的答案,是否有请愿书,要求苹果在下一次重新设计
Jackie

很高兴能为您提供帮助。
jaume 2012年

哇..所有这些都为我提供了一条
捷足先登的

这是一个很好的答案,但是可以通过排除所有无关的信息(vi与终端完全不同的应用程序)来改善它。
公理会'17

1
那是个绝招。我还通过发送“ Home”和“ End”的键码来成功运行AppleScript:“键码115”和“键码119””
Keymon

2

当然有可能。

首先,如果您有一个带有HOME / END键的Windows键盘,则可以使用免费工具“ DoubleCommand”来使它们表现出应有的功能(开始/行尾)。

其次,对于终端,请转到首选项,键盘,编辑看起来像是向左箭头的图标/键,选择“发送文本”,然后键入ctrl + a。做完了!

结束按钮也一样。

如果您没有PC键盘,则可以使用其他按键组合进行相同的操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.