寫在前面的話:
三年前開始接觸vim覺得很不好用,在開發IDE滿山遍野的時代,傳統vim工具又能有什麼優勢呢?
在公司看到一技術牛人使用vim信手拈來如虎添翼,對vim大愛,三年前已開始學習使用。
------------------------------------------------------------------------------------------
安裝vim包:
sudo apt-get install vim
普通用戶到超級用戶的切換:
sudo su
退出超級用戶:
ctrl+d 或者exit
vim有三種常用模式:普通模式(默認)、編輯模式、命令行模式。
普通模式到編輯模式:i 退回普通模式:esc按鍵(escape)
普通模式到命令行模式用:(冒號) 退回普通模式:esc按鍵(escape)
:w ——內存中的東西寫入到磁盤。相當於保存
:q ——退出編輯器vim
:wq ——保存,退出
vim的基本操作
dd ——刪除一行
cc ——修改一行
d 2 w ——從光標所在處開始,刪除兩個單詞
dG ——從光標所在處,一直刪除到結尾
u ——撤銷(undo)
:h ——vimhelp
:bd ——bufferdelete:刪除緩衝區,關閉幫助內容
:h bd ——查看關於bd的解釋文檔 bdhelp
在help文檔裏面,當光標移動到鏈接(如tutor)的地點時,用ctrl+右方括號 打開鏈接;用ctrl+o關閉鏈接。
vimtutor ——bash命令,vim教程
粘貼和複製:
shift+v ——選中光標所在行
按j、k選中多行
d ——剪切
y ——(yank)複製,原來的文本保留
p ——(past)粘貼
在一個文件裏打開兩個文件:
:vnew ——豎着打開兩個文件
:new ——橫着打開兩個文件
:bd ——光標光標所在的文件
ctrl+ww ——光標在窗口間切換
關閉vim的快捷鍵:shift+zz 相當於:wq!
在vim中用 / woed ——查找
n ——查找下一處
N ——查找上一處
:3 ——跳轉到第三行
u ——撤銷undo
ctrl+r ——返回 redo
vim的配置操作:
set nu ——顯示行號
set nonu ——取消顯示行號
set ai ——自動縮進(auto indent)
set noai ——取消自動縮進
map <tab>:bn<cr> ——按下tab執行:bd的功能:影像
這些設置都可以寫到一個配置文件裏,成爲默認的規則。在/home/shsf/.vimrc 裏面進行配置。在.vimrc(隱藏文件)裏面雙引號表示註釋
關於:bn ——已經用vim打開了文件a。命令行裏面輸入:e (編輯)或者:o(打開)另一個文件。這樣用:bn切換緩衝去。用來在兩個文件的切換顯示。:bd只關閉當前緩衝區而:wq是關閉vim。
vim的插入模式的快捷鍵
ctrl+n ——聯想補齊一個單詞(這個單詞在本文件中已經出現過)
ctrl+x+l ——行補齊,輸入行首字母可以補齊一行
ctrl+x+k ——字典功能,輸入單詞的前幾個字母,顯示字典裏的相關單詞
字典需要的.vimrc配置內容:
set dictionary+=~/.vim/dict/simple
set dictionary -=/usr/share/dict/words dictionary +=/usr/share/dict/word
後兩個功能的實現需要一些插件。還有象taglist (象目錄一下的顯示在一旁)、snipmate(用簡單的幾個字母顯示一個小的片段,比如輸入fun按下tab後就顯示處函數的結構)
怎樣得到插件?
git clonegit://github.com/happypeter/peter-vim.git 得到所需的插件
然後把peter-vim改名爲.vim(隱藏文件)並移動到自己的HOME即/home/shsf/下
(讀裏面的readme文件)
vim的錄音
在normal mode下輸入一個q在輸入任何一個字母就進入recording列入按下qq後面的q表示記錄區。之後對vim的操作都被記錄下來包括進入insert mode 。退回到normal mode以後按q退出recording。還在normalmode下按@+q播放處理。就是把以上做的重複做一遍。
vimdiff a b ——用vim以字母爲單位顯示文件a和文件b的不同(bash命令)
:diffsave ——在vim中查看文件的更改內容,高亮顯示緩衝區裏跟硬盤文件的不同(同一個文件而言的)
jj as esc ——用map完成配置。這樣方便vim操作。
locate filename ——定位文件,顯示文件的絕對路徑。
關於make
在工程比較大的時候,調試過程中每次gcc後面的文件都要寫,並且很多。方便起見可以用make。在工程的目錄下執行如下操作
vim makefile 或者vim Makefile 並輸入內容(第二行要tab開頭)
all:
gcc main.c hello.c hello.h
clean:
rm –rf a.out hello.h.gch
插入文件名的快捷鍵: ctrl+x+f
這樣以後在bash下執行make就可以執行gcc操作了
執行make clean 就執行rm –rf a.out hello.h.gch了
在vim中 :make可以執行bash中的make命令對文件進行編譯。如果有錯誤。回車後返回vim。 :cw(或者:cwindou)可以在vim下方開闢一個新的小窗口顯示錯誤信息。
:cn和:cN高亮行在多個錯誤信息上上下移動。回車 光標跳轉到程序裏對應的錯誤位置
:cclose 關閉quickfix(剛纔的錯誤信息顯示窗口)
在vim中執行bash命令 :!command 回車就可以返回vim
在bash中返回上一次的路徑 cd -
vim常用快捷鍵
normal mode |
|
移動光標 |
h j k l |
ctrl+f |
forward 向前翻頁 |
ctrl+b |
backward 向後翻頁 |
ctrl+u |
up 向上移動半屏 |
ctrl+d |
down 向下移動半屏 |
0 |
the first number 移動到行首字符 |
$ |
移動到行尾字符 |
shift+h |
head 移動光標第一行 |
shift+m |
middle 移動到中間行 |
shift+l |
low 移動到最下一行 |
gg |
到首行 |
G |
最後一行 |
5<cr> |
到第5行 |
/word |
查找word |
n |
向下再查找word |
N |
向上再查找word |
x X |
x 後前刪除(del);X向前刪除(backspace) |
dd |
刪除一行 |
5dd |
刪除光標開始向下的5行 |
d1G |
刪除光標以前的 |
dG |
刪除光標以後的 |
yy |
複製(參考刪除) |
nyy |
|
y1G |
|
yG |
|
p P |
p向下粘貼;P向上粘貼 |
u |
undo |
ctrl+r |
redo |
. |
小數點:重複上一步操作 |
shift+v |
行選 |
ctrl+v |
塊選 |
insert mode |
|
ctrl+n |
單詞補齊(以前出現過) |
ctrl+x+l |
行補齊 |
ctrl+x+k |
字典功能(用ctrl+n/p換詞) |
commend mode |
|
:set nu |
number |
:set nonu |
no number |
:set ai |
auto indent |
:set noai |
no autoindent |
shift+zz |
:wq! |
:100,200/a/b/g |
100到200行間的a換成b |
:1,$s/a/b/g |
全換 |
:1,$s/a/b/gc |
全換有提示等用戶確認 |
多窗口 |
|
:sp |
不加文件名再代開已打開的文件,也可以加文件名,用:q關 |
ctrl+ww |
光標窗口切換 |
:vnew (filename) |
豎着再代開一個新窗口,用:bd關 |
:e或:o |
打開一個文件覆蓋原先的,用:bd關,:bn切換 |
vim技巧:
如果要講vim裏的一個a字符改成c ——講光標移到a處,然後按r放開後再按c。
註釋一行 ——ctrl+c
註釋一塊:塊選然後 ctrl+c
取消就是一個 u
交換兩個相鄰字母的位置:按x然後按p (剪切再粘貼)
taglist ctags nerdtree snipmate
1. taglist(標籤列表) :
在vim中執行 :Tlist 會在窗口的左半部分出現一個關於vim里程序的提綱。
用ctrl+ww 把光標在兩個窗口直接切換
在taglist中移動光標到函數名<cr> 在右邊查看函數體;ctrl+o 返回。
再執行 :Tlist 退出。
/home/shsf/.vimrc中的相關配置 map ,t :Tlist
2. ctags
如果想從程序中的函數名去查看對應的函數體語句:
在bash中執行命令ctags hello.c hello.h main.c(自己關心的文件)
如此後生成一個名爲tags的文件。之後
在vim中就可以把光標移動到函數名上ctrl+】跳轉到對應函數體;ctrl+o返回。
3.nerdtree
命令 :NERDTreeToggle
/home/shsf/.vimrc中配置 map ,n :NERDTreeToggle
也是在窗口左半邊上顯示列表。
ctrl+ww光標在兩個窗口間實現切換
在左窗口移動光標到函數或宏定義名字上<cr> ,在右側實現對應顯示
4. snipmate(小片助手)
實現輸入幾個字符後按tab出現一小片對應文字的功能,配置文件位於
/home/shsf/.vim/snippets/c.snippets
格式如下
#incude<...> 註釋行,頂頭的#表示註釋
snippet inc
#include<${1:studio.h}>${2}
說明如下:snippet爲固定格式 inc是要輸入的提示字符。當有inc輸入並按下
tab按鍵是就顯示下面的內容 其中$表示下一個tab跳轉的位置,數字1表示tab的順序序號。冒號後面的的內容爲默認內容,如果確認內容就按tab到下一處,否則可以直接修改。
map與imap的區別:
當兩個映射以相同的字符順序開始,它們是含糊的.
例如:
:imap aa foo
:imap aaa bar
當 Vim 讀如 "aa", 它將需要取得另外一個字符才能決定是否是 "aa" 或是 "aaa"
應該被映射. 這意味這當輸入 "aa" 以後映射還不會展開, Vim還在等待另一個字符.
如果你輸入一個空格, 那麼 "foo" 將被插入, 而不是空格. 如果你輸入一個"a",
那麼"bar" 將被插入.
vim中全局查找替換
%s /a/b/g ——把所有的a都換成b
%s/\/home\/shsf\//a/g ——把/home/shsf/路徑換成a(/需轉義)
把光標移動到 { 處。按%光標會自動跳到與之成對的 } 上面。反之也可以。
把函數體摺疊起來:
把光標移動到函數開始的 { 處, 然後(normal mode)輸入zf%——創建函數摺疊;
在已經摺疊的加號位置輸入 zc ——打開摺疊的函數。
當要把打開的函數再摺疊就輸入 zx ——關閉(第二次摺疊)
shift+v塊選以後,輸入 zf ——實現塊摺疊。
塊選 輸入 > ——縮進
塊選 輸入 < ——縮進返回
在insert mode下對齊函數語句:
ctrl+t 往右移動對齊
ctrl+d 往左移動對齊(設置tab爲4個空格,而某行只縮進了3個空格。這時執行ctrl+t可以再縮進一個空格達到對齊的效果)
如果需要對函數進行註釋,可以講光標移動到函數名處,執行:Dox 給出註釋格式,方便的添加註釋內容。包括主題變量和返回值。
vim常用快捷鍵
normal mode |
|
移動光標 |
h j k l |
ctrl+f |
forward 向前翻頁 |
ctrl+b |
backward 向後翻頁 |
ctrl+u |
up 向上移動半屏 |
ctrl+d |
down 向下移動半屏 |
0 |
the first number 移動到行首字符 |
$ |
移動到行尾字符 |
shift+h |
head 移動光標第一行 |
shift+m |
middle 移動到中間行 |
shift+l |
low 移動到最下一行 |
gg |
到首行 |
G |
最後一行 |
5<cr> |
到第5行 |
/word |
查找word |
n |
向下再查找word |
N |
向上再查找word |
x X |
x 後前刪除(del);X向前刪除(backspace) |
dd |
刪除一行 |
5dd |
刪除光標開始向下的5行 |
d1G |
刪除光標以前的 |
dG |
刪除光標以後的 |
yy |
複製(參考刪除) |
nyy |
|
y1G |
|
yG |
|
p P |
p向下粘貼;P向上粘貼 |
u |
undo |
ctrl+r |
redo |
. |
小數點:重複上一步操作 |
shift+v |
行選 |
ctrl+v |
塊選 |
insert mode |
|
ctrl+n |
單詞補齊(以前出現過) |
ctrl+x+l |
行補齊 |
ctrl+x+k |
字典功能(用ctrl+n/p換詞) |
commend mode |
|
:set nu |
number |
:set nonu |
no number |
:set ai |
auto indent |
:set noai |
no autoindent |
shift+zz |
:wq! |
:100,200/a/b/g |
100到200行間的a換成b |
:1,$s/a/b/g |
全換 |
:1,$s/a/b/gc |
全換有提示等用戶確認 |
多窗口 |
|
:sp |
不加文件名再代開已打開的文件,也可以加文件名,用:q關 |
ctrl+ww |
光標窗口切換 |
:vnew (filename) |
豎着再代開一個新窗口,用:bd關 |
:e或:o |
打開一個文件覆蓋原先的,用:bd關,:bn切換 |