映射map

回忆上次缩写的细节

  • 上次了解到了: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
    • 我们还没有用上
  • 可以给他们映射上么?

功能键映射

  • 第一个f1是有映射的

    • 如果在终端模式下运行就会到帮助文件
    • 如果在图形化的终端模式下运行就会到terminal的帮助
  • f2我们可以映射么?

    • :map <F2> gg=G
    • 注意这个时候map空格之后
    • 可以直接按下f2
    • 就直接输入<F2>
    • 很好使!
  • 但是我们应该再限制一下,映射只会出现在Normal模式

    • :nmap <F2> gg=G
  • 我们再试一个

快速插入日期

  • 我们需要在文章最后写一个日期时间

    • :map <F2> oDate: <ESC>:read !date<CR>
    • o的意思是换行插入

      • 插入的内容就是Date:
    • esc退回到正常模式
    • :进入命令模式

      • 执行:read !date
      • 把外部命令date的结果read到buffer上
      • 然后<CR>是回车Carriage
      • 退回到正常模式
      • 整个操作完成
  • 真的能用!!!
  • 这样就可以快速插入落款日期了
  • 还可以进行一些修改
  • :map <F2> oDate: <ESC>:read !date<CR>kJ

    • k向上一行
    • J把当前行和下一行链接
  • 如果要求在文本最后插入的话

    • :map <F2> GoDate: <ESC>:read !date<CR>
  • 其实我们常用的就是程序的编译运行之类的

    • 这个映射能干么?

运行python程序

  • 这次我们用<F5>来干这个事情
  • 我们先在命令行里面走一遍

    • :!python3 %
    • 其中%是当前文件名
    • 相当于:!python3 oeasy.py
    • :h c_%

  • 把他转化为映射

    • :map <F5> :!python3 %
  • 先保存

    • :map <F5> :w<CR>:!python3 %<CR>
  • 以后就可以一键运行python程序了

编译并运行java程序

  • 仿照上次

    • :map <F5> :w<CR>:!javac %<CR>
    • 这样是可以完成编译的
    • 然而运行的时候我需要
    • :!java oeasy
    • 这就得去掉后缀
    • :!java %:t:r

  • 最终的映射语句是

    • :map <F5> :w<CR>:!javac %<CR>!java %:t:r<CR>
  • 保存、编译、运行一气呵成
  • 不过python、java、html都映射到了F5
  • 能否根据文件类型进行区分呢?

文件类型映射

  • 观察文件类型检测
  • :filetype

  • 具体的文件应该放在哪儿呢?

具体操作

  • ~/.vim/ftplugin/下面放入文件类型的配置文件

    • ~/.vim/ftplugin/java.vim对应java文件
    • ~/.vim/ftplugin/python.vim对应python文件

  • 现在我们就分别对于java和python文件定义了F5这个操作
  • 其实网页编辑也很常见
  • 如何在网页中一键预览?

一键预览火狐

  • 本终端开火狐

    • firefox
    • !firefox
  • 首先在终端上可以另开一个火狐进程

    • xfce4-terminal -e 'firefox'

      • 我们的终端是xfce的
      • 如果是gnome的话也类似
      • 这可以在终端中新开一个终端
      • 新终端中运行火狐
    • xfce4-terminal -e 'firefox oeasy.html'

      • 让火狐浏览你的网页
  • 把这套放到vim里面跑一下

    • :!xfce4-terminal -e 'firefox %'
    • 成功在vim里跑了起来
  • 然后就是映射map

    • :map <F5> :!xfce4-terminal -e 'firefox %'
  • 可以的!
  • 然后把这句话写到 htmlftplugin

总结

  • 这次我们定义了一系列的功能键

    • 让他们可以起到作用
    • 比如保存、编译、运行一键完成
    • 但是不同的文件类型应该有不同的处理方式
    • 我们用 filetype 的机制解决了这个问题
  • 这些映射就像缩写和折叠一样

    • 可以:mkview保存着
  • 除了功能键之外

    • 组合键能映射么?
    • 比如ctrl+s之类的?
  • 下次再说!

[Github地址] (https://github.com/overmind1980/oeasyvim)

[Gitee地址] (overmind1980/oeasyvim)

[蓝桥实验楼 邀请码FJWYIMGB] (oeasy 教您零基础玩转编辑神器 Vim_Linux 蓝桥云课)

oeasy教您玩转vim - 74 - # 功能键Fn映射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. oeasy教您玩转linux010203显示logo

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

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

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

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

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

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

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

  8. oeasy教您玩转linux010108到底哪个which

    到底哪个which 回忆上次内容 我们上次讲了查找命令位置whereis 我想找到whereis的位置怎么办?

  9. oeasy教您玩转python - 006 - # hello world

    ​ Hello World! 回忆上次内容 python3 的程序是一个 5.3M 的可执行文件 python3 里面全都是 cpu 指令 可以执行的那种指令 我们可以把指令对应的汇编找到 objdu ...

  10. oeasy教您玩转linux-010110内容回顾

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

随机推荐

  1. 【题解】A18537.我心中珍藏的游戏

    题目跳转 思路: 题目问最多可以获得的额外伤害,其实就是询问在这些技能中,如何怎样选取一个最优的发动技能顺序使得攻击加成最大.我们可以把每一个技能看作成一个图的顶点,把每一个攻击加成看作图的边,权制为 ...

  2. sqlserver 把 某一列的所有值 变成 in 里面的内容

    SELECT  STUFF(( SELECT  ','+'''' +convert(VARCHAR, cDefine3)+'''' from rdrecord08 where dDate>'20 ...

  3. c# 获得变量名称

    string GetVariableName<T>(Expression<Func<T>> expr)        {            var body = ...

  4. makedown快速入门

    Makedown学习 Makedown 作为一个强大文本编辑语言,学习并熟悉应用是写好一篇优秀博客的基础 那么接下来我将介绍makedown语言最常用的几个语法 标题 +"space&quo ...

  5. js 留言板(带删除功能)

    本文所用的知识点:创建节点和添加节点 创建节点:document.createElement('li') 添加节点  node(父亲节点).appendChild(child)    child:子节 ...

  6. C# JAVA UrlEncode

    C#  JAVA urlencode 默认是不兼容的.C# 需要encode的部分是小写.JAVA 需要encode的部分是大写. /// <summary> /// java UrlEn ...

  7. 百度面试:如何用Redis实现限流?

    高并发系统有三大特征:限流.缓存和熔断,所以限流已经成为当下系统开发中必备的功能了.那么,什么是限流?如何实现限流?使用 Redis 能不能实现限流?接下来我们一起来看. 1.什么是限流? 限流是指在 ...

  8. Vue学习:14.工程化开发&脚手架

    0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 方向一:学习路径 1.明确兴趣和目标:首先确定你对IT ...

  9. JS 过滤掉两个数组中对象id值相等的项

    const arr1 = [{ id: 1, name: '老二' }]; const arr2 = [{ id: 1, name: '网' }, { id: 2, name: '二位' },{ id ...

  10. CNN --Inception Module

    Smiling & Weeping ---- 祝你想我 在平静的湖面 不止在失控的雪山之前 说明:Inception Module 1. 卷积核超参数选择困难,自动找到卷积的最佳组合 2. 1 ...