轉自:http://www.cnblogs.com/amaoxiaozhu/archive/2012/03/23/2414007.html
用了近2年的emacs,沒想到進了公司基本就沒有機會摸了。。全都是裸環境,一次兩次還好。。
轉投vi的陣營也不只是單純的環境原因吧,感覺vi的操作更快一些,堅持用一些命令時間長了會很大的提高效率。
3.27 更新新學的幾個地方,ctags還在摸索中·0·
零 瀏覽代碼
拿到開源代碼或者類似遺留代碼的時候,閱讀是必不可少的工作,通常我喜歡先整體的瀏覽下代碼,長度,格式,是否符合個人的審美觀點,再開始學習。所以常用的第一個命令就是打開文本瀏覽器 :{} 還是多年的windows下的習慣,在着色而且隨意可以裏面查看代碼還是很爽的,一口氣把文件夾裏面的代碼文件開光,從main看起,猜到名字的就過,猜不到名字的就全部打開文件查找。自己來當IDE的功能。
一 打開文件:
與第0步不同,這裏介紹最近在用vi看代碼需要的一些命令,用了不少時間來bing到,記下來以後省得四處找
vi filename
會打開文件,並停留在上次編輯的位置
提高效率:
修改代碼時通常都會記得自己要修改的行數和修改字段的特徵:)畢竟是出問題的代碼或者經過考慮find到的,因此定位文件打開的位置可以很大的提高效率
vi +n filename 打開文件跳轉的指定行數
vi +/xx filename 打開文件,跳轉到含有內容的行
二 瀏覽
下一頁 上一頁 行首 行尾 文檔首頁 文檔末尾
Ctrl+f Ctrl+b 0 $ [[ ]]
最常用的命令就是下面這些了,這幾天用的都有這種感覺,輸入的時候拼命想按住ESC,然後按住l不放。。。
可以直接輸入數字然後輸入這些命令,例如200k 可以跳回200行
下一行、上一行 前一字符 後一字符 下一個單詞 上一個單詞
j k h l e b
當在特定行有疑問時或者需要報告的時候,用
ctrl+g 報告當前行列信息
ngg 或 :n 跳到指定的第n行
跳到第一行可以直接使用gg
H 移到屏幕頂端
M 移到屏幕中間
L 移到屏幕底端
三 編輯
編輯,沒有廢話,非常非常非常喜歡vi的輸入,所有想做的功能全都有了
i 光標處插入
I 句首插入
a 光標後插入
A 句尾插入
o 新起一行插入
J 下一行併入本行
提高效率:
:set ai 開啓自動對齊,寫代碼比用吧~
r 替換指定位置的字符 不會進入插入模式,替換幾個字母的最完美方案,強力推薦使用
R 替換模式
s 刪除當前字符後插入,也很常用 可以當作需要替換字符後的進入編輯模式的r :) 之前一直在用s+esc來做字符替換。。直到發現了強推的r
cc 刪除整行的內容並進行編輯
增加vim配置:
創建或編輯 用戶目錄下的.vimrc文件
增加 set autoindent
set softtabstop=4
自動對齊和軟tab鍵。
刪除
x 或 dl 刪除當前字符
X 或 dh 刪除前一字符
dd 刪除當前行
d]] 刪除至文檔末尾
拷貝粘貼 這個也是個程序員常乾的事,類似的語句,拷貝下來,粘貼上三四行,再用正則改成自己需要的單詞
yw 拷貝一個單詞
yy 拷貝一行
nyy 拷貝n行
yG 拷貝到文章末尾
y1G 拷貝到文章開頭
"xnyy 拷貝n行給變量x(任意字母) 非常喜歡的功能,輸出函數可以拷貝成p,這樣不會不用當前複製了一段別的東西,還有回去複製輸出了:)
:reg 拷貝給哪個變量不記得了就可以用查看信息的命令~
p 粘貼與yy命令對應
拷貝選擇的多行
v 進入 visual mode 移動光標就是選中文本了。V 則是以行爲單位
y 拷貝 d 刪除
:s/old/new/g 輕鬆替換一行裏面的全部old—new,如果只替換行內的第一個,去掉最後的/g,都是通用的正則了。
如果要替換指定範圍內的行數,前面簡單的加上就可以了
:80,84s/create/delete/g 其中.表示當前行,#表示最後一行
全部替換的話,可以使用
:%s/old/new/g
查找
最常用的功能之一了,看到幾十行前面的代碼要去修改,但估計不出來行數的時候,可以直接看下特徵,然後find~
/xx 查找後面的xx
?xx 查找前面的xx
n 繼續執行搜索
N 反向執行搜索
撤銷
u 取消上次操作
ctrl+R 恢復u的動作
四、 功能命令
:w 保存
:q 退出
:x 保存並退出 一個快捷命令可以讓程序員節省很多時間呀,我悲催的輸入了n+1次wq之後,發現原來它們合起來叫x
ZZ 保存並退出 發現了一個新的,這個更好用!
五、 小技巧
歷史命名
:ctrl+p 這個很顯然是傳統的用法了
: ctrl+f 最近歷史命令 這個是新發現的,很好用!
將命令command的輸出結果放到當前行
:r!command 可以用於插入一些本機信息 如 :r!ifconfig eth0 grep "inet " 就把本機的IP信息直接放進了vi的文檔中啦。
顯示光標下單詞的man內容
K
顯示光標下字符的Unicode的16進制值
g8
書籤
瀏覽代碼時需要馬克一下的時候:
mX : X爲任意字母
跳到書籤:
'X
保存並退出 : ZZ 很方便 哦
代碼移動
:set sw ? 查看代碼一次移動的個數
:set sw=4 設定4位(寫代碼還是4位比較重要啊:)
:le | :ce | :ri 定位左中右
六、 多文檔編輯
之前覺得vi的多文檔編輯用着很不方便,現在接觸了幾個,用過了MiniBufExplorer,發現看着不是很舒服。還是使用ls比較好看一些。
:ls 展示全部的打開文檔
:xn 切換到向下的第x個文檔
n ctrl+6 : 切換到第n個buffer
ctrl+6 或 :e# 回到前一個編輯文件
分屏
:new xxx
ctrl+w s 對當前文檔內容分屏顯示
ctrl+w q 關閉所處分屏
ctrl+w o 僅顯示當前分屏內容
ctrl+w j k 上下選擇分屏
個人覺得最值得用的命令就是ctrl+w w 快速在分屏的兩個屏幕中切換
下面寫的還沒用過~看了大家的分享覺得這幾個還不錯
:n1,n2 co n3: 將n1行到n2行之間的內容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內容移至到第n3行下
:n1,n2 d: 將 n1行到n2行之間的內容刪除
:n1,n2 w!command: 將文件中n1行至n2行的內容作爲command的輸入並執行之,
若不指定n1,n2,則表示將整個文件內容作爲command的輸入