不要試圖一次記下很多
每次掌握最需要的兩三個技巧
然後多多熟悉 嗯 這樣總有一天 突然發現你是vim達人了
-----------------------------------------------
寫在前面:
vim是一款相當出色的編輯器(或者已經超越了編輯器的範疇),現在覺得使用滑鼠是件很麻煩的事。不由自主的會在word中按Esc,也會在UE中按:q,好奇怪
下面主要介紹了vi最常用,也最有用的tips,比如”fx”命令找到當前行中下一個字母x,比如”`.”返回上次編輯的地方,比如”ma”插入一個標籤a,並使用”`a”來返回到該標籤,還有”shift+c”刪除到行末並直接進入插入模式….
——————————我是分割線———————-
vim模式與命令
通常模式(n) 在其它任何一個模式下,用ESC或者 ctrl+c 鍵可以退到通常模式
插入模式(i) 在這個模式下,vim像一個常見的編輯器.在通常模式下,用i或者a可以進行本模式,當然,還有一些其它命令也可以
可視模式(v) 在這個模式下,可以使用hjkl進行選擇.然後進行copy,paste或者其它操作. 在通常模式下,用v命令進入可視模式
塊操作模式(V) 這是塊操作模式. 在通常模式下,用ctrl+v進入本模式
修改模式(R) 這是改寫的模式.很多軟體法用insert鍵來完成這個切換.在vim中,從通常模式用R即可進入取代模式
擴充命令模式(ex) 這是命令執行模式 在通常模式下用:切換到此模式
Hint: 使用時一般處於通常模式或者插入模式,需要Copy/Paste時會用到可視模式。一般來說,vim新人偏愛插入模式,並通過鍵盤右下角的方向鍵移動游標,但是,插入模式的vim功能與windows記事本相當,通常模式下才可以發揮vim的高效編輯等功能。
vim基本編輯技巧
消除行尾空白字元 :%s/s+$//g
Tab鍵轉為4個空格 :%s/t/ /g (/g前有4個空格)
h、j、k、l vim用來代替方向鍵,習慣以後編輯更加高效
在當前行高效移動游標
fx:移動游標到當前行的下一個 x 處。很明顯,x 可以是任意一個字母,而且你可以使用 ; 來重複你的上一個 f 命令。
tx:和上面的命令類似,但是是移動到 x 的左邊一個位置。(這真的很有用)
Fx:和 fx 類似,不過是往回找。
w:游標往前移動一個詞。
b:游標往後移動一個詞。
0:移動游標到當前行首。
^:移動游標到當前行的第一個字母位置。
$:移動游標到行尾。
在整個檔案裡面高效移動游標
:向下移動一屏。
:向上移動一屏。
%:跳到匹配的左/右括弧上
gg:到檔案頭
G:到檔案尾
zz:移動當前行到螢幕中央
zt:移動當前行到螢幕頂部
zb:移動當前行到螢幕底部
*:讀取游標處的字串,並且移動游標到它再次出現的地方。
#:和上面的類似,但是是往反方向尋找。
/text:從當前游標處開始搜尋字串 text,並且到達 text 出現的地方。必須使用斷行符號來開始這個搜尋命令。如果想重複上次的搜尋的話,按 n。
?text:和上面類似,但是是反方向。
ma:在當前游標的位置標記一個書籤,名字為 a。書籤名只能是小寫字母。你看不見書籤的存在,但它確實已經在那裡了。
`a:到書籤 a 處。注意這個不是單引號,它位於鍵盤的 1 的左邊。
`.:到你上次編輯檔案的地方。這個命令很有用,而且你不用自己去標記它
高效輸入/刪除
i:在當前字元的左邊插入
I:在當前行首插入
a:在當前字元的右邊插入
A:在當前行尾插入
o:在當前行下面插入一個新行
O:在當前行上面插入一個新行
dd:刪除當前行
d$/d^:刪除到行末/行首
c{motion}:刪除 motion 命令跨過的字元,並且進入插入模式。比如:c$,這將會刪除從游標位置到行尾的字元並且進入插入模式。ct!,這會刪除從游標位置到下一個歎號(但不包括),然後進入插入模式。被刪除的字元被存在了剪貼簿裡面,並且可以再粘貼出來。
按v進入可視模式,選中多行後按=自動格式化
尋找技巧
/xxx(?xxx) 表示在整篇文檔中搜尋匹配xxx的字串, / 表示向下尋找, ? 表示向上尋找. 尋找到以後, 再輸入 n 尋找下一個匹配處, 輸入 N 反方向尋找.
*(#) 當游標停留在某個單詞上時, 輸入這條命令表示尋找與該單詞匹配的下(上)一個單詞. 同樣, 再輸入 n 尋找下一個匹配處, 輸入 N 反方向尋找.
g*(g#) 此命令與上條命令相似, 只不過它不完全符合游標所在處的單詞, 而是匹配包含該單詞的所有字串.
gd 尋找與游標所在單詞相匹配的單詞, 並將游標停留在文檔的非注釋段中第一次出現這個單詞的地方.
% 尋找與游標所在處相匹配的反括弧, 包括 () [] {}
f(F)x 在游標所在行進行尋找, 尋找游標右(左)方第一個x字元.找到後:輸入 ; 表示繼續往下找;輸入 , 表示反方向尋找
插入if條件陳述式後,有以下三種代碼塊縮排的方法:
用shift-v選中這幾行,然後用>向右縮排
>nj ,n 為行數 (>表示縮排,nj表示向下移動n行)
把游標放在第一個大括弧{上, 然後按%=使vim自動縮排
vim進階技巧
多視窗編輯器
建立視窗:new(當前視窗上方建立新視窗)和vnew(當前視窗左側建立新視窗)
分裂視窗:split(水平)和vsplit(垂直)
改變當前視窗的大小:
+ (增大)
- (減小)
_ (視窗高度最大化)
| (視窗寬度最大化)
= (恢複所有視窗同樣大小)
切換視窗 方向鍵
j 切換到當前視窗下方的視窗
k 切換到當前視窗上方的視窗
h 切換到當前視窗左側的視窗
l 切換到當前視窗右側的視窗
重複某個動作若個次:數字 + 動作,例如:
2dd 刪除兩行
10 + 將當前視窗增加10行
注釋多行代碼:按ctrl+v後選中多行,然後按shift+i進入插入模式,插入若干字元後按ESC後會在選中的所有行前面都插入相同的字元
vim程式碼摺疊功能
摺疊方式 可用選項 ‘foldmethod’ 來設定摺疊方式:set fdm=*****。
有 6 種方法來選定摺疊:
manual 手工定義摺疊
indent 更多的縮排表示更進階別的摺疊
expr 用運算式來定義摺疊
syntax 用文法高亮來定義摺疊
diff 對沒有更改的文本進行摺疊
marker 對文中的標誌摺疊
注意,每一種摺疊方式不相容,如不能即用expr又用marker方式,我主要輪流使用indent和marker方法
摺疊命令
選取了摺疊方式後,我們就可以對某些代碼實施我們需要的摺疊了,由於我使用indent和marker稍微多一些,故以它們的使用為例:如果使用了indent方式,vim會自動的對大括弧的中間部分進行摺疊,我們可以直接使用這些現成的摺疊成果。
在可摺疊處(大括弧中間):
zc 摺疊
zC 對所在範圍內所有嵌套的摺疊點進行摺疊
zo 展開摺疊
zO 對所在範圍內所有嵌套的摺疊點展開
[z 到當前開啟的摺疊的開始處。
]z 到當前開啟的摺疊的末尾處。
zj 向下移動。到達下一個摺疊的開始處。關閉的摺疊也被計入。
zk 向上移動到前一摺疊的結束處。關閉的摺疊也被計入