如何使用autocmd将PDF文件转换为TXT文件?

时间:2020-06-05 12:53:19

标签: pdf vim pdftotext

当我在VIM选项卡中拖动PDF文件时,我想使用pdftotext将其转换为TXT文件。 (我已经在磁盘上安装了pdftotext)

为此,我将此cmd添加到vimrc中:

autocmd BufReadPost *.pdf silent %!pdftotext -layout -q -eol unix "%"

在vim 7.4中,它运行良好。它以TXT格式打开PDF文件。
现在在vim 8.1中,它无法按预期工作。它会转换PDF并在我的磁盘上(同一PDF目录中)创建TXT文件,而无需打开它。

我想要的是始终在同一目录“ D:\ temp”中创建TXT文件,关闭PDF文件并打开TXT文件。

我尝试过但没有成功:

autocmd BufReadPost *.pdf silent %!pdftotext -layout -q -eol unix "%" | :let myfile = "D:\\temp\\".expand("%:r").".txt" | :bd | :exe "tabe ".myfile

错误:文件名,目录名或卷标语法不正确

如何在“ D:\ temp”中创建TXT文件,关闭PDF并在新选项卡中打开创建的TXT文件?

2 个答案:

答案 0 :(得分:3)

IMO,仅替换缓冲区内容就更有意义了。

let g:Pdf2Txt = 'pdftotext -layout -q -eol unix %:p:S -'

augroup Pdf2Txt | au!
    autocmd BufReadCmd *.pdf execute expandcmd('silent read ++edit !'..g:Pdf2Txt)
    autocmd BufReadCmd *.pdf 1delete_
    autocmd BufReadCmd *.pdf setfiletype text
    autocmd BufReadCmd *.pdf setlocal buftype=nowrite
augroup end

答案 1 :(得分:1)

它将转换PDF并在我的磁盘上创建TXT文件

这不是vim的错,是pdftotext的错。相当一段时间以来,这种方式一直存在。您需要通过附加-来强制它写入stdout,这意味着“输出文件是stdout”:

autocmd BufReadPost *.pdf silent %!pdftotext -layout -q -eol unix "%" -