代码之家  ›  专栏  ›  技术社区  ›  pythonquick

vi/vim编辑器:使用映射序列用HTML标记包装单词

vim
  •  1
  • pythonquick  · 技术社区  · 15 年前

    我试图定义一个vi“map”命令序列,它将当前单词包装在一个HTML标记中,例如b(粗体)标记。地图定义如下:

    :map K ebi<B><esc>ea</B><esc>
    

    地图从运动“eb”开始移动到所选单词的开头, 假设最可能的光标位置是单词的开头,或者 在中间。问题是,如果光标位于最后一个 单词的字符-那么下面的单词将被包装。

    有没有一个诀窍,使这个地图工作可靠的任何光标位置与一个字?

    4 回复  |  直到 15 年前
        1
  •  2
  •   Fritz G. Mehner    15 年前

    另一种方法是: 删除内部单词(DIW),插入标签,查找最后一个<,插入删除。

    :map K diwi<b></b><Esc>F<P 
    

    closetag.vim : Functions and mappings to close open HTML/XML tags 可能感兴趣。

        2
  •  5
  •   sykora    15 年前

    如果这是一个一次性的地图,那很好,但是如果你想做的更多,或者更经常地做,你最好是使用文本对象 surround.vim

    如果使用该脚本,则可以执行(在正常模式下)

    ysiwtb>
    

    你必须逐字输入。 ys 是告诉surround.vim听文本运动。 iw 选择您当前使用的单词。 t 告诉它你想用一个标签包围。 b> 告诉它您要使用哪个标签。

    即使您不想使用surround.vim,也可以研究使用文本对象。( :help text-objects )在你的地图上。这个 国际电联 inner-word 文本对象是您在这里想要的,但我还不太知道如何将其包装在地图中。

    编辑:我知道如何在地图中使用它,这里是……

    :map K viwO<Esc>i<b><Esc>lviw<Esc>a</b><Esc>
    

    这将使光标停留在关闭位置。 > 结束标记的。它应该在光标最初所在的单词中的任何位置工作。

    但就像我说的,包围。维姆更好。

        3
  •  1
  •   Raoul Supercopter    15 年前

    如果你想要一个更全球化的解决方案,你可以尝试 XPTemplate 它可以为你提供周围环境。只需选择您的文本,输入选择好的代码段(我认为)并输入标记名,但如果您愿意,您可以添加一个特殊的模板。

    此外,正如您在本文中看到的,使用各种语言是非常好的工具。 video

        4
  •  0
  •   Leonard    15 年前

    用LB代替。

    e移动到当前单词的结尾,或者如您所发现的,移动到下一个单词。 如果在第一个字符上,b将移动到当前单词或前一个单词的开头。防止移动到 前一个词如果在第一个字符上,请移动 右边一个字符。即使你在最后一个字母上, B会把你带到正确的位置。

    所以你的整个路线是:

    :map K lbi<B><esc>ea</B><esc>