例如,这是我的功能:
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' ?
两件事: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