换行逗号分隔的列表

时间:2015-08-05 20:19:41

标签: vim

我经常使用gq$在Vim中包裹一行。

例如,如果set textwidth=80中有.vimrc作为我唯一的一行,那么

option1, option2, option3, option4, option5, option6, option7, option8, option9, option10, option11

包装到

option1, option2, option3, option4, option5, option6, option7, option8, option9, 
option10, option11

但是,如果我想包装逗号分隔的列表(不带空格),则此命令不起作用,因为Vim将此行视为单个单词:

option1,option2,option3,option4,option5,option6,option7,option8,option9,option10,option11

期望的输出是:

option1,option2,option3,option4,option5,option6,option7,option8,option9,
option10,option11

如何通过在逗号上分割一行来允许Vim换行?我在:help fo-table中没有立即看到与我的案例相关的任何内容。

1 个答案:

答案 0 :(得分:2)

一种方法是使用Par。这是回流文本的最佳程序,但你必须非常喜欢抽象来消化手册。我的备忘单:

  • 设置环境变量PARINIT

    export PARINIT='grTbEiq B=.,!?_A_a Q=_s>:|'
    
  • 我的vimrc中的
  • set equalprg=par\ s0\ 72
    set formatprg=par\ s0\ 72
    
    function! s:FormatPar()
        let old_format = &formatprg
        let textwidth = &textwidth > 0 ? &textwidth : 72
        let &formatprg = 'par s0 ' . textwidth . (v:count > 0 ? 'h1p' . v:count : '')
        normal }{gq}
        normal }
        let &formatprg = old_format
    endfunc
    
    nnoremap <silent> <F2> :<C-u>silent! call <SID>FormatPar()<CR>
    

使用 F2 重新格式化当前段落,并将其与计数一起使用时添加悬挂缩进(即 4 F2 格式该段落的缩进为4)。

它非常适用于电子邮件,代码中的注释等。处理上面的列表也没有问题。