emacs - keybind问题

时间:2011-01-12 08:08:41

标签: emacs emacs23

我已成功使用 Ctrl + Shift +向上' Ctrl + Shift +向下'

Ctrl + Shift + left ' Ctrl + Shift + Right 到不同的命令。但是当我

尝试将 Ctrl + s 用于命令save-buffer和 Ctrl + Shift + s ,其中

相当于 Ctrl + S ,对于另一个命令,它有一些问题。

save-buffer工作正常,但当我输入 Ctrl + Shift + s 时,它会执行

命令save-buffer。我使用 Ctrl + q 来查找

的控制序列

Ctrl + s Ctrl + Shift + S ,我得到相同的结果,即 ^ S

我希望 Ctrl + s 得到 ^ s ,但事实并非如此。

任何人都知道原因吗?

另一个问题是:我使用 Ctrl + c 命令kill-ring-save。在此

大小写,所有命令(大数)以 Ctrl + c 开头,现在不起作用。

有没有办法用另一个自定义前缀替换前缀 Ctrl + c


我可能会向错误的方向提出问题。我使用 ctrl + c 作为

杀伤环的节省。它在emacs中工作正常(无模式)。但是,如果我打开一个.c文件(C模式),那么

当我输入 Ctrl + c 时,它会等我输入另一个键。我认为在这种情况下,

ctrl + c 被视为前缀。在这种情况下,我需要进行以下修改:

使用自定义前缀,例如 Ctrl + a Ctrl + c ;

删除

前缀 Ctrl + c ;使用 Ctrl + c 作为kill-ring-save。

我将以下内容添加到〜/ .emacs:

(global-set-key(kbd“C-a”)模式特定地图)

(global-set-key(kbd“C-c”)'kill-ring-save)

(global-set-key(kbd“C-f”)'isearch-forward)

(global-set-key(kbd“C-v”)'yank)

(global-set-key(kbd“C-s”)'save-buffer)

(defun my-c-initialization-hook()

(define-key c-mode-base-map(kbd“C-a”)mode-specific-map)

(define-key c-mode-base-map(kbd“C-c”)'kill-ring-save))

(add-hook'c-initialization-hook'my-c-initialization-hook)

但这不起作用。 Ctrl + c 仍然被视为前缀,所以我无法使用它

as kill-ring-save。此外,如果我输入 Ctrl + a Ctrl + c ,它说它不是

定义。 (我认为它与我输入 Ctrl + c Ctrl + c 的结果相同)

3 个答案:

答案 0 :(得分:3)

C-c 绑定很棘手,CUA模式很好地解决了这个问题,只有当你标记了一个区域时才进行kill-ring-save。

答案 1 :(得分:1)

首先,Control-S是一个ASCII控制字符 - ^s^S是相同的字符。

键与字符不同,如果您将Emacs与窗口管理器一起使用,则可以区分键 C-s C-S-s 。后者是Control-Shift-s。

您遇到的问题是,如果您没有明确绑定移位后的字母键版本,则移位后的字母键会使用未移位键的绑定。这是一个“功能”。

所以你需要绑定 C-s C-S-s

(global-set-key (kbd "C-s") 'save-buffer)
(global-set-key (kbd "C-S-s") 'another-command)

答案 2 :(得分:0)

如果您在终端中运行emacs,那么shift-ctl-c问题的原因可能是终端驱动程序。在这种情况下,请输入命令stty stop undef,然后再次运行emacs,看看它是否会影响问题。另外,看看你是否遇到与shift-ctl- 其他字母相同的问题