【问题标题】:Source all vim buffers while keepying my windows / buffers in the same place?获取所有 vim 缓冲区,同时将我的窗口/缓冲区保持在同一个地方?
【发布时间】:2020-05-18 01:15:10
【问题描述】:

基本上,我想在处理 vim 脚本时不退出 vim 来获取我所有的 vim 文件。我知道我可以做到so ~/somefile.vim。我的代码有效,但它总是让我处于不同的窗口和缓冲区。

这是我目前所拥有的:

在 vimrc 中

map <leader>r  :call Reload()<cr>

在functions.vim中

if !exists("*Reload")

    fu! Reload()

    fu! Refresh()
    if &ft == 'vim'| silent so % | endif
    endfu

    messages clear 
    :bufdo call Refresh()
    source ~/.vimrc
    :wa
    :noh

    endfu

endif

我尝试在开始时设置当前缓冲区,然后尝试恢复 稍后我当前的缓冲区,但它不起作用,因为我认为采购 发生异步?

let s:buf_now = bufnr()
execute "normal! :b" . s:buf_now

解决方法可能是创建一个函数,用缓冲区和窗口 ids 函数恢复我的窗口?添加mksession? scriptease ```运行时` ?不确定最好的方法是什么。

【问题讨论】:

    标签: vim


    【解决方案1】:

    根据 filbranden 的回答:

    if !exists("*ReloadVimBuffers")
    function! ReloadVimBuffers()
        wa
        noh
        messages clear
        for i in range(1, bufnr('$'))
            let fname = bufname(i)
            if fname =~# '^.*\.vim'
                silent execute 'source ' . fname
            endif
        endfor
    endfunction
    endif
    
    

    【讨论】:

      【解决方案2】:

      尝试在不使用:bufdo 的情况下迭代缓冲区。例如:

      function! ReloadVimBuffers()
          for i in range(1, bufnr('$'))
              let fname = bufname(i)
              if fname =~# '\.vim$'
                  execute 'silent source' fname
              endif
          endfor
      endfunction
      

      这是将缓冲区名称与*.vim 匹配,而不是查看文件类型检测,这意味着它可能会错过您的vimrc...如果您宁愿使用文件类型检测,您可以使用getbufvar(i, '&amp;filetype')而是。

      【讨论】:

      • 谢谢您的帮助。您的代码有所帮助,抱歉,我不确定我是否不小心删除了您的 cmets 或者他们正在等待批准……我是新来的。我只是对正则表达式进行了一些修改,在执行前添加了静默,并添加了“。”加入字符串。不知道在哪里发布完成的功能供其他人查看
      • @ritchie 如果您有适合自己的东西,请将其发布为答案。发布自我答案是可以的,并且受到鼓励!很高兴这有帮助!
      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多