我有一个包含字符串的 vim 寄存器。我需要遍历字符串中的每个字符,并分别处理每个字符。
我的问题是,给定从字符串中提取的一个字符,我无法区分空0x00
字符和换行符之间的区别0x0a
。
因为寄存器是由 v:register 指定的,所以我不能(据我所知)在脚本中直接访问寄存器,以便对其进行索引(我很乐意被纠正),所以我必须先复制/引用寄存器,然后对其let l:string = getreg(v:register)
进行操作l:string
。
我已尝试以下方法;-
char2nr(l:string[x])
- 总是返回一个空字符0x0a
match(l:string[x], '[\x0]')
- 比赛0x00
和0x0a
角色!match(l:string[x], '\%x00')
- 比赛0x00
和0x0a
角色!(虽然我敢发誓这在某一时刻确实对我有用 - 也许我失去了情节?)- 我甚至尝试将字符粘贴到缓冲区,希望使用映射
g8
来读回它的值(即exe "normal! r".l:string[x]."\<esc>"
),但它粘贴了一个换行符0x0a
- 坦白说,还有一些事情我现在已经忘记了
有人知道我该如何实现这一点吗?令人沮丧的是,当 nul 字符出现在缓冲区中时,vim 可以完美地处理它们(并且可以直观地选择和提取它们,然后再次粘贴它们,没有任何问题)。但尝试处理字符串或寄存器中包含的 nul 似乎有问题。
仅供参考,文档char2nr()
指出
“文件中的 NUL 字符用 指定nr2char(10)
,因为 NUL 用换行符表示。 nr2char(0)
是真正的 NUL 并终止字符串,因此导致空字符串”
这似乎有些不准确(或者不是全部),因为文件/缓冲区中的 nul 字符可以正确处理。并且包含 nul 的寄存器仍然可以粘贴到文档中,并且会正确粘贴为 nul。所以有些东西正在区分 nul 和换行符
任何帮助将不胜感激