最近学gvim,mark低先
1. vim基本用法:模式,光標(biāo)移動(dòng),查找替換,復(fù)制粘貼刪除
?
1.1 幫助
:help
:help command
?
1.2 模式切換
??? 命令模式???? Esc, Ctrl-c, 配合光標(biāo)移動(dòng)可用Alt-h,Alt-j,Alt-k,Alt-l
??? 編輯模式???? i 在當(dāng)前位置編輯 , a在當(dāng)前位置后面插入,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
??? 關(guān)閉文件 :q
??? 保存并關(guān)閉文件 :wq
??? 不保存強(qiáng)制關(guān)閉文件 :q!
??? 關(guān)閉所有文件退出 :qa
1.6 移屏
??????? 下翻頁(yè) Ctrl-f
??????? 上翻頁(yè) Ctrl-b
??????? 下翻行 Ctrl-e
??????? 上翻行 Ctrl-y
?
1.7 光標(biāo)定位快捷鍵
??? 到指定行? :行號(hào),行號(hào)G
???? 到文件頭 1G
???? 到文件尾 G
???? 左下上右 h,j,k,l
???? 下一個(gè)字 w,上一個(gè)字 b? ?
???? 到行首 ? ^
???? 到行尾?? $
???? 行尾插入 A,添加空行 o
1.8 在函數(shù)中定位光標(biāo)
[[? 轉(zhuǎn)到上一個(gè)位于第一列的“{”
]]? 轉(zhuǎn)到下一個(gè)位于第一列的“{”
{?? 轉(zhuǎn)到上一個(gè)空行
}?? 轉(zhuǎn)到下一個(gè)空行
?
1.9 查找當(dāng)前文件
n,N?????? 查找到key后,n跳到后一個(gè)位置,N跳到前一個(gè)位置
* , # ??? 當(dāng)前光標(biāo)所在的詞key作為關(guān)鍵字,精確匹配查找,相當(dāng)于/\<key\>
g*, g# ?? 當(dāng)前光標(biāo)所在的詞key作為關(guān)鍵字,忽略大小寫查找,相當(dāng)于/key
/key????? 從當(dāng)前光標(biāo)位置開始向后查找key
?key? ? ? 從當(dāng)前光標(biāo)位置開始向前查找key
/\<key\>,?\<key\>? 精確匹配查找key
?
1.10 批量替換:%s/要被取代的字串/新的字串/g
?
1.11 復(fù)制粘貼刪除
????? 復(fù)制行 yy??? 復(fù)制n行 nyy
????? 粘貼行 p
????? 刪除行 dd??? 刪除n行 ndd
????? 刪除字 dw??? 復(fù)制字? yw
????? 可視塊選擇復(fù)制:
???????????? 進(jìn)入可視化模式 v,V,Ctrl-v
???????????? 可視化模式下,方向鍵選擇塊
???????????? 按y復(fù)制選擇的塊
?
2. 配置:顯示和編輯樣式,配置文件
?
2.1 顯示和編輯樣式
???? 在狀態(tài)行顯示文件名set statusline+=%f,set laststatus=2
???? 顯示行號(hào) :set nu??? 隱藏行號(hào) :set nonu
?? ? 自動(dòng)縮進(jìn) :set autoindent
???? c風(fēng)格的縮進(jìn) :set cindent
???? 顯示斷行符等特殊符號(hào) :set list
2.2 配置文件
??? vim自帶的配置文件? /etc/vimrc
??? 用戶自定義的配置文件 ~/.vimrc,自己創(chuàng)建。把自己的配置都寫這里。
??? 語(yǔ)法高亮 syntax on
?
?
3. vim用法: 多行注釋,多文件,多窗格編輯,保存會(huì)話
3.1 多行注釋
多行注釋按鍵操作:
????? 注釋:Ctrl-v 進(jìn)入列編輯模式,向下或向上移動(dòng)光標(biāo),把需要注釋的行的開頭標(biāo)記起來,然后按大寫的I,再插入注釋符比如"#",按Esc,就會(huì)全部注釋了。
????? 刪除:Ctrl-v 進(jìn)入列編輯模式,向下或向上移動(dòng)光標(biāo),選中注釋部分,按d,就會(huì)刪除注釋符號(hào)。
多行注釋使用替換命令:
??????????? :%s/^/\/\//g來在全部?jī)?nèi)容的行首添加//號(hào)注釋
???????????? :2,50s/^/\/\//g在2~50行首添加//號(hào)注釋
??????????? 反過來替換既是刪除操作。
3.2 編輯多個(gè)文件
??? 打開多個(gè)文件 $ vim filename1 filename2
??? 切換文件 :prev,:next,:prev!,:next!,first,last? ,只要切換出來過,就在緩沖區(qū)里了
??? 顯示打開的文件列表 :args
??? 打開新的緩沖區(qū)看別的文件 :e filename
??? 切換最近的兩個(gè)文件(緩沖區(qū)) :e# 或 Ctrl-^
??? 顯示緩沖區(qū)的文件列表 :buffers
??? 關(guān)閉其中一個(gè)(當(dāng)前)文件 :bd,:bd 1,:bd 2,序號(hào)按:buffers顯示的
??? 切換到某個(gè)文件 :b 1,:b 2,序號(hào)按:buffers顯示的
??? 切換到上一個(gè)文件 :bp,:bprev
??? 切換到下一個(gè)文件 :bn,:bnext???
3.3 多窗口編輯
分割窗口
??? 水平分割
?????? :sp //當(dāng)前編輯的文件分割一個(gè)窗口再打開
?????? :spfilename //分割一個(gè)窗口出來,打開文件filename
?????? :split
?????? :new
??? 垂直分割
?????? :vsplit
?????? :vnew
切換窗口
??? Ctrl-w 上下左右鍵
??? Ctrl-w h,j,k,l???? //h左,j下,k上,l右? //Ctrl按下,按w松開,Ctrl松開,按h
移動(dòng)窗口
??? Ctrl-W H,J,K,L???? //H左,J下,K上,L右? //鎖定CapsLock就可以得到大寫
改變窗口大小
??? 水平最大化當(dāng)前窗口??? Ctrl-w Ctrl-- //這個(gè)是特殊的:Ctrl按下,按w松開,再按-松開,最后松開Ctrl
??? 等分窗口??? Ctrl-w =
??? 調(diào)整窗口大小??? Ctrl-w +增加窗口大小一行,Ctrl-w -減少窗口大小一行
顯示命令歷史窗口
??? q:或q/,退出:q
讓當(dāng)前文件占據(jù)整個(gè)窗口
??? Ctrl-w o
關(guān)閉其中一個(gè)(當(dāng)前)窗口
??? Ctrl-w c? //其實(shí)文件還在buffers中
讓用緩沖區(qū)的文件來到分割窗口
??? Ctrl-w Ctrl-^? //保持Ctrl按下
?
3.4 保存所在目錄的環(huán)境和狀態(tài),會(huì)話
如果在vim中已經(jīng)打開了好多窗口,想要保持這個(gè)環(huán)境,等下次編輯瀏覽時(shí)再載入。
:help mksession???????? 查看mksession的幫助?
:mksession!???????????? 保存當(dāng)前的vim狀態(tài),在當(dāng)前目錄會(huì)產(chǎn)生一個(gè)會(huì)話文件Session.vim。
$ vim -S??????????????? vim會(huì)自動(dòng)載入當(dāng)前目錄的會(huì)話文件Session.vim,之前:mksession! 保持的狀態(tài)又回來啦。
:mksession! work.vim??? 保存當(dāng)前的vim狀態(tài)到會(huì)話文件work.vim
$ vim -S work.vim?????? vim載入會(huì)話文件work.vim,之前:mksession! work.vim保持的狀態(tài)又回來啦。
?
也可在vim中手動(dòng)載入會(huì)話:
:source Session.vim???? 載入Session.vim保持的狀態(tài)。
:source work.vim??????? 載入work.vim保持的狀態(tài)。
?
配置自動(dòng)保存和載入會(huì)話
這個(gè)配置好后,第一次在要自動(dòng)保持會(huì)話的目錄下進(jìn)入vim,用命令:mksession! project.vim。以后使用直接在當(dāng)前目錄$vim即可。
如果想打開和關(guān)閉vim時(shí)自動(dòng)保存和載入會(huì)話,可以在配置文件~/.vimrc中加入:
" auto save and load session
let g:AutoSessionFile="project.vim"
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自動(dòng)保存及加載
?
4. 瀏覽代碼:ctags,Taglist,NERD_tree,cscope
4.1 熱門vim腳本
http://vim.sourceforge.net 下 scripts->browse all
?
4.2ctags跳轉(zhuǎn)到定義處
ctags是一個(gè)用來產(chǎn)生代碼索引文件的插件,支持很多語(yǔ)言。
可以用Ctrl-]命令跳轉(zhuǎn)到函數(shù)的定義處,也可以用命令來搜索函數(shù)的定義,非常好用。
安裝ctags
??? 如果沒有安裝ctags,fedora的shell下可以用 # yum -y install ctags安裝。
創(chuàng)建tags文件
?? shell下,在需要?jiǎng)?chuàng)建tags文件的目錄下用 $ ctags -R,那么整個(gè)目錄下的函數(shù),宏,變量,類,結(jié)構(gòu)等都加上了tags。
使用ctags
?? 按鍵跳轉(zhuǎn)Ctrl-],Ctrl-t,Ctrl-o
????? 在創(chuàng)建tags文件的目錄下,用vim打開的文件中,光標(biāo)移到一個(gè)被調(diào)用的函數(shù)名上,按Ctrl-]就會(huì)自動(dòng)跳轉(zhuǎn)到該函數(shù)的定義處,Ctrl-t返回。
?? 命令跳轉(zhuǎn) :tags? functionname
????? 在用vim打開的文件中,用命令:tags? functionname。:ta functionname
?? 打開時(shí)搜索并跳轉(zhuǎn)
????? vim -t functionname
?? 多個(gè)匹配tags時(shí)跳轉(zhuǎn)
????? :tnext,:tprev,:tn,:tp
?
4.3Taglist函數(shù)和變量列表
Taglist是vim的源代碼瀏覽插件,可以以窗口方式查看函數(shù)列表,變量列表等。
Taglist的實(shí)現(xiàn)依賴ctags。
安裝Taglist
??? 1. 在 http://www.vim-taglist.sourceforge.net/screenshots.html 下載最新版的Taglist軟件包。
??? 2. 在個(gè)人用戶目錄下創(chuàng)建? .vim目錄,將taglist_**.zip中的內(nèi)容解壓到該目錄。
??? 3. 進(jìn)入Vim,在命令模式下輸入命令 "? helptags ~/.vim/doc"即可完成Taglist的安裝。
??? 4. 輸入命令“:Tlist”檢查是否安裝成功。
修改配置文件
??? let Tlist_File_Fold_Auto_Close=1 除了當(dāng)前窗口顯示的文件,其它文件折疊。
??? let Tlist_Exit_OnlyWindow=1? 如果Tlist是最后一個(gè)窗口,自動(dòng)退出vim。
使用 :Tlist
??? 打開 Vim 之后,使用命令 :Tlist激活 Taglist窗口; 按Ctrl-w w在兩個(gè)窗口來回跳轉(zhuǎn)。
??? :Tlist
??? :TlistToggle
Tlist快捷鍵
??? 在Tlist列表窗口中,以函數(shù)為例
??? 看函數(shù)原型??????? 空格?
??? 看函數(shù)定義??????? p
??? 跳轉(zhuǎn)到函數(shù)定義???? 移動(dòng)到函數(shù)名處Enter
??? 折疊/展開???????? - ,+
??? 全部折疊/全部展開? =,*
??? 更改列表排序方式?? s
??? 更新列表????????? u
??? 放大縮小窗口????? x
??? 退出窗口????????? q
??? 上/下一個(gè)文件???? [[,]]
?
配置:Tlist快捷鍵
??? .vimrc中寫:
???? nnoremap <silent><F2> :TlistToggle<CR>
Tlist幫助
??? 在Tlist窗口按F1
??? :help Tlist????????? ?? 查看Tlist命令幫助
??? :help 'Tlist*' ? ? ? ?? 查看Tlist選項(xiàng)幫助
??? :e ~/.vim/taglist.txt?? 直接打開文檔看幫助
?
4.4 NERD_tree 目錄樹列表
安裝NERD_tree
? 1.在vim.sourceforge.net 下載NERD_tree包。
? 2.把NERD_tree包解壓到.vim下,之后會(huì)看到.vim下多了文件 doc/NERD_tree.txt,plugin/NERD_tree.vim。
? 3.進(jìn)入vim,輸入:NERDTree檢查是否安裝成功。
使用NERDTree
??? 打開 vim 之后,使用命令 :NERDTree激活 NERDTree窗口; 按Ctrl-w w在兩個(gè)窗口來回跳轉(zhuǎn)。
??? :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在整個(gè)目錄查找函數(shù)被調(diào)用位置
cscope可以在整個(gè)目錄查找函數(shù)定義,查找函數(shù)被調(diào)用位置等,非常好用。
安裝cscope
??? fedora下,# yum -y install cscope
生成cscope數(shù)據(jù)庫(kù)
??? 在所要的目錄下
??? $ find . -name '*.c' -or -name '*.h' -or -name '*.S' | cscope -Rbq
??? 在當(dāng)前目錄會(huì)產(chǎn)生3個(gè)文件cscope.out,cscope.in.out,cscope.po.out。
載入cscope數(shù)據(jù)庫(kù)
??? 在當(dāng)前目錄進(jìn)入vim
??? :cs add cscope.out
使用cscope查找整個(gè)目錄
??? :cs help
??? :cs find g timer_interrupt? 查找timer_interrupt的定義
??? :cs find c timer_interrupt? 查找調(diào)用timer_interrupt的地方
??? :cs find e run_timer????????? 查找關(guān)鍵字run_timer
??? find 可以簡(jiǎn)寫為f
多個(gè)匹配間跳轉(zhuǎn)
??? :cnext,cn
修改配置文件
? ? set nocst??????????????????? 讓跳轉(zhuǎn)到定義的命令:ta 和 Ctrl-]調(diào)用ctags的tag,幫助:help nocst。
? ? set csto=1 ? ? ? ? ? ? ? ? ? 優(yōu)先使用ctags的tag ??????
??? "set cscopequickfix=s-,c-,d-,i-,t-,e-??? 使:cs find c 時(shí)直接跳轉(zhuǎn)而不是列表,看個(gè)人喜好要不要設(shè)這個(gè)。
? ? nnoremap <C-\> :cs find c <C-R>=expand("<cword>")<CR><CR> 光標(biāo)放在函數(shù)上,快捷鍵Ctrl-\跳轉(zhuǎn)到調(diào)用這個(gè)函數(shù)的地方。????
? ? nnoremap <C-_> :cs find g <C-R>=expand("<cword>")<CR><CR> 光標(biāo)放在函數(shù)上,快捷鍵Ctrl-_跳轉(zhuǎn)到函數(shù)定義處或列出多個(gè)定義
?
5. 編譯并修改代碼錯(cuò)誤
quickfix模式內(nèi)置在vim中,編譯后記錄了出錯(cuò)的位置信息,用來定位錯(cuò)誤位置。
?
編譯
??? 調(diào)用當(dāng)前目錄下的Makefile文件編譯??? :make
??????? 改變編譯調(diào)用的命令 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? :set makeprg=gcc\ -g\ test.c\ -o\ test ,沒有寫Makefile時(shí)用
?
快速定位代碼錯(cuò)誤
??? 列出錯(cuò)誤??????? :cl
???下一個(gè)錯(cuò)誤 ???? :cn
???上一個(gè)錯(cuò)誤 ???? :cp
???從頭開始?? ? ?? :cnew
???打開錯(cuò)誤列表窗口 :cw
???關(guān)閉錯(cuò)誤列表窗口 :ccl
?
6. 調(diào)用gdb來debug:vimgdb
安裝vimgdb
????? vimgdb需要以補(bǔ)丁形式打在vim版本上,下載vim的source,對(duì)應(yīng)版本的vimgdb補(bǔ)丁,然后按vimgdb的說明文件安裝即可。
?
配置按鍵映射
??? 配置文件里加? map <F7> :run macros/gdb_mappings.vim<CR>
??? 這樣按F7,按鍵映射就可以在調(diào)試模式和普通模式切換了。
使用vimgdb
?? 按鍵映射??? <F7> 或 :run macros/gdb_mappings.vim
?? 打開gdb命令窗格????? 空格
?? 打開gdb輸出窗格????? 在命令窗格鍵入gdb,按Enter
?? 載入可執(zhí)行文件?????? 空格打開gdb命令窗格,file test,test就是編譯后生成的可執(zhí)行文件
?? 設(shè)置斷點(diǎn)??? Ctrl-B
?? 開始運(yùn)行??? R
?? 繼續(xù)執(zhí)行??? S,Ctrl-N,C
?? 結(jié)束?????? 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
??? 函數(shù)stack?? W,where
??? 斷點(diǎn)位置??? B,info breakpoints
??? 寄存器????? info registers
參考:vi/vim使用進(jìn)階: 在VIM中使用GDB調(diào)試 – 使用vimgdb
7. 其它
7.1 中文亂碼問題
先安裝運(yùn)行zhcon
轉(zhuǎn)載于:https://www.cnblogs.com/hapi/archive/2012/09/15/2686914.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的最近学gvim,mark低先的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP session的工作原理
- 下一篇: (相当全面)node.js 初体验