【问题标题】:sourcing vimrc when opening a file in tab page?在标签页中打开文件时采购vimrc?
【发布时间】:2023-04-08 09:49:01
【问题描述】:

我的 vimrc 中有以下内容来突出显示超过 80 列的所有行:

highlight ColorColumn ctermfg=red ctermbg=bg
call matchadd('ColorColumn', '\%81v.\+', 100)

它在大多数情况下都很好用。但是,我注意到如果我在新选项卡中打开文件,它根本不起作用。我可以通过:source $MYVIMRC 解决这个问题。但问题是,当我获取 vimrc 时,我丢失了 indentLines 插件。我做了一些测试,发现只要vimrc 来自vim 的开放实例,indentLines 就会消失。尽管如此,当我在新选项卡中打开文件时,我仍然无法确定为什么上面显示的 2 行没有被调用。有什么想法吗?

my vimrc

【问题讨论】:

  • 可能想查看:set cc=81。请参阅:h 'cc' 了解更多信息。

标签: vim


【解决方案1】:

matchadd() 只影响当前窗口。为了在所有窗口上都有它,您可以将以下内容添加到您的 .vimrc:

if exists("*matchadd")
   augroup colorColumn
      au!
      au BufEnter * call matchadd('ColorColumn', '\%81v.\+', 100)
   augroup END
endif

编辑:正如 Ingo 在 cmets 上指出的那样,BufEnter 将在不必要时触发多次。下面的行更正了这个问题:

if exists("*matchadd")
   augroup colorColumn
      au!
      au VimEnter,WinEnter * call matchadd('ColorColumn', '\%81v.\+', 100)
   augroup END
endif

【讨论】:

  • 感谢您的解决方案。我认为这可能与此有关,但不知道如何绕过它。
  • WinEnter 会更合适,因为(用您自己的话来说)matchadd() 是窗口范围的。你也需要VimEnter,因为它不会在第一个窗口中触发。
  • @NicholasLand:很高兴我能提供帮助。
  • @IngoKarkat:我确实在第一个版本上写了WinEnter,我注意到它没有在初始窗口中触发。未经进一步调查,我已更改为BufEnter。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2020-09-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 2016-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多