在 Bash for Windows 和 Powershell 中,如何设置热键以在提示时在路径上交替前进/后退 \ ?

问题描述 投票:0回答:1

我需要在 MS Windows 上工作,但更喜欢使用适用于 Linux 的 Windows 子系统 (WSL) 或使用 Powershell 在 BASH shell 中工作。 Powershell 有一个巧妙的功能,如果您在提示符下使用向前

/
编写了路径并按 Tab,它会将这些路径转换为向后
\

虽然有时这很方便,但它也可能对我不利,因为我喜欢使用

& wsl [linux-tool] [arguments]
在 Powershell 中运行 Linux 工具(例如 grep、awk、vim 等)。在这种情况下,Linux 工具确实需要转发
/
。同样,如果我将 Windows 资源管理器中的路径复制粘贴到 WSL 终端的 BASH 中,我需要手动将
\
转换为
/
。如果有一个热键可以在提示时提供的任何路径上的 /
\
之间
交替
,那就更方便了。

有人知道最简单的方法吗?

bash powershell path
1个回答
0
投票

我也为这项任务而苦苦挣扎。 我没有找到一个现有的功能,它不是相当冗长或没有潜在的陷阱。

我个人的解决方案是在我的Linux ~/.bashrc 文件中注册一些别名命令,例如

# Function to convert path to Windows format
win() {
  local path="${1:-$(pwd)}"  # Use the provided argument or the current directory (pwd)
  if [[ "$path" =~ ^/ ]]; then
    # Convert Linux path to Windows path
    wslpath -w "$path"
  else
    # Assume it's already a Windows path
    echo "$path"
  fi
}

# Function to convert path to Linux format
lin() {
  local path="${1:-$(pwd)}"  # Use the provided argument or the current directory (pwd)
  if [[ "$path" =~ ^[a-zA-Z]:\\ ]]; then
    # Convert Windows path to Linux path
    wslpath "$path"
  else
    # Assume it's already a Linux path
    echo "$path"
  fi
}

# Aliases for convenience
alias win='win'
alias lin='lin'

注册了这些,就意味着当你使用WSL终端时,你可以使用:

$ win 
\\wsl.localhost\Ubuntu\home\username

$ lin 
/home/username

$ win "/home/username"
\\wsl.localhost\Ubuntu\home\username

$ lin "\\wsl.localhost\Ubuntu\home\username" 
\wsl.localhost\Ubuntu\home\username

然后,为了在 powershell 中工作,您可以通过执行以下操作,将函数添加到您的配置文件中以访问您的 wsl 函数:

  • 检查您是否有活动的配置文件:
    Test-Path $PROFILE
  • 如果您没有,请创建它:
    New-Item -ItemType File -Path $PROFILE -Force
  • 打开文件进行修改:
    notepad $PROFILE
  • 添加以下功能:
function win {
    param([string]$path)
    $escapedPath = $path -replace '\\', '\\'
    wsl bash -ic "win '$escapedPath'"
}

function lin {
    param([string]$path)
    $escapedPath = $path -replace '\\', '\\'
    wsl bash -ic "lin '$escapedPath'"
}
  • 保存您的个人资料文件。
  • 在 powershell 中运行此命令以使更改生效:
    . $PROFILE
  • 尝试功能:
>win
C:\Users\username

>lin
/mnt/c/Users/username

>win "C:\\Users\username\desktop"
C:\\Users\username\desktop

>win "/mnt/c/Users/Cole/desktop"
C:\Users\Cole\desktop

>lin "C:\\Users\username\desktop"
/mnt/c/Users/username/desktop
  • 甚至将命令绑定到更复杂的工作流程或管道中:
>foreach ($path in ls)
>{
>lin $path
>}
/mnt/c/Users/username/.aws
/mnt/c/Users/username/.azure
/mnt/c/Users/username/.cache

© www.soinside.com 2019 - 2024. All rights reserved.