让 Vim 在设置的文本宽度的边缘显示一行

让 Vim 在设置的文本宽度的边缘显示一行

我最近使用的大多数文本编辑器和 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 可以对有字符的地方(可以是字母、数字或纯空格)执行任何操作。但如果那里什么都没有,它就无法用不同的颜色绘制背景(如您所愿)。而且在您输入任何内容之前,那里什么都没有,所以它无法绘制线条/边距。

相关内容