対象者
- 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です。
[[plugins]]
repo ='tomasr/molokai'
vimprocをビルドする必要があるらしいのだが。。。
ほとんどの人はプラグインでvimprocを使っていると思いますが、Macの時と違ってWindowsでは、vimprocのビルドとその設定の記述に注意が必要です。deinへの移行やtomlに気を捕らわれててここを見落とすということもあるかもしれません。
訂正: 以下のコメントいただきました。こちらのコメントの通り、リンク先からダウンロードできます。つまり事前の自前ビルドは不要ということです。ちゃんと公式にありましたね。。。
Windows版のDLLは公式リポジトリで公開されていますので、ビルドは不要です。 https://github.com/Shougo/vimproc.vim/releases
Cygwinでビルドすると、Windows用ではなく、Cygwin専用のDLLができますので注意が必要です。
MinGWのインストール
vimprocを使えるようにするには、make
してあげる必要がありますが、デフォルトではWindowsにそのようなものは入っていません。そこで、MinGWをインストールしてビルドする必要があります1。その方法に関してはこちらを参考にすることで出来ると思います。
設定ファイルへの記述
NeoBundleを使っていた方は、以下のような記述を設定ファイルにしていたと思います。
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。
[[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'elselet cmd ='make'endifletg:dein#plugin.build = cmd'''
まだはまっていること → 解決
不可視文字の表示設定でエラー
不可視文字の表示をさせようとして、Mac時代にはうまく動いていた以下のコードを実行しようとするとエラーが出てうまくいっていません。
setlistchars=tab:≫-,trail:-,extends:≫,precedes:≪,nbsp:%,eol:? " NGsetlistchars=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の文字として設定できないことはわかりました。
解決まで
上記のようにencoding
とscriptencoding
の設定を確認して、ambiwidth
もsingle
にして準備は整ったと思い、utf-8の"≪"を入力することでうまくいくかと思うとうまくいきませんでした。実は、私のケースでは
setfileencoding=utf-8
を抜かしていため、.vimrcの保存時に別コードに変換されていたようです。これでようやく次のコードで問題なくlistcharsが設定できました。
setlistchars=tab:≫-,trail:-,extends:≫,precedes:≪,nbsp:%,eol:?