閱讀923 返回首頁    go 阿裏雲 go 技術社區[雲棲]


工欲善其事必先利其器 —— 配置vim

工欲善其事必先利其器

[toc]

要看項目源代碼必須有一個優秀的代碼編輯器,就我知道支持代碼跳轉的編輯器有source insight, sublime, geany, vim。

  • source insight 不用配置,一般在windows係統用;
  • sublime 有個monokai主題比較漂亮;
  • geany 功能比較簡單,隻支持在已打開文件代碼裏跳轉;
  • 默認的vim 體驗感比較差,配置後就很強大了,下圖;

2017_11_14_12_56_16_
2017_11_14_13_02_24_

vim 的基本操作請自行百度,為師不教這個。下麵是vim配置內容。

配置代碼提示功能

最重要的是安裝vim和python

sudo apt-get update         #更新軟件源
sudo apt-get clang          #安裝clang
sudo apt-get cmake          #安裝cmake
sudo apt-get install vim        #安裝vim
sudo apt-get install python python-dev  #安裝Python相關

接下來正式安裝YCM

sudo apt-get install vim-addon-manager  #這應該是一個vim的插件管理器
sudo apt-get install vim-youcompleteme  #安裝YCM
vim-addons install youcompleteme    #將YCM加入addons管理器中

直接上我的配置,將這個複製到用戶目錄下,命名為 .vimrc 即可。

syntax on
set nocompatible
set tags+=~/.vim/systags
set nu
set autoindent
set shiftwidth=4
set ignorecase
set cindent
set hls is
set hlsearch
set ts=4
set history=100
set syntax=c
highlight Function cterm=bold,underline ctermbg=red ctermfg=green
highlight TabLine term=underline cterm=bold ctermfg=9 ctermbg=4
highlight TabLineSel term=bold cterm=bold ctermbg=Red ctermfg=yellow
highlight Pmenu ctermbg=darkred
highlight PmenuSel ctermbg=red ctermfg=yellow
set ruler
colorscheme desert
let g:winManagerWindowLayout='FileExplorer|TagList|BufExplorer'
let g:winManagerWidth=35
"let Tlist_Auto_Open=1
let Tlist_Ctags_Cmd = '/usr/bin/ctags'
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow =  1
let Tlist_Use_Left_Window = 1
"F7 NERDTree 
map <F7> :NERDTreeToggle<CR>
imap <F7> <ESC>:NERDTreeToggle<CR>
map <F8> :WMToggle<CR>
imap <F8> <ESC>:WMToggle<CR>

這樣就配置好代碼提示功能,可自行體驗一下。

配置代碼主題

配置係統默認主題

首先:在終端輸入

# $ ls /usr/share/vim/vim73/colors

wu_being@UbuntuKylin1704:~/Github/leveldb$ ls /usr/share/vim/vim80/colors/
blue.vim      delek.vim    evening.vim   morning.vim  peachpuff.vim  shine.vim  zellner.vim
darkblue.vim  desert.vim   industry.vim  murphy.vim   README.txt     slate.vim
default.vim   elflord.vim  koehler.vim   pablo.vim    ron.vim        torte.vim
wu_being@UbuntuKylin1704:~/Github/leveldb$ 
wu_being@UbuntuKylin1704:~/Github/leveldb$

查看是否有上麵提到的某些配色,所有配色均是以.vim結束的,如果有的話,再輸入:

$ cd ~/

到用戶主目錄,然後輸入

$ vim .vimrc

創建配置文件,將vim的內容設置如下:

set nu 
colorscheme desert 
syntax on

即配置好desert.vim這種主題方案了,如果想使用其他主題方案,就把desert換成對應的名字就ok啦~~~
下麵開始愉快的使用vim編程吧!!!

配置molokai主題

sublime text的配色主題比較絢麗多彩,今天瀏覽網頁時發現一款vim的molokai配色,它是基於textmate的monokai主題,

和sublime text 的默認主題monokai很像,喜歡使用sublime text的童鞋可以試試。

molokai.vim代碼如下:

" Vim color file
"
" Author: Tomas Restrepo <tomas@winterdom.com>
"
" Note: Based on the monokai theme for textmate
" by Wimer Hazenberg and its darker variant
" by Hamish Stuart Macpherson
"

hi clear

set background=dark
set t_Co=256 "告知molokai,終端支持256色。
if version > 580
    " no guarantees for version 5.8 and below, but this makes it stop
    " complaining
    hi clear
    if exists("syntax_on")
        syntax reset
    endif
endif
let g:colors_name="molokai"

if exists("g:molokai_original")
    let s:molokai_original = g:molokai_original
else
    let s:molokai_original = 0
endif


hi Boolean         guifg=#AE81FF
hi Character       guifg=#E6DB74
hi Number          guifg=#AE81FF
hi String          guifg=#E6DB74
hi Conditional     guifg=#F92672               gui=bold
hi Constant        guifg=#AE81FF               gui=bold
hi Cursor          guifg=#000000 guibg=#F8F8F0
hi Debug           guifg=#BCA3A3               gui=bold
hi Define          guifg=#66D9EF
hi Delimiter       guifg=#8F8F8F
hi DiffAdd                       guibg=#13354A
hi DiffChange      guifg=#89807D guibg=#4C4745
hi DiffDelete      guifg=#960050 guibg=#1E0010
hi DiffText                      guibg=#4C4745 gui=italic,bold

hi Directory       guifg=#A6E22E               gui=bold
hi Error           guifg=#960050 guibg=#1E0010
hi ErrorMsg        guifg=#F92672 guibg=#232526 gui=bold
hi Exception       guifg=#A6E22E               gui=bold
hi Float           guifg=#AE81FF
hi FoldColumn      guifg=#465457 guibg=#000000
hi Folded          guifg=#465457 guibg=#000000
hi Function        guifg=#A6E22E
hi Identifier      guifg=#FD971F
hi Ignore          guifg=#808080 guibg=bg
hi IncSearch       guifg=#C4BE89 guibg=#000000

hi Keyword         guifg=#F92672               gui=bold
hi Label           guifg=#E6DB74               gui=none
hi Macro           guifg=#C4BE89               gui=italic
hi SpecialKey      guifg=#66D9EF               gui=italic

hi MatchParen      guifg=#000000 guibg=#FD971F gui=bold
hi ModeMsg         guifg=#E6DB74
hi MoreMsg         guifg=#E6DB74
hi Operator        guifg=#F92672

" complete menu
hi Pmenu           guifg=#66D9EF guibg=#000000
hi PmenuSel                      guibg=#808080
hi PmenuSbar                     guibg=#080808
hi PmenuThumb      guifg=#66D9EF

hi PreCondit       guifg=#A6E22E               gui=bold
hi PreProc         guifg=#A6E22E
hi Question        guifg=#66D9EF
hi Repeat          guifg=#F92672               gui=bold
hi Search          guifg=#FFFFFF guibg=#455354
" marks column
hi SignColumn      guifg=#A6E22E guibg=#232526
hi SpecialChar     guifg=#F92672               gui=bold
hi SpecialComment  guifg=#465457               gui=bold
hi Special         guifg=#66D9EF guibg=bg      gui=italic
hi SpecialKey      guifg=#888A85               gui=italic
if has("spell")
    hi SpellBad    guisp=#FF0000 gui=undercurl
    hi SpellCap    guisp=#7070F0 gui=undercurl
    hi SpellLocal  guisp=#70F0F0 gui=undercurl
    hi SpellRare   guisp=#FFFFFF gui=undercurl
endif
hi Statement       guifg=#F92672               gui=bold
hi StatusLine      guifg=#455354 guibg=fg
hi StatusLineNC    guifg=#808080 guibg=#080808
hi StorageClass    guifg=#FD971F               gui=italic
hi Structure       guifg=#66D9EF
hi Tag             guifg=#F92672               gui=italic
hi Title           guifg=#ef5939
hi Todo            guifg=#FFFFFF guibg=bg      gui=bold

hi Typedef         guifg=#66D9EF
hi Type            guifg=#66D9EF               gui=none
hi Underlined      guifg=#808080               gui=underline

hi VertSplit       guifg=#808080 guibg=#080808 gui=bold
hi VisualNOS                     guibg=#403D3D
hi Visual                        guibg=#403D3D
hi WarningMsg      guifg=#FFFFFF guibg=#333333 gui=bold
hi WildMenu        guifg=#66D9EF guibg=#000000

if s:molokai_original == 1
   hi Normal          guifg=#F8F8F2 guibg=#272822
   hi Comment         guifg=#75715E
   hi CursorLine                    guibg=#3E3D32
   hi CursorColumn                  guibg=#3E3D32
   hi LineNr          guifg=#BCBCBC guibg=#3B3A32
   hi NonText         guifg=#BCBCBC guibg=#3B3A32
else
   hi Normal          guifg=#F8F8F2 guibg=#1B1D1E
   hi Comment         guifg=#465457
   hi CursorLine                    guibg=#293739
   hi CursorColumn                  guibg=#293739
   hi LineNr          guifg=#BCBCBC guibg=#232526
   hi NonText         guifg=#BCBCBC guibg=#232526
end

"
" Support for 256-color terminal
"
if &t_Co > 255
   hi Boolean         ctermfg=135
   hi Character       ctermfg=144
   hi Number          ctermfg=135
   hi String          ctermfg=144
   hi Conditional     ctermfg=161               cterm=bold
   hi Constant        ctermfg=135               cterm=bold
   hi Cursor          ctermfg=16  ctermbg=253
   hi Debug           ctermfg=225               cterm=bold
   hi Define          ctermfg=81
   hi Delimiter       ctermfg=241

   hi DiffAdd                     ctermbg=24
   hi DiffChange      ctermfg=181 ctermbg=239
   hi DiffDelete      ctermfg=162 ctermbg=53
   hi DiffText                    ctermbg=102 cterm=bold

   hi Directory       ctermfg=118               cterm=bold
   hi Error           ctermfg=219 ctermbg=89
   hi ErrorMsg        ctermfg=199 ctermbg=16    cterm=bold
   hi Exception       ctermfg=118               cterm=bold
   hi Float           ctermfg=135
   hi FoldColumn      ctermfg=67  ctermbg=16
   hi Folded          ctermfg=67  ctermbg=16
   hi Function        ctermfg=118
   hi Identifier      ctermfg=208
   hi Ignore          ctermfg=244 ctermbg=232
   hi IncSearch       ctermfg=193 ctermbg=16

   hi Keyword         ctermfg=161               cterm=bold
   hi Label           ctermfg=229               cterm=none
   hi Macro           ctermfg=193
   hi SpecialKey      ctermfg=81

   hi MatchParen      ctermfg=16  ctermbg=208 cterm=bold
   hi ModeMsg         ctermfg=229
   hi MoreMsg         ctermfg=229
   hi Operator        ctermfg=161

   " complete menu
   hi Pmenu           ctermfg=81  ctermbg=16
   hi PmenuSel                    ctermbg=244
   hi PmenuSbar                   ctermbg=232
   hi PmenuThumb      ctermfg=81

   hi PreCondit       ctermfg=118               cterm=bold
   hi PreProc         ctermfg=118
   hi Question        ctermfg=81
   hi Repeat          ctermfg=161               cterm=bold
   hi Search          ctermfg=253 ctermbg=66

   " marks column
   hi SignColumn      ctermfg=118 ctermbg=235
   hi SpecialChar     ctermfg=161               cterm=bold
   hi SpecialComment  ctermfg=245               cterm=bold
   hi Special         ctermfg=81  ctermbg=232
   hi SpecialKey      ctermfg=245

   hi Statement       ctermfg=161               cterm=bold
   hi StatusLine      ctermfg=238 ctermbg=253
   hi StatusLineNC    ctermfg=244 ctermbg=232
   hi StorageClass    ctermfg=208
   hi Structure       ctermfg=81
   hi Tag             ctermfg=161
   hi Title           ctermfg=166
   hi Todo            ctermfg=231 ctermbg=232   cterm=bold

   hi Typedef         ctermfg=81
   hi Type            ctermfg=81                cterm=none
   hi Underlined      ctermfg=244               cterm=underline

   hi VertSplit       ctermfg=244 ctermbg=232   cterm=bold
   hi VisualNOS                   ctermbg=238
   hi Visual                      ctermbg=235
   hi WarningMsg      ctermfg=231 ctermbg=238   cterm=bold
   hi WildMenu        ctermfg=81  ctermbg=16

   hi Normal          ctermfg=252 ctermbg=233
   hi Comment         ctermfg=59
   hi CursorLine                  ctermbg=234   cterm=none
   hi CursorColumn                ctermbg=234
   hi LineNr          ctermfg=250 ctermbg=234
   hi NonText         ctermfg=250 ctermbg=234
end

使用方法:

將molokai.vim文件放到~/.vim/colors/文件夾下即可。

在~/.vimrc 中配置 :colorscheme molokai 則默認使用此配色。

現在可以用vim打開任意代碼享受這個主題吧!

配置代碼間跳轉--ctags

安裝ctags

sudo apt install ctags

在程序項目主目錄(想實現代碼間跳轉的目錄)輸入ctags -R,會在當前生成一個tags文件。

wu_being@UbuntuKylin1704:~$ cd Github/leveldb/
wu_being@UbuntuKylin1704:~/Github/leveldb$ ctags -R
wu_being@UbuntuKylin1704:~/Github/leveldb$ ls -ltr
總用量 1952
...
-rw-rw-r-- 1 wu_being wu_being   1287 11月 14 12:57 test.cpp
-rw-r--r-- 1 wu_being wu_being 291705 11月 14 13:19 tags
wu_being@UbuntuKylin1704:~/Github/leveldb$ 
wu_being@UbuntuKylin1704:~/Github/leveldb$ pwd
/home/wu_being/Github/leveldb
wu_being@UbuntuKylin1704:~/Github/leveldb$ 

在vimrc文件末行添加:

set tags+=/home/wu_being/Github/leveldb/tags

注意:必須使用“+=”,並且兩邊不能有空格。

使用方法:

  • Ctrl + ]
  • Ctrl + o

在Linux環境下任意目錄下的程序文件裏的函數,要實現跳轉到相關定義代碼進行查看,隻需要將vim光標移動到函數名或宏定義名稱上,使用快捷鍵“Ctrl+]”,即可跳轉定義中的函數或宏定義的地方進行查看,有多個要跳轉的路徑時會在vim下邊出現幾行選項,直接輸入數字加回車可以進行對應的函數或宏定義選擇;
要想返回上一級函數或宏定義,隻需要使用快捷鍵“Ctrl+o”,即可跳會上次的查看的函數。

vim多窗口使用技巧

1、打開多個窗口

打開多個窗口的命令以下幾個:
橫向切割窗口
:new+窗口名(保存後就是文件名) 
:split+窗口名,也可以簡寫為:sp+窗口名
縱向切割窗口名
:vsplit+窗口名,也可以簡寫為:vsp+窗口名

2、關閉多窗口

可以用:q!,也可以使用:close,最後一個窗口不能使用close關閉。使用close隻是暫時關閉窗口,其內容還在緩存中,隻有使用q!、w!或x才能真能退出。
:tabc 關閉當前窗口
:tabo 關閉所有窗口

3、窗口切換

:ctrl+w+j/k,通過j/k可以上下切換,或者:ctrl+w加上下左右鍵,還可以通過快速雙擊ctrl+w依次切換窗口。

4、窗口大小調整

縱向調整
:ctrl+w + 縱向擴大(行數增加)
:ctrl+w - 縱向縮小 (行數減少)
:res(ize) num  例如::res 5,顯示行數調整為5行
:res(ize)+num 把當前窗口高度增加num行
:res(ize)-num 把當前窗口高度減少num行
橫向調整
:vertical res(ize) num 指定當前窗口為num列
:vertical res(ize)+num 把當前窗口增加num列
:vertical res(ize)-num 把當前窗口減少num列

5、給窗口重命名

:f file

6、vi打開多文件

vi a b c
:n 跳至下一個文件,也可以直接指定要跳的文件,如:n c,可以直接跳到c文件
:e# 回到剛才編輯的文件

7、文件瀏覽

:Ex 開啟目錄瀏覽器,可以瀏覽當前目錄下的所有文件,並可以選擇
:Sex 水平分割當前窗口,並在一個窗口中開啟目錄瀏覽器
:ls 顯示當前buffer情況

8、vi與shell切換

:shell 可以在不關閉vi的情況下切換到shell命令行
:exit 從shell回到vi

設置代碼折疊

1. 折疊方式

可用選項來設定折疊方式:

可在Vim 配置文件中設置 set fdm=XXX
可直接在文件中使用注釋調用vim命令 / vim: set fdm=XXX: /

有6種方法來選定折疊:

manual          手工定義折疊         
indent           更多的縮進表示更高級別的折疊         
expr              用表達式來定義折疊         
syntax           用語法高亮來定義折疊         
diff                對沒有更改的文本進行折疊         
marker           對文中的標誌折疊

注意,每一種折疊方式不兼容,如不能既用expr又用marker方式,我主要輪流使用indent和marker方式進行折疊。

使用時,用 set fdm=marker 命令來設置成marker折疊方式(fdm是foldmethod的縮寫)。
要使每次打開vim時折疊都生效,則在.vimrc文件中添加設置,如添加:set fdm=syntax,就像添加其它的初始化設置一樣。

2. 折疊命令

選取了折疊方式後,我們就可以對某些代碼實施我們需要的折疊了,由於我使用indent和marker稍微多一些,故以它們的使用為例:如果使用了indent方式,vim會自動的對大括號的中間部分進行折疊,我們可以直接使用這些現成的折疊成果。

在可折疊處(大括號中間):

zc      折疊
zC     對所在範圍內所有嵌套的折疊點進行折疊
zo      展開折疊
zO     對所在範圍內所有嵌套的折疊點展開
[z       到當前打開的折疊的開始處。
]z       到當前打開的折疊的末尾處。
zj       向下移動。到達下一個折疊的開始處。關閉的折疊也被計入。
zk      向上移動到前一折疊的結束處。關閉的折疊也被計入。

當使用marker方式時,需要用標計來標識代碼的折疊,係統默認是{{{和}}},最好不要改動

我們可以使用下麵的命令來創建和刪除折疊:

zf      創建折疊,比如在marker方式下:                  
         zf56G,創建從當前行起到56行的代碼折疊;                  
         10zf或10zf+或zf10↓,創建從當前行起到後10行的代碼折疊。                  
         10zf-或zf10↑,創建從當前行起到之前10行的代碼折疊。                  
         在括號處zf%,創建從當前行起到對應的匹配的括號上去((),{},[],<>等)。

zd      刪除 (delete) 在光標下的折疊。
         僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。

zD     循環刪除 (Delete) 光標下的折疊,即嵌套刪除折疊。
         僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。

zE      除去 (Eliminate) 窗口裏“所有”的折疊。
         僅當 'foldmethod' 設為 "manual" 或 "marker" 時有效。

Wu_Being博客聲明:本人博客歡迎轉載,請標明博客原文和原鏈接!謝謝!
《工欲善其事必先利其器 —— 配置vim》: https://yq.aliyun.com/articles/247401/

Wu_Being 吳兵博客接受讚助費二維碼

如果你看完這篇博文,覺得對你有幫助,並且願意付讚助費,那麼我會更有動力寫下去。

最後更新:2017-11-14 14:04:27

  上一篇:go  HTAP數據庫 PostgreSQL 場景與性能測試之 24 - (OLTP) 物聯網 - 時序數據並發寫入(含時序索引BRIN)
  下一篇:go  HTAP數據庫 PostgreSQL 場景與性能測試之 23 - (OLAP) 並行計算