xah-fly-keys使用总结

群里有使用 xah-fly-keys 的同学吗?

我写了一个 xah-fly-keys 使用总结

欢迎大家来一起讨论下 :slight_smile:

3 个赞

改用直接 html 写博客,厉害了。

a typo: befor 2018-11-10

跟杀哥学的。现在还在摸索中。就将学一下html和css这些。要不一起呀:slight_smile:

hold 不住,我打算还是用一个 org 的静态生成器简单搞搞。

直接用 html 如果要改排版什么的,岂不是很麻烦,毕竟内容和“展现”混合在一起了。

你可以试试 SGML

isearch让我换掉了avy,想让我换swiper?有难度

像evil一样完全覆盖掉原mode的按键绑定。

evil-emacs-state就不会破坏任何原有的绑定了

确实是这样。不过evil的emacs state默认好像绑在C-z上。不太好按。可能是这个原因吧。我用evil几乎就从来没进过emacs state。哈哈。基本就用evil的normal和insert模式了。

xah-fly-keys其实就两个模式,insert和command。insert中基本就保留原来的按键绑定了。command就是用来操作的。

xah-fly-keys在command模式时,大写字母和大部分特殊字符都没有做按键绑定,所以呢,在少数只需要输入这些的情况下,都不需要进入insert模式的。直接command模式下输入就行了。这点我在 xah-fly-keys中一些好用的功能 这节中补充了一下。

我还补充了一节 xah-fly-keys中一些好用的功能 :slight_smile:

后面有想到会持续更新……

欢迎讨论啊。

最近感觉用spacemacs的evil用着特别不爽,看到这个帖子忍不住想尝试一下,但是从头写配置太麻烦了,能看一下你的配置吗?

不用了,从github上git了你的emacs.d,先研究一下,谢谢!

hi,github上的.emacs.d不是我现在用的。我现在用的是 emacs-xah-fly

嗯,看到了,里面你自己的设置太多,正在慢慢摘呢。

用过半个小时 :joy:

Xah Lee 确实是一个有趣的人,精神状态很好。

xah-fly-keys 确实是一个不错的键位模式,但是注定使用不会太广泛。使用惯性问题,许多人已经习惯了 Emacs 的原生按键或 Evil 按键,并进行了适合个人的定制,迁移的代价不小。

例如,我使用 Evil,但主要集中在使用 eval-leader 去绑定按键,结合 which-keysmex 体验很不错。在插入模式下,因为中英文切换略频繁,而 vim 的插入模式在中文模式下很难让人感到满意。 :turtle: 所以我清除了所有插入模式下的 Vim 键位设置,恢复 Emacs 原生键位,类似于 spacemacs 中的 hybird 模式,如这样:

(use-package evil
  :ensure t
  :hook (after-init . evil-mode)
  :config
  (setcdr evil-insert-state-map nil)
  :bind (:map evil-motion-state-map
         ("C-u" . scroll-down-command)
         :map evil-insert-state-map
         ([escape] . evil-normal-state)))

完整的配置,有兴趣的可以在 .emacs.d/lisp/init-evil.el 中看到 :nerd_face:

2 个赞

楼主现在还在用吗

一直都在用的。我在windows,mac和linux上都用

在用, 看了你的博文, 学到了一些, 正在学习中

关于双模式的模式编辑,发现kakoune里面的选择和移动放在一个键上的使用体验确实很好。

最近试着给自己写了一个模式编辑,针对dvorak布局。

取了11个指令:

h Head, t Tail, n Next, p Prev

基本的光标移动,同时会取消选择。在Dvorak上面对应的位置很好按,保留n, p是因为有很多模式下面没有必要启用模式编辑,这样n, p的上下移动体验是一致的,不需要做任何处理。


w Word, m Mark/Back Word

w选择下一个词;m选择当前词,已有词选择时选择前一个词。在region激活的时候,i在region的开头插入,a在region的末尾插入,所以选了一个词就相当于同时拿到了词的开头和末尾两个位置。可以省掉Vim里面的e


e Expression

选择当前表达式(symbol或list),已有选择时选择下一个。region激活时可以使用xexchange-mark-and-point,遇到当前block的边界的时候会自动的调转光标的方向。用来实现原本的C-M-f, C-M-b的功能,配合删除实现C-M-k的功能。


b Block

选择当前的block(list),已有选择时选择更外层的block,类似expand-region的行为。用来实现原本的C-M-n,长按的话就会变成选择整个defun,对于eval各个层级的表达式很有帮助。


l Line

选择当前的行,已有选择时向光标的方向扩展一行,L键在Dvorak上面的位置不是很好,所以多用数字会好一些。5l选择5行。可以代替C-a(lx)和C-e(l)。


f Flip

选择当前block中光标右侧的内容,已有选择时反转,光标始终在外侧。主要有几个用途:

  1. 用来清空block中的全部内容或一部分内容。相比于Vim中常用的类似dt)的方式,这个方式比较容易保障按键顺手,比如fc, fk
  2. 用来在当前block某端追加内容,比如fafi

B Buffer

选择整个Buffer,还可以代替M-> (B)和M-< (Bx)。


其中i, a, x, k是常用的配合的按键。 基本所有的常用组合指令,或者说常做的操作,都避开了同手同指,邻指跨行,同手跨多列。

其实,是可以处理的,比如:

刚接触,所以文章只能看懂一小部分 第一个问题就是,hjkl的功能目前也是按使用频率定义的吧,但和vi默认的不一样,请问你是如何解决的呢?

是适应xah的jikl(在用,但是用的时候总是会卡一下,多一步思考),还是修改了呢,另外上下翻页是什么快捷键呢

还有按 SPC c-h 出来的那个快捷键的说明在哪里找,比如xah-key-dot-keymap啥的 http://xahlee.info/emacs/misc/xah_fly_keys_leader_keys_2021-05-17.txt