如何快速更改外壳程序文件夹以匹配当前打开的文件

时间:2019-05-20 10:24:09

标签: powershell visual-studio-code

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

有什么方法可以快速切换到当前显示文件的目录,而不必手动cd进入该文件?

类似cd $vsCurrentFileDirectory

当前,我右键点击标签并复制路径,然后点击cd (Split-Path <CTRL-v>)

3 个答案:

答案 0 :(得分:2)

您可以设置一个快捷键来轻松完成此操作:

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

\u000D是返回值,因此命令立即触发。

还请注意,如果您的目录名称中包含空格,我会将'${fileDirname}'放在引号中。

无论焦点位于终端还是文件中,键绑定均有效。

或者,对此有一个扩展:terminal-here,但是键绑定实际上可以更快地工作。创建该扩展名后,sendSequence和变量替换功能不可用。

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

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

但是我的第一个sendSequence绑定仍然是最快的方法。

答案 1 :(得分:1)

使用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%'"
```

答案 2 :(得分:0)

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

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