c - 禁用所有 Emacs c 模式重新格式化、插入/拒绝、光标跳转

标签 c emacs cursor-position autoformatting

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

  1. 除非我 C- 或 M- 要求重新格式化。

  2. 在源周围移动我的光标,即使是短暂的,除非我要求。例如,右括号/大括号突出显示匹配的括号/大括号。

  3. 曾经 i) 插入任何我没有输入的内容(1 个制表符 = 4 个空格除外)或 ii) 由于格式原因拒绝插入我输入的内容。

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

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

我已经尝试过:

  • C-x C-l又名 c-toggle-electric-state又名 (setq-default c-electric-flag nil)它修复了 4 个中的一些,但 Tab 仍然会在需要时重新格式化代码,我猜这并不孤单;并且无法修复 2 或 3。

  • c-auto-align-backslashes仅修复上述一种情况。

  • (setq c-syntactic-indentation nil)它部分修复了 4,但破坏了 1 和 3(例如,Tab 不会在光标处插入),并且没有修复 2。

  • text-mode这显然删除了我想保留的所有 c 模式功能。

  • 各种搜索和深入研究https://www.gnu.org/software/emacs/manual/html_mono/ccmode.html ,它仔细记录了 2^1024 设置,但没有显示我可以找到的“所有格式关闭”开关。

  • 扫描 https://sourceforge.net/p/cc-mode/cc-mode/ci/default/tree/对于要禁用的明显标志(*blork*?)

我已经为此花费了几个小时,因此非常感谢您的帮助。

更新:更多的麻烦:安装 emacs 源代码 ( apt-get install emacs24-el ) 并使用 C-h k <key combo>查找按下按键时调用的函数。 M-x find-function浏览该源代码以了解其实际用途并寻找 Hook 。 (setq-default indent-tabs-mode nil)坚持使用空格,而不是制表符。 (setq-default blink-matching-paren nil)以防止光标在右括号/大括号上跳转。我仍然无法禁用格式,或实现 1、2、3 和 4,但我在打地鼠方面做得越来越好。

最佳答案

第一个观察:这是一个很难回答的问题,因为“禁用所有......”有点不具体。然而...

第 2 项。(当您键入右括号时,将点暂时移动到匹配的左括号)很简单:(setq shake-matching-paren nil)。这位于 Emacs 手册的“匹配括号”页面中。 (哎呀!您已经找到了那个)。

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

完成 C-c C-l 禁用键入时的自动缩进(例如 a ;)后,是否会键入 a ;还做了什么冒犯的事情吗?如果是这样,您可以使用 (define-key c-mode-base-map ";"'self-insert-command) 完全禁用其“特殊”功能

同样,列出您不喜欢的特定内容,即使是很长的列表,也比“插入我未输入的内容的所有内容”更容易处理。该模式的维护者只是不会在心理上那样对事物进行分类。

无论如何,我希望你能把事情解决掉。

关于c - 禁用所有 Emacs c 模式重新格式化、插入/拒绝、光标跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38668575/

相关文章:

c - 下面的C程序中_AX = 1000是什么意思?

c - 在 C 中处理数组时出现的问题

c - 考虑不存在的字符作为输入 C

c++ - 在 native Windows 应用程序的资源中嵌入文本文件

Emacs:无法验证签名 archive-contents.sig

emacs - 如何在 ELisp 中创建命名参数?

使用C程序在终端中定位光标

emacs - 在 Emacs 中创建新模式

带有表情符号的快速光标位置

javascript - 如何在Codemirror编辑器中设置光标位置