Vim 80列布局问题

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

这有一些不幸的的副作用:

  1. 我不能set number,因为害怕在行号顺序不同的文件之间分裂;例如& lt;100行文件和>= 100行文件将需要两个不同的set columns值,因为额外的列用于额外的数字显示。
  2. 我还启动了新的(g)Vim会话,而不是垂直分割窗口。这是因为每当我打开或关闭一个窗格时,vsplit都会强迫我set columns,所以开始一个新会话不那么麻烦。

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

271340 次浏览

恐怕你已经在解集上加上了约束条件,只剩下一个空集。

使用:set textwidth=80将修复你提到的除了中你不容易看到行数限制的所有问题。如果你:set ruler,你将启用状态栏上的x,y位置显示,你可以使用它来查看你在哪一列。

除此之外,我不知道该跟你说什么。仅仅因为必须:set columns=80而丢失number列、fold列和split是很遗憾的。

新版本的vim允许: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

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

我在我的。vimrc中设置了这个:

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

这将为超过80列限制的文本以微妙的红色突出显示背景(无论如何,在GUI模式中很微妙-在终端模式中就不那么明显了)。

短:

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

Simon Howard的回答很好。但是/\%81v.\+/不能突出显示超过81列的制表符。所以我做了一个小小的调整,基于我在VIM维基和HS的颜色选择上面找到的东西:

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

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

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

看一下:help列,它并不是真的被用来捣乱的。

在主机中,这通常是由主机设置决定的(即自动检测);在GUI中,它决定了(也被决定了)gvim窗口的宽度。

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

我不确定你说的“看到和预期行溢出”是什么意思。 如果你想要EOL大致插入列80,使用set textwidthset wrapmargin;如果你只是想要软换行(即行被换行,但没有实际的EOL),那么使用set linebreakset showbreak.

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

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

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

这是一个很好的小地图,如果你有行号,它可以把你当前的分割大小调整到80个字符:

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

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源文件。您可能需要自定义它。如果省略它,它将适用于所有文件类型。

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

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

来自Damian Conway的说话

你也可以画线看看80的极限:

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

结果:

enter image description here

我喜欢:

highlight ColorColumn ctermbg=gray
set colorcolumn=80

使用Set colorcolumn设置列行

set autoindent
set smartindent
set nowrap
set hlsearch
set tabstop=4
set shiftwidth=4
syntax on
set colorcolumn=80