gpt4 book ai didi

c++ - Vim 中文件的一部分的快照 : hide comments and blank lines

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:00 25 4
gpt4 key购买 nike

如何临时显示文件快照,同时隐藏注释和空行?

目的是在密集的页面格式中捕获 C++ 函数(例如)。

一种方法是使用全局命令过滤掉注释行

:g!/\/\/

但随后语法高亮显示和移动控件消失了。

Vim 的折叠功能是完成这项工作的一种方式,但它只会将几个连续的注释减少到一行,这在视觉上是有干扰的。

无论如何,折叠对于隐藏类似 C 的长注释仍然很有用,例如:

:set foldmethod=marker
:set foldmarker=/*,*/

但我没能在一个命令中轻松折叠 C (/.../) 和 C++ (//...) 注释。

理想的技巧是:

  • 隐藏(不仅仅是在一行中折叠)注释和空行,
  • 也许在第一列用一个字符表示隐藏线,
  • 处理 C 和 C++ 注释,
  • 在保留语法高亮的同时,
  • 并且,理想情况下,能够浏览代码,
  • 允许轻松恢复回到“评论” View 。

从而改造如下代码:

/** Let say hello
* and do not forget anybody
*/
void hello( int arg )
{
// OMG an hello world!
std::cout << "hello" << std::endl;

} // where is the world?

进入以下缓冲区:

void hello( int arg )
{
std::cout << "hello" << std::endl;
}

最佳答案

可以使用以下命令从源中删除所有评论:
:%s/\/\*\_.\{-}\*\/\n\{,1}\|^\s*\/\/.*\n\|\s*\/\/.*//

然后可以使用 u 命令撤消,假设没有其他操作可以撤消。

由于 vi 正则表达式可能非常神秘,下面是对每个部分的解释。整个正则表达式分为三个部分,由 OR 运算符 (\|) 分隔。

\/\*\_.\{-}\*\/\n\{,1}
这是为了匹配 /* ... */ 形式的 block 注释。它匹配字符串 '/*' (\/\*) 后跟零个或多个任何字符,包括换行符,但尽可能少地匹配 (\_.\{- }),后跟零个或一个换行符 (\n\{,1})。它匹配零个或一个新行的原因是为了处理代码与注释在同一行的情况以及注释单独在一行的情况。

^\s*\/\/.*\n这是为了匹配格式为 //... 的注释,其中注释单独占一行。它匹配零个或多个以行开头 (^\s*) 开头后跟字符串 '//' (\/\/) 的空白字符,然后是零个或多个任意字符 (.*),以新行结尾 (\n)。

\s*\/\/.*这与 //... 形式的注释相匹配,其中注释位于代码之后。它匹配任意数量的空格 (\s*) 后跟字符串 // (\/\/) 然后任意数量的字符不是换行符 (.*)。

这是我目前能想到的最好的办法,如果我能想到一种隐藏而不是删除评论的方法,我会更新这篇文章。

更新:一种简单地“隐藏”评论的可能方法是将它们的颜色设置为与背景相同。这将使它们不可见。但是,我目前不知道这个想法的可行性如何,也不知道它的推广效果如何。我对 vim 中的颜色了解不够,无法编写脚本来完成此操作。

关于c++ - Vim 中文件的一部分的快照 : hide comments and blank lines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4907973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com