在vim中让大括号自动完成并对齐

如果你想在vim中当输入一个左大括号的时候,让vim自动插入插入右大括号,并且回车换行,将光标置于下一行向右缩进4个空格(一个tab),就在.vimrc中配置:

imap { {}<ESC>i<CR><ESC>V<O

上面有个前提就是你设置了

set smartindent
set tabstop=4
set shiftwidth=4
set expandtab

如果你只想让你的vim完成标题中说的事情,到此已经完成。但是如果你想了解上面的是什么样的原理,那就继续往下看,你会意外的收获的。
imap是vim配置中的指令,就是做一个映射,语法就是
imap 要映射的东西 被映射成什么东西
按照这种理解,上面的那句就可以理解为:
映射“{”为
{}<ESC>i<CR><ESC>V<O

后面的东西是什么就是vim中依次执行这些操作,什么操作呢?我们一一分解;

{} 就是直接插入左右括号

<ESC>   就是按键盘的ESC键,切换到命令行模式

i  按键盘的i键,进入插入模式

<CR> 按回车,此时将右括号换行

<ESC>   就是按键盘的ESC键,切换到命令行模式

V 按住shift+v,就是选中当前行就是有括号所在的行

< 按住shift+,将当前行向右移动一个tab,此时有括号已经和做括号对齐

O 按住shift +o,在当前行(右括号)的前一行插入

也许你已经了解了怎么回事,其实就是告诉vim如果我们输入{ ,那就接下来做上面一系列操作。

当你明白了这个原理,你就可以自己去创建一些映射来提高你的编程速度,就上面的映射提高了你9倍的速度啊。

另外以个你可能想到的映射就是小括号,目标是什么呢?当我们插入左边的小括号的时候,告诉vim插入右边的小括号并且移动光标到括号中间并处于插入状态。方法就是先去你的vim中试试你怎么做到,然后在你的.vimrc中把你刚才的操作想上面一样做成一个映射。可能你的和我的不一样的,我用了3步,你用了4步,还有人用了5步,但是都没有问题,因为最后达到的效果都一样。看看我的吧:

imap ( ()<ESC>i

上面是关于自动插入,但是如果你发现插入错误,想删除插入的操作,需要删除自动插入的所有的东西,这样需要好几个步骤,能不能删除左边括号就自动删除后面自动插入的东西呢?能,但是有点麻烦,关于这部分,请参看:

http://colder.blog.163.com/blog/static/17394661820124201611732/

完。

版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.

    分享到:

Leave a Reply

Your email address will not be published. Required fields are marked *