【问题标题】:How to quickly change shell folder to match the currently open file如何快速更改 shell 文件夹以匹配当前打开的文件
【发布时间】:2019-10-06 16:58:14
【问题描述】:

在 vscode 中打开单个文件时,当我打开集成的 Powershell 时,它总是从我的 $HOME 文件夹中开始。

有没有什么方法可以不用手动cd就可以快速切换到当前显示文件的目录?

类似cd $vsCurrentFileDirectory

目前,我右键单击选项卡并复制路径,然后cd (Split-Path <CTRL-v>)

【问题讨论】:

    标签: powershell visual-studio-code


    【解决方案1】:

    编辑:将在 v1.39 中添加一个新命令以使其更简单,请参阅release notes。给出的键绑定示例是:

    {
        "key": "cmd+shift+h",
        "command": "workbench.action.terminal.newWithCwd",
        "args": {
            "cwd": "${fileDirname}"
        }
    }
    

    这在 Insider's Build 中确实有效。这将创建一个新终端,而不是修改现有终端。


    [原始答案]:这将更改当前终端

    你可以很容易地设置一个键绑定来做到这一点:

    {
      "key": "alt+t",
      "command": "workbench.action.terminal.sendSequence",
      "args": {"text": "cd '${fileDirname}'\u000D"}
    },
    

    \u000D 是一个返回,因此命令会立即触发。

    另请注意,我将'${fileDirname}' 放在引号中,以防您的目录名称中包含空格。

    无论焦点在终端还是文件中,键绑定都将起作用。


    建议进行测试的编辑:

    请注意,在 Windows 上,您必须改用以下内容:

    "args": {"text": "cd /d \"${fileDirname}\"\u000D"}
    

    这是因为在 Windows 上,/d 参数必须与 cd 一起使用才能切换驱动器。


    如果您在 Powershell 中更改驱动器号和转义双引号,请参阅 shortcut to change directory in Powershell and cmd 了解更多信息。

    {
        "key": "ctrl+alt+d",
        "command": "workbench.action.terminal.sendSequence",
        "args": {"text": "cd \"${fileDirname}\"\u000D"}
    }
    

    讨论/d 标志。感谢@skataben 提供更多信息。


    或者,有一个扩展可以做到这一点:terminal-here,但键绑定实际上工作得更快。创建该扩展时,sendSequence 和变量替换功能不可用。

    最后,如果你在资源管理器中右键单击一个文件夹,那里有一个Open in Terminal 选项(和相应的命令)。这意味着您可以像这样在键绑定中使用该命令:

    {
      "key": "alt+t",
      "command": "openInTerminal"
    }
    

    但我的第一个 sendSequence 键绑定仍然是执行此操作的最快方法。

    【讨论】:

    • 这里只有键绑定是正确的,因为其他选项都创建新终端,而不是更改现有终端中的文件夹。
    • 在 keybindings.json 中。从左下角的齿轮图标打开键盘快捷键。然后单击左上角的图标(就在拆分编辑器图标的左侧)打开 keybindings.json。
    • 我收到cd '${fileDirname}' bash: cd: ${fileDirname}: No such file or directory ?
    • 嗯,我每天都在 bash 上使用它,没问题。您正在使用上面的Original Answer 代码吗?它必须像这样使用 - 通过sendSequence 命令,以便可以解析变量${fileDirname}
    • sendSequence 适用于我的本地项目,但在 vscode 远程项目上失败,错误是 '${fileDirname}' can not be resolved. Please open an editor.newWithCwd 命令适用于本地和删除环境。这可能是一个错误?
    【解决方案2】:

    使用 Code Runner 和 Ctrl+Alt+N 命令,您可以通过创建批处理文件并将 ${fileDirname} 值传递给 PowerShell 6 来解决它,例如:

    1. 在 VSCode 中添加/更改这两行 settings.json:

      "terminal.integrated.shell.windows": "C:\\Program Files\\PowerShell\\6\\pwsh.bat",
      "terminal.integrated.shellArgs.windows": ["${fileDirname}"]
      
    2. 将这样的pwsh.bat 保存在C:\Program Files\PowerShell\6\ 文件夹中:

      @echo off
      set arg1=%1
      "C:\Program Files\PowerShell\6\pwsh.exe" -noexit -Command "cd '%arg1%'"
      

    编辑

    对未打开文件但我们仍想打开新终端时有用的批处理文件代码进行了小改进:

    ```
    @echo off
    set arg1=%1
    if [%arg1%] == [${fileDirname}] set arg1=
    "C:\Program Files\PowerShell\6\pwsh.exe" -noexit -Command "cd '%arg1%'"
    ```
    

    【讨论】:

      【解决方案3】:

      我的解决方案是简单地将以下内容添加到 VS Code 设置中,以便您为打开新的集成终端设置的任何键都可以确保终端进入当前打开的文件的目录。无论您选择何种 new 终端,无论是 powershell、CMD、Git Bash 等,这都有效:

      "terminal.integrated.cwd": "${fileDirname}"
      

      【讨论】:

      • 默认情况下已经这样设置了,只有在加载VS后才有效,第一个终端仍在$HOME中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多