【问题标题】:Correcting Wrong Marker Folding in VIM更正 VIM 中错误的标记折叠
【发布时间】:2010-10-22 10:42:38
【问题描述】:

我错误地将标记折叠到我的 .vimrc:

{{{8 #CS
something..
}}}8  
{{{9 #Math
...
}}}9  
... many more!

我需要将格式切换为“#SOMETHING {{{NUMBER”,例如:

#CS {{{8 
something..
}}}8  
#Math {{{9 
...
}}}9  
... many more!

以下代码有什么问题:

:%s$/({{{\d/) /(#[:alpha:]/)$\2 \1$g

[解决方案]

%s$\({{{\d\) \(#[[:alnum:]]*\)$\2 \1$g

【问题讨论】:

    标签: regex vim folding


    【解决方案1】:

    :%s/{{{\(\d\) \(.*\)/\2 {{{\1/g

    它有效,但在你的正则表达式中,我不明白你为什么在 s 之后得到一个 $。

    【讨论】:

    • s 后面的符号无关紧要,除非你需要这个符号。例如,我通常使用#,但现在比赛中有一个#-符号,所以我不得不使用其他一些。选择任何适合你的东西。
    • 忠告:使用 .* 会导致混乱的回溯。就我而言,我需要非常精确以避免回溯。
    • vim 允许您对:s 使用任意分隔符,因此:s$a$b$g:s/a/b/g 相同。长话短说,当正斜杠出现在模式或替换文本中时,它可以让您避免转义。
    【解决方案2】:

    您忘记转义括号,POSIX 字符类仅在字符类[[:alpha:]] 内有效:

    :%s$/\({{{\d/\) /\(#[[:alpha:]]/\)$\2 \1$g
    

    但是请注意,您的示例文本不包含任何斜线 - 这就是您的示例文本的实际样子吗?

    上面的正则表达式改变了这个

    /{{{8/ /#A/
    

    到这里

    #A/ {{{8/
    

    【讨论】:

    • 谢谢。我解决了这个问题。显然,我对初始正则表达式过于粗心。这些错误在“我的解决方案”中得到修复。您的正则表达式与我几分钟前写的帖子非常相似。
    • 感谢您详细说明 POSIX 字符类。
    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2014-01-12
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多