web-dev-qa-db-ja.com

現在のディレクトリを新しいタブで開くにはどうすればよいですか?

私の環境

  • MacOS上のTerminal.app 2.9.4
  • zsh 5.7.1

私がbashを使用したとき、ターミナルは現在のディレクトリを新しいタブで開くことができましたが、zshに変更して以来、それを行うことができませんでした。

アプリ設定では、「同じ作業ディレクトリ」に設定されていますが。

enter image description here

.zshrcまたは.zprofile、それができるでしょうか?

3
tsubasa

ここで解決策を見つけました: https://blog.callstack.io/supercharge-your-terminal-with-zsh-8b369d68977

# 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」に置き換えることだけであることに注意してください。これはより堅牢なエンコーディングに置き換える必要があります。

1
bfad

青いテキストをクリックします。

Terminal preferences window with popup showing how to notify Terminal of the current working directory

したがって、ターミナルに自分がどこにいるかがわかるように、その小さなエスケープシーケンスをプロンプトに追加する必要があります。かんたん!

または、それが少し不可解だと思われる場合は、bashがそれをうまくやってのけた方法を見てみましょう。 man bashをチェックすると、bashがインタラクティブログインシェルとして呼び出された場合(これはターミナルウィンドウまたはタブを開くときのデフォルトであるはずです)、参照するファイルの1つが/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インスタンスを起動するとプロンプトが少し遅くなる可能性があります。

1
8bittree

次のキーボードショートカットを実行するだけです。

cmd + ctrl + o

0
Ced