状态中的 VIM 启动符号

状态中的 VIM 启动符号

我正在尝试将 VIM 作为我的主要文本编辑器,已经花费了大量时间设置所有内容并阅读有关 VIM 的资料。

现在一切都很好,除了有一件事总是困扰着我。当我启动 VIM(我只使用终端版本)时,有时状态行中会出现某种损坏的转义序列或某些东西,看起来不正确

打字任何带有 : 的命令都会在您输入时替换符号,这看起来也不好。

我多次检查了我的 .vimrc,没有发现任何可能导致此问题的原因。我唯一想到的可能是,我搞砸了 VIM 事件和 TMUX 钩子

在我的 tmux.conf 中

set-hook -g pane-focus-in 'if -F "#{==:#{pane_current_command},Vim}" "set -g status off; set -g pane-border-status off" "set -g status on; set -g pane-border-status bottom"'

在 .vimrc 中

autocmd VimEnter * silent !tmux set -g status off
autocmd VimEnter * silent !tmux set -g pane-border-status off
autocmd VimLeave * silent !tmux set -g status on
autocmd VimLeave * silent !tmux set -g pane-border-status bottom
au FocusLost * :set laststatus=0
au FocusGained * :set laststatus=2
autocmd InsertLeave * redraw!

但它们看起来也不错 :/

我的设置是:

  • macOS 10.4.15
  • iTerm2 3.2.9
  • 哦我的Zsh
  • tmux
  • macvim 8.1.950

感谢您的帮助

解决方案: 作为@尼古拉斯万豪需要指出的是,这些是来自隐藏/显示 tmux 状态栏时调整大小的 DSR(设备状态报告)的响应。就我而言,设置有点过头了。首先,有用于窗格焦点的 tmux 钩子:

set-hook -g pane-focus-in 'if -F "#{==:#{pane_current_command},Vim}" "set -g status off; set -g pane-border-status off" "set -g status on; set -g pane-border-status bottom"'

这个用来在切换窗格或窗口时显示/隐藏 tmux 栏,其中至少有一个打开了 VIM。然后我在 .vimrc 中写了这个:

  autocmd VimEnter * silent !tmux set -g status off
  autocmd VimEnter * silent !tmux set -g pane-border-status off

应该做同样的事情,但是在 VimEnter 事件上,我写了它们,因为我认为pane-focus-in当 Vim 启动时(窗格保持相同的焦点) tmux 钩子不会触发,实际上事实并非如此,它会。

不幸的是,我不明白当执行两次时究竟发生了什么set -g status offset -g pane-border-status off也许第二次被 tmux 忽略并且 vim 无法识别它,但是从 .vimrc 配置中删除它确实有助于摆脱这些符号

答案1

这些是对 DSR(设备状态报告)的响应,我猜是 vim 在调整大小时发送此响应(打开和关闭 tmux 状态行将调整大小)。似乎 vim 无法正确解析响应。

相关内容