之前我们定义了各种各样的快捷键,有为了增强功能自定义的,有针对插件的。数量一多有的时候就不那么容易记忆了。要是每次要去配置文件找我定义了哪些快捷键肯定会影响使用的。

本篇将要介绍一个插件,它是快捷键的一个词典,可以快速找到我们想要的快捷键

安装

使用 packer 的小伙伴可以使用如下代码进行安装

use {"folke/which-key.nvim"}

然后我们新键一个文件作为它的配置文件,并写入如下代码

require("which-key").setup({})

这个时候我们使用一些快捷键并且在中间停顿一下就可以看到它已经给出了相关的提示了

配置

默认的配置已经足够好了,基本不需要我们对它的行为做某些配置。它真正强大的地方在于,我们可以自己注册快捷键到显示中去。有时候不知道什么原因某些插件或者我们自定义的快捷键无法显示时可以使用这个方法注册到显示中。

假设我们现在有一个 <leader>ff 的键,它用来打开配置文件,但是它在 which-key 中没有显示出来,我们可以使用它的 register 方法来注册。该方法原型如下

register(mappings, opts)

它接收两个 table 参数,第一个表示需要注册的快捷键绑定,第二个是注册时的一些属性。

mappings 中的字段主要用来定义快捷键以及它的显示文字,后面我们通过例子来体会它的具体参数

opts 主要有下面几个参数

  • mode: 表示模式,与nvim_set_keymap第一个参数中的模式相同
  • prefix: 前置键,我们触发该条快捷键需要的前置键,一般使用leader作为前置键
  • buffer: 命令对应的缓冲区id,用它来指定这个绑定作用于某个局部缓冲区
  • silent: 同我们之间介绍的 nvim_set_keymap中的 silent含义
  • noremap: 快捷键不进行递归传递

接下来我们通过几个例子来体会它的用法

local wk = require("which-key")
wk.register({
f = {
name = "myvimrc", -- 指定该快捷键组的名称
f = {":edit $MYVIMRC<CR>", "Open vimrc"}, -- 创建新的快捷键绑定
s = {":source $MYVIMRC<CR>", "reload vimrc", noremap = true},
-- 也可以只显示一个标签而不绑定到具体的快捷键
e = {"New File"}
}
}, {prefix = "<leader>"})

通过上面的代码我们绑定了 <leader>ff<leader>fs<leader>fe 这三个快捷键。我们可以尝试一下执行 <leader>ff 发现它确实打开了我们的配置文件,而且我们稍微停顿一下它也给出了提示



我们将这个改写一下

wk.register({
["<leader>"] = {
f = {
name = "myvimrc", -- 指定该快捷键组的名称
f = {":edit $MYVIMRC<CR>", "Open vimrc"}, -- 创建新的快捷键绑定
s = {":source $MYVIMRC<CR>", "reload vimrc", noremap = true},
-- 也可以只显示一个标签而不绑定到具体的快捷键
e = {"New File"}
}
}
}, {silent = true, noremap = true})

或者也可以改写为这样

wk.register({
["<leader>f"] = {
name = "myvimrc",
f = { ":edit $MYVIMRC<CR>", "Open vimrc" },
s = { ":source $MYVIMRC<CR>", "reload vimrc", noremap = true },
n = { "New File" },
},
})
wk.register({
["<leader>f"] = { name = "myvimrc" },
["<leader>ff"] = { ":edit $MYVIMRC<CR>", "Open vimrc" },
["<leader>fs"] = { ":source $MYVIMRC<CR>", "reload vimrc", noremap = true },
["<leader>fn"] = { "New File" },
})

到这里相信各位小伙伴应该已经明白了如何使用 mappings这个字段,它外层是每次按下的按键,最内层则用来绑定具体的命令和提示时显示的具体内容。一般来说我们用不到这个东西,但是如果希望动态的修改这个显示的内容,例如把快捷键归类,这个就很有用了。

我们可以对照一下之前定义的快捷键,发现分屏相关的快捷键并没有显示出提示,这个时候我们就可以将它添加到对应的快捷键中

wk.register({
["s"] = {
name = "split window",
v = { ":vsp<CR>", "vertical split window" },
h = { ":sh<CR>", "horizontal split window"},
c = { ":close<CR>", "close this window"},
o = { ":only<CR>", "close all but this window"},
},
}, {noremap = true, silent = true})

如果你不喜欢它用英文显示,还可以尝试 将所有英文提示改为中文,这是一个浩大的工程,有兴趣的小伙伴可以尝试一下

查看所有快捷键绑定

有时候我们不知道某个功能具体绑定到哪个键上面了,甚至不知道它有这个快捷键绑定,这个时候可以使用 :WhichKey 这个命令来检查一下。它默认有2个参数

  • 第一个参数是一个字符串,查看所有以此字符串为开头的快捷键,例如使用 :WhichKey <leader>s 来查看所有以 <leader>s开头的快捷键
  • 第二个参数一个是表示模式的字符,用来限定它只显示绑定在某个模式中的快捷键,例如 :WhichKey<leader>s n 只显示在 normal 模式下的快捷键

好了,本篇的内容到此就结束了。

从零开始配置 vim(17)——快捷键提示的更多相关文章

  1. mac配置vim-go

    基本的设置信息(参考网址:http://hessian.cn/p/1026.html): "还是配置/.vimrc文件. syn on "语法支持 set laststatus=2 ...

  2. vim使用快捷键

    vim使用快捷键 索引 1. 关于Vim 1.1 Vim的几种模式 2. 启动Vim 3. 文档操作 4. 光标的移动 4.1 基本移动 4.2 翻屏 4.3 标记 5. 插入文本 5.1 基本插入 ...

  3. 从零开始配置TypeScript + React + React-Router + Redux + Webpack开发环境

    转载请注明出处! 说在前面的话: 1.为什么不使用现成的脚手架?脚手架配置的东西太多太重了,一股脑全塞给你,我只想先用一些我能懂的库和插件,然后慢慢的添加其他的.而且自己从零开始配置也能学到更多的东西 ...

  4. VIM常用快捷键(转载)

    移动光标 h,j,k,l 上,下,左,右 ctrl-e 移动页面 ctrl-f 上翻一页 ctrl-b 下翻一页 ctrl-u 上翻半页 ctrl-d 下翻半页 w 跳到下一个字首,按标点或单词分割 ...

  5. 【vim环境配置】在centos6.4上配置vim的一些零碎记录

    上一篇日志已经step by step地实录了如何在本机mac上配置vim开发环境已经各种插件. 有了一定经验之后,开始在实验室远程server上centos6.4的环境下配置vim环境. 这台机器是 ...

  6. 为Python配置Vim编辑器(GUI/非GUI皆可)

    原文地址:https://blog.csdn.net/alanzjl/article/details/49383943 Vim as a python IDE ** 最近一直在写Python,但一直没 ...

  7. [转帖]VIM常用快捷键

    VIM常用快捷键 https://www.cnblogs.com/markleaf/p/7808817.html 快捷键能够显著的提高工作效率 一.移动光标 h,j,k,l 上,下,左,右ctrl-e ...

  8. Mac 配置 vim

    Mac 配置 vim 安装 vim 7.4 cd ~ hg clone https://code.google.com/p/vim/ cd vim ./configure --with-feature ...

  9. Vim命令快捷键(网摘)

    Vim命令快捷键(网摘) 原文出处:[?---->home]

  10. 一些常用的vim编辑器快捷键:

    一些常用的vim编辑器快捷键: h」.「j」.「k」.「l」,分别控制光标左.下.上.右移一格. 按「ctrl」+「b」:屏幕往“后”移动一页. 按「ctrl」+「f」:屏幕往“前”移动一页. 按「c ...

随机推荐

  1. Linux 检查应用不在现就重启

    每5分钟检查一次,如果不在线就重启 #!/bin/bash count=`ps axu | grep kafka_2.11-1.0.0|grep -v grep|wc -l` echo "p ...

  2. svelte响应式原理

    svelte文件编译为js后的结构 源代码: <script lang="ts"> let firstName = '张' let lastName = '三' let ...

  3. ElasticSearch 精确查询统计

    ElasticSearch 精确查询统计 match_phrase:短语匹配,不分词 GET logback-2022-08/_search { "size": 1, //显示1条 ...

  4. WSL2 配置 ArchLinux 初始化环境

    这篇文章针对的是在 Win11 系统的 WSL2 下安装 ArchLinux 系统, 网上很多中文教程都是使用 LxRunOffline 去做的,但是实际上该方法已经过时了,目前有更加先进的ArchW ...

  5. 【库函数】QT 中QString字符串的操作

    QString是QT提供的字符串类,相应的也就提供了很多很方便对字符串的处理方法.这里把这些对字符串的操作做一个整理和总结. 1. 将一个字符串追加到另一个字符串的末尾 QString str1 = ...

  6. 第九届蓝桥杯(2018)C/C++大学A组省赛题解

    第一题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + - 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似:3/2 当然,这只是加了前2项而已. ...

  7. 创新推出 | Serverless 调试大杀器:端云联调

    背景 说起当前最火一个技术, 不可避免地讨论到一个概念: Serverless.作为一种新型的应用架构,Serverless 让我们摆脱了维护基础设施的繁琐,只需要上传代码包或者镜像, 即可得到一个弹 ...

  8. uni-app app定位当前地理位置

    https://blog.csdn.net/HXH_csdn/article/details/112258398?utm_medium=distribute.pc_relevant.none-task ...

  9. SD Host控制器的datasheet

    SD-Host控制器的datasheet更多的是给嵌入式软件工作人员使用,datasheet中主要包含一些寄存器以及读写擦除流程 寄存器主要有: 控制寄存器 状态寄存器 配置寄存器 软件和硬件进行交互 ...

  10. AHB-SRAMC Design-01

    AHB-SRAMC Design 1.AHB-SoC芯片架构图 CPU赋予了SoC的可编程性 SRAM可以存储数据和代码 2.AHB-SRAMC Features 总线版本号 在进行设计的时候可以将地 ...