#编辑器 #格式 #终端

bin+lib teehee

受 Vim、Kakoune 和 Hiew 启发的十六进制编辑器

7 个版本

0.2.8 2022年1月26日
0.2.7 2022年1月26日
0.2.3 2021年4月14日
0.2.2 2020年9月3日
0.1.0 2020年7月27日

#1515命令行工具

Download history 3/week @ 2024-03-11 5/week @ 2024-03-18 34/week @ 2024-04-01

64 每月下载量

Apache-2.0

170KB
4.5K SLoC

Teehee - 模态终端十六进制编辑器

AUR version

受 Vim、Kakoune 和 Hiew 启发。

安装

Arch Linux 用户:Arch Linux 的包可在 AUR 上找到。

其他用户:只需运行 cargo install teehee!如果您没有 rust,可以从 rustup.rs 获取。应用程序将以可执行文件 teehee 可用。未来可能会有更多的安装选项。

动机

逆向工程师、软件工程师和其他 IT 人员经常需要处理二进制文件。当没有更专业的工具时,十六进制编辑器通常是处理二进制文件格式的首选工具。许多现有的十六进制编辑器缺乏对模式编辑的支持,这使得 Vim/Kakoune/Emacs 用户会感到遗憾。Hiew 在某种程度上支持它,但它是非免费软件,并且其快捷键不直观。Teehee 设计用于为 Kakoune 和 Vim 用户提供原生感觉的体验,同时提供额外的十六进制编辑功能,如数据区域的彩色标记和加密/压缩脚本。

演示

asciicast

Teehee 支持多选、高效的选区修改命令和各种数据编辑操作。

设计

image

实现的关键绑定

  • hjkl 用于移动(按 shift 以扩展选区代替)
    ^
< h j l >
    k
    v
  • ghjkl 用于跳转(Ghjkl 以扩展选区代替)
    • h:到行首
    • l:到行尾
    • k:到文件首
    • j:到文件尾
    • <count>g 跳到偏移量,<count>G 扩展到偏移量
  • <C+e/y> 向下/向上滚动
  • ; 收缩选区到光标
  • <a-;>(alt 和 ;)交换光标和选区末端
  • <a-s> (alt 和 s) 将选择分割为多个大小...
    • b:1 字节
    • w:2 字节(Word)
    • d:4 字节(Dword)
    • q:8 字节(Qword)
    • o:16 字节(Oword)
    • n:以空字节分隔
    • /:匹配文本模式(? 用于十六进制模式)
  • d 从缓冲区中删除所选数据
  • i 在选择的开头进入插入模式(I 以十六进制而不是 ASCII 插入)
    • a 替代 i 以进入附加模式
    • o 替代 i 以进入覆盖模式
    • c 替代 i 删除选择内容,然后进入插入模式
    • <c-n> 在 ASCII 模式下插入一个空字节
    • <c-o> 在 ASCII 和十六进制插入之间切换
  • () 用于循环主选择
  • <space> 仅保留主选择,<a-space> 保留所有选择但主选择
  • r<key> 用给定的 ASCII 字符替换每个所选字符
    • R<digit><digit> 替代 r 用单个十六进制字符替换
    • r<c-n> 用空字节替换
  • y 将选择粘贴/复制到寄存器 "
  • p 将寄存器 " 内容粘贴到 y/d/c
  • s 将选择折叠为匹配文本模式(S 用于十六进制模式)的选项
  • M 测量当前主选择长度(以字节为单位)
  • u 撤销,U 重做
  • : 进入命令模式
    • :q 退出
    • :q! 强制退出(即使缓冲区已更改)
    • :w 将缓冲区刷新到磁盘
    • :w <filename> 将缓冲区保存到指定文件
    • :wa 将所有缓冲区刷新到磁盘
    • :e <filename> 打开一个新的缓冲区
    • :db 关闭一个缓冲区
    • :db! 即使缓冲区已更改也要关闭缓冲区
    • :wq 刷新缓冲区并退出

输入模式

  • <C-w> 插入通配符
  • <C-o> 切换输入模式(ascii <-> hex)
  • <esc> 返回正常模式
  • <enter> 接受模式
  • 箭头键,<backspace><delete> 也受支持

计数

  • 以下命令可以加前缀计数
    • 移动(hjklHJKL
    • 选择修改(()<space><a-space>
    • 跳到偏移量(gG
    • 粘贴(p
    • (在拆分模式下)bwdqon
  • 计数通过输入数字0-9(在十六进制模式下,0-f)输入。
  • x 在十六进制和十进制模式之间切换。
  • 注意,a-f 可能会覆盖一些键,因此在运行命令之前请切换出十六进制模式。
  • 示例: y5p:复制选择并将其粘贴5次。
  • 示例: 50l:向右移动50个字节。
  • 示例: x500g:跳到偏移量0x500
  • 示例: <a-s>x12xb:将选择拆分为0x12字节的部分。

发布

使用以下PGP密钥签名发布:9330E5D6861507BEFBF1893347E208E66179DC94。源代码可以在GitHub发布页面上找到,包括源代码tgz的签名。

依赖项

~4.5–6.5MB
~110K SLoC