首页 > 解决方案 > 终极 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.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 自动重命名,但前提是焦点窗格未运行 vim。可以做到吗?

标签: vimtmux

解决方案


推荐阅读