質問

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

役に立ちましたか?

解決

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

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

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


視覚的な選択範囲の行の前に数字を追加し( V +移動)、42から番号を付けたいとします。

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

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

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

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

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

とにかく、さらに情報が必要な場合は、vimヘルプを開きます::h:s をクリックし、リンク( | subreplace-special | 、...、< code> | submatch()| )

他のヒント

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

 :%!cat -n

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

 :!cat -n

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

 :'<,'>!cat -n

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

GNUシステムの場合:外部 nl バイナリ:

:%!nl

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

:%!cat -n

または

:%!awk '{print NR,
fu! LineIt()
  exe ":s/^/".line(".")."/"
endf
}'

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

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

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

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

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

<*>

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

  

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

まず、必要に応じて既存の行番号を削除できます。

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

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

:%!awk '{print 1000+NR*10,<*>}'

&quot; VisIncr&quot; プラグインは列の挿入に適しています一般的なインクリメント数(または文字、日付、ローマ数字など)。数値の形式、パディングなどを制御できます。そのため、「1」を挿入します;すべての行の前(:s または:g またはvisual-block insertを使用)で、その列をvisual-blockモードで強調表示し、プラグイン。

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

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

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

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

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

PS: vim の力:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top