如何用Vim分隔页面?

时间:2010-01-26 02:04:47

标签: vim

我要求将ASCII文档分成每页最多58行的页面。在每页的底部有一个3行页脚。我不知道Vim中有任何能够实现这一目标的分页能力。

使用Vim有一个很好的方法吗?也许突出每一个第58行或类似的东西。

N.B。我看到的答案涉及使用一个单独的工具来做到这一点;这是我想到的。我感兴趣的是Vim解决方案。

感谢。

6 个答案:

答案 0 :(得分:3)

您正在寻找的正确工具很可能是a2ps。

a2ps --lines-per-page 58 --footer=footer_text document.txt

答案 1 :(得分:2)

为什么使用vim很重要?您可以更有效地使用splitcat

假设您的原始文件名为file,并且您创建的文件footer包含您的页脚文字。

$ split -l 58 file file_parts
$ for i in file_parts*; do cat $i footer > $i.footered; done
$ cat file_parts*.footered > file.footered

file.footered会在第58行插入原始文件,内容为footer

这假设您希望将它全部放回原始文件中。如果不这样做,那么生成的file_parts * .footered文件将是已经分离的页面,因此您可以跳过最后一步。

答案 2 :(得分:2)

vim可以作为脚本。将以下内容放在文件中,并在要更改的文件打开时将其:source。 s:页脚列表是每次运行58行后要插入的行。

let s:footer = ["","Footer",""]
let s:line = 0

while s:line <= line("$") - 58
  let s:line = s:line + 58
  call append(s:line, s:footer)
  let s:line = s:line + len(s:footer)
endwhile

答案 3 :(得分:2)

在vim中执行此操作的最有效方法是脚本(如Geoff Reedy已建议的那样)和替换(如:%s@\%(.*\n\)\{58}@\0---\rfooter\r---\r@)。宏(如对此问题的评论中所建议的)是最慢的,脚本是最快的。替换比脚本慢,但比宏更快。

所以替换是最好的仅限Vim的解决方案,除非它的性能是不可接受的。在这种情况下,值得编写一个脚本。

答案 4 :(得分:1)

您可能正在尝试使用错误的工具。你可以通过编程方式更容易地完成它,例如使用这个简单的Perl oneliner:

perl -pe'print "your\nfooter\nhere\n" unless $. % 58' inputfilename > outputfilename

答案 5 :(得分:1)

递归宏可能有效。试验以下内容(将光标定位在第一行的第一个字符上并切换到正常模式):

qqq
qq
57j
:read footer.txt
3j
@q
q

请注意,必须清除录制宏的寄存器(qqq),并且在读取页脚文件(:read footer.txt)时不得使用制表符完成。

然后您可以使用宏(普通模式):

@q