mysql Ubuntu wordpress Windows php 云计算 shell nginx 开源 编程 linux Firefox 微软 Android apache 程序员 Python centos java google

【VIM使用技巧】常用操作和技巧

1.移動光標

在當前行裏面有效的移動光標,註意這些字母都可以配合刪除、移動等操作。 
fx:移動光標到當前行的下一個 x 處。很明顯,x 可以是任意一個字母,而且你可以使用 ; 來重復你的上一個 f 命令。 
tx:和上面的命令類似,但是是移動到 x 的左邊一個位置。(這真的很有用) 
Fx:和 fx 類似,不過是往回找。 
:jumps 看你過去移動光標的歷史 

% 跳轉到配對的括號去 
[[ 跳轉到代碼塊的開頭去(但要求代碼塊中'{'必須單獨占一行) 
w:光標往前移動一個詞。 
e:跳到一個詞的尾部,然後從尾部跳到下一個詞 
b:光標往後移動一個詞。 
0:移動光標到當前行首。 
^:移動光標到當前行的第一個字母位置。 
$:移動光標到行尾。 
):移動光標到下一個句子。 
( :移動光標到上一個句子。 
'' 跳轉到光標上次停靠的地方, 是兩個', 而不是一個" 
gd 到達光標所在處函數或者變量的定義處。 
gf 跳轉到相應的頭文件。無法找出頭文件的解決方法是:set path+=xxx,xxx是頭文件所在目錄。 
K 在 man 裏面查找光標當前所在處的詞。 
Ctrl+b:向上移動一屏。 
Ctrl+f:向下移動一屏。 
G:到文件尾 
numG:移動光標到指定的行(num)。(比如 10G 就是到第 10 行) 
gg:到文件首 
H:移動光標到屏幕上面 
M:移動光標到屏幕中間 
L:移動光標到屏幕下面 
*:讀取光標處的字符串,並且移動光標到它再次出現的地方。 
#:和上面的類似,但是是往反方向尋找。 
j 向下 
k 向上           k 
l 向右       h        l            ==>  hjkl  <=>左下上右 
h 向左           j 


2.查找

/pattern:從光標開始處向文件尾搜索pattern 
?pattern:從光標開始處向文件首搜索pattern 
n:在同一方向重復上一次搜索命令 
N:在反方向上重復上一次搜索命令 
:s/源串/目標串/g 替換當前行中所有符合條件的字符串 
:行號1,行號2s/源串/目標串/g 在指定行中進行替換 
:%s/源串/目標串/g 全文替換 
ma:在當前光標的位置標記一個書簽,名字為 a。書簽名只能是小寫字母。你看不見書簽的存在,但它確實已經在那裏了。大寫字母(如A)是全局變量,在打開其他文件時,輸入A則跳轉到原來文件的部分 
`a:到書簽 a 處。註意這個不是單引號,它一般位於大部分鍵盤的 1 的左邊。 
`.:到你上次編輯文件的地方。這個命令很有用,而且你不用自己去標記它。 
:marks 查看標記列表 
復合搜索:例如,要想搜索出現在字符串 {file}+1 後面的字符串 echo,應該使用 /{file}+1/;/echo/。復合搜索。例如,要想搜索出現在字符串{file}+1 後面的字符串 echo,應該使用 /{file}+1/;/echo/。

3.復制粘貼剪切

有效的移動大段的文本 
v:按字符選擇。 
V:按行選擇。這在你想拷貝或者移動很多行的文本的時候特別有用。 
Ctrl +v:按塊選擇。 
vi[ 選擇一對 [] 中的所有字符 

vi( 選擇一對 () 中的所有字符 

vi< 選擇一對 <> 中的所有字符 
vi{ 選擇一對 {} 中的所有字符 
vit 選擇一對 HTML/XML 的標簽內部的所有字符 
在選擇模式的時候使用上面所述的方向鍵和命令(motion)。比如,vwww,會高亮光標前面的三個詞。Vjj 將會高亮當前行以及下面兩行。 
一旦你高亮了選區,你或許想進行一些操作: 
d:剪貼選擇的內容到剪貼板。 
y:拷貝選擇的內容到剪貼板。 
c:剪貼選擇的內容到剪貼板並且進入插入模式。 
如果你很清楚的知道你想拷貝或者剪切什麽,那你根本就不需要進入可視選擇模式。這樣也會節省時間: 
d{motion}:剪切 motion 命令跨過的字符到剪貼板。比如,dw 會剪切一個詞而 dfS 會將從當前光標到下一個 S 之間的字符剪切至剪貼板。 d5w,則是剪切5個詞,d0則剪切光標的前一個詞 
y{motion}:和上面類似,不過是拷貝。 
c{motion}:和 d{motion} 類似,不過最後進入插入模式。 
dd:剪切當前行。 
yy:拷貝當前行。 
cc:剪切當前行並且進入插入模式。 
D:剪切從光標位置到行尾到剪貼板。 
C:和 D 類似,最後進入插入模式。 
x:剪切當前字符到剪貼板。 
:和x類似,不過最後進入插入模式。 
y+w 復制光標所在的位置到整個單詞所在的位置 

使用多重剪貼板 
很多編輯器都只提供了一個剪貼板。VIM 有很多。剪貼板在 VIM 裏面被稱為寄存器(Registers)。你可以列出當前定義的所有寄存器名和它們的內容,命令為":reg"。最好使用小寫字母來作為寄存器的名稱,因為大寫的有些被 VIM 占用了。使用寄存器的命令為雙引號 "。 
比如:我們要拷貝當前行到寄存器 k。你應該按 "kyy。(你也可以使用 V"ky。為什麽這樣也可以呢?)現在當前行應該已經存在了寄存器 k 裏面直到你又拷貝了一些東西進入寄存器 k。現在你可以使用命令 "kp 來粘貼寄存器 k 裏面的內容到你想要的位置。 
"ayy 將當前行復制到寄存器 a 中 
"ap 將寄存器 a 中的內容粘貼到光標之後 
l :registers 查看所有寄存器的內容 
l 通常情況下,寄存器 + ( " + Shift+= )對應X下的剪貼板。您在其它程序中復制的內容,可以使用 "+p 粘貼到Vim中;您在Vim中,可以使用 "+y 將內容復制到剪貼板,再粘貼到其它程序中 
l 沒有指定寄存器時,Vim使用“無名寄存器”存儲內容
要查找單詞is,而不匹配miss中的is,則使用//<is/>/c ,/<表示以此為開頭,/>表示以此為結尾,/c表示忽略大小寫(/C為區分大小寫)。 

4.刪除(c命令和d命令就差一個插入操作)

c{motion}:刪除 motion 
命令跨過的字符,並且進入插入模式。比如:c$,這將會刪除從光標位置到行尾的字符並且進入插入模式。ct!,這會刪除從光標位置到下一個嘆號(但不包 
括),然後進入插入模式。被刪除的字符被存在了剪貼板裏面,並且可以再粘貼出來。 

例如:cw:刪除光標所在處的詞並插入。(c —— change) 

d{motion}:和上面差不多,但是不進入插入模式。 
vim中常用的刪除文本命令: 
c+c 刪除所在行,並插入 
d+d 連按兩次d,可將光標所在的行刪除,若連續刪除,可以按住d不放 
d+w 刪除光標所在的單詞,若是光標在兩字之間,則刪光標後的一個詞 
D 將光標所在行後面所有的單詞刪除 
x 將光標所在位置後一個字符刪除 
X 將光標所在位置前一個字符刪除 
daw 刪除光標下的普通單詞以及其後的空格 
ciW 刪除光標下的以空格分隔的“單詞”並進入插入模式 (i 表示 inner,不刪除單詞後的空格)  
ci[ 刪除一對 [] 中的所有字符並進入插入模式 
ci( 刪除一對 () 中的所有字符並進入插入模式 
ci< 刪除一對 <> 中的所有字符並進入插入模式 
ci{ 刪除一對 {} 中的所有字符並進入插入模式 
cit 刪除一對 HTML/XML 的標簽內部的所有字符並進入插入模式  

5.插入

vim中命令行模式切換到輸入模式,進行插入: 
i:在當前字符的左邊插入 
I:在當前行首插入 
a:在當前字符的右邊插入 
A:在當前行尾插入 
o:在當前行下面插入一個新行 
O:在當前行上面插入一個新行 
:ab 替代符 原始信息--自定義縮略符號。例如  :ab mymail warmbupt@gmail.com 以後在任意處輸入mymail然後按空格就可以插入這個信息了 

6.修改

r 修改光標所在字符 
R 修改光標所在位置的字符,可以一直替換字符,知道按下ESC鍵 
u 表示復原功能 
U 取消對行所作的所有改變 
>> 縮進所有選擇的代碼 
<< 和上面類似,但是反縮進 
:1,20s/^//////g 連續行註釋,註釋第1行到第20行。(其中"^"表示在行首插入,"//"為要插的字符(要轉義),"g"表示執行替換時不確認) 
:r 文件名 直接將其他文件或命令執行內容導入當前文件中(在註釋中寫入當前系統內核信息,只需:r !uname -a) 
v% = 在一遍的括號處按此組合鍵,括號中內容選定並按照C語言格式縮排,光標會自動跳到XXXX()函數的定義處, 變量, 結構, 宏, 等等, 都可以的。
v是visual模式,%是跳到與其匹配的地方,=為源文件格式化。 
xp   前後交換兩個字符 
ddp 上下交換兩行(這兩個挺好理解的) 
增加註釋:(一個操作應用在多行)Ctrl + v 
定位到開始行,然後選定需要的行,然後執行 I 命令,然後輸入 # 或 //,然後按 
Esc鍵兩次,即可把註釋操作應用到所有選定的行,記住選定不能使用v指令,而應該使用Ctrl + v 
(清除註釋請參考上面的方法)(v是按行選定,Ctrl + v 是按照列選定) 
:line1,line2s!/s*//.*!!                         去掉line1到line2之間的//註釋 
:line1,line2s!/s*//*/_./{-}/*//s*! !     去掉line1到line2之間的/* */註釋 
:s%/^M//g  將DOS格式文本轉成Unix格式文本,其中^M 必須是同時按 Ctrl+V+M ,表示回車。 
gg=G  格式化整個文件 
重放搜索模式:假設要在文件中搜索以單詞 Martin 開頭的行並對每個匹配添加前綴 Mr 和後綴 Wicks,那麽進入命令模式,輸入 vi 命令:%s/^/(Martin/)/Mr /1 Wicks/g,然後按回車。  
下面把這個命令分解開解釋一下:

:%s — 指示 vi 執行替換。
/ — 模式分隔符。
^/(Martin/) — 尋找以字符串 Martin 開頭的行並把這個字符串保存在緩沖區 1 中。
/ — 模式分隔符。
Mr /1 Wicks — 把找到的字符串替換為字符串 Mr,加上緩沖區 1 中的內容,再加上字符串 Wicks。
/ — 模式分隔符。
g — 全局修改(即修改所有匹配的地方)
 

 

7.文件操作

e 加載新的文件 
w 寫文件,它是保存到臨時文件中,直接退出,並沒有保存到文件中的 
w! 如果想寫只讀文件,使用它強制寫入文件 
q! 不問你是否保存文件,強制退出 
set 可以設置vim的某些特性。取消設置,使用 set none 
Z+Z 保存並退出vim 
直接利用命令修改文件:例如按 Escape,輸入 :1,$!sort 並按回車,這個文件就排序了 
還可以在 Shell 命令前面加上從當前遊標位置開始希望操作的行數。方法是按 Escape,然後輸入指定行數的數字,然後輸入兩個驚嘆號(!!),最後輸入 UNIX 命令:4!!awk '{print "New text",$0}'  
保存部分內容:按 Escape,然後輸入 :start,endw file,其中的 start 是當前文件中要保存的第一行,end 是要保存的最後一行,w 表示希望寫到另一個文件中(或者覆蓋現有的文件),file 是指定的部分要保存到的文件。

8.宏

可以將一系列的操作錄制為一個宏,然後執行它 
q<宏名稱> 開始錄制宏。宏名稱為一個字符 
q 錄制中按下“q”鍵,結束錄制 
@<宏名稱> 執行宏 
可以使用 :registers(寄存器列表) 命令查看已記錄的宏 

9.統計:

全文字數:g+Ctrl+G 
文章行數和當前位置占總行數的百分比:Ctrl+g 
10.Tips in VIM 
Tips: 
1,當你不知道你是處於編輯方式還是命令方式時,可以使用Esc鍵退出命令方式,然後進行操作。 
2,在使用vim時,萬一發生了系統掉電或者突然關機時,可以使用恢復命令,如編輯file文件時突然斷電或系統崩潰後的恢復命令:$ vi file -r 
3,啟動vim的時候使用vim -u /root/vimrc.vim,並且使用:vertion可以查看到系統vimrc配置文件,用戶vimrc配置文件等的路徑 
4,想查看設置的快捷鍵,輸入:map即可看到。 
如果要取消此快捷鍵,只需輸入命令::unmap ^P 
5,&XXX為否定XXX這個變量,在寫vimrc的function時可以使用,例如開關高亮顯示的函數為: 
function ToggleHLSearch() 
if &hls 
set nohls 
else 
set hls 
endif 
endfunction 
調用函數用::call ToggleHLSearch() 
6,縮略語::ab sammail sam@163.com 在輸入模式下錄入"sammail",再敲任意字母符號或者回車空格, "sam @ 163.com" 若想暫時取消則使用Crtl+V在後邊,這樣空格就不會導致補全了。 
7,執行UNIX/Linux命令不需退出Vim/Vi :!命令 
8,:h quickref 翻到VIM Quick Reference頁(有用!)。 
9,環境變量%表示當前文件名。 
10,# 加密(小心使用,不要忘了密碼) 
:X : 然後vim會提示你輸入密碼 
:wq(只有保存密碼才生效) 
11,使用數字也是 VIM 強大的而且很節省時間的重要特性之一。在很多 VIM 的命令之前都可以使用一個數字,這個數字將會告訴 VIM 這個命令需要執行幾次。比如: 
* 3j 將會把光標向下移動三行。 
* 10dd 將會刪除十行。 
* y3″ 將會拷貝從當前光標到第三個出現的引號之間的內容到剪貼板。 
數字是擴展 motion 命令作用域非常有效的方法。 
12,g 統計字數 
13. map可以進行鍵盤映射,unmap取消 
14.你可以快速處理 '、"、()、[]、{}、<> 等配對標點符號中的文本內容,包括更改、刪除、復制等。

ci'、ci"、ci(、ci[、ci{、ci< - 分別更改這些配對標點符號中的文本內容
di'、di"、di(、di[、di{、di< - 分別刪除這些配對標點符號中的文本內容
yi'、yi"、yi(、yi[、yi{、yi< - 分別復制這些配對標點符號中的文本內容
15. 打開並排的窗口 :split filename 縱向:vsplit filename  控制寬度:15 split  (split可以簡化為sp) 跳轉:Ctrl­+w Ctrl­+w  增加或減小:Ctrl­w – or Ctrl­w + 等大:Ctrl­w = 
16.代碼折疊:

zf12j 折疊13 行 (12 + current line),zo打開,zk,zj在下一個和上一個折疊處跳轉,zd刪除折疊,zm關閉折疊 
16.希望 vi 不區分大小寫,那麽可以使用 :set ignorecase命令。使用 :set noignorecase 恢復區分大小寫。還可以使用簡寫(:set ic 和 :set noic)。 

附:VIM模式總結(http://denven.blog.hexun.com/11922673_d.html)

Part1. 六種基本模式 :  

1.Nomal Mode 普通模式 可以輸入所有普通的編輯命令,啟動編輯後默認處於普通模式,接受編輯命令。 

2.Insert Mode 插入模式 輸入的內容會插入到當前緩沖區。這是我們最熟悉的普通編輯器的編輯模式。 

3.Visual Mode 可視模式 與普通模式相似,但移動光標時光標會擴展高亮區域,非光標命令則可作用於高亮區域。 
我將它分為三種具體的情況來理解。(圖中$表示行尾) 

3.1. 普通可視模式。 按 v 進入,不單獨針對行或列,作用範圍為光標最初位置與光標當前位置間的內容。 
....cursor starts here|---------------------------------------------------------------$| 
+-------------------------------------------------------------------------------------------$| 
|---------------------------------------------------------------------------------------$| 
+---------------------------------------|the cursor stops here,maybe some content continued 

3.2. 可視“行”模式。按 V 進入,光標移動作用與光標所在的整行內容。 
如果光標開始位置所在行行號為i,選定時行號為j。 
則作用內容為[i,j]行的內容。如圖所示: 

+----------------------------------------------------------starts here|--------------$| 
|----------------------------------------------------------------------------------------$| 
|-------------------------------------------------------------------------------------------$| 
+---------------------------------------$|the cursor stops here 

3.3 可視“塊”模式。 按 CTRL-V 進入,gVim 則按 CTRL-Q(大寫) 進入。 
選定範圍為光標最初點和光標移動後所在位置決定的矩形區塊內。 

cursor begin|-------------+ +----------------| end 
|-------------| |----------------| 
|-------------| |----------------| 
|-------------| |----------------| 
+-------------| end begin |----------------+ 

exmaple 1 example 2 

4.command Mode 命令行模式 在底行可以輸入一行命令,也可稱作底行模式完成。按冒號進入命令行模式。我通常把它當作時普通模式的特例。因為可執行的命令太少。 

5.ex Mode Ex編輯器模式 以: 開始Ex模式,與命令行模式類似,但是命令完成後,會繼續停留在該模式下。 

6.Select Mode 選擇模式 gVim中鼠標選中的部分會在底下提示為“選擇”。 

Part2. 五種附加模式:  

1. 操作符等待模式:我尚未理解所謂的操作符指什麽。 
2. 替換模式:可以認為是插入模式的特殊情況。 

在插入模式下,按 即回到一種臨界的普通模式,這時可以切換其他模式,可以執行命令,但是完成命令後會立即返回至插入模式。例如: 

3. 插入普通模式 按 後執行一次編輯命令(即使是非a,i,A,I,o,O之類的命令)後進入插入模式。 
4. 插入可視模式 按 後不執行編輯命令,而按鍵進入可視模式,可視選擇後執行一條命令(同上)就返回到插入模式。 
5. 插入選擇模式 按 後可以用鼠標進行選擇,選擇結束(點擊鼠標)就返回插入模式。

延伸阅读

    评论