evil中替换当前符号的最简洁操作是什么

有个疑问,如果要用剪贴板里的内容直接替换当前光标所在的符号,在evil中的最简洁操作是什么? 我希望可以有一个像yio这样的命令直接替换,但目前evil似乎不支持。如果要自己扩展的话,这个命令会改写原有的r命令,不过这个r命令我可以丢弃。主要是考虑这样扩展,会不会破坏evil现有的体系。 如果实现了这个操作,带来的好处是所有yio这样可以复制对象的操作语义,可以同时应用于替换。带来的效率提升是巨大的。我相信任何人都不希望我用两步以上的操作来实现本来可以一步做到的事情。而且这是一个很常用的操作场景

我都是v选择后再p粘贴,相比而言只是多按了一个键,单次替换效率上没什么区别。另外先选择,再操作这样的模式也令我放心。

但这样做有一个缺点,就是一次粘贴后,剪贴板里会被替换成之前选择(被替换)的词,不能连续操作。以前似乎看到过一篇文章讲怎么避免的,但是突然间想找不是那么好找到。 似乎按大写P粘贴就行了

evil可以扩展出自定义对象,而这些自定义对象的选中不是只触发一个v就能选中的。 另外,最简洁的操作不是先选择再操作,而是直接操作。

你在操作上,完全不需要关心放不放心的问题。因为对象是什么,你非常清楚。大不了你操作错了之后,马上撤销,这不需要任何心智负担

装上这个,然后设置映射到 gr,最后需要替换字符时 grl,替换单词时 griw,替换行时 grr

感谢回复,不过有人告诉我有内置的命令了,感觉这个就是我想要的。只是比我最开始的设想多了一步,这个命令是viop,也是内置的。可能2楼说的就是这种用法,只是我一开始没理解v原来也支持对象选中 :grinning:

vim上是使用r然后输入想要的字符,不知道evil有没有实现。

这个默认行为是很有用的,你没觉得经常会用到刚刚被替换的部分嘛?

不过连续粘贴同一个内容也是很常用的,默认可以用"0p,但是引号按着麻烦,我把下面这个绑到了zp

(defun jester/evil-paste-after--from-copy-register (&optional count)
  "So often do we paste from the copy register, let's make it a command and bind it to a key and forget about \"0p"
  (interactive "p")
  (evil-paste-after (or count 1) ?0))

(defun jester/evil-paste-before--from-copy-register (&optional count)
  "So often do we paste from the copy register, let's make it a command and bind it to a key and forget about \"0p"
  (interactive "p")
  (evil-paste-before (or count 1) ?0))

(general-define-key
 :states '(normal visual)
 "z p" 'jester/evil-paste-after--from-copy-register
 "z P" 'jester/evil-paste-before--from-copy-register)