基本上我要问的是与vim的vb(bbww ...)和vw(wwbb ...)相同的功能:
我想绑定我的meta-j和meta-k来标记当前点之前和之后的单词。 Simple.el提供了mark-word函数,我将其绑定到meta-k。我将标记字功能改为:
(defun mark-backward (&optional arg allow-extend) ;
(interactive "P\np")
(cond ((and allow-extend
(or (and (eq last-command this-command) (mark t))
(and transient-mark-mode mark-active)))
(setq arg (if arg (prefix-numeric-value arg)
(if (< (mark) (point)) -1 1)))
(set-mark
(save-excursion
(goto-char (mark))
(forward-word arg)
(point))))
(t (push-mark
(save-excursion
(backward-word (prefix-numeric-value arg))
(point)) nil t))))
(global-set-key (kbd "M-k") 'mark-word)
(global-set-key (kbd "M-j") 'mark-backward)
这种方式有效。我想撤消一些标记使用另一个键,我该怎么做? (即在我用M-k标记一些单词后,我想用M-j取消标记左边的一些单词。目前,当我点击M-j时,emacs继续向前标记)。
答案 0 :(得分:3)
(defun my-mark-word (N)
(interactive "p")
(if (and
(not (eq last-command this-command))
(not (eq last-command 'my-mark-word-backward)))
(set-mark (point)))
(forward-word N))
(defun my-mark-word-backward (N)
(interactive "p")
(if (and
(not (eq last-command this-command))
(not (eq last-command 'my-mark-word)))
(set-mark (point)))
(backward-word N))
(local-set-key (kbd "M-k") 'my-mark-word)
(local-set-key (kbd "M-j") 'my-mark-word-backward)
这应该模仿VIM的行为(当然还有其他击键)。
备注: M-j
默认绑定到indent-new-comment-line
,这在源代码中编写注释块时非常方便。 M-k
默认绑定到kill-sentence
。
答案 1 :(得分:0)
您应该再将forward-word
替换为backward-word
。
但是,代码在选择左侧的单词时仍然存在问题。
聚苯乙烯。请编辑您的帖子 - 发布的代码几乎无法读取。