如何在不破坏选项卡的情况下使用ctrl-i获取emacs快捷方式

mks*_*uth 3 emacs tabs keyboard-shortcuts

可能重复:
如何在不更改TAB的情况下将命令绑定到Ci?

我想重新定义emacs键盘快捷键控件 - 我是"移动游标"

为此,我将以下行添加到我的.emacs文件中:

(global-set-key (kbd "C-i") 'previous-line)
Run Code Online (Sandbox Code Playgroud)

然后我发现,默认情况下,tab键可以执行任何绑定到control-i的操作,这显然不是我想要的.因此,为了恢复正常的标签行为,我将其添加到我的.emacs文件中

(global-set-key (kbd "<tab>") 'indent-for-tab-command)
Run Code Online (Sandbox Code Playgroud)

这主要是有效的.但是,选项卡不再适用于迷你缓冲区中的自动完成命令.我该如何解决这个问题?或者有更好的方法来解决这个问题吗?谢谢.

Rin*_*g Ø 7

Control-i并且TAB通常被认为是相同的(例如在终端中).但是,Emacs进行了区分并允许单独绑定.

参见Emacs TAB和Ci.

您还可以使用设置本地绑定(local-set-key key binding).
您可以在其中创建一个(interactive)命令.emacs来设置本地绑定,并仅在感兴趣的缓冲区中调用该命令.

编辑

示例:将其放入您的.emacs或新缓冲区中然后执行M-xeval-current-buffer

  (defun mybinding () 
    (interactive)
    (local-set-key [tab]
      '(lambda () (interactive)
          (message "hello"))))
Run Code Online (Sandbox Code Playgroud)

然后转到感兴趣的缓冲区,M-xmybinding然后按TAB以查看结果("hello"应显示为迷你缓冲区中的消息).

尝试C-f打开一个新文件并按下TAB具有与往常相同的完成行为.