我正在使用大型数据集,并且多行需要更改某个参数。像这样的东西:
funct(35, circle, square, triangle);
funct(42, sphere, cube, prism);
funct(74, disc, rhombus, rectangle);
需要成为:
funct(35, circle, my_square, other_triangle);
funct(42, sphere, my_cube, other_prism);
funct(74, disc, my_rhombus, other_rectangle);
我怎么能这样做?
答案 0 :(得分:1)
另一种vim方法。以可视方式选择要更改的所有行,然后键入:
:norm 2Wimy_<C-v><esc>Wiother_
请注意,<C-v>
和<esc>
为ctrl-v
和esc
,不是文字。或者,如果您想在每一行上执行此操作,请执行以下操作:
:%norm 2Wimy_<C-v><esc>Wiother_
您也可以在特定范围内的线上执行此操作。例如,第3-100行:
:3,100norm 2Wimy_<C-v><esc>Wiother_
答案 1 :(得分:1)
我会谈到emacs因为我喜欢emacs!
在提示中输入命令:Alt + x
您可以安装multiple-cursors
包。它与SublimeText中的Ctrl+D
类似。 Here is the doc
您可以使用内置包query-replace
。它将用另一个替换你想要的字符串/正则表达式。 Documentation。
这个的优点是你可以选择是否要更换每个出现。
内置包replace-string
和replace-regexp
将使用字符串或其他模式替换您选择的模式。
replace-regexp
如果您只想重命名某些变量,multiples-cursors
,replace-string
和query-replace
都可以。
如果你想要替换庞大的数据集中的模式,replace-regexp
很有趣,但没有什么比脚本(bash,js,python ......)更好。
有关于sed
和awk
bash命令(sed & awk, 2nd Edition)的精彩书籍
答案 2 :(得分:0)
使用Vim:
:%s/\vfunct\(([^,]+,\s*){2}\zs/my_/
上面的2
是您要跳过的参数数量。
catch:如果某些参数本身是函数调用,则会中断。有插件可以让你应对这种情况。
答案 3 :(得分:0)
使用vim的正则表达式引擎:
:%s/\v(%(\s*\w+,){PARAMETER_NUMBER})(\s+)(\w+)/\1\2NEW_PREFIX\3
将PARAMETER_NUMBER
替换为您要更改的参数的索引(从0开始),并使用您要添加的前缀NEW_PREFIX
替换:%s/\v(%(\s*\w+,){2})(\s+)(\w+)/\1\2my_\3
。
例如,运行:
funct(35, circle, my_square, triangle);
funct(42, sphere, my_cube, prism);
funct(74, disc, my_rhombus, rectangle);
将您的示例代码更改为:
\1
您可以通过更改命令末尾的反向引用(\2
,\3
和\1
)的顺序来修改此设置以通过其他方式对其进行自定义。 \2
指的是您正在更改的参数之前的参数,\3
指的是您正在更改参数之前的空格,@Resource(lookup = "java:jboss/ee/concurrency/executor/customExecutor")
private ManagedExecutorService es_;
指的是参数本身。 / p>
答案 4 :(得分:0)
我知道multiple-cursors
,他们看起来很酷,但我一直懒得去学习它们。这是一个仅使用Emacs内置的解决方案。
(defun align-regexp-comma (beginning end)
"Align columns using comma as a delimiter."
(interactive "*r")
(align-regexp beginning end
",\\(\\s-*\\)" 1 1 t))
(global-set-key (kbd "C-<return>") 'cua-rectangle-mark-mode)
然后选择您感兴趣的区域,执行M-x align-regexp-comma
,这应该对齐参数,然后您可以使用C-<return>
启动矩形标记,这样您就可以一次编辑多行。如果您想删除对齐空格,请使用query-regexp-replace
(M-%
)和“,+” - &gt; “,”。