【问题标题】:Replacing alternate line in vi text file with a particular string用特定字符串替换 vi 文本文件中的备用行
【发布时间】:2012-05-27 16:13:43
【问题描述】:

我有一个包含 5 列的文本文件,如果我想用特定的字符串替换第二列中的每一行,如何在 vi 文本编辑器中做到这一点?

eg: 1 CG 54 76 76
    2 CG 45  78 78
    3 CG 48  76 89
    4 CG 49  50 52

如果我想用 CA 替换第 2 行和第 4 行(第 2 列),我该如何在 vi 文本编辑器中执行此操作?

【问题讨论】:

    标签: vi


    【解决方案1】:

    如果您使用 vim,这是一个简单的宏。如果你不确定你是否使用 vim,那么在命令模式下,输入 qq 并检查你是否在底部的状态行中看到 recording。如果是这样,那么您可以使用此宏。

    从第 1 行开始,将宏记录为:qqj0wcwCA[Esc]jq

    这将编辑第 2 行并将您留在第 3 行,现在您在寄存器 q 中有宏。输入 100@q 将寄存器q中的命令执行100次。

    命令详情:

    • 从 1 号线开始
    • qq - 这将开始录制宏,您会在底部的状态行中看到 正在录制
    • j - 移动到下一个(备用)行。
    • 0 - 移动到行首。
    • w - 跳转到下一个单词(第 2 列)
    • cwCA - 将此词更改为 CA
    • Esc 键 - 离开编辑模式。
    • j - 移动到下一行。
    • q - 这会停止录制宏。

    【讨论】:

    • 如何映射和执行这样的宏? (我确定这是我可以用谷歌搜索的东西)
    • 使用 @ 键执行宏,然后是包含宏的寄存器 - 在上面的答案中,我们使用了 q。所以,@q 会执行上面的宏。在 @q 前面加上一个数字 N 以执行宏 N 次,例如:10@q
    • 太棒了。谢谢! (我猜你可能已经输入了,抱歉)
    • 您也可以映射宏,尽管我从来没有充分的理由这样做。 :map :MyMacroName @q 用于寄存器 q 中的宏,如上。要保留这样的映射宏,您需要将宏和映射保留在 vimrc 中。见:stackoverflow.com/questions/2024443/saving-vim-macros
    猜你喜欢
    • 2014-06-21
    • 2021-02-14
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 2023-03-25
    • 2018-02-21
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多