Подтвердить что ты не робот

Как автоматически переименовать tmux-окна в текущий каталог

Я хотел бы иметь tmux для автоматического переименования окна с текущим рабочим каталогом (cwd). Как и по умолчанию, он называет вкладку/окно как имя текущего процесса, например zsh или vim.

Когда я открываю новое окно в tmux, имя reattach-to-use-namespace, а затем сразу переключается на zsh.

tmux tabs

Я на OS X 10.10.2, я использую zshell, и у меня есть tmux 1.9a.

Чтобы быть ясным, мне не нужен весь путь в имени окна, только текущий каталог, поэтому, например, я хочу projectName, а не /Users/username/Development/projectName.

Если вы хотите увидеть мой текущий tmux.conf, здесь он.

4b9b3361

Ответ 1

Развернувшись на том, что написал Йозеф, вы можете поместить базовое имя каталога в состояние с помощью фрагмента оболочки:

set -g window-status-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
set -g window-status-current-format '#I:#(pwd="#{pane_current_path}"; echo ${pwd####*/})#F'
set-option -g status-interval 1

Обратите внимание, что то, что было бы ${pwd##*/}, будет экранировано до ${pwd####*/}, поскольку # имеет особое значение в строке формата.

Ответ 2

Показать верхние N компонентов

введите описание изображения здесь

Отображение только basename генерирует слишком много двусмысленности, но полные пути слишком много беспорядка, поэтому я решил:

the/last/path

вместо:

/a/very/long/the/last/path

или просто:

path

.tmux.conf:

set-window-option -g window-status-current-format '#[fg=white,bold]** #{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]**|'
set-window-option -g window-status-format '#[fg=white,bold]#{window_index} #[fg=green]#{pane_current_command} #[fg=blue]#(echo "#{pane_current_path}" | rev | cut -d'/' -f-3 | rev) #[fg=white]|'

Уловка взята из: Unix удаляет часть пути

Если это все еще не решает двусмысленности, я иду за:

bind-key -r w choose-window -F '#{window_index} | #{pane_current_command} | #{host} | #{pane_current_path}'

Протестировано на Tmux 2.1, Ubuntu 16.04.

Ответ 3

С tmux 2.3 + модификатор формата b: показывает "хвост" пути.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#{b:pane_current_path}'

Раздел FORMATS man tmux описывает другие префиксы для изменения результата #{}, например d: и даже s/foo/bar/:.


Если tmux старше 2.3, вместо него можно использовать команду оболочки basename.

set-option -g status-interval 5
set-option -g automatic-rename on
set-option -g automatic-rename-format '#(basename "#{pane_current_path}")'

Ответ 4

Сделайте что-то подобное в сеансе tmux для оболочки zsh:

setopt PROMPT_SUBST
export PS1=$'\ek$(basename $(pwd))\e\\> '

Если кто-то использует bash shell:

export PS1="\033k\$(basename \$(pwd))\033\\> "

Вы можете добавить эти команды в файл инициализации оболочки при условии, что для переменной $TERM env установлено значение "screen"

Ответ 5

Добавление этой конфигурации в файл ~/.tmux.conf должно работать:

set-option -g window-status-current-format '#I:#{pane_current_path}#F'
set-option -g window-status-format '#I:#{pane_current_path}#F'
set-option -g status-interval 1

Однако это зависит от вашей версии Tmux. Мне не удалось заставить его работать на 1.9a3 (в Cygwin), но с Tmux 1.8 на Ubuntu (в Vagrant) он работал нормально.

Ответ 6

Я использую zsh hook для этого

Добавить в ~/.zshrc

следующее:
precmd () {
  if [ -n "$TMUX" ]; then
    tmux set-window-option -q window-status-format "#[fg=cyan bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
    tmux set-window-option -q window-status-current-format "#[fg=cyan, bg=cyan] | #[fg=white, bg=cyan] #I | ${PWD##/*/} #[fg=cyan, bg=cyan] | "
  fi
}

Ответ 7

Я использую следующее в ~/.tmux.conf для этого (работая на OSX, zsh, tmux-2.3):

set -g automatic-rename-format '#{pane_current_path}'
set -g status-interval 5

Вы можете установить интервал состояния в 1, чтобы он быстрее реагировал на изменение каталогов.

В соответствии с изменением (https://raw.githubusercontent.com/tmux/tmux/master/CHANGES) это должно работать в tmux 1.9 и выше.

Используя ssh в машину CentOS с tmux 2.3, имя окна не изменяется, пока я не вернусь на новую панель, не знаю, почему это происходит.

Ответ 8

Это не дает строгого ответа на ваш вопрос - он автоматически не переименовывает существующий сеанс tmux в текущий рабочий каталог.

Скорее, при создании нового сеанса он называет этот сеанс после текущего рабочего каталога.

Вот что я сделал:

к

~/.aliases

добавить

alias tm='tmux new -s `basename $PWD`'

Откройте новое окно терминала и введите:

tm

Теперь создается новый сеанс tmux, названный в честь текущего рабочего каталога.

Примечание. Это зависит от basename, который не существует в Windows.