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

两件事:Vim 在内部将字节(即CTRL-@)存储为<NL>==CTRL-J出于实现原因(文本存储为 C 字符串,它们以空字符结尾)。

此外,该函数仅在将文本行列表作为其第二个参数append()传递时才插入多行。单个字符串将作为一行插入,并且(由于翻译),换行符将显示为.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 回答