假设我做类似的事情:
ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/a_file_with_a_long_filename_slightly_modified.pdf
如果我的光标位于 zsha_file_with_a_long_filename.pdf
中字符串的末尾,有没有办法引用和扩展?ln a_file_with_a_long_filename.pdf ~/path/to/a/new/hardlink/
如果没有,你会建议减少打字工作吗?
使用默认的 Emacs 绑定,它只有两个键:(
ESC-2 ESC-^_
即Esc 2 Esc Ctrl+_或Alt+ 2 Ctrl+ Alt+ _)。这是copy-prev-word
带有数字参数 2 的命令(默认参数 1 将复制~/path/to/a/new/hardlink/
)。如果文件名包含(带引号的)空格,则需要ESC-2 ESC-x copy-prev-shell-word RET
. 您可能希望将此命令绑定到更方便的键,特别是如果您的键盘布局Shift需要_. 您也可以在 vi 模式下使用这些命令,但默认情况下它们都没有绑定到键。如果您弄错了数字参数,请按Ctrl+_撤消,然后重试。
这听起来像是一个有趣的代码高尔夫挑战。这是一个选项:
使用文件名运行一个无害的命令;输入足够的文件名以允许 TAB 完成。
用于
!!$
引用上一个命令的最后一个参数:由于 zsh 的有用引用,即使面对包含 IFS 的文件名,这也是安全的。您会注意到,只要在第一个 之后点击空格
!!$
,zsh 就会扩展文件名;如果您在命令末尾添加一个免费空格,则同上。所需字符数为:
!!$
:<SPACE>
8 + 加上足够的初始选项卡完成。
在
vi
模式下,这将<esc>0wyt $p
进入命令模式,0
行首,w
到下一个单词(前进到文件名)yt
拉到空格(获取长文件名,假设文件名中没有空格),然后$p
把刚才的在行尾猛拉。vi
一旦你记住了动作,这比描述它要快得多。您也可以设置 a
bindkey
来拉出第二个参数,尽管这是针对此类用例的非常具体的代码,此处绑定到,control+t但这可能是您想要的任何内容。有
copy-earlier-word
,您可以在使用它之前将其绑定到您最喜欢的键绑定,并将这些行附加到~/.zshrc
:所以,你可以在命令行中这样使用:
Esc( - ,(或Alt+ )的第一次按键,产生“~/path/to/new/hardlink/” like
copy-prev-shell-word
,第二次将新插入的单词替换为“a_file_with_a_long_filename.pdf”)。这是一份
copy-earlier-word
文件副本供参考。