vimscript 中的空寄存器

发布于 2024-10-31 09:02:05 字数 204 浏览 4 评论 0原文

如果用户输入寄存器名称,如何清空寄存器?


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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

姐不稀罕 2024-11-07 09:02:05

我建议您使用 setreg 函数,而不是使用 :execute 并必须注意代码注入:

call setreg(tolower(r), "")

tolower() 在这里,因为如果用户提供A 作为寄存器名称,然后一个空字符串将被附加到 a 寄存器而不是清空它。

setreg() 将仅获取 r 的第一个字节,如果它是有效的寄存器名称,则不会抛出任何错误 (setreg("abc", "") 将清空寄存器 a)。

Instead of using :execute and having to be aware of code injections I suggest you use setreg function:

call setreg(tolower(r), "")

tolower() is here because if user supplies A as a register name then an empty string will be appended to a register instead of emptying it.

setreg() will take only first byte of r and if it is valid register name then no errors will be thrown (setreg("abc", "") will empty register a).

乖乖公主 2024-11-07 09:02:05
let r = inputdialog("which register do you want to empty?")
exe 'let @'.r.' = ""'

不要忘记测试 r 的长度是一个字符,并且在 az 范围内(以避免代码注入)

let r = inputdialog("which register do you want to empty?")
exe 'let @'.r.' = ""'

Don't forget to test r is one char long, and within a-z range (in order to avoid code injection)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文