例如,这是我的功能:
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