文章目录
目的是在两个用户配置不同的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 // 快速切换.h和cpp文件,写C++的时候很方便
;e // 打开一个新文件
;z // 切回shell交互命令,输入fg在切回vim,非常实用
;s // 水平分屏,并打开文件目录选取想打开的文件,如果想新建文件 ,;e 就好
;v // 竖直分屏,并打开文件目录选取想打开的文件,如果想新建文件 ,;e 就好
;fw // 查找项目内关键字,前提是你的系统已经按照了ACK
;ff // 查找项目内文件名
;gt // 跳转到变量或者函数定义的地方,前提是安装ctags,并且在在PowerVim输入 ;tg命令 Jump to the definition of the keyword where the cursor is located, but make sure you have make ctags
;gr // 跳回,对应着;gt
;tg // 对当前目录打ctag
;y // 保存当前选中的目录到系统剪切板,前提是vim支持系统剪切板的寄存器
;gg // 按顺序光标跳转各个窗口
// 一下快捷键是不用;的,直接在 非插入模式 下输入
e // 快速删除光标所在的词
tabc // 关闭当前tab,可以用:tabnew来打开一个新的tab Close tab, of course you should :tabnew a file first.
F1 // 编译并运行C++文件,自己写的C++例子的时候一键编译。前提手 动在当前目录建一个bin文件夹,这是用来存放编译产生的执行文件
F1 // 编译Java文件
F2 // 运行Java编译的class文件,一般如果要编译并运行Java文件 按F1编译,在按F2运行
gc // 快速注释选中的块(是visual模式下选中的块)
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
ArrowExpandable = ‘+’
let g:NERDTreeDirArrowCollapsible = ‘-’
""窗口位置
let g:NERDTreeWinPos=‘left’
""窗口尺寸
let g:NERDTreeSize=30
""窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
""不显示隐藏文件
let g:NERDTreeHidden=0
“”------------------------------------------------nerdtree插件配置结束---------------------------------------------------------
"F3自动格式化代码
noremap :Autoformat
let g:autoformat_verbosemode=1