[英]Vim syntax coloring: How do I highlight long lines only?
我希望 vim 為我着色“長”行。 以 80 列為例,我想突出顯示超過該長度的行。 這大致是我認為 .vimrc 文件應該包含的內容,盡管它 (1) 不起作用,並且 (2) 使用 Perl 的正則表達式語法來說明我的觀點,因為我不太了解 Vim:
...
highlight Excess ctermbg=0
au Syntax * syn match Excess /.{80,}$/
...
這(至少在我看來)應該標記超過 80 列的行。 理想情況下,我希望能夠僅為超過 80 列的行部分着色,因此如果一行是 85 列,那么第 81 到第 85 列將被突出顯示。
我確信 Vim 可以做到這一點,只是不是由我掌舵。
我需要自動命令為我工作:
augroup vimrc_autocmds
autocmd BufEnter * highlight OverLength ctermbg=darkgrey guibg=#111111
autocmd BufEnter * match OverLength /\%75v.*/
augroup END
如果您的目標是平均 80 列,也喜歡使用 75 的想法。
取自:
http://blog.ezyang.com/2010/03/vim-textwidth/
沒有BufEnter
失敗的可能原因:highlight + match 只能使用一次。 多次使用意味着舊的被覆蓋。 如何添加多個亮點
我的 vimrc 中有這個。
我在這里找到了: Vim 80 列布局問題
highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%81v.*/
您可能希望根據自己的喜好調整顏色。
因為我不喜歡 Vim 7.3 列標記,所以我只使用第 80 列之后的突出顯示文本……至少在 95% 的情況下這是我想要的。
在另外 5% 的時間里,我寫了這個小擴展來快速禁用高亮顯示:
我使用以下方法:
hi gitError ctermbg=Red
match gitError /^.*\s$/
2match gitError /^.\{120\}.*$/
(這些匹配一些 git pre-commit 鈎子)
第二行應該引起您的興趣。
這使用自動命令來調整 OverLength 值以匹配您的文件類型。
" highlight lines longer than `textwidth` size for each filetype
autocmd FileType *
\ if &textwidth |
\ exec 'match OverLength /\%' . string(&textwidth+2) . 'v.*/' |
\ endif
我喜歡其他答案,但也希望能夠打開和關閉它們。 我真的不知道我在做什么,但是在今天早上與它搏斗之后,我有一些似乎有效的東西:
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' 變量未定義),我們默認打開高亮顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.