Aracılığıyla paylaş


Öğretici: Windows Terminali'nde aynı dizinde sekme veya bölme açma

Normalde, "yeni sekme" ve "bölme" eylemleri her zaman bu profil için olan her şeyde startingDirectory yeni bir sekme/bölme açar. Ancak diğer platformlarda, yeni sekmelerin yeni bir sekme için başlangıç dizini olarak geçerli sekmenin çalışma dizinini otomatik olarak kullanması yaygındır. Bu, kullanıcının tek bir dizinde hızla birden çok görev yapmasına olanak tanır.

Ne yazık ki Windows'ta, bir işlem için geçerli çalışma dizininin ("CWD") ne olduğunu belirlemek zordur. Arama yapabilsek bile, tüm uygulamalar CWD'lerini gezinirken ayarlamaz. Özellikle, Windows PowerShell CWD'sini siz dosya sisteminde olduğu cd gibi değiştirmez! PowerShell'in CWD'sinin otomatik olarak çoğaltılması neredeyse her zaman yanlış olacaktır.

Neyse ki geçici bir çözüm var. Uygulamalar özel bir kaçış dizisi (özellikle "OSC 9; 9" biçimi) CWD'nin ne olması gerektiğini Terminale el ile söylemek için.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Kabuğu terminale geçerli çalışma dizininden bahsedecek şekilde yapılandırın
  • Eylemi kullanarak duplicateTab aynı CWD ile bir sekme açın
  • Eylemi kullanarak splitPane aynı CWD ile bir bölme açma
  • Sekme bağlam menüsünü kullanarak aynı CWD ile sekmeleri veya bölmeleri açma

Kabuğunuzu yapılandırma

Terminale CWD'nin ne olduğunu söylemek için, işletim sisteminde gezinirken bir kaçış dizisi yaymak için kabuğunuzu değiştirmeniz gerekir. Neyse ki çoğu kabuk, her komuttan sonra çalıştırılan "istemi" yapılandırmak için bir mekanizmaya sahiptir. Bu tür bir çıktı eklemek için mükemmel bir yerdir.

Windows

Komut: cmd.exe

cmd %PROMPT%, istemi yapılandırmak için ortam değişkenini kullanır. Aşağıdaki komutla CWD'yi ayarlamak için istemi komutuyla kolayca ön ekleyebilirsiniz:

set PROMPT=$e]9;9;$P$e\%PROMPT%

Bu, geçerli isteminize eklenir $e]9;9;$P$e\ . cmd bu istemi değerlendirdiğinde,

  • $e kaçış karakteriyle
  • $p geçerli çalışma diziniyle

Yukarıdaki komutun yalnızca geçerli cmd.exe oturum için çalışacağını unutmayın. Değeri kalıcı olarak ayarlamak için yukarıdaki komutu çalıştırdıktan sonra

setx PROMPT "%PROMPT%"

PowerShell: powershell.exe veya pwsh.exe

PowerShell isteminizi daha önce hiç değiştirmediyseniz, önce about_Prompts göz atmalısınız.

PowerShell profilinize aşağıdakileri ekleyin:

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
}

Posh-git ile PowerShell

Posh-git kullanıyorsanız, bu zaten isteminizi değiştirir. Bu durumda, yalnızca gerekli çıkışı zaten değiştirilmiş isteme eklemek istersiniz. Aşağıdaki örnek, ConEmu belgelerinden bu örneğin hafifçe değiştirilmiş bir sürümüdür:

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
}

Starship ile PowerShell

Starship kullanıyorsanız, bu zaten isteminizi değiştirir. Bu durumda, yalnızca gerekli çıkışı zaten değiştirilmiş isteme eklemek istersiniz.

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

Linux dağıtımları için Windows Alt Sistemi öncelikle komut satırı kabuğu olarak BASH kullanır.

bash

Yapılandırma dosyanızın .bash_profile sonuna aşağıdaki satırı ekleyin:

PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND ; "}'printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"'

PROMPT_COMMAND Bash'teki değişken, istemi görüntülemeden önce bash'e hangi komutun çalıştırılması gerektiğini bildirir. deyimi printf , Terminal ile çalışma dizinini ayarlama sırasını eklemek için kullandığımız deyimdir. Bit, $(wslpath -w "$PWD") geçerli dizini Windows benzeri yoluna dönüştürmek için yürütülebilir dosyayı çağırır wslpath . Bit ${PROMPT_COMMAND:+"$PROMPT_COMMAND; "} , bu komutu var olan herhangi bir komuta eklediğimizden emin olmak için biraz bash büyüsüdür (zaten başka bir yere ayarladıysanız PROMPT_COMMAND .)

zsh

Dosyanızın .zshrc sonuna aşağıdaki satırları ekleyin:

keep_current_path() {
  printf "\e]9;9;%s\e\\" "$(wslpath -w "$PWD")"
}
precmd_functions+=(keep_current_path)

Kanca, precmd_functions zsh'ye istem görüntülenmeden önce hangi komutların çalıştırılması gerektiğini söyler. deyimi printf , Terminal ile çalışma dizinini ayarlama sırasını eklemek için kullandığımız deyimdir. Bit, $(wslpath -w "$PWD") geçerli dizini Windows benzeri yoluna dönüştürmek için yürütülebilir dosyayı çağırır wslpath . kullanarak precmd_functions+= , işlevi bu kanca için önceden tanımlanmış olan herhangi bir işleve eklediğimizden keep_current_path emin olun.

Balık

Fish shell kullanıyorsanız, konumundaki ~/.config/fish/config.fishyapılandırma dosyanızın sonuna aşağıdaki satırları ekleyin:

function storePathForWindowsTerminal --on-variable PWD
    if test -n "$WT_SESSION"
      printf "\e]9;9;%s\e\\" (wslpath -w "$PWD")
    end
end

Bu işlev, geçerli oturumun Windows Terminali ($WT_SESSION doğrulaması) tarafından açıldığını onaylamak ve İşletim Sistemi Komutu (OSC 9; 9;), geçerli yolun Windows eşdeğer yolu (wslpath -w) ile.

MINGW

MINGW, Git Bash ve Cygwin için WSL: yerine PROMPT_COMMAND değerini ile wslpathdeğiştirmeniz cygpath gerekir.

Dosyanızın .bashrc sonuna aşağıdaki satırı ekleyin:

PROMPT_COMMAND=${PROMPT_COMMAND:+"$PROMPT_COMMAND; "}'printf "\e]9;9;%s\e\\" "`cygpath -w "$PWD" -C ANSI`"'

Uyarı

Burada en sevdiğiniz kabuğu görmüyor musunuz? Bunu çözerseniz tercih ettiğiniz kabuk için bir çözüme katkıda bulunmak için bir çekme isteği açabilirsiniz !

Yolu çoğaltmak için eylemleri kullanma

Kabuğu Terminal'e geçerli dizinin ne olduğunu söyleyecek şekilde yapılandırdıktan sonra, bu yola sahip yeni bir sekme veya bölme açmak kolaydır.

Ile yeni bir sekme açma duplicateTab

Şu anda etkin olan terminalle aynı yola (ve profile) sahip yeni bir sekme açmak için "Sekmeyi Çoğalt" eylemini kullanın. Bu, aşağıdaki gibi varsayılan olarak Ctrl+Shift+D tuşlarına bağlıdır:

        { "command": "duplicateTab", "keys": "ctrl+shift+d" },

(bkz duplicateTab. ) daha fazla ayrıntı için.

Ile yeni bir bölme açma splitPane

Şu anda etkin olan terminalle aynı yolu (ve profili) içeren yeni bir bölme açmak için "Bölmeyi Çoğalt" eylemini kullanın. Bu, varsayılan olarak bağlı DEĞİlDR . Bu eylemin en basit biçimi:

        { "command": { "action": "splitPane", "splitMode": "duplicate" } },

(bkz splitPane. ) daha fazla ayrıntı için.

Yolu çoğaltmak için menüyü kullanma

yukarıdaki eylemler sekme bağlam menüsünde, "Sekmeyi Çoğalt" ve "Bölme Bölmesi" girdilerinin altında da kullanılabilir.

Görüntü çoğaltma-sekme-aynı-cwd Görüntü bölme-bölme-aynı-cwd