Я бы, вероятно, просто использовал Md SPC XXX (если SPC необходим, зависит от того, находится ли курсор сразу после «один» или перед «двумя») или Mf M-DEL XXX , но, возможно, это не то, что вы ищете.
Хорошо, вы не ответили на мой комментарий и не проголосовали за ответ, поэтому я догадался, что вам может понравиться, и вот небольшой взлом:
(defun change-word (n)
(interactive "p")
(lexical-let ((old-window-configuration (current-window-configuration)))
(clone-indirect-buffer "*edit-word*" t)
(narrow-to-region (point) (save-excursion
(forward-word n)
(point)))
(overwrite-mode 1)
(local-set-key (kbd "C-c C-c")
(lambda ()
(interactive)
(widen)
(let ((end-of-edit (point)))
(kill-buffer)
(set-window-configuration old-window-configuration)
(goto-char end-of-edit))))))
Вызвать M-x change-word (или связать его с нужной вам клавишей), отредактировать слово и набрать C-c C-c , когда вы закончите. Если вы хотите отредактировать следующие n
слова, присвойте ему префиксный аргумент (например, M-3 M-x change-word для изменения следующих трех слов). Это не совсем то же самое - вы будете редактировать в другом буфере - но это близко. Попробуйте и посмотрите, нравится ли вам это. Это не очень сложное решение. Возможно, лучшим и наиболее подходящим в стиле emacs подходом было бы иметь что-то похожее на режим isearch, которое выделяет измененную область и так далее. Обратите внимание, что вам придется (require 'cl)
из-за lexical-let
.
Другая возможность будет выглядеть примерно так:
(defun change-word ()
(interactive)
(dotimes (i (- (save-excursion (end-of-thing 'word)) (point)))
(insert (read-char))
(delete-char 1)))
Но этот пример - очень грубый взлом - вы даже не сможете ориентироваться при редактировании своего слова. Может быть, кто-нибудь мог бы написать что-то, изменяющее поведение командной строки, но я не стал это рассматривать.
Я не знаю ни о какой встроенной функциональности, которая делает именно то, что вам нужно, но, конечно, есть встроенные Viper и другие режимы эмуляции Vi.