【发布时间】:2011-08-04 19:29:36
【问题描述】:
我想在 emacs 中更轻松地标记区域。
我按 C-SPC 开始。
我使用 vi 样式键来扩展选择。比如
"j" : line down "k": line up
与使用箭头键或 C-n、C-p 相比,单个字符更容易按下
-
选择完成后,我选择一个键来做某事,也使用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... 确实为我节省了很多时间来找出键绑定的东西,甚至可能是一个键盘 :)。