vim同时编辑多个位置

时间:2009-09-05 20:58:02

标签: vim

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

例如,假设你有

<tag1 class=""></tag1>
<tag2><tag3 class=""></tag3></tag2>

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

6 个答案:

答案 0 :(得分:8)

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

/""<enter>
aText to replace...<esc>
n
.

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

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

答案 1 :(得分:5)

您可能正在寻找块状视觉模式,这样可以同时在多行上插入,删除等。

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

CTRL-v将使您处于块状视觉模式。

如果你有几行这样的话:

INSERT INTO Users VALUES(1, 'Jim');
INSERT INTO Users VALUES(2, 'Jack');
INSERT INTO Users VALUES(3, 'Joseph');

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

INSERT INTO Users VALUES(1,* 'Jim');

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

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

现在的文字应如下:

INSERT INTO Users VALUES(1, 0, 'Jim');
INSERT INTO Users VALUES(2, 0, 'Jack');
INSERT INTO Users VALUES(3, 0, 'Joseph');

同样是块状视觉模式,x将删除一个选择,y会将其拉出。

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

答案 2 :(得分:2)

对于你的例子,我会使用替换:

:%s/class=""/class="something"/g

答案 3 :(得分:2)

看看SnippetsEmu。它应该做一些非常类似于你需要的东西。

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

答案 4 :(得分:0)

我也在寻找类似的东西,更具体地来说是ST2的一个非常有用的功能,你按CTRL + D选择下一个匹配项,然后只需输入它就替换两个匹配项。

答案 5 :(得分:0)

试试这个插件。只需按CTRL + N多次,即可选择多次出现

https://github.com/terryma/vim-multiple-cursors