欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vim 80列布局问题

程序员文章站 2022-03-21 21:45:20
...

我在Vim中执行80列指示的方式似乎不正确: set columns=80 。 有时我还set textwidth ,但是我希望能够用set columns替代项来查看和预期行溢出。

这有一些不幸的副作用:

  1. 我不能set number ,因为担心在行号顺序不同的文件之间进行拆分; 即<100行文件和> = 100行文件将需要两个不同的set columns值,因为用于额外数字显示的额外列。
  2. 我也开始新的(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楼

Vim 80列布局问题

简约的,非主流的方法。 仅太长的行的第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),",")

结果:

Vim 80列布局问题


#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 textwidthset wrapmargin ; 如果您只想进行自动换行(即换行,但没有实际的停产期),请使用set linebreakset showbreak


#14楼

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

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

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

相关标签: vim coding-style