文章首發:http://www.cnblogs.com/sprying/p/3864631.html html
上一次學習vim仍是快一年了,倒騰了一個月以後就沒碰過。如今從新彙總下vim命令。vim
一、有些命令回車後纔有效果緩存
二、vim編輯有三個狀態:Normal、Insert、Visualide
打開文件
Normal模式下學習
:e
:vi
保存關閉文件
-
:w
url -
:q
spa -
:wq
ZZ
保存和退出code -
:q!
放棄修改並退出orm -
:qa!
強制退出全部打開的文件htm -
:close
-
:close[!]
最後一個窗口不關閉 -
:hide
最後一個窗口不關閉,能夠關閉當前屏幕窗口。 -
:on[ly][!]
除了當前窗口全部其餘窗口都關閉。
緩存操做
:ls
顯示緩存:b [filename]
打開緩存文件:bn
(n a number) move to nth buffer 打開指定數字的緩存:bp
previous buffer 打開上一個緩存:bn
next buffer 打開下一個緩存
移動光標
w
下一個詞的首字母W
下一個詞(跳過標點)b
當前詞的首字母B
前一個詞(跳過標點)e
當前詞的尾端E
當前詞的尾端(跳過標點)
注意: w
e
是以字母、數字、_
組成的爲單詞, 若要以blank空格符,用大寫
-
h
左移一字符 -
l
右移一字符 -
j
下移一行 -
k
上移一行 -
gd
調到光標所在詞定義位子go define -
gg
到文檔頂部 -
G
到文檔底部 -
xgg
xG
:x
到第x行(x是行號) -
10%
移動到文件大約10%的行位置 -
Ctrl + d
下翻半屏 -
Ctrl + u
上翻半屏 -
Ctrl + f
下翻一屏 -
Ctrl + b
上翻一屏 -
Ctrl + g
查看文件url、行數信息 -
H
命令移動光標到視野內的第一行, -
M
移動到視野內的中部, -
L
移動光標到視野內的最後一行。
移動屏幕
光標所在的行位不變
-
Ctrl + e
上滾一行 -
Ctrl + y
下滾一行 -
zt
命令將光標所在行移動到屏幕的頂部, -
zz
命令將光標所在行移動到屏幕的中部, -
zb
將光標移動到屏幕的底部。 -
nz
回車,將第n行滾動至屏幕頂部
插入
i
光標位置前插入I
行首字符前插入a
光標位置後插入A
本行末尾插入o
向下插入一行O
向上插入一行
刪除
-
x
dl
光標下的字符 -
X
dh
刪除光標前字符 -
dw
刪除當前光標下的詞,由光標位置起,不包括光標位字符 -
db
de
-
dnl
向右刪除n個字母 -
dnh
向左刪除n個字母 -
d$
D
刪除光標到行尾 -
dd
刪除當前行 -
dnj
向下刪除n行 -
dnk
向上刪除n行 -
dG
從當前光標位置一直刪除到文件的末尾 -
dgg
從當前光標位置一直刪除到文件的開始 -
6dw
刪除6個word -
diw
刪除光標上的單詞(不包括空格) -
daw
刪除光標上的單詞(包括空格) -
df
從當前光標位置上的字符一直刪除到指定的字符(包括指定字符) -
dt
從當前光標位置刪除到指定字符的前一個字符 -
J
刪除換行符,合併兩行 -
%s/\s\+$//
刪除全文行尾空格,%表示做用於整個文件,//表示替換的是空白 -
%s/^\s\+//
刪除全文行首空格
撤銷和重作
u
撤銷U
ctrl + r
恢復撤銷
自動提示
在Insert模式下,輸入字符,Ctrl p
或Ctrl n
代碼提示
修改
cl
(s
) ch
c3w
cb
ciw
caw
df
dt
cc
(S
) c$
(C
) cG
複製粘貼
yy
Y
複製當前行yw
複製當前光標下的詞yG
拷貝到文件的末尾ygg
拷貝到文件的開頭0y$
y2/foo
拷貝2個foo之間的字符串p
粘貼P
粘貼在當前位置以前Go
替換
預約義類 | 含義 |
---|---|
:s/old/new |
將當前行中查找到第一個字符」old」串替換爲」new」 |
:s/old/new/g |
將當前行中查找到的全部字符串」old」替換爲」new」 |
:#,#s/old/new/g |
在行號」#,#」範圍內替換全部的字符串」old」爲「new」 |
:%s/old/new/g |
在整個文件範圍內替換全部的字符串」old「爲」new」 |
:s/old/new/c |
在替換命令末尾加入c命令,將對每一個替換動做提示用戶進行確認 |
-
r
輸入字符替換光標下的字符,而後返回Normal模式, 若是光標選中一段字符,輸入的一個字符會替換選擇。 -
nr
輸入字符會替換光標起的n個字符 -
R
會一直替換,按delete還原。 若是選中幾個字符,則會進入visual模式,刪除當前行,進入Insert模式。 -
:s/p1/p2/g
當前行中全部p1均用p2替代 -
:n1,n2s/p1/p2/g
將第n1至n2行中全部p1均用p2替代 -
g/p1/s//p2/g
將文件中全部p1均用p2替換
搜索
-
/XXXX
搜索xxxx,能夠用n下一個,N上一個,2n下第二個 -
/di
可查找到media -
/^di
只匹配行首 -
/di$
只匹配行未 -
/^di$
僅僅匹配包括di的行並不帶空格 -
/d.i
匹配第一個字符是d,第二個字符任意,第三個是i的字符串 -
/di\.
匹配帶特殊字符.的字符串di. -
#
向前搜索光標當前所在的字,向後查找當前光標的第2個單詞,能夠輸入」2#「 -
*
向後搜索光標當前所在的字 -
fa
查找當前行光標所在位置的下一個f(ind) a,這裏f可用t -
Fa
查找當前行光標所在位置的上一個a
標記和宏(macro)
-
ma
將當前位置標記爲a,26個字母均可以做爲標記,mb
、mc
等等 -
‘a
跳轉到a標記的位置 -
qa
將以後的操做都記錄下來,直到繼續按q -
@a
執行剛剛記錄在a裏面的鍵盤操做 -
@@
執行上一次的macro操做Ctrl a 數字加1 qaYp<C-a>q 1. qa開始錄製 2. Yp 複製行. 3. \<C-a\> 增長1. 4. q 中止錄製. 5. @a → 在1下面寫下 2 6. @@ → 在2 正面寫下3 如今作100@@ 會建立新的100行,並把數據增長到 103.
高效編輯
-
di*
光標在""
以前或之中,則刪除""
之間的內容 -
yi{
光標在{}
以前或之中,則複製{}
之間的內容 -
vi[
光標在[]
以前或之中,則選中[]
之間的內容i
表明inner
,可編輯的光標有'
、"
、()
、[]
、{}
、<>
,i
可替換成a
,就連配符號一塊兒操做 -
dtx
刪除字符直到碰見光標以後的第一個x字符 -
ytx
複製字符直到碰見光標以後的第一個x字符 -
: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的輸入 -
:r!command
將命令command的輸出結果放到當前行 -
5w
至關於按五次w鍵; -
6j
下移6行,至關於按六次j; -
3J
大寫J,原本是將下一行與當前行合併,加上數量,就是重複操做3次; -
6dw
d6w
結果是同樣,就是刪除6個word;
剩下的無數狀況,本身類推吧
顯示頁碼
:set nu
:set nonu
其它
~
修改選中的字符的大小寫,原來大寫的轉換成小寫,原來小寫的轉成大寫。在Visual模式和Normal模式下都能生效。 注意,只有tiledeop設置後,這個才能成爲一個操做命令,纔可用該命令與其餘光標移動的命令組合使用。g
~ 修改選中的字符的大小寫操做命令,原來大寫的轉換成小寫,原來小寫的轉成大寫。gu
修改選中的字符爲小寫操做命令。gU
修改選中的字符爲大寫操做命令。!
過濾警告操做命令gq
選中文本格式化,文本拼接組合成句子或段落命令。在Normal模式和Visual模式下都能生效。>
選中文本向右Tab縮進。在Normal模式和Visual模式下都能生效。<
選中文本向左Tab縮進。在Normal模式和Visual模式下都能生效。=
操做:選中文本自動縮進。 按v進入visual狀態,選擇多行,用>或<縮進或縮出