我只想在与我之前所在的选项卡相同的文件夹中启动一个新选项卡。这可能吗?如果可以,怎么办?顺便说一句,这是与 windows 终端有关的。
8 回答
目前这是不可能的,正如这里解释的那样https://github.com/microsoft/terminal/issues/1437该问题目前已关闭,但将来可能会重新打开。
- 打开windows终端
- 单击下拉按钮
- 点击设置选项
- 将
startingDirectory
值设置为"./"
"profiles":
{
"defaults":
{
// Put settings here that you want to apply to all profiles.
"startingDirectory": "./" <---- set this value
}
Zsh
如果您使用的是 Zsh,则可以将其添加到~/.zshrc
[[ -n "$WT_SESSION" ]] && {
chpwd() {
echo -en '\e]9;9;"'
wslpath -w "$PWD" | tr -d '\n'
echo -en '"\x07'
}
}
之后,您可以使用 Windows 终端中的重复选项卡在新选项卡中打开相同的目录
重击
你也可以在 Bash 中做类似的事情
my_prompt() {
echo -en '\e]9;9;"'
wslpath -w "$PWD" | tr -d '\n'
echo -en '"\x07'
}
export PROMPT_COMMAND=my_prompt
解释
$WT_SESSION
是 Windows Terminal 设置的环境。这将确保我们只在 WT 中定义这个转义序列。
chpwd()
是一个回调函数,Zsh 在更改工作目录时将调用它。
在里面chpwd()
它会发送一个OSC 9;9
转义序列。这将告诉终端(包括 Windows 终端在内的许多终端)shell 的 CWD 已更改。
OSC 9;9
转义序列的语法是\e]9;9;"C:\Temp\"\x07
序列中的C:\Temp\
必须是 Windows 样式的路径。它可以指向 WSL 中的某些路径(例如\\wsl.localhost\Ubuntu-20.04\home\superman\bin
)。打开新选项卡时,shell 将打开相应的 UNIX 路径(例如/home/superman/bin
)。
我发现了一些有趣的东西……这对我有用……你可以说:
“起始目录”:“./”
在终端配置中......
{
// Make changes here to the powershell.exe profile.
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"startingDirectory": "./",
"hidden": false
},
Windows 终端命令行界面 ( wt.exe
) 可用于实现此目的,但使用命令而不是键盘快捷键。
wt -w 0 nt -d .
-w 0
:使用当前终端窗口。nt
或new-tab
:创建一个新选项卡。-d .
: 在当前目录启动进程。
文档:https ://docs.microsoft.com/windows/terminal/command-line-arguments
也与@apena 的帖子类似,因为它是特定于 bash 的。
就我而言,我希望 Debian 在我当前的工作目录中打开。
虽然我不能完全得到这种行为,但我能够使用一些技巧让它打开最后访问的目录(有效地):
在我的 linux 发行版中,我将此添加到我.bashrc
的以拦截所有调用cd
并将最后一次调用存储到cd
我选择的目的地。
cd() {
builtin cd "$@" ; echo $PWD > /opt/chdir/lastestdir
}
接下来,由于 Windows 终端不允许我内联命令,我在自定义位置创建了这个批处理脚本:
@echo off
for /F "tokens=*" %%n IN (\\wsl$\Debian\opt\chdir\lastestdir) DO @(wsl.exe -d Debian --cd \\wsl$\Debian%%n)
注意:\\wsl$\Debian
是我在 Powershell 中的发行版的路径,\opt\chdir\lastestdir
它基于我在上一步中使用的路径。
接下来,我在 Windows 终端中编辑了 Debian 的配置文件以指向我的脚本:
我愿意接受建议,但这让我很乐意将当前目录复制到下一个选项卡,只要它是我更改目录的最后一个终端。
dotnet tool install -g p2u
p2u dir ${PWD}
然后CTRL+SHIFT+D
希望它也可以与拆分窗格一起使用
@apena 的想法相同,但现在使用 dotnet 工具。更多详情:https ://github.com/celsojr/p2u
每次打开选项卡时,您始终可以重写设置 json,但它是特定于 shell 的 hack。
把这个函数放进去$PROFILE
(一定要调整$path
)
function sd {
$path = 'C:\Users\Admin\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json'
((Get-Content -path $path) -replace '"startingDirectory":.*', ("`"startingDirectory`": `"$pwd`"") -replace "\\", "\\") | Set-Content -Path $path
}
从这里采取的解决方案。