Ubuntu Vim C++开发环境配置教程

1. vim 安装

sudo apt-get install vim vim-scripts vim-doc

2. .vimrc文件配置

3.插件管理工具plug.vim安装配置

3.1 plug.vim 安装

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim  //运行该命令将plug.vim 安装到 ~/.vim/autoload/plug.vim位置处

3.2 plug.vim 配置

在.vmrc 文件末尾添加以下内容

call plug#begin(‘'~/.vim/plugged'’)//这个是必须要有的开始格式  '~/.vim/plugged' 为插件安装路径
Plug ‘Valloric/YouCompleteMe’//添加自己想要 的插件
"Plug ‘Valloric/YouCompleteMe’//删除自己不要的插件
call plug#end()//这个是必须要有的结束格式

在.vimrc中配置好要安装的插件后,打开vim,然后使用以下命令即可进行插件的安装和卸载:

:PlugInstall //安装插件
:PlugClean //清除插件

4. 各插件安装配置

4.1 ctags 安装配置

4.1.1 安装

sudo apt-get install ctags

4.1.2 配置

生成索引:
cd linux-2.6.24.7
ctags -R * // 在linux-2.6.24.7 文件夹下建立源码索引tags
注册索引文件
打开~/.vimrc输入

"--ctags setting--
" 按下F5重新生成tag文件,并更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags "add current directory's generated tags file
set tags+=/usr/src/linux-headers-5.4.0-60-generic/tags  "add new tags file(刚刚生成tags的路径,在ctags -R 生成tags文件后,不要将tags移动到别的目录,否则ctrl+]时,会提示找不到源码文件)

set tags+=./tags "表示在当前工作目录下搜索tags文件
set tags+=/usr/src/linux-headers-5.4.0-60-generic/tags "表示在搜寻tags文件的时候,也要搜寻~/arm/linux-2.6.24.7/文件夹下的tags文件。
然后保存并退出vi。这样,你就可以用vim在任意地方查看有关Linux的函数原形

4.1.3 用法

tag命令用法:
Ctrl+] 跳到当前光标下单词的标签
Ctrl+O 返回上一个标签
Ctrl+T 返回上一个标签
:tag TagName 跳到TagName标签
以上命令是在当前窗口显示标签,当前窗口的文件替代为包标签的文件,当前窗口光标跳到标签位置。如果不希望在当前窗口显示标签,可以使用以下命令:
:stag TagName 新窗口显示TagName标签,光标跳到标签处
Ctrl+W + ] 新窗口显示当前光标下单词的标签,光标跳到标签处
当一个标签有多个匹配项时(函数 (或类中的方法) 被多次定义),":tags" 命令会跳转到第一处。如果在当前文件中存在匹配,那它将会被首先使用。
可以用这些命令在各匹配的标签间移动:
:tfirst 到第一个匹配
:[count]tprevious 向前 [count] 个匹配
:[count]tnext 向后 [count] 个匹配
:tlast 到最后一个匹配
或者使用以下命令选择要跳转到哪一个
:tselect TagName
输入以上命令后,vim会为你展示一个选择列表。然后你可以输入要跳转到的匹配代号 (在第一列)。其它列的信息可以让你知道标签在何处被定义过。
以下命令将在预览窗口显示标签
:ptag TagName 预览窗口显示TagName标签,光标跳到标签处
Ctrl+W + } 预览窗口显示当前光标下单词的标签,光标跳到标签处
:pclose 关闭预览窗口
:pedit file.h 在预览窗口中编辑文件file.h(在编辑头文件时很有用)
:psearch atoi 查找当前文件和任何包含文件中的单词并在预览窗口中显示匹配,在使用没有标签文件的库函数时十分有用。

最简单的使用方法举例
用vi在任意目录写一个Test.c文件,内容如下:

int main(void)
{
printf(“Hello World!\n”);
return 0;
}

写好后末行模式输入w保存好(不要退出vi),按Esc回到指令模式,把光标停留在printf上
然后按 Ctrl+W + ],vi会自动跳到Linux系统函数printf()处,这时我们能查看printf()的原形
查看完了,按Ctrl+o(回到上一个标签) 就回到原来的地方

4.2 gutentags 自动索引安装配置

4.2.1 gutentags 安装

vim-gutentags的本质仍然是使用ctags生成tag标签来实现函数跳转等功能,只是在ctags的基础上进行了封装和简化(具体封装方式在后文有简单分析),由于vim-gutentags依赖ctags工具,因此在使用vim-gutentags插件的系统中必须安装ctags软件,否则会报错"Excutable ‘ctags’ can’t be found."。
安装方法,.vimrc中添加以下内容:

Plug 'ludovicchabant/vim-gutentags'// 添加完后启动vim,运行 :PlugInstall

4.2.2 gutentags 配置

" gutentags 搜索工程目录的标志,碰到这些文件/目录名就停止向上一级目录递归
let g:gutentags_project_root = ['.root', '.svn', '.git', '.hg', '.project']

" 所生成的数据文件的名称
let g:gutentags_ctags_tagfile = '.tags'

" 将自动生成的 tags 文件全部放入 ~/.cache/tags 目录中,避免污染工程目录
let s:vim_tags = expand('~/.cache/tags')
let g:gutentags_cache_dir = s:vim_tags

" 配置 ctags 的参数
let g:gutentags_ctags_extra_args = ['--fields=+niazS', '--extra=+q']
let g:gutentags_ctags_extra_args += ['--c++-kinds=+px']
let g:gutentags_ctags_extra_args += ['--c-kinds=+px']

" 检测 ~/.cache/tags 不存在就新建
if !isdirectory(s:vim_tags)
   silent! call mkdir(s:vim_tags, 'p')
endif

有了上面的设置,你平时基本感觉不到 tags 文件的生成过程了,只要文件修改过,gutentags 都在后台为你默默打点是否需要更新数据文件,你根本不用管,还会帮你:setlocal tags+=… 添加到局部 tags 搜索列表中。

4.3 ALE 代码动态检查安装配置

4.3.1 ALE 安装

安装方法,.vimrc中添加以下内容:

Plug 'dense-analysis/ale'

4.3.2 ALE 配置

let g:ale_linters_explicit = 1
let g:ale_completion_delay = 500
let g:ale_echo_delay = 20
let g:ale_lint_delay = 500
let g:ale_echo_msg_format = '[%linter%] %code: %%s'
let g:ale_lint_on_text_changed = 'normal'
let g:ale_lint_on_insert_leave = 1
let g:airline#extensions#ale#enabled = 1

let g:ale_c_gcc_options = '-Wall -O2 -std=c99'
let g:ale_cpp_gcc_options = '-Wall -O2 -std=c++14'
let g:ale_c_cppcheck_options = ''
let g:ale_cpp_cppcheck_options = ''

4.4 文本对象安装配置

4.4.1 文本对象安装

安装方法,.vimrc中添加以下内容:

Plug 'kana/vim-textobj-user'
Plug 'kana/vim-textobj-indent'
Plug 'kana/vim-textobj-syntax'
Plug 'kana/vim-textobj-function', { 'for':['c', 'cpp', 'vim', 'java'] }
Plug 'sgur/vim-textobj-parameter'

4.4.2 文本对象使用

diw 删除光标所在单词,ciw 改写单词,vip 选中段落等,ci"/ci( 改写引号/括号中的内容。
它新定义的文本对象主要有:
i, 和 a, :参数对象,写代码一半在修改,现在可以用 di, 或 ci, 一次性删除/改写当前参数
ii 和 ai :缩进对象,同一个缩进层次的代码,可以用 vii 选中,dii / cii 删除或改写
if 和 af :函数对象,可以用 vif / dif / cif 来选中/删除/改写函数的内容

4.5 代码补全YouCompleteMe安装配置

4.5.1 YouCompleteMe 安装

安装方法,.vimrc中添加以下内容:

Plug 'ycm-core/YouCompleteMe'

但是在实际安装过程中,YCM会要求vim版本为8.1.2269+,且requires Vim compiled with Python (3.6.0+) support.因此需要可能会需要安装vim8.1,安装过程如下:

git clone -b v8.1.2424 https://github.com/vim/vim.git  //下载v8.1.2424版本
cd vim  //进入所下载的vim目录
./configure --enable-pythoninterp=yes --enable-cscope --enable-fontset --with-python3-config-dir=/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu --enable-python3interp=yes --with-python3-command=python3.6 --with-features=huge --enable-gui=gtk2 --enable-cscope --prefix=/usr

sudo make VIMRUNTIMEDIR=/usr/share/vim/vim81

sudo make install

终端输入vim  //可发现已经是v8.1.2424 版本

4.5.2 YouCompleteMe 配置

let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
let g:ycm_server_log_level = 'info'
let g:ycm_min_num_identifier_candidate_chars = 2
let g:ycm_collect_identifiers_from_comments_and_strings = 1
let g:ycm_complete_in_strings=1
let g:ycm_key_invoke_completion = '<c-z>'
set completeopt=menu,menuone

noremap <c-z> <NOP>

let g:ycm_semantic_triggers =  {
           \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
           \ 'cs,lua,javascript': ['re!\w{2}'],
           \ }

4.6 函数列表/文件切换LeaderF安装配置

4.6.1 LeaderF 安装

安装方法,.vimrc中添加以下内容:

Plug 'Yggdroot/LeaderF', { 'do': ':LeaderfInstallCExtension' }

4.6.2 LeaderF 配置

let g:Lf_ShortcutF = '<c-p>'
let g:Lf_ShortcutB = '<m-n>'
noremap <c-n> :LeaderfMru<cr>
noremap <m-p> :LeaderfFunction!<cr>
noremap <m-n> :LeaderfBuffer<cr>
noremap <m-m> :LeaderfTag<cr>
let g:Lf_StlSeparator = { 'left': '', 'right': '', 'font': '' }

let g:Lf_RootMarkers = ['.project', '.root', '.svn', '.git']
let g:Lf_WorkingDirectoryMode = 'Ac'
let g:Lf_WindowHeight = 0.30
let g:Lf_CacheDirectory = expand('~/.vim/cache')
let g:Lf_ShowRelativePath = 0
let g:Lf_HideHelp = 1
let g:Lf_StlColorscheme = 'powerline'
let g:Lf_PreviewResult = {'Function':0, 'BufTag':0}

4.7 项目管理工具Project安装配置

4.7.1 Project 安装

1、在 Vim 网站上下载最新版本 project.tar.gz 本文安装的为project-1.4.1.tar.gz
2、解压project.tar.gz

tar -zxvf project-1.4.1.tar.gz

将解压得到的 plugin/project.vim 是插件 ,doc/project.txt 是帮助文件,将两个文件分别移动到~/.vim/plugin 和~/.vim/doc目录中。

4.7.2 Project 配置

在~/.vimrc文件中添加以下内容:

let g:proj_flags="imsStg"

其中:  
i 设置后,当选择打开一个文件时会在命令行显示文件名和当前工作路径。
  m 在常规模式下开启 |CTRL-W_o| 和 |CTRL-W_CTRL_O| 映射,使得当前缓冲区成为唯一可见的缓冲区,但是项目窗口仍然可见。
  s 设置后将在项目窗口中使用语法高亮。
  S 设置后将在更新和创建项目时启用排序。
  g 设置后会将切换打开和关闭项目窗口映射到 上。
  t 设置后将在按空格 或鼠标右击 时候进行原窗口和加宽窗口之间的切换。
  其它标志详见 project.txt 。

4.7.3 Project 使用

1、首次使用:

首次使用的含义并不是第一次使用 vim 的 project 插件,而是某个项目代码首次被 vim 管理的意思。因为要使用 vim 管理项目代码,先得初始化该项目。

比如现在我有个项目是 /home/www/thinkphp:

a、 直接在命令行输入

vim

b、命令模式下输入

:Project

我们可以看到这样界面:
在这里插入图片描述
现在项目列表为空(左边列),下一步就是初始化我们的项目。

c、直接输入 \C (反斜杠 + 大写C,PS:这是个快捷键,看不到)

会依次出现以下信息:

Enter the Name of the Entry: ProjectName (项目名称)
Enter the Absolute Directory to Load: ProjectPath (项目路径目录)
Enter the CD parameter: . (CD 指打开该项目(包括项目下的文件)后, vim 将进入的路径,“.” 指的是当前项目路径)
Enter the File Filter: (筛选符合条件的源文件,一般为空,表示显示全部文件。你也可以直接填入 .csv .php .js .sh .sql .conf .xslt .xml .avatar .tpl .dev .prd crontab.* .cfg. .html .htm .intftest .vim .plx .txt)

看看我们的配置:

Enter the Name of the Entry: myThinkphp
Enter the Absolute Directory to Load: /home/www/thinkphp
Enter the CD parameter: /home/www/thinkphp
Enter the File Filter:

回车之后 vim 就开始加载项目文件,完成之后再看看界面:

这里写图片描述

可以发现,/home/www/thinkphp 项目已经被加载进来了。

其实 a、b 两步我们可以直接使用 vim +Project 一步到位的。

退出我们可以直接使用 :wq 退出即可(后面会说到为什么要使用 :wq)

2、再次使用:

直接运行vim +Project

这里写图片描述
现在左边列表中已经有了刚才我们创建的目录了。将光标移动到上面,回车即可展开项目。

3、列表显示格式:

<Description>={projpath} [{options}] {
 [ filename ]
 [ project_entry ]
 }

描述

{options}配置参数项
CD={path}
in={filename}
out={filename}
filter="{pat}"
flags={flag}

CD:表示项目在选中一个文件时 Vim 将要进入的目录。
in:进入文件缓冲时执行指定的 Vim 脚本。
out:退出文件缓冲时执行指定的 Vim 脚本。
filter:过滤符,过滤剩下指定类型的文件。如果子项目中没有指定过滤符,将承继夫项目的过滤符。
flags:标志位,为某个折叠指定某些特性。详见 project.txt 。

注意,项目之间支持层叠关系。项目下的各个目录,其实都是一个子项目。

4、打开列表文件:

:Project 默认列表文件
:Project {file}
列表文件默认存储地址:~/.vimprojects

我们查看一下 ~/.vimproject 文件:
在这里插入图片描述

如图所示,其实所有的项目列表都是保存在该文件中的。

左边的项目列表是保存在列表文件中的,如果你修改了某个项目列表,必须使用 :wq 退出 vim ,否则修改就不会生效。

5、常用命令:

启动 project 插件后,相对应的就会支持一些命令。在常规模式下输入(注意区分大小写):

\r 根据项目过滤符更新折叠处的文件(刷新列表)。
  \R 递归执行 \r 。
  \c 创建一个项目。但不包括指定目录下的子目录。
  \C 递归执行 \c,包括指定目录下的所有子目录。
   打开文件;打开或关闭折叠。
   Shift+Return
  \s 同 打开文件,打开文件时水平分割窗口。
  \S 加载所有文件到当前窗口,当前窗口会被水平分割显示所有文件。
   Ctrl+Return
  \o 打开指定文件到一个窗口中,并且关闭所有其它窗口,
   Alt+Return
  \v 仅仅打开文件,光标仍然保留在项目列表中。
  
  \ 移动文本或者折叠到当前光标的上一行(移出或移入目录)。
  
  \ 移动文本或者折叠到当前光标的下一行。
  \i 在状态栏中显示光标所在折叠的完整参数以及继承参数。
  \I 在状态栏中显示文件的完整路径。
  \l 加载当前项目层的所有文件到到当前 vim 中。在加载的过程中,任何按键都导致停止。
  \L 加载当前项目以及子项目中的文件到当前 vim 中。谨慎使用。
  \g 在当前项目层执行 grep 。
  \G 在当前项目层及子项目执行 grep 。
   当在变量 g:proj_flags 中使用了标志位 ‘g’ 时, 该键用来切换打开和关闭项目窗口.
  Ctrl+w+方向 切换光标(直接使用 Ctrl+w+w也行)

其它操作参见 project.txt 。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zack_Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值