vim 高頻操做以及經常使用插件

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

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

本章旨在如何快速的上手 vim,主要體如今如下三個方面程序員

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

掌握了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 的思想。
  • 減小上一步的左右移動,效率過低,使用 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,意指 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 與多窗口管理


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

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

相關文章
相關標籤/搜索