映射map

回忆上次缩写的细节

  • 这次了解到了:abbrivate缩写
  • 可以定义缩写

    • :ab o1z oeasy
    • 这里面还可以包括方向键、回车键之类的东西
  • 可以定义到指定的模式

    • iab
    • cab
  • 查看缩写

    • :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
    • :omap operartor-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就可以触发
      • 映射要自己定义对应的按键
    • 效果不同

      • 缩写就是把缩写形式补全成完整形式,原缩写形式消失
      • 映射可以做更多的操作,比如复制粘贴之类的编辑操作
  • 相同点

    • 首先他们都是为了快速输入和操作而存在的
    • 他们都可以取消重复

      • noremap
      • noreabbrev

总结

  • 这次了解到了: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 蓝桥云课)

oeasy教您玩转vim - 73 - # 映射map的更多相关文章

  1. oeasy教您玩转vim - 56 - # 字符可视化模式

    ​ 可视化编辑 回忆上节课内容 我们学习了关于模式匹配中使用参数 单个参数 :%s/<h2>\(.*\)</h2>/ - \1/g 多个参数 :%s/<img src=\ ...

  2. oeasy教您玩转vim - 57 - # 行可视化

    ​ 可视化编辑 回忆上节课内容 上次我们了解到可视模式 其实可视化对应三种子模式 字符可视模式 v 行可视模式 大写V 块可视模式ctrl+v 我们先来了解字符可视化模式 快捷键 v 可配合各种mot ...

  3. oeasy教您玩转vim - 53 - # 批量替换

    查找细节 回忆上节课内容 我们温习了关于搜索的相关内容 /正向,?反向 n保持方向,N改变方向 可以设置 是否忽略大写小写 是否从头开始查找 是否高亮显示 还有一些正则表达式的使用方法 行头行尾 ^$ ...

  4. VIM键盘映射 (Map)~转载

    VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命令,可以通过F5键将单词用花括号括起来: :map <F5> i{e ...

  5. VIM键盘映射 (Map)

    http://www.pythonclub.org/linux/vim/map VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命 ...

  6. <顶>vim快捷键映射Map使用

    问题描述: 使用vim中的快捷键映射map,可以自定义快捷键 问题解决: (1)vim模式 (2)map前缀 (3)删除映射Map (4)使用示例 (5)查看快捷键映射 命令行---:verbose ...

  7. oeasy教您玩转linux010203显示logo

    我们来回顾一下 上一部分我们都讲了什么?

  8. oeasy 教您玩转linux010101查看内核uname

    linux([?l?n?ks]) 是什么????? 咱们这次讲点什么呢?这次咱们讲讲这个 linux([?l?n?ks]),什么是 linux([?l?n?ks])呢?这linux([?l?n?ks] ...

  9. oeasy教您玩转linux010202软件包管理apt

    顾一下 上一部分我们都讲了什么?

  10. oeasy教您玩转linux010201持续输出yes

    我们来回顾一下 上一部分我们都讲了什么?

随机推荐

  1. 微信小程序学习随笔

    scroll-view与view 要做出滚动视图的效果 <scroll-view> <view id="1">11</view> <vie ...

  2. Centos安装Redis(极速安装)

    下载 从官网找到下载文件,我下载的是redis-6.0.16.tar.gz. 安装 1. 解压文件 解压文件然后,进入解压文件夹: tar -zxvf redis-6.0.16.tar.gz cd r ...

  3. 视图结构 wxml 列表渲染 for

    WXML是框架设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构. wxml是一个严格的标记性语言,有开始就必须有结束,单标签就一个有结束符 5.1.数据绑定 在js逻辑层中定义数据源, ...

  4. realtek高清晰音频管理器 WIN10

    在WIN10里已经改名了: Realtek Audio Console . 在安装realtek声卡驱动后,Realtek Audio Console 会自动安装.

  5. OAuth + Security - 7 - 异常翻译

    认证异常翻译 默认情况下,当我们在获取令牌时输入错误的用户名或密码,系统返回如下格式响应: { "error": "invalid_grant", " ...

  6. oppo、一加 android14 chrome116内核 input @click不触发

    // 兼容Chrome内核116及以上版本中配置disabled的input组件无法触发并冒泡click事件 .uni-input-input:disabled { pointer-events: n ...

  7. Azure Storage Blob 启用sftp协议支持

    背景 我这边需要给前端同学一个上传静态文件的地方,比如js.css.图片.icons等等,前端上传后直接在项目中:我这边用的是Azure Storage blob:为了单独分配权限,我这边打算启用SF ...

  8. 自定义U盘图标

    有没有想过你可以自定义U盘的图标 我才不想用这么Low的图标: 我的图标是这样的: 不好意思,本人叫郭飞,嘻嘻... 下面给出教程: 1.U盘里新建文件autorun.inf,并用记事本打开进行编辑 ...

  9. ASP.NET Core使用Hangfire定时发布文章

    ASP.NET Core使用Hangfire实现定时任务 前言 也是上了5天班,终于迎来了休息,抽空更新下博客,然后就是下周一公司会对我进行考核,希望考核能通过吧!!! 然后我想给博客添加一个定时发布 ...

  10. 在高通Fastmmi模式中增强交互方式

    在高通Fastmmi模式中增强交互方式 背景 由于之前工厂抱怨 FCT模式不好用. 之前的FCT测试是这样子的:PCBA上夹具,连接USB. 同时,使用上位机程序(ATE)发送指令,人工判断结果以后, ...