括号在 tmux vim 中显示有问题

4

我最近升级到了Ubuntu 16.04,这个问题又出现了。我模糊地记得在14.04上解决过它,但我不记得具体怎么做了。

我将tmux窗口分成两个窗格。vim在左边的窗格中运行并显示一个文件。如果vim光标停留在任何类型的括号上,当我切换窗格时,括号将变成插入符号(caret)显示,尽管文件内容没有改变。回到vim并移动光标将导致它正确地重新绘制。

在tmux外部,TERM是gnome-256color。在tmux内部,TERM是screen-256color。

有什么想法是什么原因导致了这个问题?

更新

我只需要使用Alt-Tab更改焦点即可使其发生。也就是说,我不需要在tmux中切换选项卡。简单地移动焦点就会引起这种情况。

更新2

事实证明这与gnome-terminal无关,因此我删除了对它的引用。


当我尝试这个时,我看到括号被匹配并且被突出显示。你的情况也是这样吗? - sudo bangbang
是的,在我切换窗格之前,括号已经被突出显示了。 - GaryBishop
当我执行 :NoMatchParen 命令时,我发现这个问题已经解决了。你能确认一下吗? - sudo bangbang
确认。我还注意到,当我注释掉插件'tmux-plugins/vim-tmux-focus-events'时,它就消失了。 - GaryBishop
我认为我们可以使用一些自动命令在离开vim窗口时执行NoMatchParen,并在再次聚焦vim时设置回来。让我也看看你提到的插件。之后我会发布一个答案。 - sudo bangbang
1个回答

4
这是因为vim会在匹配括号时进行高亮显示。
:help matchparen中了解到。

The functionality mentioned here is a standard-plugin. This plugin is only available if 'compatible' is not set.

You can avoid loading this plugin by setting the "loaded_matchparen" variable:

:let loaded_matchparen = 1

The plugin installs CursorMoved, CursorMovedI and WinEnter autocommands to redefine the match highlighting.

:NoMatchParen :DoMatchParen

To disable the plugin after it was loaded use this command:

:NoMatchParen

And to enable it again:

:DoMatchParen
您可以使用自动命令来切换此功能。例如:
:autocmd FocusLost * :NoMatchParen
:autocmd FocusGained * :DoMatchParen

应该可以正常工作。

如果您的控制台vim不支持这些自动命令,可以使用tmux-focus-events.vim插件。

还可以查看unix stachexchange上的这篇文章


是的。但是我需要在我的 .vimrc 文件中添加 autocmd FocusLost * :NoMatchParen。注意星号。FocusGained 同样如此。 - GaryBishop
哎呀,差点错过了。谢谢您的纠正。 - sudo bangbang
正如我在上面的更新2中所指出的那样,这个问题与gnome-terminal无关,因此我从问题中删除了那些错误信息。我可以在我的chromebook上的终端应用程序中看到它。 - GaryBishop

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接