终端下的spacemacs大家是怎么处理C-i的evil-jump-forwar的?

我配置成了tab弹出company的补全框,所以想知道有没有办法让c-i和tab分开

就是tab和c-i是相同的,能不能把这两个分开

终端不能分辨 <tab>C-i

我的做法是用 xkeysnail 把特定的键(Ctrl-I)映射到一个平时用不上的按键序列(F2-1-0-0),再在 emacs 里面把这个按键序列映射到想要的功能。

xkeysnail:

emacs:

QVDwSKlI

这个方法应该可以

这个方法要在终端下生效,就得终端支持把c-i映射成自定义的序列吧?

终端的处理是 xkeysnail 之后完成的,

键盘 --> xkeysnail --> 终端 --> emacs

键盘按下 ctrl-I 之后,终端看来用户按下的是 f2-1-0-0;这个转换过程对终端是透明的。

在windows下就只能靠终端来映射了吧

如果终端是 iTerm2 可以更改按键映射:

$ emacs -Q -nw --eval "(progn
                         ;; this is C-i
                         (global-set-key (kbd \"\e[emacs-C-i\") (lambda () (interactive) (message \"C-i\")))
                         ;; this is TAB 
                         (global-set-key (kbd \"TAB\") (lambda () (interactive) (message \"TAB\"))))"
1 个赞

公司的只能用win,真是难办

我之前用 windows 弄按键映射的时候用的是 autohotkey,它可以调一些 windows 的 api,理论上是可以只在特定应用下启用映射的。刚刚查了下似乎也可以:automation - AutoHotKey: How to make my script run only within a specific program? - Super User

这个确实可以 我弄过

这个better-jump比起原来的jump改进了哪里?

不知道 :joy:,都是 doom 自带的。

装个虚拟机跑 linux 能省很多事

网都没有~~

学到了,原来可以 [xxx 这样

但是整个终端也没法正常使用 C-i 了,一按就显示映射字符串。

问题不大(可以多个iterm 的 profile,其中一个专门 emacs 就行

1 个赞

我也有类似的问题,不过主要是在org在终端下面不方便用tab来在表格中移动,所以我用这里的代码来实现:

(evil-define-key 'motion org-mode-map (kbd "TAB")
    '(menu-item "evil-org-cycle-maybe" nil
                :filter (lambda (&optional _)
                          (when (and (not (display-graphic-p))
                                     (or (org-at-heading-or-item-p)
                                         (org-at-table-p)
                                         (org-at-block-p)))
                            #'org-cycle)))))

至于你的情况,就更加简单了,只在insert状态下绑定company,就不会影响到C-i的跳转了