ga是Vim自带的显示光标字符编码的功能,但是反过来,没有从编码显示对应字符的功能。
因为编码是多位数,所以可视模式下写了此功能。
规则:
- 纯数字认为是10进制
- 其他情况都认为是16进制
- 纯数字的话,前面加0x或\x或\u开头都可以强制认定为16进制
此函数顺便把结果放入了无名寄存器,按p即可输出。
选中22909按ga,则显示<22909> 0x597d 好
选中597d或0x597d或\x597d或\u597d,则显示<0x597d> 22909 好
在vimrc中添加以下代码即可实现。
vnoremap ga y:call hy_string#get#GetNumAndChar(@0)<CR>
"获取数字的各种格式及对应的字符
function! hy_string#get#GetNumAndChar(num) abort
"let n = hy_string#get#Select()
let n = a:num
let reg16 = '\v^(\\x|0x|\\?u)'
if n =~? '\v^\d+$' "10进制
let n1 = '0x' . printf('%x', n)
else "16进制
if n =~? reg16 "带了前面的标识符
let n = '0x'.substitute(n,reg16,'','g')
else
let n = '0x' . n
endif
let n1 = printf('%d', n)
endif
let @" = '<' . n . '> ' . n1 . ' ' . nr2char(n1)
echo @"
endfunction