禁用所有 Emacs c-mode 重新格式化,insertion/refusal,光标跳转

Disable all Emacs c-mode reformatting, insertion/refusal, cursor jumps

我想保留 Emacs c 模式的所有语法突出显示、自动完成、命令等(我将很快添加公司模式或类似模式)但我想禁用 c 模式下的所有内容:

  1. 如果我 C- 或 M- 要求,则重新格式化。

  2. 将我的光标在源周围移动,即使是短暂的,除非我要求它。例如,关闭 parens/braces 突出显示匹配项。

  3. 曾经 i) 插入任何我没有输入的内容(除了 1 个 Tab = 4 个空格)或 ii) 拒绝插入我输入的内容因为格式化。

  4. 出于任何原因重新格式化、重新分页、重新对齐或以其他方式编辑源,包括粘贴、保存或因为月亮是凸月。

我已经设置了(setq-default c-basic-offset 4)(setq-default indent-tabs-mode nil)

我试过:

我已经在这里工作了几个小时,所以非常感谢收到的任何帮助。

更新: 更多问题:安装 emacs 源代码 (apt-get install emacs24-el) 并使用 C-h k <key combo> 查找按下某个键时调用的函数。 M-x find-function 浏览该源以找出它实际在做什么并寻找挂钩。 (setq-default indent-tabs-mode nil) 坚持使用空格,而不是制表符。 (setq-default blink-matching-paren nil) 以防止光标在关闭时跳转 parens/braces。我仍然无法禁用格式化,或实现 1、2、3 和 4,但我越来越擅长打地鼠了。

第一个观察:这是一个很难回答的问题,因为 "disable everything that does ...." 有点不明确。然而...

项目 2。(当您键入闭括号时,将点暂时移动到匹配的开括号)很简单:(setq blink-matching-paren nil)。这在第 "Matching Parentheses" 页的 Emacs 手册中。 (哎呀!你已经找到那个了)。

您不喜欢tab键的动作;你想让它做什么?它绑定到 c-indent-command,它将当前行向内或向外缩进到 "correct" 位置。我猜你只想插入空格以将点带到下一个 4*nth 位置。 tab-to-tab-stop 怎么样?试试 (define-key c-mode-base-map "\t" 'tab-to-tab-stop)。请注意,在默认键映射中定义它是行不通的,因为主模式键映射优先于它。

完成 C-c C-l 以禁用键入时的自动缩进,例如 a ;,是否键入 a ;还做什么得罪人?如果是这样,您可以完全禁用其 "special" 功能 (define-key c-mode-base-map ";" 'self-insert-command)

同样,列出您不喜欢的特定事物的列表,即使是很长的列表,也比 "everything which inserts anything I didn't type" 更容易处理。该模式的维护者只是不会在头脑中那样对事物进行分类。

总之,希望你能把事情搞定。