在前面一篇blog(
Vim學習筆記)中介紹VIM的使用用法后,該文章達到了歷史性的最高訪問量。在上面的那篇文章中,介紹了VIM的基本用法,基本上是個人在聯系Vimtutor這個教程之后對不熟悉的指令的總結。但是,隨著學習的深入,發現掌握這些基本的命令還遠遠不夠,雖然網上有大批的資料可以下載學習,但是迫于沒有一種類似于入門級別的教程,所以還是希望有相關的從最常用最基本的知識講起的教程。目前看來,《
Learn Vim Progressively》這篇文章應該是比較好的入門級教材了吧,而酷殼則進行了翻譯,網址在這里
簡明 Vim 練級攻略(http://coolshell.cn/articles/5426.html)。以下是我的學習筆記:
1. 插入:
a: 在光標之后插入
o: 在當前行后面插入一個新行
O: 在當前行前面插入一個新行
cw: 替換從光標到后一個單詞結尾的字符。
2. 移動:
0: 移動到行頭
^: 到本行第一個不是blank的字符。(blank字符即空格,tab,換行和回車)
$: 到本行行尾
g_: 到本行最后一個不是blank字符的位置
/pattern: 搜索pattern的字符串。(搜索多個按n回到下一個)
3. 拷貝:
P:在當前位置之前拷貝(將緩沖區內的內容拷貝過來)
p: 在當前位置之后拷貝
yy: 拷貝當前行。(在某行使用之后,相當于拷貝了該行,然后到指定位置,使用P命令粘貼到指定的位置)
4.Undo/Redo
u : undo
Ctrl + r : redo
5. 打開保存
e<path/file> : 打開一個文件
w: 保存
saveas<path/file>: 另存為某個地方
x,wq: 保存(x表示僅需要保存時保存,wq則是保存)
ZZ:不需要輸入前面的冒號即可保存,此時會退出。(不同于前面的冒號+回車)
bn, bp: 同時打開多個文件的話,使用這個來切換到上一個或者下一個文件。
6. 更好
.: 輸入一個點號會重復執行上次的命令
N<command>: 重復執行command命令N次。(比如2dd表示刪除兩行,3p表示粘貼三次)
7. 更強
NG: 到第N行(比如3G,表示跳轉到第三行)另外可以使用:137跳轉到137行(感覺更方便)
gg: 跳轉到第一行(相當于1G,或者:1)
G: 跳轉到最后一行
單詞的移動:
w: 到下一個單詞的開始
e: 到下一個單詞的結尾
(如果認為分號也是一個單詞的話,使用E/W)
比如:x = (name_1, vision_3); 后面的這個分號就要注意。
%: 匹配括號,先移動光標到一個括號處,然后在命令模式下輸入%,即可跳轉到匹配的括號。
*:匹配光標到當前所在的單詞。(向下匹配)(匹配就是知道相同的單詞,比如在當前行有5個單詞test,那么按*就會尋找并跳轉到下一個單詞test的起始之處)
#:匹配光標到當前所在單詞(向上匹配)
8. 更快
一定要記住光標的移動。
eg:0y$:現跳轉到第一行,然后拷貝,拷貝到行末,
類似的,ye:開始拷貝,拷貝到笨蛋次的最后一個(e其實就是end)
y2/foo:拷貝兩個foo直接的字符串(這種用法很奇特,前面沒有講到)
還有很多時間并不一定你就一定要按y才會拷貝,下面的命令也會被拷貝:
d (刪除 )
v (可視化的選擇)
gU (變大寫)
gu (變小寫)
等等
9.Vim超能力
fa: 到下一個為a的字符處。同理,fs到下一個為s的字符處
t,:到逗號前的第一個字符處。同理,ta就是到a前的第一個字符出。
3fa:在當前行查找第三個出現的a
F和T:作用和f與t一樣,只是相反的方向。
dt": 刪除所有的內容,知道遇到了雙引號,類似的可以換成其他的如dt+任意字符。
==========================以下內容為以前沒接觸的,重點回顧===================
1. 區域選擇
<action>a<object> or <action>i<object>
<action> 可以是任何命令,如d(刪除),y(拷貝),v(可視化模式選擇).
<object>可以是:w表示一個單詞,s表示一個句子,p一個段落。也可以是特殊字符比如),}等等。
對于(map (+)("foo")),光標在第一個o的位置。
則:vi" ----對應的是<action>i<object>這種情況,v表示模式選擇,然后i表示的是不包括這個特殊字符,所以是從第一個o所在的包含在"符號中的。
其他的類似,不同的是a是要包括內容的。
vi" → 會選擇 foo.
va" → 會選擇 "foo".
vi) → 會選擇 "foo".
va) → 會選擇("foo").
v2i) → 會選擇 map (+) ("foo")
v2a) → 會選擇 (map (+) ("foo"))
塊操作
塊操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]
Windows下面是Ctrl+q而不是Ctrl+v開始塊操作。
做法是:
1. 先移動光標到某個地方。
2. Ctrl+V開始塊操作。
3. 選擇塊的范圍(此時可以用hjkl,或者%,或者Ctrl+d等等)
4. I-- Esc(選擇對應的操作,這里是插入ii,所以現I表示插入,然后--,但是這樣只是對最開始的那個起作用,要應用到所有的塊,需要使用Esc鍵)
自動提示<Ctrl+n> <Ctrl+p>
所謂的自動提示:實際上是Vim對用戶近期輸入的單詞進行統計記憶的結果,它的這個自動提示,是當你近期輸入某個單詞后,再次輸入的時候,如果輸入首單詞,使用該快捷鍵就能匹配相應單詞,從而自動補全。
如輸入下面的兩個單詞:
LaTeX
XeLaText
然后在輸入下面的這個,只輸入首單詞,在利用C+n組合,就會自動補齊。
XeLaText LaTeX
宏錄制:
qa把你的操作記錄在寄存器a內
然后@a就會重復這個被記錄的宏
@@用來重復自己的一個宏(要指定某一個特定的就要用@xx,其中xx即前面保存的名)
qaYp<C-a>q→
qa 開始錄制
Yp 復制行.
<C-a> 增加1.
q 停止錄制.
@a → 在1下面寫下 2
@@ → 在2 正面寫下3
現在做 100@@ 會創建新的100行,并把數據增加到 103.
可視化選擇v,V,Ctrl+V(這個在前面有講到)
首先的工作自然是使用這個工具來選擇了,隨便哪一種都可以。
其次選擇后就是對該模塊進行操作,編輯了。可以有
J : 把所有行都連接起來
< or > : 左右縮進
=:自動完成縮進(原始動畫中就是這個效果,看了半天發現縮進變化了)
如何在所有選中行的末尾都加入一個東東呢?
就和在前面加入--的那個例子一樣,先選中模塊,然后跳到末尾$,然后加入的話是A,加入某個就是輸入字符串了,應用到所有模塊的部分就是按下Esc即可。
分屏split和vsplit
:split: 創建分配(vsplit則是創建垂直分屏)
C-w<Direction>: Direction可以是hjkl或者方向鍵,用來不同屏幕切換
C-w_或者C-w|: 用來最大化尺寸。
C-w+或者C-w-: 增加尺寸。
分屏的使用:
1.使用大寫的O參數來垂直分屏。vim -On file1 file2
2. 使用小寫的o參數來水平分屏。 vim -on file1 file2
3. 上下分割,并打開一個新文件。 :sp filename
4. 左右分割,并打開一個新文件。 :vsp filename
5. 屏幕之間的移動:Ctrl + W + (h, j, k, l)(不同參數表示移動的方向)
比如Ctrl + W + h表示向左邊的屏幕移動。
6. 屏幕尺寸的變化。
Ctrl + W + : 表示增加高度。
Ctrl + W - : 表示減少高度
Ctrl + w = : 使得所有的屏幕有相同的高度
7. 具體的更加詳細的內容見help文檔或者http://coolshell.cn/articles/1679.html
(注,酷殼上的部分命令可能由于版本原因已失效,應該有新的快捷鍵代替)
VIM還有更多的功能需要學習,關鍵是在使用中不斷加深練習,還有強大的擴展插件,另外在瀏覽器中也有相應的擴展,可謂功能強大。后續會繼續學習,并做好筆記以及時總結學習所得。