我在Vim中做80列指示的方式似乎不正确:set columns=80。 有时我也设置文本宽度,但我希望能够看到和预期行溢出设置列替代。

这有一些不幸的副作用:

我不能设置数字,因为害怕在行号顺序不同的文件之间分裂;例如,< 100行文件和>= 100行文件将需要两个不同的设置列值,因为额外的列用于额外的数字显示。 我还启动了新的(g)Vim会话,而不是垂直分割窗口。这是因为vsplit迫使我在每次打开或关闭一个窗格时设置列,因此启动一个新会话不那么麻烦。

当您想要设置数字、垂直分割等时,如何处理80个字符的指示?


当前回答

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

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

因此,通常情况下,您只需让控制台和窗口管理器通过注释掉set列来完成它们的工作

我不确定你说的“看到和预期排队溢出”是什么意思。 如果你想要EOL大约插入列80,使用set textwidth或set wrapmargin;如果你只是想要软换行(即行被换行,但没有实际的EOL),然后使用设置linebreak和设置showbreak。

其他回答

新版本的vim允许:set numberwidth=x value,它设置行号显示的宽度。我不怎么使用折叠等,所以我不知道这个。但是,控制台应用程序无法绘制一条细竖线。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列中的字符,另一个用于该列之外的字符。这样你就有了一定程度的预期。当然,如果您想要更多或更少的预期,您可以调整它以使用不同的宽度(这将以在这些列中丢失语法高亮显示的形式付出代价)。

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

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

使用Set colorcolumn设置列行

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

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

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

来自达米安·康威的演讲。