在 vim 中,我重新映射了>,<在可视模式下分别映射到>gv和<gv,如下所示:
vnoremap > >gv
vnoremap < <gv
Run Code Online (Sandbox Code Playgroud)
由于我的目标这个问题与emacs的经历乡亲,而不是VIM,什么>和<做的是缩进/ DEDENT语言视觉上选定的文本。什么gv是重新选择以前选择的文本。这些映射导致>和<缩进/缩进,然后重新选择先前选择的文本。
我正在尝试使用邪恶模式的 emacs,我也想做同样的事情,但是我在弄清楚如何准确地完成自动重新选择时遇到了一些困难。
看起来我需要以某种方式调用evil-shift-right和evil-visual-restore顺序,但我不知道如何创建一个可以同时调用和映射的映射,所以我尝试创建自己的函数,该函数将依次调用和映射,但它没有用,可能是因为它们都被定义为函数,defun而是作为运算符evil-define-operator。
我尝试创建自己的运算符:
(evil-define-operator shift-left-reselect (beg end)
(evil-shift-left beg end)
(evil-visual-restore))
(evil-define-operator shift-right-reselect (beg end)
(evil-shift-right beg end)
(evil-visual-restore))
Run Code Online (Sandbox Code Playgroud)
但这并没有像预期的那样恢复视觉。黑暗中的刺伤给了我这个:
(evil-define-operator shift-left-reselect (beg end)
(evil-shift-left beg end)
('evil-visual-restore))
(evil-define-operator shift-right-reselect (beg end)
(evil-shift-right beg end)
('evil-visual-restore))
Run Code Online (Sandbox Code Playgroud)
但是只要它应该重新选择,就会选择额外的一行。
现在我一直在使用以下内容,它只有在重新选择<运算符中的附加行的问题。
(evil-define-operator shift-right-reselect …Run Code Online (Sandbox Code Playgroud)