Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Normalmente, as ações "nova guia" e "painel dividido" sempre abrirão uma nova guia/painel em qualquer que seja o startingDirectory perfil desse perfil. No entanto, em outras plataformas, é comum que novas guias usem automaticamente o diretório de trabalho da guia atual como o diretório inicial de uma nova guia. Isso permite que o usuário multitarefa rapidamente em um único diretório.
Infelizmente, no Windows, é complicado determinar qual é o diretório de trabalho atual ("CWD") para um processo. Mesmo que pudéssemos procurá-lo, nem todos os aplicativos realmente configuram seu CWD enquanto navegam. Notavelmente, o Windows PowerShell não altera seu CWD enquanto você cd circula pelo sistema de arquivos! Duplicar o CWD do PowerShell automaticamente seria quase sempre errado.
Felizmente, há uma solução alternativa. As aplicações podem emitir uma sequência de escape especial (especificamente o "OSC 9; 9" format) para dizer manualmente ao Terminal qual deve ser o CWD.
Neste tutorial, você aprenderá a:
- Configure o shell para informar o Terminal sobre seu diretório de trabalho atual
- Use a
duplicateTabação para abrir uma guia com o mesmo CWD - Use a
splitPaneação para abrir um painel com o mesmo CWD - Usando o menu de contexto da guia para abrir guias ou painéis com o mesmo CWD
Configure seu shell
Para dizer ao Terminal o que é o CWD, você precisará modificar seu shell para emitir uma sequência de escape enquanto navega pelo sistema operacional. Felizmente, a maioria dos shells tem um mecanismo para configurar o "prompt", que é executado após cada comando. Este é o lugar perfeito para adicionar essa saída.
Windows
Prompt de comando: cmd.exe
cmd usa a %PROMPT% variável de ambiente para configurar o prompt. Você pode facilmente preceder o prompt com o comando para definir o CWD com o seguinte comando:
set PROMPT=$e]9;9;$P$e\%PROMPT%
Isso será anexado $e]9;9;$P$e\ ao seu prompt atual. Quando o cmd avaliar esse prompt, ele substituirá
- o
$ecom o personagem de fuga - o
$pcom o diretório de trabalho atual
Observe que o comando acima só funcionará para a sessão atual cmd.exe . Para definir o valor permanentemente, DEPOIS de executar o comando acima, você vai querer executar
setx PROMPT "%PROMPT%"
PowerShell: powershell.exe ou pwsh.exe
Se você nunca alterou seu prompt do PowerShell antes, você deve fazer check-out about_Prompts primeiro.
Adicione o seguinte ao seu perfil do PowerShell:
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 com posh-git
Se você estiver usando posh-git, isso já modificará seu prompt. Nesse caso, você desejará adicionar apenas a saída necessária ao prompt já modificado. O exemplo a seguir é uma versão ligeiramente modificada deste exemplo dos documentos 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 com Starship
Se você estiver usando Starship, isso já modificará seu prompt. Nesse caso, você desejará adicionar apenas a saída necessária ao prompt já modificado.
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
O Subsistema Windows para distribuições Linux usa principalmente BASH como shell de linha de comando.
bash
Adicione a seguinte linha ao final do arquivo .bash_profile de configuração:
PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND ; "}'printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"'
A PROMPT_COMMAND variável em bash informa bash qual comando executar antes de exibir o prompt. A printf instrução é o que estamos usando para anexar a sequência para definir o diretório de trabalho com o Terminal. O $(wslpath -w "$PWD") bit invocará o wslpath executável para converter o diretório atual em seu caminho semelhante ao Windows. O ${PROMPT_COMMAND:+"$PROMPT_COMMAND; "} bit é uma mágica bash para garantir que acrescentamos este comando a qualquer comando existente (se você já tiver definido PROMPT_COMMAND em outro lugar).
zsh
Adicione as seguintes linhas ao final do ficheiro .zshrc :
keep_current_path() {
printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"
}
precmd_functions+=(keep_current_path)
O precmd_functions gancho informa ao zsh quais comandos executar antes de exibir o prompt. A printf instrução é o que estamos usando para anexar a sequência para definir o diretório de trabalho com o Terminal. O $(wslpath -w "$PWD") bit invocará o wslpath executável para converter o diretório atual em seu caminho semelhante ao Windows. Usando precmd_functions+= certifique-se de anexar a keep_current_path função a qualquer função existente já definida para este gancho.
Peixe
Se você estiver usando o Fish shell, adicione as seguintes linhas ao final do arquivo de configuração localizado em ~/.config/fish/config.fish:
function storePathForWindowsTerminal --on-variable PWD
if test -n "$WT_SESSION"
printf "\e]9;9;%s\e\\" (wslpath -w "$PWD")
end
end
Esta função será chamada sempre que o caminho atual for alterado para confirmar que a sessão atual é aberta pelo Terminal do Windows (verificando $WT_SESSION) e enviando o Comando do Sistema Operacional (OSC 9; 9;), com o caminho equivalente do Windows (wslpath -w) do caminho atual.
MINGW
Para MINGW, Git Bash e Cygwin, você precisa modificar o PROMPT_COMMAND para WSL: substituir wslpath por cygpath.
Adicione a seguinte linha ao final do ficheiro .bashrc :
PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'printf "\e]9;9;%s\e\\" "`cygpath -w "$PWD" -C ANSI`"'
Observação
Não vê a sua concha favorita aqui? Se você descobrir, sinta-se à vontade para abrir um PR para contribuir com uma solução para o seu shell preferido!
Usando ações para duplicar o caminho
Depois de configurar o shell para informar ao Terminal qual é o diretório atual, abrir uma nova guia ou painel com esse caminho é fácil.
Abra um novo separador com duplicateTab
Para abrir uma nova guia com o mesmo caminho (e perfil) do terminal ativo no momento, use a ação "Duplicar guia". Isso está vinculado por padrão a Ctrl+Shift+D, da seguinte maneira:
{ "command": "duplicateTab", "keys": "ctrl+shift+d" },
(ver duplicateTab) para mais detalhes.
Abrir um novo painel com splitPane
Para abrir um novo painel com o mesmo caminho (e perfil) do terminal ativo no momento, use a ação "Painel duplicado". Isso NÃO está vinculado por padrão. A forma mais simples desta ação é:
{ "command": { "action": "splitPane", "splitMode": "duplicate" } },
(ver splitPane) para mais detalhes.
Usando o menu para duplicar o caminho
as ações acima também estão disponíveis no menu de contexto da guia, sob as entradas "Guia duplicada" e "Painel dividido".
Windows Terminal