vimscript 中的空寄存器
如果用户输入寄存器名称,如何清空寄存器?
佩let r = inputdialog(toregister)
let @r = ""
(r = 从 inputdialog 接收的字符)
这也不起作用:让 @{r} = ""
How do I empty a register if the user enters the name of the register?
p.e.let r = inputdialog(toregister)
let @r = ""
(r = character received from inputdialog)
This doesn't work either:let @{r} = ""
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我建议您使用
setreg
函数,而不是使用:execute
并必须注意代码注入:tolower()
在这里,因为如果用户提供A
作为寄存器名称,然后一个空字符串将被附加到a
寄存器而不是清空它。setreg()
将仅获取r
的第一个字节,如果它是有效的寄存器名称,则不会抛出任何错误 (setreg("abc", "")
将清空寄存器a
)。Instead of using
:execute
and having to be aware of code injections I suggest you usesetreg
function:tolower()
is here because if user suppliesA
as a register name then an empty string will be appended toa
register instead of emptying it.setreg()
will take only first byte ofr
and if it is valid register name then no errors will be thrown (setreg("abc", "")
will empty registera
).不要忘记测试
r
的长度是一个字符,并且在 az 范围内(以避免代码注入)Don't forget to test
r
is one char long, and within a-z range (in order to avoid code injection)