在Vim中,我如何有效地在多行中插入相同的字符?
有时我想跨多行编辑某个可视文本块。
例如,我会看到如下所示的文本:
name
comment
phone
email
让它像这样流淌
vendor_name
vendor_comment
vendor_phone
vendor_email
目前我现在要做的方式是......
" vendor_"
不含引号。 注意我们必须放回的额外空间。 如果在单词前至少有一列空白,我不需要缩进。 如果我不需要用c清除视觉块,我不需要空白。
但是如果我必须清楚,那么是否有办法做到我在上面执行的操作,而不用缩进来创建所需的空格?
此外,为什么一次编辑多行只能通过使用esc over ctrlc退出插入模式?
编辑:
这是一个更复杂的例子
name = models.CharField( max_length = 135 )
comment = models.TextField( blank = True )
phone = models.CharField( max_length = 135, blank = True )
email = models.EmailField( blank = True )
至
name = models.whatever.CharField( max_length = 135 )
comment = models.whatever.TextField( blank = True )
phone = models.whatever.CharField( max_length = 135, blank = True )
email = models.whatever.EmailField( blank = True )
在这个例子中,我会执行垂直视觉模块.
,然后在插入模式下重新插入,即键入.whatever.
。 希望现在你可以看到这种方法的缺点。 我仅限于选择垂直位置上相同的文本列。
n
的name
。 I
(首都)。 vendor_
。 必须使用大写字母I
而不是小写字母i
因为小写字母i
被解释为文本对象的开始,这对于自己而言非常有用,例如,用于在标签块( it
)内选择内部:
另一种方法是使用。 ( dot
)命令与I相结合。
vendor_
) 我发现这种技术通常比用于少量添加的可视块模式更快,并且还具有额外的好处,如果您不需要在范围内的每一行上插入文本,则可以通过按下多余的j来轻松地跳过它们。
请注意,对于大量连续添加,块方法或宏可能会更好。
我会用宏来记录我的动作,然后重复它。
qq
开始记录到q
缓冲区。 i
进入插入模式,输入vector_
,然后按ESC
退出插入模式。 0
返回到行首。 j
去。 q
停止录制。 你现在有一个不错的宏。
键入3@q
来执行你的宏3次来完成其余的行。
上一篇: In Vim how do I effectively insert the same characters across multiple lines?
下一篇: Vim: faster way to select blocks of text in visual mode