在VIM中将ascii转换为十六进制

时间:2017-01-16 20:46:20

标签: vim hex vi

我经常需要转换我在vim中编辑的一小部分文本,从十六进制到ascii,以及其他方式。我知道我可以通过xxd来管理文本来实现这一目标,但我想以一种方式自动化这种方式,我在视觉上选择一些文本,然后使用快捷方式将所选文本转换为hex / ascii。

例如,如果我选择123 Foo,我想将其转换为31323320466f6f。 有没有这样的vim插件?我可以使用某些功能来执行此操作吗?

2 个答案:

答案 0 :(得分:1)

以下是映射,可以为您执行此操作:

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

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

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