我在shell中有一个带参数的命令。像
Command -a -b
假设a
b
是非常长的目录名,并且它们并不总是第一个和最后一个参数。
但是,我需要再次使用此命令。我使用ctrl+p
返回命令,但这次我需要撤销a
b
订单。
Command -b -a
有没有办法快速交换它们,而不是重新输入它们?
提前致谢。
答案 0 :(得分:13)
是的,您可以使用history substitution:
$ echo foo bar
foo bar
$ !:0 !:2 !:1 # previous command with second arg then first arg
echo bar foo
bar foo
$
答案 1 :(得分:9)
您可以使用 Alt + t 来交换当前和之前的单词。
Here还有一些快捷方式。
请注意你交换单词,而不是参数。如果您混淆了订单grep
获取grep ~/Documents/myFile searchString
中的参数并希望将其更正为grep searchString ~/Documents/myFile
, Alt + t 将无济于事你。
转而使用Paul's answer并执行!:0 !:2 !:1
。
如果您输入的内容太不方便(适合我),您可以在~/.bash_alias
中为其创建别名:
# Swap the first and the second argument of the last command
alias swapArgs='$(history -p !:0 !:2 !:1)'
答案 2 :(得分:2)
您可以轻松地剪切并粘贴最后一个arg到另一个地方,而不是交换args。 Ctrl-W
将删除最后一个参数,Ctrl-Y
将粘贴它。
$ # Cursor position is shown as |
$ ls foo bar|
$ # Press <Ctrl-W> to cut the argument just before the cursor
$ ls foo |
$ # Now press <Alt-B> to move the cursor one argument back
$ ls |foo
$ # Now press <Ctrl-Y> to paste the cut argument
$ ls bar|foo
$ # Now press <space> to insert a space between the arguments
$ ls bar |foo
$ # You can safely press <enter> while the cursor is in the middle of the line
$ ls bar |foo
bar foo