當你有一個服務器,或者運維若干服務器時,沒有什麼比不夠熟練 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 的重中之重,比一切插件都要重要。也是下編輯和修改的基礎。後端
10j
表明往下移動十行。 經過數字與操做結合,這是 vim 的思想。 減小上一步的左右移動,效率過低,使用 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>
往上移動半頁。app
也可使用
<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
刪掉整行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 與多窗口管理。
歡迎關注公衆號山月行,我會按期分享一些先後端以及運維的文章,而且會有技術與生活上的每日回顧與總結,歡迎關注交流