Vim魔法堂:认识快捷键绑定

Brief                              

习惯在VS上按<F5>来编译运行程序,刚用上VIM上就觉得无比的麻烦,而随着对VIM的学习我们分阶段的简化这一操作

  1. 退出VIM,在shell下编译&&运行程序

:wq
[root@fsjohnhuang ~]# gcc main.c -o main
[root@fsjohnhuang ~]# ./main

  2. 在VIM的命令行模式下编译&&运行程序

:!gcc % -o main
:!./main

3. 快捷键绑定一键编译&&运行程序

:map <F5> <ESC>:w<CR> <ESC>:!gcc % -o %< && ./%<<CR>

  以后我们只需在命令模式下按<F5>即可实现程序的编译&&运行了!

     现在我们知道通过:map我们可以自定义快捷键,那仅知道这些就足矣了吗?如果不是那请继续看下文吧!

 

Know command :map More!                   

    通过ESC进入VIM的命令模式,这里我们可以输入VIM命令(以:开头,如:map)和外部命令(以:!开头,如:!ls)。

  绑定快捷键

    :map命令就是将一连串操作绑定到指定的快捷键,语法格式: :map <快捷键> <命令组> 

    <快捷键>
各功能键和组合键均可作为快捷键,并且均可通过VIM内置的键盘映射来指定(如上面提到的<ESC>则是Escape键的映
射,<CR>则是回车键的映射,<C-Esc>代表Ctrl-Esc和<S-F1>表示Shift-F1等)。具体
的键盘映射信息可通过在命令模式下执行 :h key-notation 查看。

    

    <命令组>,按下<快捷键>后依次执行的命令组。其中%占位符用于表示当前操作的文件全称,而%<占位符表示当前操作的文件名称(不带扩展名)。

 查看已绑定的快捷键  :map 

  

     上图我们看到x,s,o,n,v等字母,这些是啥意思呢?

  还记得VIM的几个工作模式(Normal,Visual,Select,Command-line,Operator pending, Insert only)吗?而上面的x,s,o等就是指出所属行的快捷键仅作用于某模式下。

         标记                             模式

    <space>       常规模式,可视化模式,运算符模式

           n                             常规模式

           v                            可视化模式

           o                           运算符模式

           !                     插入模式,命令行模式

           i                              插入模式

           c                            命令行模式

     那么如何列出指定模式下的已有快捷键呢?

:nmap - Display normal mode maps
:imap - Display insert mode maps
:vmap - Display visual and select mode maps
:smap - Display select mode maps
:xmap - Display visual mode maps
:cmap - Display command-line mode maps
:omap - Display operator pending mode maps

  也就是可通过 :nmap , :map! 等来在指定的工作模式绑定快捷键。

 解除快捷键绑定  :unmap <快捷键> 

    :iunmap <快捷键> 仅解绑插入模式下的快捷键,如此类推

 解除所有快捷键绑定(用户定义的和系统默认的) :mapclear 

时间: 2024-09-24 22:51:12

Vim魔法堂:认识快捷键绑定的相关文章

JS魔法堂:判断节点位置关系

一.前言   在polyfill querySelectorAll 和写弹出窗时都需要判断两个节点间的位置关系,通过jQuery我们可以轻松搞定,但原生JS呢?下面我将整理各种判断方法,以供日后查阅.   二.祖孙关系 html <div id="ancestor"> <div id="parent"> <div id="son">son</div> </div> </div>

Java魔法堂:类加载器入了个门

一.前言   <Java魔法堂:类加载机制入了个门>中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理.本文将记录加载阶段的核心组件--类加载器的相关信息,以便日后查阅.若有纰漏请大家指正,谢谢.   注意:以下内容基于JDK7和HotSpot VM.   二.类加载器种类及其关系 从上图可知Java主要有4种类加载器 1. Bootstrap ClassLoader(引导类加载器):作为JVM的一部分无法在应用程序中直接引用,由C/C++实现(其他JVM可能通过

JS魔法堂:jsDeferred源码剖析

一.前言    最近在研究Promises/A+规范及实现,而Promise/A+规范的制定则很大程度地参考了由日本geek cho45发 起的jsDeferred项目(<JavaScript框架设计>提供该资讯,再次感谢),追本溯源地了解jsDeferred是十分有必要的,并且当你 看过官网(http://cho45.stfuawsc.com/jsdeferred/)的新手引导后就会有种不好好学学就太可惜的感觉了,而只看 API和使用指南是无法满足我对它的好奇心的,通过解读源码读透它的设计思

JS魔法堂:精确判断IE的文档模式by特征嗅探

一.前言   苦逼的前端攻城狮都深受浏览器兼容之苦,再完成每一项功能前都要左顾右盼,生怕浏览器不支持某个API,生怕原生API内含臭虫因此判断浏览器类型和版本号成了不可绕过的一道关卡,而特征嗅探是继浏览器探测后另一利器处理上述问题.   二.何为特征嗅探 从前我们都是通过对navigator.userAgent或navigator.appVersion两个属性值进行特定字符串匹配和萃取来区 分浏览器类型和获取版本号的.但随着IE8提供可选的文档兼容性模式设置和各种加壳浏览器的出现,导致无法通过n

CSS魔法堂:不得不说的Containing Block

前言  <CSS魔法堂:重新认识Box Model.IFC.BFC和Collapsing margins>中提到在没有floated兄弟盒子时,line box的左右边框会与所属的containing block的左右content edge相接触.那到底什么是containing block(abbr. CB)呢? containing block在CSS的visual formatting model中十分重要的理论基础,因为盒子的宽/高度自动值/相对值的计算,相对/浮动/绝对定位,均依赖

CSS魔法堂:&quot;那不是bug,是你不懂我!&quot; by inline-block

前言  每当来个需要既要水平排版又要设置固定高宽时,我就会想起display:inline-block,还有为了支持IE5.5/6/7的hack*display:inline;*zoom:1;.然后发现盒子间无端端多了个不可选的空白符,于是想尽办法修复这个bug. 直到一天拜读了@一丝姐.@HAX等高人的秘笈后才顿悟,原来我错了.那不是bug,是我不懂而已. 先行者--IE5.5中的inline-block  当我们为支持IE5.5/6/7而添加这段hack时*display:inline;*z

JS魔法堂:IE5~9的Drag&amp;Drop API

一.前言      < HTML5魔法堂:全面理解Drag & Drop API>中提到从IE5开始已经支持DnD API,但IE5~9与HTML5的API有所不同,下面我们来了解一下吧!   二.IE5~9与HTML5的DnD API的不同点       1. IE5~9DnD API仅对 img元素 . a[href]元素 和 input[type=text]/textarea元素 中被选中的文字有效,且不用设置 draggable="true" ; 而HTML

JS魔法堂:属性、特性,傻傻分不清楚

或许你和我一样都曾经被下面的代码所困扰 var el = document.getElementById("dummy"); el.hello = "test"; console.log(el.getAttribute("hello")); // IE67下输出test,其他浏览器输出null   "搞毛啊?",苦逼的Jser对着浏览器大呼一声.然后就用下面蹩脚的方式草草处理掉了. function getAttr(el, p

CSS魔法堂:深入理解line-height和vertical-align

前言 一直听说line-height是指两行文本的基线间的距离,然后又说行高等于行距,最近还听说有个叫行间距的家伙,@张鑫旭还说line-height和vertical-align基情四射,贵圈真乱啊......于是通过本篇来一探究竟:) line-height到底有多height? 行距.行间距傻傻分不清  首先看看"有道词典"的解析! Leading = Line Space + Font Size(即是 行距 = 行间距 + 字体大小) Leading: 指相邻文本行间上一个文本