最好先在自己的类别中定义自己的类别.vimrc
(例如带有子列表和子子列表的列表),然后将所有插件/设置/功能添加到相应的类别中。结合定制折叠功能,可以很好地发挥作用:
上面的示例显示了可能对我的结构有所帮助的类别.vimrc
。它使用以下定制的折叠设置:
""""""""""""""""""""""""
" THIS IS A CATEGORY "
""""""""""""""""""""""""
"" Autofolding .vimrc
" see http://vimcasts.org/episodes/writing-a-custom-fold-expression/
""" defines a foldlevel for each line of code
function! VimFolds(lnum)
let s:thisline = getline(a:lnum)
if match(s:thisline, '^"" ') >= 0
return '>2'
endif
if match(s:thisline, '^""" ') >= 0
return '>3'
endif
let s:two_following_lines = 0
if line(a:lnum) + 2 <= line('$')
let s:line_1_after = getline(a:lnum+1)
let s:line_2_after = getline(a:lnum+2)
let s:two_following_lines = 1
endif
if !s:two_following_lines
return '='
endif
else
if (match(s:thisline, '^"""""') >= 0) &&
\ (match(s:line_1_after, '^" ') >= 0) &&
\ (match(s:line_2_after, '^""""') >= 0)
return '>1'
else
return '='
endif
endif
endfunction
""" defines a foldtext
function! VimFoldText()
" handle special case of normal comment first
let s:info = '('.string(v:foldend-v:foldstart).' l)'
if v:foldlevel == 1
let s:line = ' ◇ '.getline(v:foldstart+1)[3:-2]
elseif v:foldlevel == 2
let s:line = ' ● '.getline(v:foldstart)[3:]
elseif v:foldlevel == 3
let s:line = ' ▪ '.getline(v:foldstart)[4:]
endif
if strwidth(s:line) > 80 - len(s:info) - 3
return s:line[:79-len(s:info)-3+len(s:line)-strwidth(s:line)].'...'.s:info
else
return s:line.repeat(' ', 80 - strwidth(s:line) - len(s:info)).s:info
endif
endfunction
""" set foldsettings automatically for vim files
augroup fold_vimrc
autocmd!
autocmd FileType vim
\ setlocal foldmethod=expr |
\ setlocal foldexpr=VimFolds(v:lnum) |
\ setlocal foldtext=VimFoldText() |
" \ set foldcolumn=2 foldminlines=2
augroup END
要定义自己的类别和子类别,请使用以下语法:
""""""""""""""
" Category "
""""""""""""""
"" Subcategory
""" Subsubcategory
" Just a comment, gets ignored no matter where
如果您使用vim片段(例如,使用UltiSnips),则可以非常容易地创建顶级类别:只需展开vim片段提供的box
或bbox
片段(编写box
或bbox
按扩展触发器)。
要通过两次按空格来更快地打开和关闭折叠,请执行以下操作:
let mapleader = "\<space>"
" Toggle folds
nnoremap <silent> <leader><Space> @=(foldlevel('.')?'za':"\<Space>")<CR>
vnoremap <leader><space> zf
这样,您.vimrc
就可以轻松地导航并具有良好的结构。
"{{{
是最“类似于vim”的处理方式,solarized插件使用了这种方式,尽管它可能很嘈杂,但它为您提供了设置手动折叠的最标准方式