用最快的方法在terminal命令行上移动光标?
在terminal的特定命令行上移动的最佳方式是什么?
说我用箭头键或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然后后退)。 但是需要花费太多的时间。 必须有一种方法来search和直接跳转到我需要修改的部分,例如option25
?
由于这还没有closures,这里有几个选项。
- 使用Ctrl + x,然后按Ctrl + e打开由
$FCEDIT
或$EDITOR
或emacs
指定的编辑器中的当前行($FCEDIT
顺序尝试)。 - 如果您之前运行过命令,请按Ctrl + r进行反向历史search,然后键入
option25
(在这种情况下)。 该行将被显示。 点击Tab开始编辑在这一点上。 - 使用
s///
修饰符进行历史扩展。 例如!-2:s/--option25/--newoption/
将重新运行倒数第二个命令,但replace选项25。 要修改最后一个./cmd
命令,请使用!string
语法:!./cmd:s/--option25/--newoption/
可以使用任何分隔符代替/中的replace。 - 如果编辑上一行,可以使用快速replace:
^--option25^--newoption
- 字符search。 这是由Pax提到的,可以在正常的emacs模式下按Ctrl + ]进行前向search, 按Ctrl + Alt + ]进行后向search。
我build议第二个选项。 Ctrl + r非常方便快捷,不需要使用编辑器,并且在命令运行前看到结果(与历史扩展不同)。
要清楚的是,你不需要一个“在terminal命令行上快速移动光标”。 你真正想要的是在shell程序中通过命令行导航的快速方法。
例如, Bash是非常常见的shell。 它使用Readline库来实现命令行input。 可以这么说,知道Readline绑定是非常方便的,因为它不仅用在bash中。 例如,gdb也使用Readline来处理input。
在Readline文档中,您可以find所有导航相关的绑定(以及更多): http : //www.gnu.org/software/bash/manual/bash.html#Readline-Interaction
如果上面的链接出现故障,请复制粘贴:
基本必需品
- Cb移回一个字符。
- Cf前进一个字符。
- [DEL]或[Backspace]删除光标左边的字符。
- Cd删除光标下方的字符。
- C-_或Cx Cu撤消上一个编辑命令。 您可以撤消一路回到空行。
运动
- Ca移动到行首。
- Ce移动到行的末尾。
- Mf前进一个单词,一个单词由字母和数字组成。
- Mb向后移动一个单词。
- Cl清除屏幕,重新打印顶部的当前行。
杀死和猛击
- Ck将当前光标位置的文本杀死到行尾。
- Md从光标杀死到当前单词的结尾,或者如果在单词之间,则结束到下一个单词的结尾。 单词边界与制造商使用的相同。
- M- [DEL]从光标处杀死当前单词的开头,或者如果在单词之间,则杀死前一个单词的开头。 字边界与Mb使用的边界相同。
- Cw从光标杀死前一个空格。 这与M-不同,因为单词边界不同。
- Cy将最近被杀死的文本放回到光标处的缓冲区中。
- 我旋转杀死戒指,并拔出新的顶部。 如果先前的命令是Cy或My,则只能执行此操作。
M是元键。 对于Max OS X Terminal,您可以在设置/键盘中启用“使用选项作为元键”。 对于Linux来说更为复杂。
更新
另外请注意,Readline可以在两种模式下运行:
- emacs模式(这是默认的)
- vi模式
要切换Bash以使用vi模式:
$ set -o vi
Personaly我更喜欢vi模式,因为我使用vim进行文本编辑。
奖金
在macOSterminal应用程序中(也可以在iTerm中),可以通过Option-Click移动光标(光标将移动到点击的位置)。 这甚至可以在vim
里面工作。
按住Option键并点击你想要移动光标的位置,terminal将光标移动到精确的位置。
我倾向于selectvi编辑模式(因为这些击键现在embedded我的脊髓(大脑根本不用),还有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爱好者是否能够提出一个更好的解决scheme,less于5次击键(尽pipe我不想发起宗教战争)。
你有没有想过是否可能想把这个可怕的长命令写入脚本? 🙂
其实我可以比这个更好一些:“ 3f5B
”find第三个“5”,然后回到这个单词的开头。
运行一次命令后,运行fc
它将启动$EDITOR
与以前的命令,然后你可以使用您的常规编辑器来修改该命令。 当你保存并退出时,文件将被执行。
..但是,正如Pax所说 – 命令行不是特别好编辑荒谬的长行 – 为什么不把这个命令变成一个脚本?
使用Meta-b / Meta-f分别向后/向前移动一个字。
在OSX中,Meta翻译为ESC,这很吸引人。
但是,也可以打开terminal首选项 – >设置 – >configuration文件 – >键盘,并选中“使用选项作为元键”
如果你想向前移动一定数量的单词,按下M-<n>
( M-
是Meta,通常是退出键)然后点击一个数字。 这会向readline发送一个重复的参数,所以你可以重复你想要的任何命令 – 如果你想前进,然后按下M-<n> Mf
,光标将向前移动<n>
个单词。
例如
$|echo "two three four five six seven" $ M-4 (arg: 4) echo "two three four five six seven" $ Mf $ echo "two three four| five six seven"
所以对于你的例子来说,你可以点击M-26 Mf
和你的光标在--option25|
– 或者 – 从M-26 Mb
行的末尾将光标置于--|option25
一个select是在emacs
使用Mx shell
。 这提供了emacs
具有的所有编辑工具和击键,例如,可以使用Cs
来search文本option25
。
(但是,如果有人能指点我的search和编辑工具,我仍然更喜欢真正的terminalshell。)
增量历史search
在terminalinput:
gedit ~/.inputrc
然后复制粘贴并保存
"\e[A": history-search-backward "\e[B": history-search-forward "\e[C": forward-char "\e[D": backward-char
所有你需要做的,以find一个先前的命令是input说,前2或3个字母和向上的箭头将带你快速说我想:
for f in *.mid ; do timidity "$f"; done
所有我需要做的就是进入
fo
并向上箭头命令即将出现
使用鼠标
有时,编辑命令行的最简单方法是使用鼠标。 以前的一些答案给出了一个命令来打开你的$ EDITOR当前行。 对我来说(zhs with grml config)那个组合是Alt+e
。 如果您在编辑器中启用鼠标,则可以使用它。
要在Vim中启用鼠标,将其添加到〜/ .vimrc中
set mouse=a set ttymouse=xterm2
如果你想在terminal中进行文本select(而不是将鼠标移到vim上),点击时按住Shift键; 当然这是terminal特定的。
系统pipe理员不应该害怕鼠标。
在Cygwin中,您可以通过右键单击窗口来激活此function。 在popup的窗口中,select选项… – >鼠标 – >激活点击放置命令行光标 – >应用。
从现在开始,只需在命令行中的某个位置点击鼠标左键就可以将光标放在那里。