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?