摆脱vim变量中的空字符?

Sam*_*m R 8 linux vim

我正在尝试在我使用的平台之一上修复 vim 的 Backspace 行为。我bad_platform从系统的get_platform命令中得到了这个平台的名称(称之为)。按照 中的建议:help fixdelete,并将其与如何执行系统命令的知识相结合,我将以下内容添加到我的 .vimrc 中:

let platform_name = system("get_platform")
if platform_name == "bad_platform"
  set t_kb=^?
  fixdel
endif
Run Code Online (Sandbox Code Playgroud)

这没有用。为了找出原因,我打开了一个 Vim 会话并执行了:echom platform_name. 这给出了结果bad_platform^@^@我猜 NULL 字符在哪里,而不是从字面上键入“shift-6 shift-2”得到的两个字符。

不幸的是,这带来了一个问题。我无法将其更改为== "bad_platform^@",因为在获取 .vimrc 时,它似乎^@被解释为行尾字符。这意味着let platform_name = substitute(platform_name,"\^@","","")在 之前添加if也不起作用。

我该如何处理?提前致谢。

Chr*_*ndt 9

一些替代方案:

  1. 删除\nusing substitute(string, '\n$', '', '') See:h NL-used-for-Nul技术背景

  2. 删除所有控制字符: substitute(string, '[[:cntrl:]]', '', 'g')

  3. 使用 match ( =~) 操作而不是 equal ( ==) 进行比较

  4. 从 system() 命令中去除输出的最后一个字节

    :let a=system('foobar')[:-2]