有了Vim,我如何用JavaScript函数参数正确地 Package 代码?

mpbci0fu  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(69)

我想轻松地将代码 Package 在参数中。例如:
我希望这是在console.log() Package 后:

console.log(1+1);

字符串
我试过使用Surround Vim,但它是用于HTML的,并不真正适合JavaScript,因为它不会移动 Package 的对象:
V用于选择整行。S用于输入

console.log(1 + 1;)


你知道更好的方法或Vim插件吗?
此链接不适用于我的特定案例:Wrapping a code block around code in VIM
我正在学习Vim 9(在终端中)。我将重新学习编程(使用JS,很快会学习PHP)。

aor9mmx1

aor9mmx11#

V让你进入 visual-line 模式。如果你不想操作整行,那么使用它就没有意义了。
在这种情况下,您应该使用普通视觉模式,使用v和适当的运动:

vt;            " visually select till semicolon
S              " trigger Surround
f              " enter "function" sub-mode
console.log    " type name of function
<CR>           " press enter

字符串
或者你可以完全绕过视觉模式:

yst;           " surround till semicolon
f              " enter "function" sub-mode
console.log    " type name of function
<CR>           " press enter


参见:help ys(假设Surround安装正确)、:help visual-mode:help t和一般的:help navigation
FWIW,这是你在没有 * Surround的情况下如何做到的:

ct;            " change till semicolon
console.log(   " insert function name and opening parenthesis
<C-r>"         " insert changed text
)              " insert closing parenthesis
<Esc>          " leave insert mode


参见:help c:help i_ctrl-r

wooyq4lh

wooyq4lh2#

基于你的问题“你知道更好的方法吗?"
我只想

Iconsole.log(<Esc>$i)<Esc>

字符串
在行首插入“console.log(“,跳到行尾并在分号前插入右括号。只是文本编辑。
从技术上讲,这是 * 两个 * 插入,所以你必须按uu来撤销它们。这是一个警告,我很乐意忽略它。
一种稍微复杂一点的方法(只有当您想同时在多行上操作时才值得使用)是像这样使用:substitute命令

:[range]s/\s*\zs.*\ze;/console.log(&)/


其中[range]是要操作的行(仅保留当前行)。
我们的实际匹配是 anything.*,分别包含在\zs\ze中,以标记匹配的开始和结束。外部的所有内容都不会被捕获,即前导空格(如果有的话)和尾随分号。
这被替换为“console.log()”,并在括号中插入了我们捕获的匹配&
请参阅:help substitute:help /\zs:help s/\&

相关问题