我喜欢其他答案,但也希望能够打开和关闭它们。我真的不知道自己在做什么,但是今天早上经过一番努力后,我发现了一些似乎可行的方法:
highlight OverLength ctermbg=darkgrey ctermfg=white guibg=#292929
fun! LongLineHighlightInit()
if !exists("w:llh")
call LongLineHighlightOn()
endif
endfunction
fun! LongLineHighlightOn()
let w:llh = matchadd("OverLength", '\%80v.')
endfunction
fun! LongLineHighlightOff()
call matchdelete(w:llh)
let w:llh = 0
endfunction
fun! LongLineHighlightToggle()
if !exists("w:llh") || w:llh == 0
call LongLineHighlightOn()
else
call LongLineHighlightOff()
endif
endfunction
augroup LongLineHighlight
autocmd BufWinEnter * call LongLineHighlightInit()
augroup end
nnoremap <silent> <Leader>8 :call LongLineHighlightToggle()<CR>
使用 matchadd 和 matchdelete(而不是简单的“匹配”)意味着高亮不会干扰使用匹配高亮的任何其他内容。
但这也要求我们将返回的匹配组 ID 存储在与高亮机制匹配的范围内,即窗口范围(即同一缓冲区上的两个窗口可以独立使用 match/matchadd/matchdelete 设置不同的高亮)。因此,“w:”范围变量。
当创建一个新窗口时(由 BufWinEnter 事件检测,然后检查 'w:llh' 变量是否未定义),我们默认打开突出显示。