【问题标题】:Improved tab in EmacsEmacs 中改进的选项卡
【发布时间】:2008-12-05 20:07:41
【问题描述】:

我想覆盖 emacs 中错误的默认选项卡方案,以便它可以像大多数其他编辑器(eclipse、notepad++)一样工作。我想设置它,以便无论模式如何,选项卡都会插入一个选项卡,按 Enter 将使我保持当前的选项卡深度。

我试过了,但它什么也没做:

(global-set-key (kbd "TAB") 'tab-to-tab-stop)
(setq default-tab-width 4) ;; 8 is way too many

【问题讨论】:

  • 一些主要模式可能会覆盖这个。你能多谈谈你的环境吗?
  • 我的目标是让它适用于所有环境。当它决定它比我更了解并拒绝让我随意缩进时,它真的让我很恼火。例如。在 apache 配置中,它允许我使用 1、8 个字符选项卡,并且没有更多。 elisp 模式是健全的,但与通常的不一致。
  • 如果它只允许一个 8 字符的制表符,解决方法是改变 that,改变它的制表位。 (或更改缩进功能。)

标签: emacs elisp indentation


【解决方案1】:

要让 Enter 键带你到下一行并自动缩进,你可以放

(global-set-key (kbd "RET") 'newline-and-indent)

在您的.emacs 中。 [或者你可以点击C-j而不是Enter。]一旦你有了它,你将永远不需要手动插入制表符,因为Emacs会在左大括号等之后自动缩进一个新行到额外的深度。如果你确实想要更改缩进,您可以按 TAB 直到它带您到正确的缩进,然后从那里开始输入。 [当你键入一个右大括号时,Emacs 足够聪明,可以将该大括号向后缩进一级。]

您应该删除 (global-set-key (kbd "TAB") 'tab-to-tab-stop) 以使其正常工作。

【讨论】:

    【解决方案2】:

    许多主要模式会覆盖 TAB 绑定,例如 cc-mode 将 TAB 绑定到 'c-indent-to-column

    建议的'global-set-key 没有任何作用,因为几乎所有主要模式都覆盖了TAB

    可能对您有用的一个技巧是复制'pabbrev 使用的方法,并定义一个具有TAB 绑定的全局次要模式。你可以这样做:

    (defvar just-tab-keymap (make-sparse-keymap) "Keymap for just-tab-mode")
    (define-minor-mode just-tab-mode
      "Just want the TAB key to be a TAB"
      :global t :lighter " TAB" :init-value 0 :keymap just-tab-keymap
      (define-key just-tab-keymap (kbd "TAB") 'indent-for-tab-command))
    

    但是,这会禁用所有 TAB 完成。通过一一覆盖每个主要模式,您可能会获得最佳结果(以避免混淆TAB完成)。

    【讨论】:

    • 实际上,很少有主要模式重新绑定TAB,更不用说应该这样做了。他们应该改用indent-line-function
    【解决方案3】:

    当我第一次开始使用 Emacs 时,这也困扰着我。不过,我已经爱上它了。如果我想适当缩进,我点击<tab>; 如果我想插入一个文字制表符,我点击M-i(Meta and 'i' or - in some parlances)绑定到@987654323 @。

    【讨论】:

      【解决方案4】:

      我认为特雷杰克逊的答案可能是您想要的,除了可能使用'self-insert-command 而不是'indent-for-tab-command。我个人更喜欢 emacs 的默认行为,但 self-insert-command 会按照它所说的去做,而不是尝试做任何花哨的事情,比如确保你的代码格式正确。

      我实际上想要插入制表符(不是缩进)的几次我按 M-i。

      【讨论】:

      • M-i!!!!先生,您亲自将我从腕管中救了出来……Control-q <TAB> 开始对我的左手造成伤害。
      • M-itab-to-tab-stop,它仅在 indent-tabs-mode 为真时插入制表符。但是,您可能会发现 C-q C-iC-q TAB 更容易键入(尤其是如果您将 Caps Lock 键配置为 Ctrl 键)。
      【解决方案5】:

      您可能对我在http://github.com/vohrta/regtab 创建的这个次要模式感兴趣。

      它使得当您按下制表键时,制表符(如果 indent-tabs-mod 不为零)或制表宽度空格将放置在点处。该模式还能够处理您可能认为在选定文本区域上的常规行为以及使用 shift-tabbing 删除行(或一组行)开头的选项卡。

      您可以随时通过按 M-x regtab-mode 启用或禁用它。

      【讨论】:

        【解决方案6】:

        C-j 执行您希望不按 Enter 的换行 + 缩进功能。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-04
          • 2011-03-11
          • 1970-01-01
          • 2010-10-17
          • 2021-10-19
          • 2018-04-19
          • 1970-01-01
          • 2011-05-07
          相关资源
          最近更新 更多