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 で矩形選択。<
を使ってすべての行が基準に達するまで戻してやるだけ。
- ヴィジュアルモードで選択
- : でコマンドモードに入る。
'<,'>normal f=5i
←最後はスペース。 すべての行に対して、f=
で = に移動し絵5i
でインサートモードに入って5個分※のスペースを挿入。※ 十分な余白を取れればいい。一番動かしたい行、ここではconfigとerrorsの=の前にスペースを5取りたいから、5以上であれば多く構わない。 - 最終的に置きたい位置にある19列目(一番長い
const BaseSearvice
の後のスペースを1つ開けたあとの位置)でCtrl+V
を押す。そして全行、`$’ を使って基準点から行末までを選択する。 <
を1回、2回目以降は.
で全体を左に戻してやると、基準よりも左に行かずに、きっちり縦のラインが揃う。
この例は基準が =
だから f=
を使える。1つ1つ手動でやるしかないパターンもあるだろう。とにかく引き離すことができればそれでいい。それさえできれば、あとは矩形選択 Ctrl+V
と <
と .
のリピートで簡単に縦の位置が揃う。
Vim はプラグインを使わずともこういうことが簡単にできてしまう。もちろんもっと複雑なケースにはプラグインを使ったほうが早いだろうけど、デフォルトで備わっている機能でかなりことができる。面白い。
Color Scheme の設定ファイルなどを見るとキレイに揃えている人がいる。たいそうめんどくさそうだと思っていたが、この方法を使えば簡単に揃えらる。
この例は = の右側のコントロールだが、左側はどうすればいいかわからない。そうしたいときが頻繁にあるとも思えないが、方法があるのであれば知っておきたい。