425

我在 Vim 中进行 80 列指示的方式似乎不正确:set columns=80. 有时我也是set textwidth,但我希望能够看到并预测set columns替代方案的行溢出。

这有一些不幸的副作用:

  1. 我不能set number害怕在具有不同行号顺序的文件之间进行拆分;即 < 100 行文件和 >= 100 行文件将需要两个不同set columns的值,因为额外的列用于附加数字显示。
  2. 我还开始新的 (g)Vim 会话,而不是垂直拆分窗口。这是因为每次打开或关闭窗格时都会vsplit强制我进行,因此开始新会话不那么麻烦。set columns

当你想要set numbers垂直分割等时,你如何处理 80 个字符的指示?

4

15 回答 15

784

从 vim 7.3 开始,您可以使用set colorcolumn=80(set cc=80简称)。

由于早期版本不支持此功能,因此我的.vimrc用途是:

if exists('+colorcolumn')
  set colorcolumn=80
else
  au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)
endif

另请参阅有关该colorcolumn选项的在线文档。

于 2010-09-22T00:55:01.030 回答
592

我在我的 .vimrc 中有这个设置:

highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/

对于超过 80 列限制的文本,这会以微妙的红色突出显示背景(无论如何,在 GUI 模式下是微妙的 - 在终端模式下则不那么如此)。

于 2008-10-25T05:51:11.577 回答
58

更短的方式:

match ErrorMsg '\%>80v.\+'
于 2009-07-13T01:01:40.967 回答
53

我更喜欢:

highlight ColorColumn ctermbg=gray
set colorcolumn=80
于 2016-03-04T11:31:13.677 回答
30

西蒙霍华德的回答很棒。但/\%81v.\+/未能突出显示超过第 81 列的选项卡。所以我做了一点调整,基于我在VIM wiki上找到的东西和上面 HS 的颜色选择:

highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/

现在 VIM 将突出显示超过第 80 列的任何内容。

于 2010-07-22T04:31:55.960 回答
18

在此处输入图像描述

极简主义,不夸张的方法。只有第 79 个字符过长的行会被突出显示。它克服了一些常见问题:在新窗口上工作,溢出的单词被正确突出显示。

augroup collumnLimit
  autocmd!
  autocmd BufEnter,WinEnter,FileType scala,java
        \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey
  let collumnLimit = 79 " feel free to customize
  let pattern =
        \ '\%<' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v'
  autocmd BufEnter,WinEnter,FileType scala,java
        \ let w:m1=matchadd('CollumnLimit', pattern, -1)
augroup END

注意:请注意,FileType scala,java这将其限制为 Scala 和 Java 源文件。您可能想要自定义它。如果您省略它,它将适用于所有文件类型。

于 2014-01-28T13:16:13.437 回答
15

标记超出指定范围的第一个字符的好方法:

highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr

来自达米安康威的谈话

于 2014-11-01T01:23:36.847 回答
14

您也可以画线查看 80 限制:

let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")

结果:

在此处输入图像描述

于 2015-05-15T17:14:08.153 回答
7

较新版本的 vim 允许一个:set numberwidth=x值,它设置行号显示的宽度。我并没有真正使用折叠等,所以我不知道。但是,绘制一条细垂直线超出了控制台应用程序的能力。GVim 可能允许这样做(我不使用它,所以不能在那里发表评论)。

于 2008-10-24T23:31:17.973 回答
5

恐怕您已经对解决方案集施加了限制,好吧,这些解决方案会让您获得空集。

使用:set textwidth=80将解决您提到的所有问题,除了您无法轻易看到即将出现的行数限制。如果您:set ruler是 ,您将启用状态栏上的 x,y 位置显示,您可以使用它来查看您所在的列。

除此之外,我不知道该告诉你什么。仅仅因为必须这样做而丢失数字列、折叠列和拆分是一种耻辱:set columns=80

于 2008-10-24T22:39:59.233 回答
5

你可以试试这个:

au BufWinEnter * if &textwidth > 8
\ | let w:m1=matchadd('MatchParen', printf('\%%<%dv.\%%>%dv', &textwidth+1, &textwidth-8), -1)
\ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1)
\ | endif

这将在每个缓冲区中设置两个突出显示,一个用于在您&textwidth设置的任何内容之前的 8 列中的字符,另一个用于该列之外的字符。这样你就有了一定程度的期待。当然,如果您想要或多或少的预期,您可以调整它以使用不同的宽度(您以失去这些列中的语法突出显示的形式付出代价)。

于 2008-10-25T05:39:41.087 回答
3

好吧,看看 :help 列,它并没有真正被弄乱。

在控制台中,通常由控制台设置决定(即自动检测);在 GUI 中,它确定(并由其确定)gvim 窗口的宽度。

所以通常你只是让控制台和窗口管理器通过注释掉来完成他们的工作set columns

我不确定“看到并预期行溢出”是什么意思。如果您希望 EOL 大致插入第 80 列,请使用set textwidthset wrapmargin; 如果您只想软换行(即换行,但没有实际的 EOL),请使用set linebreakand set showbreak

于 2010-09-28T03:56:40.013 回答
2

这个不在左侧字段中,但它是一个很好的小地图,如果您有行号,则可以将当前拆分的大小调整为 80 个字符:

" make window 80 + some for numbers wide  
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr> 
于 2012-12-29T13:21:05.063 回答
1

您可以尝试将窗口大小设置为允许 80 个字符的实际文本。不过,这仍然不适用于垂直拆分。

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

这需要 vim 7+,relativenumber 为 7.3。

于 2010-12-13T17:38:26.233 回答
0

使用 set colorcolumn 设置列线

set autoindent                                                                  
set smartindent                                                                 
set nowrap                                                                      
set hlsearch                                                                    
set tabstop=4                                                                   
set shiftwidth=4                                                                
syntax on                                                                       
set colorcolumn=80
于 2021-12-21T08:56:27.547 回答