有时我们只需要在使用时输入稍微不同的名称mv/cp/convert
。例如,
convert IMG-long-number.jpg IMG-long-number.png
如何在输入 IMG-long-number.png 之前重复 IMG-long-number.jpg,这样我只需要进行小的调整?
这类似于如何在 bash 控制台上重复当前输入的参数?但对于 zsh/zle 来说。
答案1
!#$<Tab>
对我有用。鉴于:
$ echo a
键入!#$
然后按下Tab将扩展!#$
为a
。如果您尝试使用以下命令进行操作,制表符补全还会列出其他选项:
:
$ echo a !#$:
& -- repeat substitution
A -- absolute path resolving symbolic links
Q -- strip quotes
a -- absolute path
c -- PATH search for command
e -- leave only extension
g -- globally apply s or &
h -- head - strip trailing path element
l -- lower case all words
q -- quote to escape further substitutions
r -- root - strip suffix
s -- substitute string
t -- tail - strip directories
u -- upper case all words
答案2
另一种需要记住的方法是:你不这样做。
使用完成后得到
转换 IMG-long-number.jpg只需将其编辑为
转换 IMG-long-number.{jpg,png}
答案3
我会用Ctrl+Alt+_它来复制前一个单词(copy-prev-word
小部件)。复制后,您可以使用Backspace编辑副本的扩展名。
或者使用Ctrl+W将其整体删除。默认情况下,Ctrl+W删除整个单词(定义为 alnums+$WORDCHARS),但您可以根据需要使用小部件更改行为select-word-style
。
在~/.zshrc
:
autoload select-word-style
zle -N select-word-style
bindkey '\eW' select-word-style
然后,您可以选择不同的字型和Alt+Shift+W。您可以在这里使用bash
单词样式(仅单词alnums)(参考如何bash
单词小部件以外Ctrl+W喜欢Alt+B,Alt+D...考虑字)。
答案4
类似于 @muru 建议的 - !#$<TAB>
。但我也在我的 .zshrc 中做了这样的绑定:
bindkey -s "^[," "!#\$^I"
这样,按Esc
then 逗号即可为您完成此操作,类似于Esc
then 点将为您提供上一个命令的最后一个参数。