我有一个如下所示的vimscript函数,该函数执行搜索并替换当前选中/复制的文本缓冲区并将其粘贴到文件中。
function Repaste(s, ...)
for i in a:000
let sub = substitute(getreg('"'), a:s, i, 'ge')
let sane = substitute(sub, '[^[:print:]]', '\n', 'ge')
call append(line('.'), sane)
endfor
endfunction
command -nargs=* RP call Repaste(<f-args>)
调用此函数时,我得到^@
个字符代替新行。
这是被选中/复制的文本的示例
set cindent
以下是执行命令的示例
:RP c d e f
这是输出
set findent ^@
set eindent ^@
set dindent ^@
我如何删除这些字符以及为什么它们会出现?谢谢。
答案 0 :(得分:3)
append()
函数是底层函数。 :help append()
显示{expr}
作为 String 类型作为一个文本行插入 ,而不考虑其内容中的换行符。 ^@
是一行中\n
的表示; cp :help <Nul>
。
如果您确实想继续使用append()
,则必须提供 List 类型;为此,您可以split()
您的字符串:
call append(line('.'), split(sane, '\n'))
但是,我认为您最好使用更高级别的函数来插入创建的行,并使用:put
和表达式寄存器来插入变量的内容:
put =sane
这将:
'[
和']
4 more lines
(如果插入的号码超过了'report'
的阈值)。答案 1 :(得分:0)
用append
替换对put=sub
的调用会产生所需的结果。