在VIM下写C++能有多爽?

我是坚定的Vim党,因为和命令行的集成如此之好,Vim可以解决任何问题。 然而在这个世界上,即便是最好用的工具也是需要配置的。本文就来打造一个适合写C++的Vim编辑器!

基础设置

稍微熟悉Vim的小伙伴都会知道这个文件~/.vimrc,如同绝大多数的Unix软件,Vim也是用基于文本的配置文件。
当前用户的Vim配置便存储在这个文件当中,该文件的每一行便是一个配置项(function除外)。

配置文件中的所有语句都会在打开Vim时,在Ex模式下执行。例如,我们在Vim中打开行号:

:set number

我们便可以在配置文件中加入:

" ~/.vim
set number

同样重要的配置还有:

  • 打开语法高亮:syntax
    on
  • Tab大小:set
    tabstop=4
  • 缩进大小:set
    shiftwidth=4

Vim是一个典型的Unix程序,上述命令都有缩写啦:number(nu), tabstop(ts), shiftwidth(sw), etc.

更多关于基础配置项的信息,请参考我的另一篇博客: vim 的配置与使用

自动补全

自动补全恐怕是代码编辑器最重要的特性了,我们暂且不提它毁了多少人的面试之路。

由于Vim插件的风格、使用方式太过多样化,多语言的自动补全一直存在各种冲突,需要大量精力才能调通。 然而Github的出现给Vim插件带来了新的活力,现在我们通过基于Github的Vundle来安装插件,而不需要手动去vim.ort上找插件了。

废话少说,我推荐的插件叫做YouCompleteMe,看图!

YouCompleteMe功能很全:

  • 自动补全,在你写一个名称的过程中,会出现提示列表,同时给出每一项的函数签名(函数形参列表)。
  • 语法错误、警告的提示。比如变量未使用、函数未定义等等,很多编译warning都会直接提示出来,特别神奇。

配置很容易,但需要先安装Vundlevundle(如果你没有的话)。另外,如果你是MacOS用户,确保你的Vim升级到了7.4. 如何使用HomeBrew本文就不唠叨了。

括号/引号匹配

括号和引号的自动补全和智能匹配。例如:

  • 输入前大括号补全后大括号
  • 在一对括号之间回车,自动分为3行并调整缩进
  • 输入前引号自动补全后引号

凡此种种。。。我觉的第二条是最实用的功能,尤其是写函数和类的时候。

上述的各种括号、引号匹配都可以用delimitMate来解决,官网:

https://github.com/Raimondi/delimitMate

下载后把autoloadplugindoc都拷贝到~/.vim/下即可。

Formatter

格式化程序对于我们懒人和强迫症用户来讲是非常需要的。Vim的默认配置中提供了格式化功能, 但显然我们要的更多!比如我希望:

  • 前大括号不换行,而后大括号换行
  • 所有运算符两边都有空格
  • 一键格式化当前文件
  • 保存时自动格式化
  • ...

这里推荐的插件叫做vim-autoformat,上述的需求都能完美地解决。参照文档安装就好了。

需要注意的是,vim-autoformat只是格式化程序框架,它依赖于代码风格检查工具来进行格式化。 我们需要单独安装这些工具:astyle、js-beautify等。这里有完整的列表:https://github.com/Chiel92/vim-autoformat#default-formatprograms。

如果你希望自定义代码风格,可以在.vimrc中添加个性化的formatter:

let g:formatdef_harttle = ‘"astyle --style=attach --pad-oper"‘
let g:formatters_cpp = [‘harttle‘]
let g:formatters_java = [‘harttle‘]

比如我安装了astyle,这里定义一个formatter叫做harttle。然后,把它设置成cpp和java的formatter。 至于astyle
--style=attach --pad-oper
为什么这样写,这是一个Bash命令,这些参数你可以去查看Astyle
的文档
。 来一个快捷键F3格式化当前文件:

" file: ~/.vimrc
noremap <F3> :Autoformat<CR>

看图!

注释

注释、反注释是代码编辑器的常用操作,我们也可以方便地在Vim中设置快捷键。 然而因为不同语言的注释风格不同,我们可能需要在ftplugin下写多个配置文件,总之很烦人。
可以引入一个称为NERD Commenter的插件:

https://github.com/scrooloose/nerdcommenter

这是一个在社区很火的插件,O(∩_∩)O~。下载后直接复制到~/.vim下面即可。
如果你希望看到它的文档,只需要更新VIM DOC:

:helptags ~/.vim/doc

此后,按下\cc即可注释,\cu反注释。前面可以加一个行数~

编译/运行

如果你已经能熟练地定义Vim快捷键,就不必往下看了。

下面三行分别设置了运行、编译、调试的快捷键,n表示该快捷键在normal模式下起作用; nore表示该定义不会递归地传递;<CR>是回车(carriage
return),!表示执行Shell命令。

nnoremap <F5>   <Esc>:w<CR>:!g++ -std=C++11 % -o /tmp/a.out && /tmp/a.out<CR>
nnoremap <F7>   <Esc>:w<CR>:!g++ -std=C++11 %<CR>
nnoremap <C-F5> <Esc>:w<CR>:!g++ -std=C++11 -g % -o /tmp/a.out && gdb /tmp/a.out<CR>

当然,如果你把上述代码直接添加到~/.vimrc中,所有类型的文件都会拥有上述三个快捷键。
这可能是我们不希望的结果,我们希望每种文件类型的<F5>执行自己的运行命令。

这需要进行文件类型识别和定义文件类型插件,请参考我的另一篇文章:感受Vim的强大:进阶技巧



除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/07/18/vim-cpp.html

版权声明:本文为博主原创文章,转载请附上原文链接。

时间: 2024-08-29 19:54:55

在VIM下写C++能有多爽?的相关文章

linux 下写python脚本实现自动补全( 我51论坛也有)

以前都是在windows下开发,但是对于玩linux的人来说,能够在linux下实现python脚本的自动补全的话,那是相当不错的,而我一般是使用的vim作为编辑器,且linux一般选择最小化安装,没有图形界面,参考了下网上的很多方法也没有适合自己,最后自己去看代码的帮助来实现了这个功能,废话不说,现在开始代码下载地址:http://vim.sourceforge.net/scripts/download_script.php?src_id=21842 文件名:pydiction-1.2.3.z

vim下使用UltiSnips

vim下使用UltiSnips 最近在学习Linux编程,相应的也在学vim.vim中的UltiSnips插件可以实现比一般的代码补全更为强大的效果.这里就记录一下吧. UltiSnips安装.基础及进阶:https://vimzijun.net/2016/10/30/ultisnip/ C++中常用的一些.已经内置的snips inc:#include<xxx.h>,也就是引入c的库 incc:#include,引入C++的库 main:主函数 自定义的snips 在~/.vim/UltiS

配置VIM下编程和代码阅读环境

作者:gnuhpc from http://blog.csdn.net/gnuhpc  http://gnuhpc.wordpress.com/ 本文环境:ubuntu 10.10/vim7.2 基本配置1) 建立基本环境: 建立三个目录:mkdir ~/.vim/{plugin,doc,syntax} -p 建立配置文件:touch ~/.vimrc .vimrc是vim的主要配置文件,我们在配置VIM时首先对它进行基本的设置.打开home目录下刚刚建立的.vimrc文件,可以对VIM进行如下

vim下tab设置为4个空格

1. vim /etc/vimrc set ts=4 set expandtab set autoindent 2.vim /etc/vimrc set ts=4 set sw=4 vim下tab设置为4个空格,布布扣,bubuko.com

补:关于man关于SEE ALSO(参见)中代号与vim下常用命令

1.查阅/etc/issue文件时,使用man issue发现manual中see also出现motd(5), agetty(8), mingetty(8)字样.以及文档行首的issue(5)究竟是什么意思. man man后解释为: 1   Executable programs or shell commands-->shell下可执行程序或命令     2   System calls (functions provided by the kernel)-->内核调用工具或函数    

c++中向任意目录下写文件

今天遇到了在C盘的子目录下写文件出错的事情,最中自己实验后解决.小小记录一下. 代码如下: #include<stdio.h>#include<stdlib.h>#include<time.h> main(){ int data[35]; int n=35,temp; for(int i=0;i<35;i++) {  data[i]=i; } srand((unsigned)time(NULL)); FILE *fp; fp=fopen("C:\\Pro

使用Code::blocks在windows下写网络程序

使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:ht

VIM下的跳转练习

在vim下可以使用常用的箭头键 但是 还有其它键可以让你更快的达到目标 hjkl 这是代替箭头键功能的 H M L 跳到屏幕的顶上 中间 下方 w 跳到下一个单词的开始e 跳到单词的结束b 向后跳 gg 跳到文件的开始 G 跳到文件的结束 10gg 或10G 跳到第10行 转自: http://www.cnblogs.com/moiyer/archive/2010/04/01/1952681.html

怎样在Windows和Linux下写相同的代码

目前,Linux在国内受到了越来越多的业内人士和用户的青睐.相信在不久的将来,在国内为Linux开发 的应用软件将会有很大的增加(这不,金山正在招兵买马移植WPS呢).由于未来将会是Windows和Linux两强鼎立的格局,怎样能够使得开发的软件保持最大的可移植性就成了一个很重要的问题.小弟经过一段时间的摸索,找到了这个问题的圆满解答. 在Linux下,所有的开发工具和库都属于自由软件,可以免费获得并且功能强大.如果这些工具和库都有相应的Windows版,那么我们就能够在Windows和Linu