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

gpa*_*nda 2 vim

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

aaaaaa¬
bb¬
cccccccc¬
ddddd¬
Run Code Online (Sandbox Code Playgroud)

我知道我可以在可视块模式下在左侧插入一列并将其更改为此,

eaaaaaa¬
ebb¬
ecccccccc¬
eddddd¬
Run Code Online (Sandbox Code Playgroud)

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

aaaaaa              e¬
bb                  e¬
cccccccc            e¬
ddddd               e¬
Run Code Online (Sandbox Code Playgroud)

rom*_*inl 6

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

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
Run Code Online (Sandbox Code Playgroud)

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


mat*_*ttb 5

一个不错的方法是:

:%norm A e将一个空格后跟一个“e”附加到文件中的每一行(按照您的符号¬表示换行符):

aaaaaa e¬
bb e¬
cccccccc e¬
ddddd e¬
Run Code Online (Sandbox Code Playgroud)

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

aaaaaa    e¬
bb        e¬
cccccccc  e¬
ddddd     e¬
Run Code Online (Sandbox Code Playgroud)

:%norm $20i 会将more的列向右移动,您可以这样做(即对于每一行,转到末尾,并N在 e 之前插入空格)插入 20 个额外的空格:

aaaaaa                       e¬
bb                           e¬
cccccccc                     e¬
ddddd                        e¬
Run Code Online (Sandbox Code Playgroud)

如果最后一列的宽度超过一个字符,您可以调整上述命令,例如:%norm $b20i (将“返回”到最后一列中单词的开头)。

如果您只想在文件的某些行上执行上述操作,您可以在点击之前简单地直观地选择这些行:并省略%.