当前位置:  开发笔记 > 编程语言 > 正文

Vim 80列布局问题

如何解决《Vim80列布局问题》经验,为你挑选了11个好方法。

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

这有一些不幸的副作用 - 我不能set number因为害怕在具有不同行号顺序的文件之间进行拆分; 即<100行文件和> = 100行文件将需要两个不同的set columns值,因为附加数字显示使用了额外的列.我也开始新的(g)Vim会话而不是垂直分割窗口,这迫使我使用窗口管理器的剪贴板 - 每次打开或关闭窗格时都vsplit强制我这样做set columns,所以开始一个新的会话就不那么麻烦了.

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



1> Jeremy W. Sh..:

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


您甚至可以使用以下内容自动将'colorcolumn'的值基于'textwidth':set cc = + 1
你也可以用'突出显示ColorColumn ctermbg = 7`来改变列的颜色
非常好,除了vim <7.1.40不支持matchadd.
此选项的文档位于http://vimdoc.sourceforge.net/htmldoc/options.html#%27colorcolumn%27

2> Simon Howard..:

我在.vimrc中设置了这个:

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

这突出显示了超过80列限制的文本的细微红色背景(在GUI模式中很细微,无论如何 - 在终端模式下它不那么如此).


我认为匹配正则表达式的这一行稍好一些:匹配OverLength /\%>80v.\+ /这不会突出显示"行尾"字符,而且更直观,因为您只需将数字设置为您想要的数字线长度,而不是+1.
我认为一个微妙的修正是/\%81v.\+/ - 由于某种原因,.*突出显示字符不存在的地方.
由于某种原因,它只适用于我的第一个打开的缓冲区(第一个选项卡的第一个窗口)在我的vim ...
很好的主意!我将它更改为"ctermbg = darkred"和"guibg =#FFD9D9"以更好地满足我的需求(gvim中的浅色背景和cterm模式下的暗色).
如果此解决方案仅在您的第一个缓冲区中工作,请查看http://stackoverflow.com/a/10993757/9822.

3> Maksim Vi...:

更短的方式:

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


我真的很喜欢这个,因为它不会用长垂直线污染我的缓冲区!(Y)

4> wieczorek199..:

我更喜欢:

highlight ColorColumn ctermbg=gray
set colorcolumn=80



5> Z.Zen..:

西蒙霍华德的答案很棒.但/\%81v.\+/无法突出显示超过第81列的标签.所以我做了一些调整,基于我在VIM维基上找到的东西和HS上面选择的颜色:

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

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


可能想在那里添加`guifg = white.

6> Dominykas Mo..:

在此输入图像描述

简约,不过于顶级的方法.仅突出显示太长的第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源文件.你可能想要自定义它.如果你要省略它,它将适用于所有文件类型.



7> Shanded..:

标记出指定边界的第一个字符的好方法:

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

来自Damian Conway的演讲.



8> 0x8BADF00D..:

你也可以画线看80限制:

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

结果:

在此输入图像描述



9> Matthew Scha..:

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



10> Lucas Oman..:

我担心你已经对解决方案设置了约束,好吧,给你留下空集.

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

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



11> Aristotle Pa..:

你可以试试这个:

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列中的字符,另一个用于该列之外的字符.这样你就有一定程度的期待.当然,如果你想要更多或更少的预期(你在那些列中失去语法高亮的形式支付),你可以调整它以使用不同的宽度.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有