8

Когда я создаю несколько сеансов в tmux, текущий каталог для каждого нового окна в последующих сеансах устанавливается как текущий каталог для первого.

Например:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

Как я могу заставить tmux установить текущий каталог для каждого нового окна в последующих сеансах в качестве каталога, в котором был создан сеанс?

Tmux 1.6

зш 4.3

3 ответа3

21

Начиная с tmux 1.9 опция default-path была удалена.

Вы можете использовать следующее, чтобы открыть в каталоге, в котором открылся сеанс (имя «client» в имени будет указывать мне, что это текущий запуск tmux в вашей оболочке, но, похоже, он переключает пути при переключении между сеансами в тот же клиент):

bind-key c  new-window -c "#{client_cwd}"

В противном случае, чтобы скопировать путь текущей панели:

bind-key c  new-window -c "#{pane_current_path}"

Существует также pane_start_path, который может обратиться к некоторым рабочим процессам.

bind-key c  new-window -c "#{pane_start_path}"

Для команд разделенного окна.

bind-key % split-window -h -c "#{pane_current_path}"
bind-key '"' split-window -c "#{pane_current_path}"
3

Я понимаю, что этот вопрос довольно старый, но он возник как один из немногих вопросов на StackExchange, когда я сам искал ответ, поэтому вот как я решил его для tmux 1.8.

Команда new-window принимает флаг -c , который позволит вам указать текущий каталог нового окна. По умолчанию это пустая строка, которая будет использовать текущий рабочий каталог панелей в качестве каталога для нового окна. Передача - в качестве значения флага -c установит каталог нового окна, в котором был открыт сеанс.

Вот выдержка из документов:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

Если вы хотите изменить поведение по умолчанию связывания клавиш <PREFIX> c чтобы отразить это, вот что я сделал в моем ~/.tmux.conf:

bind-key c   new-window -c -
0

здесь довольно много ответов: https://unix.stackexchange.com/questions/12032/create-new-window-with-current-directory-in-tmux

В итоге:

из FAQ по tmux один тупой (но очень общий и довольно независимый от оболочки) способ:

  • Как я могу открыть новое окно в том же каталоге, что и текущее окно?

Один из вариантов - просто запустить «TMUX = tmux» в окне. Однако это работает только в том случае, если ни одна команда не запущена, поэтому вы можете ввести команду.

Обходной путь - сообщить tmux о текущем пути через переменную окружения. Для этого используйте следующую команду:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

Который устанавливает TMUXPWD_i (где i - номер текущего окна) на путь текущего каталога. Эту команду можно добавить в PS1, например:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

Когда создается новое окно, оболочка должна попросить изменить каталог. Вы можете определить новую привязку (например, если используете GNU bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

Это решение будет работать, даже если команда в данный момент выполняется в терминале, но оно не будет работать из окна, которое было только что заменено другим, потому что TMUXPWD_i не будет обновляться после замены. Однако после отображения нового приглашения TMUXPWD_i обновляется должным образом.

просто замените вызовы на оболочку в соответствии с вашими требованиями.

также, по-видимому, в более новых версиях tmux эта проблема решается с помощью команды

tmux new-window

более старые версии работают так:

призвание

Tmux Neww

из вашей оболочки откроется tmux в этой директории.

если вы хотите иметь возможность открывать новые окна или панели из текущего рабочего каталога в tmux, тогда вы должны вместо этого:

tmux set-option default-path "$ PWD"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .