Vim 1 基本使用

Vim 系列教程目錄:php

前言

Vim, 上古時期的編輯器, 號稱編輯器之神. 我相信搞軟件開發的大都據說過, 並且大多數人其實都多多少少用過 Vim. 什麼? 你沒用過? git commit 瞭解一下, Git 寫提交信息時默認的編輯器就是 Vim 啊.前端

提起 Vim, 不少人的第一印象是: 功能強大, 可是難學, 難用, 能用 Vim 的要麼是大牛, 要麼是在裝B... 老實說, Vim 在服務端用的比較多, 由於默認狀況下, Vim 是服務器上惟二的選擇(還有一個叫 Emacs 的上古神器), 搞客戶端/前端/遊戲/人工智能大數據開發的, 通常不怎麼用 Vim. 並且如今各類編輯器, IDE(集成開發環境) 層出不窮, 界面美觀, 功能強大, 上手容易, 而 Vim 以界面簡陋, 上手困難著稱, 這麼一對比, 選擇 Vim 的人愈來愈少, 對其望而生畏, 也不難理解.git

可是, 我仍是想寫一些關於 Vim 的文章, 一來是總結記錄我這些年來使用 Vim 的心得; 二來, Vim 其實真的是個很優秀的編輯器, 它就像一個其貌不揚卻卻充滿智慧的男人, 你越深刻了解, 越能發現其魅力, 直到你愛上他, 離不開他(咳咳, gay 裏 gay 氣的).shell

聽上去我像是個忠實 Vim 粉, 隨時都要引起編輯器聖戰. 其實不是的. 我在大學期間就學習了 Vim, 到如今也有六七年了, 中間也曾換過 Notepad++, Sublime, VSCode 做爲主力編輯器, 各類 IDE 也都用過(Eclipse, AndroidStuido, JetBrains 全家桶等等), 最終我選擇了 VSCode/IDE + Vim 插件做爲主要的開發工具, 而 Vim 自己, 是我平時寫文檔, 記筆記, 簡單修改 log/配置文件的工具.vim

我向你推薦 Vim, 不是要你把它看成主力工具, 而是但願你能經過學習瞭解它, 學習一種高效的編輯方式, 同時你也能發現一些神奇的, 有趣的功能, 你能夠在你喜歡的工具中添加 Vim 插件, 提高你的編輯效率, 這纔是重點. 另外, 這系列文章並不會教你把 Vim 打形成 IDE, 即便對於我來講, Vim 仍是做爲一個文本編輯器比較合適.服務器

Vim 下載和安裝

官網下載地址: www.vim.org/download.ph…編輯器

Windows 版本請點擊: ftp.nluug.nl/pub/vim/pc/…工具

注意, 下載的文件名是 "gVim81.exe", gVim 的意思是帶圖形界面(Graphic)的 Vim, 由於 Vim 默認是在命令行裏用的, 沒有圖形界面, 實在是太不友好了, 因此官方出了個 gVim, 有圖形界面, 相對友好一些.post

PS. 我如今的電腦是 Windows, 因此如下都會以 Windows 版本的 gVim 作演示.學習

下載以後雙擊下一步下一步安裝就行了, 沒啥須要注意的, 安裝好會在桌面上生成三個圖標: gVim, gVim Easy, 以及 gVim Read-only, 注意, 請點擊 gVim 圖標來打開 Vim, 或者你也能夠在某個文件上右鍵, 選擇"用 Vim 編輯".

打開 Vim 以後, 你會發現這玩意奇醜無比, 簡直不像21世紀的產物. 不要急, 咱們先不要管界面, 先學習使用, 後面咱們會慢慢地把它變好看(因此男人也得學會打扮啊).

接下來, 咱們就能夠學習使用 Vim 了. 我不建議你如今立刻就去看官方文檔(否則我寫這些文章還有啥意義, 大誤...), 由於直接看文檔很容易看懵. 既然你選擇看我這系列文章, 那麼就安心看完, 以後你必定有所收穫, 而且已經掌握基本使用和進階技巧, 再去看官方文檔就會輕鬆不少.

Vim 的幾種模式

Vim 和普通的編輯器有一點很是大的區別, 或者是是本質的區別: Vim 是有不一樣的模式(狀態)的. 普通的編輯器, 你一打開就能夠進行輸入(打字)了, 很符合直覺, 打開就會用, 就好像使用 Word 同樣. 可是 Vim 和他們不同, 你打開 Vim 以後, 是處於一種沒法編輯的狀態中的, 這是 Vim 的普通模式, 在這種狀態下, 你是沒法輸入文字的, 只能執行一些指令.

在普通模式(默認模式)下, 你可使用 h,j,k,l 這幾個按鍵來移動光標, 這四個鍵分別表明 左,下,上,右. 若是想輸入文字, 你須要按下鍵盤上的 i 鍵, 才能進入可編輯的狀態, 即 Vim 的插入模式, 才能像使用普通編輯器同樣打字.

能夠說, 正是因爲 Vim 有不一樣的模式, 才使得 Vim 的編輯效率遠超其餘編輯器. 模式是 Vim 的基礎, 這裏有必要先介紹一下 Vim 的幾種模式.

Vim 有五種模式:

  • 普通模式/默認模式: 執行 Vim 的指令, 如移動光標, 複製/刪除/粘貼文本等等, 不能進行輸入(打字).
  • 插入模式/編輯模式: 進行文本輸入(打字), 和普通編輯器同樣
  • 替換模式: 進行字符替換
  • 可視模式/選擇模式: 進行文本選擇
  • 命令模式: 在 Vim 底部最後一行中輸入命令, 按回車並執行

接下來我介紹如下如何進入/退出這幾種狀態, 我會把全部方式都列舉出來, 可是如今你只需使用最簡單的一種方式便可.

在開始以前, 請連續按幾回 Esc 鍵, 保證你處於普通模式(不管你如今在任何模式下, 按 Esc 鍵可讓你回到普通模式).

普通模式 > 插入模式

要從普通模式進入插入模式, 最簡單的方法就是按 i 鍵, 你能夠理解爲 "insert". 按過 i 鍵以後, 你就能夠打字了.

除此以外, 你還能夠:

  • i/I: 在光標前面/行首插入
  • a/A: 在光標後面/行尾插入
  • o/O: 在下/上一行行首插入
  • 在插入模式下按 Ctrl-o 可進入插入-普通模式, 在此模式下能夠運行一次普通模式命令, 而後就又回到插入模式.

在繼續學習以前, 請先輸入一些文本(最好是英文), 以供後續的操做使用. 另外, 若是操做過程當中, 你不知道本身處於什麼模式了, 那就連續按幾回 Esc, 回到普通模式, 再繼續進行操做. 遇事不決 Esc!

普通模式 > 替換模式

在普通模式下, 按 r 鍵(小寫)可進入替換模式, 你能夠理解爲"replace". 此時你再次輸入的字符, 能夠替換光標處的那個字符. 若是你想連續替換多個字符, 則按 R 鍵(大寫, 即 Shift+r), 此時你的輸入會不斷地替換光標處的字符. 想退出持續替換模式, 按 Esc 便可.

除此以外, 你還能夠:

  • 數字r: 將光標所在向後 n 個字符都替換掉, 例如 3rs 能夠把光標向後的三個字符都替換成 s
  • 在持續替換模式中可以使用 Insert 鍵在持續替換模式和插入模式中切換

普通模式 > 可視模式

在普通模式下, 按 v 鍵可進入可視模式(選擇模式), 你能夠理解爲"visual". 進入可視模式後, 你能夠選擇一些文本, 此時你使用 h,j,k,l 鍵, 能夠改變選擇的區域, 當你選擇了一些文本後, 可使用一些執行操做你選擇的文本, 這個後面再介紹. 要退出可視模式, 按 Esc 鍵或者 v 鍵.

除此以外, 你還能夠:

  • V: 進入行選擇模式, 整行整行地進行選擇
  • Ctrl-q: 進入塊選擇模式. 在這個模式下, 你能夠以"塊" 或者說 "列" 的方式選擇文本. 原本快捷鍵是 Ctrl+v, 可是在 Windows 上, Vim 會模仿 Windows 快捷鍵, Ctrl-v 是粘貼, 因此使用 Ctrl-q 進入塊選擇模式.

普通模式 > 命令模式

在普通模式下, 按 : 鍵(即 Shift+;)便可進入命令模式, 此時光標會跑到編輯器的最底部, 你能夠輸入一些命令, 按回車執行, 執行完命令以後自動回到普通模式, 或者你能夠直接按 Esc 回到普通模式.

其餘模式 > 普通模式

任何模式下, 你均可以按 Esc 回到普通模式, 一次不行就多按幾回, 遇事不決 Esc.

OK, 如今你想一下記住這麼多模式以及進入方法, 確定是比較困難的. 這裏說一下, Vim 不是學會的, 是用會的. 與其學怎麼操做, 不如按照教程本身多作幾回, 多用幾回天然就記住了, 不用擔憂把 Vim 折騰壞了, 大不了重裝(滑稽).

普通模式

接下來咱們就來學學普通模式下的一些指令. 普通模式是進入 Vim 後的默認模式, 在這種模式下, 沒法輸入, 只能移動光標或對文本進行操做.

在進行下面的操做以前, 請先保證你輸入了必定量的文本(最好是英文. PS. 也別最好了, 請必定保證是英文, 中文會遇到一些小狀況, 影響效果).

另外, 下面的指令很是多, 不可能背下來, 要經過"用"去記憶.

移動

  • h/j/k/l: 左/下/上/右移動, 這幾個鍵就在你的右手手指下, 很方便. h 在最左邊, 表示向左, l 在最右邊, 表示向右, j 像個向下的箭頭, 表示向下, k 則是向上. 多用用, 天然能夠記住.
  • 數字h/j/k/l: 左/下/上/右移動 n 下, n 爲輸入的數字, 例如 3l 表示向右移動3次, 3j 表示向下移動三行
  • w: 移動到下一個單詞開頭. 同上, 也能夠在前面加數字來重複屢次, 例如
  • e: 移動到當前或下一個單詞結尾
  • ge: 移動到上一個單詞結尾
  • b: 移動到當前或上一個單詞開頭
  • f/t: 在當前行, 移動到下一個出現某字符的位置/前, 例如 fa, 光標會移動到下一個字母a的位置
  • F/T: 在當前行, 移動到上一個出現某字符的位置/前, 例如 Fa, 光標會移動到上一個字母a的位置
  • 數字f/t: 在當前行向後移動到第 n 次出現 a 的位置/前, 例如 3fa, 光標會向後移動到第三次出現字母a的位置
  • 數字F/T: 在當前行向前移動到第 n 次出現 a 的位置/前, 例如 3Fa, 光標會向前移動到第三次出現字母a的位置
  • 0/$: 光標移動到行首/行尾
  • ^: 光標移動到到非空格的行首
  • %: 在兩個匹配的符號 (, ", { 等等中切換, 光標需先移動到其中一個符號, 若是不在, 則會向後找到最近的一個
  • gg: 光標移動到第一行行首
  • G: 光標移動到最後一行行首
  • 行號G: 光標移動到對應行號行首
  • 數字%: 光標移動到指定百分比的文檔位置, 例如 80%, 光標會移動到文本的 80% 處
  • {/}: 光標移動到上一段/下一段(Paragraph)的行首
  • g;/g,: Vim 內部維護着一個編輯位置歷史, 使用這兩個指令可在編輯位置歷史中跳轉.
  • H: 光標移動到當前屏幕的最上邊(High)
  • M: 光標移動到當前屏幕的中間(Middle)
  • L: 光標移動到當前屏幕的最下邊(Low)
  • zt/zb/zz: 把當前行置爲屏幕正頂部/底部/中間
  • ``: 在兩次 非行內移動 的位置之間跳轉, 例如你如今在第一行, 使用 G 到達文件末尾, 此時按``, 就能夠回到第一行, 另外注意, 這個指令只能在非行內的移動之間跳轉, 若是你的上一次移動是行內移動, 則無效
  • J: 將下一行移動到這一行末尾(合併當前行和下一行)

注意: 數字+指令表示執行屢次指令, 數字通常放在指令以前, 不少指令前面均可以加數字, 這個技巧很重要.

複製/剪切/粘貼

在普通模式下, 能夠進行文本的複製, 剪切和粘貼, 這裏要注意的是, 在 Vim 中, 剪切和刪除的表現效果是同樣的, 剪切或刪除的文本都會進入到 Vim 的寄存器裏(寄存器是什麼鬼, 之後會講).

  • y: 開始複製
  • yy/Y: 複製當前行
  • 數字yy: 從當前行開始, 複製多行, 例如: 3yy 表示複製三行.
  • yh/yl: 向左/向右複製一個字符, 即 y 指令後面能夠跟"移動指令"
  • y0/y$: 從光標處複製到本行開頭/末尾
  • yw/ye: 複製一個單詞, 或從光標處複製到本單詞末尾
  • yt: 從光標處開始複製, 直到碰見某字符. 例如 yta, 表示從光標處開始複製, 直到碰見a, a不復制, 同理可以使用 yf, yF, yT
  • yG: 從當前行開始複製直到最後一行
  • ygg: 從當前行開始複製直到第一行

  • d: 開始剪切, 以後仍留在普通模式, 其用法和 y 相似, 請自行嘗試
  • D: 從光標處開始剪切, 直到行尾
  • x: 剪切光標所在的字符, 以後仍留在普通模式
  • 數字x: 剪切從光標開始日後的 n 個字符, 以後仍留在普通模式, 例如 3x, 表示向後剪切3個字符
  • X: 剪切當前光標左邊的字符
  • 數字X: 剪切從光標開始往前的 n 個字符, 以後仍留在普通模式, 例如 3X, 表示向前剪切3個字符

  • c 開始剪切, 以後進入插入模式, 用法和 d 相似, 請自行嘗試
  • 數字c: 剪切從光標開始日後的 n 個字符, 並進入插入模式
  • C 剪切至行尾, 並進入插入模式
  • s 剪切光標所在字符, 並進入插入模式, 和 x 相似
  • S 剪切當前行, 並進入插入模式

  • p: 將複製/剪切的內容粘貼到光標後面, 若是複製/剪切的內容是整行的, 則粘貼到當前行的下面
  • P: 將複製/剪切的內容粘貼到光標前面, 若是複製/剪切的內容是整行的, 則粘貼到當前行的上面
  • 數字p/P: 粘貼屢次
  • ddp: 其實就是剪切當前行再粘貼了, 可是你會發現, 當前行和下一行換位置了
  • xp: 其實就是剪切當前光標所在字符再粘貼, 可是你會發現, 兩個字符交換位置了

注意: 幾乎全部的移動, 複製, 粘貼命令前面均可以加數字, 表示重複的次數, 複製和剪切指令也幾乎均可以加上移動指令, 表示向某個方向複製/剪切.

查找

在普通模式下輸入 / , 便可對當前文件進行文本查找.

  • /xxx: 在全文中查找 xxx, 並高亮顯示, 字符 .*[]^%/?~$<> 等有特殊意義, 須要用 \ 轉義
  • ?xxx: 和 / 效果同樣, 只是查找方向反向
  • N/n: 在查找到的高亮位置之間先後切換, 前面能夠加數字, 表示第n次出現的位置
  • /\\<xxx\\>: 匹配完整的單詞, 若是某單詞中只是包含 xxx, 則不會被匹配上, 因爲 > 有特殊含義, 因此須要轉義, 因爲 \ 也有特殊含義, 須要二次轉義...
  • #/*: 在某個單詞上使用這兩個指令, 能夠移動到上一個/下一個與光標所在單詞相同的單詞上, 同時高亮全部相同單詞, 這個指令頗有用

PS. Vim 會記錄已經查找過的內容, 再次查找時, 可經過上下鍵來切換以前的輸入

注意: 一個有用的命令: nohlsearch, 此命令能夠取消當前的查找的高亮, 簡寫 nohl

文本操做

在普通模式下, 可使用以下指令進行簡單的文本操做:

  • >>/<<: 當前行向右/向左縮進一個 Tab
  • 行號1 行號2 >>: 從行號1到行號2向右縮進一個 Tab
  • 行號1 行號2 <<: 從行號1到行號2向左縮進一個 Tab
  • gU/gu/g~: 將選中的內容轉化爲大/小寫/大小寫切換
  • u: u 指令能夠對以前的操做進行 Undo, 即撤銷操做
  • Ctrl-r: Ctrl-r 這個快捷鍵能夠對以前的操做進行 Redo, 即撤銷上次撤銷.

其餘

  • .: 普通模式中按 . (即句號鍵)能夠重複上次的指令, 除了 u 指令. 除此以外, 從進入插入模式開始, 到回到普通模式爲止, 這個過程當中發生的全部操做 也可使用 . 來回放. . 本質上是一個"宏"(什麼鬼, 後面會詳細講"宏").
  • ZZ: 退出當前的文件. 我在查看不可編輯的文件時, 常常用這個指令退出文件, 好比 git log.

可視模式

普通模式中按 v 鍵可進入可視模式(選擇模式), 按 Esc 或 v 退出, 選擇過程當中可以使用普通模式的移動指令改變選擇區域, 選擇以後能夠對選擇的內容進行復制/刪除等操做.

普通模式中按 V 鍵進入整行可視化選擇, 再按 Esc/V 退出, 以"行"爲單位進行選擇.

可視模式下的一些技巧:

  • o: 在可視化選擇模式下, 使光標移動到選擇區域的另外一頭
  • O: 在塊可視化選擇模式下, 使光標移動到這一行的另外一頭
  • gg, 而後 vG, 就能夠全選.
  • Ctrl-q: 塊可視化選擇, 其實應該是 Ctrl-v, 可是對於 Windows 的 gVim, Ctrl-v 是粘貼, 因此改成 Ctrl-q.
  • gg, 而後 Ctrl-q(Ctrl-v), 而後按 G, 就能夠選擇文本的第一列

命令模式

在普通模式下按 : 進入命令模式, 能夠執行一些 Vim 命令, 也可執行系統命令.

在我這系列 Vim 的文章中, 我會將普通模式下的操做稱之爲 "指令", 而命令模式下的操做稱之爲 "命令", 雖然在英文中, 它們都是 "command", 可是我這裏仍是想區分開來, 之後我只要說 "指令", 指的就是普通模式的操做, 而 "命令", 指的就是命令模式下的操做.

經常使用命令

  • :w: 保存當前文件, 但不退出. 注意, 若是你是直接打開 Vim, 而後開始編輯, 你是沒法直接使用 w 命令保存的, Vim 會提示你沒有文件名, 要解決這個問題, 你須要在 w 命令後面跟上一個路徑及文件名, 好比: :w d:/temp/test.txt, 這樣你才能保存當前文件. 這就比如你在其餘編輯器裏新建個文件, 當你要保存時, 其餘編輯器會彈一個對話框, 讓你選擇保存路徑, 只是 Vim 把這個過程命令化了.
  • :q/:q!: 退出/強制不保存退出, 在任何命令後加 ! 表示強制執行此命令.
  • :wq: 保存並退出當前文件
  • :e!: 放棄全部修改, 載入文件的初始狀態, 慎用!
  • :pwd: 顯示當前目錄
  • :行號: 定位到對應行號, 例如 :20 可定位到第20行, 和普通模式下的 20G 效果同樣.
  • 行號1,行號2 d: 刪除從行號1到行號2的內容, 例如: :3,5 d 表示刪除第3行到第5行, y 指令也一樣適用.
  • 行號1,行號2 >>: 從行號1到行號2向右縮進一個 Tab, 同理, 也能夠向左縮進
  • :! shell指令: 執行 shell(dos) 指令, 例如: :! ipconfig
  • :r! shell指令: 將 shell(dos) 指令的執行結果寫到當前行的下面

PS: 在命令模式裏按上下箭頭能夠切換以前輸入的命令

替換命令

在普通模式下, 按 / 能夠進行查找操做, 在命令模式下, 可以使用一些替換命令, 將查找到的文本的進行替換.

替換的基本表達式 [range]s/from/to/[flags], 表示將 range 範圍的 from 替換成 to, flags 表示替換範圍. 替換指令使用起來很複雜, 暫時不須要掌握.

  • :%s/aaa/bbb/g: 把全文中的全部 aaa 替換成 bbb, %s 表示所有行(range), g 表示全部匹配的(flags)
  • :s/aaa/bbb/: 把當前行的第一個 aaa 替換成 bbb, s 表示當前行(range), 不指定 flag 就只替換第一個
  • :行號1,行號2s/aaa/bbb/g: 把行號1和行號2之間的 aaa 替換成 bbb.
  • :行號1,行號2s/^/aaa/g: 把行號1和行號2之間的行前面都加上aaa(便可以使用正則, ^表示行首)
  • :行號1,行號2s/^/\/\//g: 從行號1和行號2之間的行都加上//註釋(/須要轉義)
  • :行號1,行號2s/\/\//g: 從行號1和行號2之間的行都去掉//註釋

PS. 在替換命令中 . 表明當前行, $ 表示最後一行

小結

好了, 到此爲止, Vim 的基本操做已經講完了, 我相信你已經能夠打開 Vim, 進行文字編輯, 並保存文件了.

上面列出的指令命令很是多, 須要你在使用過程當中慢慢記憶, 仍是那句話, Vim 不是學會的, 是用會的.

Vim 教程

其實我這一系列教程就不錯. emmm... 真的, 看完以後, 你必定能夠掌握 Vim 的基本使用以及進階用法, 並且我還講了一些初學者會遇到的問題, 可以解釋不少奇怪的現象.

Vim 自帶一個交互式教程, 在 Linux/Mac 的 Vim 中, 你能夠在命令模式下輸入 vimtutor 開啓這個教程, 在 Windows 下, 你能夠打開 Vim 安裝目錄下的 vim81/vimtutor.bat 來開啓這個教程. 這個交互式教程會開啓一個 Vim 副本, 你能夠隨便在裏面操做, 沒必要擔憂搞壞. 教程比較精煉, 一小時左右能夠學完, 掌握 Vim 的基本操做.

固然了, 若是你想看更詳細的教程, 我推薦 Vim 的官方文檔. Vim 有很是詳細的官方文檔, 文檔就是最權威的 Vim 教程. 要查看文檔, 可在命令模式下輸入 help 便可. 若是要查看某個主題的幫助文檔, 則輸入 help <主題> 便可. 看文檔的時候按 Ctrl-] 跳入某個子主題, Ctrl-t/o 跳回來.

這裏有個問題: 默認狀況下文檔是英文的, 看起來仍是很費勁, 這裏給出一份中文文檔:
連接:pan.baidu.com/s/1jpCwdBPH… 提取碼:cyqf
裏面有 PDF 版本, 還有一個安裝程序, 會自動將中文文檔安裝到你的 Vim 安裝目錄下, 很貼心吧.

不過如今仍是不建議你看文檔, 很容易看懵. 仍是繼續把我這系列教程看完吧.

相關文章
相關標籤/搜索