在 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>`<

您可以将 ; 更改为您想要的任何组合。

编辑:

您可以按照@Cyber​​Muz 的评论所述进行逆转:

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"。但是我认为循环更具可读性。

我认为将视觉选择的东西传递给函数,并用返回的字符串修改文本对你来说不是问题,对吧?