當你有一個服務器,或者運維若干服務器時,沒有什麼比不夠熟練 vim 更讓人難受和窩心的事情了。而在各類編輯器中 vim 模式也大受歡迎。所以,學習 vim 是頗有必要的。linux
本章節沒有關於服務器中的實踐內容,只是須要簡單操做以及熟練使用 vim。git
本章旨在如何快速的上手 vim,主要體如今如下三個方面程序員
掌握了vim 無插件零配置的操做,也能大大提升程序員在各類編輯器中敲代碼的效率。github
瞭解了 vim 經常使用的配置,你將把 vim 用的很舒服,如沐春風。正則表達式
瞭解了經常使用插件,你將能夠把它打形成一個適合本身的 IDE 工具。但每每來講,它對於服務器運維好處有限,對敲代碼的程序員,每每也不如一個專用語言的 IDE 工具強大。不過,它有一個最大的好處,就是能夠知足馬斯洛需求層次理論中的自我需求: 裝逼。這也是我會使用它的緣由。編程
如下是我在使用 vim 過程當中天天都會使用無數次的高頻操做vim
:w
快速保存<C-[>
退出 insert 模式,與 esc
相似0
快速移動到行首gg
快速移動到文件首G
快速移動至文件尾<c-o>
移動至最近一次位置zz
把光標移動至本屏中間:12
快速移動至特定行dd
剪切本行yy
複製本行yi{
複製括號中內容=i{
自動縮進<c-p>
自動補全"*yy
複製到系統剪切板*
快速查找關鍵字,相似於sublime/vscode 的 Command + d
:noh
取消關鍵字高亮o
快速進入 insert 模式,並定位到下一行u
撤銷快速移動是 vim 的重中之重,比一切插件都要重要。也是下編輯和修改的基礎。後端
上(k)下(j)左(h)右(l) 移動,須要注意,禁止使用上下左右箭頭服務器
若是須要移動數行,能夠在操做前加數字。如 10j
表明往下移動十行。 經過數字與操做結合,這是 vim 的思想。app
減小上一步的左右移動,效率過低,使用 b, B, w, W
代替
b
指 back a word,退回一個單詞。w
指 forward a word,前進一個單詞。 B
指 back a WORD,退回一個大單詞。w
指 forward a WORD,前進一個大單詞。
其中,word 以及 WORD 的區別,以一個示例說明。 hello.world 有三個 word ('hello', '.', 'world'),卻只有一個 WORD。
使用 f, F, t, T
進行更爲精細的左右移動控制
f
指 find a character,快速移動到下一個字符的位置,F
指向前查找。結合 b, w
實現快速左右移動。 t
指 tail a character,快速移動到下一個字符位置的前一個字符,T
指向前查找。
使用 0, $
進行行首行尾移動
使用 %
快速移動到配對字符
如從左括號快速移動到右括號,左引號快速移動到右引號,在編碼中最爲經常使用!
使用 <Ctrl-d>,<Ctrl-u>
進行大範圍上下移動
<Ctrl-d>
往下移動半頁,<Ctrl-u>
往上移動半頁。
也可使用
<Ctrl-f>, <Ctrl-b>
進行整頁移動。
使用 gg, G
進行首行尾行移動
:128
表示快速定位到 128 行,目前只在 debug 中使用
zz
快速定位當前光標至當前屏幕中間,zb
定位當前光標至屏尾,zt
定位當前光標至屏首
*
定位當前光標下的單詞,並指向下一個,#
指向上一個
gd
在編碼中經常使用,定位當前變量的申明位置,gf
定位到當前路徑所指向的文件。
最後若是你發現定位錯了,可使用 <Ctrl>-o
回到光標的上一位置
vim 的編輯在 Insert Mode
,以上的快速移動是在 Normal Mode
。編輯文本須要首先進入 Insert Mode
。
i, I, a, A, o, O
進入 Insert Mode
。
i
指 insert text,在該光標前進行編輯,I
指在行首進行編輯。 a
指 append text,在該光標後進行編輯,A
指在行尾進行編輯。 o
指 append text,在該光標後一行進行編輯,O
指在光標前一行進行編輯。
我的習慣,i, A, o, O
用的多一些,I, a
基本不用。
Esc
以及 <Ctrl-[>
均可以退出 Insert Mode
。
我的習慣使用 <Ctrl-[>
,一來 Esc
過遠,二來在一些編輯器中 Esc
容易與其它熱鍵衝突。
刪除也能夠在 Insert Mode
使用 delete
鍵進行手動刪除,不過效率過低,建議通常在 Normal Mode
進行刪除,剛進入 vim 的狀態即是 Normal Mode
。
使用 x(dl)
刪除特定字符
能夠結合 x
以及上述所講的快速移動,刪掉光標下的特定字符
在括號裏標註 l
,意指 x
爲 dl
的簡寫。
d
指 delete
,表示刪除,是全部修改操做的基礎。dl
由 d
和 l
兩個操做組成,表明刪掉光標右側的字符,同理,dh
表明刪掉光標左側的字符,這是全部刪除的基本形式,也是 vim 的核心思想。
使用 daw
刪除特定單詞
daw
指 delete a word
,表示刪除特定單詞。一樣也可使用 db, dw
來刪除單詞。
使用 dt, df
加特定字符,刪掉字符前的文本
使用 di(, da(
刪除特定符號內的文本,如刪除括號,引號中的文本
di(
指 delete in (
,不會刪掉括號。da(
指 delete a (
,會連同括號一同刪掉。同理還有 di'
,di"
等,在編碼中最爲經常使用!
使用 D (d$)
刪除掉該字符之後的全部文本
使用 dd
刪掉整行
把以上操做的全部 d 替換爲 c,表示刪除後進入編輯模式
c
指 change
,表示刪除,如 d
同樣,是 vim 的基本動詞
使用 r
加特定字符,表示使用特定字符代替原有字符
使用 :Ex (Explore)
瀏覽目錄
定位到文件所在行,回車進入指定文件
使用 :ls
列出緩衝列表
緩衝列表中保存最近使用文件,行頭有標號
使用 :bn
進入最近使用文件
bn
指 buffer next
,進入緩衝列表的下個緩衝,即最近一次使用文件
使用 :b[N]
進入緩衝列表中標號爲 N 的文件
b 10
指 buffer 10
,進入緩衝列表,即最近一次使用文件
使用 :sbn, :vbn
在新窗口打開最近使用文件
s
指 split
,水平方向。 v
指 vertical
,垂直方向。
使用 :on(ly)
只保留當前窗口
基本操做指查找,替換,撤銷,重作,複製,粘貼,保存等
/{pattern}
查找
/
後加須要查找的詞或者正則表達式進行查詢,n
向下查詢,N
向上查詢。
:s/aa/bb/g
替換
s
指 substitute
的縮寫,替換,g
表明全局替換。
u
撤銷
u
指 undo
的縮寫,撤銷。可與數字結合進行屢次撤銷。
<Ctrl-r>
重作
yy
複製整行
y
指 yank
,複製。使 y
與快速移動結合起來,可使用多種狀況的複製,如複製括號中內容,複製引號中內容。
複製時,會把當前內容置入寄存器,使用 :reg
查看寄存器列表。
p
粘貼
p
指 paste
,粘貼。
"*y
複製內容至系統剪切板
:reg
會列出寄存器列表,"*
寄存器表明系統剪切板(),因此以上就是把內容放到系統剪切板。
若是寄存器列表中沒有該寄存器,則 vim 不支持系統剪切板,也可使用命令 vim --version | grep clipboard
。
"*p
粘貼系統剪切板中內容
set expandtab
set smarttab
set shiftwidth=2
set tabstop=2
複製代碼
當關閉文件並再次進入時,可使用 u
進行撤銷動做
set undofile
set undodir=~/.vim-config/undo_dirs
複製代碼
" 不產生交換文件(當打開一個文件未正常關閉時會產生交換文件)
set noswapfile
複製代碼
如下是在 個人vim配置 中所使用的插件,關於快捷鍵有可能通過我自定義。
文件管理器
,nn
切換文件管理器窗口,相似於sublime的 Command + k + b
,nf
定位當前文件的位置在文件管理窗口
ma
新建文件或文件夾md
刪除文件或文件夾I
切換隱藏文件顯示狀態ctrlp,相似於sublime的ctrlp
<c-p>
在當前項目下查找文件,b
在buffer中查找文件,f
在最近打開文件中查找在ctrlp窗口中,<c-j>
和 <c-k>
控制上下移動。
查找關鍵字,相似於sublime的 Command + Shift + f
Ag key *.js
在特定文件下查找關鍵字注:首先須要安裝 the_silver_searcher
註釋命令
:gcc
註釋當前行,相似於sublime的 <c-/>
git擴展
:Gblame
查看當前行的歸屬:Gdiff
查看與工做區文件的差別:Gread
至關於 git checkout -- file
:Gwrite
至關於 git add file
語法檢查插件,設置eslint
:SyntasticCheck
語法檢查,默認會在保存時進行語法檢查,不過會有卡頓:lne[xt]
下一處語法錯誤:lp[revious]
上一處語法錯誤:! eslint %:p --fix
自動修正錯誤<c-y>,
相似於sublime的 <c-e>
括號,引號自動補全
:Goyo
切換至 gotyo 模式可更改配置文件中 background 爲 dark
和 light
切換主題
經過本章你能夠很熟練地在服務器中使用 vim 編輯文本,若是有必要的話還能夠在 linux 中使用 vim 進行編程。可是在服務器中除了須要熟練地使用 vim 外,更須要應付多窗口管理,能夠參考下一章 tmux 與多窗口管理。
歡迎關注公衆號山月行,我會按期分享一些先後端以及運維的文章,而且會有技術與生活上的每日回顧與總結,歡迎關注交流