这两天使用Linux下的Vim,总是不得劲,网上找的Vim配置文件,总是有这样那样的不满意,遂查看了下具体命令的意义,整理如下:
1.大括号匹配问题
原理:是通过映射操作实现,简单的说,就是摁下{,vim执行一系列的操作。而要达到我们满意的效果,需要设置一些对应的操作的标准,也就是对齐配置。那么首先,设置对齐如下:
(1)对齐相关配置:
set smartindent
set tabstop=4
set shiftwidth=4
set expandtab
具体意义解释:set smartindent: 在行和段开始处使用制表符
set tabstop=4: 设置tab为4个字符,而不是8个。
set shiftwidth=4:设置自动缩进为4个字符。
set expandtab 设置不使用空格代替制表符
对齐结束,下面进行括号补全的设置,以大括号和小括号为例。
(2)自动补全小括号:
imap ( ()<ESC>i
imap是配置文件用的一个函数,表示映射。这句话的意思是,映射“(”操作为“()<ESC>i”。
也就是说,当你摁下键盘上的“(”时,vim实际执行的是一系列操作:
<1>摁下“(”,摁下“)”。
<2>摁下ESC键
<3>摁下i键
上面<2><3>操作是为了将光标移前一格,自己试一下就知道了。
(3) 自动补全大括号:
有了上面的认识,大括号就比较好理解,具体代码如下:
imap { {}<ESC>i<CR><ESC>V<O
<ESC>后面跟的V < O 各代表什么意义呢?这是在vim命令模式下的一些快捷键命令。
V:按键shift+v,实现操作:选中当前行。这里当执行这一操作的时候,实际上选中的是“}”所在的行。
<: 按键shift+<,实现操作:将当前行向左移动一个tab,此时右括号已经和左括号对齐。
O:按键shift+o,实现操作:在当前行的前一行插入文本,实际执行效果就恰好满足我们的需求。
使用上面的方式进行配置大括号时,实际发现一般缩进正常,但是在已有缩进的行进行缩进时,比如嵌套if语句等,还是有问题,遂修改如下:
imap { {<CR>}<ESC>i<ESC>O
综上,其实vim的配置文件并不复杂,关键是要去理解。
文中用到的一些用<>括起来的符号作为键盘操作,具体可以通过下面的Vim命令来查看:
:help keycodes |
在Vim的命令模式下,键入help keycodes如下:
这样,对于上面的<CR>、<ESC>等,就十分清楚了。