在我的 vimrc 配置中有这样一个函数,作用是按两次 Ctrl + C
关闭素有插件窗口。
function! ClosePluginWindow()
" Close quickfix
cclose
" Close Leaderf Buffer
redir => message
silent execute "ls!"
redir END
let l:buflist = split(message, '\n')
for l:one in l:buflist
let l:items = split(l:one, '"')
if match(l:items[0], "u*a-") >= 0
let l:bufid = matchstr(l:items[0], '\d\+')
exe 'bd! '.l:bufid
endif
endfor
endfunction
" 关闭插件窗口
map <C-C><C-C> :call ClosePluginWindow()<cr>
关闭 quickfix 窗口有现成的命令 cclose
,但是如何关闭某些只读的 buffer
窗口呢?
可以通过 ls!
命令取到所有的 buffer
列表,但是如何拿到这个结果呢?
这时候就要用到 redir
命令了,详细的使用方法可以 :help redir
查看。这里只解释下上面是如何用的。
:redi[r] => {var}
这个语法是把输出重定向到 var
变量。
redir => message
silent execute "ls!"
redir END
ls!
命令的输出内容就会赋值给变量 message
。
后面的处理就不多解释了,就是切字符串,对每行字符串进行匹配判断。