gnome-shell and unity
easydigraph.vim 让输入特殊字符更加轻松

vim:撤销最后关闭的buffer

Rykka posted @ 2011年12月01日 02:55 in vim with tags vim , 7512 阅读


在目前的主流浏览器里面,都可以撤销最后关闭的标签页。

于是我以为vim里面也有这样的功能,但是看完:help buffer后发现,这个真没有 :|

于是只好自己动手,写了个mapping

<ctrl-w>z:撤销最后关闭的buffer
 

"reopen last closed buffers "{{{
"exclude the buffer closed with :bw :qall :)
aug BufList
    au!
    au vimenter * let g:bufList=[]
    au bufwinleave * call AddBufList()
aug END
nmap <silent> <c-w>z :call OpenBufList()<cr>
nmap <silent> <c-w><c-z> <c-w>z
function! AddBufList()
    let b=expand('<abuf>')
    if b > 0
        let g:bufList=add(g:bufList,b)
    endif
endfunction
function! OpenBufList()
    if len(g:bufList) !=0
        exec "sb ".remove(g:bufList,-1)
    endif
endfunction "}}}





可以撤销:q :hid :close :only :bun :bd所关闭的buffer('hidden'选项没影响)

不会撤销 :bw :qall 所关闭的buffer

我猜也不需要撤销了吧,嗯……

 



NOTE:

1.<afile>是当前autocommand执行的对象,<abuf>是其buf number。不一定与“%”相同

还有一个<amatch>,看说明是指 filetype/syntax 的events时所匹配的filetype/syntax的名称

2.buffer events的执行顺序 ,'[]'括号内为'hidden'选项打开的情况。


:new => bufleave

:hid => bufleave -> bufwinleave -> bufhidden
(与:e #相同,'hidden'打开时:q,:close与之相同)

:bun => bufleave -> bufwinleave ->[bufhidden ->]bufunload
('hidden'关闭时:q,:close与之相同)

:bd  => bufleave -> bufwinleave ->[bufhidden ->]bufunload -> bufdelete

:bw  => bufleave -> bufwinleave ->[bufhidden ->]bufunload -> bufdelete
                 -> bufwipeout
                (!这里的buffer不能被恢复了)

 

 

Avatar_small
依云 说:
2011年12月01日 12:50

博客换主题了啊,自己写的?

主意不错,就是不太完善。建议参考下 mru.vim,做成一个插件放到 vim.org 上 :-) 我修改过的 mru.vim 在这里: https://github.com/lilydjwg/dotvim/blob/master/plugin/mru.vim

Avatar_small
Rykka 说:
2011年12月01日 13:09

主题是simple.不过把我vim scheme里的颜色填上去了。

我其实想要一个能恢复窗口位置的,但是vim里面太不好辨识位置了。

你的意思是做成将文件列表保存在硬盘上的插件吗?

Avatar_small
依云 说:
2011年12月01日 15:07

不是。mru 是保存到硬盘的,和你这个不同。
你这个还不完善,内存占用,用户配置什么的,都没处理呢。

Avatar_small
Rykka 说:
2011年12月01日 17:19

我晕。
如果要配置的话,我的想法就是兼容'hidden'选项,对bun/bd/bw 进行设置。
但是内存占用还要怎么处理?这个只有一个number list啊

Avatar_small
依云 说:
2011年12月01日 19:50

这个 list 可能不必要到增长到数百甚至上千。而且我怀疑,在 Vim 的 list 尾端添加数据的时间复杂度是 O(n)。

配置的话,当然是键映射了 ;-)

Avatar_small
Rykka 说:
2011年12月01日 20:18

嗯,好像是有可能上千。那就只保留20个,一般也不会重复打开太多的。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter