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 仍是做爲一個文本編輯器比較合適.服務器
官網下載地址: 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 是有不一樣的模式(狀態)的. 普通的編輯器, 你一打開就能夠進行輸入(打字)了, 很符合直覺, 打開就會用, 就好像使用 Word 同樣. 可是 Vim 和他們不同, 你打開 Vim 以後, 是處於一種沒法編輯的狀態中的, 這是 Vim 的普通模式, 在這種狀態下, 你是沒法輸入文字的, 只能執行一些指令.
在普通模式(默認模式)下, 你可使用 h,j,k,l
這幾個按鍵來移動光標, 這四個鍵分別表明 左,下,上,右. 若是想輸入文字, 你須要按下鍵盤上的 i
鍵, 才能進入可編輯的狀態, 即 Vim 的插入模式, 才能像使用普通編輯器同樣打字.
能夠說, 正是因爲 Vim 有不一樣的模式, 才使得 Vim 的編輯效率遠超其餘編輯器. 模式是 Vim 的基礎, 這裏有必要先介紹一下 Vim 的幾種模式.
Vim 有五種模式:
接下來我介紹如下如何進入/退出這幾種狀態, 我會把全部方式都列舉出來, 可是如今你只需使用最簡單的一種方式便可.
在開始以前, 請連續按幾回 Esc 鍵, 保證你處於普通模式(不管你如今在任何模式下, 按 Esc 鍵可讓你回到普通模式).
要從普通模式進入插入模式, 最簡單的方法就是按 i
鍵, 你能夠理解爲 "insert". 按過 i 鍵以後, 你就能夠打字了.
除此以外, 你還能夠:
在繼續學習以前, 請先輸入一些文本(最好是英文), 以供後續的操做使用. 另外, 若是操做過程當中, 你不知道本身處於什麼模式了, 那就連續按幾回 Esc, 回到普通模式, 再繼續進行操做. 遇事不決 Esc!
在普通模式下, 按 r
鍵(小寫)可進入替換模式, 你能夠理解爲"replace". 此時你再次輸入的字符, 能夠替換光標處的那個字符. 若是你想連續替換多個字符, 則按 R
鍵(大寫, 即 Shift+r), 此時你的輸入會不斷地替換光標處的字符. 想退出持續替換模式, 按 Esc 便可.
除此以外, 你還能夠:
3rs
能夠把光標向後的三個字符都替換成 s在普通模式下, 按 v 鍵可進入可視模式(選擇模式), 你能夠理解爲"visual". 進入可視模式後, 你能夠選擇一些文本, 此時你使用 h,j,k,l 鍵, 能夠改變選擇的區域, 當你選擇了一些文本後, 可使用一些執行操做你選擇的文本, 這個後面再介紹. 要退出可視模式, 按 Esc 鍵或者 v 鍵.
除此以外, 你還能夠:
在普通模式下, 按 :
鍵(即 Shift+;)便可進入命令模式, 此時光標會跑到編輯器的最底部, 你能夠輸入一些命令, 按回車執行, 執行完命令以後自動回到普通模式, 或者你能夠直接按 Esc 回到普通模式.
任何模式下, 你均可以按 Esc 回到普通模式, 一次不行就多按幾回, 遇事不決 Esc.
OK, 如今你想一下記住這麼多模式以及進入方法, 確定是比較困難的. 這裏說一下, Vim 不是學會的, 是用會的. 與其學怎麼操做, 不如按照教程本身多作幾回, 多用幾回天然就記住了, 不用擔憂把 Vim 折騰壞了, 大不了重裝(滑稽).
接下來咱們就來學學普通模式下的一些指令. 普通模式是進入 Vim 後的默認模式, 在這種模式下, 沒法輸入, 只能移動光標或對文本進行操做.
在進行下面的操做以前, 請先保證你輸入了必定量的文本(最好是英文. PS. 也別最好了, 請必定保證是英文, 中文會遇到一些小狀況, 影響效果).
另外, 下面的指令很是多, 不可能背下來, 要經過"用"去記憶.
注意: 數字+指令表示執行屢次指令, 數字通常放在指令以前, 不少指令前面均可以加數字, 這個技巧很重要.
在普通模式下, 能夠進行文本的複製, 剪切和粘貼, 這裏要注意的是, 在 Vim 中, 剪切和刪除的表現效果是同樣的, 剪切或刪除的文本都會進入到 Vim 的寄存器裏(寄存器是什麼鬼, 之後會講).
注意: 幾乎全部的移動, 複製, 粘貼命令前面均可以加數字, 表示重複的次數, 複製和剪切指令也幾乎均可以加上移動指令, 表示向某個方向複製/剪切.
在普通模式下輸入 /
, 便可對當前文件進行文本查找.
.*[]^%/?~$<>
等有特殊意義, 須要用 \ 轉義/\\<xxx\\>
: 匹配完整的單詞, 若是某單詞中只是包含 xxx, 則不會被匹配上, 因爲 >
有特殊含義, 因此須要轉義, 因爲 \
也有特殊含義, 須要二次轉義...PS. Vim 會記錄已經查找過的內容, 再次查找時, 可經過上下鍵來切換以前的輸入
注意: 一個有用的命令: nohlsearch, 此命令能夠取消當前的查找的高亮, 簡寫 nohl
在普通模式下, 可使用以下指令進行簡單的文本操做:
>>/<<
: 當前行向右/向左縮進一個 Tab行號1 行號2 >>
: 從行號1到行號2向右縮進一個 Tab行號1 行號2 <<
: 從行號1到行號2向左縮進一個 Tab普通模式中按 v 鍵可進入可視模式(選擇模式), 按 Esc 或 v 退出, 選擇過程當中可以使用普通模式的移動指令改變選擇區域, 選擇以後能夠對選擇的內容進行復制/刪除等操做.
普通模式中按 V 鍵進入整行可視化選擇, 再按 Esc/V 退出, 以"行"爲單位進行選擇.
可視模式下的一些技巧:
在普通模式下按 : 進入命令模式, 能夠執行一些 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 不是學會的, 是用會的.
其實我這一系列教程就不錯. 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 安裝目錄下, 很貼心吧.
不過如今仍是不建議你看文檔, 很容易看懵. 仍是繼續把我這系列教程看完吧.