在终端中给定的很长的命令行上移动的最好方法是什么?
说我使用箭头键或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?
由于这还没有关闭,这里有几个选项。
>使用C-xC-e在$ FCEDIT或$ EDITOR或emacs(以此顺序尝试)指定的编辑器中打开当前行。
>如果您先前运行命令,请按Ctrl r进行反向历史搜索,然后键入option25(在这种情况下)。将显示该行。点击TAB即可开始编辑。
>使用s ///修饰符来使用历史展开。例如。 !-2:s / – option25 / – newoption /将重新运行第二个到最后一个命令,但替换option25。要修改最后一个./cmd命令,请使用!string语法:!./ cmd:s / – option25 / – newoption /
可以使用任何分隔符来代替/替换。
>如果编辑上一行,可以使用快速替换:^ – option25 ^ – newoption
>字符搜索。这是由Pax提到的,并且可以以常规emacs模式进行,其中C-]用于前向搜索,而C-M-]用于后向搜索。
我推荐第二个选项。 Ctrl r真的很方便,快捷,没有编辑器,你看到的结果之前的命令运行(不像历史扩展)。