从零开始匹配vim(2)——快捷键绑定
如果说 vim有什么最吸引人,我想vim允许你自由的定义各种快捷键算是一个原因吧。你可以通过绑定各种快捷键来使经常使用的功能更加便利。通俗的讲,快捷键映射就是我按下某个键,我想让vim将它当成另一个键,例如我按下 k
,我想让vim把它当做 c
来使用(当然这么映射会把人逼疯)
快捷键映射
我们使用 :map
命令来进行快捷键的映射,例如我们输入如下内容
:map - dd
通过这个命令,我们将 -
映射为 dd
,也就是说现在我们按下 -
就可以删除光标所在行了。
针对功能键,例如 Ctrl
、空格
、Tab键
等,在 vim
中使用 <keyname>
的形式,其中 keyname
是按键名称,下面列举出一些常用的控制键的表示方式:
Ctrl
键对应<c>
空格
键对应<space>
alt
键对应<a>
esc
键对应<esc>
- 退格键对应
<bs>
- 回车键对应
<cr>
shift
键对应<shift>
f1
到f12
对应<f1>
到<f12>
这些功能键与普通字母做配合时,将字母键放入到 <>
中,并以 -
和 功能键做分割,比如 :map <c-d> dd
来将 <Ctrl +d>
映射为 dd
当然有时候为了可读性,我们可以将这些功能键以大写字母来表示,例如 <C-d>
就表示 <Ctrl +d>
快捷键映射就是这么简单,接下来要做的就是思考如何进行映射能提升我们的效率,即提取常用的操作将他们映射为快捷键。我们来通过几个小例子来给小伙伴们提供一些思路。
定义 -为将当前行往下移动移动
我们知道,在普通模式下要将当前行往下移动,可以首先执行 dd
删除一行,然后执行 p
来拷贝到下一行,因此我们可以这样定义快捷键
:map - ddp
定义 _
为将当前行往上移动移动
在这个例子中,第一步仍然是执行删除,但是与上一个例子不同的是,我们要将删除部分往上一行粘贴。如果往上一行粘贴呢,在之前介绍的时候我们并没有提到如何执行这么一个操作。如果你的第一反应是要去翻用户手册或者去查其他的资料,那么我建议你仔细去阅读一下我之前写的内容。体会一下vim的一些思想和技巧。
仔细回想一下 o
(小写)和 O
(大写) 的区别,而且我们曾经提到过,普通模式下,大写字母和小写字母功能类似。说到这我想你应该知道答案了。我们使用 P来粘贴到上一行。因此这里的映射可以写成
:map _ ddP
如果你觉得这两个映射对你有用,你可以将它放入你的 vimrc
中,或者先记下来,等我们介绍完使用 lua
配置之后,再写到 init.lua
中。
其他模式下的映射
map
可以定义映射,但是各位小伙伴可以做一下试验,map
命令定义的快捷键在 visual
模式下仍然有效。这样就会带来一个问题,如果我想在多个模式下都对 -
这个键进行了定义,而且定义成了不同的快捷键,这该怎么处理呢?
其实 vim
针对不同的模式有不同的快捷键定义命令,例如 :nmap
负责在普通模式下定义快捷键, :vmap
负责在 visual
模式下定义快捷键。这个时候你肯定已经猜到了,:imap
可以在插入模式下定义快捷键,或者使用 :cmap
定义命令行模式下的快捷键。
这些命令的格式与 :map
一样。下面还是以例子为主吧
例1: 重新在普通模式下定义 -
例如我们使用 :nmap
重新定义 -
为 ddp
,这个时候我们发现它只在普通模式下有用,而在选择模式下无效。
例2: 定义 为复制粘贴
不知道有没有小伙伴在初学vim的时候希望也能像在Windows中那样,使用 <Ctrl+c>
和 <Ctrl+v>
来进行复制粘贴。学到现在我们终于有能力自己动手实现这个需求了。
虽然不推荐这么干,但是还是满足各位折腾的欲望吧。
仔细回想一下,<Ctrl+c>
实际上是拷贝选中的文本,而<Ctrl+v>
是在输入的时候直接粘贴的。因此我们知道映射 <Ctrl+c>
应该是在 可视模式下。而<Ctrl+v>
应该是在插入模式下。
另外在插入模式下是不支持使用 p
来进行粘贴的。还记得我们在插入模式下介绍的那些技巧吗?其中有一个快速从寄存器中粘贴的技巧。正好可以在这里用到。而复制操作会将复制的文本拷贝到寄存器中(也就是 0
寄存器)。结合这两个知识点,我们可以很方便的映射出这两个快捷键
:vmap <C-c> y
:imap <C-v> <C-r>0
虽然它仍有一些不完美,但是已经够用了。最后还是不推荐这么干,毕竟使用 y
等操作就能搞定的事情没必要弄的这么麻烦。而且在linux平台,特别是在终端上,这些键都另有用途。例如 <C-c>
在vim中可以退回到普通模式。
例3: 定义 <c-d>
为在插入模式下删除一行
我们再举一个例子,我想在插入模式下使用 <C-d>
来删除光标所在行。vim
在插入模式下并没有提供快捷键来删除一行,需要使用退格键一个个的删除,想要快速删除可以回到普通模式使用dd
。那么我们可以使用 :imap <c-d> <esc>dd
。
我们会发现按下 <c-d>
之后它成功删除了一行,但是它自己退回到普通模式去了,我们想要的是它能在删除一行后仍然处于插入模式,这样我们就可以直接输入了,因此我们可以在后面新加一个再次进入插入模式的步骤,即 :imap <c-d> <esc>ddi
。
再次尝试,我们发现它已经满足我们的需求了。
例4: 在插入模式下定义快捷键快速转换单词为全大写
我们定义一个在插入模式下能快速将光标所在单词改为全大写字母。例如 C/C++
语言的编程规范中都会讲到宏或者常量最好以大写字母命名。例如 #define MAX_CONNECTIONS_QUEUE 100
这样长的宏定义,我们在输入的时候要一直按着 shift
键是很痛苦的事情。我们需要有这么一个快捷键我们可以先输入小写字母然后使用快捷键将它改为全大写。
首先我们思考一下,不使用快捷键该是如何操作呢?首先我们将光标移动到单词所在位置并退回到普通模式,接着使用 viw选中,然后使用 U来改为大写。
根据这一串操作命令,我们可以就知道了该如何定义快捷键了,:imap <c-u> <esc>viwU
。根据上面的一个例子我们知道,这样它最终会停留在普通模式下面,我们还是希望能够回到插入模式,考虑到我的使用场景是,我在写完整个单词之后会立马将它转化为大写,然后再编辑后面的其他部分,因此我将光标移动到被大写的单词的尾部,并且进入插入模式。现在命令就变成了 :imap <c-u> <esc>viwUwa
。
这里你可以根据需要灵活的进行调整,例如可以改为 :imap <c-u> <esc>viwUA
,在行尾进入插入模式。
最后做一个总结。本篇提到的比较重要的定义快捷键的命令有:
- map: 定义所有模式下的通用快捷键
- imap: 定义插入模式下的快捷键 (insert)
- nmpa: 定义普通模式下的快捷键 (normal)
- vmap: 定义选择模式下的快捷键 (visual)
从零开始匹配vim(2)——快捷键绑定的更多相关文章
- Vim魔法堂:认识快捷键绑定
Brief 习惯在VS上按<F5>来编译运行程序,刚用上VIM上就觉得无比的麻烦,而随着对VIM的学习我们分阶段的简化这一操作 1. 退出VIM,在shell下编译&&运行 ...
- vim 快捷键绑定
1. 退出VIM,在shell下编译&&运行程序 :wq [root@fsjohnhuang ~]# gcc main.c -o main [root@fsjohnhuang ~]# ...
- vim使用快捷键
vim使用快捷键 索引 1. 关于Vim 1.1 Vim的几种模式 2. 启动Vim 3. 文档操作 4. 光标的移动 4.1 基本移动 4.2 翻屏 4.3 标记 5. 插入文本 5.1 基本插入 ...
- VIM常用快捷键(转载)
移动光标 h,j,k,l 上,下,左,右 ctrl-e 移动页面 ctrl-f 上翻一页 ctrl-b 下翻一页 ctrl-u 上翻半页 ctrl-d 下翻半页 w 跳到下一个字首,按标点或单词分割 ...
- [转贴] VIM 常用快捷键 --一直记不住
vim 常用快捷键 原帖地址: https://www.cnblogs.com/tianyajuanke/archive/2012/04/25/2470002.html 1.vim ~/.vimrc ...
- [转帖]VIM常用快捷键
VIM常用快捷键 https://www.cnblogs.com/markleaf/p/7808817.html 快捷键能够显著的提高工作效率 一.移动光标 h,j,k,l 上,下,左,右ctrl-e ...
- Vim命令快捷键(网摘)
Vim命令快捷键(网摘) 原文出处:[?---->home]
- 一些常用的vim编辑器快捷键:
一些常用的vim编辑器快捷键: h」.「j」.「k」.「l」,分别控制光标左.下.上.右移一格. 按「ctrl」+「b」:屏幕往“后”移动一页. 按「ctrl」+「f」:屏幕往“前”移动一页. 按「c ...
- vim常用快捷键整理
搜索快捷键 / 关键字n 向下匹配N 向上匹配 移动光标快捷键 gg 命令将光标移动到文档开头,等同于 1GG 命令将光标移动到文档末尾0 或功能键[Home] 这是数字『 0 』:移动到这一行的最 ...
- Mac下Vim编辑快捷键小结(移动光标)
Mac下Vim编辑快捷键小结(移动光标) 1.移动到行尾"$",移动到行首"0"(数字),移动到行首第一个字符处"^" 2.移动到段首&qu ...
随机推荐
- Solon 开发进阶,四、启动参数说明
Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 启动参数,在应用启动后会被静态化(为了内部更高效的利用).比如,想通过体外扩展加载配置, ...
- Solon 开发进阶
Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 本系列在内核知识的基础上做进一步延申.主要涉及: 插件扩展体系 体外扩展体系 常用配置 ...
- 大数据 - ODS&DWD&DIM-SQL分享
大数据 ODS&DWD&DIM-SQL分享 需求 思路一:等差数列 断2天.3天,嵌套太多 1.1 开窗,按照 id 分组,同时按照 dt 排序,求 Rank -- linux 中空格 ...
- ScreenToGif 录屏转git图片
ScreenToGif 一款开源的屏幕录制,允许您记录屏幕的选定区域.网络摄像头的实时信息或素描板上的实时绘图.之后,您可以编辑动画并将其保存为 gif.apng.视频.psd 或 png 图像. 官 ...
- 如何利用CCXT交易数字货币合约
更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 对于币圈量化老司机来说,相信或多或少都有接触过ccxt这个接口,ccxt为我们提供了多交易所统一的标准格 ...
- Go--连接mysql,增删改查
下载驱动库,下为官方推荐的,还有其他ORM库,暂时没涉及,故本文不做阐述 go get -u github.com/go-sql-driver/mysql 一.连接 1.1 直接连接,查询单行 pac ...
- Spring 学习笔记(3)控制反转 IoC
本篇文章主要对 Spring 框架中的核心功能之一控制反转 (IOC,Inversion of Control)进行介绍,采用理论 + 实战的方式给大家阐述其中的原理以及明确需要注意的地方. 控制反转 ...
- 你以为这是MacOS ,其实这是我的 Linux 系统 Manjaro!
对于如何将你的 Manjaro 系统美化成 MacOS 你需要做以下几件事情: 1.安装 WhiteSur-Gtk-theme 主题. 2.安装 Plank 软件. 3.安装 vala-panel-a ...
- freeswitch的gateway配置方案优化
概述 freeswitch是一款简单好用的VOIP开源软交换平台. 在之前的文章中,我们简单介绍过gateway的三种配置方案,但是实际应用之后发现,方案中的参数设置有缺陷,会导致一些问题. 本文档中 ...
- 【南大静态代码分析】作业 2:常量传播和 Worklist 求解器
作业 2:常量传播和 Worklist 求解器 题目链接:https://tai-e.pascal-lab.net/pa2.html 评测链接:https://oj.pascal-lab.net/pr ...