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

How to convert a PDF file to a TXT file using an autocmd?

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

为此,我在 vimrc:

中添加了这个命令
autocmd BufReadPost *.pdf silent %!pdftotext -layout -q -eol unix "%"

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

我想要的是始终在同一目录中创建 TXT 文件"D:\temp",关闭 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 文件?

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

It converts the PDF and creates the TXT file on my disk

这不是 vim 的错,而是 pdftotext 的错。很长一段时间以来一直以这种方式行事。您需要通过附加 - 强制它写入标准输出,这意味着 "output file is stdout":

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