たとえば、ここに私の機能があります:
function! Test()
python << EOF
import vim
str = "\n\n"
vim.command("let rs = append(line('$'), '%s')"%str)
EOF
endfunction
そして、私:call Test()
が見ると、「^@^@」と表示されます。
なぜこれが起こるのでしょうか? また、元の '\n' をどのように使用できますか?
たとえば、ここに私の機能があります:
function! Test()
python << EOF
import vim
str = "\n\n"
vim.command("let rs = append(line('$'), '%s')"%str)
EOF
endfunction
そして、私:call Test()
が見ると、「^@^@」と表示されます。
なぜこれが起こるのでしょうか? また、元の '\n' をどのように使用できますか?
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