Vimのsubstituteを使ってcat-nやnlのように行番号をつける

テキストエディタ(Vimやその他)
【MV】鈴木雅之『DADDY ! DADDY ! DO ! feat. 鈴木愛理』TVアニメ「かぐや様は告らせたい?~天才たちの恋愛頭脳戦~」OP主題歌

アニメ『かぐや様は告らせたい?~天才たちの恋愛頭脳戦~』(2020)
OP主題歌 鈴木雅之 「DADDY ! DADDY ! DO ! feat. 鈴木愛理」
です。

第2期ももう終盤ですが、やっぱかぐや様、神アニメですね。
かぐや様ももちろん、かわいー、ですが、もう会長と石上君のかっこよさときたら。じゅるり。

今回は、タイトルにあるとおり、Vimだけでテキストに行番号をつけてみます。

かぐや様2期では選挙戦がありましたが、
めでたく就任ってことでJFKの大統領就任演説のテキストに、行番号をつけてみます。

ソースはここ
John F. Kennedy’s Inaugural Address
https://en.wikisource.org/wiki/John_F._Kennedy%27s_Inaugural_Address

演説の冒頭部分です。

Vimだけで行番号をつけるってのは、以下のような:set numberのことではなく、

:%!cat -n的なやつです。

Windowsだとcat -n やnlが使えないときってときどきありますよね。
まあそんなときは、きっとVimも使えないのでしょうが、かろうじてVimだけは使えるっていう稀有な環境なら、Vimのsubstituteをつかってcat -nやnlと同じように行番号をつけることができます。

substituteって文字列置換なので、行頭に番号を入れるのは造作もないことですよね。
たとえば、行頭に0000000を入れてみましょう。

:%s/^/0000000^I/


(^Iは、タブです。)
実行すると、

決まっている番号なら、このように正規表現を使って、ものすごく簡単に行頭に番号を追加できてしいます。

では、各行の行番号を追加したときはどうすればよいでしょう?

やはりsubstituteが使えます。substituteが置換後の文字列を関数にしてやれば良いのです。

s/置換前/\=関数/

置換後を関数にするには、\=をつけてやるだけでよいので簡単ですね。

あと、行番号を返すline(“.”)を使い、書式をきれいにするため、printfも使って置換してみましょう。

:%s/^/\=printf("\%07d\t",line("."))/

コメント

タイトルとURLをコピーしました