【问题标题】:Emacs c++ tabs writing spaces removingEmacs c ++选项卡写入空格删除
【发布时间】:2019-11-01 16:43:30
【问题描述】:
我看到很多关于 emacs 和制表符/空格主题的问题,但没有人谈论这个:
我有 C++ 模式下的 emacs 和制表符作为缩进字符,如果我按 Enter 键换行 emacs 自动缩进制表符,但如果我尝试删除该“制表符”,我只删除一个空格。
我知道 emacs 使用空格创建制表符,但如果我想删除那个“制表符”,我想直接删除 4 个(或 8 个)空格而不是一个一个,在 python 模式下按预期工作,但在 c++ 模式下不。有一个变量或任何解决方法?
【问题讨论】:
标签:
c++
emacs
tabs
key-bindings
【解决方案1】:
您的退格键 (<DEL>) 可能绑定到命令 backward-delete-char-untabify。将其绑定到其他东西,例如delete-backward-char.
来自 Elisp 手册,节点 Program Modes:
在大多数编程语言中,缩进应该因行而异
行来说明程序的结构。因此,在大多数
编程语言模式,输入<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-key 是nil,或者点是
在文字内,然后是变量中的函数
c-backspace-function 被调用。
默认情况下,用户选项c-backspace-function (C-h v) 的值似乎是...backward-delete-char-untabify。因此,您可以自定义该选项以将其设置为其他功能,例如delete-backward-char。这只会改变 C++ 和 C 模式的行为。