文章目录
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 。