Как автоматически переименовать 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
, здесь он.
Ответы
Ответ 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.