hanxi / blog

涵曦的博客
https://blog.hanxi.cc
56 stars 5 forks source link

VimL 读取命令结果到变量 #22

Open hanxi opened 5 years ago

hanxi commented 5 years ago

在我的 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

后面的处理就不多解释了,就是切字符串,对每行字符串进行匹配判断。