如何在Vim中重写列中的文本?

如何在Vim中重写列中的文本?,vim,Vim,我有以下形式的面向列的文本: TR # DATE DESCRIPTION PROGRAMMER ----- ----------- --------------------------- ----------- 12345 01-APR-2014 This is an April Fool's Joe Sewell joke. Not! 现在,我想加宽DESCRIPTION列,并将该列仅重新加宽到

我有以下形式的面向列的文本:

TR #  DATE        DESCRIPTION                  PROGRAMMER
----- ----------- ---------------------------  -----------
12345 01-APR-2014 This is an April Fool's      Joe Sewell
                  joke. Not!
现在,我想加宽
DESCRIPTION
列,并将该列仅重新加宽到新的宽度。比如说,为了这个问题,我会自己添加空格,这样看起来更像这样:

TR #  DATE        DESCRIPTION                        PROGRAMMER
----- ----------- ---------------------------------  -----------
12345 01-APR-2014 This is an April Fool's            Joe Sewell
                  joke. Not!
现在是我需要帮助的时候了。我想在
DESCRIPTION
列上执行可视块选择(gvim中的CTRL-V或CTRL-Q),并执行ex命令或映射以将文本重绘到选定的宽度,从而生成:

TR #  DATE        DESCRIPTION                        PROGRAMMER
----- ----------- ---------------------------------  -----------
12345 01-APR-2014 This is an April Fool's joke.      Joe Sewell
                  Not!

如有必要,我可以处理后面有尾随空格的行。我希望受影响的选定行上的其余文本。(那些熟悉OpenVMS下EVE的人,这相当于阻止选择一块文本,并使用EDT键盘键入GOLD-8。)我不想更改缩进。

您是否考虑过将描述列移动到另一个缓冲区,为该缓冲区设置所需的文本宽度(:set
textwidth=yournumber
),使用
gq
格式化,然后移回原始位置?

My提供了一个
gq
命令,您可以使用该命令实现以下目的:

我考虑过这一点,不过我必须根据选择的宽度导出textwidth(因为它并不总是一致的)。我希望有一个简单一点的东西,但我可能能够实现自动化。我还希望有一种方法可以做到这一点,而不会有一个新的缓冲区出现和消失在屏幕上。