Fra*_*ank 147 bash terminal window
在终端中给定的非常长的命令行上移动的最佳方法是什么?
假设我使用了箭头键或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
Run Code Online (Sandbox Code Playgroud)
现在我需要移动(从行的开头或结尾开始)光标到--option25
那里修改一些东西.
到达那里最快的方法是什么?我通常做的是Ctrl- A开始然后反复Alt- F逐字逐句前进(或者Ctrl- E结束Alt- B然后- 后退).但是在很长的路线上需要花费太多时间.必须有一种方法来搜索并直接跳转到我需要修改的部分,例如option25
?
won*_*ice 192
需要说明的是,您不希望"快速在终端命令行上移动光标".您真正想要的是在shell程序中通过命令行导航的快速方法.
例如,Bash是非常常见的shell.它使用Readline库来实现命令行输入.因此,知道Readline绑定非常方便,因为它不仅用于bash.例如,gdb也使用Readline来处理输入.
在Readline文档中,您可以找到所有与导航相关的绑定(以及更多):http: //www.gnu.org/software/bash/manual/bash.html#Readline-Interaction
如果上面的链接关闭,请进行简短的复制粘贴:
基本必需品
运动
杀了并且猛拉
M是Meta键.对于Max OS X终端,您可以在"设置/键盘"中启用"使用选项作为元键".对于Linux来说,它更复杂.
更新
另请注意,Readline可以在两种模式下运行:
要将Bash切换为使用vi模式:
$ set -o vi
Run Code Online (Sandbox Code Playgroud)
Personaly我更喜欢vi模式,因为我使用vim进行文本编辑.
奖金
在macOS终端应用程序中(以及在iTerm中),您可以选择 - 单击以移动光标(光标将移动到单击位置).这甚至在里面工作vim
.
Pia*_*rus 101
由于尚未关闭,这里还有一些选择.
$FCEDIT
or $EDITOR
或指定的编辑器中的当前行emacs
(按此顺序尝试).option25
(在本例中).该行将显示.点击Tab此处开始编辑.s///
修饰符进行历史记录扩展.例如,!-2:s/--option25/--newoption/
将重新运行倒数第二个命令,但替换option25.要修改最后一个./cmd
命令,请使用以下!string
语法:!./cmd:s/--option25/--newoption/
^--option25^--newoption
我推荐第二种选择.Ctrl+ r非常方便快捷,编辑器没有任何问题,你可以在命令运行之前看到结果(与历史扩展不同).
pax*_*blo 10
我倾向于喜欢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.
Run Code Online (Sandbox Code Playgroud)
让我们看看emacs爱好者是否可以提出更好的解决方案,少于5次击键(虽然我不想开始宗教战争).
你有没有想过你是否愿意将这个可怕的长命令放入剧本中?:-)
实际上,我可以比那更好:" 3f5B
"找到第三次出现的"5"然后回到单词的开头.
使用Meta-b/Meta-f分别按单词向后/向前移动.
在OSX中,Meta转换为ESC,这很糟糕.
但另外,您可以打开终端首选项 - >设置 - >配置文件 - >键盘并选中"使用选项作为元键"
运行一次命令后,运行 fc
它将$EDITOR
使用上一个命令启动,然后您可以使用常规编辑器修改命令.保存并退出时,将执行该文件.
但是,正如Pax所说 - 命令行不是特别适合编辑荒谬的长行 - 为什么不将命令变成脚本呢?
小智 5
如果你想向前移动一定数量的单词,请点击M-<n>
(M-
用于 Meta,通常是转义键),然后点击一个数字。这会向 readline 发送一个重复参数,这样你就可以重复你想要的任何命令 - 如果你想前进,然后点击M-<n> M-f
,光标将向前移动<n>
单词数。
例如
$|echo "two three four five six seven"
$ M-4
(arg: 4) echo "two three four five six seven"
$ M-f
$ echo "two three four| five six seven"
Run Code Online (Sandbox Code Playgroud)
因此,对于您的示例,从您将点击的行开头的光标开始,M-26 M-f
您的光标将位于--option25|
- 或 - 从行尾开始,M-26 M-b
您的光标将位于--|option25
归档时间: |
|
查看次数: |
138032 次 |
最近记录: |