我经常需要转换我在vim中编辑的一小部分文本,从十六进制到ascii,以及其他方式。我知道我可以通过xxd来管理文本来实现这一目标,但我想以一种方式自动化这种方式,我在视觉上选择一些文本,然后使用快捷方式将所选文本转换为hex / ascii。
例如,如果我选择123 Foo
,我想将其转换为31323320466f6f
。
有没有这样的vim插件?我可以使用某些功能来执行此操作吗?
答案 0 :(得分:1)
以下是映射,可以为您执行此操作:
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>`<
答案 1 :(得分:1)
有一个函数,你传入一个字符串,它为你打印(回显)十六进制:
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
,您将获得转换后的字符串。你可以把它变成一个&#34; one-liner&#34;按map()
。但是我认为循环更具可读性。
我认为将视觉选择的东西传递给函数,并用返回的字符串修改文本对你来说不是一个问题吗?