1、打開多個窗口 打開多個窗口的命令以下幾個: 橫向切割窗口 :new+窗口名(保存后就是文件名) :split+窗口名,也可以簡寫為:sp+窗口名 縱向切割窗口名 :vsplit+窗口名,也可以簡寫為:vsp+窗口名 vim -o file1 file2 ... #水平打開多窗口, vim -O file1 file2 ... #垂直打開多窗口, vim -d file1 file2 ... #垂直打開多窗口,并且進行比較 vimdiff file1 file2 .. #等同于上一句 2、關閉多窗口 可以用:q!,也可以使用:close,最后一個窗口不能使用close關閉。使用close只是暫時關閉窗口,其內容還在緩存中,只有使用q!、w!或x才能真能退出。 關閉窗口 q 或 close #關閉當前窗口 only #保留當前窗口,關閉其它所有窗口 qall(qa) #退出所有窗口 wall #保存所有窗口 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 9. 多標簽 直接在編輯的時候輸入: vim -p 要編輯的文件名 如vim -p * 就是編輯當前目錄的所有文件 多個標簽間進行切換時向右切換gt,向左切換用gT 在編輯的時候想增加一個標簽就可以:tabnew filename :tabc 關閉當前的tab :tabo 關閉所有其他的tab :tabs 查看所有打開的tab :tabp 前一個 :tabn 后一個
1. vim基本用法:模式,光標移動,查找替換,復制粘貼刪除
1.1 幫助 :help
:help command
1.2 模式切換 命令模式 Esc, Ctrl-c, 配合光標移動可用Alt-h,Alt-j,Alt-k,Alt-l 編輯模式 i 在當前位置編輯 , a在當前位置后面插入,I在行首插入,A在行尾插入,o添加新行 可視化模式 v塊模式,V行塊模式,Ctrl-v列塊模式 下面的操作方式和快捷鍵基本上都是在命令模式下的,編輯模式按鍵一般只能輸入文字。
1.3 輸入方式 直接按鍵盤編輯 如i :command 如:set nu 執(zhí)行shell命令 :!command 如:!pwd 1.4 撤銷,重做 撤銷上一次的編輯操作 u, U 撤銷未保存的全部編輯操作,重新載入文件 :e!
重做上一次撤銷的編輯操作 Ctrl-r
1.5 保存,退出 保存文件 :w 關閉文件 :q 保存并關閉文件 :wq 不保存強制關閉文件 :q! 關閉所有文件退出 :qa
1.6 移屏 下翻頁 Ctrl-f 上翻頁 Ctrl-b 下翻行 Ctrl-e 上翻行 Ctrl-y 1.7 光標定位快捷鍵 到指定行 :行號,行號G 到文件頭 1G 到文件尾 G 左下上右 h,j,k,l 下一個字 w,上一個字 b 到行首 ^ 到行尾 $ 行尾插入 A,添加空行 o
1.8 在函數中定位光標 [[ 轉到上一個位于第一列的“{” ]] 轉到下一個位于第一列的“{” { 轉到上一個空行 } 轉到下一個空行
1.9 查找當前文件 n,N 查找到key后,n跳到后一個位置,N跳到前一個位置 * , # 當前光標所在的詞key作為關鍵字,精確匹配查找,相當于/\<key\> g*, g# 當前光標所在的詞key作為關鍵字,忽略大小寫查找,相當于/key /key 從當前光標位置開始向后查找key?key 從當前光標位置開始向前查找key /\<key\>,?\<key\> 精確匹配查找key 1.10 批量替換:%s/要被取代的字串/新的字串/g 1.11 復制粘貼刪除 復制行 yy 復制n行 nyy 粘貼行 p 刪除行 dd 刪除n行 ndd 刪除字 dw 復制字 yw
可視塊選擇復制: 進入可視化模式 v,V,Ctrl-v 可視化模式下,方向鍵選擇塊 按y復制選擇的塊
2. 配置:顯示和編輯樣式,配置文件
2.1 顯示和編輯樣式 在狀態(tài)行顯示文件名set statusline+=%f,set laststatus=2 顯示行號 :set nu 隱藏行號 :set nonu 自動縮進 :set autoindent c風格的縮進 :set cindent 顯示斷行符等特殊符號 :set list
2.2 配置文件 vim自帶的配置文件 /etc/vimrc 用戶自定義的配置文件 ~/.vimrc,自己創(chuàng)建。把自己的配置都寫這里。 語法高亮 syntax on
3. vim用法: 多行注釋,多文件,多窗格編輯,保存會話 3.1 多行注釋 多行注釋按鍵操作: 注釋:Ctrl-v 進入列編輯模式,向下或向上移動光標,把需要注釋的行的開頭標記起來,然后按大寫的I,再插入注釋符比如"#",按Esc,就會全部注釋了。 刪除:Ctrl-v 進入列編輯模式,向下或向上移動光標,選中注釋部分,按d,就會刪除注釋符號。
多行注釋使用替換命令: :%s/^/\/\//g來在全部內容的行首添加//號注釋 :2,50s/^/\/\//g在2~50行首添加//號注釋 反過來替換既是刪除操作。
3.2 編輯多個文件 打開多個文件 $ vim filename1 filename2 切換文件 :prev,:next,:prev!,:next!,first,last ,只要切換出來過,就在緩沖區(qū)里了 顯示打開的文件列表 :args
打開新的緩沖區(qū)看別的文件 :e filename 切換最近的兩個文件(緩沖區(qū)) :e# 或 Ctrl-^ 顯示緩沖區(qū)的文件列表 :buffers 關閉其中一個(當前)文件 :bd,:bd 1,:bd 2,序號按:buffers顯示的 切換到某個文件 :b 1,:b 2,序號按:buffers顯示的 切換到上一個文件 :bp,:bprev 切換到下一個文件 :bn,:bnext
3.3 多窗口編輯
分割窗口 水平分割 :sp //當前編輯的文件分割一個窗口再打開 :spfilename //分割一個窗口出來,打開文件filename :split :new
垂直分割 :vsplit :vnew 切換窗口 Ctrl-w 上下左右鍵 Ctrl-w h,j,k,l //h左,j下,k上,l右 //Ctrl按下,按w松開,Ctrl松開,按h
移動窗口 Ctrl-W H,J,K,L //H左,J下,K上,L右 //鎖定CapsLock就可以得到大寫
改變窗口大小 水平最大化當前窗口 Ctrl-w Ctrl-- //這個是特殊的:Ctrl按下,按w松開,再按-松開,最后松開Ctrl 等分窗口 Ctrl-w = 調整窗口大小 Ctrl-w +增加窗口大小一行,Ctrl-w -減少窗口大小一行 顯示命令歷史窗口 q:或q/,退出:q 讓當前文件占據整個窗口 Ctrl-w o
關閉其中一個(當前)窗口 Ctrl-w c //其實文件還在buffers中 讓用緩沖區(qū)的文件來到分割窗口 Ctrl-w Ctrl-^ //保持Ctrl按下
3.4 保存所在目錄的環(huán)境和狀態(tài),會話 如果在vim中已經打開了好多窗口,想要保持這個環(huán)境,等下次編輯瀏覽時再載入。 :help mksession 查看mksession的幫助
:mksession! 保存當前的vim狀態(tài),在當前目錄會產生一個會話文件Session.vim。 $ vim -S vim會自動載入當前目錄的會話文件Session.vim,之前:mksession! 保持的狀態(tài)又回來啦。
:mksession! work.vim 保存當前的vim狀態(tài)到會話文件work.vim $ vim -S work.vim vim載入會話文件work.vim,之前:mksession! work.vim保持的狀態(tài)又回來啦。 也可在vim中手動載入會話: :source Session.vim 載入Session.vim保持的狀態(tài)。 :source work.vim 載入work.vim保持的狀態(tài)。 配置自動保存和載入會話 這個配置好后,第一次在要自動保持會話的目錄下進入vim,用命令:mksession! project.vim。以后使用直接在當前目錄$vim即可。 如果想打開和關閉vim時自動保存和載入會話,可以在配置文件~/.vimrc中加入: " auto save and load session let g: let g:OrigPWD=getcwd() if filereadable(g:AutoSessionFile) if argc()==0 au VimEnter * call EnterHandler() au VimLeave * call LeaveHandler() endif endif function! LeaveHandler() exec "mks! ".g:OrigPWD."/".g:AutoSessionFile endfunction function! EnterHandler() exe "source ".g:AutoSessionFile endfunction 參考vim中session自動保存及加載
4. 瀏覽代碼:ctags,Taglist,NERD_tree,cscope 4.1 熱門vim腳本 http://vim. 下 scripts->browse all
4.2ctags跳轉到定義處
ctags是一個用來產生代碼索引文件的插件,支持很多語言。
可以用Ctrl-]命令跳轉到函數的定義處,也可以用命令來搜索函數的定義,非常好用。
安裝ctags 如果沒有安裝ctags,fedora的shell下可以用 # yum -y install ctags安裝。
創(chuàng)建tags文件 shell下,在需要創(chuàng)建tags文件的目錄下用 $ ctags -R,那么整個目錄下的函數,宏,變量,類,結構等都加上了tags。
使用ctags 按鍵跳轉Ctrl-],Ctrl-t,Ctrl-o 在創(chuàng)建tags文件的目錄下,用vim打開的文件中,光標移到一個被調用的函數名上,按Ctrl-]就會自動跳轉到該函數的定義處,Ctrl-t返回。
命令跳轉 :tags functionname 在用vim打開的文件中,用命令:tags functionname。:ta functionname
打開時搜索并跳轉 vim -t functionname 多個匹配tags時跳轉 :tnext,:tprev,:tn,:tp 4.3Taglist函數和變量列表 Taglist是vim的源代碼瀏覽插件,可以以窗口方式查看函數列表,變量列表等。 Taglist的實現(xiàn)依賴ctags。 安裝Taglist 1. 在 http://www.vim-taglist./screenshots.html 下載最新版的Taglist軟件包。 2. 在個人用戶目錄下創(chuàng)建 .vim目錄,將taglist_**.zip中的內容解壓到該目錄。 3. 進入Vim,在命令模式下輸入命令 " helptags ~/.vim/doc"即可完成Taglist的安裝。 4. 輸入命令“:Tlist”檢查是否安裝成功。 修改配置文件
let Tlist_File_Fold_Auto_Close=1 除了當前窗口顯示的文件,其它文件折疊。 let Tlist_Exit_OnlyWindow=1 如果Tlist是最后一個窗口,自動退出vim。
使用 :Tlist 打開 Vim 之后,使用命令 :Tlist激活 Taglist窗口; 按Ctrl-w w在兩個窗口來回跳轉。 :Tlist :TlistToggle
Tlist快捷鍵 在Tlist列表窗口中,以函數為例 看函數原型 空格 看函數定義 p 跳轉到函數定義 移動到函數名處Enter 折疊/展開 - ,+ 全部折疊/全部展開 =,* 更改列表排序方式 s 更新列表 u 放大縮小窗口 x 退出窗口 q 上/下一個文件 [[,]] 配置:Tlist快捷鍵 .vimrc中寫: nnoremap <silent><F2> :TlistToggle<CR>
Tlist幫助 在Tlist窗口按F1 :help Tlist 查看Tlist命令幫助 :help 'Tlist*' 查看Tlist選項幫助 :e ~/.vim/taglist.txt 直接打開文檔看幫助 4.4 NERD_tree 目錄樹列表 安裝NERD_tree 1.在vim. 下載NERD_tree包。 2.把NERD_tree包解壓到.vim下,之后會看到.vim下多了文件 doc/NERD_tree.txt,plugin/NERD_tree.vim。 3.進入vim,輸入:NERDTree檢查是否安裝成功。 使用NERDTree 打開 vim 之后,使用命令 :NERDTree激活 NERDTree窗口; 按Ctrl-w w在兩個窗口來回跳轉。 :NERDTree :NERDTreeToggle NERDTree快捷鍵 o , Enter 展開/折疊目錄 p 上一層目錄 / 查找文件 q 退出 幫助 ? :e ~/.vim/doc/NERD_tree.txt 忽略特定文件類型 配置文件中寫: let NERDTreeIgnore = ['.*\.o$','.*\.ko$','.*\.gz$'] 忽略后綴為.o,.ko,.gz的文件。 配置:NERDTree快捷鍵 .vimrc中寫: nnoremap <silent><F3> :NERDTreeToggle<CR>
4.5 bufexplorer 緩沖區(qū)文件列表 安裝bufexplorer類似NERD_tree。 使用BufExplorer :BufExplorer 配置:BufExplorer快捷鍵 .vimrc中寫: nnoremap <silent><F4> :BufExplorer<CR>
4.6cscope在整個目錄查找函數被調用位置 cscope可以在整個目錄查找函數定義,查找函數被調用位置等,非常好用。 安裝cscope fedora下,# yum -y install cscope 生成cscope數據庫 在所要的目錄下 $ find . -name '*.c' -or -name '*.h' -or -name '*.S' | cscope -Rbq 在當前目錄會產生3個文件cscope.out,cscope.in.out,cscope.po.out。 載入cscope數據庫 在當前目錄進入vim :cs add cscope.out 使用cscope查找整個目錄 :cs help :cs find g timer_interrupt 查找timer_interrupt的定義 :cs find c timer_interrupt 查找調用timer_interrupt的地方 :cs find e run_timer 查找關鍵字run_timer find 可以簡寫為f 多個匹配間跳轉 :cnext,cn
修改配置文件 set nocst 讓跳轉到定義的命令:ta 和 Ctrl-]調用ctags的tag,幫助:help nocst。 set csto=1 優(yōu)先使用ctags的tag
"set cscopequickfix=s-,c-,d-,i-,t-,e- 使:cs find c 時直接跳轉而不是列表,看個人喜好要不要設這個。 nnoremap <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR> 光標放在函數上,快捷鍵Ctrl-\跳轉到調用這個函數的地方。 nnoremap <C-_> :cs find g <C-R>=expand("<cword>")<CR><CR> 光標放在函數上,快捷鍵Ctrl-_跳轉到函數定義處或列出多個定義
5. 編譯并修改代碼錯誤
quickfix模式內置在vim中,編譯后記錄了出錯的位置信息,用來定位錯誤位置。
編譯 調用當前目錄下的Makefile文件編譯 :make
改變編譯調用的命令 :set makeprg=gcc\ -g\ test.c\ -o\ test ,沒有寫Makefile時用
快速定位代碼錯誤 列出錯誤 :cl 下一個錯誤 :cn 上一個錯誤 :cp 從頭開始 :cnew 打開錯誤列表窗口 :cw 關閉錯誤列表窗口 :ccl
6. 調用gdb來debug:vimgdb 安裝vimgdb vimgdb需要以補丁形式打在vim版本上,下載vim的source,對應版本的vimgdb補丁,然后按vimgdb的說明文件安裝即可。 配置按鍵映射 配置文件里加 map <F7> :run macros/gdb_mappings.vim<CR> 這樣按F7,按鍵映射就可以在調試模式和普通模式切換了。
使用vimgdb 按鍵映射 <F7> 或 :run macros/gdb_mappings.vim 打開gdb命令窗格 空格 打開gdb輸出窗格 在命令窗格鍵入gdb,按Enter 載入可執(zhí)行文件 空格打開gdb命令窗格,file test,test就是編譯后生成的可執(zhí)行文件 設置斷點 Ctrl-B 開始運行 R 繼續(xù)執(zhí)行 S,Ctrl-N,C 結束 F 退出 Q 變量監(jiān)視窗口 創(chuàng)建變量監(jiān)視窗 :bel 30vsplit gdb-variables 選中變量名到監(jiān)視窗 v命令選中變量,Ctrl-P添加到變量監(jiān)視窗格 輸入變量名到監(jiān)視窗 空格打開gdb命令窗格,輸入createvar 變量名
在gdb輸出窗格顯示,查看 locals變量 L,info locals 函數stack W,where 斷點位置 B,info breakpoints 寄存器 info registers
參考:vi/vim使用進階: 在VIM中使用GDB調試 – 使用vimgdb
7. 其它
7.1 中文亂碼問題 先安裝運行zhcon
8. 我的vim 安裝了插件ctags,cscope,腳本Taglist,NERD_tree,bufexplorer, 按這里配置好之后,F(xiàn)2彈出函數列表,F(xiàn)3彈出目錄列表,Ctrle-],Ctrl--跳轉到函數定義,Ctrl-\跳轉到函數引用,很方便。 我的配置文件~/.vimrc --------------------------------------------------------------------- 1 syntax on 2 3 set nu 4 set autoindent 5 set cindent 6 7 " status line 8 set statusline+=%f 9 set laststatus=2 10 11 nnoremap <silent><F2> :TlistToggle<CR> 12 nnoremap <silent><F3> :NERDTreeToggle<CR> 13 nnoremap <silent><F4> :BufExplorer<CR> 14 15 " cscope 16 set nocst 17 set csto=1 18 nnoremap <C-\> :cscope find c <C-R>=expand("<cword>")<CR><CR> 19 nnoremap <C-_> :cscope find g <C-R>=expand("<cword>")<CR><CR> 20 "set cscopequickfix=s-,c-,d-,i-,t-,e- 21 22 " Tlist 23 let Tlist_File_Fold_Auto_Close=1 24 let Tlist_Exit_OnlyWindow=1 25 let Tlist_WinWidth=30 26 let Tlist_Inc_Winwidth=1 27 28 " NERDTree 29 let NERDTreeIgnore = ['.*\.o$','.*\.ko$','.*\.gz$'] 30 31 " auto save and load session 32 let g: 33 let g: 34 |