Как создать новую вкладку в том же каталоге, что и предыдущий каталог?
Я хочу просто открыть новую вкладку в той же папке, где находилась моя предыдущая вкладка. Возможно ли это, и если да, то как? Это с терминалом Windows, кстати.
9 ответов
- Откройте терминал 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. Это гарантирует, что мы определим эту escape-последовательность только в WT.
- это функция обратного вызова, которую Zsh будет вызывать всякий раз, когда изменяет рабочий каталог.
Внутри
chpwd()
он отправит escape-последовательность. Это сообщит терминалу (многие терминалы, включая терминал Windows), что CWD оболочки был изменен.
Синтаксис
OSC 9;9
escape-последовательность
\e]9;9;"C:\Temp\"\x07
В
C:\Temp\
в последовательности должен быть путь в стиле Windows. Он может указывать на какой-то путь в WSL (например,
\\wsl.localhost\Ubuntu-20.04\home\superman\bin
). Zsh / bash откроет соответствующий путь UNIX (например,
/home/superman/bin
).
Интерфейс командной строки Windows Terminal (
wt.exe
) можно использовать для этого, но с помощью команды вместо сочетания клавиш.
wt -w 0 nt -d .
-
-w 0
: Использовать текущее окно терминала. -
nt
илиnew-tab
: Создать новую вкладку.-
-d .
: Запустить процесс в текущем каталоге.
-
Документ: https://docs.microsoft.com/windows/terminal/command-line-arguments
В настоящее время это невозможно, как объяснено здесь https://github.com/microsoft/terminal/issues/1437 на данный момент проблема закрыта, но, возможно, будет открыта в будущем.
Я нашел кое-что интересное.... У меня это сработало... Вы можете поставить:
"startDirectory": "./"
В конфигурации терминала....
Вы всегда можете переписать настройку json каждый раз, когда открываете вкладку, но это специфичный для оболочки хак.
Поместите эту функцию в $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
}
Решение взято отсюда.
dotnet tool install -g p2u
p2u dir ${PWD}
потом
CTRL+SHIFT+D
Надеюсь, он также будет работать с разделенной панелью.
Та же идея с @apena, но теперь с помощью инструмента dotnet. Для получения дополнительной информации: https://github.com/celsojr/p2u
Также похожий на сообщение @apena, поскольку он специфичен для bash.
В моем случае я хотел, чтобы Debian открывался в моем текущем рабочем каталоге.
Хотя я не мог точно понять это поведение, я смог заставить его открыть последний посещенный каталог (эффективно), используя несколько хаков:
В моем дистрибутиве linux я добавил это в свой
.bashrc
перехватывать все вызовы и сохранять последний вызов
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
основан на пути, который я использовал на предыдущем шаге.
Затем я отредактировал профиль Debian в терминале Windows, чтобы указать на мой скрипт:
Я открыт для предложений, но это позволило мне с радостью скопировать мой текущий каталог на следующую вкладку, если это был последний терминал, в котором я менял каталог.
Это сработало для меня:
wt -w 0 nt -d %cd%
где:
- wt - исполняемый файл Windows Terminal, должен быть в PATH
- -w 0 взаимодействует с текущим открытым окном WT
- nt - это псевдоним для новой вкладки
- -d% cd% открывает указанный путь,% cd% расширяется до текущего каталога.
Я не мог понять, как разместить вкладку рядом с той, которая ее породила, что может быть актуально, если у вас открыто несколько вкладок. Может кто знает.