【问题标题】:VIM 80 Column Highlight for specific filenames特定文件名的 VIM 80 列突出显示
【发布时间】:2014-04-15 06:14:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: vim vi


    【解决方案1】:

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

    • event - 在你的情况下是BufWinEnter,这意味着它将在缓冲区显示在窗口中后运行,

    • pattern - 在您的情况下是 *,这意味着它将匹配所有文件名,

    • command - 在这里重新输入它很长,但如果文件名匹配 patternevent 上运行的命令/em>

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

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

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

    这些都是简单的例子,这取决于你能做到多复杂。您还可以考虑要使用哪个 事件(例如,将所有这些都包装在函数中并将函数调用用作命令)。

    【讨论】:

    • 请注意'colorcolumn' 是窗口的本地而不是缓冲区。所以你需要玩BufLeave event
    • @PeterRincker:很好的建议,让我修正一下答案。
    【解决方案2】:

    这个对我有用:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 2012-10-02
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 1970-01-01
      相关资源
      最近更新 更多