it-swarm-ru.tech

Как создать новое окно в текущем каталоге в tmux?

Можно ли открыть new-window с рабочим каталогом, установленным на тот, в котором я сейчас нахожусь. Я использую zsh, если это имеет значение.

217
Shrikant Sharat

Начиная с tmux 1.9 опция default-path была удалена, поэтому вам нужно использовать параметр -c с new-window и ​​split-window (например, путем повторного связывания привязок c, " и ​​% для включения
-c '#{pane_current_path}'). Посмотрите некоторые другие ответы на этот вопрос для деталей.


Соответствующая функция появилась в стволе SVN tmux в начале февраля 2012 года. В tmux сборки, содержащие этот код, привязки клавиш tmux , которые вызывают new-window, создадут новое окно с тем же текущим рабочим каталогом, что и активные процессы текущей панели (пока опция сеанса default-path пуста; она по умолчанию). То же самое верно для панели, созданной командой split-window, когда она вызывается через привязку.

При этом используется специальный код для конкретной платформы, поэтому в настоящее время поддерживаются только определенные ОС: Darwin (OS X), FreeBSD, Linux, OpenBSD и Solaris.

Это должно быть доступно в следующей версии tmux (1.7?).


С tmux 1.4 я обычно просто использую

tmux neww

в оболочке, которая уже имеет желаемый текущий рабочий каталог.

Однако, если я ожидаю создания множества окон с одним и тем же текущим рабочим каталогом (или я хочу иметь возможность запускать их с обычной привязкой ключа <prefix> c), тогда я устанавливаю default-path опция сеанса через

tmux set-option default-path "$PWD"

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

Если default-path установлено в непустое значение, его значение будет использоваться вместо "наследования" текущего рабочего каталога от вызовов командной строки tmux neww.

В tmux FAQ есть запись под названием "Как открыть новое окно в той же директории, что и текущее окно?" это описывает другой подход; это немного запутанный, хотя.

150
Chris Johnsen

На текущей странице руководства (1.9a) Tmux указан необязательный -c start-directory параметр для некоторых команд, включая new-window а также split-window. Он также содержит переменную формата pane_current_path, что относится к Current path if available.

Комбинируя их, мы можем открыть новое окно с текущим рабочим каталогом, используя
new-window -c "#{pane_current_path}"
Цитата нужна, если текущий путь содержит пробелы.

Если вы хотите разделить текущую панель по вертикали, используйте
split-window -c "#{pane_current_path}"
или, для горизонтального разделения
split-window -h -c "#{pane_current_path}"

Чтобы привязки клавиш открывали новые разделения и окна с текущим рабочим каталогом по умолчанию, добавьте следующее к своему .tmux.conf. " с окружающими кавычками означает, что Tmux не должен начинать строку, а должен связывать " ключ.

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
293
Simon Kohlmeyer

Да, используйте new-window -c "#{pane_current_path}". Вы можете добавить следующее к вашему ~/.tmux.conf, чтобы сделать его постоянным (с учетом сочетаний клавиш по умолчанию):

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

default-path настройка пути была удалена из вышестоящего кода, и автор tmux рекомендовал в этом сообщении коммита использовать -c "#{pane_current_path}" или -c "$PWD в new-window а также split-window команды.

Я также ответил на это дублирующий вопрос .

43
mmoya

В последних версиях tmux (v1.8, но, возможно, и в v1.7):

tmux new-window -c "$PWD"
10
mislav

Другие ответы не работают для меня, когда я пытаюсь поставить их как привязки (особенно tmux split-window -c). Но я создал свое собственное решение, которое я использовал более года, которое работает как для new-window, так и для split:

~/.bashrc:

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf:

unbind-key c
bind-key c run-Shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"'
bind-key C new-window

bind-key - run-Shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"'
bind-key | run-Shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $Shell"

Работает, по крайней мере, с $ (tmux -V) 1.8. Смотрите закомментированные строки здесь для версии, работающей для более старых tmux, у которых нет команды show-environment.

3
Erik Westrup

tmux сделал это в версии 1.8, но в 1.9 эта функция была удалена в пользу использования -c флаг.

Это может быть решено, но повторное связывание new-window но если вы хотите запустить что-то еще, оно становится слишком многословным: вместо ввода neww man tmux вам придется набрать neww -c "#{pane_current_path}" man tmux что вы, скорее всего, не хотите делать.

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

Он может быть построен из источников здесь: http://ershov.github.io/tmux/

0
Yuriy Ershov