代码之家  ›  专栏  ›  技术社区  ›  majkinetor

如何快速更改shell文件夹以匹配当前打开的文件

  •  0
  • majkinetor  · 技术社区  · 5 年前

    在vscode中打开单个文件时,当我打开integrated Powershell时,它总是在我的 $HOME

    是否有任何方法可以快速切换到当前显示文件的目录,而无需手动 cd 对它感兴趣?

    差不多 cd $vsCurrentFileDirectory .

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

    0 回复  |  直到 5 年前
        1
  •  17
  •   Mark    5 年前

    编辑 :将在中添加新命令 v1.39 要使此操作更简单,请参见 release notes . 给出的keybinding示例如下:

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

    这确实在内幕人士的构建中起作用。这将创建一个 但是,不能修改现有的终端。


    [ ]:这将

    {
      "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 切换驱动器。


    也看到 shortcut to change directory in Powershell and cmd

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

    讨论 /d


    或者,有一个扩展来执行此操作: terminal-here ,但键绑定实际上工作得更快。这个 sendSequence 创建扩展时,变量替换功能不可用。

    最后,如果在资源管理器中的文件夹上单击鼠标右键,则会出现 Open in Terminal 选项(以及相应的命令)。这意味着您可以在键绑定中使用该命令,如下所示:

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

    发送序列 键绑定仍然是实现这一点的最快方法。

        2
  •  2
  •   olin000    5 年前

    使用CodeRunner和Ctrl+Alt+N命令,您可以通过创建批处理文件并传递 ${fileDirname} PowerShell 6的值,例如:

    1. 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
  •  0
  •   Darren Evans    3 年前

    我的解决方案是简单地将以下内容添加到VS代码设置中,这样无论您为打开新的集成终端设置了什么键,都可以确保终端进入当前打开的文件的目录。这在任何情况下都有效 刚出现的 您选择的终端,可以是powershell、CMD、Git Bash等:

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