6

たとえば、ここに私の機能があります:

function! Test()
python << EOF
import vim
str = "\n\n"
vim.command("let rs = append(line('$'), '%s')"%str)
EOF
endfunction

そして、私:call Test()が見ると、「^@^@」と表示されます。
なぜこれが起こるのでしょうか? また、元の '\n' をどのように使用できますか?

4

1 に答える 1

9

2 つのこと: Vim は内部的にnullバイト (つまりCTRL-@) を<NL>==CTRL-Jとして実装上の理由から格納します (テキストは null で終わる C 文字列として格納されます)。

さらに、この関数は、2 番目の引数としてテキスト行のリストappend()が渡された場合にのみ、複数の行を挿入します。1 つの文字列が1 行として挿入され、(翻訳のため) 改行が のように表示されます。CTRL-@

したがって、Python リストを作成するか、split()Vim 関数を使用して単一の文字列をリストに変換することにより、リストを渡す必要があります。

function! Test()
python << EOF
import vim
str = "\n"
vim.command("let rs = append(line('$'), split('%s', '\\n', 1))"%str)
EOF
endfunction
于 2013-05-28T11:59:04.743 に答える