11

Vimバッファーの行数だけを取得する方法はありますか?必ずしも現在の行数ではありませんか?

1つを使用line('$')すると、現在のバッファの最後の行の番号、つまり行の量を取得できます。でgetbufline({expr}, 1 , '$')与えられるバッファの行文字列のリストを取得できます。{expr}リストのサイズは、行数です。

を使用getbuflineすると、ファイルに含まれる行数を取得するためだけに、ファイル全体をメモリにコピーするオーバーヘッドが発生します。line仕事をしますが、現在のバッファに対してのみ機能します。

これは、インタラクティブではなくline('$')、可能な限り最小限のオーバーヘッドで、スクリプトから実行されることになっています。

4

1 に答える 1

8

vimがPythonサポートでコンパイルされていて、7.3.569より古い場合は、次を使用できます。

python import vim
let numlines=pyeval('len(vim.buffers['.({expr}-1).'])')

。Pythonをサポートする古いvimsでは、次を使用できます

python import vim
python vim.command('let numlines='+str(len(vim.buffers[int(vim.eval('{expr}'))-1])))

。テストの結果、11 MiBログファイルの場合、最初のソリューションは209倍高速であることがわかりましたlen(getbufline({expr}, 1, '$'))(0.000211対0.044122秒)。のバッファはvim.buffers、1ではなく0から始まるインデックスが付けられていることに注意してください。

于 2013-01-27T05:28:56.973 に答える