在 VIM 中将 ascii 转换为十六进制
Converting ascii to hex in VIM
我经常需要将我在 vim 中编辑的一小部分文本从十六进制转换为 ascii 或其他方式。我知道我可以通过 xxd 传输文本来完成此操作,但我想以一种在视觉上 select 一些文本然后使用快捷方式将 selected 文本转换为 hex/ascii.
例如,如果我 select 123 Foo
我想将其转换为 31323320466f6f
。
是否有 vim 插件可以执行此操作?我可以使用一些功能来做到这一点吗?
这里有一个 映射,它可以为您做到这一点:
vnoremap ; :<c-u>s/\%V./\=printf("%x",char2nr(submatch(0)))/g<cr><c-l>`<
您可以将 ;
更改为您想要的任何组合。
编辑:
您可以按照@CyberMuz 的评论所述进行逆转:
vnoremap u :<c-u>s/\%V\x\x/\=nr2char(printf("%d", "0x".submatch(0)))/g<cr><c-l>`<
有一个函数,你传入一个字符串,它会为你打印(回显)十六进制:
function! ToHex(str) abort
let s = ''
for c in split(a:str, '\zs')
let s .= printf("%x", char2nr(c))
endfor
echo s
endfunction
如果将 echo s
行更改为 return s
,您将获得转换后的字符串。您可以通过 map()
将其设为 "one-liner"。但是我认为循环更具可读性。
我认为将视觉选择的东西传递给函数,并用返回的字符串修改文本对你来说不是问题,对吧?
我经常需要将我在 vim 中编辑的一小部分文本从十六进制转换为 ascii 或其他方式。我知道我可以通过 xxd 传输文本来完成此操作,但我想以一种在视觉上 select 一些文本然后使用快捷方式将 selected 文本转换为 hex/ascii.
例如,如果我 select 123 Foo
我想将其转换为 31323320466f6f
。
是否有 vim 插件可以执行此操作?我可以使用一些功能来做到这一点吗?
这里有一个 映射,它可以为您做到这一点:
vnoremap ; :<c-u>s/\%V./\=printf("%x",char2nr(submatch(0)))/g<cr><c-l>`<
您可以将 ;
更改为您想要的任何组合。
编辑:
您可以按照@CyberMuz 的评论所述进行逆转:
vnoremap u :<c-u>s/\%V\x\x/\=nr2char(printf("%d", "0x".submatch(0)))/g<cr><c-l>`<
有一个函数,你传入一个字符串,它会为你打印(回显)十六进制:
function! ToHex(str) abort
let s = ''
for c in split(a:str, '\zs')
let s .= printf("%x", char2nr(c))
endfor
echo s
endfunction
如果将 echo s
行更改为 return s
,您将获得转换后的字符串。您可以通过 map()
将其设为 "one-liner"。但是我认为循环更具可读性。
我认为将视觉选择的东西传递给函数,并用返回的字符串修改文本对你来说不是问题,对吧?