Centos下vim、ctags的配置及基本用法
一、vi/vim 基本使用方法
vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文字編輯器,這裡只是簡單地介紹一下它的配置和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也是Linux中最基本的文字編輯器,學會它後,您將在Linux的世界裡暢行無阻。
下載安裝 vim:yum -y install vim*
檢視:
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存在;
4.然後用vim自己編輯一個程式:
此時就可以看見有效果了,“行數”,“語法高亮”“括號自動補全”等。
(2)在自己的linux中瀏覽器貼上以下地址
然後下載到“下載”目錄中
(3)解壓並安裝
在控制檯輸入 #cd "下載"
(4) tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
(5)完成後 ls
在其中有個ctags
(6)將其分別拷貝一份到 #/usr/src 和# /home/hero 下(在此hero 是自己在home下的使用者名稱)
cp ctags /usr/src 拷貝
cp ctags /home/hero
(7)然後進入cd /usr/src 目錄下輸入命令ctags -R:
此時該目錄下生成一個tags檔案
(8)同樣 再進入cd /home/hero 目錄下輸入命令ctags -R:
命令:ls 在此目錄下也生成個 tags
(9)完成上述步驟後
開啟開始建立的 .vimrc檔案(ps如果命令不好找就直接在桌面”計算機“中找)
因為.vimrc是隱藏檔案 所以在“檢視”中勾選“顯示隱藏檔案”就可以看見隱藏檔案
在其中加入以下程式碼
" "--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 返回