Vim でテキスト整形。縦のラインを揃える方法

Align a block of code on the basis of a single character

これは衝撃を受けた。忘れないようにしたい。

const service = require('./service');
const baseService = require('./baseService');
const config = require('../config');
const Promise = require('bluebird');
const errors = require('../errors');

↑これを
↓こうしたいという例

const service     = require('./service');
const baseService = require('./baseService');
const config      = require('../config');
const Promise     = require('bluebird');
const errors      = require('../errors');

コマンド:
ggVG
:'<,'>normal f=5i <CR> ← iの後はスペース
4kl
<C-v>4j$
<.

縦のラインを揃えたいときのテクニック。基準のラインをいったん適当に引き離しておいく。そこから 基準のラインでCtrl-V で矩形選択。< を使ってすべての行が基準に達するまで戻してやるだけ。

  1. ヴィジュアルモードで選択
  2. : でコマンドモードに入る。'<,'>normal f=5i ←最後はスペース。 すべての行に対して、f= で = に移動し絵 5i でインサートモードに入って5個分※のスペースを挿入。※ 十分な余白を取れればいい。一番動かしたい行、ここではconfigとerrorsの=の前にスペースを5取りたいから、5以上であれば多く構わない。
  3. 最終的に置きたい位置にある19列目(一番長い const BaseSearvice の後のスペースを1つ開けたあとの位置)で Ctrl+V を押す。そして全行、`$’ を使って基準点から行末までを選択する。
  4. < を1回、2回目以降は . で全体を左に戻してやると、基準よりも左に行かずに、きっちり縦のラインが揃う。

この例は基準が = だから f= を使える。1つ1つ手動でやるしかないパターンもあるだろう。とにかく引き離すことができればそれでいい。それさえできれば、あとは矩形選択 Ctrl+V<.のリピートで簡単に縦の位置が揃う。

Vim はプラグインを使わずともこういうことが簡単にできてしまう。もちろんもっと複雑なケースにはプラグインを使ったほうが早いだろうけど、デフォルトで備わっている機能でかなりことができる。面白い。

Color Scheme の設定ファイルなどを見るとキレイに揃えている人がいる。たいそうめんどくさそうだと思っていたが、この方法を使えば簡単に揃えらる。

この例は = の右側のコントロールだが、左側はどうすればいいかわからない。そうしたいときが頻繁にあるとも思えないが、方法があるのであれば知っておきたい。