背景
プロジェクトが大きくに連れて、ソースの統一性が出てくる。しかし、メンバーでは様々なエジターをつかっている(vi(自分)、vscodeなど)。最近、editorconfig (https://editorconfig.org) もよく聞かれ、サポートするエジターも多い。そのため、プロジェクトに editorconfig を入れようと思っていた。
ここで2つ課題が出てきた
1. 自分のvi環境はplugin管理ソフトが入っていない(使いたくない)
2. 既存のソースはどのように editorconfig を適用する
ここで、自分の解決方法を簡単にまとめる
環境
以下は自分の環境
OS: CentOS Linux release 7.5
VIM - Vi IMproved 7.4
editorconfigをインストール・設定
vim-editorconfigのgithub(https://github.com/editorconfig/editorconfig-vim) からarchive (https://github.com/editorconfig/editorconfig-vim/archive/master.zip) をとってくる
ファイルを展開したフォルダにある autoload
doc
plugin
の内容を全てそれぞれ ~/.vim
の配下に該当のフォルダーにコピーする
$ cd editorconfig-vim-master
$ cp -r ./autoload/* ~/.vim/autoload/
$ cp -r ./doc/* ~/.vim/doc/
$ cp -r ./plugin/* ~/.vim/plugin/
これで editorconfigのpluginのインストールが完了した。
vim を実行して、以下のコマンドで plugin一覧が確認でき、そこに editorconfigがあるかどうか確認できる
:help local-additions
既存のソースをeditorconfigの設定を適用する
色々探して、このようなもの (https://github.com/jedmao/eclint) を見つけたが、複雑そうで、やりたいことよりはるかに機能が多いいのでやめた。
手動でviを持ちファイルを開けたら、強制的に保存 :wq
すれば、ルールが適用できるようにわかったので、vimのbatchmodeで実施すれば、やりたいことができるはずである。
実際このようにテストした。
テストの準備
テストフォルダーに以下の test.py を作成する
def test()$
echo "This is a test" $
$
echo 行にわざとスペースと最後にスペースのみの行を追加した。
ソースをeditconfigルールを適用
同じテストフォルダーに .editconfigファルを作る
# top-most EditorConfig file
root = true
# Unix-style newlines with a newline ending every file
[*]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = false
max_line_length = 0
trim_trailing_whitespace = true
# Python
[*.py]
indent_size = 4
indent_style = space
max_line_length = 120
この状態で、viにeditoconfigを正しくインストールできれば、新しいファイルや既存ファイルの編集するあと、保存すると editconfigで決めたルールに変形されている。
試したいのはコマンドラインだけで、既存んのファイルを整形できるかどうか。以下のように test.pyをtest.py.orgを保存して、コンマンドラインでviを適用してみる
$ cp test.py test.py.org
$ vi -c ":wq" test.py
すると、test.py ファイルが変形されたことが確認できる
$ diff test.py test.py.org | cat -A
2c2$
< echo "This is a test"$
---$
> echo "This is a test" $
このように、フォルダー全体の .py ファイルに適用したい場合、以下のように実行できる
$ find -name <対象のフォルダー> -exec vim -c ":wq" {} ¥;
または、ファイル全体をreindent
をしたいときに
$ find -name <対象のフォルダー> -exec vim -c ":bufdo normal gg=G:wall" -c ":wq" {} ¥;
まとめ
vi に plugin managerなしで、editorconfigのインスとる仕方を説明した。また、既存フォルダーにたいして、新しいeditorconfigで決めた整形のルールを適用する方法を説明した。
参考になれば嬉しいと思います。