Vim: 如何在文件右侧插入一列

Vim: How to insert a column on the right side of a file

我有一个这样的文件,'¬'代表一个换行符。

aaaaaa¬
bb¬
cccccccc¬
ddddd¬

我知道我可以在可视块模式的左侧插入一列并更改它 对此,

eaaaaaa¬
ebb¬
ecccccccc¬
eddddd¬

但是,有什么简单的方法可以在任意指定列的右侧插入一列,使其看起来像这样吗?谢谢

aaaaaa              e¬
bb                  e¬
cccccccc            e¬
ddddd               e¬

我的解决方法如下:

  1. 在所有行的末尾添加足够的空格以允许稍后使用可视块模式:

    • 20A <ESC>
    • j.j.j. ...
  2. 使用可视块模式在空格内插入列

  3. 再次删除尾随空格(:s/\s*$//)

这是我能想到的最简单的方法:

gg                  " move the cursor to line 1
A          <Esc>    " append the desired number of spaces and leave insert mode
<C-v>               " start visual-block mode
G                   " expand the selection to the last line
re                  " replace the content of the visual selection with e

这需要 :set virtualedit=block:set nostartofline。参见 :help 'virtualedit':help 'startofline'

一个不错的方法是:

:%norm A e 将 space 后跟 'e' 附加到文件中的每一行 (按照您的符号,其中 ¬ 表示换行符):

aaaaaa e¬
bb e¬
cccccccc e¬
ddddd e¬

:%!column -t 将通过调用外部程序进行过滤使其全部对齐 文件内容:

aaaaaa    e¬
bb        e¬
cccccccc  e¬
ddddd     e¬

:%norm i 会将 的列向右移动更多,你可以这样做 (即对于每一行,走到最后,并在 e 之前插入 N spaces)到 插入 20 个额外的 spaces:

aaaaaa                       e¬
bb                           e¬
cccccccc                     e¬
ddddd                        e¬

如果最后一列的宽度超过一个字符,您可以调整上面的内容 命令如 :%norm $b20i (移动 'back' 到单词的开头 最后一列)。

如果你只想对文件的某些行执行上述操作,你可以简单地 在视觉上 select 命中 : 之前的那些行并省略 %.