用不同的参数重新运行上一个命令

时间:2016-07-04 03:20:56

标签: linux bash shell unix keyboard-shortcuts

如果要重新运行具有相同参数的命令,可以执行以下操作:

vim long_filename
cat !$                     #same as 'cat long_filename'

这样可以节省在传递给cat时必须再次键入前一个参数。

但是,如何将不一样的参数传递给上次运行脚本/命令?

long_annoying_script_name arg1 arg2
? arg3 arg4                                  #? signifies shortcut symbols such as '!$'

当然我可以按下' up'箭头并删除参数并键入新的参数,但有更短/更快的方式吗?

我不想指定别名。

2 个答案:

答案 0 :(得分:7)

!:0应该做到这一点。从zsh文档:

   Word Designators
       A word designator indicates which word or words of a given command line
       are to be included in a history reference.  A `:' usually separates the
       event specification from the word designator.  It may be  omitted  only
       if  the  word designator begins with a `^', `$', `*', `-' or `%'.  Word
       designators include:

       0      The first input word (command).
       n      The nth argument.
       ^      The first argument.  That is, 1.
       $      The last argument.
       %      The word matched by (the most recent) ?str search.
       x-y    A range of words; x defaults to 0.
       *      All the arguments, or a null value if there are none.
       x*     Abbreviates `x-$'.
       x-     Like `x*' but omitting word $.

(它也适用于bash。)如果你发现输入更方便,还有!-1

答案 1 :(得分:2)

您可以结合使用键盘快捷键

让我们考虑最后一个命令为:

mv foo bar

up Ctrl + w :没有最后一个单词的最后一个命令= mv foo

Alt + 0 + :最后一个命令的第一个参数= mv

一些有用的快捷方式:

  • Alt + :插入上一条命令中的最后一个参数(重复以返回历史记录)
  • Alt + + :从最后一个命令插入#nth个最后一个参数(重复以返回历史记录)< / em>
  • Alt + - Alt + zsh: Alt + - + + :从末尾插入第#n个第一个参数命令(重复以返回历史记录)
  • Ctrl + w :从光标中删除最后一个单词
  • Ctrl + _ :撤消上一次编辑(在超过 Ctrl + w 时非常有用)
  • Ctrl + :将光标移至最后一个单词
  • Ctrl + 向右:将光标移至下一个单词
  • home Ctrl + a :将光标移至命令的开头
  • end Ctrl + e :将光标移至命令末尾
  • Ctrl + k :删除光标后的所有内容并将其保存以供以后使用
  • Ctrl + u :删除( bash:光标之前的所有内容, zsh:整个命令)和保存以备后用
  • Ctrl + y :输出先前使用 Ctrl + u Ctrl + k 同时

查看所有可用的快捷方式

  • 重击: bind -lp
  • zsh: bindkey -L

很遗憾,存在一些限制

“单词”仅包含a-zA-Z个字符,因此任何符号字符都将停止切词。

因此,如果最后一个参数是url,而您想使用 Ctrl + w 删除它,那将会很痛苦。

例如:curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments

要使用 Ctrl + w 擦除 url ,您必须重复12次。


拥有仅在空格字符

处停止的类似快捷键将非常有用