【vim-endwise】Vimにendを自動挿入するプラグインを入れた
いい感じ。これができなきゃrubyやめる。
成果物
情報源
Vim8
Vimのバージョン8からプラグインを導入する仕組みができた。これまではサードパーティ製ツールでしか存在しなかったので嬉しい。
pulgins
配置パス | 概要 |
---|---|
~/.vim/pack/{mypackage}/start/{myplugin}/ |
起動時にruntimepath に追加されロードされる。 |
~/.vim/pack/{mypackage}/opt/{myplugin}/ |
:packadd myplugin とすることでプラグインをロードできる。特定のファイル形式の場合にのみ使うときもここへ。 |
今回はRuby言語ファイル.rb
のときのみtpope/vim-endwiseプラグインを読込たいのでopt
に配置しよう。
前提
vim8をインストールしておく。たぶんapt
で入るはず。
$ apt search vim
...
vim/stable 2:8.1.0875-5 armhf
Vi IMproved - enhanced vi editor
私は自前でビルドした。apt
のはクリップボードにコピーできないから。最新のはどうなっているのか知らんけど。
方針
基本的にプラグインマネージャーからVim8標準のパッケージ機能に移行した話を参考にする。
dotfiles
で管理しない
面倒くさそうだから。システム側のパスをリンクにしちゃっているのも怖い。dotfiles
やーめた! とかいって削除したら消えちゃうんじゃないの?
あと、バージョン固定というのが微妙。別のOSを使う時になると古いバージョンは使えないってことが稀によくある。なので結局、ツールひとつひとつを最新にして、その最新版の設定ファイル仕様にあわせたものに書き換えねばならない。前にCLIファイラrangerでハマった。ようするに一発で環境構築できるなんて甘言は真に受けないほうがいい。
ツールのバージョンはそのOSで使える最新にしたほうがいい。となるとdotfiles
による管理のメリットがない。むしろ面倒な手間をかけて、結局は使えないものを作り込むハメになる。それなら別の環境に移行することになったとき、ゼロからやったほうがマシである。
よってdotfiles
は使わない。
git submodule しない
git clone
でやる。このほうが圧倒的に簡単。dotfiles
で管理する必要がないならgit clone
でやったほうがいい。
手順
1. プラグイン配置ディレクトリを作る
プラグインはオプションにしたい。なので~/.vim/pack/{mypackage}/opt/{myplugin}/
に配置する。このディレクトリを用意しよう。
まずは名前を決める。{mypackage}
を適当にruby
としてディレクトリを作る。
cd ~/.vim MY_PKG=ruby mkdir -p pack/$MY_PKG/opt
2. プラグインをgit clone
する
cd pack/$MY_PKG/opt git clone https://github.com/tpope/vim-endwise
3. ~/.vimrc
でpackadd
する
vim ~/.vimrc
以下でvim-endwise
プラグインを遅延ロードできる。
packadd vim-endwise
このとき、ファイルの拡張子が.rb
のときだけロードするようにしたい。
そのためには次のように書く。
filetype plugin indent on function! s:setup_ruby() packadd vim-endwise endfunction augroup MyAutoCmd autocmd! autocmd MyAutoCmd BufNewFile,BufRead *.rb set filetype=ruby autocmd FileType ruby call s:setup_ruby() augroup END
なお、すでに以下のような設定をしてある。それとは別に上記を追記した。
augroup fileTypeIndent autocmd! autocmd BufNewFile,BufRead *.rb setlocal tabstop=2 softtabstop=2 shiftwidth=2 expandtab smartindent autoindent packadd vim-endwise augroup END
Rubyのインデントはスペース2文字。それが慣例的らしい。
使ってみる
vim a.rb
def
, def a
, def a(b)
と書いた後にEnter
キーを押下すると次の行にend
が追記された。成功!
def a end
もし~/.vimrc
にfiletype plugin indent on
を追加しなかったら次のようなバグが起こる。if
, do
, while
のときはend
の前にインデントが入ってしまう。
if end
以下ISSUEによりfiletype plugin indent on
の設定が必要であることが判明した。
ちゃんと設定したら以下のようになった。OK!
if end
所感
やはり苦戦した。vimは魔窟なので触るのが怖い。vimプラグインとかvimスクリプトとか、ハマりだしたら大変なことになりそう。その前にVSCodeのほうもいい感じに環境構築したい。
ああ、一体いつになったら書けるんだ。書きたい。ruby書きたい。でもend
は書きたくない。
対象環境
- Raspbierry pi 4 Model B
- Raspberry Pi OS buster 10.0 2020-08-20 ※
- bash 5.0.3(1)-release
- vim 8.1
- ruby 3.0.2
$ uname -a Linux raspberrypi 5.10.52-v7l+ #1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU/Linux