gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 19:36:31 25 4
gpt4 key购买 nike

这是我想要做的重新格式化:

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

我使用了 vim 替换命令:

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

但我发现这个任务有点长(匹配 var、单词、= 和函数)...

你会如何做得更好?

最佳答案

正如 @apsillers 所说,您可以捕获 function ,这样您就不必在替换命令的替换部分中键入它。这会产生这样的结果:

:%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 使用全局、:g 和一些普通命令:

:g/=\s*function/norm ^deye3dwe"0p

此命令查找与 =\s*function 匹配的所有行并执行正常 命令。我们运行的正常命令是^deye3dwe"0p,可以像这样分解:

  • ^ 将从行的开头开始。如果您不关心缩进,请删除 ^
  • de 删除单词 (var) 并留下后面的空格
  • ye 将提取或复制带有前缀空格的变量名称
  • 3dw 将删除 3 个单词,这些单词将留在 function 中的 f
  • 通过e移动到函数末尾
  • "0p 将新提取的变量名称粘贴到 function 之后。我们必须使用 "0 寄存器,因为未命名的寄存器将被3dw

更多帮助请参见:

:h /\v
:h /\+
:h :g
:h :norm
:h "0

关于使用 vim 替换重新格式化 Javascript 函数表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25789014/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com