Можна відкрити new-window
свій робочий каталог, встановлений для того, в якому я зараз перебуваю. Я використовую zsh , якщо це має значення.
Можна відкрити new-window
свій робочий каталог, встановлений для того, в якому я зараз перебуваю. Я використовую zsh , якщо це має значення.
Відповіді:
Починаючи з tmux 1.9 default-path
варіант був видалений, так що вам потрібно використовувати -c
опцію new-window
, і split-window
(наприклад , шляхом підміни c
, "
і %
прив'язки включити
-c '#{pane_current_path}'
). Докладніше див. Деякі інші відповіді на це запитання.
Відповідна функція висадилась у магістраль tmux SVN на початку лютого 2012 року. У збірках tmux, що включають цей код, прив’язки ключів tmux, що викликають new-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
.
У FAQ для tmux є запис під назвою "Як я можу відкрити нове вікно в тій же папці, що й поточне вікно?", Що описує інший підхід; це трохи заплутано, хоча.
/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 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. Дивіться тут коментовані рядки для версії, що працює для старих tmuxes, у яких немає команди 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 :)