PS:文章最后是安裝好之后的圖
前言:首先需要有 vim python2或3 git
下載:sudo apt-get install xxx
一.安裝插件管理器vim-plug(親測比vundle好用-個人觀點) 1.檢查當前用戶下是否有vim文件夾:~/.vim 沒有,自己創(chuàng)建: mkdir ~/.vim 2.創(chuàng)建相應的文件夾(在~/.vim下創(chuàng)建): mkdir autoload mkdir plugged //存放plug下載的.vim插件 mkdir plugin //通用文件夾,存放自己網(wǎng)上下載的插件 mkdir syntax //存放有關文本(比如c語言)語法相關的插件 mkdir doc //存放說明文檔
3.安裝vim-plug(即plug.vim) 打開終端:
cd autoload //進入autoload文件夾
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw./junegunn/vim-plug/master/plug.vim
此處說明:沒有安裝過curl的先下載安裝curl,再執(zhí)行上述命令 sudo apt-get install curl
4.安裝好plug后,即可使用它安裝管理其他插件。 方法: 打開.vimrc配置文件: sudo vim ~/.vimrc 添加配置內(nèi)容:
call plug#begin('~/.vim/plugged') //必須有
"要安裝/管理的插件 "建議插件下載完成后再添加配置內(nèi)容 "當執(zhí)行PlugIstall命令會執(zhí)行當此處,去官網(wǎng)下載對應的插件,如: "Plug 'itchyny/lightline.vim'
call plug#end() //必須有
二.安裝相關插件(建議先安裝后配置) 1.安裝YouCompleteMe語法補全插件(難裝的一pi...這個插件沒有使用plug安裝) 1.1 先下載依賴: sudo apt-get install build-essential sudo apt-get install cmake sudo apt-get install python3-dev
1.2 下載安裝YouCompleteMe(步驟) cd ~/.vim mkdir bundle cd bundle git clone https://github.com/Valloric/YouCompleteMe.git cd YouCompleteMe //下載完成后才進入YCM的文件夾
安裝語言特性,相關語言特性自己百度 ./install.py --all //此為安裝所有語言特性 補充說明:執(zhí)行上述命令后可能會出現(xiàn)一條 git submodule update --init --recursive 這是依賴的子目錄,復制下來執(zhí)行即可 執(zhí)行完成后重新執(zhí)行./install.py --all安裝語言特性
2. 安裝其他插件 2.1 //打開~/.vimrc文件 sudo vim ~/.vimrc 2.2 //寫入以下內(nèi)容(安裝插件) "====================================================== set nocompatible filetype on
call plug#begin('~/.vim/plugged')
" 撤銷 Plug 'mbbill/undotree'
" C++語法高亮 Plug 'octol/vim-cpp-enhanced-highlight'
" 搜索引擎 Plug 'mileszs/ack.vim'
" 界面 Plug 'mhinz/vim-startify'
" 代碼檢測 Plug 'w0rp/ale'
"nerdtree 目錄樹 Plug 'scrooloose/nerdtree'
"優(yōu)化vim界面" Plug 'vim-airline/vim-airline'
" vim-scripts 的插件 Plug 'majutsushi/tagbar'
Plug 'Yggdroot/indentLine'
Plug 'Raimondi/delimitMate'
" 注釋加空格 Plug 'scrooloose/nerdcommenter'
call plug#end()
"====================================================== 2.3 wq保存退出后,命令行執(zhí)行vim 進入vim, 鍵入: PlugInstall 進行下載 出現(xiàn)Done!即插件下載完成 注意:若出現(xiàn)“不是編輯器的命令: PlugIstall” 關閉終端再重新打開進入vim重新執(zhí)行下載
3. 下載搜索引擎 curl -LO https://github.com/BurntSushi/ripgrep/releases/download/0.10.0/ripgrep_0.10.0_amd64.deb sudo dpkg -i ripgrep_0.10.0_amd64.deb
4. 都下載完成后進行配置(~/.vimrc中配置) 4.1 sudo vim ~/.vimrc 根據(jù)需要自行配置,以下是我的配置 "========================================================
set nocompatible filetype on
call plug#begin('~/.vim/plugged')
" YouCompleteMe set runtimepath+=~/.vim/bundle/YouCompleteMe autocmd InsertLeave * if pumvisible() == 0|pclose|endif "離開插入模式后自動關閉預覽窗口" let g:ycm_collect_identifiers_from_tags_files = 1 " 開啟 YCM基于標簽引擎 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注釋與字符串中的內(nèi)容也用于補全 let g:syntastic_ignore_files=[".*\.py$"] let g:ycm_seed_identifiers_with_syntax = 1 " 語法關鍵字補全 let g:ycm_complete_in_comments = 1 let g:ycm_confirm_extra_conf = 0 " 關閉加載.ycm_extra_conf.py提示 let g:ycm_key_list_select_completion = ['<c-n>', '<Down>'] " 映射按鍵,沒有這個會攔截掉tab, 導致其他插件的tab不能用. let g:ycm_key_list_previous_completion = ['<c-p>', '<Up>'] let g:ycm_complete_in_comments = 1 " 在注釋輸入中也能補全 let g:ycm_complete_in_strings = 1 " 在字符串輸入中也能補全 let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注釋和字符串中的文字也會被收入補全 let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' let g:ycm_show_diagnostics_ui = 0 " 禁用語法檢查 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" " 回車即選中當前項 nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR> " 跳轉(zhuǎn)到定義處 let g:ycm_min_num_of_chars_for_completion=2 " 從第2個鍵入字符就開始羅列匹配項
" 撤銷 Plug 'mbbill/undotree' nnoremap <F6> :UndotreeToggle<cr> set undodir=~/.undodir/ set undofile
" C++語法高亮 Plug 'octol/vim-cpp-enhanced-highlight' "高亮類,成員函數(shù),標準庫和模板 let g:cpp_class_scope_highlight = 1 let g:cpp_member_variable_highlight = 1 let g:cpp_concepts_highlight = 1 let g:cpp_experimental_simple_template_highlight = 1
" 搜索引擎 Plug 'mileszs/ack.vim' "<F4>進行搜索,同時不自動打開第一個匹配的文件" map <F4> :Ack!<Space> "調(diào)用rg進行搜索 if executable('rg') let g:ackprg = 'rg --vimgrep' endif "高亮搜索關鍵詞 let g:ackhighlight = 1 "修改快速預覽窗口高度為15 let g:ack_qhandler = "botright copen 15" "在QuickFix窗口使用快捷鍵以后,自動關閉QuickFix窗口 let g:ack_autoclose = 1 "使用ack的空白搜索,即不添加任何參數(shù)時對光標下的單詞進行搜索,默認值為1,表示開啟,置0以后使用空白搜索將返回錯誤信息 let g:ack_use_cword_for_empty_search = 1
" 界面 Plug 'mhinz/vim-startify' "設置書簽 let g:startify_bookmarks = [ \ '~/Project/test.cpp', \] "起始頁顯示的列表長度 let g:startify_files_number = 20 "自動加載session let g:startify_session_autoload = 1 "過濾列表,支持正則表達式 let g:startify_skiplist = [ \ '^/tmp', \ ]
" 代碼檢測 Plug 'w0rp/ale' "始終開啟標志列 let g:ale_sign_column_always = 1 let g:ale_set_highlights = 0 "自定義error和warning圖標 let g:ale_sign_error = '?' let g:ale_sign_warning = '?' "在vim自帶的狀態(tài)欄中整合ale let g:ale_statusline_format = ['? %d', '? %d', '? OK'] "顯示Linter名稱,出錯或警告等相關信息 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' "普通模式下,sp前往上一個錯誤或警告,sn前往下一個錯誤或警告 nmap sp <Plug>(ale_previous_wrap) nmap sn <Plug>(ale_next_wrap) "<Leader>s觸發(fā)/關閉語法檢查 nmap <Leader>s :ALEToggle<CR> "<Leader>d查看錯誤或警告的詳細信息 nmap <Leader>d :ALEDetail<CR> "文件內(nèi)容發(fā)生變化時不進行檢查 let g:ale_lint_on_text_changed = 'never' "打開文件時不進行檢查 let g:ale_lint_on_enter = 0 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}
"nerdtree目錄樹 F2打開 Plug 'scrooloose/nerdtree' map <F2> :NERDTreeToggle<CR> let NERDTreeShowLineNumbers=1 let NERDTreeAutoCenter=1 let NERDTreeShowHidden=1 let NERDTreeWinSize=30 let g:nerdtree_tabs_open_on_console_startup=1 let NERDTreeIgnore=['\.pyc','\~$','\.swp'] let NERDTreeShowBookmarks=1 autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif
"優(yōu)化vim界面" Plug 'vim-airline/vim-airline' " 顯示顏色 set t_Co=256 set laststatus=2 " 使用powerline打過補丁的字體 let g:airline_powerline_fonts = 1 "m,d,y,H,M分別表示月,日,年,時,分,也就是相應英文的首字母 let g:airline_section_b = '%{strftime("%m/%d/%y - %H:%M")}' " 開啟tabline let g:airline#extensions#tabline#enabled = 1 " tabline中當前buffer兩端的分隔字符 let g:airline#extensions#tabline#left_sep = ' ' " tabline中未激活buffer兩端的分隔字符 let g:airline#extensions#tabline#left_alt_sep = ' ' " tabline中buffer顯示編號 let g:airline#extensions#tabline#buffer_nr_show = 1 let g:airline#extensions#tabline#fnamemod = ':t' " 映射切換buffer的鍵位 nnoremap [b :bp<CR> nnoremap ]b :bn<CR> " 映射<leader>num到num buffer let g:mapleader = "," map <leader>1 :b 1<CR> map <leader>2 :b 2<CR> map <leader>3 :b 3<CR> map <leader>4 :b 4<CR> map <leader>5 :b 5<CR> map <leader>6 :b 6<CR> map <leader>7 :b 7<CR> map <leader>8 :b 8<CR> map <leader>9 :b 9<CR>
" vim-scripts 的插件 Plug 'majutsushi/tagbar' "ctags 配置:F3快捷鍵顯示程序中的各種tags,包括變量和函數(shù)等。 map <F3> :TagbarToggle<CR> let g:tagbar_ctags_bin='/usr/bin/ctags' let g:tagbar_width=26 nnoremap <Leader>y :TagbarToggle<CR> let g:tagbar_autofocus=1
Plug 'Yggdroot/indentLine'
Plug 'Raimondi/delimitMate'
" 注釋加空格 Plug 'scrooloose/nerdcommenter' let g:NERDSpaceDelims=1 "進入visual模式,選中多行 "<leader>cc/cu 加/解
call plug#end()
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "新建.c,.h,.sh,.java文件,自動插入文件頭 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" autocmd BufNewFile *.cpp,*.[ch],*.sh":call SetTitle()" ""定義函數(shù)SetTitle,自動插入文件頭 func SetTitle() "如果文件類型為.sh文件 if &filetype == 'sh' call setline(1, "##########################################################################") call append(line("."), "# File Name: ".expand("%")) call append(line(".")+1, "# Author: Neko ") call append(line(".")+2, "# mail: Neko_cmy@163.com") call append(line(".")+3, "# Created Time: ".strftime("%c")) call append(line(".")+4, "#########################################################################") call append(line(".")+5, "#!/bin/zsh") call append(line(".")+6, "PATH=/home/edison/bin:/home/edison/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/work/tools/gcc-3.4.5-glibc-2.3.6/bin") call append(line(".")+7, "export PATH") call append(line(".")+8, "") else call setline(1, "/*************************************************************************") call append(line("."), " > File Name: ".expand("%")) call append(line(".")+1, " > Author: Neko ") call append(line(".")+2, " > Mail: Neko_cmy@163.com ") call append(line(".")+3, " > Created Time: ".strftime("%c")) call append(line(".")+4, " ************************************************************************/") call append(line(".")+5, "") endif if &filetype == 'cpp' call append(line(".")+6, "#include <iostream>") call append(line(".")+7, "#include <cstdio>") call append(line(".")+8, "#include <cstdlib>") call append(line(".")+9, "#include <cstring>") call append(line(".")+10, "#include <algorithm>") call append(line(".")+11, "#include <vector>") call append(line(".")+12, "#include <stack>") call append(line(".")+13, "#include <queue>") call append(line(".")+14, "#include <list>") call append(line(".")+15, "#include <map>") call append(line(".")+16, "#include <cmath>") call append(line(".")+17, "#include <string.h>") call append(line(".")+18, "#include <bitset>") call append(line(".")+19, "#include <fstream>") call append(line(".")+20, "#include <set>") call append(line(".")+21, "#include <climits>") call append(line(".")+22, "") call append(line(".")+23, "using namespace std;") call append(line(".")+24, "typedef long long ll;") call append(line(".")+25, "typedef unsigned int uint;") call append(line(".")+26, "typedef long double lb;") call append(line(".")+27, "const double PI = acos(-1.0);") call append(line(".")+28, "const double eps = 1e-6;") call append(line(".")+29, "const int INF = 0x3f3f3f3f;") call append(line(".")+30, "const int maxn = 100;") call append(line(".")+31, "") call append(line(".")+32, "int main()") call append(line(".")+33, "{") call append(line(".")+34, " ") call append(line(".")+35, " ") call append(line(".")+36, " return 0;") call append(line(".")+37, "}") endif if &filetype == 'c' call append(line(".")+6, "#include <stdio.h>") call append(line(".")+7, "#include <stdlib.h>") call append(line(".")+8, "#include <string.h>") call append(line(".")+9, "") endif "新建文件后,自動定位到文件末尾 autocmd BufNewFile * normal G endfunc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "鍵盤命令 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" nmap <leader>w :w!<cr> nmap <leader>f :find<cr>
" 映射全選+復制 ctrl+a map <C-A> ggVGY map! <C-A> <Esc>ggVGY map <F12> gg=G " 選中狀態(tài)下 Ctrl+c 復制 vmap <C-c> "+y
"C,C++編譯運行 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' :!./% endif endfunc
"C,C++的調(diào)試 map <F8> :call Rungdb()<CR> func! Rungdb() exec "w" exec "!g++ % -g -o %<" exec "!gdb ./%<" endfunc
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ""其他設置 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 設置當文件被改動時自動載入 set autoread " quickfix模式 autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr> "代碼補全 set completeopt=preview,menu "允許插件 filetype plugin on "共享剪貼板 set clipboard=unnamed
"從不備份 set nobackup "make 運行 :set makeprg=g++\ -Wall\ \ % "自動保存 set autowrite set ruler " 打開狀態(tài)欄標尺 set cursorline " 突出顯示當前行 set magic " 設置魔術 set guioptions-=T " 隱藏工具欄 set guioptions-=m " 隱藏菜單欄
" 設置在狀態(tài)行顯示的信息 set foldcolumn=0 set foldmethod=indent set foldlevel=3 set foldenable " 開始折疊 " 不要使用vi的鍵盤模式,而是vim自己的 set nocompatible " 語法高亮 set syntax=on " 去掉輸入錯誤的提示聲音 set noeb " 在處理未保存或只讀文件的時候,彈出確認 set confirm " 自動縮進 set autoindent set cindent " Tab鍵的寬度 set tabstop=4 " 統(tǒng)一縮進為4 set softtabstop=4 set shiftwidth=4 " 不要用空格代替制表符 set noexpandtab " 在行和段開始處使用制表符 set smarttab " 顯示行號 set number " 歷史記錄數(shù) set history=1000 "禁止生成臨時文件 set nobackup set noswapfile "搜索忽略大小寫 set ignorecase "搜索逐字符高亮 set hlsearch set incsearch "行內(nèi)替換 set gdefault "編碼設置 set enc=utf-8 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 "語言設置 set langmenu=zh_CN.UTF-8 set helplang=cn " 狀態(tài)行顯示的內(nèi)容(包括文件類型和解碼) set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] " 總是顯示狀態(tài)行 set laststatus=2 " 命令行(在狀態(tài)行下)的高度,默認為1,這里是2 set cmdheight=2 " 偵測文件類型 filetype on " 載入文件類型插件 filetype plugin on " 為特定文件類型載入相關縮進文件 filetype indent on " 保存全局變量 set viminfo+=! " 帶有如下符號的單詞不要被換行分割 set iskeyword+=_,$,@,%,#,- " 字符間插入的像素行數(shù)目 set linespace=0 " 增強模式中的命令行自動完成操作 set wildmenu " 使回格鍵(backspace)正常處理indent, eol, start等 set backspace=2 " 允許backspace和光標鍵跨越行邊界 set whichwrap+=<,>,h,l " 可以在buffer的任何地方使用鼠標(類似office中在工作區(qū)雙擊鼠標定位) set mouse=a set selection=exclusive set selectmode=mouse,key " 通過使用: commands命令,告訴我們文件的哪一行被改變過 set report=0 " 在被分割的窗口間顯示空白,便于閱讀 set fillchars=vert:\ ,stl:\ ,stlnc:\ " 高亮顯示匹配的括號 set showmatch " 匹配括號高亮的時間(單位是十分之一秒) set matchtime=1 " 光標移動到buffer的頂部和底部時保持3行距離 set scrolloff=3 " 為C程序提供自動縮進 set smartindent " 高亮顯示普通txt文件(需要txt.vim腳本) au BufRead,BufNewFile * setfiletype txt "自動補全 :inoremap ( ()<ESC>i :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 "打開文件類型檢測, 加了這句才可以用智能補全 set completeopt=longest,menu """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" "========================================================================
以上是我搜羅了網(wǎng)上各種配置方法并實踐的結果, vim插件還有很多種,可自行查找安裝、配置
-------------------------------------------------------------------------------------------------------------
補上使用小tips:
鼠標可隨意選中目標位置 打開/關閉左側目錄樹:F2 打開搜索欄:F4 輸入關鍵字 enter回車即搜索 關閉某欄目框:鼠標點擊想要關閉的欄框 按下esc 鍵入 : q 即可退出 撤銷:F6
-----------------------------------------------------------------------------------------------------------------------



|