在 Windows 中,路径很长(不合理),因此通常将某些链接拖放到终端或从文件管理器复制并粘贴路径。可以在 shell 初始化文件中放入类似的函数
cdw() { cd "`cygpath -u $1`" }
现在我们有 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"
}
它有效,但似乎太复杂了。我想知道你是否能找到比我更优雅的解决方案。
答案1
历史黑客是解决这个问题的一种非常奇怪的方法,而且非常脆弱。它不适用于 Windows 文件名中的某些有效字符,例如括号。
有一种更简单的方法可以使用粘贴的 Windows 路径。不要将其粘贴到行编辑器中,而是调用该getclip
实用程序(即在cygutils-extra
最新版本的 Cygwin中)。
cdw () {
cd -- "$(getclip)"
}
cd -- "`getclip`"/../foo
$IFS
如果 dir 路径不包含任何字符(默认情况下为空格、制表符、换行符和 NUL),则无需使用双引号即可。
如果您希望能够编辑路径,请将键绑定到expand-or-complete-prefix
,例如键入"`getclip`"
并按Esc Tab:
bindkey '\e\t' expand-or-complete-prefix
另一种方法是绑定一个键来插入剪贴板的引用内容。
insert-quoted-clipboard-content () {
LBUFFER+=${(q)$(getclip)}
}
zle -N insert-quoted-clipboard-content
bindkey '^X^V' insert-quoted-clipboard-content
答案2
吉尔斯 回答是针对 Zsh 的,因为问题是关于 Zsh 的。 Google 将我带到了这个页面,但我使用 Bash。当添加到.bashrc
.
# Convert Windows paths to Cygwin paths and add " if necessary. Then paste to the command buffer.
paste()
{
local prefix=${READLINE_LINE:0:${READLINE_POINT}}
local suffix=${READLINE_LINE:${READLINE_POINT}}
local text=$(getclip)
# Does the clipboard contents look like a Windows path (e.g., C:\Program Files)?
if [[ ${text} =~ [A-Z]:\\.* ]]; then
text=$(cygpath --mixed "${text}")
# Add quotes if there are any spaces in the path
if [[ ${text} == *" "* ]]; then
text='"'${text}'"'
fi
fi
# Insert the clipboard contents at the current cursor position
READLINE_LINE=${prefix}${text}${suffix}
# Move the cursor to the end of the inserted text
((READLINE_POINT += ${#text}))
}
# Remove Ctrl+V binding
stty lnext undef
# Change Control+v to execute paste()
bind -x '"\C-v":"paste"'
答案3
我不知道我是否误解了这个问题,但在最坏的情况下,我认为这可以帮助其他人。不需要1创建类似于cdw
Windowscd
路径的函数。Cygwincd
已经接受它们,只要您将它们用引号括起来即可。
例如,cd 'C:\Program Files'
将C改变你的D目录到/cygdrive/c/Program Files
.
1:我故意使用“需要”这个词。仍可能存在合法合理的情况欲望创造cdw
。