C++ 如何在vi中使用标记?
我刚刚在vi中发现了标记的存在。你如何使用它,你对它们了解多少?它们是否有用,比如说C++开发人员?< p>我需要在大文件中跳转时使用它们。例如,如果我正在处理两个相互关联的函数,一个在文件顶部附近定义,另一个在文件底部附近定义,我可以设置标记在两个位置之间快速来回跳转 如果我正在声明一个类或使用一个我不熟悉的声明,那么标记第一次解释内容的位置通常会很有帮助,这样我可以跳转回去快速参考C++ 如何在vi中使用标记?,c++,c,vim,C++,C,Vim,我刚刚在vi中发现了标记的存在。你如何使用它,你对它们了解多少?它们是否有用,比如说C++开发人员?< p>我需要在大文件中跳转时使用它们。例如,如果我正在处理两个相互关联的函数,一个在文件顶部附近定义,另一个在文件底部附近定义,我可以设置标记在两个位置之间快速来回跳转 如果我正在声明一个类或使用一个我不熟悉的声明,那么标记第一次解释内容的位置通常会很有帮助,这样我可以跳转回去快速参考 标记在总体上是有用的,但我认为它们不是(或更少)有用的,只是因为你在C++中开发。 这些只是一些想法——我相信
标记在总体上是有用的,但我认为它们不是(或更少)有用的,只是因为你在C++中开发。
这些只是一些想法——我相信还有很多其他的好主意。最常用的是复制粘贴或删除大块。 移动到块的第一行,键入
mx
移动到块的最后一行,键入
y'x
复制整个块(到剪贴板),或键入d'x
删除(剪切)它。在这两种情况下,p
或p
都可以用于将其粘贴到其他位置。标记是返回行的开头或行中的确切位置的好方法
当我想提取或复制代码的一部分时,我通常会使用它们。考虑以下事项:
int tmp = 0;
while (tmp < 10)
{
doIt(tmp); /* cursor before d */
/* ... */
finishIt(tmp);
tmp++
}
inttmp=0;
而(tmp<10)
{
doIt(tmp);/*d之前的光标*/
/* ... */
菲尼什(tmp);
tmp++
}
如果我想从
doIt(tmp)
提取到finishIt(tmp)
,我会在光标处设置一个标记(ma
),导航到finishIt,然后删除以用d'a
标记a,我一直使用它们来:
- 注释掉代码块
- 复制和移动代码块
- 将代码块拉入并删除到命名缓冲区中,以及
- 编辑:在测试块中替换
- 转到要注释掉的代码的第一行
- 标记它,例如输入
ma
- 走到街区的尽头
- 输入
(或您需要的任何注释字符):'a、.s/^/#
- 如上所述标记第一行
- 转到要复制/移动的块的底部
- 输入第二个不同的标记,例如
mb
- 转到要复制块的位置,然后输入
或:'a,'bco.
以复制或移动相应的块:'a,'bmo.
- 如上所述标记第一行
- 到你们想拉的那个块砖的底部去
- 输入
将块拉入缓冲区a,或者:'a,.yaa
将块附加到缓冲区a的当前内容上:'a,.yaa
- 如上所述标记第一行
- 转到要替换的块的底部
- 输入
,它将在文本块中替换。在最后一个斜杠后添加“g”或“c”将调用常用的全局和确认功能:'a、.s/search\u string/replace\u string/[gc]
'a
(撇号a)指的是包含标记的行,而'a
(反勾号a)指的是您标记的行上的字符
因此,`ad`b
(bactic-a-d-backtic-b)是一个有用的小片段,用于删除从标记为“a”的字符到标记为b的字符之前的字符
顺便说一下,在Vim中,输入
:reg
将显示所有寄存器的内容,包括删除寄存器。我发现只需使用视觉选择,然后按d键或命令即可轻松多了。我经常使用这种技术来搜索和替换选定的文本。如果使用ma
设置标记,则可以使用'a
跳回。