gpt4 book ai didi

vim - 如何在没有换行符的情况下在寄存器中捕获 vim 命令的输出?

转载 作者:行者123 更新时间:2023-12-04 15:26:01 26 4
gpt4 key购买 nike

这与这个问题有关:
How to redirect ex command output into current buffer or file?

但是,使用 :redir 的问题是因为它会在输出前产生 3 或 4 个额外的换行符,并且使用替换函数似乎很难将其删除。

例如,如果我执行以下操作:

:redir @a  
:pwd
:redir END
@a的内容由三个空行和正常的预期输出组成。

我试图用这样的方式发布过程:
:let @b = substitute(@a, '\s*\(.\{-}\)\s*', '\1', '')

但结果是 @b@a 的内容相同.

有谁知道一种更有效(即工作)的后处理方式,或替代 :redir没有那些多余的线条?

最佳答案

b 寄存器中的值与 a 寄存器中的值没有变化,因为您的正则表达式无法匹配。

  • 您需要使用反斜杠编写分组括号和开头的重复括号。
    :help /magic ;有效地,magic substitute() 的选项始终打开正则表达式。
  • \s only matches SP and TAB (不是LF);但是 \_s does include LF (或者,您可以使用 \n 来匹配 LF)。
  • 您需要 anchor 定表达式的结尾,以便 \{-}不会在不匹配任何内容的情况下“放弃”(除了初始换行符之外的所有内容都不匹配,因此不会从输入字符串中替换)。

  • 这是您替换的修改版本:
    :let @b = substitute(@a,'\_s*\(.\{-}\)\_s*$','\1','')

    考虑删除前导和尾随空格而不是匹配两者之间的所有内容可能会更简单。这可以通过使用 g 在单个替换中完成。带有使用 alternation operator 的正则表达式的替换修饰符(重复替换)其中一个备用 anchor 定到字符串的开头( %^ ),另一个 anchor 定到字符串的末尾( %$ )。
    substitute(@a,'\v%^\_s+|\_s+%$','','g')

    此正则表达式使用 \v 避免必须为 %^ 添加反斜杠, + , | , 和 %$ .

    更改 \_s 的两次出现至 \n如果您只想修剪前导/尾随换行符(而不是 SP、TAB 或 NL)。

    关于vim - 如何在没有换行符的情况下在寄存器中捕获 vim 命令的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8453211/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com