簡體   English   中英

Vim 語法着色:如何僅突出顯示長行?

[英]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% 的時間里,我寫了這個小擴展來快速禁用高亮顯示:

https://gist.github.com/fgarcia/9704429#file-long_lines-vim

我使用以下方法:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM