我在Vim中执行80列指示的方式似乎不正确: set columns=80
。 有时我还set textwidth
,但是我希望能够用set columns
替代项来查看和预期行溢出。
这有一些不幸的副作用:
- 我不能
set number
,因为担心在行号顺序不同的文件之间进行拆分; 即<100行文件和> = 100行文件将需要两个不同的set columns
值,因为用于额外数字显示的额外列。 - 我也开始新的(g)Vim会话,而不是垂直拆分窗口。 这是因为
vsplit
在每次打开或关闭窗格时强制我set columns
,因此开始新会话的麻烦就少了。
当您要set numbers
,垂直分割等时,如何处理80个字符的指示?
#1楼
较短的方法:
match ErrorMsg '\%>80v.\+'
#2楼
这是在左字段之外,但是它有一个不错的小地图,用于在行号位于以下位置时将当前拆分大小调整为80个字符:
" make window 80 + some for numbers wide
noremap <Leader>w :let @w=float2nr(log10(line("$")))+82\|:vertical resize <c-r>w<cr>
#3楼
简约的,非主流的方法。 仅太长的行的第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源文件。 您可能需要对此进行自定义。 如果您忽略它,它将适用于所有文件类型。
#4楼
恐怕您对解决方案集施加了约束,好让您留空集。
使用:set textwidth=80
可以解决您提到的所有问题, 但您不能轻易看到行数限制。 如果:set ruler
, :set ruler
启用状态栏上的x,y位置显示,可用于查看您所在的列。
除此之外,我不确定该告诉您什么。 失去number列,fold列并拆分仅是因为您必须:set columns=80
。
#5楼
较新版本的vim允许:set numberwidth=x
值,该值设置行号显示的宽度。 我实际上并没有使用折叠等功能,因此我对此一无所知。 但是,绘制一条细的垂直线超出了控制台应用程序的能力。 GVim可能允许这样做(我不使用它,所以不能在此处发表评论)。
#6楼
您可以尝试以下方法:
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列中的字符,另一个用于突出显示该列之外的字符。 这样一来,您便有了一定程度的期望。 当然,如果您希望或多或少地期望(您以这些列中语法突出显示的损失形式付费),则可以调整它以使用不同的宽度。
#7楼
我在我的.vimrc中进行了设置:
highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.\+/
对于超过80列限制的文本,这会以微妙的红色突出显示背景(无论如何,在GUI模式下都是微妙的-在终端模式下则是如此)。
#8楼
标记仅第一个字符超出指定范围的好方法:
highlight ColorColumn ctermbg=magenta "set to whatever you like
call matchadd('ColorColumn', '\%81v', 100) "set column nr
从Damian Conway的讲话中 。
#9楼
您也可以画线以查看80个限制:
let &colorcolumn=join(range(81,999),",")
let &colorcolumn="80,".join(range(400,999),",")
结果:
#10楼
西蒙·霍华德的答案很好。 但是/\\%81v.\\+/
无法突出显示超过列81的选项卡。 因此,根据我在VIM Wiki上发现的内容以及HS上面的颜色选择,我做了一些调整:
highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9
match OverLength /\%>80v.\+/
现在,VIM将突出显示超出第80列的所有内容。
#11楼
我更喜欢:
highlight ColorColumn ctermbg=gray
set colorcolumn=80
#12楼
从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
选项的在线文档 。
#13楼
好吧,看着:help列,并没有使它变得混乱。
在控制台中,通常由控制台设置确定(即自动检测到); 在GUI中,它确定gvim窗口的宽度(并由其确定)。
因此,通常您只需注释掉set columns
即可让控制台和窗口管理器执行工作
我不确定“看到并预期行溢出”是什么意思。 如果希望将EOL粗略插入到第80列,请使用set textwidth
或set wrapmargin
; 如果您只想进行自动换行(即换行,但没有实际的停产期),请使用set linebreak
和set showbreak
。
#14楼
您可以尝试将窗口大小设置为允许80个字符的实际文本。 但是,这仍然不适用于垂直分割。
let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)
这需要vim 7+,相对数为7.3。