Emacs - пометить слово вперед и назад - PullRequest
0 голосов
/ 07 марта 2011

По сути, я спрашиваю, эквивалентна ли функция vb vim (bbww ...) и vw (wwbb ...):

Я хочу связать свои мета-j и мета-k, чтобы отметить слово до и после текущей точки. Simple.el предоставил функцию mark-word, которую я связал с meta-k. И я немного изменил функцию mark-word на:

 (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 ]

3 голосов
/ 07 марта 2011
(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.

0 голосов
/ 07 марта 2011

Вы должны заменить forward-word на backward-word еще в одном месте.

Однако при коде все еще возникают проблемы при выборе слов слева от точки.Пожалуйста, отредактируйте свой пост - отправленный код едва читаем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...