如何在不中断选项卡的情况下对emacs快捷方式使用ctrl-i

如何在不中断选项卡的情况下对emacs快捷方式使用ctrl-i,emacs,tabs,keyboard-shortcuts,Emacs,Tabs,Keyboard Shortcuts,可能重复: 我想将emacs键盘快捷键控件-I重新定义为“向上移动光标” 为此,我在.emacs文件中添加了以下行: (global-set-key (kbd "C-i") 'previous-line) 然后我发现,默认情况下,tab键执行与control-I绑定的任何操作,这显然不是我想要的。因此,为了恢复正常的选项卡行为,我将其添加到.emacs文件中 (global-set-key (kbd "<tab>") 'indent-for-tab-command) (tab命

可能重复:

我想将emacs键盘快捷键控件-I重新定义为“向上移动光标”

为此,我在.emacs文件中添加了以下行:

(global-set-key (kbd "C-i") 'previous-line)
然后我发现,默认情况下,tab键执行与control-I绑定的任何操作,这显然不是我想要的。因此,为了恢复正常的选项卡行为,我将其添加到.emacs文件中

(global-set-key (kbd "<tab>") 'indent-for-tab-command)
(tab命令的全局设置键(kbd“”)缩进)
这主要是有效的。但是,tab不再适用于自动完成迷你缓冲区中的命令。我怎样才能解决这个问题?还是有更好的办法? 谢谢。

Control-i和TAB通常被认为是相同的(例如在终端中)。但是,Emacs有区别,允许单独绑定

您还可以使用
(本地设置密钥绑定)
设置本地绑定
您可以在
.emacs
中创建一个
(交互式)
命令来设置本地绑定,并仅在感兴趣的缓冲区中调用该命令

编辑

示例:将其放入
.emacs
或新的缓冲区中,然后执行M-x
评估当前缓冲区

  (defun mybinding () 
    (interactive)
    (local-set-key [tab]
      '(lambda () (interactive)
          (message "hello"))))
然后转到感兴趣的缓冲区和M-x
mybinding
,然后按TAB键查看结果(“hello”应在迷你缓冲区中显示为消息)


尝试使用C-f打开一个新文件,然后按TAB键,其完成行为与平常相同。

在此线程中使用帖子:

我找到了一个解决方案:

;; Translate the problematic keys to the function key Hyper, 
;; then bind this to the desired ctrl-i behavior
(keyboard-translate ?\C-i ?\H-i)
(global-set-key [?\H-i] 'previous-line)

因此,如果我理解了您的建议,我想做的是只在本地缓冲区中重新绑定control-I和TAB键。这样在迷你缓冲区中,它们的默认绑定仍然适用。谢谢,这对我来说很有效,尽管下面的解决方案似乎也很有效,可能更简单?谢谢你指出这一点。我在那条线索中发现了一些在我的情况下似乎有效的东西。