大家都知道,在使用 vim 中有个非常方便的操作,是通过绑定快捷键实现光标快速行首行尾的移动。
nnoremap <expr>s col(".")==1?"$":"0"
vnoremap <expr>s col(".")==1?"$h":"0"
那么同样的在 emacs 中使用 evil-mode 也想实现这个快捷功能!
一个简单的思路是:判断光标当前 point 与行首的 postions 是否相等。如果相等就将光标移动到行尾,否则就移动到行首。
evil-normal-state 中,使用这个思路是完全没问题的,但对于 evil-visual-state 会自动将光标当前 point + 1,所以得针对这两种模式都要进行判断。自定义函数如下:
(defun evil/quick-line-s-e()
(interactive)
(when (or
(evil-normal-state-p)
(evil-visual-state-p)
(evil-motion-state-p))
(if
(or
(equal (line-beginning-position) (point))
(equal (+ (line-beginning-position) 1) (point))
)
(goto-char (line-end-position))
(goto-char (line-beginning-position))
)
)
)
目前,这个函数绑定快捷键后,使用倒是没有什么问题!但不知是否存在潜在的问题!所以想请使用 evil-mode 的大佬们看看这个函数是否有需要纠正修改的地方!