" 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
# window name formatting
set-window-option -g window-status-format "#W"
set-window-option -g window-status-current-format "#W"
# pane title formatting
set -g pane-border-format ' #T '
# rename window to pane title on focus
set -g focus-events on
set-hook -g pane-focus-in 'rename-window "#T"'
7条答案
按热度按时间yi0zb3m41#
这是一个部分的答案。它可以改进,但我现在没有时间去解决它。
在
.vimrc
中输入以下内容:还有其他事件(参见Vim中的
:help autocmd-events
)也可以用来处理。有一件事我还没有弄清楚,如果您在两个窗格中的每一个中都打开了vim
的示例,并且您从一个窗格切换到另一个窗格,则如何更改窗口名称。vim
不知道tmux
中的活动,因此不会触发vim
事件。tsm1rwdh2#
这是可能的!我想分享这个答案,因为我一直在寻找它相当长的一段时间。终于有时间实现它自己。把以下内容放在你的
.vimrc
:它会将终端标题设置为当前焦点中的文档标题(
%t
代表没有路径的文档标题)。由于BufEnter
事件,终端标题会在您每次切换焦点到另一个文档时更改。同样,当离开Vim时,它会更改回原始状态。将以下内容放入(或替换)您的.tmux.conf
:没有必要完全复制它,但它看起来像这样:
I
代表窗口编号。W
代表当前运行的应用程序,T
代表终端标题。后者用于显示当前在vim中打开的文件。终端标题总是设置的(我的bash终端总是显示主机名,我不需要在状态栏描述中看到),因此,为了只在Vim运行时显示它,请将以下内容添加到您的.bashrc
:我使用的shell bash就是这样。在终端显示提示符之前,PROMPT_COMMAND会被求值。echo命令将终端标题设置为空。因此,每次从可能更改了标题的应用程序中返回提示符时,都会发生此操作。其他shell可能需要进行不同的配置...
我不会使用
tmux rename-window
,因为只要窗口存在,它就会设置标题。你需要在每次应用程序启动时调用它。所提供的方法保持了动态性,因为它可以在一个窗口中使用多个窗格,并在vim中打开多个分屏/文件。aamkag613#
感谢伟大的投入,伙计们,它节省了我很多打字:-)
我把前面两个答案合二为一,这一点我很喜欢。
第一行和第二行用于tmux,第三行和第四行用于正常的终端使用。你不必重新启动tmux,因为是vim显式地更新tmux。
niknxzdl4#
并在Vim退出时恢复自动窗口标题:
我还建议检查一下我们是否在tmux下运行:
smtd7mpg5#
答案很好,但我还是无法让它按我想要的方式工作,即:1)在打开Vim时更改TMUX窗口名称2)在退出时。完成后将其返回到以前的名称我用以下3个Vimrc行实现了它:
e5nszbig6#
作为设置tmux窗口名的替代方法,你可以让vim设置tmux窗格标题。这可以让你在让vim更改窗格标题的同时保留你用
tmux new-window -n <window-name>
定义的静态窗口名。你可以在set-titles-string
中使用#T
来显示窗格标题,例如set-option -g set-titles-string "#W: #T"
将显示tmux窗口名和窗格标题。更改窗格标题的VIM配置示例:
赞扬vim.wikia.com的
t_ts
和t_fs
指导和phluks的自动命令。x8diyxa77#
下面是我的方法,当在窗格之间来回导航和限制显示的字符数时,我也会重命名窗口。
文件名:
我喜欢不带索引号或其他符号的标题名称。
若要保留索引号,请将window-status-format和window-status-current-format行更改为“#I:#W”。
源文件tmux.conf
~/.bashrc
我最终使用了bash,因为它允许在更改目录时立即重命名窗口,并且最终比vimscript更容易满足我的特定需求。它本质上改变了
cd
和vim
命令的功能,以包括我的重命名功能。源代码.bashrc