vim 怎样自定义mode, 及该mode下的key-map?

sobright
  • 1.9k

面临的问题:

在使用gitgutter插件时, 可以通过下列命令在多个修改处间跳转

- GitGutterNextHunk
- GitGutterPrevHunk
- GitGutterPreviewHunk

如果给每个命令做个映射 <leader>j/k/p or \j/k/p..., 这些映射还有别的插件要用的,快捷键不够用啊。
但如果 \gj, \gk, \gp 操作起来嫌慢。

启发

i3wm 可以自定义 mode, 及mode下的按键映射


如题的效果,vim 是否可以实现,给个实现思路?

回复
阅读 2.2k
2 个回答
✓ 已被采纳

多年以后,我无意间碰到这个插件 vim-submode

配置如下

let g:submode_always_show_submode = 1
let g:submode_timeout = 0
let g:submode_keyseqs_to_leave = ['<Esc>', '<C-[>']

" nav git hunk
call submode#enter_with('nav_git_hunk', 'n', '', 'g@')
call submode#map('nav_git_hunk', 'n', '', 'j', ':GitGutterNextHunk<Enter>')
call submode#map('nav_git_hunk', 'n', '', 'k', ':GitGutterPrevHunk<Enter>')

操作流: nomal mode: g@jjjjjkkkkkkj<Esc>;还是很流畅的,谢谢插件作者

这种不常用的插件功能,做个快捷键我都嫌多余,你倒好,想要一个自定义模式

i3wm 试用过一次,不太熟,我觉得作为窗口管理器的所谓模式,可以相互切换

但是Vim 的模式,有一个中心点:Normal

按照你的思路,切换到自定义模式,跳转到你想要去的地方,再Esc切换回Normal模式,再进入Insert 模式,累不累?

再说,你看了GitGutter插件的说明了吗?

Hunks

You can jump between hunks:

  • jump to next hunk (change): ]c

  • jump to previous hunk (change): [c.

https://github.com/airblade/v...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏