首页 > 解决方案 > Kakoune:如何在 goto 模式下映射“向前跳跃”和“向后跳跃”(例如,将“gp”映射到)

问题描述

我使用 dvorak 键盘,我想减少使用<c-i>and <c-o>(向后或向前跳跃)时伸手去拿控制键的压力。我认为',' 和'p' 键在与goto 菜单结合使用时是完美的(例如,首先按'g' 时)。(对于你们这些 qwerty 人来说,这意味着键盘上的键位 'w'、'e' 和 'r',当从 goto 菜单点击时会跳回,跳到最后一个编辑,然后向前跳)。于是……</p>

这是我想要的:

1) :map global goto , '<c-o>' -docstring 'jump back'                   // Does not work
2) :map global goto p '<c-i>' -docstring 'jump forward'                // Does not work

但是,由于莫名其妙的原因,这些命令都不起作用。我尝试了一堆实验,发现了一些更奇怪的东西:

尝试使用用户模式而不是 goto 模式(如此处所述:https ://github.com/mawww/kakoune/wiki/Implementing-user-mode )。

3) :map global user , '<c-o>' -docstring 'jump back'                  // Works
4) :map global user p '<c-i>' -docstring 'jump forward'               // Does not work

尝试对 map 命令中的命令字符串进行各种更改(返回 goto 模式)

5) :map global goto p 'd' -docstring 'delete the selection'        // Does not work
6) :map global goto p '/d' -docstring 'delete the selection'       // Works! (Why??)
7) :map global goto p '\d' -docstring 'delete the selection'       // Works! (Why?!?)
8) :map global goto p '\<c-o>' -docstring 'jump back'              // Works! (Why?!!?!!?)
9) :map global goto p '\<c-i>' -docstring 'jump forward'           // Does not work (Why!???)

综上所述:

a) 为什么#3 有效,而#4 无效?

b) 为什么在命令字符串(例如在#6、#7、#8 中)前面添加斜杠(任一类型)会使映射到 goto 模式的各种命令起作用?

c) 我怎样才能让我的#1 和#2 的意图起作用?(技术上 #8 解决了我对 #1 的意图,但我仍然无法回答如何做 #2)

标签: kakoune

解决方案


对问题 A 的回答:

正如这里提到的,

注意键同音词,如<tab>vs<c-i><ret>vs<c-j><c-m>

我开始<c-i>工作,将其替换为<tab>,如下所示:

:map global user p '<tab>' -docstring 'jump forward'

问题乙:

我无法弄清楚为什么 goto 模式与用户模式不同,但是在命令之前添加一个斜杠似乎可以解决所有问题。我发现的另一种方法是添加<esc>作为操作键的第一部分,在执行其余键之前将其恢复为正常模式。

对问题 C 的回答:

通过结合问题 A 和 B 的发现,我们得到以下工作地图命令:

:map global goto , '\<c-o>' -docstring 'jump back'                   // Works!
:map global goto p '\<tab>' -docstring 'jump forward'                // Works!

...或者...

:map global goto , '<esc><c-o>' -docstring 'jump back'                   // Works!
:map global goto p '<esc><tab>' -docstring 'jump forward'                // Works!

推荐阅读