【问题标题】:Is it possible to visualize the right margin in Vim?是否可以在 Vim 中可视化右边距?
【发布时间】:2021-01-24 05:44:51
【问题描述】:

有什么方法可以让 Vim(或 gVim,或两者兼有)突出显示当前缓冲区的右边距?

我刚开始使用 Vim 有一段时间了,发现右边距不可见很烦人(例如,在第 80 列)。

【问题讨论】:

  • 您可以定义文本宽度,如果您愿意,甚至可以设置 nowrap。
  • Vim 7.3 中的新功能::set cc=81,或相对于文本宽度::set cc=+1

标签: vim


【解决方案1】:

Vim 7.3 引入了颜色列。

:set colorcolumn=80

你可能更容易记住简短的形式。

:set cc=80

【讨论】:

  • 在此处查看第二个答案:stackoverflow.com/questions/235439/… 以提高兼容性。
  • @mgold 从不按数字引用答案。顺序根据投票而改变。始终使用分享链接。
  • 5 个月后,我在谷歌上搜索了一遍又一遍,发现上面的链接很烦人。这是他正在谈论的答案stackoverflow.com/a/3765575/117471,它显示了如何使您的 vimrc 与 vim >=7.3 和 兼容
【解决方案2】:

没有简单的方法来可视化 textwidth-margin 在 Vim 7.2 或更早版本中;从 7.3 版开始, 有专用的colorcolumn 选项。但是,可以强调 超过 80 列限制的所有字符使用:match 命令:

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

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

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

【讨论】:

    【解决方案3】:

    我在我的 .vimrc 中编写了一个 vimscript 函数,当我按下 ,8 时切换颜色列(逗号后跟 8,其中逗号是用户定义命令的定义前导符,而 8 是我的助记键'show a第 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>
    

    【讨论】:

    • 为什么不简单的单行::nnoremap &lt;expr&gt; &lt;leader&gt;8 &amp;cc?':let &amp;cc=0&lt;CR&gt;':':let &amp;cc=80&lt;CR&gt;'
    【解决方案4】:

    我已经为 7.2 等旧版 Vim 重写了 the answerJonathan Hartley,因为旧版 Vim 中没有 colorcolumn

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-30
      • 2018-11-20
      • 2017-05-30
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多