【问题标题】:TAB key not working in scratch buffer of emacsTAB 键在 emacs 的暂存缓冲区中不起作用
【发布时间】:2019-08-20 05:08:15
【问题描述】:

在将文本输入暂存缓冲区时按 TAB 键不会执行任何操作。我希望 TAB 键的行为与其他普通缓冲区中的行为完全相同(通过插入一些 X 个空格或插入 TAB 字符来向前移动点)。你能帮我实现吗?谢谢你。

我遇到了以下问题,但没有答案,并且评论中提到的链接无效。我没有足够的分数来添加评论。

How to enable tab key in scratch buffer of emacs?

如果您可以为上述问题添加答案,请随时关闭当前问题。

【问题讨论】:

  • 我投票决定关闭 that question 作为这个问题的副本,因为这个问题已经有了有用的答案。

标签: emacs


【解决方案1】:

TAB 在大多数编程语言模式下的行为不是“插入制表符”,而是“确保该行的代码根据当前规则正确缩进”。暂存缓冲区的默认模式是lisp-interaction-mode,由于您没有编写任何 Lisp 代码,因此无需缩进,因此 TAB 什么也不做。

有几种方法可以改变这一点。您可以将主要模式更改为 text-modefundamental-mode,用于单个会话(使用 M-x text-mode)或永久(通过将 (setq initial-major-mode 'text-mode) 放入 .emacs 文件)。

或者您可以不使用该模式,然后完全重新绑定 TAB 键。一种方法是

M-: (global-set-key (kbd "TAB") 'self-insert-command)

我确信还有许多其他选择,具体取决于您希望暂存缓冲区的确切作用。

【讨论】:

    【解决方案2】:

    如果您只想插入TAB 字符(即\t),那么您可以使用quoted-insert 函数。默认情况下它绑定到 C-q。它捕获下一个输入字符并逐字插入。所以在你的情况下,这将是 C-q TAB.

    【讨论】:

      【解决方案3】:

      我发布了that comment 的链接现在已经失效,所以我将引用the Wayback Machine copy

      Emacs 没有插入任何东西!!

      如果你和我一样,你可能认为这是一个错误。您一直按 TAB 键,但没有任何反应。

      在编程模式下,例如在编辑 C、Perl 或 Lisp 源代码时,TAB 键与特殊的缩进规则绑定。也就是说,TAB 键不是像在文本模式中那样绑定到indent-relative,而是预先绑定到cc-indent-linelisp-indent-line(如果编辑你的.emacs 文件),等等。在c模式下,按TAB键会将光标移动到第一个缩进级别,之后无论按多少次都不能向前移动光标。

      如果此行为不是您想要的,您可以执行以下操作之一:

      • 立即按Ctrl-q <TAB> 插入TAB 字符
      • 暂时将 TAB 键重新分配给 self-insert-command,同时保持相同的编辑模式
      • 为此会话切换到不同的编辑模式; TAB 行为会随着编辑模式的变化而变化
      • 更改您的 .emacs 文件以永久更改您现在使用的文件类型的编辑模式

      我建议阅读整个页面,因为它很好地解释了 Emacs 如何处理 TAB 键和制表符与几乎所有其他字符不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-18
        相关资源
        最近更新 更多