VIM 80专栏突出显示特定文件名

时间:2014-04-14 18:17:35

标签: vim vi

我知道如何使用vim为我的所有文件突出显示过去的80个字符,使用我的vimrc中的以下内容:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

但有没有办法将其应用于某些文件名?我对autocmd有点熟悉,但我似乎无法使它工作。我不希望它应用于文件TYPES,而只是应用于某个文件名。感谢。

2 个答案:

答案 0 :(得分:1)

您实际已经使用的自动命令机制正是您所需要的。您的au行是自动命令,基本格式有3个参数:

  • 事件 - 在您的情况下为BufWinEnter,这意味着它将在窗口中显示缓冲区后运行,

  • 模式 - 在您的情况下为*,意味着它将匹配所有文件名,

  • 命令 - 这里要重新输入它,但是如果文件名与模式匹配,则它是一个将在事件上运行的命令/ EM>

因此,您实际需要的是将*更改为正确的模式(请参阅:h autocmd-patterns),例如*.txt,以匹配所有扩展名为.txt的文件。

由于仅在未启用+colorcolumn功能的情况下使用auto命令,因此您还应将其更改为auto命令。由于colorcolumn是每个窗口,而不是每个缓冲区设置,遗憾的是这并不容易,并且涉及保存和恢复最后一个值。类似的东西:

:au BufWinEnter *.txt set colorcolumn=80
:au BufWinEnter *.txt let w:lastcc=&colorcolumn
:au BufWinLeave *.txt let colorcolumn=w:lastcc

这些都是简单的例子,取决于你的成功程度。您还可以考虑要使用哪个事件(例如将所有这些包装在函数内部并使用函数调用作为命令)。

答案 1 :(得分:0)

这个对我有用:

augroup collumnLimit
   autocmd!
   autocmd BufRead,BufEnter YourFileNameHere
                    \ highlight CollumnLimit ctermbg=Red guibg=Red
   let collumnLimit = 79
   let pattern =
            \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
   autocmd BufRead,BufEnter YourFileNameHere
            \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END