Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
913 views
in Technique[技术] by (71.8m points)

powershell - How to quickly change shell folder to match the currently open file

With single file opened in vscode, when I open integrated Powershell it always starts in my $HOME folder.

Is there any way to quickly switch to the directory of the currently shown file without having to manually cd into it?

Something like cd $vsCurrentFileDirectory.

Currently, I right click the tab and copy path then cd (Split-Path <CTRL-v>).

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

EDIT: A new command will be added in v1.39 to make this more straightforward, see release notes. The example keybinding given is:

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

which does indeed work in the Insider's Build. This will create a new terminal though, not modify an existing terminal.


[Original Answer]: This will change the current terminal.

You can set up a keybinding to do this pretty easily:

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

The u000D is a return so the command triggers immediately.

Also note that I put the '${fileDirname}' in quotes in case your directory name has spaces in it.

The keybinding will work whether focus is in the terminal or the file.


Suggested edit to be tested :

Note that on windows, you must use the following instead:

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

This is because on Windows, the /d parameter must be used with cd to switch drives.


Also see shortcut to change directory in Powershell and cmd for additional info in case you are changing drive letters and escaping double quotes in Powershell.

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

with discussion of the /d flag. Thanks to @skataben for the additional info.


Alternatively, there is an extension to do this: terminal-here, but the keybinding actually works faster. The sendSequence and variable substitution functionality was not available when that extension was created.

Finally, if you right-click on a folder in the explorer, there is an Open in Terminal option there (and corresponding command). Which means you could use that command in a keybinding like so:

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

But my first sendSequence keybinding remains the fastest way to do this.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...