Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在vi中使用标记?_C++_C_Vim - Fatal编程技术网

C++ 如何在vi中使用标记?

C++ 如何在vi中使用标记?,c++,c,vim,C++,C,Vim,我刚刚在vi中发现了标记的存在。你如何使用它,你对它们了解多少?它们是否有用,比如说C++开发人员?< p>我需要在大文件中跳转时使用它们。例如,如果我正在处理两个相互关联的函数,一个在文件顶部附近定义,另一个在文件底部附近定义,我可以设置标记在两个位置之间快速来回跳转 如果我正在声明一个类或使用一个我不熟悉的声明,那么标记第一次解释内容的位置通常会很有帮助,这样我可以跳转回去快速参考 标记在总体上是有用的,但我认为它们不是(或更少)有用的,只是因为你在C++中开发。 这些只是一些想法——我相信

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

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

如果我正在声明一个类或使用一个我不熟悉的声明,那么标记第一次解释内容的位置通常会很有帮助,这样我可以跳转回去快速参考

标记在总体上是有用的,但我认为它们不是(或更少)有用的,只是因为你在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,.yaa
    将块拉入缓冲区a,或者
    :'a,.yaa
    将块附加到缓冲区a的当前内容上
编辑:在文本块中替换:

  • 如上所述标记第一行
  • 转到要替换的块的底部
  • 输入
    :'a、.s/search\u string/replace\u string/[gc]
    ,它将在文本块中替换。在最后一个斜杠后添加“g”或“c”将调用常用的全局和确认功能
编辑:忘了说,请记住
'a
(撇号a)指的是包含标记的行,而
'a
(反勾号a)指的是您标记的行上的字符

因此,
`ad`b
(bactic-a-d-backtic-b)是一个有用的小片段,用于删除从标记为“a”的字符到标记为b的字符之前的字符


顺便说一下,在Vim中,输入
:reg
将显示所有寄存器的内容,包括删除寄存器。

我发现只需使用视觉选择,然后按d键或命令即可轻松多了。我经常使用这种技术来搜索和替换选定的文本。如果使用
ma
设置标记,则可以使用
'a
跳回。