How can I convert a decimal number to hex in VIM?

vim

Solution

Use `printf` (analogous to C's `sprintf`) with the `\=` command to handle the replacement:

:%s/\d\+/\=printf("0x%04x", submatch(0))

Details:

- `:%s/\d\+/` : Match one or more digits (`\d\+`) on any line (`:%`) and substitute (`s`).

- `\=` : for each match, replace with the result of the following expression:

- `printf("0x%04x",` : produce a string using the format `"0x%04x"`, which corresponds to a literal `0x` followed by a four digit (or more) hex number, padded with zeros.

- `submatch(0)` : The result of the complete match (i.e. the number).

For more information, see:

:help printf()
:help submatch()
:help sub-replace-special
:help :s

Problem

I have this column in a file I'm editing in VIM: ``` 16128 16132 16136 16140 # etc... ``` And I want to convert it to this column: ``` 0x3f00 0x3f04 0x3f08 0x3f0c # etc... ``` How can I do this in VIM?

Original source