【问题标题】:How to bind keys to indent/unindent region in emacs?如何将键绑定到 emacs 中的缩进/未缩进区域?
【发布时间】:2015-11-23 03:28:19
【问题描述】:

我想定义两个键绑定到缩进/取消缩进区域 4 个空格。


之前:

hello
world
foo
bar
  • 直观地选择worldfoo
  • 键入 >

之后:

hello
    world
    foo
bar

我还想将 绑定到未缩进区域。
我不熟悉emacs,请帮忙。

【问题讨论】:

  • 指出你的实际工作。即..您正在使用的模式/语言。它可能已经具有此功能。
  • 我在这个答案中为标签/取消标签区域制作了功能:stackoverflow.com/questions/2249955/…

标签: emacs


【解决方案1】:

已经有键盘快捷键:

缩进:C-u 4 C-x TAB

取消缩进 C-u - 4 C-x TAB

如果您觉得输入太长,您可以将以下内容放入您的 .emacs 文件中:

(defun my-indent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N 4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(defun my-unindent-region (N)
  (interactive "p")
  (if (use-region-p)
      (progn (indent-rigidly (region-beginning) (region-end) (* N -4))
             (setq deactivate-mark nil))
    (self-insert-command N)))

(global-set-key ">" 'my-indent-region)
(global-set-key "<" 'my-unindent-region)

使用此代码,大于 (>) 和小于 () 键将缩进/将标记区域每个缩进 4 个空格。

【讨论】:

  • 谢谢。我可以重新选择以前的地区吗?这样我就可以缩进几次。
  • 我刚刚编辑了代码以保持该区域处于活动状态。但您通常可以通过键入C-x C-x 重新选择。然后您还可以使用前缀参数:例如,C-u 2 &gt; 将缩进 8 个空格。
  • @kev 你也可以在 Emacs 中输入C-x z 来重复前面的命令。如果您想多次重复,请多次输入z
  • 我将此代码添加到 .emacs 文件中,但它仍然显示 C-c &gt; undefined,我重新启动了 emacs 顺便说一句
  • 这里要注意,要缩进和取消缩进区域的第一行,您需要在标记区域的开头多选择一行。但是非常棒!
【解决方案2】:
(defun keyboard-indent (&optional arg)
  (interactive)
  (let ((deactivate-mark nil)
        (beg (or (and mark-active (region-beginning))
                 (line-beginning-position)))
        (end (or (and mark-active (region-end)) (line-end-position))))
    (indent-rigidly beg end (* (or arg 1) tab-width))))

(defun keyboard-unindent (&optional arg)
  (interactive)
  (keyboard-indent (* -1 (or arg 1))))

【讨论】:

    【解决方案3】:

    除了@Thomas 已经写过的内容之外,您可能不想使用键&lt;&gt; 进行缩进或取消缩进。只是图像,您需要编写一些 HTML 并且不能再输入这些字符。这就是我在init file 中插入以下内容作为关键设置的原因:

    (global-set-key (kbd "C-<") 'my-indent-region)
    (global-set-key (kbd "C->") 'my-unindent-region)
    

    注意:如果没有(kbd ...),它将无法工作。你会得到一个错误:

    global-set-key: Key sequence C - > starts with non-prefix key C
    

    【讨论】:

    • 在我上面的回答中不能再使用&lt;&gt; 键是不正确的;相反,代码检查当前是否选择了缓冲区的某些部分,并且只有在您按下适当的键时才(取消)缩进。如果您只想插入&lt;&gt;,则只要没有选择任何内容即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2016-08-08
    相关资源
    最近更新 更多