我发现自己经常想做一些简单的命令,比如:
cp /really/long/path/from/file.txt /really/long/path/to/file.txt
尽管我已经经常使用类似!!
的快捷方式!$
,但如果能够引用当前命令行中的最后一个参数(并且可以选择将其展开以进行编辑),那就太好了。有没有办法在 zsh 中做到这一点,或者其他一些等效的技巧来节省时间?
我发现自己经常想做一些简单的命令,比如:
cp /really/long/path/from/file.txt /really/long/path/to/file.txt
尽管我已经经常使用类似!!
的快捷方式!$
,但如果能够引用当前命令行中的最后一个参数(并且可以选择将其展开以进行编辑),那就太好了。有没有办法在 zsh 中做到这一点,或者其他一些等效的技巧来节省时间?
通常,您可以使用历史扩展来引用当前命令行中的单个单词。
$ cp /really/long/path/from/file.txt !#:1:s/from/to
或者
$ cp /really/long/path/from/file.txt !#:$:s/from/to
这是迄今为止!#
键入的命令行的历史扩展。指定该扩展中的第一个参数(在这种情况下,长文件路径)。可以用来指代最后一个参数,与迄今为止输入的参数数量无关。 对所选单词执行文本替换。:1
:$
:s/from/to
对于此任务,您还可以使用大括号扩展:
$ cp /really/long/path/{from,to}/file.txt
(注意:这两个都取自bash
,但也适用于zsh
。可能还有其他zsh
我不知道的仅限技巧。)
您可以点击Tab以扩展 zsh 上的内容。例如:
如果我先执行此命令
% ls /etc
在下一行我做
% !!<Tab>
将!!
被替换为
% ls /etc
所以我可以按照我想要的方式进行编辑。这适用于很多事情,比如*
环境变量。例如,在Tab之后点击键$TERM
,将替换(扩展它)为(例如在我的情况下)xterm-256color