Как создать новую вкладку в том же каталоге, что и предыдущий каталог?

Я хочу просто открыть новую вкладку в той же папке, где находилась моя предыдущая вкладка. Возможно ли это, и если да, то как? Это с терминалом Windows, кстати.

9 ответов

  1. Откройте терминал Windows
  2. Нажмите кнопку раскрывающегося списка
  3. Нажмите на опцию настроек
  4. установить 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% расширяется до текущего каталога.

Я не мог понять, как разместить вкладку рядом с той, которая ее породила, что может быть актуально, если у вас открыто несколько вкладок. Может кто знает.

Другие вопросы по тегам