我在 Windows 10 下运行 Linux 模拟器(或子系统),有时我需要在 Linux 控制台中粘贴 Windows 路径。Windows 路径使用反斜杠 \ 来分隔目录,而 Linux 路径则使用正斜杠 /。
为了避免必须手动将 \ 替换为 /,我尝试使用 AHK 脚本对我复制的任何路径进行替换,但它不起作用。
这是我的脚本(我在代码中标记了##works until here##
它似乎可以正常工作的最远点):
^+7:: ; Ctrl+Shift+7 (/)
;Empty the Clipboard.
Clipboard =
;Copy the select text to the Clipboard.
SendInput, ^c
;Wait for the Clipboard to fill.
ClipWait
;Perform the RegEx find and replace operation,
;where the needle is what we want to replace.
haystack := Clipboard
needle := "\"
replacement := "/"
result := RegExReplace(haystack, needle, replacement)
;Empty the Clipboard
Clipboard =
;Copy the result to the Clipboard.
Clipboard := result
;##works until here##
;Wait for the Clipboard to fill.
ClipWait
;-- Optional: --
;Send (paste) the contents of the new Clipboard.
SendInput, %Clipboard%
;Done!
return
提前感谢任何提示。
答案1
似乎反斜杠需要转义才能被 RegExReplace 识别,如下所示:
needle := "\\"
答案2
cdw
在 WSL 中使用 cd 转到 windows 目录
在 中zsh
,使用cdw
后跟目录路径(固定)将工作目录更改为 Windows 文件夹。
# cd into Win dir
function cdw(){
# cdw = cd to window dir
# win dir should look like "g:/demo_dir/app_folder" (note these are forward slashes)
# Need Autohotky to convert all backward slashes in directory pathes into forward slashes
cd "$(wslpath "$1")"
}
从 Windows 部分,使用以下 AHK 脚本翻转剪贴板中的所有反斜杠。每次刷新剪贴板并使用标记识别目录时都会检查此操作:/
。
; In preamble (before the first return statement)
; Note, the ClipChanged function is premitive: it does not deal with whitespaces properly and it will screw things up.
; Comment out the line in the preamble when done with it.
OnClipboardChange("ClipChanged")
; Then, after the first return statement, complete the function with the following:
ClipChanged(Type) {
; This is a very limited function. Only use it when needed
; Step 1: take out the trailing backslash
ClipSave := Clipboard
haystack := RTrim(ClipSave, "//")
; Step 2: swap / to be /
needle := "//"
replacement := "/"
; haystack := RegExReplace(haystack, needle, replacement)
Clipboard := RegExReplace(haystack, needle, replacement)
}
笔记:AHK 功能ClipChanged
仅是一个概念验证。OnClipboardChange("ClipChanged")
在用 10 多个文件夹填充完 Tmux 会话后,我关闭了该线路。
整个过程实际如下:
g:\
从运行窗口复制字符串,然后cdw + mouse-middle-button
在 WSL 窗口中发布
在后台,AHK 脚本修复了反斜杠问题,并且zsh
控制台很乐意将其g:/
视为有效的输入参数并传递给cdw()
函数。