请教 evil-mode 用户一些问题

请问你们在光标导航的时候快速跳转到非空白字符行首和行尾的时候都是用的默认快捷键^$吗?以及,从编辑器复制内容到系统剪切板和从系统剪切板粘贴内容分别用的"+y"+p吗?

我想知道的是,这些快捷键是否操作比较繁琐,比如按^的时候需要同时按照Shift+6,手指操作距离比较远,还有"+y这种,需要按的键更多,不会很繁琐吗?

我平时在 emacs 原生按键模式下经常用到这几个操作,基本上都是M-m (行首)、C-e (行尾)、M-w (复制并同步系统剪切板)、C-y (从系统剪切板粘贴) ,都是两个键解决,而且操作非常快,尤其前两个使用频率还挺高的,如果换到 evil-mode 下,操作岂不是很麻烦?

还有模式切换用Esc还是Ctrl+[比较多呢?这个模式切换似乎也是一个比较繁琐的地方,不知道各位是怎么习惯的。

首先是熟练度的问题,都是组合件,左右手配合习惯。肌肉记忆后不会有太大差别。

其次,我个人用 Dvorak programming,这类直接按单键就行了。

1 个赞
  1. 不麻烦。
  2. 直接 y 和 p。
  3. Vim 为光标的移动和跳转设计了很多其它的操作符,可以深入了解。

我之前有短暂用过一段时间 vim,不过总体不太习惯所以就转到 emacs 了,基本操作我是没问题的,你说的 y 和 p 我印象里只是 vim 内部的寄存器读写,跟系统剪切板是隔离的吧

移动到当前行的首字符用^,移动到当前行的最后一个字符用$,移动到当前行的行首用0 从剪切板复制粘贴直接"y"p就可以,没那么复杂,可能要设置一下剪切板 切换模式一般用esc,如果你不习惯用esc,可以用evil-escape插件设置其他键

我主要是发现 emacs 在大量输入的情况下左手的操作远远多过右手,不知道 vim 的按键绑定能否缓解这种问题,另一方面又感觉 emacs 的快捷键非常简单直接,用起来很顺手,换了的话又有点舍不得,可能是一种利弊权衡吧

有个叫leader键的东西可以了解一下

从编辑器复制内容到系统剪切板和从系统剪切板粘贴内容

系统剪切板和 emacs 剪切板通常是同步的。所以普通的复制粘贴就会自动的同步。

比如你按 yip 复制了一个段落,就会自动的同步到系统的剪切板。如果你在别的程序里复制了一段内容,直接按 p 就行了,会自动的粘贴。

这点和使用 vim 不一样,vim 需要 set cilpboard += unnamedplus 以和系统剪切板保持同步。

如果你使用终端 emacs,需要使用 xclip 这个包以确保剪切板同步。

另外还有一个 vim 都常见的一个小麻烦,就是被删除掉的内容会自动进入剪切板。那么如果我想要复制一段内容,然后多次在不同的一些地方都再选中一段内容,然后用刚才复制的那段内容替换掉选中的内容。vanilla vim 要做这件事情需要学会一些寄存器的操作,以确保被替换掉的内容不会进入剪切板,还是挺麻烦的。可以看一下这个 evil-replace-with-register 的精简/改进版本 就可以非常简单的进行操作了。

模式切换用Esc 还是Ctrl+[

模式切换使用 evil-escape,短时间内连按 jk 就相当于 esc。这个基本上是 vim 发行版的通用配置了,你使用 lazyvim 之类的会发现这个就是默认配置。

C-a (行首)、C-e (行尾)

我在 insert 模式使用 emacs 键位,所以 C-a C-e C-k 之类的好用的按键我也是使用的。

1 个赞

系统剪贴板和emacs kill ring最近一条的内容是一样的,在emacs内外都是直接复制粘贴就行,至少我用过的windows和mac都可以。

麻烦且常用的是"0p,也就是“粘贴复制的内容”,它在kill ring里面会被最近kill的内容挤掉,我改成zp

^确实难按,所以我把C-a/e/f/b改成C-i/o/,/.了,并且在normal和insert mode下都生效。注意ctrl用左手,另一个键用右手,比全用一只手好按。我还写了一个0按一下到beg-of-line-text,再按到行尾,再按到beg-of-line,后来发现这个别人也想到了。

esc改成数字1前面那个键,并且把那个insert时连按fd就退出insert mode的插件装上

习惯了一些emacs默认按键就使用evil emacs state和evil normal state切换,再慢慢改键

1 个赞

在 GUI Emacs 里,y 和 p 是不隔离系统剪贴板的。

Emacs 是 Vim 最优秀的 GUI 端。

2 个赞

尽可能用 Leader-Key 或者 Transion、Hydra 等包,将命令绑定在自己顺手的位置。

在 evil-mode 的插入模式里,可以直接使用 emacs 的原生键位,对比纯 Vim 提供了更强的操作优势。

我觉得你可以找一些简介视频来看看,10 分钟长度,你就能了解基本概念。

另外也应当简单了解一下 Vim 为何在操作方面有优势,这方面推荐看 Vim Hacks 101。

2 个赞

在macOS中剪切板的功能交过Alfred即可。Emacs和Vim的都不如Alfred的剪切板功能强大。

跳转到行头和末尾,我设置快捷键的,这两个快捷键使用频率还是比较高的

(map! :nve "; g"      'evil-last-non-blank                   )
(map! :nve "; a"      'evil-first-non-blank                  )

spacemacs 用戶有 hybrid mode

insert mode 下 可以用 emacs keybindings (C-a / C-e) 就不用切到 normal mode 用 ^/$/0 了

這個包沒在 melpa 上

(setq evil-disable-insert-state-bindings t)

1 个赞

normal state 的0^功能可以交换,因为^相当于back-to-indentation,实际使用频率可能更高,evil-mode提供了一个custom variable可以直接帮你搞定,类似的还有把Y绑定为y$

我仔细想了一下,为什么我认为适应 "+y "+p ^ 是有好的。

"+y "+p 和其他寄存器操作具有一致性,能更好的理解vim,以及操作起来更安心,你可以明确知道你要的是什么。

^ $ 有语义好记忆,其实Shift+6并不比Ctrl+a更难按,但^的好处是,它不是一个快捷键,不能直接按出,它必须先进入normal,对,这更麻烦的一步是好处而不是坏处,因为它强迫用户分离了输入和修改两件事。

详细的就不说了。

哈哈,或许,vim更重要的,就在于,一切变麻烦了,更忙了,劈里啪啦一阵操作,其实差别不大。但,劈里啪啦就是爽啊。为什么一定要快呢。

在evil-mode中复制粘贴是默认使用系统剪贴板的

我用doom套件, 非空白到行尾我一般就是^然后Y(自动到系统剪贴板了) 切换到Normal mode我一般就是jk了,虽说C-g也可以,但还是jk顺手

要说^和$难按的话,我键盘还行,拇指按红标1,食指按2或者3就行:

spacefn, 按住空格加g就是^,空格加b就是$,空格加z就是+。windows 用 ahk, macos用 karabiner-elements,linux用 keyd