Emacs c++选项卡写入空格删除

Emacs c++ tabs writing spaces removing

本文关键字:空格 删除 c++ 选项 Emacs      更新时间:2023-10-16

我看到了很多关于emacs和选项卡/空间主题的问题,但没有人谈论这个:

我在C++模式下使用emacs,制表符作为缩进字符,如果我按enter键以换行emacs自动缩进制表符,但如果我试图删除那个"制表符",我只删除一个空格。

我知道emacs使用空格创建制表符,但如果我想删除那个"制表符",我想直接删除4(或8(个空格,而不是一个接一个,在python模式下可以按预期工作,但在c++模式下不行。有一个变量可以用于此或任何解决方案吗?

您的Backspace键(<DEL>(可能绑定到命令backward-delete-char-untabify。将其绑定到其他内容,例如delete-backward-char

从Elisp手册,节点程序模式:

在大多数编程语言中,缩进应该因行而异行来说明程序的结构。因此,在大多数编程语言模式,键入<TAB>将更新当前线路。

此外,<DEL>通常绑定到backward-delete-char-untabify,后者向后删除将每个选项卡视为相等数量的空格,以便您可以删除一列缩进,而不必担心空白由空格或制表符组成。

IOW,您不喜欢的行为默认在您使用的编程模式中提供。

实际上,如果您在c++-mode中,则<DEL>绑定到命令c-electric-backspace。该函数的文档(C-h f c-electric-backspace(告诉您:

c-electric-backspace是一个交互式编译的Lisp函数cc-cmds.el

(c-electric-backspace ARG)

删除前面的字符或空白。

如果c-hungry-delete-key是非nil(由模式上的"/h"指示行(,则消耗所有前面的空白。然而,如果前缀提供了自变量,或者c-hungry-delete-keynil,或者点是在文字内部,然后是变量中的函数c-backspace-function被调用。

默认情况下,用户选项c-backspace-function(C-h v(的值似乎是。。。CCD_ 22。因此,您可以自定义该选项,将其设置为其他功能,例如delete-backward-char。这将只更改C++和C模式的行为。