我最近使用的大多数文本编辑器和 IDE 都具有一项功能,即它们可以在文本缓冲区中显示特定字符长度的行。当你想将文件中的行保持在特定长度以下时,此功能非常有用。
有什么方法可以让 Vim 做到这一点,最好使用已经定义的textwidth
值?行将在该点自动换行,但我真的很想能够看到它在哪里。
如果这很重要,我主要在 Windows 上使用 gVim,但如果该解决方案适用于各个 Vim 版本,我会很高兴。
答案1
对于 (g)vim,使用以下命令:
set colorcolumn=80
或任何你想要的宽度。适用于 vim 和 gvim。我的是在 IF 中,所以它取决于我编辑的文件类型。
您还可以使用 +x/-x 来从 &textwidth +/- 指定列的基准位置。
set textwidth=80
set colorcolumn=-2
将在字符位置 78 处有效绘制彩色条。当然,您可以自行设置或不设置文本宽度,因此它可能是 0(默认值)。我使用绝对位置形式。
如果愿意,您还可以更改使用的颜色:
highlight ColorColumn ctermbg=green guibg=orange
(但我不推荐那些颜色)
该选项是在 (g)vim 7.3 中添加的。
答案2
有一个片段Google 代码你可以试试:
augroup vimrc_autocmds
au!
autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929
autocmd BufRead * match OverLength /\%81v.*/
augroup END
答案3
我喜欢lornix 的回答很多,但我不想突出这一栏每时每刻,仅当至少有一行超出长度限制时:
以下是我对 Haskell 文件的操作:
augroup HaskellCommands
autocmd!
" When a Haskell file is read or the text changes in normal or insert mode,
" draw a column marking the maximum line length if a line exceeds this length
autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END
" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
" See https://stackoverflow.com/questions/2075276/longest-line-in-vim#2982789
let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))
if maxLineLength > a:lengthLimit
highlight ColorColumn ctermbg=red guibg=red
" Draw the vertical line at the first letter that exceeds the limit
execute "set colorcolumn=" . (a:lengthLimit + 1)
else
set colorcolumn=""
endif
endfunction
答案4
这在 #vim 和一些论坛上经常被讨论。就目前情况而言,这是不可能的。所以,据我所知,上述解决方案是你唯一的选择。
问题是,vim 可以对有字符的地方(可以是字母、数字或纯空格)执行任何操作。但如果那里什么都没有,它就无法用不同的颜色绘制背景(如您所愿)。而且在您输入任何内容之前,那里什么都没有,所以它无法绘制线条/边距。