🛠️

管理しやすいinit.vimを作る

2021/12/13に公開
2

初投稿です。もし間違いなどあればコメントして頂けると嬉しいです。

今年もあと僅かになってきました。
年末といえば大掃除ですよね。
ということで数多の設定を書き溜め続け、1000行近くに達してしまったinit.vimを掃除していきます...

となる予定だったのですが、init.vimを爆散してしまったためイチから書き直します。
僕はNeovimを使っているのでinit.vimですが、基本的には.vimrcでも通用するはずです。

環境

OS: Manjaro Linux x86_64
Kernel: 5.13.19-2-MANJARO
Shell: zsh 5.8
DE: Xfce 4.16
Terminal: tmux

NVIM v0.5.1
Build type: Release
LuaJIT 2.0.5

分割を前提としたディレクトリ構成

ディレクトリ構成(直接関係ないファイルは除いてます)

.
├── configs
│   ├── cmds.vim
│   ├── coc.vim
│   ├── defx.vim
│   ├── denite.vim
│   ├── keybinds.vim
│   ├── medley.vim
│   ├── plugs.vim
│   └── varset.vim
└── init.vim

init.vimには、

source ~/.config/nvim/configs/plugs.vim

let splt = split(glob("~/.config/nvim/configs/" . "*.vim"))
  
for file in splt
	" 読み込んだファイルを表示するもの消しても大丈夫
	echo "load " . file
	" ファイルの読み込み
	execute 'source' file
endfor

実際に追加したスクリプトが自動で読み込まれる様子
asciicast

処理の説明

glob()

この関数は指定されたパスのファイル一覧をリストで返します。そしてワイルドカードも使えます。

例)
:echo glob("~/.config/nvim/*")
/home/ユーザー名/.config/nvim/coc-settings.json
/home/ユーザー名/.config/nvim/configs
/home/ユーザー名/.config/nvim/init.vim
/home/ユーザー名/.config/nvim/plugged

これは~/.config/nvim/配下を表示しているため、人によって表示される内容が異なります。

split()

この関数は指定された文字で文字列などを区切ります。
:echo split('peco,nye,con', ',')

execute

指定された文字列をVimScriptと解釈して実行します。

例)

:execute 'source' file
(fileに格納されている文字列をVimScriptファイルとして読み込みます)

全体の流れは、

globでファイル一覧の取得
        ⬇
ファイル一覧のリスト化
        ⬇
ループで順次読みこむ

という感じです。

このスクリプトを応用して、Vimの時はvim-*.vimを読み込み、Neovimの時はnvim-*.vimを読み込みと言った処理も実現できそうです。

それではまた別の記事で。

Discussion

rocchoroccho

こんにちは。良い記事をありがとうございます。
vimファイル単体で動かないプラグインの場合の簡単なインストール方法についてお聞きできますか?

例えばこちら
https://github.com/jalvesaq/vimcmdline
/plugin/vimcmdline.vim
ファイル単体では動かないため,/configs/配下に置くだけでは使え無さそうです。
こまもかさんはどのようにプラグインをインストールされてますか?OR主に自作でしょうか?

こまもか🦊こまもか🦊

コメントありがとうございます!
また返信遅くなってしまってすみません。

僕のが単一ファイルではないプラグインをインストールする時にはこちらのvim-jetpackというプラグインマネージャを使っています。

今の所僕のVimにはプラグインが80個ほどインストールされていますが、それでも起動時に重さを感じさせずに起動してくれるのでとても気に入っています!ぜひ試してみて下さい!!