[英]Javascript function expression reformatting with vim replace
这是我想做的重新格式化:
// before
var name1 = function(){ /* stuff */ }
//after
function name1(){ /* stuff */ }
我使用了vim replace命令:
%s/var\.*\s*\(\w*\)\s*=\s*function/function \1
但是我发现它对于任务来说有点长(匹配一个var,一个单词,一个=和一个函数)...
您将如何更好地做到这一点?
我也将使用替代命令,但略有不同:: :%s/var\\s\\+\\(\\w*\\)\\s*=\\s*\\(function\\)/\\2 \\1
。
这是我可以在宏中获得的最巧妙的方法:
0diw"fdt dtfw"fP
解释如下:
0
转到行首 diw
删除当前单词的“内部”(即不是以下空格 ,我们将需要它!) "fdt
放入f
缓冲区(也许用于“功能”?!)删除到下一个空格 dtf
删除最多下一个f
字符 w
跳到下一个“单词”(这使我们进入开放式的括号) "fP
'从光标前的f
缓冲区中放入' 现在快速进入~/.vimrc
:
noremap <F4> 0diw"fdt dtfw"fP
而你是黄金。 (或者您想要的任何快捷键,而不是F4 。
正如@apsillers所说,您可以捕获function
,因此您不必在replace命令的替换部分中键入它。 这产生了:
:%s/var\.*\s*\(\w*\)\s*=\s*\(function\)/\2 \1
但是,通过使用\\v
或非常魔术来减少转义次数,我们可以做得更好。 这样产生:
:%s/\vvar.*\s*(\w*)\s*=\s*(function)/\2 \1
但是,我们仍然存在一些问题:
\\s+
可以匹配时为什么要匹配.*
\\w*
还将匹配无效的空字符串,因此请使用\\w+
现在我们有:
:%s/\vvar\s+(\w+)\s*=\s*(function)/\2 \1
作为使用替代方法的替代方法,您可能希望使用宏或运行常规命令。 我更喜欢通过:norm
使用global, :g
和一些常规命令:
:g/=\s*function/norm ^deye3dwe"0p
该命令查找与=\\s*function
匹配的所有行并执行normal
命令。 我们运行的常规命令是^deye3dwe"0p
,可以将其分解如下:
^
将开始该行的开头。 如果您不关心缩进,请删除^
de
删除单词( var
)并保留以下空格 ye
将拉动或复制带前置空格的变量名称 3dw
将删除3个单词,这将使我们在function
上处于f
e
移至功能末尾 "0p
在function
后粘贴新粘贴的变量名。我们必须使用"0
寄存器,因为未命名的寄存器将被3dw
破坏 有关更多帮助,请参见:
:h /\v
:h /\+
:h :g
:h :norm
:h "0
@apsillers:将function
放入捕获组并用\\2
引用
%s/var\.*\s*\(\w*\)\s*=\s*\(function\)/\2 \1
@Enermis:带有宏(假设光标位于var
的v
上):
dwyef(i ^[pbbd0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.