在没有换行符的情况下,如何在寄存器中捕获vim命令的输出?
这与这个问题有关: 但是,使用在没有换行符的情况下,如何在寄存器中捕获vim命令的输出?,vim,Vim,这与这个问题有关: 但是,使用:redir的问题在于,它会导致输出前面出现3或4个额外的换行符,并且使用替换函数很难删除这些换行符 例如,如果我执行以下操作: :redir @a :pwd :redir END @a的内容由三个空行组成,然后是正常的预期输出 我试着用这样的方式发布流程: :let @b = substitute(@a, '\s*\(.\{-}\)\s*', '\1', '') 但结果是@b与@a具有相同的内容 是否有人知道一种更有效(即工作)的后处理方法,或者替
:redir
的问题在于,它会导致输出前面出现3或4个额外的换行符,并且使用替换函数很难删除这些换行符
例如,如果我执行以下操作:
:redir @a
:pwd
:redir END
@a
的内容由三个空行组成,然后是正常的预期输出
我试着用这样的方式发布流程:
:let @b = substitute(@a, '\s*\(.\{-}\)\s*', '\1', '')
但结果是@b
与@a
具有相同的内容
是否有人知道一种更有效(即工作)的后处理方法,或者替换没有这些额外行的:redir
看见实际上,regexp的选项始终处于启用状态
\n
来匹配LF)\{-}
不会在不匹配任何内容的情况下“放弃”(除了初始换行以外的所有内容都不匹配,因此无法从输入字符串中替换):let @b = substitute(@a,'\_s*\(.\{-}\)\_s*$','\1','')
只考虑删除前导空格和尾随空格可能更简单,而不是匹配中间的所有内容。这可以通过使用带有regexp的
g
substitution修饰符(重复替换)在单个替换中完成,其中一个替换被锚定到字符串的开头(%^
),另一个被锚定到字符串的结尾(%$
)
此regexp用于避免为%^
、+
、|
和%$
添加反斜杠
substitute(@a,'\v%^\_s+|\_s+%$','','g')
如果您只想修剪前导/尾随的换行符(而不是SP、TAB或NL),请将两个出现的
\\u
更改为\n
。是否尝试过:让@b=substitute(@a,'\n',''g')
?我刚刚尝试过。这非常有效!现在我觉得自己很愚蠢=根据文档,substitute()。