目的是在两个用户配置不同的vim , 一个用户 只有linux C 的补全,另一个用户有 C/C++ 的补全
vim 安装 powerVim,支持 C++ Java go html php json Markdown 补全(推荐)
步骤很简单
git clone https://github.com/youngyangyang04/PowerVim.git
cd PowerVim
sh install.sh
注意 如果出现
yyy@DESKTOP-BHU9S8H:~/PowerVim$ sh install.sh
install.sh: 8: Syntax error: "(" unexpected
那就把那行 删掉 ,只是显示日期的作用
正常模式下的快捷键(非插入模式)
;n
;m
;h
;l
;k
;j
;w
;u
;d
;1
;2
;a
;e
;z
;s
;v
;fw
;ff
;gt
;gr
;tg
;y
;gg
e
tabc
F1
F1
F2
gc
gcc
{
}
di(
di{
缺点
不支持 C
vim 安装 C/C++ 自动补全(不太推荐)
首先进入官网下载一个插件和一个专门为ctags修改过的头文件。
OmniComplete下载地址 https://www.vim.org/scripts/script.php?script_id=1520
C++ 标准库索引文件下载地址 https://www.vim.org/scripts/script.php?script_id=2358
或者在window下将两个tar包通过vw tools工具直接复制到虚拟机下(或者是xftp, 或者搭建其他服务器传输,通过阿里云,百度云)
下载后进行解压命令 tar -jxvf tar包文件名
first
(1)此时在当前解压出两个目录,一个cpp_src,一个omnicppcomplete-0.41,然后进入 cpp_src 执行
ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f 【生成的tags文件名】
若不写-f执行,则默认生成tags。
此时能在cpp_src目录下找到一个tags文件。这里tags的绝对路径因人而已。可以用pwd命令查看。
second
(2)然后是安装omnicppcomplete-0.41插件,首先进入当前用户目录 cd ~ 然后执行 ls -la查看用户目录下是否有.vim目录 和 .vimrc文件。若没有则创建.vim目录 终端命令为mkdir .vim, 此时解压后的omnicppcomplete-0.41下有三个目录,分别是after、 Autoloadh和common,将这三个目录复制到用户目录下的.vim目录,该插件就算安装完了。
third
(3)然后是写vim的配置,若用户目录下没有.vimrc文件,则手动创建一个: touch .vimrc 然后通过vim ~/.vimrc打开编辑,复制我的配置信息(打开.vimrc配置.txt复制即可),这里需要修改的为
set tags+=/home/firecar/vim简单配置/cpp_src/head 将其路径改为(1)生成的索引文件。
然后基本完成了,然后可以体验试试。
.vimrc
set nu
imap jk <Esc>
nmap <space> :
set relativenumber
"允许插件
filetype plugin on
" 设置行号
set number
" 语法高亮。自动识别代码,使用多种颜色表示
syntax enable
" 支持使用鼠标
set mouse=a
" 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致
set autoindent
" 按下Tab键后,vim显示的空格数
set tabstop=4
" normal模式下,>>增加一级缩进、<<取消一级缩进、==取消全部缩进时,每一级缩进的空格数
set shiftwidth=4
" 自动将Tab转为空格(防止Tab键在不同编辑器缩进不一致导致问题)
set expandtab
" Tab转为多少个空格
set softtabstop=4
"设置文件的代码形式 utf8
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936
"新建.c,.h,.cpp文件,自动插入文件头
autocmd BufNewFile *.h,*.c,*.cpp exec ":call SetTitle()"
""定义函数SetTitle,自动插入文件头
func SetTitle()
if expand("%:e")== 'c'
call setline(1,"#include<stdio.h>")
call append(line("."), "#include<stdlib.h>")
call append(line(".")+1, "#include<unistd.h>")
call append(line(".")+2, "#include<fcntl.h>")
call append(line(".")+3, "#include<string.h>")
call append(line(".")+4, "")
endif
if expand("%:e")== 'cpp'
call setline(1,"#include<iostream>")
call append(line("."), "using namespace std;")
call append(line(".")+1, "")
endif
if expand("%:e")== 'h'
call setline(1,"#ifndef __".expand("%:r")."_H__")
call append(line("."),"#define __".expand("%:r")."_H__")
call append(line(".")+1, "")
call append(line(".")+2, "")
call append(line(".")+3, "")
call append(line(".")+4, "")
call append(line(".")+5, "")
call append(line(".")+6, "")
call append(line(".")+7, "#endif")
endif
"新建文件后,自动定位到文件末尾
"autocmd BufNewFile * normal G
endfunc
"补全括号和花括号(换行四次)
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
filetype plugin indent on
"使用tab自动补全的设定
function! CleverTab()
if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
return "\<Tab>"
else
return "\<C-N>"
endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>
"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
exec "w"
if &filetype == 'c'
exec "!g++ % -o %<"
exec "! %<"
elseif &filetype == 'cpp'
exec "!g++ % -o %<"
exec "! %<"
elseif &filetype == 'java'
exec "!javac %"
exec "!java %<"
elseif &filetype == 'sh'
:!./%
elseif &filetype == 'py'
exec "!python %"
exec "!python %<"
endif
endfunc
"C,C++的调试
map <F8> :call Rungdb()<CR>
func! Rungdb()
exec "w"
exec "!g++ % -g -o %<"
"exec "!gdb ./%<"
endfunc
set tags+=/home/xxx/cpp_src/head " c++代码的ctags 找到头文件执行相应的命令
"set tags+=/usr/include/ccctag c代码的ctags
" OmniCppComplete
let OmniCpp_DisplayMode=1 "显示类成员
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest
set autowriteall
set updatetime=500
"按下F12自动更新tags
map <F10> :call Rungdbe()<CR>
func! Rungdbe()
exec "w"
exec "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q"
endfunc
缺点
缺点 :: 补全功能太烂了
为另一个用户安装 LINUX C 的自动补全
adduser zzz
第一步,下载配置文件
- 创建~/.vim隐藏文件夹,这是vim的插件的配置路径
- 进入~/.vim
- 将配置好的仓库从github上下载下来,
- 将已经写好的配置文件.vimrc,拷贝到$HOME目录,Vim会自动读取
mkdir ~/.vim
cd ~/.vim
git clone https://github.com/ckelsel/vim-init.git
cp ~/.vim/vim-init/.vimrc ~
第二步,一键安装插件
启动Vim,执行命令,让vim-plug安装插件。 vim-plug已经集成在https://github.com/ckelsel/vim-init.git,不需要单独安装。
:PlugInstall
第三步,手动安装YouCompleteMe
YouCompleteMe是C/C++代码补全的插件,需要下载的东西比较多,自动安装过程中可能出错,因此使用手动安装的方法。
1 安装cmake 2 进入插件目录 3 下载YouCompleteMe仓库 4 进入YouCompleteMe目录,准备编译代码 5 编译安装YouCompleteMe
sudo apt-get install cmake
cd ~/.vim/bundles
git clone https://gitee.com/zhuixixi/YouCompleteMe.git --depth=1
cd ~/.vim/bundles/YouCompleteMe
python3 install.py --clang-completer
第四步,安装插件所需要的第三方工具
- 安装clang-format,格式化代码的工具
- 安装ctags,生成tag文件
- 安装silversearcher-ag,搜索工具
- 创建clang-format的软链接,否则执行:ClangFormat的时候,提示找不到clang-format
sudo apt-get install cmake
cd ~/.vim/bundles
git clone https://gitee.com/zhuixixi/YouCompleteMe.git --depth=1
cd ~/.vim/bundles/YouCompleteMe
python3 install.py --clang-completer
我的 .vimrc 加了一些
imap jk <Esc>
set runtimepath+=~/.vim/bundles/YouCompleteMe
nmap <space> :
ca11 plug#begin('~/.vim/plugged")
Plug 'scrooloose/nerdtree'
Plug 'chiel92/vim-autoformat'
call plug#end()
""-----------------------------------------------NERDTree插件配置开始----------------------------------------------------------
" NerdTree才插件的配置信息
""将F2设置为开关NERDTree的快捷键
map <f2> :NERDTreeToggle<cr>
""修改树的显示图标
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
""窗口位置
let g:NERDTreeWinPos='left'
""窗口尺寸
let g:NERDTreeSize=30
""窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
""不显示隐藏文件
let g:NERDTreeHidden=0
""------------------------------------------------nerdtree插件配置结束---------------------------------------------------------
"F3自动格式化代码
noremap <F3> :Autoformat<CR>
let g:autoformat_verbosemode=1
|