【Vim】使用map自定义快捷键

map简介

map是一个映射命令,将常用的很长的命令映射到一个新的功能键上。map是Vim强大的一个重要原因,可以自定义各种快捷键,用起来自然得心应手。

映射的种类

有五种映射存在:

  • 用于普通模式: 输入命令时。
  • 用于可视模式: 可视区域高亮并输入命令时。
  • 用于操作符等待模式: 操作符等待中 (“d”,”y”,”c” 等等之后)。
  • 用于插入模式: 也用于替换模式。
  • 用于命令行模式: 输入 “:” 或 “/” 命令时。

几种模式的介绍

  1. Normal Mode

    也就是最一般的普通模式,默认进入vim之后,处于这种模式。

  2. Visual Mode

    一般译作可视模式,在这种模式下选定一些字符、行、多列。

    在普通模式下,可以按v进入。

  3. Insert Mode

    插入模式,其实就是指处在编辑输入的状态。普通模式下,可以按i进入。

  4. Select Mode

    选择模式。用鼠标拖选区域的时候,就进入了选择模式。和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。和windows下的编辑器选定编辑的效果一致。普通模式下,可以按gh进入。

  5. Command-Line/Ex Mode

    命令行模式和Ex模式。两者略有不同,普通模式下按冒号(:)进入Command-Line模式,可以输入各种命令,

    使用vim的各种强大功能。普通模式下按Q进入Ex模式,其实就是多行的Command-Line模式。

命令的组合

同Vim下的其他命令一样,命令的名字往往由好几段组成。前缀作为命令本身的修饰符,微调命令的效果。

对于map而言,可能有这么几种前缀:

*nore

表示非递归。

递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。

* n

表示在普通模式下生效

* v

表示在可视模式下生效

* i

表示在插入模式下生效

* c

表示在命令行模式下生效

普通模式的映射命令

map

命令格式:

:map {lhs} {rhs}

其含义是,在:map作用的模式中把键系列 {lhs} 映射为 {rhs},{rhs}可进行映射扫描,也就是可递归映射。

举例:

:map td :tabnew .<cr>

含义:在其作用模式(普通、可视、操作符)下,输入td等价于输入 :tabnew . 。而普通模式下输入:tabnew . 就是打开当前目录

如果再定义绑定 :map ts td,就是指在其作用模式下输入ts等价于td,也就是打开当前目录。不过如果没有特殊需要,一般不建议递归映射。

noremap

:noremap和:map命令相对,作用模式和命令格式都相同,只不过不允许再对{rhs}进行映射扫描,也就是{lhs}定义后的映射就是{rhs}的键序列,不会再对{rhs}键序列重新解释扫描。它一般用于重定义一个命令,当然如果:map不需要递归映射的话,建议使用:noremap

比如:

:noremap ts td

它的意思是在其作用模式下,输入ts就是输入td,但是和:map不同的是,此时td再不会做进一步扫描解释。虽然之前已经定义了td,但是不会对td再做扫描。

unmap

:unmap是对应取消:map绑定的{lhs},作用模式相同,命令格式 :unmap {lhs}。

例如:

:unmap td

就是取消在其作用模式中td的绑定,比如之前td被绑定为:tabnew .,此时此绑定消失。

mapclear

:mapclear时对应取消所有:map绑定的,慎用!

只用于普通模式的

:nmap

:nmap是:map的普通模式板,也就是说其绑定的键只作用于普通模式。

例如:

:nmap td :tabnew . 和 :map td :tabnew . 在普通模式下等效

:nnoremap

:nnorempa和:nmap的关系和:noremap和:map的关系一样,只是:nmap的非递归版

:nunmap

:nunmap和:nmap的关系和:unmap和:map的关系一样,取消:nmap的绑定。

:nmapclear

:nmapclear是对应取消所有:map绑定的,慎用!

另外

{rhs} 之前可能显示一个特殊字符:

* 表示它不可重映射

& 表示仅脚本的局部映射可以被重映射

@ 表示缓冲区的局部映射

到这一步你可以轻松的长吸一口气,因为相关的命令已经都了解了,记不住没关系,可以随时:help map一下。

键表

- 小键盘 0 到 9

特殊参数

有些特殊参数必须映射命令的后边,在其他任何参数的前面。

如果这些映射命令的第一个参数是,映射将只局限于当前缓冲区(也就是你此时正编辑的文件)内。比如:

:map ,w /a

它的意思时在当前缓冲区里定义键绑定,“,w”将在当前缓冲区里查找字符a。同样你可以在其他缓冲区里定义:

:map ,w /b

比如我经常打开多个标签(:tabedit),想要在各自标签里定义”,w”键绑定,那么你只要在每个标签页里分别定义就可,其作用域也只在各自的标签里。同样要清除这些缓冲区的键绑定也要加上参数,比如:

:unmap ,w

:mapclear

是指执行键绑定时不在命令行上回显,比如:

:map ,w /abcd

你在输入,w查找abcd时,命令行上不会显示/abcd,如果没有参数就会显示出来。

一般用于定义特殊键怕有副作用的场合。比如:

:map /Header

. 如果定义新映射的第一个参数是,那么参数会作为表达式来进行计算,结果使用实际使用的,例如:

:inoremap . InsertDot()

这可以用来检查光标之前的文本并在一定条件下启动全能 (omni) 补全。

一个例子:

let counter = 0
inoremap <expr> <C-L> ListItem()
inoremap <expr> <C-R> ListReset() 

func ListItem()
let g:counter += 1
return g:counter . ‘. ‘
endfunc 

func ListReset()
let g:counter = 0
return ‘‘
endfunc 

在插入模式下,CTRL-L插入顺序的列表编号,并返回;CTRL-R复位列表编号到0,并返回空。

一般用于定义新的键映射或者缩写命令的同时检查是否该键已经被映射,如果该映射或者缩写已经存在,则该命令会失败

和mapleader变量

mapleader变量对所有map映射命令起效,它的作用是将参数替换成mapleader变量的值,比如:

:map A oanother line

如果mapleader变量没有设置,则用默认的反斜杠代替,因此这个映射等效于:

:map \A oanother line

意思时输入\A键时,在下一行输入another line并返回到普通模式。

如果设置了mapleader变量,比如:

let mapleader = “,”

那么就等效于:

:map ,A oanother line

和maplocalleader变量

和类似,只不过它只作用于缓冲区。

因此在设置mapleader和maplocalleader时最好区分开,不要出现冲突。

转载请注明作者Jason Ding及其出处

GitCafe博客主页(http://jasonding1354.gitcafe.io/)

Github博客主页(http://jasonding1354.github.io/)

CSDN博客(http://blog.csdn.net/jasonding1354)

简书主页(http://www.jianshu.com/users/2bd9b48f6ea8/latest_articles)

百度搜索jasonding1354进入我的博客主页

时间: 2024-10-05 21:26:26

【Vim】使用map自定义快捷键的相关文章

Vim常用操作和快捷键技巧总结

vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim).vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率.vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi).在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim. vi有3个模式:插入模式.命令模式.低行模式 1)插入模式:在此模式下可以输入字符,按ESC将回到命令模式. 2)命令模式:可以移动光标.删除字符等. 3)低行模式:可以保存

sublime-text 自定义快捷键方法

最近一直使用sublime进行项目的开发.经常忘记一些常用的快捷键.特别头疼. 有时候还会感觉有些快捷键用着不是很顺手.于是就自己捣鼓着如何来自己定义自己的快捷键.. 其实每个人的习惯都有所不同,所以我不喜欢看网上的那些所谓的快捷键大全什么的..你看一遍,你能记住多少? 首先要说明下在哪里定义我们的快捷键. 打开 sublime text   --> preferences 我们能够看到两个选项. Key  Bindings -Default    //这个表示系统默认的快捷键. Key Bin

Vim的map

linux系统下.vimrc文件(这个文件可以在家目录新建): 这个文件记录着vim的配置信息: 如: ? 1 2 3 4 5 "显示行号 set number "键映射map "如按F5,在word的前后加入{} map <F5> i{<ESC>ea}<ESC> Vim的map,布布扣,bubuko.com

Mint Linux自定义快捷键不支持中文路径的问题的解决

/*********************************************************************  * Author  : Samson  * Date    : 04/28/2014  * Test platform:  *              3.11.0-12-generic #19-Ubuntu  *              GNU bash, version 4.2.45  * ****************************

你想要的sublime、webstorm、vi/vim不得不用的快捷键【简报】【实用】

 你想要的sublime.webstorm.vi/vim不得不用的快捷键[简报][实用] 话不多说,马上走起: Sublime Text: ctrl+d  alt+f3全选 ctrl+shift+’ (鼠标右键)多行编辑  可单个添加   先选中多行 Ctrl+Shift+L  行尾编辑 ctrl+shift+a 父容器选中 ctrl+shift+m js.css选中括号 ctrl+shift+↑ 或 ↓ ctrl+shift+d 复制选中 或复制行 ctrl+[ 或 ] 缩进 ctrl+x 剪

word 2010自定义快捷键提高工作效率

经常使用word处理文档, 做笔记的时候会把word文档框缩小,以便同时看pdf同时记录笔记,但是缩小的word框不能把所有的菜单项显示出来,我比较常用那个插入边框下面的那个横线来做分割符,但是缩小了word之后那个菜单项显示不出来,每次要用的时候都要先最大化word,操作完了之后再恢复原来的大小来一边看书一边记录笔记,這样很慢,下面就是如何操作自定义word快捷键来辅助记录笔记.以下以自定义边框项下面的那个横线的快捷键为例予以说明如何添加自定义快捷键. 1.在菜单项上右键选择:自定义功能区 2

eclipse设置自定义快捷键

eclipse有很多强大且人性化的功能,而各项功能有时又隐藏得比较深(需要点击数次菜单才能找到),而系统提供的快捷键有时比较难记住甚至根本没有提供快捷键时,就需要自己手动设置快捷键了.设置方法有两种,包括手动设置和导入配置文件. 工具/原料 eclipse 手动设置 方法/步骤 1 点击window菜单->preferences子菜单->general->keys,进入快捷键管理界面 2 在这里可以查找所有功能的快捷键,需要修改或新增时,点击需要修改或新增的命令,在binding里设置快

Sublime-text 自定义快捷键攻略

好吧.我承认今天很悲剧,本来上午就写好了这篇博文,发布之后,在自己的博文里怎么也找不到. 所以现在又重新写了一份.希望大家能顶一下吧...Nothing is better than your support ! 你使用sublime text 的快捷键吗? Did you ever type in some keywords in "baidu" or in "google" to search some useful blogs about this theme

sql server 2005 自定义快捷键

在SSMS选择菜单:工具->自定义,勾选"在屏幕提示中显示快捷键",这样,当把鼠标悬停在执行图标上方时,会显示提示F5.快捷键不需要死记,鼠标点的时候看一下,下次就可以用快捷键了,用多了就熟了. SQL Server Management Studio支持自定义快捷键:工具->选项->键盘:其中,Alt+F1.Ctrl+1.Ctrl+2是系统预定义的快捷键.双击表名(或按Ctrl单击表名),选定一个表名,如tablename,按Alt+F1,相当于执行"sp