Vim 将缓冲区名称打印到 :q 上的标准输出



让我直接跳进去。

我试图做的是在退出 vim 时简单地打印出任何打开缓冲区的文件路径。 这很有用,因为我经常使用我编写的 vim 脚本在 vim 缓冲区中打开其他文件,该脚本可以在我的代码库中搜索特定的函数调用。

我想我可以设置一个自动命令,无论是当我打开文件还是离开 vim 时,并使用 :ls 的输出列出所有当前打开的缓冲区。 我遇到的问题是我无法在终端中显示任何输出。 我已经在我的函数中尝试了各种:!echo组合,但无济于事。 我一直在我的 .vimrc 中尝试类似以下内容

function! PrintFileName()
    :!echo "hello"
    :exec "!echo world"
    "... etc
endfunction
au BufRead * call PrintFileName()

如果我从命令行执行此操作,:!echo foobar:call PrintFileName()都对我有用。 我也认为我可能不得不使用某种形式的静音/重绘!所以我不必按回车键继续。

这里的主要问题是我看不到从函数内部输出到 stdout 并由自动命令调用的方法。

感谢您的任何帮助。

好的

,所以我找到了这个解决方案,只要我从终端的最后一行输入 vim,它就可以工作。 否则,这将打印出当前行下方的一行,并在您按 Enter 时被覆盖。 如果有人知道如何解决这个问题,请告诉我,否则我会使用它。

function! PrintBuffers()
    redir => files
    :ls
    redir END
    " Regex to strip out everything from :ls but the buffer filenames
    let files = substitute(files, '^[^"]*"', '', 'g')
    let files = substitute(files, '"[^"]*n[^"]*"', 'n', 'g')
    let files = substitute(files, '"[^"]*$','','g')
    " This is the magic line
    exe '!echo; echo ' . shellescape(&t_te . files)
endfunction
au VimLeave * call PrintBuffers()

*注意 - 当我写这篇文章时,我意识到如果你在某个时候做了一个:cd,这不会显示正确的路径。 所以我想它很脆弱,但它可以完成这项工作。

最新更新