gpt4 book ai didi

vim - 在 Vim 中保存后,如何自动评估脚本并将结果放入现有窗口?

转载 作者:行者123 更新时间:2023-12-04 21:00:20 26 4
gpt4 key购买 nike

我的理想情况是将 Vim 分成两个窗口 - 第一个包含我当前正在处理的脚本 (python),另一个显示评估该脚本的结果。这是我到目前为止:

:autocmd BufWritePost *.py redir @p | execute 'silent w !python -' | redir END

保存脚本时,脚本的内容通过管道传送到 python 命令,该命令的输出存储在寄存器 p 中。将 p 放入另一个窗口中显示的新/空缓冲区的最佳方法是什么?

我尝试过的一些事情是 blast | normal! "pp | bfirst (爆炸:新/空缓冲区,bfirst:包含python脚本的缓冲区)但这似乎让我留在“输出”缓冲区中,无论出于何种原因,我都失去了语法高亮显示,需要在缓冲区之间来回翻转才能将其取回。我真的很想就地完成这一切,并避免生成临时转储文件,在其中我通过管道传输运行脚本的输出,并且更愿意避免使用任何其他外部工具来“监视”python 脚本文件并在它更改时执行某些操作.

最佳答案

我的方法是使用预览窗口。这允许您始终移动到正确的窗口,无论您有多少个窗口。它还允许您在想要退出 vim 时“忽略”预览窗口已打开的事实(例如,您可以执行 :q 而不是 :qa)。

autocmd BufWritePost *.py call OutputWindow("python")
autocmd BufWritePost *.rb call OutputWindow("ruby")

function OutputWindow(executable)
let filename=expand('%:p')

" move to preview window and create one if it doesn't
" yet exist
silent! wincmd P
if ! &previewwindow
" use 'new' instead of 'vnew' for a horizontal split
vnew
set previewwindow
endif

execute "%d|silent 0r!" . a:executable . " " . filename
wincmd p
endfunction

可能有一种不那么冗长的方法来实现这一点,但它似乎工作得很好。

关于vim - 在 Vim 中保存后,如何自动评估脚本并将结果放入现有窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com