Vimメモ : vim-easy-alignでテキスト整形
テキスト整形
vim-easy-align
というプラグインを使えば、例えば以下のテキストを
Paul,McCartney,1942 George,Harrison,1943 Ringo,Starr,1940 Pete,Best,1941
以下のように簡単にテキスト整形できる。
Paul, McCartney, 1942 George, Harrison, 1943 Ringo, Starr, 1940 Pete, Best, 1941
基本的な使い方
下図は基本的な使い方のフローだが、ビジュアルモードでテキストを選択後にga
キーを入力、その後テキスト整形のルールを入力して整形するのが簡単そう。
まず、ga
でEasyAlignを起動するように下記設定をvimrc
に追加する。
" Start interactive EasyAlign in visual mode (e.g. vipga) xmap ga <Plug>(EasyAlign) " Start interactive EasyAlign for a motion/text object (e.g. gaip) nmap ga <Plug>(EasyAlign)
冒頭の例で説明すると、Shift+v
の行選択ビジュアルモードで対象行となる4行を選択してからga
キーを入力すると、Vimのコマンドラインに以下のようなコマンドが表示される。
:EasyAlign (_)
その後、続けて*,
と入力すればテキスト整形される。
ここで*,
の意味だが、2文字目の,
はデリミタを表す。例えば元の文字列が,
ではなく|
で句切られていたとすれば、*|
と入力すればよい。
デリミタとしてデフォルトで定義されているものは<Space>
, =
, :
, .
, |
, &
, #
, ,
である。
1文字目の*
は何番目のデリミタに対してテキスト整形を適用するかを表す。*
は全てを対象にするが、1,
と入力すれば(デフォルトでは1なので,
だけでもよい)、
Paul, McCartney,1942 George, Harrison,1943 Ringo, Starr,1940 Pete, Best,1941
のように1番目の,
に対してのみ整形され、2,
と入力すれば
Paul,McCartney, 1942 George,Harrison, 1943 Ringo,Starr, 1940 Pete,Best, 1941
のように2番目の,
に対してのみ整形される。
それ以外には-,
で後ろから数えて1番目を対象、-2,
で後ろから数えて2番目を対象のような指定もできる。
また**,
という指定もあり、この場合は左寄せ、右寄せが交互にテキスト整形される(使い所がよくわからないが)。
Paul, McCartney, 1942 George, Harrison, 1943 Ringo, Starr, 1940 Pete, Best, 1941
整形オプション
ga
入力後、デリミタを入力する前に以下のような整形オプションを指定できる(オプションの詳細は元ページに詳しく書いてある)。
キー | オプション | 説明 |
CTRL-F | filter | g/../ でマッチ行のみ対象。v/../ はマッチ行以外 |
CTRL-I | indentation | インデントの調整。値はshallow, deep, none, keep |
CTRL-L | left_margin | 左マージンの数値を指定。文字の場合は文字が追加 |
CTRL-R | right_margin | 右マージンの数値を指定。文字の場合は文字が追加 |
CTRL-D | delimiter_align | デリミタの調整。値はleft, center, right |
CTRL-U | ignore_unmatched | デリミタを含まない行を無視するか。値は0, 1 |
CTRL-G | ignore_groups | コメント行などを無視するか。値は[], ['String'], ['Comment'], ['String', 'Comment'] |
CTRL-A | align | 細かい整形の調整。値は(/[lrc]+\*{0,2}/) |
<Left> | stick_to_left | デリミタを左寄せ |
<Right> | stick_to_left | デリミタを右寄せ |
<Down> | ∗_margin | デリミタ周辺のマージンなし |
<Enter> | left/right/center整形モードの切り替え |
※<Left>
などは矢印キー
Live Interactiveモード
上記の整形オプションは実際に確認してみないとわからないことが多く、何度も結果を確認するのも大変なのでLive Interactiveモードを使用するのがよい。
Live Interactiveモードへはga
を入力後に<C-p>
を押すことで移行でき、コマンドラインの表示が以下のように変わる。
:LiveEasyAlign (_)
Live Interactiveでは整形オプションなどがリアルタイムで反映されるので自分の意図した結果になるのかが確認しやすい。注意点として、Live Interactiveモードを終了するためにはデリミタを2回入力する必要がある。
正規表現
デリミタとして正規表現を使用することも可能。デリミタ入力前に<C-/>
か<C-x>
を押すとコマンドラインの表示が以下のようになる。
Regular expression:
ここで例えば[0-9]
を入力すれば、以下のように数値をデリミタとして整形できる。
Paul, McCartney, 1 9 4 2 George, Harrison, 1 9 4 3 Ringo, Starr, 1 9 4 0 Pete, Best, 1 9 4 1
- 作者: Drew Neil,新丈径
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2013/08/29
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (15件) を見る