#vim #tmux
#vim #tmux
Вопрос:
Я пытаюсь добиться согласованного поведения при установке имени окна tmux на имя текущего открытого файла в vim.
Вот что у меня есть в моем .vimrc
augroup tmux
autocmd!
if exists('$TMUX')
autocmd BufReadPost,FileReadPost,BufNewFile,FocusGained * call system("tmux rename-window " . expand("%:t"))
autocmd VimLeave,FocusLost * call system("tmux set-window-option automatic-rename")
endif
augroup END
Я столкнулся с двумя ситуационными проблемами:
Переключение панелей
Это почти работает. Для перехода между панелями он переименовывает каждое изменение фокуса, но иногда это не удается и выполняется сброс по умолчанию… Я понятия не имею, почему.
Переключение окон
То же поведение, что и при переключении панелей, иногда он сбрасывает имя окна, которое вы только что оставили по умолчанию
Мне нужно улучшить этот скрипт, чтобы он вел себя так:
- Переключение панелей переименовывает текущее окно tmux в filename (работает плохо)
- При переключении из окна сохраняется его название
- Транкейтировать большие имена файлов (возможно ли это вообще?)
Интересно, связано ли это с интервалом обновления моей строки состояния или с некоторыми настройками в my .tmux.conf, так что вот оно my_tmuxconf
Вот несколько GIF-файлов о странном поведении: переключение окон
переключение панелей
Обновить
Эта реализация дает лучшие результаты:
if exists('$TMUX')
autocmd BufEnter,FocusGained * call system("tmux rename-window " . expand("%:t"))
autocmd VimLeave * call system("tmux rename-window zsh")
endif
Но недостатком является то, что он не может переименовываться при переключении с панели, на которой работает vim, на панель, на которой работает что-то другое, например, обычный bash.
Недостающая часть заключается в том, чтобы сделать Tmux autorename для каждого переключателя панели, но только если на сфокусированной панели не запущен vim. Можно ли это сделать?
Комментарии:
1. Для переключения панелей у вас есть условие гонки. Нет гарантии, что предыдущая панель vim запустит свои команды раньше, чем следующая панель vim, что означает, что иногда вы получите имя, установленное для нового файла, а затем получите сброс к имени по умолчанию. Это не та проблема, которую vim может решить. В Vim есть вкладки и буферы, если вам нужно решение, которое является встроенным в vim.
2. Возможно, проблема в функции очистки? Есть ли у вас какие-либо обходные идеи, например, для проверки, является ли это переключением панели, и не очищать предыдущее имя файла?
3. Я этого не делаю. Экземпляр vim, который вы покидаете, не может знать, куда вы направляетесь, или в каком эмуляторе терминала он находится, или что делают его системные вызовы. Он просто выполняет команду, которую вы сказали ему выполнить, когда вы уходите.
4. Пожалуйста, проверьте мое обновление. Я думаю, что это сработало бы, если бы с дополнительным скриптом tmux