用Emacs反转兄弟姐妹的html元素

时间:2016-04-06 19:26:38

标签: emacs

我需要重新排序(反向)的div的长列表

我需要对此进行转换(仅为了清晰起见才添加编号标题):

DOTALL

进入这个:

<div class="some-classes">
    <h2>Title 3</h2>
    <!-- other html contents but not divs -->
</div>
<div class="some-classes">
    <h2>Title 2</h2>
    <!-- other html contents but not divs -->
</div>
<div class="some-classes">
    <h2>Title 1</h2>
    <!-- other html contents but not divs -->
</div>

是否可以使用Emacs执行此操作?

2 个答案:

答案 0 :(得分:1)

在Emacs中实现这一点肯定有多种方法。例如,您可以执行以下操作。 CAVEAT 您已确保不犯任何错误,即按照以下说明操作时不会出现拼写错误,否则您可能无法获得结果

  1. 标记包含div&#39;的文档区域,然后键入 M-x narrow-to-region
  2. 这将使以下编辑更容易一些,并确保您不会意外更改您不想更改的部分文档。

    1. 移至<div class=...>条目的 last 行的开头。确保没有标记任何区域。
    2. 输入 C-x(
    3. 因此,您应该在迷你缓冲区中看到消息Defining kbd macro...

      1. 点击 C-space 开始标记区域
      2. 键入 C-r 以开始向后搜索。
      3. 您现在应该在迷你缓冲区中看到I-search backward:

        1. 键入字符串<div,然后按 Enter
        2. 当您键入该字符串时,point应该已移至上一行 div行的开头,即前一行<{em>}之上的行。div。当您标记包含它的区域时,倒数第二个div的整个主体应该突出显示。 (这个区域的自动标记是我们上面第4步的原因。)

          1. C-w 会杀死该区域,即从您的缓冲区中删除完整的倒数第二个div部分。
          2. 输入 M-> 跳转到缓冲区的末尾
          3. 输入 C-y 以在缓冲区末尾插入刚刚删除的point
          4. 键入 C-u C-space 然后再次: C-u C-space
          5. div现在应该回到div的开头,这是我们开始时缓冲区中的最后一个Keyboard marco defined

            1. 输入 C-x)
            2. 最后一步应该在迷你缓冲区中给你一条消息div。现在来了魔术:

              1. 输入 C-x e
              2. Emacs将自动为您重复步骤4-10,将另一个$PWD/constant/gmtDicts部分移动到缓冲区的末尾。

                1. 继续输入字符 e ,直到整个列表反转。
                2. 最后,获取文件的其余内容以进行编辑:

                  1. M-x widen

答案 1 :(得分:0)

甲。手动(如果您要排序许多此类元素,则会很慢):

  1. private def user_params params.require(:user).permit(:name, :avatar) end
  2. M-x nxml-mode RET
  3. M-x set-variable nxml-sexp-element-flag t RET M-< C-M-t C-M-t C-M-t C-M-b C-M-b C-M-b {{1} }

    C-M-t C-M-t M-< C-M-f C-M-t C-M-t C-M-b

    C-M-b C-M-t M-< C-M-f C-2 C-M-t C-2

    C-M-b C-M-t M-< C-M-k C-M-f C-M-t

    RET C-y M-> C-M-<backspace> C-M-b C-M-b C-M-t C-M-b

    C-M-b C-y M-< C-M-f C-M-k C-M-t C-M-b

    C-y RET M-< C-M-f C-M-t C-M-k C-M-b C-M-b

    步骤2允许sexp命令将完整元素视为sexp(否则,它仅将标记(例如C-yRET)视为sexp)。

    <div class="some-classes"></div>移动性别(在这种情况下为元素)。

    C-M-f 转换点之前和之后的元素。

    C-M-b杀死下一个元素。 C-M-t会杀死上一个元素。

  4. B中。执行此操作的命令:C-M-k

    C-M-<backspace>

    请参阅Elisp手册,节点Sorting