我正在尝试将 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 off
,set -g pane-border-status off
也许第二次被 tmux 忽略并且 vim 无法识别它,但是从 .vimrc 配置中删除它确实有助于摆脱这些符号
答案1
这些是对 DSR(设备状态报告)的响应,我猜是 vim 在调整大小时发送此响应(打开和关闭 tmux 状态行将调整大小)。似乎 vim 无法正确解析响应。