鉴于以下句子:
这是一两三.
当我将光标移动到一到两个之间的空格时,我想用XXX 替换两个.我知道在vi中有一种方法,所以我可以将两个标记为修改后的字符串,这样当我完成输入新字符串并且新字符串替换两个就地.
// Update-1 //
vi中的相应命令是'cw'
我可能只是使用M-d SPC X X X(如果SPC是必要取决于羯羊光标后"一"字直接放置或之前"二")或M-f M-DEL X X X,但也许这不是你要找的内容.
好吧,你没有回答我的评论,也没有投票给答案,所以我猜到你可能会喜欢什么,这里有点黑客:
(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))))))
Run Code Online (Sandbox Code Playgroud)
调用M-x change-word(或将其绑定到您喜欢的键),编辑单词,并C-c C-c在完成后键入.如果要编辑下一个n单词,请为其指定前缀参数(例如M-3 M-x change-word,更改后三个单词).它不完全相同 - 你将在另一个缓冲区编辑 - 但它接近.试试看你是否喜欢它.这不是一个非常复杂的解决方案.也许最好的,也是大多数emacs风格的方法,都有类似于isearch-mode的东西,它突出了变化的区域等等.请注意,你必须要(require 'cl)因为lexical-let.
另一种可能性是这样的:
(defun change-word ()
(interactive)
(dotimes (i (- (save-excursion (end-of-thing 'word)) (point)))
(insert (read-char))
(delete-char 1)))
Run Code Online (Sandbox Code Playgroud)
但是这个例子只是一个非常粗糙的黑客 - 你甚至无法在编辑单词时进行导航.也许有人可以写一些修改命令循环行为的东西,但我没有考虑到这一点.
我不知道任何内置功能可以完全满足您的需求,但当然还有内置的Viper和其他Vi仿真模式.
| 归档时间: |
|
| 查看次数: |
7000 次 |
| 最近记录: |