vim - 如何在 VIM 中将十进制数转换为十六进制数?

标签 vim

我在 VIM 中编辑的文件中有此列:

16128
16132
16136
16140
# etc...

我想将其转换为此列:
0x3f00
0x3f04
0x3f08
0x3f0c
# etc...

我怎样才能在 VIM 中做到这一点?

最佳答案

使用 printf (类似于 C 的 sprintf )和 \=处理替换的命令:

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

细节:
  • :%s/\d\+/ :匹配任何行 ( \d\+ ) 上的一个或多个数字 ( :% ) 并替换 ( s )。
  • \= :对于每个匹配项,替换为以下表达式的结果:
  • printf("0x%04x", : 使用格式 "0x%04x" 生成字符串,对应于文字 0x后跟四位(或更多)十六进制数字,用零填充。
  • submatch(0) :完整匹配的结果(即数字)。

  • 有关更多信息,请参阅:
    :help printf()
    :help submatch()
    :help sub-replace-special
    :help :s
    

    关于vim - 如何在 VIM 中将十进制数转换为十六进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1118333/

    相关文章:

    VIM 自动创建 CTag

    vim - 如何映射 <C-/> 以在 vim 中切换注释?

    vim - 无法弄清楚某些 vimrc 设置

    vim - 在CtrlP中,如何将 `mru`模式设置为默认模式?

    vim - 为什么 Vim 文件路径自动补全 (CTRL-X CTRL-F) 一旦路径包含方括号就会停止?

    python - 如何在 Mac OSX 上为 Vim 安装 python 语法支持?

    vim - 重置 Vim 中的所有按键映射

    Vim:删除所有包含模式的行的字符

    c++ - 我可以对同一项目中的某些文件使用不同的 .clang_format 吗?

    shell - 如何在 fish shell 中将转义插入模式重新映射到 'jk'?