让我直接跳进去。
我试图做的是在退出 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
,这不会显示正确的路径。 所以我想它很脆弱,但它可以完成这项工作。