一、Vim自动补全插件安装
# 安装基本工具
sudo apt-get install git
git init
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install cmake
# 安装vim8.0
sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim
# 安装python依赖
sudo apt-get install python-pil python3-pil
sudo apt-get install python-dev python3-dev
#ctags,其他插件依赖该插件
sudo apt-get install ctags
#vim插件管理apt-vim https://github.com/egalpin/apt-vim.git
curl -sL https://raw.githubusercontent.com/egalpin/apt-vim/master/install.sh | sh
#自动安装的项目,提示是否安装
#pathogen
#tagbar
#安装nerdtree#文件列表
apt-vim install -y https://github.com/scrooloose/nerdtree.git
#安装YouCompleteMe#自动补全工具
apt-vim install -y https://github.com/Valloric/YouCompleteMe.git
# 编译YouCompleteMe
git submodule update --init --recursive
cd /home/dts/.vim/bundle/YouCompleteMe
./install.py --clang-completer --go-completer
# 在YouCompleteMe目录下
cp third_party/ycmd/examples/.ycm_extra_conf.py ~/
二、Vim常用配置
syntax on "语法高亮
set mouse=a " always use mouse
" 括号补全
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap { {}<ESC>i
inoremap < <><ESC>i
imap{ {}<ESC>i<CR><ESC>O "大括号对齐并换行
set laststatus=2
set number "显示行号
"自动缩进与C语言风格缩进
set autoindent
set cindent
"缩进宽度
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
"switch case 对齐风格
set cino=g0,:0
"Tagbar
let g:tagbar_width=35 "宽度
let g:tagbar_ctags_bin='/usr/bin/ctags' "设置tagbar使用的ctags的插件
let g:tagbar_right=1 "位置在右侧
let g:tagbar_autofocus=0 "是否自动聚焦
autocmd BufReadPost *.cpp,*.c,*.h,*.hpp,*.cc,*.cxx call tagbar#autoopen() "打开文件自动打开tagbar
nmap <F6> :TagbarToggle<CR> "快捷键
" NERD tree
let NERDChristmasTree=0
let NERDTreeWinSize=35
let NERDTreeChDirMode=2
let NERDTreeIgnore=['\~$']
let NERDTreeShowBookmarks=1
let NERDTreeWinPos="left"
" Automatically open a NERDTree if no files where specified
autocmd vimenter * if !argc() | NERDTree | endif
" Close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
" Open a NERDTree
nmap <F5> :NERDTreeToggle<cr>
"YouCompleteMe
"自动开启语义补全
let g:ycm_seed_identifiers_with_syntax = 1
"在注释中也开启补全
let g:ycm_complete_in_comments = 1
let g:ycm_collect_identifiers_from_comments_and_strings = 0
"字符串中也开启补全
let g:ycm_complete_in_strings = 1
let g:ycm_collect_identifiers_from_tags_files = 1
"开启基于tag的补全,可以在这之后添加需要的标签路径
let g:ycm_collect_identifiers_from_tags_files = 1
"开始补全的字符数
let g:ycm_min_num_of_chars_for_completion = 2
"补全后自动关闭预览窗口
let g:ycm_autoclose_preview_window_after_completion = 1
"禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_cache_omnifunc=0
"离开插入模式后自动关闭预览窗口
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
"语法关键字补全
let g:ycm_seed_identifiers_with_syntax = 1
"在实现和声明之间跳转,并分屏打开
let g:ycm_goto_buffer_command = 'horizontal-split'
nnoremap <Leader>g :YcmCompleter GoTo<CR>
execute pathogen#infect()
call pathogen#helptags()
三、Vim基本操作
【移动光标】:
h: 左移
j: 下移
k: 上移
l: 右移
M: 光标移动到当前屏幕中间行
L: 光标移动到屏幕最后一行行首
G: 移动到指定行,行号 -G
w: 向后一次移动一个字
b: 向前一次移动一个字
Ctr-d: 向下翻半屏
Ctr-u: 向上翻半屏
Ctr-f: 向下翻一屏
Ctr-b: 向上翻一屏
gg: 光标移动文件开头
G: 光标移动到文件末尾
【复制粘贴】:
yy: 复制当前行,n yy 复制 n 行
p: 在光标所在位置向下新开辟一行,粘贴
【跨文件复制粘贴】:
1、用vim打开一个文件,例如:a.cpp。
2、在普通模式下,输入:":sp"(不含引号)横向切分一个窗口,或者":vsp"纵向
切分一个窗口,敲入命令后,你将看到两个窗口打开的是同一个文件。
3、在普通模式下,输入:":e b.cpp",在其中一个窗口里打开另一个文件。
4、切换到含有源文件(a.cpp)的窗口,在普通模式下,把光标移到你需要复制
内容的起始行,然后输入你想复制的行的数量(从光标所在行往下计算),
在行数后面接着输入yy,这样就将内容复制到临时寄存器里 了
(在 普通模式下ctrl+w,再按一下w,可以在两个窗口之间切换)。
5、切换到目标文件( b.cpp )窗口,把光标移到你接收复制内容的起始行,
按一下p,就完成复制了。
6、退出vim多窗口:q!。
【删除撤销】:
x: 删除光标后一个字符,相当于 Del
X: 删除光标前一个字符,相当于 Backspace
dd: 删除光标所在行,n dd 删除指定的行数
D: 删除光标后本行所有内容,包含光标所在字符
d0: 删除光标前本行所有内容,不包含光标所在字符
dw: 删除光标开始位置的字,包含光标所在字符
m,nd:删除从m行到n行的内容
u: 一步一步撤销
【缩进】:
增加缩进:
m,n>:缩进从m行到n行的内容(一个tab)
减少缩进:
m,n<:缩进从m行到n行的内容(一个tab)
【其他】:
cntl+n :简单文本补全