1.messages

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

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

Shell

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的,例如下面这个映射

Vim

1

:nmap dd Ojddk

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

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

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

1

:let mapleader = ","  "我习惯用逗号作为leader

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

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

Vim

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就不需要每次都输入了。

Vim

1

2

:iabbrev @@    steve@stevelosh.com

:iabbrev ccopy Copyright 2013 Steve Losh, all rights reserved.

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

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

Vim

1

:nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel

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