可视化Vim中的右边距


77

有什么方法可以使Vim / gVim突出显示当前缓冲区的右边距?我刚刚开始与Vim合作了一段时间,但我感到烦恼的是,没有看到正确的边距(在第80列)。



您可以定义文本宽度,甚至可以设置nowrap。
pavium

11
在新的Vim 7.3 :set cc=81,或相对于文本宽度::set cc=+1
Nefrubyr

Answers:


121

Vim 7.3引入了colorcolumn。

:set colorcolumn=80

您可能更容易记住缩写形式。

:set cc=80

2
在这里查看第二个答案:stackoverflow.com/questions/235439/…,以提高兼容性。
mgold 2012年

1
@mgold从未按数字引用答案。顺序根据投票而改变。始终使用共享链接。
布鲁诺·布鲁诺斯基

1
5个月后,我一次又一次地在Google上搜索了一次,发现上面的链接很烦人。这是他在谈论stackoverflow.com/a/3765575/117471的答案,它显示了如何使vimrc与> = 7.3和<7.3的vim兼容
Bruno Bronosky

19

textwidth在Vim 7.2或更早的版本中,没有一种简单的方法可以显示-margin的垂直边缘 。从7.3版开始,提供了专用colorcolumn选项。但是,可以使用以下:match命令突出显示超出80列限制的所有字符:

:match ErrorMsg /\%>80v.\+/

我们需要使其成为一个通用的解决方案,就是动态构建匹配模式以替换textwidth 选项的正确值:

:autocmd BufWinEnter * call matchadd('ErrorMsg', '\%>'.&l:textwidth.'v.\+', -1)

7

我在.vimrc文件中写了一个vimscript函数,当我按,8时切换colorcolumn(逗号后跟8,其中逗号是用户定义命令的已定义首标,而8是我的助记键,用于'在第80栏):

" toggle colored right border after 80 chars
set colorcolumn=81
let s:color_column_old = 0

function! s:ToggleColorColumn()
    if s:color_column_old == 0
        let s:color_column_old = &colorcolumn
        windo let &colorcolumn = 0
    else
        windo let &colorcolumn=s:color_column_old
        let s:color_column_old = 0
    endif
endfunction

nnoremap <Leader>8 :call <SID>ToggleColorColumn()<cr>

1
为什么不使用简单的:nnoremap <expr> <leader>8 &cc?':let &cc=0<CR>':':let &cc=80<CR>'
单缸飞机

2

我已经乔纳森·哈特利Jonathan Hartley)的答案重写为7.2等较旧的Vim版本,因为colorcolumn较旧的Vims中没有。

highlight OverLength ctermbg=red ctermfg=white guibg=#592929

let s:OverLengthToggleVariable=0

function! ToggleOverLength()
        if s:OverLengthToggleVariable == 0
                match OverLength /\%81v.\+/
                let s:OverLengthToggleVariable=1
        else
                match OverLength //
                let s:OverLengthToggleVariable=0
        endif
endfunction

" I like <leader>h since highlight starts with h.                                                                       
nnoremap <leader>h :call ToggleOverLength()<cr>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.