我想保留Emacs c模式的所有语法突出显示,自动完成,命令等(并且我将在短期内添加company-mode或类似模式),但是我想禁用c模式下的所有内容:


重新格式化,而不是我的C- 或M- 要求它。
除非我要求,否则即使在瞬间,也要在源周围移动光标。例如,关闭括号/花括号突出显示匹配的括号。
我曾经插入任何我没有键入的内容(除了1 Tab = 4个空格),或者ii)因为格式化而拒绝插入我没有键入的内容。
出于任何原因(包括粘贴,保存时或由于月亮隆隆),对源进行重新格式化,重新分页,重新对齐或以其他方式进行编辑。


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

我试过了:


C-x C-l a.k.a. c-toggle-electric-state a.k.a. (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浏览该源以了解其实际作用并查找钩子。 (setq-default indent-tabs-mode nil)使用空格而不是制表符。 (setq-default blink-matching-paren nil)防止光标在关闭括号/大括号时跳转。我仍然不能禁用格式化,也不能达到1、2、3和4,但是我在打hack鼠方面越来越好。

最佳答案

初步观察:这是一个很难回答的问题,因为“禁用所有可做的事情....”有点不确定。然而...

第2项。(键入封闭括号时,将移动点暂时移至匹配的开放括号)很容易:(setq blink-matching-paren nil)。这在Emacs手册的“匹配括号”页中。 (哇!您已经找到了那个)。

您不喜欢Tab键的操作;您想要它做什么?它与c-indent-command绑定,后者将当前行向内或向外缩进到“正确”位置。我猜您只是想插入空格以将点带到下一个4 * n位置。标签到标签停止如何?试试(定义键c-mode-base-map“ \ t”'制表到制表停止)。请注意,由于主模式键映射优先于默认键映射,因此无法在默认键映射中定义它。

完成C-c C-1以禁用键入时的自动缩进,例如,;确实键入了;还是要冒犯任何事情?如果是这样,您可以使用(define-key c-mode-base-map“;”'self-insert-command)完全禁用其“特殊”功能。

再说一遍,列出您不喜欢的特定内容,甚至是一长串内容,也比“插入所有我没有键入的内容的东西”容易得多。该模式的维护者只是没有在思想上对事物进行分类。

无论如何,我希望您能设法解决问题。

10-06 05:34
查看更多