前天晚上看casa
直播項目的組件化
,不僅了解了如何快速對現有項目進行組件化,以及進一步不斷迭代,實現完全組件化的過程;同時,也被casa
的vim
技能的熟練程度所震撼。早就聽說,vim
是unix
系統上文本編輯的神器,亦有許多牛人用vim
編程可以鍵字如飛,效率之高令人望塵莫及。也許我們成不了牛人,但是學會vim
還是很有必要的,畢竟它確實能夠提高文本的編輯效率。于是,花了兩天時間,又重新系統學習了vim
的各種命令,現總結一下,方便用時再查。
一.vim的模式
vim
大致有三種模式:
-
命令模式:主要用來瀏覽和修改文本內容
一般情況下,
vim
打開的都是命令模式(正常模式);任何模式下,按下ESC
鍵都可以進入命令模式 -
插入模式:用來向文本中添加內容
通過
i
、I
、a
、A
、s
、S
等等指令可以進入插入模式,之后就可以修改文本內容了 -
編輯模式:用于操作文本文件
通過
:
命令可以進入編輯模式,之后就可以保存文件、改變編輯器本身狀態等等
其實,vim為了增強功能,還有另外兩種模式:
-
可視模式:用于復制文本
命令模式下,按
v
可以進入可視模式
,之后就可以移動光標選擇文本;按ctrl + v
可以進入視行模式
,可以進行列選中 -
替換模式
命令模式下,按
R
進入替換模式
二.文檔的操作
編輯模式下執行該命令
-
vim filename
-> 打開文檔 -
:e file
-> 關閉當前編輯的文件,并打開新的文件 -
:e! file
-> 放棄當前對文件的修改并關閉,同時打開新文件 -
:e
-> 重新加載文檔 -
:e!
-> 放棄改動,并重新加載文檔 -
:f
或ctrl + g
-> 顯示文檔名、是否修改、光標位置等等 -
:f filename
-> 把編輯的文件另存為新的filename,需要wq
,否則不會保存新文件 -
:w
-> 保存修改 -
:n1,n2w filename
-> 選擇性保存從n1行到n2行的內容 -
:wq
或:x
或ZZ
-> 保存并退出 -
:q[uit]
-> 退出當前窗口 -
:saveas filename
-> 另存為新的filename -
:Sex
-> 水平分割一個窗口,瀏覽文件系統 -
:Vex
-> 垂直分割一個窗口,瀏覽文件系統
三.文檔的移動
文檔的移動都是在命令模式(正常模式)下進行的
-
h
或退格
-> 左移一個字符 -
l
或空格
-> 右移一個字符 -
j
-> 下移一行 -
k
-> 上移一行 -
+
或enter
-> 把光標移動到下一行非空白字符 -
w
-> 前移一個單詞,光標停在單詞的開頭 -
W
-> 前移一個單詞,光標停在單詞的開頭,但是會忽略一些標點 -
e
-> 前移一個單詞,光標停在單詞的末尾 -
E
-> 前移一個單詞,光標停在單詞的末尾,如果詞尾有標點,則移動到標點 -
b
-> 后移一個單詞,光標停在單詞的開頭 -
B
-> 后移一個單詞,光標停在單詞的開頭,但是會忽略一些標點 -
ge
-> 后移一個單詞,光標停在單詞的末尾 -
gE
-> 后移一個單詞,光標停在單詞的末尾,如果詞尾有標點,則移動到標點 -
(
-> 前移一句 -
)
-> 后移一句 -
{
-> 前移一段 -
}
-> 后移一段 -
fc
-> 把光標移動到同一行的下一個c字符處 -
Fc
-> 把光標移動到同一行的上一個c字符處 -
tc
-> 把光標移動到同一行的下一個c字符前 -
Tc
-> 把光標移動到同一行的上一個c字符后
上面的操作都可以配合數字n
使用,例如:3h
表示光標左移3
個字符。下面是另外一些文檔移動的命令:
-
0
-> 移動到行首 -
^
-> 移動到本行第一個非空白字符 -
$
-> 移動到行尾 -
n|
-> 把光標移到第n列上 -
nG
-> 把光標移到第n行上 -
H
-> 把光標移到到屏幕最頂端一行 -
M
-> 把光標移到到屏幕中間一行 -
L
-> 把光標移到到屏幕最底端一行 -
gg
-> 把光標移到到文件頭部 -
G
-> 把光標移到到文件尾部
四.翻屏
翻屏命令是在命令模式進行的
-
ctrl + f
-> 下翻一屏 -
ctrl + b
-> 上翻一屏 -
ctrl + d
-> 下翻半屏 -
ctrl + u
-> 上翻半屏 -
ctrl + e
-> 向下滾動一行 -
ctrl + y
-> 向上滾動一行 -
n%
-> 把光標移動到文件內容的n%位置處 -
zz
-> 把當前行移動到屏幕中央 -
zt
-> 把當前行移動到屏幕頂端 -
zb
-> 把當前行移動到屏幕底端
五.插入文本
從命令模式進入插入模式,設置光標開始輸入的位置
-
i
-> 在光標前插入 -
I
-> 在當前行的第一個非空字符前插入 -
a
-> 在光標后插入 -
A
-> 在當前行最后插入 -
o
-> 在下面新建一行插入 -
O
-> 在上門新建一行插入 -
:r filename
-> 在當前行位置插入另一個文件的內容 -
:[n]r filename
-> 在第n行插入另一個文件的內容 -
:r !date
-> 在當前行(空行)插入日期,或當前行非空,就在下一行插入日期。同理,:r !command
可以把shell命令的輸出插入當前行
小技巧
- 命令模式下,按數字
n
,然后按i
,輸入=
,最后按ESC
,就會在光標處插入n
個=
,這在做分割線時非常有用 - 視行模式下(
ctrl+v
),選擇要操作的行,按i
(I
)輸入插入內容,之后按兩次ESC
,就會在每行選定的區域出現插入的內容
下面是修改文本的命令,功能是先刪除文字,然后等待插入文本:
-
c[n]w
或[n]cw
-> 刪除光標后n個單詞,然后進入插入模式 -
c[n]l
或[n]cl
-> 刪除光標后n個字母,然后進入插入模式 -
c[n]h
或[n]ch
-> 刪除光標前n個字母,然后進入插入模式 -
[n]cc
-> 刪除當前行及以后的n-1行,然后進入插入模式 -
[n]s
-> 刪除光標之后的n個字符,然后進入插入模式 -
[n]S
-> 刪除當前行及以后的n-1行,然后進入插入模式
類似的操作也適用于:d
、y
六.剪切、復制和粘貼
在命令模式執行該命令
-
[n]x
-> 剪切光標右邊n個字符,相當于d[n]l
-
[n]X
-> 剪切光標左邊n個字符,相當于d[n]h
-
y
-> 在可視模式下復制選中的文本 -
yy
或Y
-> 復制整行文本 -
y[n]w
-> 復制n個詞 -
y$
-> 復制從光標到行尾的內容 -
y0
-> 復制從光標到行首的內容 -
y^
-> 復制從光標到本行非字符的內容 -
:m,ny
-> 復制m行到n行的內容 -
y1G
或ygg
-> 復制光標以上所有行 -
yG
-> 復制光標以下所有行 -
d
-> 刪除(剪切)在可視模式下選中的文本 -
[n]dd
-> 刪除(剪切)n行 -
:m,nd
-> 刪除(剪切)m行到n行的內容 -
p
-> 在光標之后粘貼 -
P
-> 在光標之前粘貼
文本對象可以快速的操作一個詞、一個句子、一個段落等等,大大加快了文本操作的便捷性。其中,y
、d
、c
、v
都可以和這些命令配合使用,具體如下:
-
aw
-> 一個詞 -
as
-> 一個句子 -
ap
-> 一個段落
七.查找和替換
7.1查找
查找是在命令模式下執行的命令,用于快速查找特定的內容
-
/something
-> 在光標文本后面查找something -
?something
-> 在光標文本前面查找something -
/pattern/[+]n
-> 將光標停在匹配pattern模式后面第number行 -
/pattern/[-]n
-> 將光標停在匹配pattern模式前面第number行 -
n
-> 向后查找下一個 -
N
-> 向前查找上一個
7.2替換
替換是在編輯模式下執行的命令,用于替換特定的內容
-
:s/old/new
-> 用new替換當前行的第一個old -
:s/old/new/g
-> 用new替換當前行所有的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
可以進行簡單的快速的排版,下面的排版是在命令模式下執行
-
[n]<<
-> 向左縮進一個n個shiftwidth -
[n]>>
-> 向右縮進一個n個shiftwidth -
J
-> 拼接當前行和下一行 -
gJ
-> 拼接后不留空格
下面的排版是在編輯模式執行的命令
-
:le(ft)
-> 本行文字靠左 -
:ce(nter)
-> 本行文字居中 -
:ri(ght)
-> 本行文字靠右
vim
還可以統計本行或者整個文本的字數,行數等等信息
-
ctrl + g
統計文檔的字符數、行數、文件名等信息
九.編輯文件
vim
可以一次編輯多個文件,如:vim a.txt b.txt c.txt
-
:next
或:n
-> 編輯下一個文件 -
:2n
-> 編輯下2個文件 -
:previous
或:N
-> 編輯上一個文件 -
:wnext
-> 保存當前文件,并編輯下一個文件 -
:wprevious
-> 保存當前文件,并編輯上一個文件 -
:args
-> 顯示文件列表 -
vim -o filenames
-> 在水平分割多個窗口中編輯多個文件 -
vim -O filenames
-> 在垂直分割多個窗口中編輯多個文件 -
:split
或:sp
-> 把當前窗口水平分割成兩個窗口 -
:vsplit
或:vsp
-> 把當前窗口垂直分割成兩個窗口 -
:qall
-> 關閉所有窗口 -
:wall
-> 保存所有修改過的窗口 -
:only
-> 只保留當前窗口,關閉其它窗口 -
:close
-> 關閉當前窗口 -
[n]u
-> 取消n個改動 -
U
-> 取消當前所有的改動
在vim
窗口分屏后,在多個編輯窗口直接切換編輯的命令如下:
-
ctrl+w ctrl+w
-> 切換下一個窗口 -
ctrl+w p
-> 切換到前一個窗口 -
ctrl+w h(l,j,k)
-> 切換到左 (右、下、上)的窗口 -
ctrl+w H(L,J,K)
-> 切換窗口到最左(右、下、上)的窗口
進入替換模式,就可以快速替換當前的文本,在命令模式才可以進入替換模式
-
r
-> 替換光標出的一個字符 -
R
-> 進入替換模式,可以進行多次替換,按esc回到命令模式
十.編程輔助技能
-
g;
-> 上一個修改過的地方 -
g,
-> 下一個修改過的地方 -
[[
-> 跳轉到上一行函數塊開始的位置,需要有單獨一行的{ -
]]
-> 跳轉到下一行函數塊開始的位置,需要有單獨一行的{ -
[]
-> 跳轉到上一行函數塊結束的位置,需要有單獨一行的} -
][
-> 跳轉到下一行函數塊結束的位置,需要有單獨一行的} -
%
-> 移動到匹配()、{}、[]的另一個符號上 - 可視模式下,選擇代碼塊,然后按
=
,代碼會進行自動縮排
下面的符號匹配能夠高效的處理文本,可以把c
、d
、y
和'
、"
、(
、[
、{
、<
結合起來使用,可以加快編程速度,下面以c
為例:
-
ci'
-> 修改、剪切或復制'
之間的內容,不包含'
本身 -
ca'
-> 修改、剪切或復制'
之間的內容,包含'
本身
十一.命令行
下面的命令是在編輯模式下執行
-
:! cmd
-> 執行外部命令 -
:r !cmd
-> 將命令的返回結果插入文件當前的位置 -
:pwd
-> 顯示vim的工作目錄 -
:ver
-> 顯示版本信息
十二.Mac Terminal快捷鍵
-
ctrl+u
-> 刪除整行 -
ctrl+l
-> 清屏
十三.移動當前行
-
m+1
-> 向下移動1行 -
m-2
-> 向上移動2行
vim
的命令大致有這么多,還有一些不是太常用的沒有列舉出,如有需要,請查看相關手冊。如果你想用vim
高效的編輯文本,還是要多練習,畢竟這么多命令,無法一下子全部記住。最后,附上一張vim
的指法引導圖,可以參考一下。(本文所有圖片來自互聯網,版權歸源作者所有)
參考資料
http://blog.csdn.net/scaleqiao/article/details/45153379