vim可视模式练习(oeasy教您玩转vim-73)
映射map回忆上次缩写的细节
- 这次了解到了:abbrivate缩写
- 可以定义缩写:ab o1z oeasy这里面还可以包括方向键、回车键之类的东西
- 可以定义到指定的模式iabcab
- 查看缩写:ab - 所有的:ab o1z - o1z
- 自动补全ctrlpctrln
- 这些缩写都可以保存在视图里保存的选项在viewoption中
- 可以保存的除了 缩写abbreviate 还有个 映射map
- 映射map 什么意思呢?
- 映射就是map
- 比如按下什么什么就相当于按下什么什么之类的
- 系统里面有
- 比如mac系统中修饰键设置的第一条
- 把 CapsLock 映射到 Esc
- 这样大写锁定就失效了
- 但是小拇指左移一下就可以按下Esc
- 超级方便
- 再也不用 ctrl c 了
- 做实验的时候也好使
- 只要是按下CapsLock
- 就相当于按下Esc
- 这就是 映射map
- 快速进入命令模式: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:omap operartor-pending 被定义的键可以作为一个motion来使用:map! 插入和命令行模式:imap 插入模式 insert:cmap 命令行模式 command
- 这样我们可以知道
- :nmap ; :在正常模式下把;换成:这样也就快速进入了命令模式
- 不过这样在normal模式下;就不好用了
- ;在normal模式下做什么用的呢?
- :h ;
- 原来是重复行内查找的
- 直接这样的话,原来的功能就不能用了
- 我想要取消映射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:omap operartor-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 蓝桥云课)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com