VimScript学习笔记(1):基本映射及常用功能

1.messages

使用echo可以打印出变量的名字,echom同样也是打印命令,但是使用messages查看的话,只有echom的内容才会显示。

echo的内容添加到vimrc里面,再每次启动vim的时候,会看到像下面的信息:

2.使用set设置变量值

set的用法是:

  • :set <name>或者:set no<name>设置布尔类型的值
  • :set <name>!直接将原来的值设置为相反的值。
  • :set <name>?查看变量的值
  • :set <name>=<value>用来设置非布尔类型的值

3.键位映射

使用map <key> <action>映射键位,特别的,nmap对应normal模式的映射,vmap对应visual mode的映射,imap对应Insert mode的映射。

如果<action>里面还有别的映射,vim会继续解释。这也许很有用,但实际上是很evil的,例如下面这个映射

本意是使用新的一行替代旧的一行,但是在解释的时候,遇到dd,又会使用这个命令自身进行解释,所以“无限递归”了。

所有的map命令都有对应的noremap命令,即noremap, nnoremap, vnoremap, 和 inoremap,推荐在任何情况下,都使用nore来代替map命令,完全避免嵌套。

键位一共就那么多,总会不够用,所以设置一个<leader>会是一个不错的选择。

然后就可以使用 :map <leader>- dd这样子设置映射了。这个映射的意思是,先按下逗号,再按下-,会删除本行(dd)。

vimrc是我们要经常编辑的文件,所以设置两个命令可以快速编辑和应用vimrc文件是个好主意。

肌肉记忆。推荐一个比较快速的方法:inoremap jk <esc>也就是说,在Insert Mode下按下jk会退出到Normal Mode。因为jk两个键在你最常用的地方,两个手指分开按会很快,如果在Normal Mode下面按错了也没关系,不会有任何影响。

一开始你可能会不适应,依然使用<esc>键退出。推荐设置新map的时候,删除旧的,强迫自己肌肉记忆。inoremap <esc> <nop>你会很快习惯的!如果觉得自己老是用导航键,删除他们,强迫自己用hjkl

4.缩写

缩写(abbreviation)是一个非常实用的功能。试一下

然后去Insert模式输入You adn me会发现adn被替换成了and。

这个功能实现的原理是,每当用户输入non-keyword,vim就会将在iabbrev设置过的缩写替换掉。什么是keyword呢?使用set: iskeyword?可以查看。基本上常用字符,字母数字和下划线,都是keyword。

另外一个比较实用的地方,以前我翻译文章,都要在末尾留下原文链接,版权信息,但是用iabbrev就不需要每次都输入了。

为什么不实用inoremap呢?因为map会在输入之后立即生效,那么我们就打不出来原来的字符了,iabbrev会在被替换字符是单词的状况下才替换。而且map是针对键位按照顺序依次按下生效的,iabbrev针对的是印到屏幕上的单词,这里要理解。

好了,说了这么说map了,接下来玩个大的吧:

设置之后,回到vim,按下你的<leader>"看看发生了什么。是不是很强大?如果看不懂的话,答案在这里



VimScript学习笔记(1):基本映射及常用功能”已经有12条评论

    • 这个命令是将光标所在的单词加上引号,最后的lel是将光标移动到单词第一个字母上(l),然后移动到单词最后一个字母(e),移动到单词最后一个引号上(l),方便继续编辑。

      • 对啊,就是这样啊. 你最后还是要移动到单词末尾,el就行,lel不是多此一举吗?

        我试过这两种方式,结果都是一样的, 也试过手动输入,真是没看出什么差别.

        仅仅因为是别人这么写吗?!

        • 对不起,看成最后一个l了。第一个删掉确实是没有问题的,不过严格来说,符号应该不属于第一个单词,能稍微增加一些健壮性。

      • 哦.对了
        1. 你邮件回复模板的称呼写错了,应该是我不是你
        2. 提交评论经常出现”评论以及提交过了,有重复”

        如果是我收到这样的留言和回复我是很开心的,这表明留言的人有认真看博文,还费心指出了我的错误.

        • 嗯,谢谢。评论模板具体是那一句话?能贴一下整句话吗?

          评论框的问题我也很头疼,不会PHP代码没法下手优化,而且这个评论是同步垃圾检查的,导致每次评论相应速度都很慢,一直想优化成异步的。

        • 嗯, 谢谢。

          模板的称呼具体是哪个地方,可以贴出来整句话吗?评论框的bug我暂时改不了,我不会PHP代码。而且这个评论框的垃圾检查是同步的,导致每次发送评论都会很慢,一直很头疼,早就想换成异步的了。

  1. laixintao, 您好!

    2017年6月15日您曾在《VimScript学习笔记(1):基本映射及常用功能》这篇文章留言:
    哦.对了 1. 你邮件回复模板的称呼写错了,应该是我不是你 2. 提交评论经常出现”评论以及提交过了,有重复” 如果是我收到这样的留言和回复我是很开心的,这表明留言的人有认真看博文,还费心指出了我的错误.

    laixintao在2017年6月15日对您回复说:
    嗯,谢谢。评论模板具体是那一句话?能贴一下整句话吗? 评论框的问题我也很头疼,不会PHP代码没法下手优化,而且这个评论是同步垃圾检查的,导致每次评论相应速度都很慢,一直想优化成异步的。

    • sorry, 这里写错了,应该是 :set iskeyword?. 已经在原文改正。

      意思是您在 Vim 程序里面,按下 : 可以进入到命令模式里面,即光标在屏幕的最下方,然后依次输入 set iskeyword?,回车,就可以看到 Vim 将哪一些正则表达式作为 keyword 啦。

Leave a comment

您的电子邮箱地址不会被公开。 必填项已用 * 标注