Vim 功能键Fn映射map进阶详解

回忆上次缩写的细节

功能键映射

  • 第一个f1是有映射的
    • 如果在终端模式下运行就会到帮助文件
    • 如果在图形化的终端模式下运行就会到terminal的帮助
  • f2我们可以映射么?
    • :map <F2> gg=G
    • 注意这个时候map空格之后
    • 可以直接按下f2
    • 就直接输入
    • 很好使!
  • 但是我们应该再限制一下,映射只会出现在Normal模式
    • :nmap <F2> gg=G
  • 我们再试一个

快速插入日期

  • 我们需要在文章最后写一个日期时间
    • :map <F2> oDate: <ESC>:read !date<CR>
    • o的意思是换行插入
      • 插入的内容就是Date:
    • esc退回到正常模式
    • :进入命令模式
      • 执行:read !date
      • 把外部命令date的结果read到buffer上
      • 然后是回车Carriage
      • 退回到正常模式
      • 整个操作完成
  • 真的能用!!!
  • 还可以进行一些修改
  • :map <F2> oDate: <ESC>:read !date<CR>kJ
    • k向上一行
    • J把当前行和下一行链接
  • 如果要求在文本最后插入的话
    • :map <F2> GoDate: <ESC>:read !date<CR>
  • 其实我们常用的就是程序的编译运行之类的
    • 这个映射能干么?

运行python程序

  • 这次我们用来干这个事情
  • 我们先在命令行里面走一遍
    • :!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,感谢overmind1980大佬的无私奉献,致敬!

技术教程推荐

Java并发编程实战 -〔王宝令〕

零基础学Java -〔臧萌〕

SQL必知必会 -〔陈旸〕

软件设计之美 -〔郑晔〕

Web安全攻防实战 -〔王昊天〕

Vim 实用技巧必知必会 -〔吴咏炜〕

容器实战高手课 -〔李程远〕

说透低代码 -〔陈旭〕

手把手带你写一个MiniSpring -〔郭屹〕