Можно открыть new-windowс рабочим каталогом, в котором я сейчас нахожусь. Я использую zsh , если это имеет значение.
Можно открыть new-windowс рабочим каталогом, в котором я сейчас нахожусь. Я использую zsh , если это имеет значение.
Ответы:
Начиная с tmux 1.9 default-pathвариант был удален, так что вам нужно использовать -cопцию new-window, и split-window(например , путем подмены c, "и %привязки включить
-c '#{pane_current_path}'). Посмотрите некоторые другие ответы на этот вопрос для деталей.
Соответствующая функция появилась в стволе SVN tmux в начале февраля 2012 года. В сборках tmux, которые включают этот код, вызываемые привязки ключей tmuxnew-window создадут новое окно с тем же текущим рабочим каталогом, что и активные процессы текущей панели (до тех пор, пока default-pathсеанс опция пуста, она по умолчанию). То же самое верно для панели, созданной split-windowкомандой, когда она вызывается через привязку.
При этом используется специальный код для конкретной платформы, поэтому в настоящее время поддерживаются только определенные ОС: Darwin (OS X), FreeBSD, Linux, OpenBSD и Solaris.
Это должно быть доступно в следующей версии tmux (1.7?).
С tmux 1.4 я обычно просто использую
tmux neww
в оболочке, которая уже имеет желаемый текущий рабочий каталог.
Однако, если я ожидаю создания множества окон с одним и тем же текущим рабочим каталогом (или я хочу иметь возможность запускать их с помощью обычной cпривязки клавиш <prefix> ), тогда я устанавливаю параметр default-pathсеанса через
tmux set-option default-path "$PWD"
в оболочке, которая уже имеет желаемый текущий рабочий каталог (хотя вы, очевидно, можете сделать это из любого каталога и просто указать вместо этого значение).
Если default-pathзадано непустое значение, его значение будет использоваться вместо «наследования» текущего рабочего каталога от вызовов командной строки tmux neww.
Tmux FAQ есть запись под названием «Как я могу открыть новое окно в том же каталоге, что и текущее окно?» , Который описывает другой подход; это немного запутанный, хотя.
/proc/PID/cwdв Linux)). Существует возможное частичное решение в записи часто задаваемых вопросов по tmux (в командной строке он записывает свой cwd, когда печатает приглашение, а затем связывает ключ, запускающий новую оболочку в записанном каталоге).
default-pathсеанса (если оно установлено). В FAQ по tmux есть запись, которая описывает способ привязки ключа, который запускает новое окно с помощью cwd оболочки, запущенной в текущем окне («Как я могу открыть новое окно в том же каталоге, что и текущее окно?») , но метод довольно запутанный. То же самое, вероятно, можно сделать для split-windowи new-session(вместо neww).
Текущая страница руководства (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}"
prefix- :, затем введитеsource ~/.tmux.conf
tmux source-file .tmux.conf.
Да, используйте 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командах.
Я также ответил в этом двойном вопросе .
В последних версиях tmux (v1.8, но, возможно, и в v1.7):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
$PWDу меня не работает в tmux 1.9a. Я должен был использовать pane_current_pathкак предложено выше.
Другие ответы не работают для меня, когда я пытаюсь поставить их как привязки (в частности 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.
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/
<prefix>cчтобы прочитать рабочий каталог базового экземпляра оболочки (если таковые имеются) и установитьdefault-pathдо выполненияnew-window. Или это слишком много, чтобы спросить tmux :)