71

Vimで開いたファイルの行の範囲に行番号を追加するにはどうすればよいですか? これは行番号を表示するだけ:set nuですが、実際にはファイルの各行の前に行番号を追加しますか?

4

7 に答える 7

116

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

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

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


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

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

数値と行の古いテキストの間に文字列を追加したい場合は、.それを (VimL で) 数値式に連結するだけです。

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

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

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

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

于 2008-10-31T10:18:40.870 に答える
33

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

 :%!cat -n

または、部分選択だけが必要な場合は、領域を視覚的に選択し、次のように入力します。

 :!cat -n

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

 :'<,'>!cat -n

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

于 2008-10-31T07:10:03.340 に答える
24

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

:%!nl
于 2008-10-31T07:12:59.763 に答える
6

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

:%!cat -n

また

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

ただし、MS-DOS、win9x、win2000 で 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
set printoptions=number:yvimrc

于 2008-10-31T07:12:07.407 に答える
4

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

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

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

:%!awk '{print 1000+NR*10,$0}'
于 2011-01-12T22:10:05.457 に答える
3

VisIncr」プラグインは、増加する数字の列 (または文字、日付、ローマ数字など) を挿入するのに適しています。数値の形式、パディングなどを制御できます。そのため、すべての行の前に「1」を挿入し (または視覚ブロック挿入を介して:s) :g、その列を視覚ブロック モードで強調表示し、プラグインからコマンドの 1 つを実行します。

于 2008-11-02T00:09:35.027 に答える