小编典典

Vim:在多行中插入相同的字符

all

有时我想跨多行编辑某个视觉文本块。

例如,我会采用如下所示的文本:

name
comment
phone
email

让它看起来像这样

vendor_name
vendor_comment
vendor_phone
vendor_email

目前我现在做的方式是......

  1. V按,然后按j四次选择块的所有 4 行。
  2. 缩进>.
  3. 用 回退一封信h
  4. 使用 进入阻止视觉模式Ctrl``v
  5. j四次向下选择四行。此时您已经选择了一个 4x1 的可视空白块(四行一列)。
  6. C。请注意,这几乎向左缩进了一列。
  7. 键入" vendor_"不带引号的 a。注意我们不得不放回的额外空间。
  8. EscEsc这是我用来退出插入模式的极少数情况之一。Ctrl``c只会编辑第一行。
  9. 重复步骤 1。
  10. 用 . 以另一种方式缩进<

如果单词前至少有一列空格,我不需要缩进。如果我不必用 . 清除可视块,我就不需要空格c

但是,如果我必须清除,那么有没有办法在不使用缩进创建所需空白的情况下执行我上面执行的操作?

另外,为什么一次编辑多行只能通过退出插入模式来工作Escover Ctrl``c


这是一个更复杂的例子:

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.。希望现在您可以看到这种方法的缺点。我仅限于选择一列
在垂直位置上都相同 的文本。


阅读 125

收藏
2022-03-24

共1个答案

小编典典

  1. 将光标移动到nin name
  2. 进入视觉块模式 ( Ctrl``v)。
  3. j三下(或3j)可向下跳 3 行;G(大写 g)跳到最后一行
  4. I(大写 i)。
  5. 输入vendor_. 注意:它只会更新 _ 第一_ 行的屏幕 - 直到Esc按下 (6.),此时所有行都将更新。
  6. Esc

演示该方法的迷你截屏视频

I必须使用大写而不是小写i,因为小写i被解释为文本对象的开头,这本身就非常有用,例如在标签块 (
it) 内进行选择:

显示“it”文本对象有用性的迷你截屏视频

2022-03-24