1
为什么换行符在搜索寄存器中转换为Null字符,并在命令行转换为回车符?
如果我有以下文字: foo bar 我从视觉上选择它并复制它。 现在,该文本存储在未命名的寄存器中",这是其内容(的输出:reg "): "" foo^Jbar^J 根据此图表,似乎^J是换行符的插入符号。 如果要a通过键入:let @a = @" 以下内容在寄存器中复制未命名的寄存器:这是其内容(的输出:reg a): "a foo^Jbar^J 它没有改变。 如果现在我输入:let @/ = @",将其复制到搜索寄存器中,则其内容为的输出:reg /: "/ foo^@bar^@ 根据上一张图表,它似乎^@是Null字符的插入符号。 为什么换行符会自动在搜索寄存器(而不是a寄存器)内转换为Null字符? 如果我在命令行上(或之后的搜索中/)插入未命名的寄存器,则通过输入:<C-R>",将插入以下内容: :foo^Mbar^M 同样,根据最后一张图表,这^M似乎是回车符的插入符号。 为什么在命令行上将换行符自动转换为回车符? 编辑: 通常,您可以通过键入以下内容来插入文字控制字符: <C-V><C-{character in caret notation}> 例如,您可以<C-R>通过键入插入文字<C-V><C-R>。 您可以为看似任何控制字符执行此操作。 但是,我注意到我无法在缓冲区内或命令行上插入文字LF,因为如果键入:<C-V><C-J>它会插入^@,空字符而不是^J。 是否出于相同的原因将LF在搜索寄存器中转换为NUL? 编辑2: 在中:h key-notation,我们可以阅读以下内容: <Nul> zero CTRL-@ 0 (stored as …