首页 > 解决方案 > 每当删除一行时,在 vim 中记录行号

问题描述

我有一个应用程序可以生成一个包含数千行的 txt 文件。我必须通过文件手动删除一些行(使用vim)。但是,如果需要更改格式,我可能需要再次生成相同的文件。这将使我再次浏览文件以删除相同的行。

避免重复手动删除的解决方案是,当我删除一行时,vim 会以某种方式记录行号。然后我可以使用一些脚本来删除这些行。是否有可能在 vim 中获得这种行为?

否则,是否有任何其他编辑器可以获得这种行为?我必须删除很多行,手动记录每个行号对我来说是不可行的。

标签: vimeditor

解决方案


正如phdwxz所建议的,我能够使用git-diff该文件来提取已删除的行,方法是使用节点包gitdiff-parser来解析差异。

const gitDiffParser = require('gitdiff-parser')
const { exec } = require("child_process");

let p = new Promise( (res,rej) => {
    exec("git diff -U0 file.txt", (error, stdout) => {
        res(stdout)
    });
});
p.then(s=>{
    diff = gitDiffParser.parse(s);
    diff[0].hunks.forEach(element => {
        console.log(`start: ${element.oldStart}, end: ${element.oldStart + element.oldLines - 1}`)
    });
})

另一种解决方案或说黑客是在文件的每一行中附加行号,并在删除所需的行后提取未删除的行号。


推荐阅读