進度條

不小心打開後就關不起來的Vim, 學Git 指令上最大的絆腳石?

是神還是魔鬼的編輯器Vim? 投降前先來聽聽Vi和Vim的介紹

作者: Vincent Ke 更新日期:

 

校正小編補充:
不曉得大家對上面的圖熟不熟悉?這是使用Git在合併(Merge)分支(branch) 的時候如果有Conflict或是合併的分支在提交(Commit)先後順序上有交錯,就會跑到這個頁面。這個頁面在Git預設是用Vi 編輯器開啟的,但是Vi在Mac底下則是被Vim用軟連結的方式取代掉了(軟連結就是類似Windows系統底下的”捷徑“)。總之無論是Vi或是Vim,都常常在某些Linux base底下的軟體於文字修改的時候自動跳出來,讓不清楚的人困惑。而且更重要的是,不知道如何跳出。


這邊以上面的圖檔的情況來說,只要輸入  :wq! 就可以了喔!
: 代表接下來為指令
w 代表寫入 = 儲存
q 代表離開程式
!  代表強制執行 ,有時候因為一些因素導致安全機制不讓你寫入。
   例如檔案在開啟後被其他人修改過。強制執行可以強制儲存成現在看到的內容。
   所以這個指令也可以不下。


如果不要儲存,就改下 :q!,就會回到上一個動作,中間做的任何修改都不會儲存。
 

 

相信身為程式設計師的各位,心中一定有一個自己最屬意的編輯器吧,不管今天你是屬於哪一個門派裡頭修練練功,一定對Vim這個詞彙相當熟悉,而他在編輯器中的經典以及雋永的地位,也在許多人心中佔了一席之地,僅管設計得相當不人性化,但不得不否認現在仍然是許多人寫程式的第一選擇,而近年來各種編輯器之亂相繼開打,這樣的選擇不僅僅是與開發習慣息息相關,也會和你的開發語言有著部分的關聯,但對於許多程式新手而言,Vim一定是一個心中的痛點

 

 

僅管文字編輯器Vim擁有許多擴充和快捷鍵,並且相較於部分編輯器來說,具備著較高的效能,但相對的許多不人性化的設計,也造就了進入門檻較高,對初學者來說學習上更是難度居高的代表,僅管上手後就會對Vim情有獨鍾,但我想我們還是需要來了解一下,經典之所以可以成為經典的歷史緣由吧!

 

約在1976年左右,博克來畢業生Bill Joy開發出了Vim的前前生-ex,之後開發出了vi作為 ex 編輯器的一部份 ,vi 是一個 UNIX 上非常風行的螢幕式編輯器,也剛好因應了當時透過螢幕及鍵盤做為程式編輯介面的趨勢,但在早期還沒有滑鼠,以及鍵盤的全部案件並非像現在一樣功能齊備時,VI就设计成只需要打字机的键盘,加上退出键ESC就能完成输入和修改。雖然資源不夠充裕,但對當時的開發者來說,只要手指不離開打字範圍內就可以完成所有的編輯動作,無非是一件夢寐以求的事情。而這樣的螢幕式編輯器更大大提高了 編輯效率。

 

 

在後來技術的進步後,vi也出現了許多擴充版本,但其中最廣為流傳的就是我們熟悉的Vim了,並和Emacs並列成為類Unix系統用戶最喜歡的編輯器。

 

Bram Moolenaar 在1980年代後期買了一台Amiga電腦時,但剛好這台電腦上沒有他最常用的編輯器vi。於是Bram從一個開源的vi複製Stevie開始,進行Vim1.0版本的開發,這聽起來的確是一個感人的故事,而他最初的目標只是完全複製vi的功能,所以Vim是Vi IMitation(模擬)的簡稱。

 

直到1991年Vim 開發版本已經逼近到1.14版並被"Fred Fish Disk #591"這個Amiga用的免費軟體集給收錄,而在1992年的1.22版本的Vim更被移植到了UNIX和MS-DOS上,直到那時開始,Vim的全名就變成Vi IMproved(改良)而非一開始的(模擬)。而Vim也開始加入了許多新功能。像1994年的3.0版本加入了多視窗編輯模式(分割視窗);1996年發布的Vim 4.0是第一個利用GUI(圖形化使用者介面)的版本。1998年5.0版本的Vim加入了highlight功能。2001年的Vim 6.0版本加入了代碼摺疊、外掛模組、多國語言支援、垂直分割視窗等功能。

 

 

2006 年5月的 7.0版更加入了拼字檢查、上下文相關補全,分頁編輯等新功能。現在2013年8月發布的Vim 7.4,這個版本除了包含最新修正的修補程式之外,還加入了「永久撤銷」、「Blowfish演算法加密」、「純文字隱藏」和「Lua以及Python3的介面」等新功能,這中間的7.0版本主要都是在做一些小功能的修補及新增。但在2016年時Vim發布了最新版本8.0,並宣布不再對 16 位元的 DOS、OS/2 和 Amiga 版本、 32 位元的 MS-DOS/Windows 95/98 的字符界面版以及16 位元的 MS-Windows 版本支援。

 

而Vim比較不友善的地方,就是因為他是從vi衍生出來,所以是一種具備多模式的編輯器,這樣的設計方式主要也是遷就在早期的開發資源上,但好處是可以單單使用鍵盤就完成了飛快似的輸入,所以若是熟悉的話對於開發的速度會有顯著的提升,但是相對於初學者而言,就不是這麼友善了。

 

 

以下就針對一些基本模式做一些初步的介紹

1.Normal Mode(普通模式)

Vim的默認預設模式。在這個模式下你可以快速的移動光標,刪除,複製文字。僅管大部分的編輯器都是預設為插入模式,但Vim的強大也剛好在此,若是使用指令上手後,就可以快速的編輯純文字

 

2.Visual Mode(可視模式)

大致上和普通模式相同,在這種模式下選定一些字符、行、多列做移動後可Highlight,若執行非移動的命令時,命令就會執行到被Highlight的區域上。在普通模式下,可以按V\v進入,。

 

3.Insert Mode(插入模式,或是編輯模式)

其實就是指處在編輯輸入的狀態。普通模式下,可以按i\I,a\A,o\O進入,並可用Esc回到普通模式 。

 

4.Select Mode(選擇模式)

這個模式中,可以用滑鼠或者光標鍵higjlight選擇文字,若輸入任何字元的話,Vim會字動替換選擇的highlight區塊,並且自動進入插入模式。

 

5.Command-Line(命令列模式)

在命令列模式中可以輸入會被解釋成並執行的純文字。

 

6.Ex Mode(Ex模式)

普通模式下鍵入Q進入該模式,可以一次執行多條命令。

 

相較於Vim,Vi就僅僅指有普通模式、編輯模式以及指令模式,也沒有Highlight的功能,但Vi現在其實也是仍然有死忠粉絲的,而在開源協定的部分,目前Vim是按照自己本身的license所發布的開源軟體,這個協定可相容GPL,所以也算是開源的。僅管本身Vim對於大檔案的讀取速度較慢,,他仍然有許多好用的地方,像是可以配置成成在編輯代碼原始檔後,可直接進行編譯的功能,若在編譯出錯的情況下,可以在另一個窗口中顯示出錯誤,並直接跳轉到正在編輯的原始檔出錯位置,另外像是透過顏色來做多版本檔案的比較,以及GUI版的Vim中還可以使用滑鼠在幫助檔案中移動,以及根據設定可以和原始vi幾乎相容等,都是相當友善的功能

 

僅管洋洋灑灑的介紹這樣經典的文字編輯器,而Vim也有"文字編輯器之神"的美稱,但根據程式問答網站Stack Overflow的統計,針對「如何退出Vim」這個問題就達到了一百萬的瀏覽次數,而更有人在Twitter表示學習Vim只是因為他不知道如何退出,但由於Vim是版本控制軟體git的預設編輯器,所以我想對熟悉Vim來說是絕對必要的,而至於Vim與Emacs之間的編輯器之戰又是另外一段故事了。

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Medium vincent

Vincent Ke

喜歡把混亂的事情變的簡單 用嘴巴做事其實很可以 但要結合靈活的腦袋思考 就一起來拆解吧