假设我们正在编辑这个完全组成的 JSON 文件:
\n[{\n "id_4f7xg4egb": "<some_random_guid",\n // ... other fields\n}, {\n "id_h34k3": "<another_id>",\n // ... different fields than prev object potentially\n "nested": {\n "id_j3h": "<nested_obj_id>",\n // ... nested obj fields\n }\n},\n// ...\n]\nRun Code Online (Sandbox Code Playgroud)\n它包含 N 个对象(包括嵌套的对象),我们想要替换id附加到字段键本身的字符串替换该值。结果会是这样的:
[{\n "id": "4f7xg4egb",\n // ... other fields\n}, {\n "id": "h34k3",\n // ... different fields than prev object potentially\n "nested": {\n "id": "j3h",\n // ... nested obj fields\n }\n},\n// ...\n]\nRun Code Online (Sandbox Code Playgroud)\n现在,我将在 VSCode 中使用多个游标执行以下操作:
\n使用 VSCode Ctrl +d
\n"id_使用Shift+选择第一个出现的位置\xe2\x86\x92 x4"id_使用Ctrl+选择(并在其上创建光标)剩余 N-1 的每个出现位置d x(N-1)"id_, \xe2\x86\x92(\xe2\x86\x90取消选择), Ctrl+Shift +\xe2\x86\x92_与Backspace"<every_diff_id>") 替换为\xe2\x86\x92x4、Shift+ End、\xe2\x86\x90 x2所以我们讨论的是 5+N+5+2+1+8+3= N+24=o(N)次击键(考虑到这样的事实,例如,该Ctrl键仅计算一次,然后按住其余的 N-1 Ctrl+d命令)。
\n借助 Vim 的力量
\n而且...我的问题是:如何使用 Vim 实现相同的结果(在 =< 操作数,ofc 中)?!我是一个菜鸟,只有一周大的 vimmer,到目前为止我很喜欢它!我一直在使用.基本宏来完成类似的任务,但我不确定解决这个问题的最有效方法是什么:(。我也更喜欢一种不使用插件或涉及添加一些复杂的解决方案映射/函数到我的 .vimrc。毕竟,VSCode 解决方案是普通的 VSCode ;)。
谢谢!
\n通过录制宏并重放 N 次。
例如:
qa/"id_/e<CR>s": "<Esc>f:dt,q2@a
Run Code Online (Sandbox Code Playgroud)
总共 25 次击键。
分解一下:
qa:开始录制宏@a。/"id_/e:搜索花样id_并将光标置于花样末尾。执行<CR>搜索。s:替换光标下的字符(_),启动插入模式。然后用作": "替换文本(产生"id": "...和<Esc>叶子插入模式。f:前进至:后场。dt,: 删除直到逗号(保留它。)q:停止录制宏。2@a:执行宏@a两次。(如果有更多 id 需要替换,请执行更多次。用于999@a最多执行 999 次,或者直到出现错误,以先到者为准。)我同意多个光标非常直观,可能更容易掌握...Vim 宏可能有些抽象,需要您考虑这些操作会对您应用宏的其他位置执行什么操作...
对于这种特殊情况,也许使用:s命令会更容易。但这是 Vim 的一件好事,解决一个问题通常有多种方法,你可以选择你喜欢的一种。