Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

vi/vim と editorconfig

$
0
0

背景

プロジェクトが大きくに連れて、ソースの統一性が出てくる。しかし、メンバーでは様々なエジターをつかっている(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) をとってくる

ファイルを展開したフォルダにある autoloaddocpluginの内容を全てそれぞれ ~/.vimの配下に該当のフォルダーにコピーする

shell
$ cd editorconfig-vim-master
$ cp -r ./autoload/* ~/.vim/autoload/
$ cp -r ./doc/* ~/.vim/doc/
$ cp -r ./plugin/* ~/.vim/plugin/

これで editorconfigのpluginのインストールが完了した。

vim を実行して、以下のコマンドで plugin一覧が確認でき、そこに editorconfigがあるかどうか確認できる

vim
:help local-additions

既存のソースをeditorconfigの設定を適用する

色々探して、このようなもの (https://github.com/jedmao/eclint) を見つけたが、複雑そうで、やりたいことよりはるかに機能が多いいのでやめた。

手動でviを持ちファイルを開けたら、強制的に保存 :wqすれば、ルールが適用できるようにわかったので、vimのbatchmodeで実施すれば、やりたいことができるはずである。

実際このようにテストした。

テストの準備

テストフォルダーに以下の test.py を作成する

python
def test()$
    echo "This is a test"   $
$

echo 行にわざとスペースと最後にスペースのみの行を追加した。

ソースをeditconfigルールを適用

同じテストフォルダーに .editconfigファルを作る

editorconfig
# 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を適用してみる

shell
$ cp test.py test.py.org
$ vi -c ":wq" test.py

すると、test.py ファイルが変形されたことが確認できる

shell
$ diff test.py test.py.org | cat -A
2c2$
<     echo "This is a test"$
---$
>     echo "This is a test"   $

このように、フォルダー全体の .py ファイルに適用したい場合、以下のように実行できる

shell
$ find -name <対象のフォルダー> -exec vim -c ":wq" {} ¥;

または、ファイル全体をreindentをしたいときに

shell
$ find -name <対象のフォルダー> -exec vim -c ":bufdo normal gg=G:wall" -c ":wq" {} ¥;

まとめ

vi に plugin managerなしで、editorconfigのインスとる仕方を説明した。また、既存フォルダーにたいして、新しいeditorconfigで決めた整形のルールを適用する方法を説明した。

参考になれば嬉しいと思います。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>