Pythonステートメントを使用して現在の行を変更する次のサンプルコードがあります。
:py import vim; vim.current.line="["+vim.current.line+"]"
現在のファイルの各行に対してこのステートメントを実行するにはどうすればよいですか?
関連:VimでPythonをどのように使用できますか?スタックオーバーフロー時
Pythonステートメントを使用して現在の行を変更する次のサンプルコードがあります。
:py import vim; vim.current.line="["+vim.current.line+"]"
現在のファイルの各行に対してこのステートメントを実行するにはどうすればよいですか?
関連:VimでPythonをどのように使用できますか?スタックオーバーフロー時
回答:
pydo
Vim 7.4以降で使用できるコマンドを使用できます。マニュアルでは、コマンドが私よりもうまく機能する方法が説明されています。
:[範囲] pydo {body}
[範囲]の各行に対してPython関数 "def _vim_pydo(line、linenr):{body}"を実行します。関数の引数は、末尾の<EOL>なしで各行のテキストに順番に設定され、現在の行番号。関数は文字列またはNoneを返す必要があります。文字列が返された場合、それは現在のターンの行のテキストになります。[範囲]のデフォルトはファイル全体: "1、$"です。
たとえば、次のようなコマンドを使用できます。
:python import vim
:pydo vim.current.buffer[linenr - 1] = '[%s]' % line
linenr - 1
行が原因ビットが存在するvim.current.buffer
0のインデックスが付されているが、Vimは1から行をカウントし始めます。
すばらしいのは、カスタムコマンドを簡単に定義して、さまざまな行でPythonコードを実行できることです。
command! -range=% BracketLines
\ <line1>,<line2>pydo vim.current.buffer[linenr - 1] = '[%s]' % line
現在のバッファvim.current.buffer
は、反復可能であるを使用して取得できます。for
ループを使用して各行を取得できます。
それらに割り当てることにより、行を変更できます。まとめると、次のようになります。
:py from vim import *
:py for i, line in enumerate(current.buffer): current.buffer[i] = '[%s]' % line
もご覧ください:help python-buffer
。