LoginSignup
3
2

More than 5 years have passed since last update.

雑魚Vimmerが[NeoBundle → dein]と[Mac → Windows]の同時の移行ではまったこと(ほぼリンク集)

Last updated at Posted at 2017-10-01

対象者

  • WindowsでもVimを使いたい人
  • NeoBundleからdeinへの移行を考えている人
  • vimrcをがっつりう触るのが久しぶりでいろいろ忘れてしまった人

はまりポイント

  • NeoBundleが非推奨...だと
  • tomlってなんだ
  • Windowsって.vimrcじゃなくて_vimrcなんだよね...?
  • vimprocをビルドする必要があるらしいのだが。。。

Windowsって.vimrcじゃなくて_vimrcなんだよね...?

 ざっくりいうと、.vimrc_vimrcもWinでもMacでも読み込まれるようです。
ただ、優先順位が逆になっているようです。

 一方で、.vimディレクトリはWinではデフォルトでは読み込まれないようで、代わりにvimfilesというディレクトリにする必要があります。この辺りは、MacとLinuxでvimの設定ファイルを共有するときに考慮する必要が出てくるようですが、とりあえず移行する分にははまるほどではありません。まとめると以下のようになります。

Windows Mac/Linux
vimrc _vimrc優先 .vimrc優先
.vim/vimfiles vimfilesのみ .vimのみ

もう少し細かい話は、このサイトを参考にするとよいと思います。

NeoBundleが非推奨...だと

 「NeoBundleはもう非推奨だからdein.vimを使おう!」というお話はよく目にしていたのですが、「別に不満なく使っているしなぁ」という感じで移行が進んでいませんでした。

 Macでしか使ったことのなかったVimの環境をWindowsで構築する必要が出てきたタイミングでdeinへの移行も挑戦してみました。「NeoBundleからdeinへの移行」系の記事を見てると簡単そうに見えたのでやってみましたが、実際には、vimprocのビルドがわからなかったり、tomlがよくわからなかったりで苦労しました。

tomlってなんだ

 toml自体については、この記事に詳しいです。今回での利用に関しては、

*.vim *.toml
vim自体の設定 ×
pluginの設定

というように、vim自体の設定とpluginの設定を分離させること記述が簡単なことが大きなメリットのようです。こちらの有名な記事を参考にしてもらえれば、実際の使い方もよくわかると思います。

 例えば、molokaiのインストールは以下の記述だけでOKです。

dein.toml
[[plugins]]
repo = 'tomasr/molokai'

vimprocをビルドする必要があるらしいのだが。。。

 ほとんどの人はプラグインでvimprocを使っていると思いますが、Macの時と違ってWindowsでは、vimprocのビルドとその設定の記述に注意が必要です。deinへの移行やtomlに気を捕らわれててここを見落とすということもあるかもしれません。

訂正: 以下のコメントいただきました。こちらのコメントの通り、リンク先からダウンロードできます。つまり事前の自前ビルドは不要ということです。ちゃんと公式にありましたね。。。

訂正2: コメントで書いてくださっていますが、自動でダウンロードをしてくるオプションもあるとのことです!

Windows版のDLLは公式リポジトリで公開されていますので、ビルドは不要です。 https://github.com/Shougo/vimproc.vim/releases
Cygwinでビルドすると、Windows用ではなく、Cygwin専用のDLLができますので注意が必要です。

MinGWのインストール

 vimprocを使えるようにするには、makeしてあげる必要がありますが、デフォルトではWindowsにそのようなものは入っていません。そこで、MinGWをインストールしてビルドする必要があります1。その方法に関してはこちらを参考にすることで出来ると思います。

設定ファイルへの記述

 NeoBundleを使っていた方は、以下のような記述を設定ファイルにしていたと思います。

NeoBundleでの設定(vimファイル)
NeoBundle 'Shougo/vimproc.vim', {
\ 'build' : {
\     'windows' : 'tools\\update-dll-mingw',
\     'cygwin' : 'make -f make_cygwin.mak',
\     'mac' : 'make',
\     'linux' : 'make',
\     'unix' : 'gmake',
\    },
\ }

これは、公式のドキュメントと同じものですが、ここでOSによってどのmakeを使うかが指定されています。'build': 'make'だけになっている人もたまにいるみたいですが、Macの時でOSの違いを考えない場合は、それでも良いのですが、Windowsへの移行するときには必ず修正するようにしましょう。

 そして、dein.vimへ移行する場合には、次のように書き換えればOKです2

dein.vimでの設定(tomlファイル)
[[plugins]]
repo = 'Shougo/vimproc.vim'
hook_post_update = '''
  if dein#util#_is_windows()
    let cmd = 'tools\\update-dll-mingw'
  elseif dein#util#_is_cygwin()
    let cmd = 'make -f make_cygwin.mak'
  elseif executable('gmake')
    let cmd = 'gmake'
  else
    let cmd = 'make'
  endif
  let g:dein#plugin.build = cmd
'''

まだはまっていること → 解決

不可視文字の表示設定でエラー

 不可視文字の表示をさせようとして、Mac時代にはうまく動いていた以下のコードを実行しようとするとエラーが出てうまくいっていません。

.vimrc
set listchars=tab:-,trail:-,extends:,precedes:,nbsp:%,eol:? " NG
set listchars=tab:\≫\-,trail:\-,extends:\≫,precedes:\≪,nbsp:\%,eol:\? " escape的なことをしてもNG
エラー内容
E474: 無効な引数です: listchars=tab:<81><e2>-,trail:-,extends:<81><e2
>,precedes:<81><e1>,nbsp:%,eol:? " 上の方のエラー
E474: 無効な引数です: listchars=tab:\<81><e2>\-,trail:\-,extends:\<81><e2
>,precedes:\<81><e1>,nbsp:\%,eol:\? " 下の方のエラー

文字コード関係のエラーだと思われませんがよくわかっていません。

コメントを頂いたので、コメントを基に以下のように調査し対応しました。(k-tanakaさん、ありがとうございます!)

文字コード修正

文字コードが合っていないように見えます。

ということで、まず、いただいたコメントの通り次のようになっていることを確認しました。

set encoding=utf-8
scriptencoding utf-8

listcharsで設定する全ての文字は幅が1でなければならない

ただ、listchars には全角幅の文字は使用できません。"≫" が全角幅で表示されるフォントを使用しており、set ambiwidth=double の設定をしている場合は、エラーとなります。

とコメントを頂いたので、改めてVim日本語ドキュメントで検索して確認しました。(最初からするべきだったと反省もしつつ。。。)

すると、listcharsオプションの説明部分に以下のような記述がありました。

文字 ':' と ',' は使えない。'encoding' が "utf-8" のときはUTF-8の文字
が使える。そうでないときはprintableな文字 {訳注: 文書先頭を参照} だけ
が使える。全ての文字は幅が1でなければならない。

正直、文字コードの話とかフォントの話は理解していないことが多いのですが、文字の幅が1でないようなものはlistcharsの文字として設定できないことはわかりました。

解決まで

上記のようにencodingscriptencodingの設定を確認して、ambiwidthsingleにして準備は整ったと思い、utf-8の"≪"を入力することでうまくいくかと思うとうまくいきませんでした。実は、私のケースでは

.vimrc
set fileencoding=utf-8

を抜かしていため、.vimrcの保存時に別コードに変換されていたようです。これでようやく次のコードで問題なくlistcharsが設定できました。

.vimrc
set listchars=tab:-,trail:-,extends:,precedes:,nbsp:%,eol:?

  1. WindowsでもCygwinを導入していれば、Cygwinに入っているmakeを使うこともできるようです。追記: コメントをいただきましたが、CygwinでビルドするとCygwin専用のDLLができるようで注意が必要とのことです。 

  2. buildオプションを使うこともできるようですが、OSによって変えることは難しそうです。 

3
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2