在我的.vimrc中我有行
:set foldmethod=marker
:set foldmarker=SECTION:,ENDSECTION:
用于自定义代码折叠。在我的文件中,尊重语言中的注释字符位于代码折叠标记之前,它们后面跟着相应部分的标题。 E.g。
# SECTION: First Section
some code
# SECTIION: Subsection
some more code
# ENDSECTION:
# ENDSECTION:
# SECTION: Second Section
some other code
# ENDSECTION:
此结构具有生成文件内容所需的所有内容,如
First Section
Subsection
Second Section
(理想情况下,此索引具有与vim帮助系统类似的标记,因此我可以轻松跳转到相应的SECTION;我不知道如何实现此目的)。 我可以想到一个简单的perl脚本生成这个文本,但我会优先选择一个基于vim脚本的解决方案,该脚本在新窗口中显示索引。也许已经有一个解决方案呢?
答案 0 :(得分:2)
将其放入您的vimrc并运行:MkIdx
或<leader>z
。您也可以将范围传递给命令,但默认值是整个缓冲区。
function! MkIdx() range
let items = filter(getline(a:firstline, a:lastline), 'v:val =~ ''\C^\s*#\s\+SECTION''')
new
call setline(1, map(items, 'substitute(v:val, ''^\(\s*\)[^:]\+:\(.\+\)'', ''\1\2'', '''')'))
" Mapping to jump to section:
nnore <silent><buffer><leader>x :<C-U>call Go2Section()<CR>
endfunction
function! Go2Section()
let section = matchstr(getline('.'), '^\s*\zs.*')
quit
call search('\C# SECTION:\s\+'.section, 'cw')
endfunction
command! -bar -range=% MkIdx <line1>,<line2>call MkIdx()
" Mapping to build the index:
nnore <silent><leader>z :<C-U>MkIdx<CR>
编辑:将索引放在新缓冲区上。
编辑2:不要留空线。
编辑3:允许跳回<leader>x
的部分。