我经常想要执行简单的命令,例如:
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
的技巧。)
% ls /etc
在接下来的这一行中,我要做的是
% !!<Tab>
< p > !!
将被替换为
< p >“!!”将被替换为
% ls /etc
我可以按照自己的方式编辑这个内容。这适用于很多东西,比如*
和环境变量。例如,在$TERM
后敲击Tab键,将会用(在我的情况下)xterm-256color
替换(扩展)它。
esc
然后按u
来撤消上一次操作。 - lmcanavals!!:1
来扩展,只是为了清晰明了 :) - dza
!#
表示当前行。 - robbles