1.messages
使用echo可以打印出变量的名字,echom同样也是打印命令,但是使用messages查看的话,只有echom的内容才会显示。
把echo的内容添加到vimrc里面,再每次启动vim的时候,会看到像下面的信息:
|
1 2 3 |
laixintao@Jarvis2:~$ vim hello xintao Press ENTER or type command to continue |
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的,例如下面这个映射
|
1 |
:nmap dd Ojddk |
本意是使用新的一行替代旧的一行,但是在解释的时候,遇到dd,又会使用这个命令自身进行解释,所以“无限递归”了。
所有的map命令都有对应的noremap命令,即noremap, nnoremap, vnoremap, 和 inoremap,推荐在任何情况下,都使用nore来代替map命令,完全避免嵌套。
键位一共就那么多,总会不够用,所以设置一个<leader>会是一个不错的选择。
|
1 |
:let mapleader = "," "我习惯用逗号作为leader |
然后就可以使用 :map <leader>- dd这样子设置映射了。这个映射的意思是,先按下逗号,再按下-,会删除本行(dd)。
vimrc是我们要经常编辑的文件,所以设置两个命令可以快速编辑和应用vimrc文件是个好主意。
|
1 2 |
:nnoremap <leader>ev :vsplit $MYVIMRC<cr> :nnoremap <leader>sv :source $MYVIMRC<cr> |
肌肉记忆。推荐一个比较快速的方法:inoremap jk <esc>也就是说,在Insert Mode下按下jk会退出到Normal Mode。因为jk两个键在你最常用的地方,两个手指分开按会很快,如果在Normal Mode下面按错了也没关系,不会有任何影响。
一开始你可能会不适应,依然使用<esc>键退出。推荐设置新map的时候,删除旧的,强迫自己肌肉记忆。inoremap <esc> <nop>你会很快习惯的!如果觉得自己老是用导航键,删除他们,强迫自己用hjkl。
4.缩写
缩写(abbreviation)是一个非常实用的功能。试一下
|
1 |
:iabbrev adn and |
然后去Insert模式输入You adn me会发现adn被替换成了and。
这个功能实现的原理是,每当用户输入non-keyword,vim就会将在iabbrev设置过的缩写替换掉。什么是keyword呢?使用set: iskeyword?可以查看。基本上常用字符,字母数字和下划线,都是keyword。
另外一个比较实用的地方,以前我翻译文章,都要在末尾留下原文链接,版权信息,但是用iabbrev就不需要每次都输入了。
|
1 2 |
:iabbrev @@ steve@stevelosh.com :iabbrev ccopy Copyright 2013 Steve Losh, all rights reserved. |
为什么不实用inoremap呢?因为map会在输入之后立即生效,那么我们就打不出来原来的字符了,iabbrev会在被替换字符是单词的状况下才替换。而且map是针对键位按照顺序依次按下生效的,iabbrev针对的是印到屏幕上的单词,这里要理解。
好了,说了这么说map了,接下来玩个大的吧:
|
1 |
:nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel |
设置之后,回到vim,按下你的<leader>"看看发生了什么。是不是很强大?如果看不懂的话,答案在这里。

