在 Windows 中,路径很长(不合理),因此通常将某些链接拖放到终端或从文件管理器复制并粘贴路径。可以在 shell 初始化文件中放入类似的函数
cdw() { cd "`cygpath -u $1`" }
Run Code Online (Sandbox Code Playgroud)
现在我们有 Windows 版本的cd
. 假设“C:\Program Files”位于您的剪辑中,您可以键入:
cdw
“ CTRL+ V”
和CD在那里。我同意你的观点,引用很无聊: cdw
CTRL+ V(没有双引号)将是杀手cd
。
在 Bash 中利用该history
命令很容易,如下所示。但我使用zsh
,其中发出 history
不会返回最后一个命令(即history
本身)。经过反复试验,我想出了这个函数:
cdw(){
print -s
set $(fc -l -1 | tail -2 | head -1)
shift 2
p=`cygpath -u "$*"`
cd "$p"
}
Run Code Online (Sandbox Code Playgroud)
它有效,但似乎太复杂了。我想知道你是否能找到比我更优雅的解决方案。
历史黑客是解决这个问题的一种非常奇怪的方法,而且它非常脆弱。它不适用于 Windows 文件名中的某些有效字符,例如括号。
有一种更简单的方法可以使用粘贴的 Windows 路径。不要将其粘贴到行编辑器中,而是调用该getclip
实用程序(位于最新版本的 Cygwin中cygutils-extra
)。
cdw () {
cd -- "$(getclip)"
}
cd -- "`getclip`"/../foo
Run Code Online (Sandbox Code Playgroud)
如果 dir 路径不包含任何字符$IFS
(默认情况下为空格、制表符、换行符和 NUL),则无需使用双引号即可。
如果您希望能够编辑路径,请将键绑定到expand-or-complete-prefix
,例如键入"`getclip`"
并按Esc Tab:
bindkey '\e\t' expand-or-complete-prefix
Run Code Online (Sandbox Code Playgroud)
另一种方法是绑定一个键来插入剪贴板引用的内容。
insert-quoted-clipboard-content () {
LBUFFER+=${(q)$(getclip)}
}
zle -N insert-quoted-clipboard-content
bindkey '^X^V' insert-quoted-clipboard-content
Run Code Online (Sandbox Code Playgroud)