有哪些 vim 宏可以帮助索引一本书?

有哪些 vim 宏可以帮助索引一本书?

我即将重读这本 400 页的书,并标记某些单词以进行索引。

我正在寻找一组 VIM 宏,它们可以帮助我快速浏览标记要索引的单词和单词组的文本。我的想法是:

  • 索引当前单词的按键(无论光标位于第一个字母还是其他任何字母上)。 foobar变为\alsoindex{foobar}
  • 一个按键将索引该单词和其后跟的单词。(foo bar变成\alsoindex{foo bar}
  • 将此词和下一个词索引为关键词的击键(foo bar变为foo bar\index{bar|foo}
  • 索引突出显示的任何文本的按键

如果我真的有梦想,我希望\index在标点符号后插入。例如foo bar. Baz变成foo bar.\index{bar} Baz

这超出了 VIM 宏的功能吗?

答案1

这当然可以在 Vim 中完成。首先,让我给你四个要点的方法。我把它们都设为快捷键<leader>i(i 代表索引)。如果你不知道,<leader>我在下面做了一个小解释。命令的解释也在下面给出。

  • 索引当前单词的按键:

    :nmap <leader>i "zdiwi\alsoindex{}<ESC>P
    
  • 一个按键将索引该单词和其后面的单词:

    :nmap <leader>i "zd3iwi\alsoindex{}<ESC>P
    
  • 将此单词和下一个单词索引为关键词的击键:

    nmap <leader>i "zyiww"xyiwea\index{\|<ESC>"xPl"zpa}
    
  • 索引突出显示的任何文本的按键:

    vmap <leader>i "zy`>a\index{}<ESC>"zP
    

最后一个问题:我不太清楚如何区分标点符号和其他字符,但是命令

nmap <leader>i "zyiwf i\index{}<ESC>"zP

将索引光标下的单词,但\index在下一个空格之前插入命令


现在进行一些说明:

领导者: 领导者(或地图领导者)是一个键,它是一个特殊键(您可以选择哪个),您可以使用它来轻松创建快捷方式,它可以由用户设置(默认为反斜杠),并提供一种生成快捷方式的简便方法。如果领导者是反斜杠,则<leader>i与相同。有关领导者的更多信息可以在或\i中找到:help leader这里

词语定义: 当然,问题的答案取决于单词的定义。Vim 有两种不同的单词定义。一种叫做 a word,另一种叫做 a WORD。前者是字母串,后者是用空格分隔的字符串。请参阅:help word:help WORD了解精确定义。要将命令从处理word's 改为处理WORD's ,w应该将 every 改为 a W

寄存器: 在上面的命令中zx指的是寄存器(在所有情况下),因此可以更改它们,以使用不同的寄存器。

映射 这些命令仅在正常模式下有效,但有一个命令仅在可视模式下有效。这就是nmap和的作用vmap。这些命令的工作原理以及有关键映射的更多信息,请参见这里这里

免责声明: 这些命令只有在光标放在单词上时才有效,有些命令只有在同一行中该命令后面还有一个单词时才有效,如果在特殊情况下使用,可能会产生意想不到的结果。另外,如果最后一个单词只有一个字符,则第三个命令无法正常工作,如果单词只有一个字符,则第五个命令无法正常工作。

解释: 现在开始解释!它们其实都很相似。让我们从最上面的开始,然后继续向下。

  • 该部分"zdiw删除光标下的单词并将其存储在寄存器中z。试着看看:help iw。该部分i\alsoindex{}将 Vim 设置为插入模式并输入\alsoindex{}。该部分<ESC>P离开插入模式并将文本粘贴到花括号之间。

  • 这个和上一个一样,但是现在部分3iw指的是光标所在的单词和下一个单词(使用命令时iw空格也算作单词,因此它3iw代替了2iw)。

  • 部分"zyiw将光标下的单词拉到寄存器中z,部分w将光标移动到下一个单词的开头,部分"xyiw将光标下的新单词拉到寄存器中x,部分ea移动到单词的末尾并进入插入模式,部分\index{\|键入\index{|,部分<ESC>"xP将寄存器的内容粘贴x在和之间{|部分l"zp将光标向前移动一位并粘贴寄存器的内容z,部分a}插入最后一个}

  • 该部分"zy将视觉中的内容拉到寄存器中z,该部分`>将光标移动到视觉的末尾(刚刚在那里),该部分a\index{}进入插入模式并输入\index{},然后该部分<ESC>"zP将寄存器的内容插入z花括号之间。

现在来解释一下最后一条命令。这条命令和其他命令一样。它的一部分"zyiw将光标下的单词拖放到 register 中z,另一部分f i将光标移动到下一个空格处并将 Vim 置于插入模式,另一部分\index{}<ESC>"zP将 index 命令与 register 的内容一起插入z

相关内容