以下是我想要重新格式化的内容:
// before
var name1 = function(){ /* stuff */ }
//after
function name1(){ /* stuff */ }
我使用了vim replace命令:
%s/var\.*\s*\(\w*\)\s*=\s*function/function \1
但是我觉得这个任务有点长(匹配一个var,一个单词,一个=和一个函数)......
你会怎样做得更好?
答案 0 :(得分:1)
我也会使用substitute命令,但略有不同::%s/var\s\+\(\w*\)\s*=\s*\(function\)/\2 \1
。
答案 1 :(得分:1)
这是我能在宏中得到它的最简单的方法:
0diw"fdt dtfw"fP
以下是解释:
0
转到第一行的开头diw
删除"内部"当前的单词(即不是以下 Space ,我们需要它!)"fdt
进入f
缓冲区("功能"也许?!)删除到下一个空格dtf
删除下一个f
字符w
跳转到下一个单词' (这让我们变成了公开的人)"fP
' put'来自光标前的f
缓冲区现在可以快速输入~/.vimrc
:
noremap <F4> 0diw"fdt dtfw"fP
你是黄金。 (或者你想要的任何快捷键,而不是 F4 。
答案 2 :(得分:1)
正如@apsillers所说,你可以捕获function
,所以你不必在substitute命令的替换部分输入它。这产生了这个:
:%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
作为使用替换的替代方法,您可以使用宏或运行普通命令。我更喜欢通过:g
使用全局:norm
和一些常规命令:
:g/=\s*function/norm ^deye3dwe"0p
此命令查找与=\s*function
匹配的所有行并执行normal
命令。我们运行的正常命令是^deye3dwe"0p
,可以这样分解:
^
将开始该行的开头。如果您不关心缩进,请删除^
de
删除单词(var
)并留下以下空格ye
将使用前置空格3dw
将删除3个单词,这些单词将留在f
function
e
"0p
在function
之后粘贴新填充的变量名称。我们必须使用"0
注册,因为未命名的寄存器将被3dw
如需更多帮助,请参阅:
:h /\v
:h /\+
:h :g
:h :norm
:h "0
答案 3 :(得分:0)
@apsillers:将function
放入捕获组并使用\2
%s/var\.*\s*\(\w*\)\s*=\s*\(function\)/\2 \1
@Enermis:使用宏(假设光标位于v
的{{1}}):
var