前天晚上看casa
直播項(xiàng)目的組件化
味赃,不僅了解了如何快速對(duì)現(xiàn)有項(xiàng)目進(jìn)行組件化浦辨,以及進(jìn)一步不斷迭代,實(shí)現(xiàn)完全組件化的過程型凳;同時(shí)丈冬,也被casa
的vim
技能的熟練程度所震撼。早就聽說(shuō)甘畅,vim
是unix
系統(tǒng)上文本編輯的神器埂蕊,亦有許多牛人用vim
編程可以鍵字如飛,效率之高令人望塵莫及疏唾。也許我們成不了牛人蓄氧,但是學(xué)會(huì)vim
還是很有必要的,畢竟它確實(shí)能夠提高文本的編輯效率荸实。于是匀们,花了兩天時(shí)間,又重新系統(tǒng)學(xué)習(xí)了vim
的各種命令准给,現(xiàn)總結(jié)一下泄朴,方便用時(shí)再查重抖。
一.vim的模式
vim
大致有三種模式:
-
命令模式:主要用來(lái)瀏覽和修改文本內(nèi)容
一般情況下,
vim
打開的都是命令模式(正常模式)祖灰;任何模式下钟沛,按下ESC
鍵都可以進(jìn)入命令模式 -
插入模式:用來(lái)向文本中添加內(nèi)容
通過
i
、I
局扶、a
恨统、A
、s
三妈、S
等等指令可以進(jìn)入插入模式畜埋,之后就可以修改文本內(nèi)容了 -
編輯模式:用于操作文本文件
通過
:
命令可以進(jìn)入編輯模式,之后就可以保存文件畴蒲、改變編輯器本身狀態(tài)等等
其實(shí)悠鞍,vim為了增強(qiáng)功能,還有另外兩種模式:
-
可視模式:用于復(fù)制文本
命令模式下模燥,按
v
可以進(jìn)入可視模式
咖祭,之后就可以移動(dòng)光標(biāo)選擇文本;按ctrl + v
可以進(jìn)入視行模式
蔫骂,可以進(jìn)行列選中 -
替換模式
命令模式下么翰,按
R
進(jìn)入替換模式
二.文檔的操作
編輯模式下執(zhí)行該命令
-
vim filename
-> 打開文檔 -
:e file
-> 關(guān)閉當(dāng)前編輯的文件,并打開新的文件 -
:e! file
-> 放棄當(dāng)前對(duì)文件的修改并關(guān)閉辽旋,同時(shí)打開新文件 -
:e
-> 重新加載文檔 -
:e!
-> 放棄改動(dòng)浩嫌,并重新加載文檔 -
:f
或ctrl + g
-> 顯示文檔名、是否修改戴已、光標(biāo)位置等等 -
:f filename
-> 把編輯的文件另存為新的filename固该,需要wq
,否則不會(huì)保存新文件 -
:w
-> 保存修改 -
:n1,n2w filename
-> 選擇性保存從n1行到n2行的內(nèi)容 -
:wq
或:x
或ZZ
-> 保存并退出 -
:q[uit]
-> 退出當(dāng)前窗口 -
:saveas filename
-> 另存為新的filename -
:Sex
-> 水平分割一個(gè)窗口糖儡,瀏覽文件系統(tǒng) -
:Vex
-> 垂直分割一個(gè)窗口伐坏,瀏覽文件系統(tǒng)
三.文檔的移動(dòng)
文檔的移動(dòng)都是在命令模式(正常模式)下進(jìn)行的
-
h
或退格
-> 左移一個(gè)字符 -
l
或空格
-> 右移一個(gè)字符 -
j
-> 下移一行 -
k
-> 上移一行 -
+
或enter
-> 把光標(biāo)移動(dòng)到下一行非空白字符 -
w
-> 前移一個(gè)單詞,光標(biāo)停在單詞的開頭 -
W
-> 前移一個(gè)單詞握联,光標(biāo)停在單詞的開頭桦沉,但是會(huì)忽略一些標(biāo)點(diǎn) -
e
-> 前移一個(gè)單詞,光標(biāo)停在單詞的末尾 -
E
-> 前移一個(gè)單詞金闽,光標(biāo)停在單詞的末尾纯露,如果詞尾有標(biāo)點(diǎn),則移動(dòng)到標(biāo)點(diǎn) -
b
-> 后移一個(gè)單詞代芜,光標(biāo)停在單詞的開頭 -
B
-> 后移一個(gè)單詞埠褪,光標(biāo)停在單詞的開頭,但是會(huì)忽略一些標(biāo)點(diǎn) -
ge
-> 后移一個(gè)單詞,光標(biāo)停在單詞的末尾 -
gE
-> 后移一個(gè)單詞钞速,光標(biāo)停在單詞的末尾贷掖,如果詞尾有標(biāo)點(diǎn),則移動(dòng)到標(biāo)點(diǎn) -
(
-> 前移一句 -
)
-> 后移一句 -
{
-> 前移一段 -
}
-> 后移一段 -
fc
-> 把光標(biāo)移動(dòng)到同一行的下一個(gè)c字符處 -
Fc
-> 把光標(biāo)移動(dòng)到同一行的上一個(gè)c字符處 -
tc
-> 把光標(biāo)移動(dòng)到同一行的下一個(gè)c字符前 -
Tc
-> 把光標(biāo)移動(dòng)到同一行的上一個(gè)c字符后
上面的操作都可以配合數(shù)字n
使用渴语,例如:3h
表示光標(biāo)左移3
個(gè)字符苹威。下面是另外一些文檔移動(dòng)的命令:
-
0
-> 移動(dòng)到行首 -
^
-> 移動(dòng)到本行第一個(gè)非空白字符 -
$
-> 移動(dòng)到行尾 -
n|
-> 把光標(biāo)移到第n列上 -
nG
-> 把光標(biāo)移到第n行上 -
H
-> 把光標(biāo)移到到屏幕最頂端一行 -
M
-> 把光標(biāo)移到到屏幕中間一行 -
L
-> 把光標(biāo)移到到屏幕最底端一行 -
gg
-> 把光標(biāo)移到到文件頭部 -
G
-> 把光標(biāo)移到到文件尾部
四.翻屏
翻屏命令是在命令模式進(jìn)行的
-
ctrl + f
-> 下翻一屏 -
ctrl + b
-> 上翻一屏 -
ctrl + d
-> 下翻半屏 -
ctrl + u
-> 上翻半屏 -
ctrl + e
-> 向下滾動(dòng)一行 -
ctrl + y
-> 向上滾動(dòng)一行 -
n%
-> 把光標(biāo)移動(dòng)到文件內(nèi)容的n%位置處 -
zz
-> 把當(dāng)前行移動(dòng)到屏幕中央 -
zt
-> 把當(dāng)前行移動(dòng)到屏幕頂端 -
zb
-> 把當(dāng)前行移動(dòng)到屏幕底端
五.插入文本
從命令模式進(jìn)入插入模式,設(shè)置光標(biāo)開始輸入的位置
-
i
-> 在光標(biāo)前插入 -
I
-> 在當(dāng)前行的第一個(gè)非空字符前插入 -
a
-> 在光標(biāo)后插入 -
A
-> 在當(dāng)前行最后插入 -
o
-> 在下面新建一行插入 -
O
-> 在上門新建一行插入 -
:r filename
-> 在當(dāng)前行位置插入另一個(gè)文件的內(nèi)容 -
:[n]r filename
-> 在第n行插入另一個(gè)文件的內(nèi)容 -
:r !date
-> 在當(dāng)前行(空行)插入日期驾凶,或當(dāng)前行非空牙甫,就在下一行插入日期。同理调违,:r !command
可以把shell命令的輸出插入當(dāng)前行
小技巧
- 命令模式下窟哺,按數(shù)字
n
,然后按i
技肩,輸入=
脏答,最后按ESC
,就會(huì)在光標(biāo)處插入n
個(gè)=
亩鬼,這在做分割線時(shí)非常有用 - 視行模式下(
ctrl+v
),選擇要操作的行阿蝶,按i
(I
)輸入插入內(nèi)容雳锋,之后按兩次ESC
,就會(huì)在每行選定的區(qū)域出現(xiàn)插入的內(nèi)容
下面是修改文本的命令羡洁,功能是先刪除文字玷过,然后等待插入文本:
-
c[n]w
或[n]cw
-> 刪除光標(biāo)后n個(gè)單詞,然后進(jìn)入插入模式 -
c[n]l
或[n]cl
-> 刪除光標(biāo)后n個(gè)字母筑煮,然后進(jìn)入插入模式 -
c[n]h
或[n]ch
-> 刪除光標(biāo)前n個(gè)字母辛蚊,然后進(jìn)入插入模式 -
[n]cc
-> 刪除當(dāng)前行及以后的n-1行,然后進(jìn)入插入模式 -
[n]s
-> 刪除光標(biāo)之后的n個(gè)字符真仲,然后進(jìn)入插入模式 -
[n]S
-> 刪除當(dāng)前行及以后的n-1行袋马,然后進(jìn)入插入模式
類似的操作也適用于:d
、y
六.剪切秸应、復(fù)制和粘貼
在命令模式執(zhí)行該命令
-
[n]x
-> 剪切光標(biāo)右邊n個(gè)字符虑凛,相當(dāng)于d[n]l
-
[n]X
-> 剪切光標(biāo)左邊n個(gè)字符,相當(dāng)于d[n]h
-
y
-> 在可視模式下復(fù)制選中的文本 -
yy
或Y
-> 復(fù)制整行文本 -
y[n]w
-> 復(fù)制n個(gè)詞 -
y$
-> 復(fù)制從光標(biāo)到行尾的內(nèi)容 -
y0
-> 復(fù)制從光標(biāo)到行首的內(nèi)容 -
y^
-> 復(fù)制從光標(biāo)到本行非字符的內(nèi)容 -
:m,ny
-> 復(fù)制m行到n行的內(nèi)容 -
y1G
或ygg
-> 復(fù)制光標(biāo)以上所有行 -
yG
-> 復(fù)制光標(biāo)以下所有行 -
d
-> 刪除(剪切)在可視模式下選中的文本 -
[n]dd
-> 刪除(剪切)n行 -
:m,nd
-> 刪除(剪切)m行到n行的內(nèi)容 -
p
-> 在光標(biāo)之后粘貼 -
P
-> 在光標(biāo)之前粘貼
文本對(duì)象可以快速的操作一個(gè)詞软啼、一個(gè)句子桑谍、一個(gè)段落等等,大大加快了文本操作的便捷性祸挪。其中锣披,y
、d
、c
雹仿、v
都可以和這些命令配合使用增热,具體如下:
-
aw
-> 一個(gè)詞 -
as
-> 一個(gè)句子 -
ap
-> 一個(gè)段落
七.查找和替換
7.1查找
查找是在命令模式下執(zhí)行的命令,用于快速查找特定的內(nèi)容
-
/something
-> 在光標(biāo)文本后面查找something -
?something
-> 在光標(biāo)文本前面查找something -
/pattern/[+]n
-> 將光標(biāo)停在匹配pattern模式后面第number行 -
/pattern/[-]n
-> 將光標(biāo)停在匹配pattern模式前面第number行 -
n
-> 向后查找下一個(gè) -
N
-> 向前查找上一個(gè)
7.2替換
替換是在編輯模式下執(zhí)行的命令盅粪,用于替換特定的內(nèi)容
-
:s/old/new
-> 用new替換當(dāng)前行的第一個(gè)old -
:s/old/new/g
-> 用new替換當(dāng)前行所有的old -
:n1,n2/old/new/g
-> 用new替換n1行到n2行的所有old -
:%s/old/new/g
-> 用new替換文件中的所有old -
:%s/^/xxx/g
-> 在每一行的行首插入xxx -
:%s/$/xxx/g
-> 在每一行的行尾插入xxx
八.排版
vim
可以進(jìn)行簡(jiǎn)單的快速的排版钓葫,下面的排版是在命令模式下執(zhí)行
-
[n]<<
-> 向左縮進(jìn)一個(gè)n個(gè)shiftwidth -
[n]>>
-> 向右縮進(jìn)一個(gè)n個(gè)shiftwidth -
J
-> 拼接當(dāng)前行和下一行 -
gJ
-> 拼接后不留空格
下面的排版是在編輯模式執(zhí)行的命令
-
:le(ft)
-> 本行文字靠左 -
:ce(nter)
-> 本行文字居中 -
:ri(ght)
-> 本行文字靠右
vim
還可以統(tǒng)計(jì)本行或者整個(gè)文本的字?jǐn)?shù),行數(shù)等等信息
-
ctrl + g
統(tǒng)計(jì)文檔的字符數(shù)票顾、行數(shù)础浮、文件名等信息
九.編輯文件
vim
可以一次編輯多個(gè)文件,如:vim a.txt b.txt c.txt
-
:next
或:n
-> 編輯下一個(gè)文件 -
:2n
-> 編輯下2個(gè)文件 -
:previous
或:N
-> 編輯上一個(gè)文件 -
:wnext
-> 保存當(dāng)前文件奠骄,并編輯下一個(gè)文件 -
:wprevious
-> 保存當(dāng)前文件豆同,并編輯上一個(gè)文件 -
:args
-> 顯示文件列表 -
vim -o filenames
-> 在水平分割多個(gè)窗口中編輯多個(gè)文件 -
vim -O filenames
-> 在垂直分割多個(gè)窗口中編輯多個(gè)文件 -
:split
或:sp
-> 把當(dāng)前窗口水平分割成兩個(gè)窗口 -
:vsplit
或:vsp
-> 把當(dāng)前窗口垂直分割成兩個(gè)窗口 -
:qall
-> 關(guān)閉所有窗口 -
:wall
-> 保存所有修改過的窗口 -
:only
-> 只保留當(dāng)前窗口,關(guān)閉其它窗口 -
:close
-> 關(guān)閉當(dāng)前窗口 -
[n]u
-> 取消n個(gè)改動(dòng) -
U
-> 取消當(dāng)前所有的改動(dòng)
在vim
窗口分屏后,在多個(gè)編輯窗口直接切換編輯的命令如下:
-
ctrl+w ctrl+w
-> 切換下一個(gè)窗口 -
ctrl+w p
-> 切換到前一個(gè)窗口 -
ctrl+w h(l,j,k)
-> 切換到左 (右饲宛、下娃磺、上)的窗口 -
ctrl+w H(L,J,K)
-> 切換窗口到最左(右、下鸭廷、上)的窗口
進(jìn)入替換模式,就可以快速替換當(dāng)前的文本熔吗,在命令模式才可以進(jìn)入替換模式
-
r
-> 替換光標(biāo)出的一個(gè)字符 -
R
-> 進(jìn)入替換模式辆床,可以進(jìn)行多次替換,按esc回到命令模式
十.編程輔助技能
-
g;
-> 上一個(gè)修改過的地方 -
g,
-> 下一個(gè)修改過的地方 -
[[
-> 跳轉(zhuǎn)到上一行函數(shù)塊開始的位置桅狠,需要有單獨(dú)一行的{ -
]]
-> 跳轉(zhuǎn)到下一行函數(shù)塊開始的位置讼载,需要有單獨(dú)一行的{ -
[]
-> 跳轉(zhuǎn)到上一行函數(shù)塊結(jié)束的位置,需要有單獨(dú)一行的} -
][
-> 跳轉(zhuǎn)到下一行函數(shù)塊結(jié)束的位置中跌,需要有單獨(dú)一行的} -
%
-> 移動(dòng)到匹配()咨堤、{}、[]的另一個(gè)符號(hào)上 - 可視模式下漩符,選擇代碼塊一喘,然后按
=
,代碼會(huì)進(jìn)行自動(dòng)縮排
下面的符號(hào)匹配能夠高效的處理文本嗜暴,可以把c
津滞、d
、y
和'
灼伤、"
触徐、(
、[
狐赡、{
撞鹉、<
結(jié)合起來(lái)使用,可以加快編程速度,下面以c
為例:
-
ci'
-> 修改鸟雏、剪切或復(fù)制'
之間的內(nèi)容享郊,不包含'
本身 -
ca'
-> 修改、剪切或復(fù)制'
之間的內(nèi)容孝鹊,包含'
本身
十一.命令行
下面的命令是在編輯模式下執(zhí)行
-
:! cmd
-> 執(zhí)行外部命令 -
:r !cmd
-> 將命令的返回結(jié)果插入文件當(dāng)前的位置 -
:pwd
-> 顯示vim的工作目錄 -
:ver
-> 顯示版本信息
十二.Mac Terminal快捷鍵
-
ctrl+u
-> 刪除整行 -
ctrl+l
-> 清屏
十三.移動(dòng)當(dāng)前行
-
m+1
-> 向下移動(dòng)1行 -
m-2
-> 向上移動(dòng)2行
vim
的命令大致有這么多炊琉,還有一些不是太常用的沒有列舉出,如有需要又活,請(qǐng)查看相關(guān)手冊(cè)苔咪。如果你想用vim
高效的編輯文本,還是要多練習(xí)柳骄,畢竟這么多命令团赏,無(wú)法一下子全部記住。最后耐薯,附上一張vim
的指法引導(dǎo)圖舔清,可以參考一下。(本文所有圖片來(lái)自互聯(lián)網(wǎng)曲初,版權(quán)歸源作者所有)
參考資料
http://blog.csdn.net/scaleqiao/article/details/45153379