vim 高頻操作以及常用插件

當你有一個服務器,或者運維若干服務器時,沒有什麼比不夠熟練 vim 更讓人難受和窩心的事情了。而在各種編輯器中 vim 模式也大受歡迎。因此,學習 vim 是很有必要的。

本章節沒有關於服務器中的實踐內容,只是需要簡單操作以及熟練使用 vim。

本章旨在如何快速的上手 vim,主要體現在以下三個方面

  1. 無插件零配置時如何靈活使用 (即各種編輯器的 vim mode)
  2. 瞭解常用的配置
  3. 介紹一些常用的插件

掌握了vim 無插件零配置的操作,也能大大提高程序員在各種編輯器中敲代碼的效率。

瞭解了 vim 常用的配置,你將把 vim 用的很舒服,如沐春風。

瞭解了常用插件,你將可以把它打造成一個適合自己的 IDE 工具。但往往來說,它對於服務器運維好處有限,對敲代碼的程序員,往往也不如一個專用語言的 IDE 工具強大。不過,它有一個最大的好處,就是可以滿足馬斯洛需求層次理論中的自我需求: 裝逼。這也是我會使用它的原因。

高頻操作

以下是我在使用 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,意指 xdl 的簡寫。

    ddelete,表示刪除,是所有修改操作的基礎。dldl 兩個操作組成,代表刪掉光標右側的字符,同理,dh 代表刪掉光標左側的字符,這是所有刪除的基本形式,也是 vim 的核心思想。

  • 使用 daw 刪除特定單詞

    dawdelete a word,表示刪除特定單詞。同樣也可以使用 db, dw 來刪除單詞。

  • 使用 dt, df 加特定字符,刪掉字符前的文本
  • 使用 di(, da( 刪除特定符號內的文本,如刪除括號,引號中的文本

    di(delete in (,不會刪掉括號。da(delete a (,會連同括號一同刪掉。同理還有 di'di" 等,在編碼中最爲常用!

  • 使用 D (d$) 刪除掉該字符以後的所有文本
  • 使用 dd 刪掉整行
  • 把以上操作的所有 d 替換爲 c,表示刪除後進入編輯模式

    cchange,表示刪除,如 d 一樣,是 vim 的基本動詞

  • 使用 r 加特定字符,表示使用特定字符代替原有字符

文件以及多窗口

  • 使用 :Ex (Explore) 瀏覽目錄

    定位到文件所在行,回車進入指定文件

  • 使用 :ls 列出緩衝列表

    緩衝列表中保存最近使用文件,行頭有標號

  • 使用 :bn 進入最近使用文件

    bnbuffer next,進入緩衝列表的下個緩衝,即最近一次使用文件

  • 使用 :b[N] 進入緩衝列表中標號爲 N 的文件

    b 10buffer 10,進入緩衝列表,即最近一次使用文件

  • 使用 :sbn, :vbn 在新窗口打開最近使用文件

    ssplit,水平方向。
    vvertical,垂直方向。

  • 使用 :on(ly) 只保留當前窗口

基本操作

基本操作指查找,替換,撤銷,重做,複製,粘貼,保存等

  • /{pattern} 查找
    / 後加需要查找的詞或者正則表達式進行查詢,n 向下查詢,N 向上查詢。
  • :s/aa/bb/g 替換
    ssubstitute 的縮寫,替換,g 代表全局替換。
  • u 撤銷
    uundo 的縮寫,撤銷。可與數字結合進行多次撤銷。
  • <Ctrl-r> 重做
  • yy 複製整行
    yyank,複製。使 y 與快速移動結合起來,可以使用多種情況的複製,如複製括號中內容,複製引號中內容。

    複製時,會把當前內容置入寄存器,使用 :reg 查看寄存器列表。

  • p 粘貼
    ppaste,粘貼。
  • "*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 爲 darklight 切換主題

小結

通過本章你可以很熟練地在服務器中使用 vim 編輯文本,如果有必要的話還可以在 linux 中使用 vim 進行編程。但是在服務器中除了需要熟練地使用 vim 外,更需要應付多窗口管理,可以參考下一章 tmux 與多窗口管理


歡迎關注公衆號山月行,我會定期分享一些前後端以及運維的文章,並且會有技術與生活上的每日回顧與總結,歡迎關注交流

歡迎關注公衆號山月行,在這裏記錄我的技術成長,歡迎交流

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章