如果要重新运行具有相同参数的命令,可以执行以下操作:
vim long_filename
cat !$ #same as 'cat long_filename'
这样可以节省在传递给cat
时必须再次键入前一个参数。
但是,如何将不一样的参数传递给上次运行脚本/命令?
long_annoying_script_name arg1 arg2
? arg3 arg4 #? signifies shortcut symbols such as '!$'
当然我可以按下' up'箭头并删除参数并键入新的参数,但有更短/更快的方式吗?
我不想指定别名。
答案 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
bind -lp
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次。
拥有仅在空格字符
处停止的类似快捷键将非常有用