如何在Vim中显示垂直线以换行?

145

我想找到一种在Vim(非GVim)中显示第80列垂直线的方法。

我已经使用了set wrap,但我只想显示一个垂直线,这样我就可以自己换行长行了。


1
可能是Vim 80列布局问题的重复。 - Trevor Boyd Smith
5个回答

347

Vim 7.3的新功能:

'colorcolumn'是一个逗号分隔的屏幕列列表,可以用ColorColumn进行突出显示。对于文本对齐很有用。这将使屏幕重绘变慢。屏幕列可以是绝对数字,也可以是以'+'或'-'开头的数字,该数字将被加到或减去'textwidth'。

来自文档的示例:

:set colorcolumn=+1        " highlight column after 'textwidth'
:set colorcolumn=+1,+2,+3  " highlight three columns after 'textwidth'
:highlight ColorColumn ctermbg=lightgrey guibg=lightgrey

您也可以使用绝对数字:

:set colorcolumn=80

6
请注意,这里的颜色会自动根据您的突出显示颜色确定,除非您像示例中那样手动设置它。 - Alex Hart
2
请注意,highlight 设置必须在任何 colorscheme 命令之后设置,因为这会覆盖您的高亮颜色。 - c4urself
9
我选择了明亮的、让你的大脑发烫的红色......因为你知道......行长。 - user1898811
2
最好提一下 textwidth 也会导致在输入时 vim 进行换行。 - chicks
1
@chutsu Vim的颜色图表在这里:http://codeyarns.com/2011/07/29/vim-chart-of-color-names/ - Ashwin Nanjappa
显示剩余3条评论

17

编辑:对于Vim >= 7.3,请参见下面答案

不幸的是,vim没有像您所希望的那样显示列后的垂直线条的机制(与TextMate等不同)。但是,有替代视觉指示器可以用来显示行过长。

以下是我使用的内容(您可以将其放入您的.vimrc文件中):

nnoremap <Leader>H :call<SID>LongLineHLToggle()<cr>
hi OverLength ctermbg=none cterm=none
match OverLength /\%>80v/
fun! s:LongLineHLToggle()
 if !exists('w:longlinehl')
  let w:longlinehl = matchadd('ErrorMsg', '.\%>80v', 0)
  echo "Long lines highlighted"
 else
  call matchdelete(w:longlinehl)
  unl w:longlinehl
  echo "Long lines unhighlighted"
 endif
endfunction

那么你可以使用<Leader>H来切换高亮显示80个字符以上的列。


领袖键的vim脚本表示。参见显示当前<leader>键设置 - Rod
@Will,学习 Vimscript 的艰难之路是一个很好的资源,可以帮助你了解 Vim 的深度。 - jazzabeanie

15

还有一种通知长行的方法。

highlight OverLength ctermbg=red ctermfg=white guibg=#592929 <br>
match OverLength /\%81v.*/

Vim 80列布局的问题


9

我使用match ErrorMsg '\%>80v.\+',这将用红色突出显示超过80个字符的任何内容。

我将该命令放在我的python.vim和ruby.vim文件中,位置为~/.vim/after/ftplugin/。


5

这里有几个答案 http://vim.wikia.com/wiki/Highlight_long_lines,可以使用简单的自动命令来突出显示长行。

:au BufWinEnter * let w:m1=matchadd('Search', '\%<81v.\%>77v', -1)
:au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接