我知道Esc . 为您提供最后一个命令的最后一个参数 .
但我对最后一个命令的第一个参数感兴趣 . 有关键绑定吗?
在同一行,有没有从最后一个命令获取第n个参数的通用方法?我知道在bash脚本中,您可以使用 $0
, $1
等,但这些在命令行上不起作用 .
Also, what about iterating through the 0th argument of previous commands, like we can do with the last argument by continuously pressing Esc + .?
9 回答
正如
M-.
(meta-dot或esc-dot或alt-dot)是readline函数yank-last-arg
,M-C-y
(meta-control-y或esc-ctrl-y或ctrl-alt-y)是readline函数yank-nth-arg
. 如果不指定n
,则会触发上一个命令的第一个参数 .要指定参数,请按Escape和数字或按住Alt并按数字 . 您可以执行Alt - 开始指定负数,然后释放Alt并按下数字(这将从参数列表的末尾开始计算 .
例:
输入以下命令
现在在下一个提示符下,键入
echo
(带有以下空格),然后按Alt-Ctrl-y,您现在将看到:
如果没有按Enter键,请执行以下操作
按Alt-3 Alt-Ctrl-y
按Alt - 2 Alt-Ctrl-y
现在你会看到:
顺便说一句,您可以通过选择参数0将
echo
放在行上:按Alt-0 Alt-Ctrl-y
Edit:
要回答您添加到原文中的问题:
您可以按Alt-0然后重复按Alt- . 单步执行前面的命令(arg 0) . 同样地Alt--然后重复Alt- . 将允许您逐步执行前面的倒数第二个参数 .
如果历史记录中的特定行没有适当的参数,则响铃将响铃 .
如果您经常使用特定组合,则可以定义一个宏,以便一次按键执行它 . 此示例将通过按Alt-Shift-Y从先前命令调用第二个参数 . 您可以选择您喜欢的任何可用按键而不是此按键 . 您可以反复按此按钮以逐步执行以前的操作 .
要试用它,请在Bash提示符下输入宏:
要使其持久化,请将此行添加到
~/.inputrc
文件中:不幸的是,这似乎不适用于arg 0或负参数数字 .
!$
获取上一个命令行参数的最后一个元素 .要使用第一个参数,可以使用
!^
或!:1
例:
由于您的问题是关于使用任何其他参数,这里有一些有用的:
前四种形式更常用 . 形式
!:2-
有点违反直觉,因为它不包括最后一个参数 .我非常喜欢@larsmans的答案,我不得不学习更多 . 添加此答案可帮助其他人找到手册页部分,并知道要google的内容:
!^可能是第一个参数的命令 . 我不确定是否有办法获得第n个 .
您还可以从历史记录中的任何命令获取参数!
基本上它在yanking previous (命令) arguments 中有用 .
例如,如果发出以下命令:
那么,
Hello,
将是第一个参数,today?
是 sixth ,这是最后一个参数;意思是可以通过输入来引用它:Alt 6后跟Ctrl-Alt-6
Ctrl传统上表示为前缀为键名称的帽子字符
^
,而Alt表示为M-
,即 M eta前缀 .因此,上面的快捷方式可以重新定义为
^My
到yank .此外,命令行中还有hats替换快捷方式:
替换上一个命令的 first matched string ,意思是:
会导致:
留下第二场比赛(
hello
)不变 .以上只是一个捷径:
事件级别(*)替换上一个命令中第一个找到(匹配)的字符串,而为第一个部分添加
g
开关前缀将适用于 the whole line g lobally:通常在其他相关命令中完成,例如
sed
,vi
和regex
(正则表达式) - 一种非常有效的搜索方式(匹配字符串) .这就是我自己使用它并通过我从各种来源(包括手册页,博客和论坛)阅读的内容自行尝试的理解 .
希望它能够揭开_Ber-Again shell(在
sh
shell上的一个游戏,其发明者的姓氏后称为Bourne shell)的神秘方式,包括服务器(服务器操作系统)在内的许多发行版中的默认shell .在接受的答案结尾处描述的方法也适用于我的第零个论点 . 我在
~/.inputrc
中有这些行:\e2\e.
优于\e2\e\C-y
,如果反复按下它而不是多次插入前一个命令的第二个参数,它会循环显示前面的命令 .要插入整个上一个命令,可以键入
!!\e^
.\e^
是history-expand-line
.!^会给你第一个参数,!$会给你最后一个参数,!:n会得到你的第n个元素 .