如何在文件中保存带有实际折叠文本的文件? (“+ - 43行[...]”)?

时间:2015-06-01 21:13:11

标签: vim

我正在寻找一种方法,将折叠的文件保存到新文本文件中,并关闭所有折叠。换句话说,正如我在屏幕上看到的那样。

有可能吗?

(我将不得不稍后打印代码,其部分与我的目的无关;折叠机制对此非常理想,我的另一种选择是手动将“[X行省略]”添加到保存的文本中。 )

3 个答案:

答案 0 :(得分:3)

根据需要折叠文本,然后使用:TOhtml转换为HTML文件。这将保留您的折叠。如果您需要它作为纯文本文件,您可以进行后期处理,例如使用w3m,它将HTML呈现为文本并允许将其转储到文本文件中。

答案 1 :(得分:2)

我曾经创建了一个saves all folds to a new buffer的脚本。

答案 2 :(得分:2)

这是一个自定义:RenderClosedFolds命令,它将修改当前缓冲区/范围。它还会尝试保持原始折叠的Folded突出显示。

":[range]RenderClosedFolds
"           Replace all lines currently hidden inside closed folds
"           with a single line representing 'foldtext'.
function! s:RenderClosedFolds()
    if line('.') == foldclosed('.')
        let l:result = foldtextresult('.')
        call setline('.', l:result)
        execute printf('syntax match renderedFold "\V\^%s\$" containedin=ALL keepend', escape(l:result, '"\'))
    else
        delete _
    endif
endfunction
command! -bar -range=% RenderClosedFolds
\   highlight def link renderedFold Folded |
\   let g:ingocommands_IsEntireBuffer = (<line1> == 1 && <line2> == line('$')) |
\   if g:ingocommands_IsEntireBuffer | syntax clear renderedFold | endif |
\   let g:save_foldmethod = &l:foldmethod | setlocal foldmethod=manual |
\   execute '<line1>,<line2>folddoclosed call <SID>RenderClosedFolds()' |
\   if g:ingocommands_IsEntireBuffer | setlocal nofoldenable | endif |
\   let &l:foldmethod = g:save_foldmethod | unlet g:save_foldmethod g:ingocommands_IsEntireBuffer