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

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

171 голос | спросил Shrikant Sharat 26 PMpTue, 26 Apr 2011 14:25:46 +040025Tuesday 2011, 14:25:46

6 ответов


124

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


Соответствующая функция приземлилась в соединительной линии SVN tmux в начале февраля 2012 года. В строках tmux , которые включают этот код, tmux привязки клавиш, которые invoke 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 есть запись под названием «Как могу ли я открыть новое окно в том же каталоге, что и текущее окно? », которое описывает другой подход; это немного запутанно, хотя.

ответил Chris Johnsen 27 AMpWed, 27 Apr 2011 06:22:08 +040022Wednesday 2011, 06:22:08
212

Текущая страница (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}"
ответил Simon Kohlmeyer 6 MarpmThu, 06 Mar 2014 13:34:25 +04002014-03-06T13:34:25+04:0001 2014, 13:34:25
31

Да, используйте 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.

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

ответил mmoya 15 Jpm1000000pmWed, 15 Jan 2014 18:29:36 +040014 2014, 18:29:36
9

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

tmux new-window -c "$PWD"
ответил mislav 5 J000000Friday13 2013, 01:55:16
3

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

~/.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.

ответил Erik Westrup 9 MonEurope/Moscow2013-12-09T01:12:49+04:00Europe/Moscow12bEurope/MoscowMon, 09 Dec 2013 01:12:49 +0400 2013, 01:12:49
0

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/

ответил Yuriy Ershov 29 PMpFri, 29 Apr 2016 17:14:16 +030014Friday 2016, 17:14:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132