Tmux забуває каталог, у якому було створено сеанс


8

Коли я створюю кілька сеансів у tmux, поточний каталог для кожного нового вікна в наступних сеансах встановлюється як поточний каталог для першого.

Наприклад:

-> cd /home/one && tmux new-session -n one\; new-window -n two
   # /home/one is the current directory for each window

-> cd /home/two && tmux new-session -n three\; new-window -n four #\; etc.
   # "/home/two" is the current directory for the window "three"
   # but for the window "four" and other created windows it is "/home/one"

Як я можу змусити tmux встановити поточний каталог для кожного нового вікна в наступних сесіях як каталог, де було створено сеанс?

tmux 1.6

zsh 4.3

Відповіді:


21

За станом на tmux 1.9 опція path-default була видалена .

Ви можете скористатися наступним, щоб відкрити в каталозі, в якому відкрився сеанс ("клієнт" в назві вказує на те, що це поточний tmux runnin у вашій оболонці, але, здається, перемикання шляхів при перемиканні між сеансами в той же клієнт):

bind-key c  new-window -c "#{client_cwd}"

В іншому випадку скопіювати шлях до поточної панелі:

bind-key c  new-window -c "#{pane_current_path}"

Існує також pane_start_path, який може звернутися до деяких робочих процесів.

bind-key c  new-window -c "#{pane_start_path}"

Для команд розділення вікна.

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

1
Це правильна відповідь. Конкретно другий варіант у моєму випадку.
Mike Rapadas

як бік, не забудьте закрити всі поточні робочі термінали tmux, включаючи фон, перед тим як змінити ваш конфігураційний файл, інакше tmux не завантажить нові конфігурації.
randomness

@lightmanhk Ви маєте можливість просто: source ~ / .tmux.conf
David C. Bishop

1
Будь-який спосіб узагальнити це для розділів панелі? split-window -h "#{pane_current_path}" не працюватиме ...
Bach

1
@Bach Спробуйте з -c. split-window -h -c "#{pane_current_path}"
David C. Bishop

3

Я розумію, що це питання досить старе, але воно постало як одне з єдиних питань на StackExchange, коли я сам шукав відповідь, так ось як я вирішив це для tmux 1.8.

The new-window команда приймає -c прапор, який дозволить вам вказати поточний каталог нового вікна. За замовчуванням це порожній рядок, який буде використовувати поточний робочий каталог панелей як каталог для нового вікна. Перехід в a - як значення для -c Прапорець встановить каталог нового вікна на те, в якому сеансі було відкрито.

Ось уривок із документів:

-c specifies the working directory in which the new window is created.  It may 
have an absolute path or one of the following values (or a subdirectory):

       Empty string    Current pane's directory
       ~               User's home directory
       -               Where session was started
       .               Where server was started

Якщо ви хочете змінити поведінку за замовчуванням <PREFIX> c keybinding віддзеркалити це, ось що я зробив у мойому ~/.tmux.conf:

bind-key c   new-window -c -

0

тут є досить багато відповідей: https://unix.stackexchange.com/questions/12032/create-new-window-with-current-directory-in-tmux

у резюме:

з tmux FAQ, один тупий (але дуже загальний і досить незалежний від оболонки) спосіб:

  • Як відкрити нове вікно в тому ж каталозі, що й поточне вікно?

Один з варіантів - просто запустити "TMUX = tmux" у вікні. Однак це   працює тільки, якщо команда не запущена, так що ви можете ввести   команду.

Обхідний шлях полягає в тому, щоб дозволити tmux знати про поточний шлях через   змінна середовища. Для цього використовуйте таку команду:

[ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD

Який встановлює TMUXPWD_i (де i - номер поточного вікна) на   шлях до поточного каталогу. Цю команду можна додати до PS1,   наприклад:

PS1='$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#I") $PWD)\h$ '

Коли створюється нове вікно, оболонку слід попросити змінити   каталог. Ви можете визначити нову прив'язку (наприклад, якщо використовується GNU   bash):

bind-key C-c run-shell 'tmux neww "cd $(tmux display -p "\$TMUXPWD_#I"); exec bash"'

Це рішення буде працювати, навіть якщо команда в даний час виконується в   термінал, але він не працюватиме з вікна, що тільки що був   помінялися місцями з іншим, оскільки TMUXPWD_i не буде оновлено після   своп. Проте після відображення нового запиту TMUXPWD_i оновлюється   правильно.

просто замінюйте виклики оболонці відповідно до вашого.

також, очевидно, нові версії tmux мають цю адресу з командою

tmux у новому вікні

стверджується, що старі версії працюють так:

виклику

tmux neww

з оболонки відкриється tmux в цьому реж.

якщо ви хочете, щоб відкрити нові вікна або панелі з поточного робочого каталогу в tmux, то вам слід:

tmux set-option default-path "$ PWD"


Дякуємо, що намагалися допомогти, морж . Я бачив це питання на unix.stackexchange і читав FAQ. Однак, це не відповіді на моє запитання.
Shamaoke

1
Подивіться, коли ви створюєте нову сесію, поточний каталог для кожного нового вікна або панелі, що відкривається в цьому сеансі, буде той каталог, де ви починаєте сеанс . Це вірно, якщо я створюю одну сесію. Однак, коли я відкриваю нове вікно терміналу і починаю ще один сеанс в ньому, поточний робочий каталог для кожного нового вікна буде той каталог, де я починаю першу сесію але не поточний. Це, мабуть, помилка в tmux 1.6, так як, коли я понизив його до версії 1.3, помилка не з'явилася.
Shamaoke
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.