当前位置:  开发笔记 > 编程语言 > 正文

在终端命令行上移动光标的最快方法是什么?

如何解决《在终端命令行上移动光标的最快方法是什么?》经验,为你挑选了6个好方法。

在终端中给定的非常长的命令行上移动的最佳方法是什么?

假设我使用了箭头键或Ctrl- R来获得这个长命令行:

./cmd --option1 --option2 --option3 --option4 --option5 --option6 --option7 --option8 --option9 --option10 --option11 --option12 --option13 --option14 --option15 --option16 --option17 --option18 --option19 --option20 --option21 --option22 --option23 --option24 --option25 --option26 --option27 --option28 --option29 --option30 --option31 --option32 --option33 --option34 --option35 --option36 --option37 --option38 --option39 --option40 --option41 --option42 --option43 --option44 --option45 --option46 --option47 --option48 --option49 --option50 

现在我需要移动(从行的开头或结尾开始)光标到--option25那里修改一些东西.

到达那里最快的方法是什么?我通常做的是Ctrl- A开始然后反复Alt- F逐字逐句前进(或者Ctrl- E结束Alt- B然后- 后退).但是在很长的路线上需要花费太多时间.必须有一种方法来搜索并直接跳转到我需要修改的部分,例如option25



1> wonder.mice..:

需要说明的是,您不希望"快速在终端命令行上移动光标".您真正想要的是在shell程序中通过命令行导航的快速方法.

例如,Bash是非常常见的shell.它使用Readline库来实现命令行输入.因此,知道Readline绑定非常方便,因为它不仅用于bash.例如,gdb也使用Readline来处理输入.

在Readline文档中,您可以找到所有与导航相关的绑定(以及更多):http: //www.gnu.org/software/bash/manual/bash.html#Readline-Interaction

如果上面的链接关闭,请进行简短的复制粘贴:

基本必需品

Ctrl-b向后移动一个字符.

Ctrl-f向前移动一个字符.

[DEL]或[Backspace]删除光标左侧的字符.

Ctrl-d删除光标下方的字符.

Ctrl-_或Cx Cu撤消上一个编辑命令.您可以一直撤消回空行.

运动

Ctrl-a移动到行的开头.

Ctrl-e移动到行尾.

Meta-f向前移动一个单词,其中单词由字母和数字组成.

Meta-b向后移动一个单词.

Ctrl-l清除屏幕,重新打印顶部的当前行.

杀了并且猛拉

Ctrl-k将文本从当前光标位置杀到行尾.

Md从光标到当前单词的结尾,或者,如果在单词之间,到达下一个单词的结尾.字边界与Mf使用的边界相同.

M- [DEL]从光标处取出当前单词的开头,或者,如果在单词之间,则从前一单词的开头处开始.字边界与Mb使用的边界相同.

Ctrl-w从光标到前一个空格.这与M-不同,因为单词边界不同.

Ctrl-y将最近被杀死的文本放回到光标处的缓冲区中.

我旋转杀戮戒指,猛拉新的顶部.如果先前的命令是Cy或My,则只能执行此操作.

M是Meta键.对于Max OS X终端,您可以在"设置/键盘"中启用"使用选项作为元键".对于Linux来说,它更复杂.

更新

另请注意,Readline可以在两种模式下运行:

emacs模式(默认值)

vi模式

要将Bash切换为使用vi模式:

$ set -o vi

Personaly我更喜欢vi模式,因为我使用vim进行文本编辑.

奖金

在macOS终端应用程序中(以及在iTerm中),您可以选择 - 单击以移动光标(光标将移动到单击位置).这甚至在里面工作vim.


在标准的Ubuntu终端中,Meta(M)是Alt + Shift,除非您禁用菜单访问键盘快捷键,在这种情况下它只是Alt.
我更喜欢这个答案,因为它降低了bash键盘输入如何工作(它来自哪里)的本质/根/原因,即Readline.
在Konsole的Kde中,Meta(M)是alt键

2> Pianosaurus..:

由于尚未关闭,这里还有一些选择.

使用Ctrl+ x后跟Ctrl+ e打开$FCEDITor $EDITOR或指定的编辑器中的当前行emacs(按此顺序尝试).

如果您之前运行了该命令,请按Ctrl+键r进行反向历史记录搜索并键入option25(在本例中).该行将显示.点击Tab此处开始编辑.

使用s///修饰符进行历史记录扩展.例如,!-2:s/--option25/--newoption/将重新运行倒数第二个命令,但替换option25.要修改最后一个./cmd命令,请使用以下!string语法:!./cmd:s/--option25/--newoption/
可以使用任何分隔符代替/替换.

如果编辑上一行,您可以使用快速替换: ^--option25^--newoption

字符搜索.这是Pax提到的,可以在常规的emacs模式下进行,Ctrl+ ]用于前向搜索,Ctrl+ Alt+ ]用于向后搜索.

我推荐第二种选择.Ctrl+ r非常方便快捷,编辑器没有任何问题,你可以在命令运行之前看到结果(与历史扩展不同).



3> Connecting l..:

按住Option键并单击您希望光标移动的位置,Terminal将光标移动到精确的位置.



4> paxdiablo..:

我倾向于喜欢vi编辑模式(因为那些按键现在嵌入我的脊髓(大脑根本没用),以及来自WordStar 3.3的CTRL-K,CTRL-X :-).您可以使用命令行set -o vi激活它(并set -o emacs恢复).

在Vi中,它将是(ESC-K首先获得排队)" f5;;B"(没有双引号).

当然,你必须了解在线上有什么可以解决这个问题.基本上,它是

f5 to find the first occurrence of "5" (in --option5).
;  to find the next one (in --option15).
;  to find the next one (in --option25).
B  to back up to the start of the word.

让我们看看emacs爱好者是否可以提出更好的解决方案,少于5次击键(虽然我不想开始宗教战争).

你有没有想过你是否愿意将这个可怕的长命令放入剧本中?:-)

实际上,我可以比那更好:" 3f5B"找到第三次出现的"5"然后回到单词的开头.



5> Edson Medina..:

使用Meta-b/Meta-f分别按单词向后/向前移动.

在OSX中,Meta转换为ESC,这很糟糕.

但另外,您可以打开终端首选项 - >设置 - >配置文件 - >键盘并选中"使用选项作为元键"



6> dbr..:

运行一次命令后,运行 fc

它将$EDITOR使用上一个命令启动,然后您可以使用常规编辑器修改命令.保存并退出时,将执行该文件.

但是,正如Pax所说 - 命令行不是特别适合编辑荒谬的长行 - 为什么不将命令变成脚本呢?

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有