我在Vim中做80列指示的方式似乎不正确:set columns=80。
有时我也设置文本宽度,但我希望能够看到和预期行溢出设置列替代。
这有一些不幸的副作用:
我不能设置数字,因为害怕在行号顺序不同的文件之间分裂;例如,< 100行文件和>= 100行文件将需要两个不同的设置列值,因为额外的列用于额外的数字显示。
我还启动了新的(g)Vim会话,而不是垂直分割窗口。这是因为vsplit迫使我在每次打开或关闭一个窗格时设置列,因此启动一个新会话不那么麻烦。
当您想要设置数字、垂直分割等时,如何处理80个字符的指示?
你可以试试这个:
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列中的字符,另一个用于该列之外的字符。这样你就有了一定程度的预期。当然,如果您想要更多或更少的预期,您可以调整它以使用不同的宽度(这将以在这些列中丢失语法高亮显示的形式付出代价)。
简约,不夸张的方法。如果行太长,则只突出显示第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
注意:请注意文件类型限制为scala和java源文件。您可能需要自定义它。如果省略它,它将适用于所有文件类型。