• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Vimscript 模式映射

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

上一章中我们谈论了如何在Vim中映射按键。我们使用的命令map在normal模式下工作。 如果阅读本章之前你自己已经折腾了,可能会注意到这个映射在visual模式一样工作。

你可以使用nmapvmapimap命令分别指定映射仅在normal、visual、insert模式有效。

执行如下命令:

:nmap \ dd

在normal模式下,按下\。Vim会删除当前行。

现在进入Visual模式,再次按下\。什么都不会发生,因为我们告诉了Vim这个映射仅在normal 模式下工作(同时\的默认行为是什么都不做)。

运行如下命令:

:vmap \ U

进入visual模式并选中一些文字,按下\。Vim将把选中文本转换成大写格式。

分别在normal模式和visual模式测试\按键,注意不同模式下的效应。

增强记忆

起初,将同样的按键根据当前模式的不同映射到不同的功能听起来很可怕。为什么每次按下 那个键之前都要停下想想我们现在是在什么模式?那样是不是更浪费时间?

实践中我们发现那真不是个问题。一旦你经常使用Vim,你就不会在意你按下的键了。 你会想“删除一行”,而不是“按`dd·”。你的手指和大脑都会记住你的映射,潜意识中你就会 按下那些映射按键。

insert模式

现在我们已经知道如何在normal模式和visual模式下映射按键。现在我们谈谈insert模式下的 映射方法。运行如下命令:

:imap <c-d> dd

你可能猜想这个命令的作用是在insert模式下通过按键Ctrl+d删除整行。这个映射很实用, 因为你不必每次都要为了删除某些行而切回到normal模式。

好的我们试一下。它并不如我们想象那般工作,而仅仅是在文件中添加了两个d字符! 它压根就没用。

问题就在于Vim只按我们说的做。这个例子中,我们说:“当我按下<c-d>时,相当于我 按了两次d”。而当你在insert模式下,按下两次d的作用就是输入两个字符d

要想让这个映射按我们的期望执行,我们需要更加明确的指令。修改映射并运行如下命令:

:imap <c-d> <esc>dd

<esc>告诉Vim按下ESC按键,即退出insert模式。

现在再试试这个映射。它能够正常工作,但是注意你是如何回到normal模式的。这是因为我们 告诉Vim<c-d>要退出insert模式并删除一行,但是我们没有告诉它再回到insert模式。

运行如下命令,修复映射问题:

:imap <c-d> <esc>ddi

结尾的i告诉Vim进入insert模式,至此我们的映射才最终完成。

练习

设置一个映射,当你在insert模式时,可以通过按下<c-u>将当前光标所在的单词转换成 大写格式。每次我写一个类似MAX_CONNECTIONS_ALLOWED这样很长的常量时都能感觉到这个 映射的实用性。因为这样我就可以以小写的格式敲写常量,然后用这个映射将其转成大写, 不必一直需要按着shift键。

将那个映射添加上到你的~/.vimrc文件中。

设置一个映射,当你在 normal 模式时,可以通过按下<c-u>将当前光标所在的单词转换成 大写格式。这个映射和上面那个有点区别,因为你必须要进入normal模式,也不需要结束时 切到insert模式。

将那个映射添加上到你的~/.vimrc文件中。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Vimscript 精确映射发布时间:2022-02-03
下一篇:
Vimscript 基本映射发布时间:2022-02-03
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap