どこでもvimコンフィグを落とせるワンコマンドを作ってみました

:::note info
今回は、◯◯太郎記事のスタイル~~をパクって~~のインスパイアを受けて対話式の記事になります mm
:::

## はじめに

**= ある日の休憩中にvim同士の後輩くんとの会話 =**

後輩　「サーバーの立ち上げ作業順調ですか？」
自分　「順調だけど、、」
自分　「**vimで**サーバー上のファイル色々修正してるけど、、」
自分　「自分の環境のvimの操作と微妙に違くてちょっと不便を感じている。。」
後輩　「そうなんですか！」
後輩　「[dotfiles](https://github.com/adwinying/dotfiles)をサーバに落とし込んで自分のコンフィグを入ればいいんじゃないですか？」
自分　「やー」
自分　「サーバー立ち上げたらそんな頻繁に触らないし、コンフィグを落とすことが面倒だな」
自分　「しかも色んなプラグインが入っているし、サクサクで使いたいの。」
後輩　「面倒ですか笑。確かに重いそうですねー」
自分　「軽量版コンフィグを簡単に読み込む機能とかないですかね。。」
後輩　「うーん、それは難しいそうですかね。。」

**= 障害で緊急対応に入っていて会話終了 =**

## URLからvimスクリプトを読み込む

**= また別の日にFくんとの会話 =**

自分　「ね、このvim機能知っている？」
後輩　「あ、vimの`source`コマンドですね！vimコンフィグを読み込むコマンドですよね？」
自分　「そうそう、実はURLから読み込むことができますよ」

```viml
" 普通はファイルパスを指定する
:source ~/.vimrc

" URLでも読み込める？！
:source http://example.org/vimrc.vim
```

後輩　「へー、URLが読み込めるんだ！」
後輩　「これで何か作るんですか？」
自分　「気軽にコンフィグを落とす機能って覚えっている？」
自分　「これで実現できるんですよー」
後輩　「そうなんですか！」
後輩　「これでGithub上のvimコンフィグファイルのURLを指定しとけば読み込めるって感じですか↓」

```viml
:source https://github.com/adwinying/dotfiles/raw/master/vim/.vim/basic.vim
```

自分　「これで行けなくはないですけど、」
自分　「URL長くて覚えられないし、コンフィグを複数ファイルに分割したので気軽に読み込むレベルじゃないですねー」
後輩　「確かに🤔」
後輩　「もうしかしてもっといい方法があるんですか？」
自分　「おっしゃる通り！」

## 軽量版コンフィグを読み込むスクリプト

自分　「軽量版コンフィグを読み込むスクリプト作りましょう！」
後輩　「おー！ていうかどう作ればいいですか？」
自分　「こうでどうですか？」

```viml
silent execute '!curl https://raw.githubusercontent.com/adwinying/dotfiles/master/vim/.vim/basic.vim https://raw.githubusercontent.com/adwinying/dotfiles/master/vim/.vim/colors/nord.vim > ~/.vimrc'
source ~/.vimrc
```

後輩　「長いですね！難しいそうー」
自分　「いや、そうでもないよ。URLを省略して解説するね↓」

```viml
silent execute '!curl url1 url2 > ~/.vimrc'
" silent：実行したコマンドの結果を出力しない
" execute：指定した文字れるの内容をvimコマンドとして実行
" !：以降の内容をターミナル上で実行
```

自分　「つまり、」
自分　「**curl コマンド**で最低限のコンフィグファイル（この場合はファイル２個）を落とし込んで、」
自分　「全ての内容を `~/.vimrc` というファイルに保存する」
自分　「最後に、さっき作ったファイルを読み込む」
自分　「というスクリプトですー」
自分　「curl コマンドに依存するスクリプトになりますが、大抵の環境に入っているので多分大丈夫だと思う。。」

後輩　「なるほど、これはシンプルでいいですね！」
後輩　「しかも .vimrc に保存されているので次回vimを開いてもコンフィグが残りますね！」
後輩　「でも。。」
自分　「？？」
後輩　「やはり**サーバーとか共有環境に自分のコンフィグを残したくないな。。**」
自分　「それなら保存先を変えればいいですよ↓」

```viml
let tmp_file = system('mktemp')
silent execute '!curl url1 url2 > '.tmp_file
silent execute 'source '.tmp_file
```

後輩　「mktempってtempファイルのパスを生成するコマンドですよね？」
自分　「そう！これでパスを取って、落とした内容の保存先にして読み込むという流れですー」
後輩　「tempファルなので使い切りって感じですか？」
自分　「一応ファイルはどこかで残っていますよ。各OSには、tempファイルのディレクトリがあるよ↓」

> Windows: C:/users/[ユーザー名]/appdata/local/temp
Linux: /tmp
macOS: /var/folders/[ハッシュ?]/T

自分　「tempディレクトリにあるファイルは削除して大丈夫なので、」
自分　「心配症であればここにあるファイルを消せばいいよ」
後輩　「すぐに消えないですか！メモしておこうー」

## URLの簡略化

後輩　「先輩、課題残ってますよ？」
自分　「？？」

> 自分　「**URL長くて覚えられないし**、コンフィグを複数ファイルに分割したので気軽に読み込むレベルじゃないですねー」

後輩　「URLがまだ長くないですか？」
自分　「あ、確かにそうですね！」
自分　「スクリプトをホスティングする場所次第ですね」
自分　「自分が持っているドメイン（iadw.in）が十分短いのでそっちにしようー」
自分　（ドメインのpublicディレクトリ直下に `vimrc` と `vimrc.tmp` を置いときます）
自分　「これでこのコマンドで読み込めますね↓」

```viml
"自分のvimコンフィグを読み込むコマンド（vim終了しても持続する）
:so https://iadw.in/vimrc

"自分のvimコンフィグを読み込むコマンド（vim終了後持続しない）
:so https://iadw.in/vimrc.tmp
```

後輩　「なるほど、これは覚えやすいですね！」
後輩　「自分ドメイン持ってないですけど、他にいい方法ありますか？」
自分　「bit.lyなど短縮URLサービスを使って短くできますよ」
自分　「URLのパスの指定ができないけど。。」
後輩　「なるほど、、パスをさえ覚えばいいですか😅」

## 参考

#### vim を開いた状態で以下のコマンドを実行する

```viml
"自分のvimコンフィグを読み込むコマンド（vim終了しても持続する）
:so https://iadw.in/vimrc

"自分のvimコンフィグを読み込むコマンド（vim終了後持続しない）
:so https://iadw.in/vimrc.tmp
```

#### vimrc 内容

https://github.com/adwinying/adwinying.github.io/blob/master/public/vimrc

#### vimrc.tmp 内容

https://github.com/adwinying/adwinying.github.io/blob/master/public/vimrc.tmp