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

例如,我会取一个看起来像这样的文本:

name
comment
phone
email

让它看起来像这样

vendor_name
vendor_comment
vendor_phone
vendor_email

现在我要做的是…

Select all 4 row lines of a block by pressing V and then j four times. Indent with >. Go back one letter with h. Go to block visual mode with Ctrlv. Select down four rows by pressing j four times. At this point you have selected a 4x1 visual blocks of whitespace (four rows and one column). Press C. Notice this pretty much indented to the left by one column. Type out a " vendor_" without the quote. Notice the extra space we had to put back. Press Esc. This is one of the very few times I use Esc to get out of insert mode. Ctrlc would only edit the first line. Repeat step 1. Indent the other way with <.

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

但是如果我必须清除,那么是否有一种方法来做我上面所做的而不创建所需的缩进空白?

还有为什么一次编辑多行只能通过退出插入模式与Esc在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 )

to

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..希望现在你能看到这种方法的缺点。我只能选择一列在垂直位置相同的文本。


当前回答

Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line

其他回答

假设你有这个文件:

something

name
comment
phone
email

something else
and more ...

你需要在“name”、“comment”、“phone”和“email”前面添加“vendor_”,而不管它们出现在文件中的哪个位置。

:%s/\<\(name\|comment\|phone\|email\)\>/vendor_\1/gc

c标志将提示您确认。如果你不想要这个提示,你可以去掉它。

我将使用宏来记录我的操作,然后重复它。

把光标放在名字的第一个字母上。 点击qq开始记录到q缓冲区。 按i进入插入模式,输入vector_,然后按Esc退出插入模式。 现在按0返回到行开头。 现在按下j。 现在再次按q停止录制。

现在你有了一个漂亮的宏。

输入3@q来执行宏三次以完成其余的行。

另一种方法是使用。(dot)命令与i结合使用。

将光标移动到想要开始的位置 按我 输入你想要的前缀(例如vendor_) 按esc。 按j向下一行 类型。若要重复上次编辑,请再次自动插入前缀 在j和。

我发现对于少量的添加,这种技术通常比视觉块模式更快,并且有额外的好处,如果你不需要在范围内的每一行插入文本,你可以通过按下额外的j轻松跳过它们。

注意,对于大量的连续添加,块方法或宏可能会更好。

Use Ctrl+V to enter visual block mode
Move Up/Down to select the columns of text in the lines you want to comment.
Then hit Shift+i and type the text you want to insert.
Then hit Esc, wait 1 second and the inserted text will appear on every line

如果整个文件都需要更改,

:1,$s/^/vendor_/

如果只需要更改几行,

转到需要更改的第一行,给出命令

:.,ns/^/vendor_/

将n替换为块中最后一行的行号。

Or,

:.,+ns/^/vendor_/

将n替换为需要更改的行数减去1。