【问题标题】:vim - delete everything between tab charactersvim - 删除制表符之间的所有内容
【发布时间】:2011-03-04 15:18:32
【问题描述】:

我有一个包含制表符分隔数据的文件。我需要删除 2 列。那么,我可以使用什么命令来删除从当前选项卡到下一个选项卡的所有内容?

【问题讨论】:

    标签: vim


    【解决方案1】:

    删除第 4 列和第 5 列:

    :%s/^\(.\{-}\t\)\{3}\zs.\{-}\t.\{-}\t//
    

    解释:

    ^  => start of line
    
    .\{−} => as few characters as possible
    \( .\{-}\t \)\{3} => three times as few characters as possible followed with a tab
    
    \zs => start of match
    

    使用\v 开关可能更清楚:

    :%s/\v^(.{-}\t){3}\zs.{-}\t.{-}\t//
    

    【讨论】:

      【解决方案2】:

      我认为 shift+ctrl+v 就是你要找的。​​p>

      http://jvi.sourceforge.net/javahelpset/jvi-vis_block.html

      【讨论】:

        【解决方案3】:

        这必须在 vim 中完成吗?如果你有一个 unix 命令行,我会选择旧的 cut 命令。例如,以下将保留第一列,以及第四列之后的所有内容,包括 & (丢弃 2 和 3)

        cat filename | cut -d"\t" -f1,4- > outputfile
        

        【讨论】:

        • 这是一个有用的答案,尽管在我的情况下,我只是更改了一些行,所以它不起作用。
        • @David Oneil:您可以通过管道将一组选定的行传递给外部命令。例如,:4,10!cut -d"\t" -f1,4- 将通过 cut 命令仅通过管道传输第 4 到 10 行。
        • @rampion: 有没有办法说“从第 10 行开始到最后”?
        • @David Oneil :10,$!cut -d"\t" -f1,4- 会给你第 10 行到最后 ($)
        【解决方案4】:

        虽然您可以使用正则表达式,但最好使用简单的ft 普通命令:当您位于要删除的第一列的第一个字符时,d2f<Tab> 将删除这一列和下一列除非一列可以包含换行符。如果可以,那么d2/<Tab>/e<CR>(或d2/\t/e<CR>)会做你想做的事。要将其扩展到其他行,请使用宏:qaqqa01f<Tab>d2t<Tab>j@aq@a:

        1. qaq:清除a 寄存器(开始录制将存储在a 寄存器中的宏,然后在键入其他内容之前立即停止录制);
        2. qa:开始在寄存器a中录制宏;
        3. 0: 跳到行首;
        4. 1f<Tab>:跳转到下一个标签。 1 可以在这里省略。如果要删除第一列,则省略整个动作;
        5. d2t<Tab>:删除到第二个下一个标签;
        6. j:移到下一行;
        7. @a:运行存储在寄存器a 中的宏。此时它是空的(因为它在第一项中被清除),所以实际上什么也没做;
        8. q:停止录制宏;
        9. @a:运行存储在寄存器a 中的宏。它包含项目 3.-7。在第 7 项中,它将自行运行。

        【讨论】:

        • 耶宏是要走的路。
        【解决方案5】:
        :%s:\t[^\t]\+\t:\t\t:
        

        这会删除两个选项卡之间的所有内容。

        HTH

        【讨论】:

        • 我是否正确假设这会留下列两侧的选项卡?
        • 是的,因为问题是:删除从当前标签到下一个标签的所有内容。
        猜你喜欢
        • 2017-04-16
        • 2012-12-03
        • 2016-05-11
        • 2018-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多