VIM學習一: VIM命令學習及插件介紹

1、光標移動及編輯命令(含查找替換) 

【打開關閉窗口】
:e file或:open file       打開新文檔
:q或者ctrl+w+q         關閉當前視圖的窗口
:tab split將在新標籤頁中,打開當前緩衝區中的文件(至關於把當前文件放大)
 

vim -b datafile vim打開二進制文件
:%!xxd 轉換爲十六進制
:%!xxd -r 轉換回二進制php

 
【保存文件】
:w filename 當前文件另存爲filename文件

:w! filename  強制寫文件html

:e!  放棄修改,從新讀文件linux

 
【移動光標】
h     方向鍵左←
j     方向鍵下↓
k     方向鍵上↑
l     方向鍵右→
3j 或者 3↓         把遊標下移3行
3→                 把遊標右移3個字符
0(數字) 將光標移到當前行首(就是行首,不是第一個字符)
^        將光標移到當前行的第一個非空字符
輸入$, 將光標移到當前行尾
數字n + 空格         向右移動n個字符的位置
數字n + Enter鍵     向下移n行
:n           跳到第n行 
 

【#ifdef宏之類的跳轉】
% 光標處在#ifXX #else #endif上時,按%能夠在這個隊列中循環
[# 光標處在#ifdef和#endif之間的行時,(不能在#XXX上,只能在中間行),按[#能夠跳到#ifdef之類的開始處。若沒有,這不跳轉。
]# 光標處在#ifdef和#endif之間的行時,(不能在#XXX上,只能在中間行),按]#能夠跳到#else 或#endif相應處。若沒有,這不跳轉。c++

【函數段級別的跳轉】
% 光標指向{或},能夠查找該段落的匹配處
[[ 向上找函數的入口{處,即光標處在代碼段的中間行時(好比函數的中間行),按[[跳轉到函數的入口{處。(若在函數外,或者函數的{處,則跳轉到上一個函數的{處)
][ 向下找函數的出口}處,即光標處在代碼段的中間行時(好比函數的中間行),按][跳轉到函數的結尾}處。(若在函數外,或者函數的}處,則跳轉到下一個函數的}處)git

【代碼段級別的跳轉】
% 光標指向{或},能夠查找該段落的匹配處
[{ 向上找代碼段的入口{處
]} 向下找代碼段的出口}處
參考: http://www.cnblogs.com/CGDeveloper/articles/1941085.htmlubuntu

 

【翻屏命令】
ctrl + f 向下移一頁
ctrl + b 向上移一頁
ctrl + d 向下移半頁
ctrl + u 向上移半頁
 
【跳轉命令】
:n  跳到第n行
H 移動到當前屏幕的第一行第一列
M 移動到當前屏幕的最中間那一行的第一列
L 移動到當前屏幕的最後一行第一列
gg 移動到整個文檔的第一行,至關於1G
G 移動到整個文檔的最後一行第一列
20g 移動到整個文檔的第20行
 
【基礎編輯命令】
. 重複上一次的那個動做(如複製黏貼刪除等,撤銷除外)
普通模式下輸入q:            顯示命令行命令歷史的窗口
  
【刪除】
x 小寫x,刪除光標後面的一個字符
X 大寫X,刪除光標前面的一個字符
數字n + x 刪除光標後的n個字符,n能夠大於改行後面字符的總個數,刪除不會影響到下一行
數字n + X 同小x,只是往前刪
d$ 刪除這行光標以後的全部內容
d0 這個數字0表示,從改行的開始,一直刪到光標的位置
dd 刪除該行
數字n + dd 刪除n行,如:2dd刪除兩行,即光標所在行及其下一行
d1G 從整個文檔的第一行開始刪,刪到光標當前位置
dG 從光標開始刪除,一直刪到整個文檔的最後一行
 
【複製與黏貼】
yy     複製遊標所在的那一行
nyy     複製遊標所在那行開始的n行
p 小寫p    在遊標所在行的下方,黏貼複製的內容
P 大寫P    在遊標所在行的上方,黏貼複製的內容
 
【撤銷與回退】
u 撤銷前一個動做
ctrl + r 重作剛撤銷的那個動做
 
【搜索、查找】
:vim /pattern/ % 在當前打開文件中查找,按cw能夠打開搜索到的結果列表
/word     向後查找字符串word
?word     向上查找字符串word
n     重複前一個按鍵的動做(若是是向後查找,則n表示日後找;若是是向前查找,則n表示往前看)
N     重複前一個按鍵動做的相反動做(若是是向後查找,則N表示往前找;若是是向前查找,則N表示日後看)
*        向下搜索光標所在詞(全字匹配) 
g*        同上,但部分符合便可。 
#        向上搜索光標所在詞(全字匹配) 
g#        同上,但部分符合便可。
/\<the\>     "\>" 是一個特殊的記號,表示只匹配單詞末尾。相似地,"\<" 只匹配單詞的開頭。
 
【替換】
示例1:
:9,19s/_kitkat//
說明:從第9行到第19行,將字符串「_kitkat」替換爲空,每行只替換第一次匹配項
示例2:
:%s/abc/def/g 將當前文本中的全部abc替換成def
示例3:
:100,200s/vbird/VBIRD/g 將第100行至200行之間的vbird替換爲VBIRD
變種:
:1,$s/word1/word2/g
:1,$s/word1/word2/gc 在替換的基礎上,增長確認操做【經常使用】
 

2、多窗口命令

 【多文檔命令】
:ls 查看buffer list,即打開了多少個文件(帶文件路徑)
:files    查看vim一共打開了幾個文檔
:bn 下一個文件 
:bp 上一個文件 
:b num 切換文件(其中num爲buffer list中的編號)
若是須要在編輯的同時,打開新文檔,能夠用命令:e file或:open file
:tab split將在新標籤頁中,打開當前緩衝區中的文件(至關於把當前文件放大)
:res+20 當前窗口多顯示20行
 
【多窗口命令】
:sp能夠水平分割(水平分割成上下兩個窗口)當前窗格  :split
:vs能夠垂直分割(垂直分割成左右兩個窗口)當前窗格   :vsplit 
               ---按住ctrl-w鍵,鬆開,立刻按一次方向鍵,則光標會切換到當前窗口的 左|下|上|右 側的窗口
 
:qa 關閉全部窗口
:tab sp將在新標籤頁中,打開當前緩衝區中的文件(至關於把當前文件放大)(:tab vsp也能夠)
按住ctrl-w鍵,鬆開,立刻按一次方向鍵,則光標會切換到當前窗口的 左|下|上|右 側的窗口
:ts core_init 找到這個函數的實現(:tag core_init)
:sp filename 在當前vi視圖上打開一個分窗口顯示filename,若是filename不填,則是打開當前文件
 

3、普通命令及VIM配置命令

 【括號匹配】
% 跳到配對的括號
[[ 跳到上一個函數的{括號處
]] 跳到下一個函數的{括號處
 
【摺疊命令】
za 打開/關閉在光標下的摺疊
zM 打開全部摺疊
zR 關閉全部摺疊
 
 【剪切板】
:reg 查看剪貼板
0寄存器存放剛複製的內容,1~9寄存器存放剛刪除的內容
即yy命令將內容複製到0寄存器,dd命令不會修改該寄存器,故後面若是想複製該內容,直接用"0P便可
 
【查看歷史紀錄】
普通模式下輸入q: 顯示命令行命令歷史的窗口

 

【任務切換快捷鍵】vim

ctrl+z 將當前任務(如vim窗口)隱藏到後臺
jobs 查看全部的後臺任務
fg <任務號> 把任務切換回前臺(若是隻有一個任務,fg就能夠了,不用接任務號)
 
 【vim配置命令】
:set nu 顯示行號
:set nonu 取消顯示行號
ctrl+g  顯示文本名字,和文件的總行數
:pwd 查看當前文件的路徑
:! command 在不退出vi的狀況下,執行命令command
:scriptnames 找出vim腳本,並顯示路徑
:version 查看版本號,及支持的插件
 
【vim映射】
:map 列出全部映射命令
下面是vim的使用map的示例:
:map \p i(<Esc>ea)<Esc>     以光標未開始,至該word結束,加括號(組合鍵\p,須要快速按,中間不能間隔太長時間)(先p再\也能夠)(i進插入模式,esc退出插入模式,e移動到詞尾,a在詞尾後插入)
:map \c i{<Esc>ea}<Esc>     以光標未開始,至該word結束,加花括號
:map <F2> GoDate: <Esc>:read !date<CR>kJ     定義F2快捷鍵,在文本末尾插入Date信息(G到文本的末尾,o在文本末尾的下一行插入,<Esc>退出插入模式,:read !date執行讀取date的命令並完成插入,<CR>執行剛的命令,kJ將光標上移並將兩行鏈接起來)

map <F2> :cw<CR>                                     爲了快速打開/關閉搜索窗口
map <F3> :ccl<CR>
map <F5> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>windows

 
【vim顏色選擇】
(系統自帶的在/usr/share/vim/vim73/colors/路徑)
亮色調推薦default/delek。就是用久了眼累。
暗色調裏面koehler,molokai,inkpot,wombat,neon。從左到右對比度依次下降。我最近一直用neon,看起來很是舒服。至於molokai用這個寫過html/CSS後完全無愛。
字體我一直用droid sans mono,搭配neon配色效果最佳。
用了三年的desert+monaco字體

4、插件及其特有命令

 【ctags幫助命令】
:help ctags vim中運行這個命令,查看ctags的幫助文檔
man ctags 執行linux命令,查看ctags幫助文檔(與上面那個不是同一個文檔)
map <F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> vimrc中配置F12用於生成ctags
vi -t tags 打開 vi,而且將光標停留在 tag 定義的地方
:ts tag 同上,找到這個函數的實現,列出全部匹配到 tag 的結果
set tags=tags;/     這是告訴vim在當前目錄找不到tags文件時請到上層目錄查找。
1.安裝ctags
yum install ctags
2.設置ctags的快捷鍵,打開vim,運行下面命令,則在當前目錄下會生成tags文件
:map <F2> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
ctags的快捷鍵
ctrl-]
ctrl-o
把文件加入幫助列表的命令
.vim]$ vi doc/ 用vim打開doc目錄,輸入以下命令
:helptags. 命令沒有空格
ctags幫助
linux命令 man ctags
vim命令 :help ctags 或:h ctags
 
【taglist】
:TlistToggle vim中運行這個命令,打開/關閉taglist窗口
:help taglist.txt vim中運行這個命令,查看taglist幫助文檔
Ctrl-w 在兩個窗口之間切換
切到targlist窗口後,可使用快捷鍵:
- 摺疊單個tag
+ 打卡單個摺疊
x 將taglist放大或還原成側邊
u 更新taglist
空格 在下方顯示tag原型定義
3.安裝使用Taglist
2.打開配置文件~/.vimrc,加入如下兩行:
let Tlist_Show_One_File=1  
let Tlist_Exit_OnlyWindow=1  
3.taglist快捷鍵
 在Vim命令行下運行TlistToggle命令就能夠打開Taglist窗口,再次運行TlistToggle則關閉;
咱們能夠經過Ctrl-w快捷鍵或鼠標點擊在Taglist窗口和編輯區之間切換焦點
 
【buffer管理器MiniBufferExplorer】
按下Ctrl+h/j/k/l,能夠切換到當前窗口的上下左右窗口
 
【其餘插件:原型自動補全】
 
【cscope】
1.軟件安裝
yum install cscope
2,插件拷貝,並放入對應目錄
肯定Vim已支持Cscope後,將文件 http://cscope.sourceforge.net/cscope_maps.vim下載到~/.vim/plugin目錄。
3.生成cscope
cscope -Rbq -f cscope.out
4.快捷鍵
           Ctrl-\ s 查找全部當前光標所在符號出現過位置。
           Ctrl-\ c 查找全部調用當前光標所在函數的函數。
cw命令,就能在編輯區下面quickfix窗口看到全部查找結果的列表
:help cscope vim中運行這個命令,查看cscope的幫助文檔
man cscope 執行linux命令,查看cscope幫助文檔(與上面那個不是同一個文檔)
set cscopequickfix=s-,c-,d-,i-,t-,e- 在~/.vimrc中增長這條命令後,用ctrl-]等快捷鍵會自動跳到第一個索引到的位置
:cw 經過該命令,能夠打開「Quickfix List」窗口,經過ctrl-w能夠;退出那個窗口,須要指到那個窗口。
 
經過先生成cscope.file,再用cscope創建索引,能夠更靈活的使用scope: 

find . -type f ! -path "*/.git/*" ! -path "./*cscope*" ! -path "*/tags" > cscope.files
cscope -bkq -i cscope.filesbash

 

:cs show能夠查看當前加載的cscope   
若是vim中已經加入cscope.out的話,會與cscope.vim中的配置衝突,好比:/etc/vimrc中已經有
 
則.vim/plugin/cscope_maps.vim中的配置就會重複,結果報重複加載out文件的錯誤,解決方法是把.vim/plugin/cscope_maps.vim中加載out文件的代碼刪除。
 
cs find s/c/t/g/e/f/i/d tag
s(查找符號,不含註釋及打印)
c(查找調用,不含定義和實現)
t(這個目錄查找字符串)
g(查找定義,至關於ctags的ctrl-o)
e(當前文件查找字符串)
f(查找文件)
i(查找include該文件的文件)
d(查找該函數調用的全部子函數)
 
【配置1】其中的這句:
nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
在個人vim中沒法工做, 可是我改爲:
nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<CR><CR>
就能夠正常工做了
 
【配置2】alias cscope='find . -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.define" -o -name "*.inc" -o -name "*.S" -o -name "*.s" -o -name "*.mk" -o -name "*.cfg" -o -name "*.xml" -o -name "Makefile" > cscope.files && cscope -bkq -i cscope.files'
 
~/.bashrc

5、FAQ

 (1)vim黏貼縮進的問題:函數

解:在.vimrc中加一句:
set pastetoggle=<F9>
在黏貼代碼以前,進入insert模式,按F9,就能夠關閉自動縮進
 (2)vim的默認配置
答: /usr/share/vim/vim74/vimrc_example.vim 能夠把他默認的配置拿到咱們用戶的配置下
 
 (3)ubuntu中vim不識別方向鍵:
ubuntu預裝的是vim tiny版本,而須要的是vim full版本。執行下面的語句安裝vim full版本:
   $sudo apt-get remove vim-common
   $sudo apt-get install vim
 
 (4)SecureCRT快捷鍵
Shift + Insert      粘帖
 
 (5)【待解決的問題】
窗口中鼠標操做

參考文檔: 

 
vim寄存器:
 
IBM的VIM幫助文檔:
 
 SecureCRT配置顯示彩色:
 
windows vim IDE環境打造: http://www.itboth.com/d/QbEJry/vim
http://www.cnitblog.com/hustwei/archive/2008/05/21/44034.aspx
 

經典vim插件功能說明-安裝方法和使用方法介紹
http://www.picb.ac.cn/~xiaohang/vimwiki/tools/vim/classic_vim_plugins.pdf

http://blog.csdn.net/devil_2009/article/details/7006113

相關文章
相關標籤/搜索