在linux下打造一个舒适好用的C++环境

以Oracle VM VirtualBox虚拟机装Ubuntu为例,主要记录在linux下打造一个舒适好用的C++环境,对于写代码来说已经非常舒服的配置方式了,主要记录软件和vim等配置,实际装机和其它均可以参考。

虚拟机安装配置

Oracle VM VirtualBox 新建linux-Ubuntu,配置的话,默认的1G内存跑16.04的Ubuntu有点吃不消,我电脑12G内存,我给虚拟机4096MB内存,让安装在虚拟机上的系统流畅的跑起来。

  • 虚拟机 设备-网络设置 - 桥接网卡 模式
  • 设备-安装增强模式,添加光碟安装后,弹出光碟,并将剪切板双向和文件双向拖拽勾选上。

安装软件

安装git

1
sudo apt-get install git

安装vim8

1
2
3
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim

vim配置C++ IDE:https://github.com/yangyangwithgnu/use_vim_as_ide ,文章中写的比较乱,但是可以参考。

安装VIM插件管理神器

运行下面命令安装Vundle:

1
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

Vundle可以帮助我们自动安装卸载vim的插件,配置信息写在vimrc文件中。

vimrc配置文件

为了省事,我并没有把每个配置都单独拿出来解释,这是完全的vim配置文件,到这一步,可以完全复制进使用。

其它插件和vim配置信息:

.vimrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
set nocompatible "be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/syntastic' " 语法检测工具
Plugin 'scrooloose/nerdcommenter' "注释代码工具 \cc注释当前行 \cu 撤销注释当前行 \cs sexily注释 \cA 行尾注释,切换成输入模式
Plugin 'scrooloose/nerdtree' "树状结构文件夹目录
Plugin 'majutsushi/tagbar'
Plugin 'jiangmiao/auto-pairs' " 括号自动匹配
Plugin 'Valloric/YouCompleteMe'
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
" filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
syntax on "自动语法高亮"
"用浅色高亮当前行"
autocmd InsertLeave * se nocul
autocmd InsertEnter * se cul
set smartindent "智能对齐"
set autoindent "自动对齐"
set confirm "在处理未保存或只读文件的时候,弹出确认框"
set tabstop=4 "tab键的宽度"
set softtabstop=4 "使得按退格键可以一次删掉4个空格"
set shiftwidth=4 "统一缩进为4"
set expandtab "不要用空格替代制表符"
set autochdir "自动切换当前目录位当前文件所在目录"
set number "显示行号"
set history=50 "历史纪录数"
set hlsearch "搜索时高亮被查找到的文本"
set incsearch "搜素高亮,搜索逐渐高亮"
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set gdefault "行内替换“
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936,utf-16,big5,euc-jp,latin1 "编码设置”
set guifont=Menlo:h16:cANSI "设置字体“
set langmenu=zn_CN.UTF-8
set helplang=cn "语言设置”
set ruler "在编辑过程中,在右下角显示光标位置的状态行“
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
" 设置在状态行显示的信息
set showcmd "在状态行显示目前所执行的命令,未完成的指令片段也会显示出来"
set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行的距离"
set showmatch "高亮显示对应的括号"
set matchtime=5 "对应括号高亮时间(单位是十分之一秒)"
set autowrite "在切换buffer时自动保存当前文件"
set wildmenu "增强模式中的命令行自动完成操作"
set linespace=2 "字符间插入的像素行数目"
set whichwrap=b,s,<,>,[,] "开启normal 或visual模式下的backspace键空格键,左右方向键,insert或replace模式下的左方向键,右方向键的跳行功能"
filetype plugin indent on "分为三部分命令:file on,file plugin on,file indent on 分别是自动识别文件类型, 用用文件类型脚本,使用缩进定义文件"
set foldenable "允许折叠"
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
setlocal foldlevel=1 " 设置折叠层数为
" set foldclose=all " 设置为自动关闭折叠
" " nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
" " 用空格键来开关折叠
set cursorline "突出显示当前行"
set magic "设置魔术?神马东东"
set ignorecase "搜索忽略大小写"
filetype on "打开文件类型检测功能"
set background=dark
set t_Co=256 "256色"
set mouse=a "允许鼠标"
" 配置nerdtree
let NERDTreeQuitOnOpen=1 "打开文件时关闭树
let NERDTreeShowBookmarks=1 "显示书签
" 配置nerdtree的快捷键
let mapleader = "," "设置前导键为,
map <leader>ne :NERDTreeToggle<CR> ",ne 打开 关闭 文件树
map <leader>tl :TlistToggle<cr> " ,tl 新建标签
nnoremap <leader>ma :set mouse=a<cr>
nnoremap <leader>mu :set mouse=<cr>
" tagbar插件
nmap <leader>tb :TagbarToggle<CR>

此时进入VIM中:

1
:PluginInstall

会自动帮你将配置文件中所需要的插件。

每个插件都需要下载安装,需要等待很长时间,建议吃饭的时候去做这件事。

最后一个安装的插件是'Valloric/YouCompleteMe',是必然会安装出错的插件,但这个插件是写C时的VIM神器,会提示很多信息,自动补全等,我们又不得不装,但是这个YCM,安装过程错误百出,十分麻烦,甚至有外国网友戏称之为FuckYouCompleteMe。。

那么下面是我遇到的所有YCM安装过程中的问题和解决办法总汇,如果你是在Ubuntu16.04,那么按照我的步骤,一定能让你顺利安装上这个恼人的YCM。

安装YCM过程中各种解决办法:

问题一:

1
YouCompleteMe unavailable: requires Vim 7.4.1578+.

vim版本不对,但实际上vim版本为要求的版本以上;

解决办法:

尝试升级vim为最新的vim8

1
2
3
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim

问题二:

1
Cannot add PPA. Please check that the PPA name or format is correct

解决办法:

1
2
3
sudo apt-get install --reinstall ca-certificates
sudo -E add-apt-repository ppa:ppaname/ppa

第一个通过ca证书方式,第二个是忽略代理添加ppa,如果还是Cannot add PPA,建议将系统升级到Ubuntu16.04或以上。在低版本的系统中,莫名其妙的PPA就是添加不上,update也是错误百出,将系统升级到了16.04,就顺利多了。

问题三:

1
YouCompleteMe unavailable: No module named ycmd

解决办法:

进入 ~/.vim/bundle/YouCompleteMe/文件夹下

1
2
3
$ git submodule update –init –recursive
$ ./install.py

问题四:

从这里开始的步骤和方法是必须要做的,如果你运气好,没有遇到前面的问题,那么下面的基本你几乎必须要做,才能成功安装上YCM

错误显示:

1
The ycmd server SHUT DOWN (restart with ':YcmRestartServer'). YCM core library not detected; you need to compile YCM before using it. Follow the instructions in the documentation

解决办法:进入 ~/.vim/bundle/YouCompleteMe/文件夹下

1
2
3
$ sudo apt-get install clang
$ sudo apt-get install python-dev python3-dev
$ ./install.sh --clang-completer --system-libclang

问题五:

1
NoExtraConfDetected: No .ycm_extra_conf.py file detected, so no compile flags are available.

缺少配置文件,所以我们添加一个就可以了

  • 复制 .ycm_extra_conf.py 文件
1
$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/
  • 添加 vim 配置
    注意下面的 python 解释器的路径要和编译 ycm_core 的时候使用的 python 解释器是相同的版本(2 或 3)
1
2
3
“ ~/.vimrc
let g:ycm_server_python_interpreter='/usr/bin/python'
let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'

安装TagBar

使用一般IDE都会在侧面生成一个当前文件的结构图,就不说sublime里面还有个文件缩略图,那么在vim里我们也能添加这么一个tagbar,让我们在处理一个文件时,快速定位到函数变量,对代码了如指掌。之前已经成功装上了tagbar,但是使用TagBar之前先确保已经有ctags

所以我们还要装一下这个ctags

1
sudo apt-get install ctags

使用

最后打开vim就可以使用打造好的IDE了,编辑C/C++就可以享受到代码提示,高亮,符号补齐等效果了,

,ne 打开 关闭 文件树,,tb 打开 关闭 tablist等。

坚持原创技术分享,您的支持将鼓励我继续创作!