Emacs 在 iTerm2 下的按键支持

由于经常需要通过 SSH 用 Emacs 修改代码, 有不能忍受 X11 低效率的 forward, 所以一直在寻找 iTerm 2 下对 Emacs 快捷键全支持的方法, 得以有幸在一个国外小哥的 GitHub 里找到了, 地址在此 choppsv1/ dot.spacemacs.d

和本主题相关的两个文件分别是 iterm-xterm-extra.el 以及 iterm-custom-keys.py

iterm-custom-keys.py 提供了生成 iTerm2 配置文件以及相应 keymap.el 文件的功能.

init-keymap.el · GitHub 这个 Gist 提供了三个文件, 其中 iterm-custom-keys.py 修改了 “Text” 和 “Action” 字段, 具体修改内容可以看 Revisions .

在 Emacs 中加入 keymap, 将 json 文件放在 ~/Library/Application Support/iTerm2/DynamicProfiles 目录下, iTerm2 会自动识别^1, 然后使用新的 Profiles 创建并打开 Emacs, 诸如 C-; C-'等都可以使用了, 如果需要其它按键映射, 可以直接修改 iterm-custom-keys.py 文件

# 生成 keymap.el
python iterm-custom-keys.py > keymap.el
# 生成 iterm2.json
python iterm-custom-keys.py > ~/Library/Application Support/iTerm2/DynamicProfiles/iTerm2.json

关于终端下 Color 的问题, 可以使用 xterm-24bits, 具体讨论可见这里 True color (24-bit) in terminal - #6,来自 twlz0ne , 已经可以和 GUI 做到几乎无差别的显示了.

多说一句, 对 macOS 提供 X11 支持的 XQuzrtz 可以直接支持众多快捷键, 不需要额外设置.

3 个赞

可以试试tramp,远程编辑文件,很好用

如果其他人在 macOS 下有更好的解决方案, 欢迎提出:grinning: 关于 Emacs 按键的讨论, 这里还有一个帖子 推荐term-keys,解决终端运行emacs按键冲突

因为不只是远程编辑, 还需要直接运行啦什么的, 有时一运行就是一天, 所以还是直接在远程方便一下, 不过多谢建议.

1 个赞

iterm2里面直接跑工作,在起了tmux之后,tmux session里面的emacs还是不认C-;

也可以换个terminal。比如kitty,wezterm。他们支持kitty keyboard protocol。然后用kkp.el

2 个赞

终端由 iTerm2 切换到 WezTerm, 使用 GitHub - KevinSilvester/wezterm-config: My WezTerm Config 这里的配置文件后, C-c C-’ 这个 iTerm2 不支持的快捷键就默认识别了, 别的不需要改任何东西…

btw, 即使用了 kkp.el 后, WezTerm tmux 中的 Emacs 也无法识别 C-c C-’ 这个快捷键, 可能 tmux 还需要额外配置

Tmux 的配置里面需要加

# 256 color and true color support
set -g default-terminal "tmux-256color"
# CSI u key encoding support
set -s extended-keys on
set-option -ga terminal-overrides ",tmux-256color:Tc"
set-option -ga terminal-overrides ",xterm-256color:Tc"
set -ga terminal-features ",*:RGB"

另外terminfo需要有tmux-256color的项目。把下面这个内容存成tmux-24bit.src,然后用第一行的命令编译

# Compile with tic -x -o ~/.terminfo tmux-24bit.src
# Use semicolon separators.
xterm-256color|xterm with 24-bit direct color mode,
  sitm=\E[3m, ritm=\E[23m,
  use=xterm-256color,
  setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
  setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
tmux-256color|tmux with 256 colors, with setb24/setf24 added for Emacs,
       sitm=\E[3m, ritm=\E[23m,
       smso=\E[7m, rmso=\E[27m,
       use=tmux-256color,
       setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
       setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

看起来主要是这句