我在互联网上看到过部分解决方案,但没有一个真正让我满意:我必须在我的.vimrc中放入什么(理想情况下,我不想改变任何语法/*.vim文件),以便在我打开的所有.c/cpp/h文件中,我可以自动折叠#ifdef ... #endif部分?
#ifdef ... #endif
gpfsuwkq1#
这应该会捕获#if、#ifdef和#ifndef:
#if
#ifdef
#ifndef
function! FoldtextForC() " Show the whole #if line return getline(v:foldstart) endfun set foldtext=FoldtextForC() set foldmarker=#if,#endif
字符串在运行:g/#ifdef DEBUG/foldclose关闭一些折叠后,此代码示例将看起来像这样(set foldcolumn=3,所以你可以看到折叠):x1c 0d1x的数据您可以调整FoldtextForC以返回更多信息-请参阅:h fold-foldtext:
:g/#ifdef DEBUG/foldclose
set foldcolumn=3
FoldtextForC
:h fold-foldtext
return printf("+%s %s", v:folddashes, getline(v:foldstart))
型
a5g8bdjr2#
如果您想要的唯一折叠类型是#ifdef部分,最简单的方法是创建一个包含以下内容的文件~/.vim/after/ftplugin/c.vim(您可能还需要在cpp.vim中执行此操作,我不确定):
~/.vim/after/ftplugin/c.vim
cpp.vim
set foldmarker=#ifdef,#endif set foldmethod=marker
字符串如果你真的想把它放在.vimrc中而不是使用~/.vim/after/结构,你可以做这样的事情:
.vimrc
~/.vim/after/
autocmd FileType *.[ch]{,pp} call FoldPreprocessor() function! FoldPreprocessor() set foldmarker=#ifdef,#endif set foldmethod=marker endfunction
型您可能还需要考虑使用:
set foldmarker=#if,#endif
型因为这将捕获#if defined(...)、#ifdef、#ifndef、#if 0等以及#ifdef。使用语法折叠来实现这一点更具挑战性,因为您必须更改语法规范,因为它不支持将其作为标准。
#if defined(...)
#if 0
cygmwpex3#
您知道可以使用%键导航预处理器条件块吗?此外,[#和]#向上/向下导航。因此,您可以转到条件块的开头(可能使用/^# Enter),然后
^#
zf% -- fold to next conditional directive v2]#zf -- fold to second next directive (e.g. #else... #endif)
字符串zd放下折叠。也许你可以围绕这个概念设计一个小脚本。我不太确定是否会与常规语法折叠有(不利)交互,因为我没有使用它的习惯。我通常使用类似于手动折叠操作的自动折叠。
zd
3条答案
按热度按时间gpfsuwkq1#
这应该会捕获
#if
、#ifdef
和#ifndef
:字符串
在运行
:g/#ifdef DEBUG/foldclose
关闭一些折叠后,此代码示例将看起来像这样(set foldcolumn=3
,所以你可以看到折叠):x1c 0d1x的数据
您可以调整
FoldtextForC
以返回更多信息-请参阅:h fold-foldtext
:型
a5g8bdjr2#
如果您想要的唯一折叠类型是
#ifdef
部分,最简单的方法是创建一个包含以下内容的文件~/.vim/after/ftplugin/c.vim
(您可能还需要在cpp.vim
中执行此操作,我不确定):字符串
如果你真的想把它放在
.vimrc
中而不是使用~/.vim/after/
结构,你可以做这样的事情:型
您可能还需要考虑使用:
型
因为这将捕获
#if defined(...)
、#ifdef
、#ifndef
、#if 0
等以及#ifdef
。使用语法折叠来实现这一点更具挑战性,因为您必须更改语法规范,因为它不支持将其作为标准。
cygmwpex3#
您知道可以使用%键导航预处理器条件块吗?
此外,[#和]#向上/向下导航。
因此,您可以转到条件块的开头(可能使用/
^#
Enter),然后字符串
zd
放下折叠。也许你可以围绕这个概念设计一个小脚本。我不太确定是否会与常规语法折叠有(不利)交互,因为我没有使用它的习惯。我通常使用类似于手动折叠操作的自动折叠。