Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Akce "nová karta" a "rozdělené podokno" obvykle vždy otevřou novou kartu nebo podokno v libovolném startingDirectory případě pro daný profil. Na jiných platformách je ale běžné, že nové karty automaticky používají pracovní adresář aktuální karty jako výchozí adresář nové karty. To umožňuje uživateli rychle provést více úkolů v jednom adresáři.
Ve Windows je bohužel složité určit, jaký je aktuální pracovní adresář (CWD) procesu. I když jsme ho mohli vyhledat, ne všechny aplikace ve skutečnosti nastavily jejich CWD při navigaci. Prostředí Windows PowerShell nemění jeho CWD, protože se pohybujete cd kolem systému souborů! Duplikování CWD PowerShellu by se téměř vždy pokazilo.
Naštěstí existuje alternativní řešení. Aplikace mohou generovat speciální řídicí sekvenci (konkrétně "OSC 9; 9" formát) k ručnímu informovat terminál, co má být CWD.
V tomto kurzu se naučíte:
- Nakonfigurujte prostředí tak, aby o svém aktuálním pracovním adresáři informovat terminál.
-
duplicateTabPoužití akce k otevření karty se stejným CWD -
splitPanePoužití akce k otevření podokna se stejným CWD - Použití místní nabídky karet k otevření karet nebo podoken se stejným CWD
Konfigurace prostředí
Pokud chcete terminálu sdělit, co je CWD, budete muset upravit prostředí tak, aby při procházení operačního systému vygenerovala řídicí sekvenci. Většina prostředí má naštěstí mechanismus konfigurace příkazového řádku, který se spouští po každém příkazu. Toto je ideální místo pro přidání takového výstupu.
Windows
Příkazového řádku: cmd.exe
cmd používá proměnnou %PROMPT% prostředí ke konfiguraci výzvy. Pomocí příkazu můžete příkazem snadno nastavit CWD pomocí následujícího příkazu:
set PROMPT=$e]9;9;$P$e\%PROMPT%
Tím se připojí $e]9;9;$P$e\ k aktuální výzvě. Když příkaz cmd vyhodnocuje tuto výzvu, nahradí ji.
- znak
$es řídicím znakem - s
$paktuálním pracovním adresářem
Všimněte si, že výše uvedený příkaz bude fungovat pouze pro aktuální cmd.exe relaci. Pokud chcete hodnotu nastavit trvale, po spuštění výše uvedeného příkazu budete chtít spustit
setx PROMPT "%PROMPT%"
PowerShell: powershell.exe nebo pwsh.exe
Pokud jste ještě nikdy nezměnili příkazový řádek PowerShellu, měli byste si nejdřív prohlédnout about_Prompts .
Do profilu PowerShellu přidejte následující položky:
function prompt {
$loc = $executionContext.SessionState.Path.CurrentLocation;
$out = ""
if ($loc.Provider.Name -eq "FileSystem") {
$out += "$([char]27)]9;9;`"$($loc.ProviderPath)`"$([char]27)\"
}
$out += "PS $loc$('>' * ($nestedPromptLevel + 1)) ";
return $out
}
PowerShell s posh-git
Pokud používáte posh-git, znamená to, že vaše výzva už upraví. V takovém případě budete chtít do již upravené výzvy přidat pouze potřebný výstup. Následující příklad je mírně upravená verze tohoto příkladu z dokumentace ConEmu:
function prompt
{
$loc = Get-Location
$prompt = & $GitPromptScriptBlock
$prompt += "$([char]27)]9;12$([char]7)"
if ($loc.Provider.Name -eq "FileSystem")
{
$prompt += "$([char]27)]9;9;`"$($loc.ProviderPath)`"$([char]27)\"
}
$prompt
}
PowerShell s Hvězdnou lodí
Pokud používáte Hvězdicovou loď, bude už tato výzva upravena. V takovém případě budete chtít do již upravené výzvy přidat pouze potřebný výstup.
function Invoke-Starship-PreCommand {
$loc = $executionContext.SessionState.Path.CurrentLocation;
$prompt = "$([char]27)]9;12$([char]7)"
if ($loc.Provider.Name -eq "FileSystem")
{
$prompt += "$([char]27)]9;9;`"$($loc.ProviderPath)`"$([char]27)\"
}
$host.ui.Write($prompt)
}
WSL
Subsystém Windows pro linuxové distribuce primárně používá BASH jako prostředí příkazového řádku.
bash
Na konec konfiguračního .bash_profile souboru přidejte následující řádek:
PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND ; "}'printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"'
Proměnná PROMPT_COMMAND v Bash říká Bash, jaký příkaz se má spustit před zobrazením výzvy. Příkaz printf je to, co používáme k připojení sekvence pro nastavení pracovního adresáře pomocí terminálu. Bit $(wslpath -w "$PWD") vyvolá wslpath spustitelný soubor, který převede aktuální adresář na jeho cestu typu Windows. Bit ${PROMPT_COMMAND:+"$PROMPT_COMMAND; "} je nějaká magie Bash , abychom se ujistili, že tento příkaz připojíme k jakémukoli existujícímu příkazu (pokud jste už někde jinde nastavili PROMPT_COMMAND .)
zsh
Na konec .zshrc souboru přidejte následující řádky:
keep_current_path() {
printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"
}
precmd_functions+=(keep_current_path)
Háček precmd_functions řekne zsh, jaké příkazy se mají spustit před zobrazením výzvy. Příkaz printf je to, co používáme k připojení sekvence pro nastavení pracovního adresáře pomocí terminálu. Bit $(wslpath -w "$PWD") vyvolá wslpath spustitelný soubor, který převede aktuální adresář na jeho cestu typu Windows. Ujistěte precmd_functions+= se, že funkci připojíme keep_current_path k jakékoli existující funkci, která už je pro tento háček definovaná.
Ryba
Pokud používáte Fish shell, přidejte na konec konfiguračního souboru následující řádky umístěné na ~/.config/fish/config.fishadrese:
function storePathForWindowsTerminal --on-variable PWD
if test -n "$WT_SESSION"
printf "\e]9;9;%s\e\\" (wslpath -w "$PWD")
end
end
Tato funkce bude volána při každé změně aktuální cesty, aby se ověřilo, že je aktuální relace otevřena terminálem Windows (ověřením $WT_SESSION) a odesláním příkazu operačního systému (OSC 9; 9;), s ekvivalentní cestou Windows (wslpath -w) aktuální cesty.
MINGW
Pro MINGW, Git Bash a Cygwin, musíte upravit PROMPT_COMMAND hodnotu WSL: nahradit wslpath .cygpath
Na konec .bashrc souboru přidejte následující řádek:
PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'printf "\e]9;9;%s\e\\" "`cygpath -w "$PWD" -C ANSI`"'
Poznámka:
Nevidíte tady vaše oblíbené prostředí? Pokud to zjistíte, můžete otevřít žádost o přijetí změn , abyste přispěli řešením pro vaše upřednostňované prostředí!
Použití akcí k duplikování cesty
Jakmile máte prostředí nakonfigurované tak, aby terminálu řeklo, co je aktuální adresář, otevření nové karty nebo podokna s touto cestou je snadné.
Otevření nové karty pomocí duplicateTab
Pokud chcete otevřít novou kartu se stejnou cestou (a profilem) jako aktuálně aktivní terminál, použijte akci Duplikovat kartu. Toto je ve výchozím nastavení vázané na Ctrl+Shift+D, a to následujícím způsobem:
{ "command": "duplicateTab", "keys": "ctrl+shift+d" },
(viz duplicateTab) další podrobnosti.
Otevření nového podokna pomocí splitPane
Pokud chcete otevřít nové podokno se stejnou cestou (a profilem) jako aktuálně aktivní terminál, použijte akci Duplikovat podokno. Toto není ve výchozím nastavení vázáno. Nejjednodušší forma této akce je:
{ "command": { "action": "splitPane", "splitMode": "duplicate" } },
(viz splitPane) další podrobnosti.
Duplikování cesty pomocí nabídky
výše uvedené akce jsou k dispozici také v místní nabídce karty pod položkami "Duplikovat kartu" a "Rozdělené podokno".
Windows Terminal