当前位置: 首页 > 工具软件 > vim-plug > 使用案例 >

Vim-plug太慢,因为github访问太慢

沈华晖
2023-12-01

github.com太慢

github.comgit太慢时可以换成镜像,比如github.com.cnpmjs.org. Linux下可以在bash的配置文件比如.bashrc中建立gitclone函数

function gitclone() { git clone https://github.com.cnpmjs.org/$1; }

之后bash shell下只用

gitclone someone/somepackage

就可以使用了。不过运行

git submodule update --init --recursive

时得改git后目录下的.gitmodules中的所有github的网址(比如sed或在vim里)。

:要是能直接把对github.com的访问重定向到github.com.cnpmjs.org那就一劳永逸了,如果不必访问原始网站且只是clone之类的操作而不必提交的话。不过后者是个子域名,我不知道如何配置。

vim-plug太慢

vim-plug也是用的github.com, 所以 ~/.vim/autoload/plug.vim(neovim下的路径是~/.local/share/nvim/site/autoload/plug.vim,如果neovim不是直接从vim导入配置的话)中的网址也要改。搜索下,有个别几处要改(注意不是所有,看plug.vim代码很容易明白为什么)。还有submodule的更新,也要改路径。vim里搜下.gitmodules,在.gitmodules可读等判断后加下面一行:

call s:system('sed -i s/github.com\\//github.com.cnpmjs.org\\// .gitmodules', spec.dir)

之后plug.vim的代码就是执行系统调用git submodule update --init --recursive了。

附录

附上修改的文件与原始文件运行

diff -C 2 ~/Downloads/vim-plug/plug.vim ~/.local/share/nvim/site/autoload/plug.vim

的结果:

***************
*** 93,97 ****
  set cpo&vim
  
! let s:plug_src = 'https://github.com/junegunn/vim-plug.git'
  let s:plug_tab = get(s:, 'plug_tab', -1)
  let s:plug_buf = get(s:, 'plug_buf', -1)
--- 93,97 ----
  set cpo&vim
  
! let s:plug_src = 'https://github.com.cnpmjs.org/junegunn/vim-plug.git'
  let s:plug_tab = get(s:, 'plug_tab', -1)
  let s:plug_buf = get(s:, 'plug_buf', -1)
***************
*** 774,778 ****
          throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo)
        endif
!       let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')
        let uri = printf(fmt, repo)
      endif
--- 774,778 ----
          throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo)
        endif
!       let fmt = get(g:, 'plug_url_format', 'https://git::@github.com.cnpmjs.org/%s.git')
        let uri = printf(fmt, repo)
      endif
***************
*** 1313,1316 ****
--- 1313,1317 ----
        if !v:shell_error && filereadable(spec.dir.'/.gitmodules') &&
              \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir))
+         call s:system('sed -i s/github.com\\//github.com.cnpmjs.org\\// .gitmodules', spec.dir)
          call s:log4(name, 'Updating submodules. This may take a while.')
          let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir)
 类似资料: