很难找到适合我的问题的标题。

我知道要在文本块的前面插入:

Ctrl-v选择要键入文本的行ESC

现在,我想这样做,但也可以替换块选择中的一部分。目前,我正在执行两项操作

Ctrl-v select block x返回开始

然后按照我上面提到的顺序进行操作。

是有没有一种方法可以只选择一次(Ctrl-v)块来组合这两个操作?

这是一个小例子:

我想转换以下块

1  text
2  text
3  text
4  text
5  text


进入

new text 
new text 
new text 
new text 
new text


仅执行一次“操作”。

评论

我不是100%知道您想要什么,也许一个真实的例子会有所帮助(您所拥有的与您想要的)。您知道gv吗?它会重新选择最后的视觉选择,可能会对您有所帮助。

#1 楼

在选择块而不是x后输入c将删除选择块中的文本,并将进入插入模式。键入内容并退出插入模式后,您应该在每行上进行相同的更改。

尝试

Ctrl-v-选择块-c-插入任何内容- -Esc

#2 楼

    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1


将上面三个相同的正楷写成一排。
^V选择上面的正楷,由于以下原因,我无法将所有字母更改为A长度不相等的线。前面的印刷体字母与
:s/\%V1/T/g一起使用效果很好“先前的印刷体字母是由'1's制成的T。将/T/更改为任何字母。

但是选择上面显示的最后一个印刷体字母只会改变所有'1'到'A'到A *的点,其余部分保持不变。

*最短的线。

使所有线的长度与我填充的相同
(我是vim的新手,所以我确定可以编写一个更好的脚本。)

注意:A的峰值从第2行开始。 >
let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor


此后,:s/\%V1/T/g按照该行最后一个印刷体字母上的说明工作。

PS我读到上面的execute行应该没有点,但对我不起作用。

评论


执行行,移至印刷体字母的第i行的开头,并在行末添加b空格。 “ b”是当前行和最长行之间的长度差。

–罗恩
20-2-24在14:38