我知道组合Ctrl+A可以跳转到当前命令的开头,Ctrl+E可以跳转到结尾。
但是有没有办法像Cocoa应用程序中的Alt+←/→那样逐字跳转呢?
我知道组合Ctrl+A可以跳转到当前命令的开头,Ctrl+E可以跳转到结尾。
但是有没有办法像Cocoa应用程序中的Alt+←/→那样逐字跳转呢?
当前回答
如前所述,您可以在~/中添加set -o vi。bashrc使用vi/vim键绑定,或者你可以在.bashrc中添加以下部分来使用Ctrl和方向键移动:
# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'
要启动这几行代码的效果,请选择源~/。Bashrc或启动新的终端会话。
其他回答
以下是你可以做到的方法
默认情况下,终端有这些快捷键来逐字移动(左右):
esc + B(左) esc + F(右)
您可以配置alt+←和→来生成这些序列:
打开终端首选项(cmd+,); 在“设置”选项卡上,选择“键盘”,如果有,双击“键盘”“←”;如果没有,则添加“键盘”。 根据需要设置修饰符,并在框中键入快捷键:esc+B,生成文本\033b(不能手动键入此文本)。 重复word-right (esc+F变成\033f)
或者,你可以参考这篇文章在textmate:
http://blog.macromates.com/2006/word-movement-in-terminal/
在iterm2的Preferences > Profile > Keys下,单击Key Mappings下面的+并记录一个新的快捷方式。对于Action,选择发送转义序列,并分别输入b或f用于向后和向前。
当我试图为(Ctrl+←)记录一个时,我注意到在键盘快捷键字段中,箭头从未出现。事实证明,我必须首先禁用mac的默认系统首选项>键盘>快捷方式>任务控制快捷方式才能让事情正常工作,因为它们会覆盖iterm2的默认快捷方式。标准终端应用程序也应该如此。
针对iTerm2 Build 3.3.4用户的新答案:
步骤1:(macOS X)系统首选项>键盘>快捷键选项卡>选择任务控制(左面板)>取消选中标记为“向左移动一个空间”和“向右移动一个空间”的快捷键
步骤2:(iTerm2 Build 3.3.4)首选项>配置文件>选择*默认值(左面板)>键选项卡>删除“”和“”“<-”两个表项>将“左选项()键:”和“右选项()键:”设置为“Esc+”
没有混乱的shell配置文件,没有混乱的劣质masOS(默认)终端,没有尴尬的Esc+F/B,冲洗和重复无意义。
交易完成! !
享受这个技巧吧,我的程序员伙伴们!
实际上,这取决于您使用的shell,但大多数shell都有类似的绑定。你提到的绑定(例如Ctrl+A和Ctrl+E)是你会在许多其他程序中找到的绑定,它们已经使用了很长时间,顺便说一下,在大多数UI应用程序中也适用。
下面是Bash的默认绑定:
最重要的Bash键盘快捷键
还请注意,您可以自定义它们。您需要创建一个文件,如您所愿,我将其命名为.bash_key_bindings,并将其放入我的主目录中。在这里,您可以设置一些通用的bash选项,也可以设置键绑定。为了确保它们被应用,您需要修改一个名为”的文件。bash在启动时读取的Bashrc(如果它不存在,则必须创建它),并在那里进行以下调用:
bind -f ~/.bash_key_bindings
~表示bash中的主目录,如上所述,您可以根据自己的喜好命名文件,也可以将其放置在您喜欢的位置,只要您提供正确的路径+名称进行绑定。
让我向您展示我的.bash_key_bindings文件的一些摘录:
set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off
这些只是设置了几个选项(例如禁用铃声;这些都可以在bash网页上找到)。
"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert
它们确保字符本身不做任何事情,只是确保字符是“类型化的”(它们将自己插入shell)。
"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line
这很有趣。如果我单独按Ctrl+D(我选择D表示删除),什么都不会发生。但是如果我输入一个小写的w,光标左边的单词就会被删除。但是,如果我输入一个大写字母,光标右边的单词就会被杀死。对于从游标开始的整条线,l和l也是如此。如果我输入一个“a”,整行实际上被删除了(游标之前和之后的所有内容)。
我在Ctrl+F上设置了向前跳转一个单词,在Ctrl+B上设置了向后跳转一个单词
"\C-f": forward-word
"\C-b": backward-word
正如你所看到的,你可以创建一个快捷方式,它会立即导致一个动作,或者你可以创建一个快捷方式,它只是初始化一个字符序列,然后你必须输入一个(或多个)字符来导致一个动作发生,如上面的例子所示。
因此,如果您对默认绑定不满意,可以随意定制它们。这里有bash手册的链接以获取更多信息。
从Mac OS X Lion 10.7开始,终端默认将option -左/右箭头映射为Esc-b/f,所以现在bash和其他使用这些emacs兼容键绑定的程序都内置了这个功能。