【问题标题】:How to define keybinding inside a marked region如何在标记区域内定义键绑定
【发布时间】:2011-08-04 19:29:36
【问题描述】:

我想在 emacs 中更轻松地标记区域。

  1. 我按 C-SPC 开始。

  2. 我使用 vi 样式键来扩展选择。比如

"j" : line down
"k": line up

与使用箭头键或 C-n、C-p 相比,单个字符更容易按下

  1. 选择完成后,我选择一个键来做某事,也使用vi风格的键

    “c”:无效区域,复制区域。 "d" 删除区域 “#”评论区 “空间”无所事事地离开

我知道我可以使用“M-w”“M-k”或其他方式来完成这项工作,但我认为 vi 样式键是一种更简单的方式来完成这项工作。

我到处搜索,但是没有elip包可以做这样的事情。

有人可以帮我写一些函数吗?或者给我一些建议。

我找到了一个不错的方法,分享解决方案:

(

defvar active-region-mode-map
  (let ((map (make-sparse-keymap)))
    map)
  )

(define-minor-mode active-region-mode
  "Active Region minor mode."
  :init-value nil
  :lighter " Region"
  :keymap active-region-mode-map
  :group 'active-region
  )

(defun active-region-on ()
  (active-region-mode 1))
(defun active-region-off ()
  (active-region-mode -1))
(add-hook 'activate-mark-hook 'active-region-on)
(add-hook 'deactivate-mark-hook 'active-region-off)

现在,享受它,“active-region-mode-map”映射键绑定你喜欢。例如:

(define-key active-region-mode-map (kbd "j") 'next-line)

【问题讨论】:

  • 我自己不太了解 elisp/没有足够的时间来做这件事,但是:您可能可以将 j/k/c/d/# 从他们的“自插入”代码重新绑定到一些自定义检查标记是否处于活动状态的代码。如果是,请按照您的描述进行操作,如果不是,请调用 self-insert。
  • 我会试试的。我认为有些人可以写一个区域模式图。这样的代码可以让我更容易定义键绑定。
  • 是的,这可能是个好主意。自动化“重新绑定自插入”的事情,然后就很容易了。
  • 该区域的用途不仅仅是评论,删除等。该区域限制了许多命令的操作范围。例如“C-M-h C-x n n” 缩小到当前函数等。虽然你的项目很有趣,但我认为如果你掌握它自己的范式而不是从 vim 移植东西,你的 Emacs 生产力将会提高。
  • 谢谢!这段代码很棒!我将它用于 move-text.el、multiple-cursors.el 和 eval-code-in-region... 确实为我节省了很多时间来找出键绑定的东西,甚至可能是一个键盘 :)。

标签: emacs vi region


【解决方案1】:

你可以看看viper-mode

【讨论】:

  • 我知道 viper 模式,但我的想法是在 emacs 中更简单的方法。在区域内,您可以使用单个键而不是组合键。它不是编辑模式,就像 dired 模式或 ibuffer 模式一样。
  • 我不认为这是可行的,除非你愿意为这个功能定义一个完整的模式......单键默认绑定到自插入并且绕过那个是有点棘手,更不用说它违反了 Emacs 核心键绑定原则 :-)
  • 但在某些模式下,您可以使用这种键绑定。 Dired 模式,"n" "p" 代替 "c-n" "c-p" 在一个区域内,你也可以使用这样的键绑定。我希望有一个区域模式地图。
  • 由于在这种模式下没有编辑,他们明确地将键绑定到不同于自插入的东西。您可能会在标记区域(或任何名称)周围添加一些建议。该建议类似于面向方面的编程——它允许围绕其他代码调用代码。有了这样的建议,您可以在选择区域期间临时重新绑定您的密钥,然后恢复旧绑定。查看 Emacs Lisp 手册中的 defadvice。
  • 我刚刚解决了这个问题,你可以写一个简单的次要模式,命名为active-region,并写一个active-region-mode-map。使用此模式,您可以定义区域中的任何键控。覆盖默认键绑定非常容易(M-w 到别的东西)。我在谷歌找到了答案,但你的评论给了我很好的建议。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多