Vim 80列布局问题

关于在Vim中处理80列布局的讨论,包括使用不同的高亮方式来指示超出列限制的字符,以及如何在垂直分割窗口时保持列对齐。提到了设置行号宽度、使用高亮组以及启用状态栏位置显示等方法。
摘要由CSDN通过智能技术生成

我在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楼

在此处输入图片说明

简约的,非主流的方法。 仅太长的行的第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 textwidthset wrapmargin ; 如果您只想进行自动换行(即换行,但没有实际的停产期),请使用set linebreakset showbreak


#14楼

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值