如何解决Vim 仅在删除另一个缓冲区时删除缓冲区
我已将 Vim 配置为如下所示:
+------------------------------------+
| N | Code |
| E | |
| R | |
| D | |
| T | |
| r |-------------------------------|
| e | REPL |
| e | |
+------------------------------------+
每个元素都在它自己的缓冲区中。是否可以仅在退出代码缓冲区时删除 REPL 缓冲区?例如,如果我打开和关闭帮助,REPL 应该保留,但是当我关闭代码缓冲区时,REPL 缓冲区也应该关闭。
这就是我现在所拥有的:
let s:code_repl_nrs = {} " A map of (code buffer number) - (REPL buffer number)
let s:last_leaved_buffer_nr = -1 " The number of the last leaved buffer
autocmd BufLeave,BufDelete * let s:last_leaved_buffer_nr = bufnr('%')
autocmd BufUnload * call <SID>StopREPL(s:last_leaved_buffer_nr) " Stop the REPL when closing the code buffer
"" Stops a REPL given the number of the current buffer
function! s:StopREPL(buffer_nr)
let l:repl_nr = get(s:code_repl_nrs,a:buffer_nr . '',-1) " Get the number of the REPL buffer
if l:repl_nr != -1
exec l:repl_nr . 'bdelete!'
endif
endfunction
当我使用 :h
时,REPL 关闭。我怎样才能防止这种情况?
解决方法
结果 <abuf>
是答案,替换了 s:last_leaved_buffer_nr
:
autocmd BufUnload * call <SID>StopRepl(expand('<abuf>'))
根据:h <abuf>
:
当执行自动命令时,替换为当前 有效的缓冲区号(对于 ":r 文件" 和 ":so 文件",它是 当前缓冲区,正在读取/获取的文件不在 缓冲)。
结果 <abuf>
被扩展为当前正在卸载的缓冲区的缓冲区编号。当代码缓冲区正在卸载时,缓冲区编号将在 s:code_repl_nrs
中,s:StopREPL
将能够删除 REPL 缓冲区。当某个其他缓冲区正在卸载时,s:StopREPL
将无法删除 REPL 缓冲区。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。