[第12回] Neovimのすゝめ – 自動セットアップスクリプトを作ろう

[第12回] Neovimのすゝめ – 自動セットアップスクリプトを作ろう

Neovimを新しい環境に作ろうとすると、これが意外と大変です。
Neovim上の設定はinit.vimやプラグインマネージャーでサクッと入りますが、プラグインマネージャー自体やNeovim本体、Python実行環境などは自動化できません。

GitHubで管理する

まず、複数環境で設定を共有するためにinit.vimを含むNeovimの設定ディレクトリをGitHub等で管理しましょう。

ホームディレクトリにある設定ファイルはドットから始まるファイル・ディレクトリ名がついており、これらの設定ファイルをリポジトリで管理する時に dotfiles とリポジトリ名を付けることが多いです。

今回はLinux環境(Ubuntu)を想定したdotfilesを作成します。

セットアップスクリプト

ホームディレクトリに dotfiles ディレクトリを作成します。
そして、その中に install.sh を作成します。

install.shに自動化したいコマンドを記述したらGitHubに dotfiles リポジトリを作成してファイルをpushすれば完成です。
あとは新環境を作る時にGitHubからdotfilesリポジトリをcloneし、sh ~/dotfiles/sh install.sh からスクリプトを実行するだけです。

以下は私が使用しているスクリプトのサンプルです。

install.sh

#!bin/bash

echo '====== apt update & upgrade ======'
sudo apt -y update
sudo apt -y upgrade

echo '====== software install ======'

echo '=== common ==='
sudo apt install -y curl
sudo apt install -y unzip

echo '=== deno ==='
curl -fsSL https://deno.land/x/install/install.sh | sh
echo 'export DENO_INSTALL="/home/******/.deno"' >> ~/.bash_profile
echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bash_profile

echo '=== stow ==='
sudo apt install -y stow

echo '=== fish (shell) ==='
sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update -y
sudo apt install -y fish
chsh -s /usr/bin/fish
fish

echo '=== fzf ==='
git clone --depth 1 https://github.com/junegunn/fzf.git /tmp/fzf
/tmp/fzf/install

echo '=== ripgrep ==='
sudo apt install -y ripgrep

echo '=== fisher ==='
curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
fisher update
fisher install h-matsuo/fish-color-scheme-switcher

echo '=== node ==='
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n latest

sudo apt purge -y nodejs npm

echo '=== neovim ==='
sudo add-apt-repository -y ppa:neovim-ppa/unstable
sudo apt -y update
sudo apt install -y neovim/focal

echo '=== python ==='
sudo apt install -y python3-pip
pip3 install pynvim

echo '=== vim plug for neovim==='
sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \
       https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'

echo '====== GNU stow ======'
cd ~/dotfiles
stow -v nvim

echo '=== Re login ==='
exec $SHELL -l

apt update & upgrade

まずはUbuntuのパッケージリストをアップデートし、最新のパッケージへ更新します。

echo '====== apt update & upgrade ======'
sudo apt -y update
sudo apt -y upgrade

software install

Neovimが依存する外部ソフトウェアや入れておきたいソフトウェアのインストールコマンドを定義します。

deno

denoとは、TypeScriptでVimPluginを作成するためにも使われているパッケージで、これに依存しているプラグインを使用している場合に必要になります。
暗黒美無王ことdeinパッケージマネージャーのShougoさんが最近作るプラグインのddc等にも使用されています。

curl -fsSL https://deno.land/x/install/install.sh | sh
echo 'export DENO_INSTALL="/home/******/.deno"' >> ~/.bash_profile
echo 'export PATH="$DENO_INSTALL/bin:$PATH"' >> ~/.bash_profile

stow

重要です。
正式名をGNU Stowと言います。
これなしでdotfilesをまとめてリポジトリで管理しようとすると、~/.config以下の全ての設定ファイルをリポジトリに入れるか、.gitigonreで細かに除外しなければなりません。

GNU Stowのコマンド「stow -v nvim」を実行すると、~/dotfiles/.config/nvim に配置したファイルを ~/.config/nvim へ配置するシンボリックリンクを設定することが出来ます。

これによって、.config等のdotfilesが集まるディレクトリから管理対象にしたい設定ファイルだけを管理することが出来ます。

fish (shell)

シェルをデフォルトから変更したい場合なども設定可能です。
fishシェルとfish用のパッケージマネージャー「fisher」のセットアップ例です。

sudo apt-add-repository ppa:fish-shell/release-3
sudo apt update -y
sudo apt install -y fish
chsh -s /usr/bin/fish
fish

curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
fisher update
fisher install h-matsuo/fish-color-scheme-switcher

fzf / ripgrep

ファイルのあいまい検索にfzf、Grepにripgrepに依存しているプラグインを使っている場合に追加します。

echo '=== fzf ==='
git clone --depth 1 https://github.com/junegunn/fzf.git /tmp/fzf
/tmp/fzf/install

echo '=== ripgrep ==='
sudo apt install -y ripgrep

nodejs

nodejsを入れる場合のサンプルです。
nodejsを入れた後はnodejsの環境別のバージョン切り替えのためにnも入れています。

echo '=== node ==='
sudo apt install -y nodejs npm
sudo npm install n -g
sudo n latest

neovim

neovimは最新版を入れるためにパッケージリポジトリを追加した上でインストールします。

sudo add-apt-repository -y ppa:neovim-ppa/unstable
sudo apt -y update
sudo apt install -y neovim/focal

python

pythonを必要とするプラグインも多く、python3をインストールします。

sudo apt install -y python3-pip
pip3 install pynvim

GNU stow

stowコマンドを使ってdotfilesのシンボリックリンクを作成して配置します。

Re login

シェルに再ログインすることでシェルの変更等を反映します。

Neovimのすゝめカテゴリの最新記事