vim - 在vim中关闭缓冲区时如何执行命令?

标签 vim vi

vim/vimscript 中是否有类似 close-window-hook 的东西,这样我每次关闭窗口时都可以调用一个函数?

我想将它用于以下场景:
我使用一个额外的临时窗口来显示有关文件的信息,当我关闭文件时,我希望临时窗口自动关闭,以便 vim 退出。

如果您有任何想法如何在没有钩子(Hook)的情况下实现这一点,那也一样好。

编辑:
我知道:qa[ll] ,但我很懒,只想输入:qZZ .

编辑2.71828183:
我接受了自动命令答案,因为它最接近原始问题,但找到了使用预览窗口而不是拆分窗口的另一种解决方案。当最后一个“正常”窗口关闭时,预览窗口会自动关闭。

最佳答案

自动命令很棒!我很确定在这种情况下,BufLeave会做这项工作,但你可能想要BufWinLeave ?看看:help autocmd-events获取完整的事件列表。

您需要关心的另一点是:您可以使用缓冲区本地自动命令! (:help autocmd-buflocal)

您可以使用 au BufLeave <buffer> ... 为当前缓冲区定义一个。 .我最好的猜测是,您可以在任何创建临时窗口的命令中运行它。当您打开暂存窗口时,您应该能够将暂存窗口的缓冲区编号缓存在全局变量中,然后您的自动命令可以删除该缓冲区( :help :bdelete )。

au BufLeave <buffer> bdelete g:scratch_buffer
call CreateScratchWindow()

function CreateScratchWindow() {
    ...
    let g:scratch_buffer = bufnr("")
}

还有一个函数 winbufnr,用于按窗口获取缓冲区编号。您可以使用其中任何一个 - 只需确保在使用时暂存窗口/缓冲区是最新的! (“”表示当前窗口/缓冲区)。

关于vim - 在vim中关闭缓冲区时如何执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522150/

相关文章:

vim - 如何在vim中的视觉模式下删除光标之前到行首的文本?

java - 有什么方法可以在 Vim/Emacs 中提供 Eclipse 自动错误发现功能?

vim - 如何在vim中打开光标下的目录?类似于 gf 的目录

VIM 如何 Yank 包括搜索结果

vim - 是否可以在 vi(命令行,而非 GUI)中的目录导航期间查看当前文件内容?

linux - Vi 搜索并用斜杠替换

vim - Vi/vim - 从末尾行删除,包括最后一个字符

vim - 将工作目录更改为当前打开的文件

macos - Vim 使用 +clipboard 编译,但 + 和 * 寄存器都无法存储 yanks

android - 如何在 Remix OS 的终端仿真器中保存和退出 Vi