>我有一个如下所示的 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 ^@
如何删除这些字符以及它们为什么会出现?谢谢。
append()
函数是一个低级函数。:help append()
显示作为字符串类型的{expr}
作为文本行插入,而不考虑其内容中的换行符。^@
是线条内n
的表示;CP:help <Nul>
.
如果你真的想继续使用append()
,你必须提供一个List类型;要获得这个,你可以split()
你的 String:
call append(line('.'), split(sane, 'n'))
但是,我认为最好使用更高级别的函数插入创建的行,使用带有表达式寄存器的:put
插入变量的内容:
put =sane
这将:
- 自动处理嵌入式换行符
- 将更改标记设置为插入的文本
'[
和']
- 打印消息
4 more lines
(如果插入的号码超过'report'
阈值(。
将调用替换为append
put=sub
将生成所需的结果。