Terminal

如何在新選項卡中打開目前目錄?

  • May 2, 2019

我的環境

  • macOS 上的 Terminal.app 2.9.4
  • zsh 5.7.1

當我使用 bash 時,終端可以在新選項卡中打開目前目錄,但是自從我更改為 zsh 後,它就無法做到這一點。

在應用程序設置中,即使它設置為“相同的工作目錄”。

在此處輸入圖像描述

如果我在.zshrcor上寫一些東西.zprofile,它可以做到嗎?

在這裡找到了解決方案:https ://blog.callstack.io/supercharge-your-terminal-with-zsh-8b369d689770

# Open new tabs in same directory
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
 function chpwd {
   printf '\e]7;%s\a' "file://$HOSTNAME${PWD// /%20}"
 }
 chpwd
fi

請注意,它在路徑上執行的唯一百分比編碼是將空格替換為“%20”。這應該用更健壯的編碼代替。

點擊藍色文字:

帶有彈出視窗的終端首選項視窗顯示如何通知終端目前工作目錄

所以你只需要在你的提示中添加那個小轉義序列,這樣終端就知道你在哪裡。簡單的!

或者,如果您認為這有點神秘,那麼讓我們來看看 bash 是如何做到的。檢查man bash顯示,當 bash 作為互動式登錄 shell 被呼叫時(這應該是打開終端視窗或選項卡時的預設值),它引用的文件之一是/etc/profile.

快速瀏覽/etc/profile顯示它可能會載入/etc/bashrc

並查看內部/etc/bashrc顯示它試圖載入/etc/bashrc_$TERM_PROGRAM. 快速檢查:

> echo $TERM_PROGRAM
Apple_Terminal

less /etc/bashrc_Apple_Terminal後來,和大獎!就在頂部附近:

# Tell the terminal about the current working directory at each prompt.

接下來是一個功能,它可以包含在(bash)提示符中。我將避免在此處複製該函式,因為我不完全確定這樣做的合法性,儘管我將包含該函式的最後一行,因為我認為這很簡單,可以合理使用:

printf '\e]7;%s\a' "file://$HOSTNAME$url_path"

這基本上是首選項視窗彈出的神秘轉義序列。該函式的其餘部分完全是關於使用必要的 percent_encoding 設置$url_path變數。您需要將這些內容轉換為 zsh 或將其提取到外部 bash 腳本並呼叫它,但每次啟動 bash 實例可能會減慢您的提示速度。

引用自:https://unix.stackexchange.com/questions/514079