Vim 如何选中往后两个相同词然后批量编辑?

2022-04-19 17:32:41 +08:00
 pluvet

比如我想把前三个 1 替换成 weight,在 vscode ,我会先选中第一个,然后按两次 Ctlr+D 在下一个光标重复选中,然后输入 weight 批量编辑。使用 VIM 如何操作?

[1, 0, 0, 0, 0] [0, 1, 0, 0, 0] [0, 0, 1, 0, 0] [0, 0, 0, 0, 1] [1, 0, 0, 1, 0]

1883 次点击
所在节点    问与答
10 条回复
PyTx
2022-04-19 17:45:45 +08:00
试下 ctrl +v ,方向键往下选择,shift + i ,更改第一行,esc+w 保存
lululau
2022-04-19 17:46:26 +08:00
搜 vim multi cursor
975779964
2022-04-19 17:49:31 +08:00
f1sweight<Esc>;.;.

解释,f1 找到 当前行第一个 1 的字符

s 删除当前字符并进入编辑模式

然后 输入 weight

esc 退出 编辑模式

; 查找当前行 下一个 1 字符

. 重复上一个编辑模式的操作

; 查找当前行 下一个 1 字符

. 重复上一个编辑模式的操作

我只会这种笨办法 ……
pluvet
2022-04-19 17:52:17 +08:00
@PyTx 万一只有一行呢?而且即便分行,要更改的也不在同一列。希望有一个比较通用的办法。

目前自己找出一个方法,但比较繁琐,耗时增加一个数量级:

1. 首先,按 v 进入 Visual 模式
2. 按 `iw` 选中当前词
3. 按 `*` 寻找相同词,光标会跳到下一个词
4. 按 `shift+n`,回到上一个词
5. 退出 Visual 模式
6. 按 ciw 替换光标下的词为新词,按 esc 退出编辑
7. 按 yw 复制光标下的新词
8. 按 `gn` 跳到下一个词
9. 按 `viw` 选中当前词
10. 按 `p` 覆盖
xlcoder166
2022-04-19 17:56:32 +08:00
基于数据量和数据格式有:

1. 2 楼的 vim multi cursor
2. 3 楼的 直接操作
3. 选择性替换
4. 宏
pluvet
2022-04-19 18:15:51 +08:00
multi cursor 不错,不过就得额外装插件了
SmallZheng
2022-04-19 18:26:36 +08:00
搜索,点重复操作。 循环.
ynyounuo
2022-04-19 18:48:13 +08:00
:/1/|s//weight
3@:
ynyounuo
2022-04-19 18:48:31 +08:00
*2@:
DrakeXiang
2022-04-20 12:18:01 +08:00
之前查类似的问题看到的就是搜索替换了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/847947

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX