我知道Esc +。给出最后一个命令的最后一个参数。

但我对最后一个命令的第一个参数感兴趣。 是否有一个键绑定来这样做?

在同一行中,是否有从最后一个命令中获取第n个参数的通用方法? 我知道在bash脚本中,您可以使用$0,$1等,但这些在命令行上不起作用。

同样,如果遍历前面命令的第0个参数,就像我们连续按Esc +对最后一个参数所做的那样,会怎么样呢?


当前回答

在Ubuntu 18.04上测试


插入先前的参数:

Alt +。:插入最后一个命令的最后一个参数。 Alt + # +。:从最后一个命令中插入#n个最后一个参数。 Alt+- # Alt+。, zsh: Alt+-+#+。:插入上一个命令的第n个参数。

在Linux中,您可以重复命令以返回历史

例子:

最后一个命令是:

mv foo bar

Alt + 0 +。:插入最后一个命令的第一个参数= mv Alt + 2 +。:插入最后一个命令的最后第二个参数= foo up, Ctrl+w:最后一个不带最后一个字的命令= mv foo

通用快捷键

Ctrl+w:从光标中删除最后一个单词 Alt+d:从光标中移除下一个单词 Ctrl+k:剪切光标后的所有内容 Ctrl+u, zsh: Alt+w:剪切光标前面的所有内容 zsh: Ctrl+u:切断整个命令(在bash中,您可以组合Ctrl+u, Ctrl+k) Ctrl+y:粘贴之前用Ctrl+u和Ctrl+k剪切的字符 Ctrl+_:撤销上次编辑(当超过Ctrl+w时非常有用) Ctrl+左:移动到最后一个单词 Ctrl+右:移动到下一个单词 home或Ctrl+a:移动到行首 end或Ctrl+e:移到行尾

要遍历前面命令中的参数

只适用于ZSH

运行或将其添加到~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word

现在使用Alt+。,然后使用Alt+:遍历参数

假设最后一个命令是

echo 1 2 3 4 5

替代+.: 5 Alt+.+:: 4 Alt+.+:+:: 3 替代+.+:+:+: 2 其他+.+:+:+:+: 1 Alt+.+:+:+:+:: 回声

来源:https://stackoverflow.com/a/34861762/3163120

查看所有可用的快捷方式

Bash: bind -lp zsh: bindkey -L


我在这里保持最新消息:https://github.com/madacol/knowledge/blob/master/bash-zsh_TerminalShorcuts.md

其他回答

基本上,它用于提取之前(命令的)参数。

例如,如果发出以下命令:

echo Hello, world how are you today?

那么,你好,将是第一个论点,而今天呢?第六个,也就是最后一个;这意味着它可以通过输入来引用:

Alt+6后跟Ctrl-Alt-6


Ctrl传统上表示为帽子字符^加在键名前,Alt为M-这是元前缀。

所以上面的快捷方式可以被重新定义为^My来yank。


此外,在命令行中有hats替换快捷方式:

echo Hello, world!

^Hello^Bye

Bye, world!

替换上一个命令的第一个匹配的字符串,即:

Hello, world! Hello, people!

^Hello^Bye

会导致:

Bye, world! Hello, people!

保留第二个匹配(hello)不变。

注意:帽子之间不要留有空隙,否则无法操作。


以上只是一个快捷方式:

!:s/Hello/Bye

事件级(*)替换前面命令中第一个找到的(匹配的)字符串,同时在第一部分前面加上g开关将全局应用于整行:

echo Hello, world! Hello, people!

!:gs/Hello/Bye

Bye, world! Bye, people!

通常在其他相关命令中执行,如sed、vi和regex(正则表达式)-搜索(匹配字符串)的标准方式。

不,你不能这样做!:sg/Hello/Bye或!:s/Hello/Bye/g,这就是语法!


! 是为了事件;事件可以理解为命令历史记录中的命令输出或操作。


这是我通过自己使用和自己尝试从各种来源(包括手册页、博客和论坛)中了解到的。

希望它能让我们了解bash、Bourne- again shell(源自sh shell,它本身以其发明者的姓氏命名为Bourne shell)的神秘方式,它是许多发行版(包括服务器(服务器操作系统))中的默认shell。

在Ubuntu 18.04上测试


插入先前的参数:

Alt +。:插入最后一个命令的最后一个参数。 Alt + # +。:从最后一个命令中插入#n个最后一个参数。 Alt+- # Alt+。, zsh: Alt+-+#+。:插入上一个命令的第n个参数。

在Linux中,您可以重复命令以返回历史

例子:

最后一个命令是:

mv foo bar

Alt + 0 +。:插入最后一个命令的第一个参数= mv Alt + 2 +。:插入最后一个命令的最后第二个参数= foo up, Ctrl+w:最后一个不带最后一个字的命令= mv foo

通用快捷键

Ctrl+w:从光标中删除最后一个单词 Alt+d:从光标中移除下一个单词 Ctrl+k:剪切光标后的所有内容 Ctrl+u, zsh: Alt+w:剪切光标前面的所有内容 zsh: Ctrl+u:切断整个命令(在bash中,您可以组合Ctrl+u, Ctrl+k) Ctrl+y:粘贴之前用Ctrl+u和Ctrl+k剪切的字符 Ctrl+_:撤销上次编辑(当超过Ctrl+w时非常有用) Ctrl+左:移动到最后一个单词 Ctrl+右:移动到下一个单词 home或Ctrl+a:移动到行首 end或Ctrl+e:移到行尾

要遍历前面命令中的参数

只适用于ZSH

运行或将其添加到~/.zshrc

autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word

现在使用Alt+。,然后使用Alt+:遍历参数

假设最后一个命令是

echo 1 2 3 4 5

替代+.: 5 Alt+.+:: 4 Alt+.+:+:: 3 替代+.+:+:+: 2 其他+.+:+:+:+: 1 Alt+.+:+:+:+:: 回声

来源:https://stackoverflow.com/a/34861762/3163120

查看所有可用的快捷方式

Bash: bind -lp zsh: bindkey -L


我在这里保持最新消息:https://github.com/madacol/knowledge/blob/master/bash-zsh_TerminalShorcuts.md

要粘贴第一个参数,请按住Alt键,当它向下时,按下'1'键和'。的关键。

要粘贴第n个参数,将上面的'1'键替换为相应的数字键。

如果这不起作用,您的终端模拟器可能在它到达shell之前捕获Alt键。一些终端(xfce4-terminal)允许关闭配置文件中的“Alt-”快捷键。

这要归功于Jonas Eberle,我从他的评论中找到了另一个答案。

^可能是第一个参数的命令。我不确定是否有办法得到第n个。

如果你使用的是mac,你会倾向于使用ctrl+字母来扩展字符。我在终端(iTerm2)中设置了空格右键选项键,并将其定义为meta。这意味着我使用键按字导航,并从以前的命令中提取参数。