VIM:折叠要点

mon*_*auk 7 vim vi vimrc

我对 VIM 很陌生,但在过去的一周里一直在尝试自学,但我遇到了一个令人沮丧的问题:

目前我主要使用 VIM 做笔记,并使用 VIM 的折叠功能使我的工作不那么混乱。然而,我遇到了一个问题,即超出我设置的换行符的每个项目符号都会自行折叠。更清楚一点:

虚拟机 在此处输入图片说明

我不想有单个项目符号折叠。

我似乎已经将问题追溯到我的文本缩进的方式:由于折叠似乎默认发生在缩进级别,由于第二行“缩进”更多,我的项目符号会折叠。所以我认为可能有一些模糊的方法可以解决这个问题:如果下一行的缩进大于 1,则告诉 VIM 折叠,或者处理项目符号点的包装方式完全不同。

如何实施这些解决方案?


我使用了一个名为Workflowish的插件,所以这是我的 vimrc:

set tw=100
set formatoptions=tcq
set com=fb:*
set spell
set spelllang=de
colorscheme synic
set fileencoding=utf8
execute pathogen#infect()
syntax on
filetype plugin indent on
Run Code Online (Sandbox Code Playgroud)

这是插件本身的设置:

setlocal foldlevel=1
setlocal foldenable
setlocal sw=2 sts=2
setlocal expandtab
setlocal foldtext=WorkflowishFoldText()
setlocal foldmethod=expr
setlocal foldexpr=WorkflowishCompactFoldLevel(v:lnum)
setlocal autoindent
Run Code Online (Sandbox Code Playgroud)

Pee*_*eja 4

不幸的是,如果没有插件的支持,就无法做到这一点。(有点。)

这里的关键行是:

setlocal foldmethod=expr
setlocal foldexpr=WorkflowishCompactFoldLevel(v:lnum)
Run Code Online (Sandbox Code Playgroud)

第一个意思是“使用 的值'foldexpr'来确定每行的折叠级别”。第二个设置该选项以使用插件中定义的函数的值。

Vim 中的折叠是基于折叠级别的。在 中foldmethod=expr,每行都由 分配一个折叠级别(整数)'foldexpr'。这些水平决定了折叠的开始和结束位置。


解决方案1:编写一个新的'foldexpr'.

这可以调用WorkflowishCompactFoldLevel(),但调整值以便多行项目符号项目不会折叠。不过,我会将其作为练习,因为我认为这是错误的方法。这让我们想到:


解决方案 2:使其现在的工作方式不再成为问题。

我认为真正的问题不是这些折叠的存在,而是它们妨碍了你。你能描述一下你做了什么让你甚至注意到这些折叠的存在吗?'foldlevel'这可能是为缓冲区适当设置起始值的问题ft=workflowish

理想情况下,除非您真正尝试关闭折叠,否则您不会注意到这些折叠的存在。