vim同时编辑多个位置

Dan*_*iel 9 vim

在某些文本编辑器(如e)中,您可以选择多个位置,在键入时,所有选定的位置都将替换为您键入的字符.

例如,假设你有

<tag1 class=""></tag1>
<tag2><tag3 class=""></tag3></tag2>
Run Code Online (Sandbox Code Playgroud)

在e中,您可以选择两个位置(内部引号组),然后开始键入,两个位置将同时更新.在vim中,您可以一次选择几个连接的列然后进行编辑,但我想知道是否有任何方法可以选择多个未排列的位置.

Gre*_*ill 8

以下是我可能编辑这些特定行的方法(有很多方法):

/""<enter>
aText to replace...<esc>
n
.
Run Code Online (Sandbox Code Playgroud)

首先,搜索空引号以将光标放在第一个上.使用"a"(追加)命令,键入要放在引号内的新文本.完成后,使用"n"(下一个)转到下一个实例,然后使用"." (重复上一个命令)再次插入相同的文本.重复"n".根据需要多次.

此方法可以减少前期准备工作,让您立即开始使用,而无需提前识别您可能要添加文本的所有位置.


Joh*_*ane 5

您可能正在寻找块状视觉模式,这将允许一次在几行上插入,删除等.

逐块模式将允许使用一个角中的初始点的列和线进行方形选择,并且当前光标位置定义另一个角的列和线.这与默认的基于行的选择相反.

CTRL-v将使您处于块状可视模式.

如果你有几行如下:

INSERT INTO Users VALUES(1, 'Jim');
INSERT INTO Users VALUES(2, 'Jack');
INSERT INTO Users VALUES(3, 'Joseph');
Run Code Online (Sandbox Code Playgroud)

并希望在每行的id之后插入"0",然后将光标放在第一行中的逗号之后:

INSERT INTO Users VALUES(1,* 'Jim');
Run Code Online (Sandbox Code Playgroud)

用星号表示光标,命令序列为:

CTRL-v  # Put into blockwise visual mode
j       # Down a line
j       # Down a line
CTRL-I  # Captial I for insert
0,      # the text to insert
Esc     # escape
Run Code Online (Sandbox Code Playgroud)

该文本现在应如下所示:

INSERT INTO Users VALUES(1, 0, 'Jim');
INSERT INTO Users VALUES(2, 0, 'Jack');
INSERT INTO Users VALUES(3, 0, 'Joseph');
Run Code Online (Sandbox Code Playgroud)

同样是块状视觉模式,x将删除一个选择,y将它拉出来.

:帮助CTRL-V将提供进一步的文档.

  • CTRL-v的限制是它只做连续的块,如果要编辑的文本没有在列中很好地排列,你就不能使用它! (2认同)

Aym*_*man 2

看看SnippetsEmu。它应该做一些与你需要的非常相似的事情。

它模拟 TextMates 片段。您应该能够重复使用具有相同标记的一个片段,并且编辑会做正确的事情,在您键入时更新所有位置中的相同标记。