欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

vim输入大花括号({),自动补全并对齐

程序员文章站 2022-05-28 19:39:22
...

配置方法

在vimrc文件中配置如下按键映射:

inoremap { {}<Esc>i<CR><Esc>koi<Esc>j<C-S-v><S-%>=j<S-$>xa

效果如下:
在编辑代码的时候,输入{,便会自动补全右边的},并且自动对齐,光标换到下一行合适的地方,如图:
vim输入大花括号({),自动补全并对齐
vim输入大花括号({),自动补全并对齐
用vim编辑器,定义一个函数,在if(i>0)后面输入一个{,然后自动补全右边的},并且代码对齐,光标放在下一行的合适位置(有个白色竖点的那地方,可以直接编辑,不用按tab或空格再对齐)
好了。如果只需要这个配置的话,把上面的那行配置代码复制过去用就行了。下面我就说下这行代码什么意思,不关心可以跳过。

背景

我的系统是ubuntu,但是平常工作主要语言还是java,用的IDE是idea,一般是不用vim写代码的。平常vim也只是写些脚本(shell,或者python)。
但是吧最近在写些算法,想着用c写,c的*少,也直接,毕竟也是我的第一本语言。就一直用的vim作为编辑器,说真的确实比较痛苦,没vs爽是真的。(不是我装,就是想强制锻炼自己写这些东西)
定义一个函数,写个if else什么的后面需要跟对{},是更痛苦了。用ubuntu18,这个vim版本还不错,写c语言的时候会自动对齐的,所以,mind you,上面的配置不是针对这种场景:在ubuntu18的安装的版本很新的vim上写c语言用的。当然了,如果你定义的文件名不是.c后缀的话,vim自己也不会对齐,这个就可以用上了
扯远了~~~~
授人以鱼,不如授人以渔。我说下我怎么发现这个东西的。
事情来自今晚,源于我的好奇心。
平常用vim的操作,都是从书上看的,今晚一时好奇,想着man vim看一下,有没有平常书中不提到的,毕竟书上写的都太浅了。
我发现了新大陆:
vim输入大花括号({),自动补全并对齐
在帮助文档最后面有个在线帮助,命令行模式输入:help,获取帮助信息:
vim输入大花括号({),自动补全并对齐

这里有说明怎么用的。需要可以自己看下:
然后,最终我发现了个这:
vim输入大花括号({),自动补全并对齐
map.txt,一直点进去看的时候,看到了说明和示例,试了下,很有意思。
但是我配置esc使用其它键映射的时候,不生效,在网上查资料的时候,看到了个自动补全,输入{,自动补全为{},可以少输入一次},让我有了个想法。
就让我写出了这行配置代码:

inoremap { {}<Esc>i<CR><Esc>koi<Esc>j<C-S-v><S-%>=j<S-$>xa

代码说明

我来解释下,这个配置就像文档说的,在某个模式下,按键做了个映射。
inoremap就是插入模式:
vim输入大花括号({),自动补全并对齐
还有另外2种写法:imap和iunmap
然后定义按键{,后面的{}<Esc>i<CR><Esc>koi<Esc>j<C-S-v><S-%>=j<S-$>xa,就像当于在插入模式,按下{,实际是触发后面一列键的动作。
如下:
输入{},然后按下Esc进入命令模式,然后按下i进入编辑模式,光标此时在}符号上,<CR>就是回车。这时候,就相当于在{}中间按下回车,变成下面这样:
vim输入大花括号({),自动补全并对齐
变成vim输入大花括号({),自动补全并对齐
接下来再按下Esc<Esc>,进入命令模式,按下k,光标向上移动一行到{这里,然后按下o,在新的一行编辑,此时是编辑模式,这个时候按下i,没有别的意思,就是输入了一个i,也可以用其它字符替代,这个i最后是我用来定位光标的(花了好大会才想出的这个定位光标的方案)。这个时候大概是这个样子:
vim输入大花括号({),自动补全并对齐
如果此时是一个if语句的{},那实际可能是这个样子:
vim输入大花括号({),自动补全并对齐
可以看到实际这个代码是没有对齐的,接下来就是要对齐了。
然后的Esc<Esc>进入命令模式,输入j,光标下移一行,此时光标在i下面的}这里,然后的<C-S-v>是进入可视化块模式(如果你的快捷键不是这请调整,比如<C-v>没有shift键)。<S-%>是shift+%键,移动到匹配的括号处,也就是当前}对应的{的地方,此时光标在{这里。
此时是把{和}之间有3行内容选中了输入=对齐,效果如下:
vim输入大花括号({),自动补全并对齐
已经对齐了。这个时候该字符i发挥作用了。
输入j光标移动到下一行,也是字符i的左边,然后输入shirf+$<S-\$>,光标移动到行尾,输入x,删除i字符,输入a进入编辑模式:
vim输入大花括号({),自动补全并对齐
完美。
如果碰见这种代码呢,初始化一个数组:
vim输入大花括号({),自动补全并对齐
不能一输入{,就自动回车对齐,这样还得再删。
然后想到了一种解决办法,对}作映射:

inoremap } {}<Esc>i

这样就解决了,我的配置如下:
vim输入大花括号({),自动补全并对齐
看我选中3行,最后一行注释了。最后一行是我当时想着处理上面说的.c文件编辑,vim自动对齐的时候,自动补全{}。至于什么意思,前面说了这么多,这个一看也就明白了。
最后,看下效果,随便玩:
vim输入大花括号({),自动补全并对齐
其实就是自己的按键顺序自动走了一遍,减少人力浪费,毕竟我也刚见这个配置,也了解的少(如定义函数),想不到更好玩的。
p.s. 如果不清楚vimrc在哪,建议网上查吧,不同的作用域有不同的位置,我也不多说在哪了。

相关标签: vim自动补全{