Я новичок в tmux и пытаюсь понять, как редактировать конфигурацию, чтобы окна с открытым vim отображались в панели задач не как #:vim
, но как бы ни было открыто имя файла в vim, это (ie "#:filename.php")
. Похоже, это должно быть обычным делом, но мой поиск - foo терпит неудачу.
Вкладки tmux с именем файла, открытым в vim
Ответ 1
Вот частичный ответ. Это может быть улучшено, но у меня нет времени, чтобы разобраться с этим сейчас.
Поместите в .vimrc
следующее:
autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%"))
Существуют другие события (см. :help autocmd-events
в Vim), которые могут использоваться для обработки
также. Одна вещь, которую я не понял, - это изменить имя окна, если вы
иметь экземпляр vim
, открытый в каждой из двух панелей, и вы переключаетесь с одной панели
к другому. vim
не знает о действии в tmux
, поэтому не запускаются события vim
.
Ответ 2
Это возможно! Я хотел поделиться этим ответом, потому что я искал его довольно долгое время. Наконец, настало время его реализовать. Поместите в .vimrc
следующее:
autocmd BufEnter * let &titlestring = ' ' . expand("%:t")
set title
Он установит заголовок терминала только в заголовке документа, находящемся в фокусе (%t
означает название документа без пути). Благодаря событию BufEnter
название терминала изменяется при каждом переключении фокуса на другой документ. Также при выходе из Vim он возвращается обратно в исходное состояние. Поместите (или замените) следующее в .tmux.conf
:
set-window-option -g window-status-current-format "[#I #W#T]"
set-window-option -g window-status-format "[#I #W#T]"
Нет необходимости копировать его точно, но это выглядит так:
[1 vim .tmux.conf][2 bash]...
I
обозначает номер окна. W
означает, что текущее приложение запущено, а T
- название терминала. Позднее мы используем для отображения текущего файла в vim. Заголовок терминала всегда задается (мой терминал bash всегда показывает имя хоста, которое мне не нужно видеть в описаниях строки состояния), поэтому, чтобы показывать это только в том случае, когда vim работает, добавьте следующее к вашему .bashrc
:
PROMPT_COMMAND='echo -ne "\033]0;\007"'
Это верно для bash, оболочки, которую я использую. PROMPT_COMMAND оценивается непосредственно перед отображением подсказки в терминале. Команда echo устанавливает заголовок терминала в никуда. Таким образом, это действие происходит каждый раз, когда вы возвращаете запрос от приложений, которые могли бы изменить заголовок. Другие оболочки могут нуждаться в настройке по-разному...
Я бы не использовал tmux rename-window
, поскольку он устанавливает заголовок до тех пор, пока существуют окна. Вам нужно будет вызвать его для каждого запуска приложения. Представленный подход сохраняет динамику, поскольку он работает с несколькими панелями в окне и несколькими разделенными экранами/файлами, открытыми в vim.
Ответ 3
Спасибо за отличные входные ребята, это экономит много ввода: -)
Я объединил два предыдущих ответа в один, который мне нравится.
autocmd BufEnter * call system("tmux rename-window " . expand("%:t"))
autocmd VimLeave * call system("tmux rename-window bash")
autocmd BufEnter * let &titlestring = ' ' . expand("%:t")
set title
Первая и седонная линии для tmux, а третья и четвертая для обычного использования терминала. Вам не нужно перезапускать tmux, так как это vim, который явно обновляет tmux.
Ответ 4
И чтобы восстановить заголовок автоматического окна на выходе Vim:
autocmd VimLeave * call system("tmux setw automatic-rename")
Я также предлагаю проверить, запущены ли мы в tmux:
if exists('$TMUX')
autocmd BufEnter * call system("tmux rename-window '" . expand("%:t") . "'")
autocmd VimLeave * call system("tmux setw automatic-rename")
endif
Ответ 5
Отличные ответы здесь, но я все еще не мог заставить его работать так, как я этого хотел, а именно: 1) Измените имя окна TMUX при открытии vim 2) Остановитесь. вернуть его к предыдущему имени Я достиг этого с помощью следующих 3 строк vimrc:
autocmd BufReadPost,FileReadPost,BufNewFile * call system("tmux rename-window " . expand("%:t"))
let tmuxtitle = system("tmux display-message -p '#W'")
autocmd VimLeave * call system("tmux rename-window " . shellescape(tmuxtitle))
Ответ 6
В качестве альтернативы другим ответам, которые задают имя окна tmux, вы можете вместо vim установить заголовок tmux. Это позволяет сохранить статическое имя окна, которое вы определяете с помощью tmux new-window -n <window-name>
, когда vim меняет заголовок панели. Вы можете использовать #T
в set-titles-string
, чтобы отобразить заголовок панели, например. set-option -g set-titles-string "#W: #T"
отобразит имя окна tmux и заголовок панели.
Пример конфигурации vim для изменения названия панели:
" Teach vim the tmux escape sequences for changing pane title
" Note the "^[" should be a literal escape code (use `^v<esc>` to enter it)
set t_ts=^[]2;
set t_fs=^[\\
" Turn on setting the title.
set title
" The following causes vim to refresh the title each time we change buffers.
" Otherwise it will only set the title once at startup.
augroup RefreshTitle
autocmd!
" The concatenation of the colon is a hack to prevent vim from
" interpreting the string as a modeline.
autocmd BufEnter * let &titlestring = "vim" . ":" . expand("%:t")
augroup END
Престижность vim.wikia.com для руководства t_ts
и t_fs
и флюки для автокоманды.