Можно открыть 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 :)