Javascript函数表达式使用vim替换重新格式化

时间:2014-09-11 13:40:32

标签: javascript vim replace

以下是我想要重新格式化的内容:

// before
var name1 = function(){ /* stuff */ }
//after
function name1(){ /* stuff */ }

我使用了vim replace命令:

%s/var\.*\s*\(\w*\)\s*=\s*function/function \1

但是我觉得这个任务有点长(匹配一个var,一个单词,一个=和一个函数)......

你会怎样做得更好?

4 个答案:

答案 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
  • 移至功能结束
  • "0pfunction之后粘贴新填充的变量名称。我们必须使用"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