webdevqa.jp.net

vimのソースコードに行番号を追加する

Vimの行の範囲に行番号を追加するにはどうすればよいですか? 「:set nu」のようではありません-これは数字を表示するだけですが、ファイルには追加しません。

70
dkretz

_:%s/^/\=line('.')/
_

編集:コメントを要約します。

このコマンドは必要に応じて微調整できます。


視覚的な選択(V + move)の行の前に番号を追加し、番号を42から開始するとします。

_:'<,'>s/^/\=(line('.')-line("'<")+42)/
_

番号と行の古いテキストの間に文字列を追加する場合は、それを(VimLの_._で)number-expressionに連結します。

_:'<,'>s/^/\=(line('.')-line("'<")+42).' --> '/
_

これをテキストとしてソートする必要がある場合、結果をゼロで埋めることができます。これは、_0001, 0002_...の代わりにprintf for _1, 2_...を使用して実行できます。例:

_:%s/^/\=printf('%04d', line('.'))/
_

とにかく、さらに情報が必要な場合は、vimヘルプを開いてください:_:h :s_とリンク(_|subreplace-special|_、...、|submatch()|)をたどってください

109
Luc Hermitte

cat -nは、入力に行番号を追加します。現在のファイルをcat -nにパイプして、現在のバッファーをstdoutに出力するものに置き換えることができます。幸いなことに、この複雑なソリューションはvimで10文字未満です。

 :%!cat -n

または、サブセレクションのみが必要な場合は、領域を視覚的に選択して、これを入力します。

 :!cat -n

これにより、視覚的な選択マーカーが自動的に配置され、入力すると次のようになります。

 :'<,'>!cat -n

行番号を消去するには、control-vを使用することをお勧めします。これにより、視覚的に長方形を選択でき、xを使用してその長方形を削除できます。

33
Jerub

GNU system:外部nlバイナリの場合:

:%!nl
22

Unixライクな環境では、vimにはシェルとの使いやすいインターフェイスがあるため、catまたはawkを使用して行番号を簡単に生成できます。
From Vim Tip28

:%!cat -n

または

:%!awk '{print NR,$0}'

しかし、win9x、win2000のMS-DOSでvimを使用すると、これらのツールキットが失われます。これはvimによってのみこれをアーカイブする非常に簡単な方法です:

fu! LineIt()
  exe ":s/^/".line(".")."/"
endf

または、アルファベットで構成されたシーケンスは上記と同じくらい簡単です:

exe "s/^/".nr2char(line("."))."/" 

Substを使用することもできます:

:g/^/exe ":s/^/".line(".")."^I/"

また、ファイルに追加せずに行のみを印刷することもできます。

「特に大きなソースファイルを編集して、行番号を紙に印刷するのに役立つことがあります。
これを行うには、オプション:set printoptions=number:yを使用して有効にし、:set printoptions=number:nを使用してこの機能を無効にすることができます。
行番号を常に印刷する必要がある場合は、vimrcset printoptions=number:y行を配置します。 "

6
VonC

まず、必要な場合は既存の行番号を削除できます。

:%s/^[0-9]*//

次に、行番号を追加できます。 NRは、1から始まる現在の行番号を参照するので、必要な番号を取得するために計算を行うことができます。次のコマンドは、4桁の行番号を提供します。

:%!awk '{print 1000+NR*10,$0}'
4
Lance Roberts

"VisIncr" プラグインは、一般的な数字(または文字、日付、ローマ数字など)の増分列の挿入に適しています。数値形式、パディングなどを制御できます。したがって、すべての行の前に「_」を挿入します(:sまたは:gまたはvisual-block insert)、visual-blockモードでその列を強調表示し、プラグインからコマンドの1つを実行します。

3
Brian Carper

この優れた答え を使用して行番号を挿入した後、誰かがタブ(またはいくつかのスペース)を挿入したい場合、ここに方法があります。エスケープモードに入ったら、次の操作を行います。

:%s/^/\=line('.').'    '/

^は行の始まりを意味し、%sは置換のディレクティブです。したがって、各行の先頭に行番号を付けて4つのスペースを追加し、置換前の行の内容をすべて入れて、ファイル内のすべての行に対してこれを行うと言います。

これにより、自動的に置き換えられます。または、コマンドに確認を求める場合は、次を実行します。

:%s/^/\=line('.').'    '/igc

PS:vimの力:)

0
kmario23