如何在Vim中使用折叠打印(硬拷贝)?

ThG*_*ThG 3 vim

我有一个非常简单的待办事项列表,其中包含日期和标签:

141218 Call school &phone @me
141219 Buy groceries &buy @me
141220 Have W order books &buy @W
141220 Think about vacation &vac @me
141221 Have W try Santa Claus outfit &fam @W
141222 Ask a question to S.O. &vim @me
Run Code Online (Sandbox Code Playgroud)

这个列表不长(我记的文件要长得多),但是假设我要打印它,只打印,例如@W部分?

首先,我将搜索:

/&W
Run Code Online (Sandbox Code Playgroud)

折叠(Vim Wikia Simple Folding:Tip 282)

:set foldexpr=getline(v:lnum)!~@/
:nnoremap <F8> :set foldmethod=expr<CR><Bar>zM
Run Code Online (Sandbox Code Playgroud)

我现在有:

+—- 2 lines
141220 Have W order books &buy @W
+—- 1 line
141221 Have W try Santa Claus outfit &fam @W
+—- 1 line
Run Code Online (Sandbox Code Playgroud)

这适用于硬拷贝部分:显示所有行...

我该如何打印这个折叠的文件?

Ing*_*kat 6

不幸的是,:hardcopy它不考虑窗口中的当前表示,它打印物理内容(并且还有其他限制,如忽略隐藏).

使用其他印刷方式

:TOhtml命令附带Vim,可以创建当前窗口的HTML表示,包括折叠.然后,您可以从浏览器打印该HTML文件.

(暂时)删除线而不是折叠

您可以使用以下:global命令执行此操作:

:global!/@W/delete _
:hardcopy
:undo
Run Code Online (Sandbox Code Playgroud)

也许作为自定义命令:

:command! -nargs=? HardcopyMatching execute 'global!/' . <q-args> . '/delete _' | hardcopy | undo
Run Code Online (Sandbox Code Playgroud)