Emacs - 向前和向后标记单词

时间:2011-03-07 05:49:35

标签: emacs

基本上我要问的是与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继续向前标记)。

2 个答案:

答案 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

但是,代码在选择左侧的单词时仍然存在问题。

聚苯乙烯。请编辑您的帖子 - 发布的代码几乎无法读取。