1. 程式人生 > >Centos下vim、ctags的配置及基本用法

Centos下vim、ctags的配置及基本用法

   一、vi/vim 基本使用方法 
     vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文字編輯器,這裡只是簡單地介紹一下它的配置和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也是Linux中最基本的文字編輯器,學會它後,您將在Linux的世界裡暢行無阻。

    下載安裝 vim:yum -y install vim*

 檢視:

wKioL1dCiMSQ_sRkAAAKBjJXmCI470.png

vi有三種模式:

(1)一般模式:進入vi的預設模式,能夠進行復制、黏貼、刪除等操作;

(2)編輯模式:從一般模式按下‘i’即可進入;

(3)命令列模式:從一般模式按下“:”、'?'、'/'即可進入;

 “一般模式”的常用按鍵

  h  向左   G 游標移到最後一行
  J  向下    nG 游標移動到第n行
  K  向上  gg或1G 游標移動到第一行
  l

 向右

 /hello 向下查詢hello
 10h 向左10個字元  ?hello 向上查詢hello

 10j

向下10行

  u  撤銷

 10k

向上10行

  x 向後刪除一個字元
 10l 向右10個字元   X 向前刪除一個字元
 n[空格] 游標向右移動n個字元    3x
向後刪除3個字元

 N[Enter]

跳到第n行    yy  複製一行

一、vim的配置

1.在~/.vimrc中添入以下程式碼

(在此我是在#/home/hero/下新增的)(hero是我的普通使用者)

"winpos 5 5          " 設定視窗位置  
"
""set lines=40 columns=155    " 設定視窗大小  

"set nu              " 顯示行號  
"
"set go=             " 不要圖形按鈕  
"
""color asmanian2     " 設定背景主題  

set guifont=Courier_New:h10:cANSI   " 設定字型  

"syntax on           " 語法高亮  
"
"autocmd InsertLeave * se nocul  " 用淺色高亮當前行  
"
"autocmd InsertEnter * se cul    " 用淺色高亮當前行  
"
""set ruler           " 顯示標尺  

set showcmd         " 輸入的命令顯示出來,看的清楚些  

"set cmdheight=1     " 命令列(在狀態行下)的高度,設定為1  
"
""set whichwrap+=<,>,h,l   " 允許backspace和游標鍵跨越行邊界(不建議)  

"set scrolloff=3     " 游標移動到buffer的頂部和底部時保持3行距離  
"
"set novisualbell    " 不要閃爍(不明白)  
"
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\
"%{strftime(\"%d/%m/%y\ -\ %H:%M\")}   "狀態行顯示的內容  
"
"set laststatus=1    " 啟動顯示狀態行(1),總是顯示狀態行(2)  
"
"set foldenable      " 允許摺疊  
"
"set foldmethod=manual   " 手動摺疊  
"
""set background=dark "背景使用黑色 

set nocompatible  "去掉討厭的有關vi一致性模式,避免以前版本的一些bug和侷限  

" 顯示中文幫助
"
" if version >= 603
"
"     set helplang=cn
"
"         set encoding=utf-8
"
"         endif
"
"         " 設定配色方案
"
"         "colorscheme murphy
"
"         "字型 
"
"         "if (has("gui_running")) 
"
"         "   set guifont=Bitstream\ Vera\ Sans\ Mono\ 10 
"
"         "endif 
"
"
"          
"          set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
"
"          set termencoding=utf-8
"
"          set encoding=utf-8
"
"          set fileencodings=ucs-bom,utf-8,cp936
"
"          set fileencoding=utf-8
"
"
"



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
"
" " 選中狀態下 Ctrl+c 複製
"
" vmap <C-c> "+y
"
" "去空行  
"
 nnoremap <F2> :g/^\s*$/d<CR> 
"
" "比較檔案  
"
" nnoremap <C-F2> :vert diffsplit 
"
" "新建標籤  
"
" map <M-F2> :tabnew<CR>  
"
" "列出當前目錄檔案  
"
" map <F3> :tabnew .<CR>  
"
" "開啟樹狀檔案目錄  
"
" map <C-F3> \be  
"
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 設定當檔案被改動時自動載入
"
" 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                   " 開啟狀態列標尺
"
" set cursorline              " 突出顯示當前行
"
" set magic                   " 設定魔術
"
" set guioptions-=T           " 隱藏工具欄
"
" set guioptions-=m           " 隱藏選單欄
"
" "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\
" %{&encoding}\ %c:%l/%L%)\
"
" " 設定在狀態行顯示的資訊
"
" 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
"
" " 統一縮排為4
"
" set softtabstop=4
"
" set shiftwidth=4
"
" " 不要用空格代替製表符
"
" set noexpandtab
"
" " 在行和段開始處使用製表符
"
" set smarttab
"
" " 顯示行號
"
 set number
"
" " 歷史記錄數
"
 set history=1000
"
" "禁止生成臨時檔案
"
" set nobackup
"
" set noswapfile
"
" "搜尋忽略大小寫
"
 set ignorecase
"
" "搜尋逐字元高亮
"
 set hlsearch
"
 set incsearch
"
" "行內替換
"
" 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
"
" " 我的狀態行顯示的內容(包括檔案型別和解碼)
"
" "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%%]
"
" " 總是顯示狀態行
"
 set laststatus=2
"
" " 命令列(在狀態行下)的高度,預設為1,這裡是2
"
" set cmdheight=2
"
" " 偵測檔案型別
"
" filetype on
"
" " 載入檔案型別外掛
"
" filetype plugin on
"
" " 為特定檔案型別載入相關縮排檔案
"
" filetype indent on
"
" " 儲存全域性變數
"
" set viminfo+=!
"
" " 帶有如下符號的單詞不要被換行分割
"
" set iskeyword+=_,$,@,%,#,-
"
" " 字元間插入的畫素行數目
"
" set linespace=0
"
" " 增強模式中的命令列自動完成操作
"
" set wildmenu
"
" " 使回格鍵(backspace)正常處理indent, eol, start等
"
" set backspace=2
"
" " 允許backspace和游標鍵跨越行邊界
"
" set whichwrap+=<,>,h,l
"
" " 可以在buffer的任何地方使用滑鼠(類似office中在工作區雙擊滑鼠定位)
"
 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 { {<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 
"
"                             "開啟檔案型別檢測, 加了這句才可以用智慧補全
"
                             set completeopt=longest,menu
"
"                             """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" CTags的設定  
"
" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
 let Tlist_Sort_Type = "name"    " 按照名稱排序  
"
let Tlist_Use_Right_Window = 1  " 在右側顯示視窗  
"
 let Tlist_Compart_Format = 1    " 壓縮方式  
"
 let Tlist_Exist_OnlyWindow = 1  "
" 如果只有一個buffer,kill視窗也kill掉buffer  
"
" let Tlist_File_Fold_Auto_Close = 0  " 不要關閉其他檔案的tags  
"
" let Tlist_Enable_Fold_Column = 0    " 不要顯示摺疊樹  
"
" autocmd FileType java set tags+=D:\tools\java\tags  
"
" "autocmd FileType h,cpp,cc,c set tags+=D:\tools\cpp\tags  
"
" "let Tlist_Show_One_File=1
" "不同時顯示多個檔案的tag,只顯示當前檔案的
"
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
" "預設開啟Taglist 
"
let Tlist_Auto_Open=1 
"
" """""""""""""""""""""""""""""" 
"
" " Tag list (ctags) 
"
" """""""""""""""""""""""""""""""" 
"
 let Tlist_Ctags_Cmd = '/usr/bin/ctags' 
"
 let Tlist_Show_One_File = 1 "不同時顯示多個檔案的tag,只顯示當前檔案的 
"
 let Tlist_Exit_OnlyWindow = 1 "如果taglist視窗是最後一個視窗,則退出vim 
"
 let Tlist_Use_Right_Window = 1 "在右側視窗中顯示taglist視窗
"
" " minibufexpl外掛的一般設定

 let g:miniBufExplMapWindowNavVim = 1

 let g:miniBufExplMapWindowNavArrows = 1

 let g:miniBufExplMapCTabSwitchBufs = 1
 let g:miniBufExplModSelTarget = 1

對於上面的程式碼自己可以根據自己的需求設定(在上述程式碼中前面有引號的是註釋掉的,如果你需設定哪個,就把前面的註釋去掉)

2.新增完成後::wq儲存退出

3.輸入下面命令:

cd /

ls -al

就可以檢視此時 .vimrc存在;

wKiom1dOZ6PCHf4RAAAMAyIAakI149.png

wKiom1dOZ8-z-WQXAAAPegt_HIQ449.png

4.然後用vim自己編輯一個程式:

wKiom1dOaOPjXArbAAAsnozUYys138.png

此時就可以看見有效果了,“行數”,“語法高亮”“括號自動補全”等。

(2)在自己的linux中瀏覽器貼上以下地址

然後下載到“下載”目錄中
(3)解壓並安裝

  在控制檯輸入 #cd "下載"

wKioL1dOcjeRHnnvAAAQIWNfQAk386.png

wKiom1dOcTrg3STfAAANn-xZJLQ938.png

(4) tar zxvf ctags-5.6.tar.gz
  cd ctags-5.6
  ./configure && make && make install

wKioL1dObC-SnhZCAAAhLMZPmow508.png

(5)完成後 ls

wKioL1dObI2zJVMDAAEBnvUzOz4659.png

在其中有個ctags 

(6)將其分別拷貝一份到 #/usr/src 和# /home/hero 下(在此hero 是自己在home下的使用者名稱) 

cp ctags /usr/src   拷貝

cp ctags /home/hero

(7)然後進入cd /usr/src 目錄下輸入命令ctags -R:

此時該目錄下生成一個tags檔案

wKioL1dObhrBJT5TAAAYzPnva_Y260.png

(8)同樣 再進入cd /home/hero 目錄下輸入命令ctags -R:

命令:ls 在此目錄下也生成個 tags

wKioL1dObzqRSjSTAAA30wdl0dk798.png

(9)完成上述步驟後

開啟開始建立的 .vimrc檔案(ps如果命令不好找就直接在桌面”計算機“中找)

因為.vimrc是隱藏檔案  所以在“檢視”中勾選“顯示隱藏檔案”就可以看見隱藏檔案

wKioL1dOcOuABpK2AAElJAgq4VM027.png

在其中加入以下程式碼

"    "--ctags setting--
"    "" 按下F5重新生成tag檔案,並更新taglist
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F5> <ESC>:!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>

   " 按下F5重新生成tag檔案,並更新taglist
                set tags=tags
                 "   set tags+=./tags "add current directory's generated tags file
                        set tags+=~/home/hero/tags "add new tags   file(剛剛生成tags的路徑,在ctags -R
                       " 生成tags檔案後,不要將tags移動到別的目錄,否則ctrl+]時,會提示找不到原始碼檔案)
                          set tags+=/usr/src/tags

在上面 只要將第二個使用者名稱一改就可以了

然後自己vim一個程式 將滑鼠移到printf上  按ctrl+w+] 就可以看見printf定義  ctrl+o  返回

wKioL1dOc7yDYpf4AACxEabY4UU636.png