我经常使用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
中没有立即看到与我的案例相关的任何内容。
答案 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)。
它非常适用于电子邮件,代码中的注释等。处理上面的列表也没有问题。