【问题标题】: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-keynil,或者点是 在文字内,然后是变量中的函数 c-backspace-function 被调用。

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

    【讨论】:

      猜你喜欢
      • 2010-10-17
      • 2014-10-01
      • 1970-01-01
      • 2023-04-03
      • 2023-03-19
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      相关资源
      最近更新 更多