rcmdnk's blog

The Dark Powers That Bind

Vimのプラグインは dein.vim を使って管理していますがVim 7.4は現状サポートされていません。

ただしCentOS 7とかですらステムデフォルトのVimは7.4だったりするので 7.4に出くわす場面は結構あります。

本格的に使うサーバーでは自分でVimを入れてしまえばよいのですが、 とりあえずdotfiles を入れて作業しようとするときにVimでエラーが出るのが嫌なので 7.4でも使える様にしました。

dein.vim

以下は導入時に書いたもの。

.vimrcの設定でdeinがインストールされていない場合自動でインストールするようにしてありますが、 プラグインの量が結構あるので、最初に入れるときに結構時間がかかります。

なので、最初にプラグインを入れないまま色々と作業をしたい場合などのために 特定ファイルがあったらdeinを入れない、という設定を入れたり、 入ってない場合に入れるかどうか聞くプロンプトを出したりするような設定を加えたりしています。

dein.vim @ Vim 7.4

この設定があるのでVim 7.4な環境で入れなければ良いだけではあるのですが、 一応以前のdeinは7.4以上をサポートしていたので7.4以上ならば入れるようにしてありました。

ただ、今年入ったあたりから色々問題が出始め、4月頃に完全に7.4のサポートを落とした様です。

dein.vimが動かない · Issue #176 · Shougo/dein.vim

Drop Vim 7.4 support · Issue #250 · Shougo/dein.vim

ただし、READMEを見るとtag 1.5を使えば使える、とのこと。 並列化処理などが出来ない様ですがとりあえず動きます。 管理ツールなので最初にインストールするときにちょっと時間がかかりますが 一度プラグインをインストールしてしまえばそれほど問題ないかと。

ということでtag 1.5を入れる様な設定に変更します。

Vim7.4でdein.vim tag 1.5を入れる設定

.vimrcの最初の方にこんな設定を書いています。

.vimrc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
let s:use_dein = 1

let s:vimdir = $HOME . '/.vim'
if has('vim_starting')
  if ! isdirectory(s:vimdir)
    call system('mkdir ' . s:vimdir)
  endif
endif

let s:dein_enabled  = 0
if v:version >= 704 && s:use_dein && !filereadable(expand('~/.vim_no_dein'))
  let s:git = system('which git')
  if strlen(s:git) != 0
    " Set dein paths
    let s:dein_dir = s:vimdir . '/dein'
    let s:git_server = 'github.com'
    let s:dein_repo_name = 'Shougo/dein.vim'
    let s:dein_repo = 'https://' . s:git_server . '/' . s:dein_repo_name
    let s:dein_github = s:dein_dir . '/repos/' . s:git_server
    let s:dein_repo_dir = s:dein_github . '/' . s:dein_repo_name

    " Check dein has been installed or not.
    if !isdirectory(s:dein_repo_dir)
      let s:is_clone = confirm('Prepare dein?', 'Yes\nNo', 2)
      if s:is_clone == 1
        let s:dein_enabled = 1
        echo 'dein is not installed, install now '
        echo 'git clone ' . s:dein_repo . ' ' . s:dein_repo_dir
        call system('git clone ' . s:dein_repo . ' ' . s:dein_repo_dir)
        if v:version == 704
          call system('cd ' . s:dein_repo_dir . ' && git checkout -b 1.5 1.5' )
        endif
      endif
    else
      let s:dein_enabled = 1
    endif
  endif
endif

if s:dein_enabled
  ... " Plugins or settings related to dein
  let &runtimepath = &runtimepath . ',' . s:dein_repo_dir
  let g:dein#install_process_timeout =  600

  " Check cache
  if dein#load_state(s:dein_dir)
    call dein#begin(s:dein_dir)

    " dein
    " Do not manage dein at Vim 7.4, as it is not HEAD
    if v:version != 704
      call dein#add('Shougo/dein.vim')
    endif

    " other plugins...

最初は~/.vimディレクトリを作り、 Versionが7.4以上でかつ~/.vim_no_deinというファイルがない場合 deinのセットアップを始めます。

gitが必要なのでない環境ではdisable。

Vimのバージョンが7.4以上ならdeinを入れ、7.4ならタグのtag 1.5に変更します。

deinがインストールされてなかったらgit cloneします。

その後、Versionが7.4の場合だけtag 1.5に変更。

ここまででdeinのインストールは終了です。

その後、通常このdeinもdein自身で管理してアップデートしたりする設定にしていると思います。

ただ、Version 7.4ではmasterではなく別のブランチに居るので 管理してcall dein#update()とかを呼ぶとエラーが出ます。

逆にtag 1.5にしている環境ではそれでfixしたいのでupdateする必要もないため 上の最後の様な感じでVersion 7.4の場合にはdein自身は管理しないようにします。

Sponsored Links
Sponsored Links

« macOS Mojave (10.14)へのアップグレード Homebrewでxcrun: error »

}