【已解决】批量修改一篇笔记内所有代码块的编程语言

不知道有没有批量修改代码块编程语言的方法或者插件

经常从网站剪藏的文章,很多代码块无法识别代码块,要一个一个修改
现实 情况是一般同一篇文章中的代码语言一般是一致的,要是更批量修改就好了

尝试的方法

如果使用 quickAdd 插件适合自己编写的笔记,新增代码块,添加快捷键就好,
但是不能实现批量修改
ob 有不支持正则表达式的批量替换
【增强编辑】插件也是只能在新增笔记时,快速添加,无法快速修改

扩展想法

如果在 meta 信息中设置了编程语言,希望在插入代码块时能自动加上对应的语言
比如我设置笔记的 meta 中添加了 language: java
每次我在调用命令插入 或者手动插入回车后
希望自动变成为```java

且能够批量修改代码中的代码块语言

2 个赞

打开vim模式,就能用正则表达式替换了

1 个赞

可以用 templater 插件实现

<%*
let r = /```([\s\S]*?)```/mg
let content = tp.file.content
let la = [  "autohotkey", "bash", "basic", "batch", "c", "csharp", "cpp", "css", "docker", "fortran", "golang", "haskell", "html", "ini", "java", "javascript", "json", "kotlin", "less", "lua", "makefile", "markdown", "matlab", "nginx", "objectivec", "perl", "php", "plaintext", "powershell", "python", "r", "ruby", "rust", "sass", "scala", "scheme", "shell", "sql", "swift", "typescript", "vim", "wiki", "yaml" ]
let l = await tp.system.suggester(la,la,'Language')
if(!l) return
let b = content.match(r)
for(let i of b)
	content = content.replace(i,'```'+l+'\n'+i.split('\n').slice(1).join('\n'))
await app.vault.modify(tp.file.find_tfile(tp.file.path(1)),content)
-%>
3 个赞

感谢(^:pray:^)你提供的代码和思路。让我打开新世界的大门

感谢分享,简单测试,修改正则为 /```.*\n.*?\S[\s\S]*?```$/gm,排除一些意外状况。

测试文本:

```
```

```

```

```行内```
1 个赞

感谢代码分享,今天刚好需要用,不过我用QuickAdd比较多,结合#5,改成了QuickAdd Macro版:

module.exports = async (params) => {
  const file = await this.app.workspace.getActiveFile();
  let content = await this.app.vault.read(file);

  // 正则公式
  let reg = /```.*\n.*?\S[\s\S]*?```$/gm;

  let choices = ["autohotkey", "bash", "basic", "batch", "c", "csharp", "cpp", "css", "docker", "fortran", "golang", "haskell", "html", "ini", "java", "javascript", "json", "kotlin", "less", "lua", "makefile", "markdown", "matlab", "nginx", "objectivec", "perl", "php", "plaintext", "powershell", "python", "r", "ruby", "rust", "sass", "scala", "scheme", "shell", "sql", "swift", "typescript", "vim", "wiki", "yaml"];

  let choice = await params.quickAddApi.suggester(choices, choices);
  if (!choice) return;
  let b = content.match(reg);
  for (let i of b) {
    content = content.replace(i, '```' + choice + '\n' + i.split('\n').slice(1).join('\n'));
  }
  await app.vault.modify(app.vault.getAbstractFileByPath(file.path), content);
};
1 个赞