vim键位映射map

以下命令若在vim/gvim中执行前面需要加冒号“:”,在.vimrc文件中添加时不需要。

map

map可以理解为快捷键,合理的快捷键可以为我们省下不少时间。
比如

map - dd

在normal模式当你按下-时,会删除一整行(等于执行了dd)。
map就是让你用少量,便于按的键来代替比较多、繁的键。

如果你想用到一些特殊字符,比如空格就是<space>,ctrl键+c键就是<c-c>

Q:如果想-键实现把整行先删除再粘贴在下一行(即把整行下移一行)怎么办?
A:map - ddp
Q:如果想_键实现把整行上移一行怎么办?
A:map _ ddkP
(实现方法不唯一)

nmap,imap与vmap

前面我们把-键映射了dd,但当你进入插入模式(insert)时,你按下-,只是插入了dd这两个字符,而不是删除整行,该如何解决。

imap - <esc>ddi

我们知道,vim有三种模式,normal,visual,insert,与此对应,nmap,vmap,imap就是在某一模式下的映射。所以我们如果想在insert模式下让-键删除一行,需要先退回normal模式,再dd,再按i进入insert模式。

Q:visual模式下,U可以把小写转换为大写,iw可以选中整个单词,怎么让<c-u>在normal与insert模式下实现把整个单词全部变为大写?

*noremap

假设你写了这么一条map

nmap dd O<esc>jddk

如果你执行dd会发生什么?由于映射双方都有dd,会无限循环。当执行完O<esc>j后又执行dd(即执行O<esc>jddk

*noremap(Nonrecursive Mapping)就是解决这个问题,当后面被映射的键映射其它键时,*noremap命令会使其在该map中失效,也就是dd仍然只是删除一整行命令。

那么上面的例子可以这样写

nnoremap dd O<esc>jddk

tips:如果你对上面这个映射不满意,在.vimrc中可以直接删除该行,但在vim中如何直接(暂时)取消?

nunmap dd

Leaders

在windows中有些组合键,比如win+d可以关闭所有窗口,win+l可以锁屏,而leader就有点像win键,告诉vim:我要用快捷键了。事实上,我们不关心这个leader是什么,只是需要这么一个“前缀”。(该类比并不恰当,windows中组合键需要一起按,leader只是个前缀,先按leader再按其它的键即可)

设置leader

let mapleader = ","

这样我们就把逗号设置为mapleader(逗号是惯例,比较容易按,也不会影响原来的功能)。然后你就可以这样设置:

nnoremap <leader>d dd

这样你只需要按下,d就等于执行了dd

为什么不写死呢,把逗号写进去?程序猿都知道,设为变量总是比常量写死更方便,以后容易替换;别人在复制你的配置时,马上知道这是一个leader,他就容易改为他习惯的;在许多vim插件中也会用到leader。

还有一种leader,“local leader”,你可以把这两个leader设为相同或者不同
比如

let maplocalleader="\\"

这个localleader的意义往往是你想在某一种特殊文件中用一个leader,比如html,python,(不同的编程语言频繁的操作也会有差异),会 方便不少。

文章整理翻译自Learn Vimscript the Hard Way

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值