cdw在 WSL 中使用 cd 转到 windows 目录

cdw在 WSL 中使用 cd 转到 windows 目录

我在 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 会话后,我关闭了该线路。


整个过程实际如下:

  1. g:\从运行窗口复制字符串,然后
  2. cdw + mouse-middle-button在 WSL 窗口中发布

在后台,AHK 脚本修复了反斜杠问题,并且zsh控制台很乐意将其g:/视为有效的输入参数并传递给cdw()函数。

在此处输入图片描述

相关内容