oeasy教您玩转vim - 73 - # 映射map
映射map
回忆上次缩写的细节
- 这次了解到了
:abbrivate缩写 可以定义缩写
:ab o1z oeasy- 这里面还可以包括方向键、回车键之类的东西
可以定义到指定的模式
iabcab
查看缩写
:ab- 所有的:ab o1z- o1z
自动补全
- ctrlp
- ctrln
这些缩写都可以保存在视图里
- 保存的选项在
viewoption中
- 保存的选项在
- 可以保存的除了
缩写abbreviate还有个映射map 映射map什么意思呢?
关于映射
- 映射就是
map - 比如按下什么什么就相当于按下什么什么之类的
- 系统里面有

- 比如mac系统中修饰键设置的第一条
- 把 CapsLock 映射到 Esc
- 这样大写锁定就失效了
- 但是小拇指左移一下就可以按下Esc
- 超级方便
- 再也不用 ctrl+c 了
- 做实验的时候也好使
- 只要是按下CapsLock
- 就相当于按下Esc
- 这就是 映射
map
建立映射 - mapping
快速进入命令模式
:map ; :- 把
;映射成: - 这样我们就可以不用摁下shift
- 直接通过小拇指就可以进入命令模式了
- 还是很方便的

map 映射
- 我们可以使用
:map Y y$定一个映射map是命令的名字Y是被映射的键y$是映射到的键
- 从此按下
Y,就相当于y$ 我们来试一下
- 在行的中间位置,按下Y
:reg观察默认寄存器
- 现在复制的是从光标到结尾
- 我想要的是一整行,怎么办呢?
重新映射
:map! Y 0y$定一个映射map是命令的名字Y是被映射的键0y$是映射到的键
- 可是我现在命令模式下只要Y就自动变成
0y$ - 但是其实我们主要需要映射正常模式下的;
- 能否强调这一个点呢?
不同模式
不同模式有不同的映射map命令
:map所有模式:vmap可视化模式 visual:nmap正常模式 normal:omapoperartor-pending 被定义的键可以作为一个motion来使用:map!插入和命令行模式:imap插入模式 insert:cmap命令行模式 command
- 这样我们可以知道
:nmap ; :- 在正常模式下把;换成:
- 这样也就快速进入了命令模式
- 不过这样在normal模式下;就不好用了
- ;在normal模式下做什么用的呢?
原始定义
:h ;

- 原来是重复行内查找的
- 直接这样的话,原来的功能就不能用了
- 我想要取消映射map
- 应该怎么办呢?
- 我想先看看都有哪些映射
查看所有映射map

- 我们可以找到这个map映射关系
- 然后想要取消映射
- 去哪里找呢?
- 解铃换需系铃人
取消映射map

- 就和
:ab、:una一样 :map也有自己的:unmap:unmap ;
- 这样就恢复了原来的行内替换
- 从
;到:的映射消失了

我们再试试Y
定义Y并验证
:nmap Y y$:reg "
重新定义Y
:nmap Y 0y$:reg "

观察映射
:map可以观察所有已经存在的映射

- 第一列是模式
- 第二列是映射触发键
- 第三列是映射对应处理方式
如果我们想查看插入模式下;对应什么操作
:imap ;:nmap Y
- Q进入Ex命令模式

映射为空
还记得我们取消方向键的操作吗?
:map <LEFT> <nop>:map <UP> <nop>:map <RIGHT> <nop>:map <DOWN> <nop>
<nop>就是什么都不做
- 对应No Operation Performed
- 这原来是一条汇编指令,指令着让cpu空轮一个周期
但是我们现在想想
- 我们为什么要禁掉方向键?
- 是为了让手放在核心区不动
- 但是这指的是Normal模式
- 如果是命令模式,我们怎么办?
- 我们需要方向键控制光标左右运动
- 也需要shift或ctrl配合方向键控制光标快速移动
- 也就是说Normal模式方向键不做任何事,Command模式下还可以用
所以
:nmap <LEFT> <nop>:nmap <UP> <nop>:nmap <RIGHT> <nop>:nmap <DOWN> <nop>
- 但是如果我们这样的话
- 缩写sysout是否就不能顺利完成了呢?
验证
:map <left> <nop>
:set nopaste
:ab sysout System.out.println("");<left><left><left>
- 然后在插入模式下输入sysout空格
- 还是可以自动变成复杂的格式的System.out.println("");
奇怪的脑洞
- 如果我
:map j k
:map k j
- 会发生什么?

- 那么这个东西如何处理呢?
取消重复映射
:noremap j k
:noremap k j
- 这样就把j、k真的对调了

取消重复缩写
- 试了一下
- 并没有发现重复缩写的可能性
- 不过ab的替换结果可能会触发map
:set nopaste
:ab @a ad
:imap ad adder
- 然后在插入模式下@a
- 通过ad就变成了adder
- 所以有的时候ab也需要noreab

歧义
我们定义了两个映射
:map aa oeasy:map aaa o2z
- 这个时候我们输入aa会如何?
- 试一下
- 输入aa之后他会等待
如果下一个是Space或者CR
- 那么对应
oeasy
- 那么对应
如果下一个是a
- 那么对应
o2z
- 那么对应
- 这种map映射和缩写abbreviate很像啊
- 缩写就很像是插入模式下的一种特殊的映射
- 不过两者还是有不同的
- 两者有什么不同呢?
比较映射和缩写
不同点
侧重模式不同
- 缩写abbreviate侧重于输入(对应插入和命令行模式)
- 映射map可以存在于更多模式
触发条件不同
- 缩写在插入模式下按回车或者空格或tab就可以触发
- 映射要自己定义对应的按键
效果不同
- 缩写就是把缩写形式补全成完整形式,原缩写形式消失
- 映射可以做更多的操作,比如复制粘贴之类的编辑操作
相同点
- 首先他们都是为了快速输入和操作而存在的
他们都可以取消重复
noremapnoreabbrev
总结
- 这次了解到了
:map映射 可以定义映射
:map ; :
查询映射
:map:map ;
还可以取消映射
:unmap
可以映射到指定的模式
:map所有模式:vmap可视化模式 visual:nmap正常模式 normal:omapoperartor-pending 被定义的键可以作为一个motion来使用:map!插入和命令行模式:imap插入模式 insert:cmap命令行模式 command
可以映射到什么也不做
:nmap h <nop>
还可以避免再次映射
:noreabbrev o1z oeasy
最后我们比较了缩写和映射的异同
- 这
缩写和映射都是可以:mkview保存的 - 也可以写到
~/.vimrc作为基础映射 - 还可以写到具体的
filetype中做一些专门的操作
- 这
但是其实101键盘上面很多功能键
- f1-f12
- 我们还没有用上
- 可以给他们映射上么?
- 下次再说!
[Github地址] (https://github.com/overmind1980/oeasyvim)
[Gitee地址] (overmind1980/oeasyvim)
[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 Vim_Linux 蓝桥云课)
oeasy教您玩转vim - 73 - # 映射map的更多相关文章
- oeasy教您玩转vim - 56 - # 字符可视化模式
可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...
- oeasy教您玩转vim - 57 - # 行可视化
可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...
- oeasy教您玩转vim - 53 - # 批量替换
查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...
- VIM键盘映射 (Map)~转载
VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命令,可以通过F5键将单词用花括号括起来: :map <F5> i{e ...
- VIM键盘映射 (Map)
http://www.pythonclub.org/linux/vim/map VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命 ...
- <顶>vim快捷键映射Map使用
问题描述: 使用vim中的快捷键映射map,可以自定义快捷键 问题解决: (1)vim模式 (2)map前缀 (3)删除映射Map (4)使用示例 (5)查看快捷键映射 命令行---:verbose ...
- oeasy教您玩转linux010203显示logo
我们来回顾一下 上一部分我们都讲了什么?
- oeasy 教您玩转linux010101查看内核uname
linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...
- oeasy教您玩转linux010202软件包管理apt
顾一下 上一部分我们都讲了什么?
- oeasy教您玩转linux010201持续输出yes
我们来回顾一下 上一部分我们都讲了什么?
随机推荐
- JDK动态代理的深入理解
引入代理模式 代理模式是框架中经常使用的一种模式,动态代理是AOP(面向切面编程)思想的一种重要的实现方式,在我们常用的框架中也经常遇见代理模式的身影,例如在Spring中事务管理就运用了动态代理,它 ...
- Linux之命令提示符的颜色设置
1.临时设置 执行下面的命令: export PS1="[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\] \[\e[31;1m\]\w\[\e ...
- C#简易商城收银系统v1.0(2-1)
C#简易商城收银系统v1.0(2-1) 当初: 面向编程对象的好处及应用简单工厂模式(继承,多态) 现在: 制作一个简易的收银窗体应用程序 可以参考之前的 计算器 随笔 创建窗体程序 客户端代码 us ...
- c#获取开机时间
public static DateTime OpenCom() { TimeSpan t = TimeSpan.FromMilliseconds(System.Environment.TickCou ...
- C++笔记(12) 标准模板库STL
STL提供了一组表示容器.迭代器.函数.函数对象和算法的模板.STL不是面向对象的编程,而是一种不同的编程模式--泛型编程. 容器:与数组类似的单元,可以存储若干个值,存储的值的类型相同: 算法:完成 ...
- dhcp报错
报错详情 查看dhcpd.service状态 使用命令检查配置文件报错 dhcpd -t -cf /etc/dhcp/dhcpd.conf 修改配置文件 重启dhcpd服务 [root@servera ...
- OpenStack 认证服务(keystone)安装前期部署检查
一,检查安装完成情况 1.连接情况 (1) 从控制节点到计算节点的连通性测试 [1]ping计算节点的内网ip [2]ping计算节点的外网ip [3]ping计算节点的主机名 (2)从计算节点到控制 ...
- kettle从入门到精通 第四十课 kettle 增量同步(分钟/小时级)
1.上一课我们学习了在数据量大的情况下的分页全量同步示例,本次我们一起学习下kettle 增量全量同步.有些业务场景不需要实时数据,比如每N分钟抽取一次数据等. 2.kettle增量全量同步示例依 ...
- edge 书签栏 收藏夹栏 字体大小
WIN10中,edge收藏夹栏字体太大,如果收藏数目多,得多翻好几页. 解决方法: 地址栏中输入: edge://flags/#edge-pc-ui-integration Enable Window ...
- HP惠普战66电源黄灯闪烁无法充电
HP惠普战66电源黄灯闪烁无法充电 TYPE-C PD 无法充电. 解决办法:关机状态下,拔除外部设备,长按电源键30秒以释放主板静电,再插电源线可以开机.