當你有一個服務器,或者運維若干服務器時,沒有什麼比不夠熟練 vim 更讓人難受和窩心的事情了。而在各種編輯器中 vim 模式也大受歡迎。因此,學習 vim 是很有必要的。
本章節沒有關於服務器中的實踐內容,只是需要簡單操作以及熟練使用 vim。
本章旨在如何快速的上手 vim,主要體現在以下三個方面
- 無插件零配置時如何靈活使用 (即各種編輯器的 vim mode)
- 瞭解常用的配置
- 介紹一些常用的插件
掌握了vim 無插件零配置的操作,也能大大提高程序員在各種編輯器中敲代碼的效率。
瞭解了 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 的思想。 -
減少上一步的左右移動,效率太低,使用
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
粘貼系統剪切板中內容
vim 配置
1tab == 2space
set expandtab
set smarttab
set shiftwidth=2
set tabstop=2
保留操作記錄
當關閉文件並再次進入時,可以使用 u
進行撤銷動作
set undofile
set undodir=~/.vim-config/undo_dirs
不生成交換文件
" 不產生交換文件(當打開一個文件未正常關閉時會產生交換文件)
set noswapfile
插件
以下是在 我的vim配置 中所使用的插件,關於快捷鍵有可能經過我自定義。
nerdtree
文件管理器
-
,nn
切換文件管理器窗口,類似於sublime的Command + k + b
-
,nf
定位當前文件的位置
在文件管理窗口
-
ma
新建文件或文件夾 -
md
刪除文件或文件夾 -
I
切換隱藏文件顯示狀態
ctrlp.vim
ctrlp,類似於sublime的ctrlp
-
<c-p>
在當前項目下查找文件 -
,b
在buffer中查找文件 -
,f
在最近打開文件中查找
在ctrlp窗口中,<c-j>
和 <c-k>
控制上下移動。
ag.vim
查找關鍵字,類似於sublime的 Command + Shift + f
-
Ag key *.js
在特定文件下查找關鍵字
注:首先需要安裝 the_silver_searcher
vim-commentary
註釋命令
-
:gcc
註釋當前行,類似於sublime的<c-/>
vim-fugitive
git擴展
-
:Gblame
查看當前行的歸屬 -
:Gdiff
查看與工作區文件的差異 -
:Gread
相當於git checkout -- file
-
:Gwrite
相當於git add file
syntastic
語法檢查插件,設置eslint
-
:SyntasticCheck
語法檢查,默認會在保存時進行語法檢查,不過會有卡頓 -
:lne[xt]
下一處語法錯誤 -
:lp[revious]
上一處語法錯誤 -
:! eslint %:p --fix
自動修正錯誤
emmet-vim
-
<c-y>,
類似於sublime的<c-e>
delimitMate
括號,引號自動補全
goyo
-
:Goyo
切換至 gotyo 模式
vim-colors-solarized
可更改配置文件中 background 爲 dark
和 light
切換主題
小結
通過本章你可以很熟練地在服務器中使用 vim 編輯文本,如果有必要的話還可以在 linux 中使用 vim 進行編程。但是在服務器中除了需要熟練地使用 vim 外,更需要應付多窗口管理,可以參考下一章 tmux 與多窗口管理。
歡迎關注公衆號山月行,我會定期分享一些前後端以及運維的文章,並且會有技術與生活上的每日回顧與總結,歡迎關注交流