【问题标题】:How to transform {{{...}}} to markdown code blocks with sed or vim?如何使用 sed 或 vim 将 {{{...}}} 转换为 markdown 代码块?
【发布时间】:2012-11-08 16:48:54
【问题描述】:

我怎样才能像这样转换 cmets

{{{
abc
def
}}}

降价cmets之类的

    abc
    def

(每行开头4个空格)在vim或sed中?

我尝试了以下,但我没有得到第一行之后的空格:

:%s/{{{\n\(\_.*\)\n}}}/    \1/

【问题讨论】:

    标签: vim replace sed newline multiline


    【解决方案1】:

    使用 vim:

    :g/{{{/,/}}}/le 4|d|/}}}/d
    

    解释:

    • :g/{{{/ 在每一行上运行一个带有{{{ 模式的命令
    • ,/}}}/le 4 从当前行左对齐到结尾 }}}
    • d删除当前行
    • /}}}/d搜索匹配}}}的行并删除

    根据您的缩进设置,使用 > 而不是 le 4 可能是排序器。

    如需更多帮助,请参阅

    :h :g
    :h range
    :h :left
    :h :d
    

    【讨论】:

    • 在这里运行,但您可能不想使用le,因为它会丢失缩进。我不确定如何使用 >:g 范围。
    • 根据文档:当+ex_extra 功能在编译时被禁用时,:left 不可用。这让我相信您的vimtinysmall 版本。有关详细信息,请参阅:h version。你可以通过:echo has('ex_extra')测试ex_extra
    • @DanFitch:使用:> 可能会很棘手,因为它将光标移动到最近移动的文本的底部,因此命令变为:g/{{{/.,/}}}/>|.d|?{{{?d。你是对的:left 会盲目地破坏缩进,但它会强制从行首开始 4 个空格。
    • 这真的很酷,彼得,我将不得不研究它是如何工作的。第一个 d 之前的 . 在做什么?
    • @DanFitch:不错的收获!我忘了删除.。点表示当前行,在这种情况下可以在没有. 的情况下推断。所以命令变成:g/{{{/.,/}}}/>|d|?{{{?d.
    【解决方案2】:

    awk '/{{{/{l=1;next}/}}}/{l=0} l{print"    "$0}' file.txt
    

    或者不那么神秘:

    awk '/{{{/{l=1;next} /}}}/{l=0} l==1{print "    " $0}' file.txt
    

    【讨论】:

      【解决方案3】:

      假设您的文本中没有 \r 对象,您可以在 tr 的帮助下进行转换:

      tr '\n' '\r' \
      | sed 's/{{{/\r{{{/;
             s/}}}/}}}\r/;
             :w;
               s/\r{{{\r}}}//;
               s/{{{\r\([^\r]*\)\r\(.*\)}}}/    \1\r{{{\r\2}}}/;
             tw' \
      | tr '\r' '\n'
      

      请注意,我在代码部分前后多加了一行,否则markdown将无法正确识别代码。

      【讨论】:

      • 也可以!虽然它比其他解决方案要长一些。
      【解决方案4】:
      sed -i~ '/^{{{/,/^}}}/{/^{{{\|}}}/d;s;\(^.*$\);    \1;}' inFile
      

      【讨论】:

      • @kirdie:关闭 ' 丢失。
      【解决方案5】:

      这可能对你有用(GNU sed):

      sed '/^{{{/,/^}}}/{//d;s/^/    /}' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-21
        • 1970-01-01
        • 2020-07-16
        • 1970-01-01
        相关资源
        最近更新 更多