【问题标题】:in vim, how to append/insert text with argdo?在 vim 中,如何使用 argdo 追加/插入文本?
【发布时间】:2010-11-05 05:41:42
【问题描述】:

有 ":a" 命令,但它是多行的,并且 argdo 会再次要求您输入每个文件的文本。

文档中提到了全局命令 (g/pat/command),它将使用 ":a" 的替代版本,该版本以换行符而不是 "." 结尾。在一行上(您可以通过使用“\”转义来包含换行符)。但我无法让它工作。

我见过的唯一方法是首先将要添加的文本拉到一个命名寄存器中,然后使用:

:argdo put x                 " where x is the register

我希望有类似的东西

:argdo append myTextHere

【问题讨论】:

    标签: vim insert append vi


    【解决方案1】:

    在第 10 行之后追加文本:

    :argdo call append(10, "hello world")
    

    将文本附加到第 10 行:

    :argdo call setline(10, getline(10)."textappended")
    

    【讨论】:

    • 谢谢,这似乎可行。看起来需要切换到不同的级别才能执行此操作(使用您的“呼叫”或布赖恩的“正常”)
    【解决方案2】:

    我不清楚您尝试将文本插入缓冲区的哪个位置。如果你想在当前行之后:

    :argdo exe 'normal osometext'
    

    插入带有换行符的文本:

    :argdo exe "normal osometext\<CR>anewline"
    

    【讨论】:

    • 嘿,这很酷。我以前见过“正常”,但没用过。顺便说一句,我发现这也有效::argdo normal osometext
    • 为了清楚起见,我应该回答您的要求:有时我想将它插入每个文件的同一行(例如第 2 行);有时在某种模式之后。我可能不想就当前行执行此操作,因为它在不同文件中可能会有所不同。但我认为你的方法很容易适应这一点,通过在插入之前转到一行或搜索一个模式。
    • 这很漂亮,我喜欢这个!例如 :argdo exe 'normal zR' 展开所有选项卡。
    【解决方案3】:

    在 vim 中拉取文本会将其放入默认缓冲区,即"。您可以在插入模式下粘贴该缓冲区,例如键入&lt;C-R&gt;"。所以你只需要argdo put "

    【讨论】:

    • 谢谢,我希望得到一些不涉及设置寄存器的东西。类似: :argdo append myTextHere 我会澄清这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2011-06-26
    • 2011-12-11
    • 2016-11-14
    相关资源
    最近更新 更多