5

我使用这样的东西:1,40 fo但我认为这不是最有效的方法。

你的是啥呢?

4

4 回答 4

8

我使用foldmethod=marker并拥有要输入的映射<!-- {{{ -->以及<!-- }}} -->我希望折叠开始和结束的位置。我将开始标记放在带有开始块标记的行上,例如:

<div id="topmenu"> <!-- {{{ -->

所以当它折叠时,我会立即看到折叠包含的内容,而无需添加额外的注释。

对于 CSS,它更容易,我只使用它foldmarker={,},所有定义都会自动折叠,向我展示一个非常清晰的所有类、标签和 ID 列表,我可以在需要时打开它们。实际上,我所有的 CSS 文件最后都有这一行:

/* vim: set fdm=marker fmr={,}: */

您还可以直观地选择要折叠的区域,zf如果您愿意,可以按一下。

于 2010-01-31T09:57:02.563 回答
6

我在 vimrc 中用这个在缩进和标记之间切换..

let g:FoldMethod = 0
map <leader>ff :call ToggleFold()<cr>
fun! ToggleFold()
    if g:FoldMethod == 0
        exe 'set foldmethod=indent'
        let g:FoldMethod = 1
    else
        exe 'set foldmethod=marker'
        let g:FoldMethod = 0
    endif
endfun

缩进适用于大多数美化的 html,但我将标记用于大型声明性目录样式折叠文档。根据谁编写文件,一个会比另一个更好,因此您需要快速访问两者。

于 2010-01-31T10:34:23.697 回答
3

html 的 vim 的最佳折叠方法:使用 haml 代替。css 的最佳选择:使用 sass 代替

我其实是认真的。它们使它更加紧凑。

于 2010-01-31T09:32:36.720 回答
1

foldmethod=ignore几乎完全用过。但是,我希望忽略行默认为上行或下行的较高折叠级别,而不是较低的折叠级别,这启发了以下内容:

" Default foldmethod
" Similar to fdm=indent, but lets blank and comment lines default high.
set fen fdm=expr fdi=
set foldexpr=EswaldFoldLevel(v:lnum)

function! EswaldFoldLevel(lnum)
  let ignored = '^\s*\([#/*]\|$\)'
  if getline(a:lnum) !~ ignored
    " In the general case, just use the indent level.
    " It would be nice if it didn't skip several levels...
    return indent(a:lnum) / &sw
  endif

  let previndent = 0
  let prevnum = a:lnum - 1
  while prevnum > 0
    if getline(prevnum) =~ ignored
      let prevnum = prevnum - 1
    else
      let previndent = indent(prevnum) / &sw
      break
    endif
  endwhile

  let nextindent = 0
  let maxline = line('$')
  let nextnum = a:lnum + 1
  while nextnum <= maxline
    if getline(nextnum) =~ ignored
      let nextnum = nextnum + 1
    else
      let nextindent = indent(nextnum) / &sw
      break
    endif
  endwhile

  return max([previndent, nextindent])
endfunction

(对不起语法高亮...)

我将其用作自定义插件,让单个文件类型覆盖它。例如,Python 不想查看前面的行,而只想查看后面的行。

于 2010-07-01T15:32:01.803 回答