如何在Vim中正确保存并读取含非打印字符的寄存器内容?
解决Vim寄存器中非打印字符的正确保存问题
当然可以正确保存这些非打印字符,问题出在Vim默认会将控制字符转义为可读的表示(比如<CR>、<Down>)来存储,而非原始字节。以下是两种可靠的解决方法:
方法一:二进制模式保存/读取
- 打开新文件并启用二进制模式:
二进制模式下Vim会直接按原始字节处理内容,不转换换行符或控制字符的显示格式。:set binary - 将寄存器q的内容粘贴到文件:
:put q - 保存文件:
:w! my_commands.vim - 后续读取时,同样以二进制模式打开文件,再将内容复制回寄存器或直接执行:
:e ++bin my_commands.vim " 复制回寄存器q :%y q " 或者直接执行命令 :source my_commands.vim
方法二:用Vim脚本直接读写原始字节
- 直接将寄存器q的内容以二进制模式写入文件:
:call writefile([@q], 'my_commands.vim', 'b') - 读取文件内容回寄存器q:
:let @q = readfile('my_commands.vim', 'b')[0]
关键说明
你之前调整的encoding、fileencoding等设置针对的是字符编码(如UTF-8、GBK),但此问题的核心是Vim对控制字符的转义处理,和编码无关。上述两种方法都绕开了Vim的转义逻辑,直接操作原始字节,因此能完整保留寄存器中的非打印命令字符。
内容的提问来源于stack exchange,提问作者zhzhy
相关产品推荐
相关产品推荐

