Vim 80列布局问题

时间:2008-10-24 22:14:02

标签: vim coding-style

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

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

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

14 个答案:

答案 0 :(得分:752)

从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

另见the online documentation on the colorcolumn option

答案 1 :(得分:570)

我在.vimrc中设置了这个:

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

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

答案 2 :(得分:54)

缩短方式:

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

答案 3 :(得分:42)

我更喜欢:

delimiter: ""

答案 4 :(得分:28)

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

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

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

答案 5 :(得分:14)

enter image description here

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

答案 6 :(得分:12)

一种很好的方法,只标记出指定范围的第一个字符:

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

来自Damian Conway的talk

答案 7 :(得分:11)

你也可以画线看80限制:

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

结果:

enter image description here

答案 8 :(得分:6)

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

答案 9 :(得分:5)

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

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

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

答案 10 :(得分: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列中的字符,另一个用于该列之外的字符。这样你就有一定程度的期待。当然,如果你想要更多或更少的预期(你可以通过在这些列中丢失语法高亮的形式付出代价),你可以调整它以使用不同的宽度。

答案 11 :(得分:3)

好吧,看看:帮助栏,它并没有真正被弄乱。

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

通常情况下,您只需通过评论set columns

让控制台和窗口管理员完成工作

我不确定你的意思是“看到并预期线路溢出”。 如果您希望EOL大致插入第80列,请使用set textwidthset wrapmargin;如果你只是想要软包裹(即线被包裹,但没有实际的EOL),那么玩set linebreakset showbreak

答案 12 :(得分:2)

这个是左边的字段,但它是一个很好的小地图,用于将当前分割调整为80个字符,如果你有行号:

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

答案 13 :(得分:1)

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

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

这需要vim 7 +,7.3为相对数字。