我想格式化srt字幕文本文件,以避免在我的媒体播放器上包装问题.
我需要将换行宽度设置为多个字符,例如43
我可以用Editplus做到这一点,它是一个内置的功能,效果很好.我想在Vim中做到这一点的原因,首先是Editplus只能在PC上使用,其次是Vim是badass.
我在网上找到了以下解决方案..
:设置tw = 43
gggqG
它确实有效,但不完全是我想要的.
例如
我有这个文字:
557
00:47:39,487 - > 00:47:42,453
我将不得不完成一些程序,
我让你看看它们对我来说是什么
格式化后,我得到:
557 00:47:39,487 - > 00:47:42,453我将
不得不完成一些程序,我
让你看看它们对
我来说是什么
它似乎忽略了换行符/ CR.正如您所看到的,"我会"已被添加到第一行.
如何让它不忽略换行符?
编辑:关于格式化的apoligies,第一次使用stackoverflow!
您可以使用空格选项,formatoptions
并将要包装的行以空格结束.
:set tw=43 :set fo+=w :g/^\a/s/$/ / gggqG
第三行在以字母开头的任何行的末尾添加一个空格,并fo+=w
停止gq
连接不以空格结尾的行.
看到:
:help fo-table :help 'formatoptions' :help gq :help :g
编辑以回应评论
:g/^\a/s/$/ /
这意味着:
:g/ " Search the file ^\a " For lines starting (^) with an alphabetic character (\a - equivalent to [A-Za-z]) / " Then on each line that the regexp matches (i.e. each line starting with an alphabetic character) s/ " Substitute... $ " The end of line (zero-width match at the end of the line) / / " With a space (slashes are delimiters)
global(:g
)命令仅对当前文件进行操作,但是textwidth
和formatoptions
行将持续整个会话.如果您希望这些选项仅用于当前缓冲区,请:setlocal
改用:
:setlocal tw=43 :setlocal fo+=w :help :setlocal