學習 VIM 之 2014:和檔案打交道

發表於2014-10-17

作為一名開發者,你不應該把時間花費在考慮如何去找你所要編輯的程式碼上。在我轉移到完全使用 VIM 的過程中,感到最痛苦的就是它處理檔案的方式。從之前主要使用 Eclipse 和 Sublime Text 過渡到 VIM,它沒有捆綁一個常駐的檔案系統檢視器對我造成了不少阻礙,而其內建的開啟和切換檔案的方式總是讓我淚流滿面。

就這一點而言,我非常欣賞VIM檔案管理功能的深度。在工作環境上我已經裝配了這些工具,甚至比起那些視覺編輯器好很多。因為這個是純鍵盤操作,可以讓我更快地在程式碼裡面穿梭。搭建環境需要花費一些時間,安裝幾個外掛。首先第一步是我明白vim內建功能只是處理檔案的一種選擇。在這篇文章裡我會帶你去認識vim檔案管理功能與使用更高階的外掛。

基礎篇:開啟新檔案

學習vim其中最大的一個障礙是缺少可視提示,不像現在的GUI圖形編輯器,當你在終端開啟一個新的vim是沒有明顯的提示去提醒你去走什麼,所有事情都是靠鍵盤輸入,同時也沒有更多更好的介面互動,vim新手需要習慣如何靠自己去查詢一些基本的操作指令。好吧,讓我開始學習基礎吧。

建立新檔案的命令是:e 或:e 開啟一個新緩衝區儲存檔案內容。如果檔案不存在它會開闢一個緩衝區去儲存與修改你指定檔案。緩衝區是vim是術語,意為”儲存文字塊到記憶體”。文字是否能夠與存在的檔案關聯,要看是否每個你開啟的檔案都對應一個緩衝區。

開啟檔案與修改檔案之後,你可以使用:w命令來儲存在緩衝區的檔案內容到檔案裡面,如果緩衝區不能關聯你的檔案或者你想儲存到另外一個地方,你需要使用:w 來儲存指定地方。

這些是vim處理檔案的基本知識,很多的開發者都掌握了這些命令,這些技巧你都需要掌握。vim提供了很多技巧讓人去深挖。

緩衝區管理

基礎掌握了,就讓我來說更多關於緩衝區的東西,vim處理開啟檔案與其他編輯器有一點不同,開啟的檔案不會作為一個標籤留在一個可見的地方,而是隻允許你同時只有一個檔案在緩衝區開啟,vim允許你開啟多個快取區。一些會顯示出來,另外一些就不會,你需要用:ls來檢視已經開啟的快取,這個命令會顯示每個開啟的快取區,同時會有它們的序號,你可以通過這些序號使用:b 來切換或者使用循序移動命令 :bnext 和 :bprevious 也可以使用它們的縮寫:bn:bp

這些命令是vim管理檔案緩衝區的一個基礎,我發現他們不會按照我的想法對映出來。我不想關心緩衝區的順序,我只想按照我的想法去到那個檔案或者想在當前這個檔案.因此必需瞭解vim更深入的快取模式,我不是推薦你必須用內部命令來作為主要的檔案管理方案。但這些的確是很強大可行的選擇。

分屏

分屏是vim其中一個最好用的管理檔案功能,在vim中你可以將當前視窗同時分開為2個視窗,可以按照你喜歡的配置去重設大小和分配,個別時候,我可以在同時開啟6檔案每個檔案,每個都擁有不同大小。

你可以通過命令:sp 來新建水平分割視窗或者 :vs 垂直分割視窗。你可以使用這些關鍵命令去調整你想要的視窗大小,老實說,我喜歡用滑鼠處理vim任務,因為滑鼠能夠給我更加準確的兩列的寬度而不需要猜大概的寬度。

建立新的分屏後,你需要使用ctrl-w [h|j|k|l]來向後向前切換。這個有一點笨拙,但這個卻是很重要、很普遍、很容易、很高效的操作。如果你經常使用分屏,我建議你去.vimrc使用以下程式碼去設定別名為ctrl-h ctrl-j 等等。

跳轉表

分屏是解決多個關聯檔案同時檢視問題,但我們仍然不能解決已開啟檔案與隱藏檔案之間快速移動問題。這時跳轉表是一個能夠解決的工具。

跳轉表是眾多外掛中看起來奇怪而且很少使用的一個。vim能夠追蹤每一步命令還有切換你正在修改的檔案。每次從一個分屏視窗跳到另外一個,vim都會新增記錄到跳轉表裡面。它記錄你去過的地方,這樣就不需要擔心之前的檔案在哪裡,你可以使用快捷鍵去快速追溯你的蹤跡。Ctrl-o允許你返回你上一次地方。重複操作幾次就能夠返回到你最先編寫的程式碼段地方。你可以使用ctrl-i來向前返回。當你在除錯多個檔案或在兩個檔案之間切換時,它能夠發揮極大的快速移動功能。

外掛

如果你想vim像Sublime Text 或者Atom一樣,我就讓你認清一下,這裡有很好的機會讓你看清一些難懂,可怕和低效的事情。例如大家會發出”當Sublime有了模糊查詢功能,為什麼我一定要輸入全路徑才能夠開啟檔案” “沒有側邊欄顯示目錄樹我怎樣檢視專案結構” 等等。但vim有了解決方案。這些方案不需要破壞vim的核心。我只需要經常修改vim配置與新增一些最新的外掛,這裡有3個有用的外掛可以讓你像Sublime管理檔案

  • CtrlP 是一個跟Sublime的”Go to Anything”欄一樣模糊查詢檔案.它快如閃電並且非常可配置性。我使用它主要用來開啟檔案。我只需知道部分的檔名字不需要記住整個專案結構就可以查詢了。
  • The NERDTree 這個一個檔案管理夾外掛,它重複了很多編輯器都有的側邊檔案管理夾功能。我實際上很少用它,對於我而言模糊查詢會更加快。對於你接手一個專案,嘗試學習專案結構與瞭解什麼可以用是非常方便的,NERDTree是可以自己定製配置,安裝它能夠代替vim內建的目錄工具。
  • Ack.vim 是一個專為vim的程式碼搜尋外掛,它允許你跨專案搜尋文字。它封裝了Ack 或 Ag 這兩個極其好用的搜尋工具,允許你在任何時候在你專案之間快速搜尋跳轉。

在vim核心與它的外掛生態系統之間,vim 提供足夠的工具允許你構建你想要得工作環境。檔案管理是軟體開發系統的最核心部分並且你值得擁有體驗的權利。

開始時需要通過很長的時間去理解它們,然後在找到你感覺舒服的工作流程之後再開始在上面新增工具。但依然值得你去使用,你不用爆頭就可以理解如何去使用,能夠輕易編寫你的程式碼。

更多外掛資源

  • Seamlessly Navigate Vim & Tmux Splits 這個外掛需要每一個想使用它的人都要懂得使用tmux,這個跟vim的splits 一樣簡單好用。
  • Using Tab Pages 它是一個vim的標籤功能外掛,雖然它的名字用起來有一點疑惑,但它不是檔案管理器。對如何在有多個工作可視區使用”tab pages” 在vim wiki 網站上有更好的概述。
  • Vimcasts: The edit command 一般來說 Vimcasts 是大家學習vim的一個好資源。這個螢幕截圖與一些內建工作流程很好地描述了之前說的檔案操作方面的知識。

相關文章