Vim 80列布局的担忧

我觉得我在Vim中的80列显示方式是不正确的: set columns=80 。 有时我也set textwidth但是我希望能够看到并预期行set columns溢出与set columns替代。

这有一些不幸的副作用 – 我不能set number ,因为害怕分割具有不同的行号顺序的文件; 即<100行文件和> = 100行文件将需要两个不同的set columns值,因为用于附加数字显示的额外列。 我也开始新的(g)Vim会议,而不是垂直分割窗口,这迫使我使用窗口pipe理器的剪贴板 – 每次我打开或closures一个窗格时, vsplit迫使我set columns ,所以开始一个新的会话less麻烦。

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

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

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

这突出显示了超过80列限制(微妙的GUI模式,无论如何 – 在terminal模式中是不那么)的文本的背景。

从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选项的在线文档 。

较短的方法:

 match ErrorMsg '\%>80v.\+' 

我更喜欢:

 highlight ColorColumn ctermbg=gray set colorcolumn=80 

Simon Howard的回答非常好。 但/\%81v.\+/无法突出显示超出列81的选项卡。 所以我做了一些调整,基于我在VIM wiki和HS上面select的颜色上find的东西:

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

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

在这里输入图像描述

简约而不是过顶的方法。 只有太长的行的第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源文件。 你可能想要自定义这个。 如果你想省略它,它将适用于所有文件types。

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

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

从达米安康威的谈话 。

你也可以画线看80极限:

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

结果:

在这里输入图像描述

vim的较新版本允许a :set numberwidth=x值,它设置行号显示的宽度。 我真的不使用折叠等,所以我不知道。 然而,绘制细的垂直线超出了控制台应用程序的能力。 GVim可能会允许(我不使用它,所以不能在那里评论)。

你可以试试这个:

 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 

这将在每个缓冲区中设置两个高亮区,一个用于8列中的字符,而不pipe您的&textwidth设置为什么,另一个用于超出该列的字符。 这样你有一定程度的期待。 当然,如果你想要更多或更less的预期(你在这些列中以语法突出显示丢失的forms付款),你可以调整它以使用不同的宽度。

恐怕你已经对这组解决scheme施加了限制,好吧,给你留下空集。

使用:set textwidth=80将解决您提到的所有问题, 除非您不能轻易看到线路限制。 如果您:set ruler ,您将启用状态栏上的x,y位置显示,您可以使用该位置查看您所在的列。

除此之外,我不确定要告诉你什么。 丢失数字列,折叠列和拆分是一个耻辱,因为您必须:set columns=80

那么,看看:帮助专栏,这不是真的被弄乱了。

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

所以通常你只是让游戏机和窗口pipe理员通过评论列出来的工作

我不确定你的意思是“看到和预计行溢出”。 如果要将EOL大致插入第80列,请使用set textwidthset wrapmargin ; 如果你只是想要软包装(即行包装,但没有真正的EOL),然后玩set linebreakset showbreak

这是一个左边的领域,但它是一个很好的小地图,如果你有行号的话,你可以将当前分割的大小调整为80个字符:

 " make window 80 + some for numbers wide noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <cr>w<cr> 

您可以尝试这个设置窗口大小,以允许80个字符的实际文字。 尽pipe如此,这仍然不能用于垂直分割。

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

这需要vim 7+,7.3的相对编号。