vim 影响字符串的空符号 ^@

vim null symbol effecting string ^@

我正在使用以下函数来获取选定的测试

let s:drawscript = "somerandom.py"

func! GetSelectedText()
  normal gv"xy
  let result = getreg("x")
  normal gv
  return result
endfunc

vnoremap <tab><tab> :<c-u>call Box(GetSelectedText())<CR>
func! Box(text)
    let s:b = '"' . a:text . '"'
    echom s:b
    " exec boxcmd
    "echom 'hi'
    let c = ["python3", s:drawscript, s:b]
    execute ":.!".join(c, " ")
endfunc

我正在尝试将文本 selected 传递到我的 python 文件,当我只有 select 1 行时它有效,但是当我 select 多行时行,selected 文本中有“^@”符号导致自动执行,从而导致错误。我只想将我 select 编辑到 .py 文件中的文本传递进来。

这是转义 shell 的特殊字符的问题。当您正确地想到引用文本时,您错过了转义行分隔符。有一个函数 shellescape() 可以解决这个问题,所以你可以替换

    let s:b = '"' . a:text . '"'

来自

    let s:b = shellescape(a:text, 1)