不得不感慨,给evil加配置要比vim script简单多了

用习惯了 vim 的人都更习惯直接 operator 操作 motion 或 textobjects 而不是先选中再操作 【ya) 而不是 Va)y 的区别】。 今天把 python-shell-send-region 这个函数从先选中再操作的方式改成直接用operator来操作,竟然总共只用了3行完成:

(evil-define-operator my-send-region-to-python (beg end)
  "This operator sends the region (either motion or text objects) to python REPL"
  (python-shell-send-region beg end))

(evil-define-key 'normal python-mode-map (kbd "SPC SPC r") #'my-send-region-to-python)

作为对比,同样是在已经实现了核心功能,只需要设置一下范围的情况下,可以看下在vim里面要实现一个operator就要拐弯抹角很多

这还没完,在定义快捷键的时候,operator也不能像普通的快捷键那样直接定义:

nnoremap <space><space>r :set opfunc=SendMotionToR<CR>g@

此外,在vim里面,只针对当前行的操作和 operator 通常需要 map 两次,(例如 yy 和 y 本质上是两个命令),但是evil 在定义完一个operator以后,只针对当前行的操作就自动给你定义好了 (比如 SPC SPC r r 就自动变成了 send 当前行到 python)

4 个赞

evil 为了模拟 vi 也是用了很多黑魔法。

如果你写一个函数希望兼容没有启用 evil 的情况,就要注意选区边界问题了。

1 个赞