你如何在vi中使用标记?

时间:2009-10-01 17:32:52

标签: c++ c vim

我刚刚在vi中发现了标记的存在。你如何使用它,你对它们了解多少?它们对C ++开发人员有用吗?

4 个答案:

答案 0 :(得分:11)

我一直用它们:

  • 评论代码块,
  • 复制和移动代码块,
  • 将代码块删除并删除到命名缓冲区中,
  • 编辑:替换为测试块。

评论:

  • 转到要注释的代码的第一行,
  • 标记它,例如输入ma
  • 转到街区的最后
  • 输入:'a,.s/^/#(或您需要的任何评论字符)

复制和移动:

  • 如上所述标记第一行,
  • 转到要复制/移动的块的底部
  • 输入您的第二个不同的标记,例如mb
  • 转到要复制广告块的位置,然后输入:'a,'bco .:'a,'bmo .复制或移动广告。

Yanking到命名缓冲区:

  • 如上所述标记第一行,
  • 转到你想要的块的底部
  • 输入:'a,.ya a会将块拉入缓冲区a或:'a,.ya A将块附加到缓冲区a的当前内容

编辑:替换为一段文字:

  • 如上所述标记第一行,
  • 转到要替换的块的底部
  • 输入:'a,.s/search_string/replace_string/[gc],它将在您的文本块中删除。在最后一个斜杠后添加'g'或'c'将调用通常的全局和确认功能。

编辑:忘记说,请记住'a(撇号a)是指包含标记的行,而`a(反引号a)是指上的字符你标记的那一行。

所以`ad`b(bactic-ad-backtic-b)是一个有用的小片段,用于删除标记为“a”的字符到之前的字符的行中的文本标有b的字符。

顺便说一句,在Vim中,输入:reg将为您提供所有寄存器的内容。你的删除寄存器。

答案 1 :(得分:3)

当我需要在大文件中跳转时,我会使用它们。例如,如果我正在处理两个相互关联的函数,一个在文件顶部附近定义,另一个在底部附近定义,我可以设置标记以在两个位置之间快速来回跳转。

如果我宣布上课或使用我不熟悉的声明,那么标记首先解释事物的位置通常会有所帮助,以便我可以跳回去快速参考。

标记在一般情况下很有用,但我认为它们不再是(或更少)有用,只是因为你在C ++中开发。

这些只是一些想法 - 我相信会有很多其他好的想法。

答案 2 :(得分:2)

最常见的用途是复制粘贴或删除大块。 移至块的第一行,键入mx 移动到块的最后一行,键入y'x以复制整个块(到剪贴板),或d'x删除(剪切)它。在任何一种情况下,都可以使用pP将其粘贴到其他位置。

答案 3 :(得分:1)

标记可以作为回到行的开头或行中的确切位置的好方法。

当我想提取或复制一部分代码时,我通常会使用它们。请考虑以下事项:

int tmp = 0;
while (tmp < 10)
{
    doIt(tmp); /* cursor before d */
    /* ... */
    finishIt(tmp);
    tmp++
}

如果我想从doIt(tmp)提取到finishIt(tmp),我会在光标处设置一个标记(例如ma),导航到finishIt,然后删除标记a与d'a