オンプレのサーバにVimをインストールする際に、ビルド手順(主にconfigure内容)を忘れてググることが多いので自分の備忘録として残したいと思います。
また、一口にVimと言ってもVim8、NeoVimをyumやらaptやらでインストールするパターンと、ソースコードからコンパイルするパターンがあると思いますので、今回はDockerコンテナ上で以下の4パターンを試してみたいと思います。
- Vim8をパッケージマネージャでインストールするパターン
- NeoVimをパッケージマネージャでインストールするパターン
- Vim8をソースからビルドしてPython2, 3を有効にしたパターン
- NeoVimをパッケージマネージャからインストールしてPython2, 3を有効にしたパターン
Dockerコンテナのベースイメージは軽量化のためAlipneLinuxを使用していますがCentOSでもUbuntuでも手順はほぼ変わらないと思います。
1. Vim8
まずはVim8のみ、Pythonを有効にしていない状態であれば以下のように簡単にインストールすることができます。
FROM alpine
MAINTAINER Gen Igarashi < [email protected] >
# Package
RUN apk update
RUN apk --update add vim
Dockerfileを用意したらbuildコマンドを実行し、コンテナを起動します。
$ docker build . -t vim
$ docker run -it vim ash
コンテナを起動したらvimを起動できることを確認します。
# vim
2. NeoVim
次にNeoVimを試します。
こちらもVim8同様、簡単にインストールすることができます。
FROM alpine
MAINTAINER Gen Igarashi < [email protected] >
# Package
RUN apk update
RUN apk --update add neovim
$ docker build . -t vim
$ docker run -it vim ash
# nvim
先ほどとほぼ同じ手順でNeoVimがインストールできます。
3. Vim8 + Python
次にプラグインを使用するためにPythonを有効化したVim8をインストールします。
先ほどの方法でもPython3は有効になっているのですが一応Python2も有効にしてみます。
Dockerfileは少し複雑になります。
FROM alpine
MAINTAINER Gen Igarashi < [email protected] >
# Package
RUN apk update
RUN apk --update add git make gcc g++ musl-dev ncurses-dev
RUN apk --update add \
python \
python-dev \
python3 \
python3-dev \
perl \
perl-dev \
lua \
lua-dev
RUN git clone https://github.com/vim/vim
RUN cd vim && \
./configure \
--enable-fail-if-missing \
--with-features=huge \
--disable-selinux \
--enable-luainterp \
--enable-perlinterp \
--enable-pythoninterp=dynamic \
--with-python-config-dir=/usr/lib/python2.7/config \
--enable-python3interp=dynamic \
--with-python3-config-dir=/usr/lib/python3.7/config-3.7m-x86_64-linux-gnu \
--enable-fontset \
--enable-multibyte \
vi_cv_path_python3=/usr/bin/python3.7 && \
make && make install
まずVim8のソースコードをcloneするためのgitや、ビルドするためのgccなど必要なパッケージをインストールします。
その後、git cloneしてcdでディレクトリに移動してからビルドしますがDockerでは以下のようにRUN cd vimとしてもconfigureが実行できません。
RUN cd vim
RUN ./configure
Dockerはコマンド1つ毎にカレントディレクトリに戻りますのでcdした後に&&で続けてビルドを実行しないとカレントディレクトリに戻って実行してしまうのでエラーになります。
configureが終わったらmake installして完了です。 コンテナを立ち上げてVimを確認します。
$ docker build . -t vim
$ docker run -it vim ash
Vimの確認は以下のコマンドです。
# vim --version | grep python
+cmdline_hist +langmap +python/dyn +visual
+cmdline_info +libcall +python3/dyn +visualextra
+pythonとなっているのでPython2, Python3が有効になっています。
Vimを起動して確認してみましょう。
# vim
ノーマルモードで以下のコマンドを実行して1が表示されればPythonは有効になっています。
:echo has('python')
:echo has('python3')
4. NeoVim + Python
最後にNeoVim+Pythonを試します。
Pythonをインストールし、pipでneovimパッケージをインストールするだけですので前述のVim8ほど複雑ではありません。
FROM alpine
MAINTAINER Gen Igarashi < [email protected] >
# Package
RUN apk update
RUN apk --update add curl gcc g++
RUN apk --update add neovim
RUN apk --update add python python-dev python3 python3-dev
RUN curl -kL https://bootstrap.pypa.io/get-pip.py | python
RUN python -m pip install neovim
RUN python3 -m pip install --upgrade pip
RUN python3 -m pip install neovim
Python3のpipはneovimをインストールする前にupgradeしないと怒られるのでupgradeしてからneovim installとしています。
こちらもコンテナを起動して確認します。
$ docker build . -t vim
$ docker run -it vim ash
NeoVimはヘルスチェックができるので起動後、ノーマルモードでヘルスチェックコマンドを実行しましょう。
# nvim
:checkhealth
Python2, Python3のどちらもOKとなっているので有効であることが確認できました。
まとめ
DockerでのVimのインストール方法をまとめてみました。
Dockerを使う場合はファイル共有にしてローカルのVimで開発するのでDocker上でVimを使用することは少ないのですが、Dockerfileを作成しておくことは無駄ではないかな、と思い作成してみました。
Docker上で開発を行うVimmerの役に立てれば幸いです。
今回作成したDockerfileはこちら。
https://github.com/aizulab-igarashi/docker_vim