Vi如何操作:從入門到精通,探索Vim文字編輯器的強大奧秘與實用技巧

欸,你是不是也常常聽人家說到「Vi」或「Vim」這個文字編輯器,但一聽到要用它,心裡就抖了一下,覺得好像很難、很複雜,不知道Vi如何操作才好?別擔心啦!今天這篇文章就是要來幫你把Vi/Vim的神秘面紗給揭開,讓你從一個完全的門外漢,也能一步步掌握它的操作精髓。簡單來說,Vi/Vim是一款非常強大且效率極高的文字編輯器,它最大的特色就是採用了「模式」的概念,讓使用者可以用鍵盤完成幾乎所有的編輯任務,不用一直換手去摸滑鼠,對於常常需要處理程式碼、設定檔的工程師或是系統管理員來說,這根本就是超級神器!學會Vi/Vim不只是學一個工具,更是學一種高效編輯的思維,相信我,一旦你習慣了,回頭看那些傳統的編輯器,真的會覺得慢很多耶!

Vi/Vim 的模式世界:這是關鍵喔!

Vi/Vim最讓新手感到困惑的地方,就是它不是像一般記事本那樣,開起來就能直接打字。它有不同的「模式」,每個模式都有不同的功能。這真的超重要,搞懂了模式,你就搞懂了Vi/Vim的一半啦!

我個人在剛開始學習Vi/Vim的時候,也常常搞不清楚現在到底在哪個模式,然後就亂按一通,結果整個檔案就亂掉了。但其實只要多練習,慢慢你就會對模式切換有感覺囉!這裡幫大家整理了一個小表格,讓你一目瞭然:

模式名稱

主要功能

進入方式

回到普通模式

小撇步

普通模式 (Normal Mode)

導航、刪除、複製、貼上、呼叫其他模式、執行指令

Vi/Vim開啟時的預設模式

Esc 或 Ctrl-[

這是你的「指揮中心」,大部分操作都在這裡喔!

插入模式 (Insert Mode)

輸入文字,就像一般文字編輯器

普通模式下按 i, a, o 等

Esc

想打字就進來,打完記得按Esc回普通模式。

命令列模式 (Command-line Mode / Ex Mode)

執行指令、儲存、離開、搜尋、取代、執行外部程式

普通模式下按 :, /, ?

Enter (執行指令後自動退出) 或 Esc (取消指令)

所有進階功能都在這裡設定或執行,超級強大。

視覺模式 (Visual Mode)

選取文字塊,進行區塊性操作

普通模式下按 v (字元), V (行), Ctrl-v (區塊)

Esc

選取範圍後,可以用各種普通模式指令操作選取範圍。

普通模式 (Normal Mode):你的指揮中心!

這是你打開Vi/Vim時的預設模式。你在這裡不會直接輸入文字,而是下達各種指令,像是移動游標、刪除文字、複製貼上、或是切換到其他模式。這就像是你在指揮一場文字編輯的戰役,所有的調度都在這個模式下進行。習慣了,你會發現它的效率真的爆表!

插入模式 (Insert Mode):打字就對了!

當你真的需要輸入文字的時候,就要切換到這個模式。你可以想像它就是我們一般常見的文字編輯器,你可以自由地輸入、刪除、修改文字。進入插入模式的方式有很多種,最常用的就是按 i (在游標所在位置前插入),或是 a (在游標所在位置後插入)。打完字,記得一定要按 Esc 鍵,回到普通模式,這樣才能繼續執行其他指令喔!

命令列模式 (Command-line Mode / Ex Mode):下達指令的好地方!

這個模式主要用來執行一些比較複雜的指令,像是儲存檔案、離開Vi/Vim、搜尋和取代文字,甚至是執行一些系統指令。你只要在普通模式下輸入 : (冒號)、/ (斜線) 或 ? (問號),Vi/Vim的下方就會出現一個命令列提示符號,你就可以輸入指令了。輸入完指令後按下 Enter,指令就會執行,然後Vi/Vim會自動回到普通模式。

視覺模式 (Visual Mode):選取文字的魔法!

有時候我們需要選取一段文字,然後對這段文字進行操作,這時候視覺模式就派上用場了。它就像你用滑鼠拖曳選取文字一樣,但全部用鍵盤搞定!視覺模式又分成三種:

v:字元視覺模式 (Visual Character Mode),可以選取一個一個字元。

V:行視覺模式 (Visual Line Mode),可以選取一整行一整行。

Ctrl-v:區塊視覺模式 (Visual Block Mode),可以選取矩形區塊的文字,這在處理表格或多行相同開頭的內容時超級好用喔!

選取完文字後,你就可以在普通模式下執行像是刪除 (d)、複製 (y) 等指令,這些指令就只會作用在你選取的範圍上。

Vi如何操作?基本操作流程大公開!

了解了模式,我們就可以來看看,要怎麼實際操作Vi/Vim啦!這就像一個小小的SOP,跟著步驟走,你就能輕鬆上手喔!

開啟檔案:

首先,你需要在終端機裡面輸入指令來開啟Vi/Vim。

vi 檔案名稱

舉例來說,如果你想編輯一個叫做 my_script.sh 的檔案,就輸入:

vi my_script.sh

如果這個檔案不存在,Vi/Vim會自動幫你建立一個新的空白檔案;如果檔案存在,它就會開啟並顯示內容。一打開,Vi/Vim就會在普通模式下等著你喔!

進入插入模式:

當你準備好要輸入文字時,就要從普通模式切換到插入模式。最常用的幾個指令是:

i:在游標所在位置「之前」插入文字。

a:在游標所在位置「之後」插入文字。

o:在游標所在行「下方」新增一行並插入文字。

O (大寫):在游標所在行「上方」新增一行並插入文字。

新手通常會先從 i 或 a 開始練習啦,選一個你覺得順手的就好。

編輯文字:

進入插入模式後,恭喜你,現在你可以像使用一般文字編輯器一樣,自由自在地輸入、修改、刪除文字了!想打什麼就打什麼,不用怕。

回到普通模式:

這是很多新手最容易忘記,但也最重要的一個步驟!當你打完一段文字,或者想要執行其他操作(例如移動游標、刪除行、儲存檔案),你「必須」要回到普通模式。

怎麼回呢?很簡單,按下你的 Esc 鍵!

我的經驗是,常常會有人因為沒有按 Esc 就直接按 : 想儲存,結果變成在檔案裡打出 : 這個字元,而不是進入命令列模式,然後就開始鬼打牆啦,哈哈!所以,養成習慣,打完字就按 Esc,這點超級重要喔!

儲存與離開:

編輯完檔案,總是要存檔並離開的嘛!這時候就要用到命令列模式了。記得先按 Esc 回到普通模式,然後輸入 : 進入命令列模式,再輸入以下指令:

:w:儲存檔案 (write)。

:q:離開Vi/Vim (quit)。如果檔案有修改但未儲存,它會警告你。

:wq:儲存並離開。這是我最常用的一個,省事又方便。

:x:也是儲存並離開,但只有在檔案有修改時才會寫入,沒修改則直接離開。跟 :wq 差不多啦!

:q!:不儲存任何修改,強制離開。當你把檔案改得一團亂,想放棄所有修改時,這個指令就是你的救星啦!

嘿,記住囉,這些指令後面常常會加上 !,表示「強制」執行,像 :q! 就是強制離開不存檔,很常用到的!

普通模式的導航魔法:不用滑鼠也能飛快移動!

Vi/Vim最迷人的地方之一,就是它的移動游標方式。一開始可能會覺得有點反直覺,但熟練了之後,你會發現它比用方向鍵或滑鼠快上好幾倍!這真的會讓你的編輯效率大大提升,不信你試試看!

基本游標移動:小指頭的秘密

這是Vi/Vim最基礎的移動指令,它們取代了傳統的方向鍵:

h:向左移動一個字元。

j:向下移動一行。

k:向上移動一行。

l:向右移動一個字元。

你有沒有發現,h, j, k, l 這四個鍵剛好就在鍵盤的右手邊,食指、中指、無名指的位置?這就是設計者的巧思啦,讓你不用離開打字區就能輕鬆移動。我個人覺得這真的超方便的,畢竟手不用一直跑來跑去,編輯起來就更順暢。

更有效率的字元與單字移動

除了單字元移動,Vi/Vim還有更多飛快的移動方式:

w:移動到下一個單字的開頭 (word)。

e:移動到目前或下一個單字的結尾 (end)。

b:移動到上一個單字的開頭 (beginning)。

0 (數字零):移動到目前行的最前面 (絕對行首)。

^:移動到目前行的第一個非空白字元。這點跟 0 不太一樣喔!

$:移動到目前行的最尾端。

舉例來說,如果你想快速跳到某一行中間的某個單字,你可以先按幾下 w,很快就能到達啦!如果想從行首跳到行尾,一個 $ 就搞定了,是不是超快?

跨螢幕與檔案的移動

當檔案內容很多時,這些指令會讓你像坐雲霄飛車一樣:

Ctrl-f:向下翻頁 (forward)。

Ctrl-b:向上翻頁 (backward)。

H:移動到螢幕頂端 (High)。

M:移動到螢幕中間 (Middle)。

L:移動到螢幕底端 (Low)。

gg:移動到檔案的第一行。

G:移動到檔案的最後一行。

數字G:移動到指定的行數。例如,10G 會移動到第10行。

有了這些,你就可以在超大的設定檔或程式碼裡面,快速找到你要的內容,編輯起來就事半功倍了啦!我常常用 G 跳到檔案最下面看最新紀錄,或是用 gg 回到檔案開頭。

文本編輯的藝術:刪除、複製、貼上超順手!

Vi/Vim在刪除、複製、貼上這些基本編輯操作上,也展現了它獨特的效率。只要學會這些指令,你就會覺得傳統的 Ctrl-C, Ctrl-V 有點遜掉了啦!

刪除:乾淨俐落,想刪哪裡就刪哪裡

在普通模式下,刪除指令通常都是以 d 開頭,後面搭配移動指令,就可以精準地刪除你想要的內容。

x:刪除游標所在位置的一個字元。(就像鍵盤的 Delete 鍵)

dw:刪除從游標位置到下一個單字開頭的內容 (delete word)。

de:刪除從游標位置到目前單字結尾的內容 (delete end of word)。

db:刪除從游標位置到上一個單字開頭的內容 (delete beginning of word)。

dd:刪除游標所在「整行」的內容 (delete line)。這超級常用,一次刪一整行超方便!

D:刪除從游標位置到「行尾」的內容。

如果你想刪除好幾行,可以加上數字。例如,5dd 就會從目前行開始往下刪除5行。這效率,簡直是飛天遁地啦!

複製:想複製什麼,輕鬆辦到!

複製的指令通常以 y (yank) 開頭,概念跟刪除很像,也是搭配移動指令:

yw:複製從游標位置到下一個單字開頭的內容 (yank word)。

yy:複製游標所在「整行」的內容 (yank line)。這也是超常用指令!

Y:跟 yy 功能一樣,但有些Vi的版本可能會不同,Vim通常是等效的。

同樣地,如果你想複製多行,可以用 數字yy。例如,3yy 會複製從目前行開始往下3行。

貼上:複製了就貼,天經地義!

貼上的指令就相對單純,只有兩個:

p:將剪貼簿中的內容貼到游標所在位置的「後面」。

P (大寫):將剪貼簿中的內容貼到游標所在位置的「前面」。

我的經驗是,常常複製一行後,用 p 貼到下一行。如果是複製好幾行,它也會自動在新行貼上,非常聰明!

復原與重做:不怕手殘,救命神招!

編輯檔案難免會犯錯,這時候復原和重做指令就是你的救命仙丹了!

u:復原上一個操作 (undo)。你可以一直按 u,回到更早之前的狀態。

Ctrl-r:重做上一個被復原的操作 (redo)。

有一次我不小心把一個重要的設定檔刪了一大段,心裡想說「啊,死定了!」結果按了幾下 u,嘿,全部都回來了!那種感覺真的是謝天謝地,所以這兩個指令一定要記起來喔!

強大的搜尋與取代功能:找東西改東西一點都不難!

在處理大型檔案時,搜尋和取代是不可或缺的功能。Vi/Vim提供了非常強大且彈性的搜尋和取代功能,可以讓你快速找到目標,並批次處理文字。

快速搜尋:想要什麼,馬上找到!

在普通模式下,你可以用 / 或 ? 來啟動搜尋功能:

/搜尋字串:向下搜尋指定的字串。輸入完字串後按 Enter。

?搜尋字串:向上搜尋指定的字串。輸入完字串後按 Enter。

找到第一個符合的結果後,你可以用以下指令繼續搜尋:

n:繼續向下搜尋下一個符合的結果 (next)。

N (大寫):繼續向上搜尋下一個符合的結果。

Vi/Vim的搜尋是大小寫敏感的,如果你想忽略大小寫,可以在命令列模式下輸入 :set ic (ignorecase) 或是 :set noic (no ignorecase) 來切換。我常常會 :set ic 這樣搜尋起來會更方便,不用擔心大小寫的問題啦。

高效取代:批次修改,省時省力!

取代功能更是一絕,特別是在你想批次修改檔案中的特定字串時。取代的指令是在命令列模式下執行的,基本格式是:

:範圍s/舊字串/新字串/旗標

我們來詳細解釋一下這個指令的每個部分:

範圍: 這是用來指定要取代的範圍。

:%:代表整個檔案,這是最常用的。

:起始行號,結束行號:例如 :10,20s 代表從第10行到第20行。

:.,$:代表從目前行到檔案結束。

s: 代表 substitute (取代) 指令。

/: 分隔符號。你可以用其他字元代替,例如 :s#舊字串#新字串#,當你的字串裡包含斜線時,這樣做會比較方便,才不用一直打反斜線跳脫字元啦。

舊字串: 你想要被取代的文字或正規表達式。

新字串: 你想要替換成什麼文字。

旗標: 用來控制取代行為的額外選項。

g:(global) 代表取代一行中所有符合的字串,而不是只取代第一個。這個旗標超級重要,沒有它,一行中只會取代第一次出現的字串。

c:(confirm) 代表每次取代前都會詢問你是否確認,會跳出 (y/n/a/q/l/^E/^Y) 讓你選擇。這在你不確定取代範圍是否正確時很好用。

i:(ignorecase) 忽略大小寫。

幾個實用範例:

:%s/old_text/new_text/g:將整個檔案中所有的 old_text 都取代成 new_text。這是最常用的取代指令,沒有之一!

:1,10s/error/warning/gc:將第1行到第10行中的 error 取代成 warning,並且每次取代前都會詢問你。

:s/foo/bar/g:取代目前行中所有 foo 為 bar。

我以前常常需要修改大量的設定檔,如果沒有這個取代功能,我可能要手動改到天荒地老吧!有了它,幾秒鐘就能搞定,真的會讓你覺得Vi/Vim超級強大啦!

進階技巧:讓你的Vi/Vim功力更上一層樓!

當你熟悉了Vi/Vim的基本操作後,還有一些進階技巧可以讓你的編輯效率更上一層樓,你會發現Vi/Vim不只是一個編輯器,它根本就是一個小型的IDE(整合開發環境)了啦!

分窗操作 (Split Windows):同時編輯多個檔案或同一個檔案的不同部分

Vim允許你將編輯器畫面分割成多個視窗,這對於需要同時參考多個檔案、或者在同一個檔案的不同部分之間切換編輯時,真的超級方便!

:split 或 :sp:水平分割視窗,在新視窗開啟目前檔案。

:vsplit 或 :vs:垂直分割視窗,在新視窗開啟目前檔案。

:split 檔案名稱:水平分割並開啟指定檔案。

:vsplit 檔案名稱:垂直分割並開啟指定檔案。

在不同視窗間移動:

Ctrl-w w:在各個視窗間切換。

Ctrl-w h (左), Ctrl-w j (下), Ctrl-w k (上), Ctrl-w l (右):精準移動到指定方向的視窗。

我常常會一邊看函式庫的定義,一邊寫自己的程式碼,這時候分窗功能就非常好用,不用一直切換檔案,效率真的大大提升。

多檔案緩衝區 (Buffers):在不同檔案間快速切換

Vim可以同時開啟多個檔案,並將它們載入到不同的「緩衝區」中。你可以在這些緩衝區之間快速切換,而不用每次都重新開啟檔案。

:e 檔案名稱:開啟另一個檔案到新的緩衝區。

:ls 或 :buffers:列出所有已開啟的緩衝區。

:bnext 或 :bn:切換到下一個緩衝區。

:bprev 或 :bp:切換到上一個緩衝區。

:b 數字:切換到指定編號的緩衝區 (編號可以從 :ls 看到)。

:b 檔案名稱:切換到指定名稱的緩衝區。

這功能在處理一個專案,裡面有很多檔案需要編輯時,真的是超級好用,避免了來來回回開啟關閉檔案的麻煩。

巨集錄製 (Macros):重複性任務的救星!

如果你常常需要執行一系列重複的編輯操作,那麼巨集錄製功能絕對會讓你驚呼連連!你可以錄製一次操作,然後無限次地重複執行,真的超級有效率!

開始錄製: 在普通模式下按 q,然後再按一個你想用來儲存巨集的字母(例如 q)。Vi/Vim的左下角會顯示 recording @q。

執行操作: 開始執行你想要錄製的一系列編輯操作(例如移動游標、刪除、插入文字等)。

停止錄製: 再次按下 q。

執行巨集: 在普通模式下按 @,然後再按你之前用來儲存巨集的字母(例如 @q)。

重複執行巨集: 如果你想重複執行巨集好幾次,可以在 @ 前面加上數字,例如 10@q 就會執行巨集 q 十次。

我曾用巨集來將一個很大的 CSV 檔案進行格式轉換,原本需要手動修改幾百行,錄製一次巨集後,不到一分鐘就全部搞定了!那種成就感,真的只有 Vi/Vim 能給啦!

客製化你的Vim環境:打造專屬編輯器!

Vim最迷人的地方之一,就是它的高度客製化能力。你可以根據自己的習慣和需求,調整Vim的行為、外觀,甚至擴充功能。這就像是打造一輛專屬的賽車一樣,讓它更符合你的手感和需求!

`.vimrc` 設定檔:你的Vim大腦!

所有的Vim客製化設定,都儲存在一個叫做 .vimrc 的檔案裡。這個檔案通常位於你的家目錄 (Home Directory) 下面(例如 /home/你的使用者名稱/.vimrc)。如果這個檔案不存在,你可以自己建立一個。

每次你啟動Vim時,它都會自動讀取這個 .vimrc 檔案,並套用裡面的設定。所以,把你的常用設定寫進去,你的Vim就會變得越來越像你夢想中的編輯器啦!

常用設定範例:讓你的Vim更貼心!

這裡列出一些我個人覺得超級實用,幾乎每個Vi/Vim使用者都會設定的選項,你可以把它們加到你的 .vimrc 檔案裡:

" 顯示行號,這樣看程式碼或設定檔就超方便的啦!

set number

" 自動縮排,讓你的程式碼或文件格式更整齊,不用手動按空白鍵。

set autoindent

set smartindent

" 偵測檔案類型,並載入對應的縮排規則。寫不同程式語言時超實用。

filetype indent on

" 設定 Tab 鍵等於多少個空白字元。大部分程式碼習慣是4個空白。

set tabstop=4

" 設定實際編輯時,Tab 會轉換成多少個空白字元。

set softtabstop=4

" 設定自動縮排時的縮排寬度。

set shiftwidth=4

" 將 Tab 鍵輸入的字元自動轉換成空白字元,這樣避免不同編輯器 Tab 寬度不一致的問題。

set expandtab

" 讓搜尋結果高亮顯示,這樣一眼就能看到搜尋到的字串在哪裡。

set hlsearch

" 搜尋時忽略大小寫,找東西更方便。

set ignorecase

" 當搜尋字串中包含大寫字母時,就自動開啟大小寫敏感搜尋。

set smartcase

" 顯示目前游標在檔案中的行數與列數,方便你定位。

set ruler

" 顯示命令列模式下輸入的部分指令,方便你確認。

set showcmd

" 啟用滑鼠功能。如果你想用滑鼠點擊游標移動或選取文字,這個設定就很有用。

" 不過學Vim就是要擺脫滑鼠啦,但偶爾用一下也沒關係啦,哈哈。

set mouse=a

" 語法高亮,讓程式碼看起來五顏六色,更容易閱讀。

syntax enable

" 設定Vim的顏色主題。有很多內建主題,或你可以下載第三方主題。

" 例如:colorscheme desert

" 或是你喜歡的 colorscheme molokai

要啟用這些設定,你只需要把這些行複製貼上到你的 .vimrc 檔案裡,然後儲存檔案,下次開啟Vim時就會生效囉!如果想立即看到效果,可以在Vim裡面輸入 :source ~/.vimrc 來重新載入設定檔。

外掛管理工具:擴充Vim的功能!

Vim還有一個超級大的社群,提供了成千上萬的外掛 (Plugins),可以擴充Vim的功能,像是檔案樹、程式碼自動補齊、版本控制整合等等。雖然這篇文章主要聚焦在「操作」,但還是簡單提一下,你可以透過外掛管理工具,例如 Vundle、vim-plug 等等,來安裝和管理這些外掛。安裝外掛後,你的Vim就真的會變得跟一個現代的IDE一樣強大啦!

不過,對於初學者來說,我建議你先專注於熟悉Vi/Vim本身的操作,等你對基本操作都滾瓜爛熟了,再去研究外掛,這樣才不會一下子覺得東西太多,反而卻步了喔!

學習Vi/Vim的秘訣與心得:我的真心話啦!

說真的,Vi/Vim在剛開始學的時候,就像在學一種新的語言,或是學習開手排車一樣,一開始會覺得有點卡卡的,不太順手。但一旦你掌握了它的邏輯和操作模式,那種效率和流暢感真的會讓你愛不釋手。以下是我個人學習Vi/Vim的一些心得和建議:

多練習,熟悉模式切換: 這是最最最重要的!Vi/Vim的核心就是模式,你必須讓自己在不同模式之間切換自如,就像呼吸一樣自然。剛開始可以刻意練習,打完字就按 Esc,然後再練習移動游標,久了就會形成肌肉記憶了。

從實作中學習: 不要只是看指令,真的要動手去操作。你可以找一個設定檔,或者開一個新的空白檔案,想像自己要編輯一份文件或寫一段程式碼,然後試著用Vi/Vim來完成它。遇到問題就去查,這樣印象會更深刻。

使用 vimtutor: Vim本身就內建了一個超級棒的互動式教學課程,叫做 vimtutor。你只要在終端機裡面輸入 vimtutor,它就會帶你一步步學習Vim的基本操作。這個教學內容非常紮實,而且是互動式的,強烈建議新手一定要花時間跑一遍,這會省下你很多自己摸索的時間喔!很多資深工程師都推薦新手從 vimtutor 開始。

不要害怕犯錯: 剛開始一定會手殘,會按錯鍵,會把檔案改亂。沒關係!反正有 u (undo) 可以讓你回到上一步,真的搞砸了就 :q! 強制不存檔離開。這都是學習的必經過程啦!

逐漸增加指令量: 不要想一次把所有指令都背起來,那不切實際。先學會最基本的移動、插入、刪除、儲存、離開,然後再慢慢學習搜尋、取代、複製貼上等進階功能。一步一腳印,你會發現Vim的世界很大很精彩!

多看別人怎麼用: 有空可以上網看看一些Vi/Vim的高手分享他們的 `.vimrc` 設定檔,或是看一些操作教學影片,你會發現很多你從來沒想過可以這樣用的技巧,會讓人大開眼界喔!

Vi/Vim雖然有學習曲線,但它給你帶來的效率提升和鍵盤流暢感,絕對是值得的。尤其在台灣的軟體開發或系統管理領域,Vim的使用者數量真的不少,學會它不只讓你的工作更有效率,也能讓你跟同行更有共同話題啦!我個人覺得它不僅是一個工具,更是一種編輯哲學,讓你在處理文字時能更專注,更沉浸其中。

常見Vi/Vim操作問題與深度解答

Q1: 為什麼Vi/Vim這麼難學?真的值得嗎?

欸,這個問題真的很多人問耶!Vi/Vim之所以給人「難學」的印象,主要是因為它的操作方式跟我們平常習慣的圖形化介面(像是記事本、Wordpad、VS Code)很不一樣。它沒有滑鼠點擊、也沒有直覺的選單,一切都得靠鍵盤指令來完成。而且它還有「模式」的概念,剛開始真的會讓人很困惑,常常不知道自己在哪個模式,按了半天文字卻出不來,或是按錯鍵把檔案搞得一團亂。所以,這個學習曲線是客觀存在的啦!

但話說回來,真的值得學嗎?我會說,絕對值得!尤其是對於軟體工程師、系統管理員、DevOps 專業人員來說,Vi/Vim簡直就是標配。它的價值體現在幾個方面:首先是效率,一旦你習慣了,你的雙手幾乎不用離開鍵盤,所有的編輯動作都能用極快的速度完成,這在處理大量程式碼或設定檔時,速度絕對是碾壓其他編輯器。再來是通用性,幾乎所有的Linux/Unix系統都會內建Vi,不管你在哪個服務器或終端機工作,你都能找到一個熟悉的編輯環境。最後是高度客製化,Vim可以根據你的需求調整得非常個人化,甚至可以透過外掛來擴展功能,讓它變成你專屬的超級編輯器。我身邊很多資深工程師都把Vi/Vim當作主力工具,可見它的價值是被業界廣泛認可的喔!

Q2: 我怎麼知道目前是哪個模式啊?

這個問題超級常見,也是新手最常遇到的困擾之一!剛開始學Vi/Vim時,常常會因為不知道自己在哪個模式而手忙腳亂。其實,Vim通常會在介面下方顯示你目前的模式,只是剛開始可能沒注意到或不熟悉。

當你在普通模式時,Vim的左下角通常是空白的,或者會顯示檔案名稱、行號等資訊。當你按下 i, a, o 等鍵進入插入模式時,Vim的左下角會顯示 -- INSERT -- (或繁體中文的 -- 插入 --)。當你按下 : 進入命令列模式時,左下角會出現一個冒號 :,等待你輸入指令。當你按下 v, V, Ctrl-v 進入視覺模式時,左下角會分別顯示 -- VISUAL --, -- VISUAL LINE --, -- VISUAL BLOCK --。

所以囉,你只要養成習慣,隨時注意左下角的提示訊息,就能清楚知道自己目前在哪個模式了。另外,我個人還有一個小撇步,就是在打完字、準備進行其他操作前,會習慣性地多按幾下 Esc 鍵,這樣就能確保自己一定回到普通模式,才不會出錯啦!這是個很有效的防呆機制喔!

Q3: 我不小心按錯鍵,檔案被改亂了怎麼辦?

別緊張!這是每個Vi/Vim使用者都會遇到的情況,尤其是在學習初期,按錯鍵、誤刪內容、或是把檔案搞得一團亂,都是家常便飯啦!但Vim很貼心,它提供了非常強大的復原 (undo) 功能,讓你不用怕手殘。

在普通模式下,你只需要按下 u 鍵,就可以復原 (undo) 上一個操作。你可以連續按 u,它會一步一步地把你之前的操作都撤銷掉,直到檔案回到你滿意的狀態。萬一你復原過頭了,想回到某個被撤銷的狀態,可以按下 Ctrl-r (redo) 來重做。有了這兩個神指令,你幾乎不用擔心會把檔案徹底搞砸。

如果真的改到無法挽回,或者你根本不想儲存任何修改,想要回到檔案最原始的狀態,你可以在普通模式下輸入 :q!,這個指令的意思是「不儲存任何修改,強制離開」。這樣一來,你的檔案就會回到你上次儲存時的狀態,所有你搞砸的編輯都會被丟棄。所以,當你發現檔案被改得一團糟,而且不想繼續下去時,別猶豫,直接 :q! 就可以重新開始啦!

Q4: 怎麼在Vi/Vim裡面執行外部指令呢?

這個功能超酷的,讓Vim不只是一個文字編輯器,還能直接跟你的作業系統互動!如果你想要在不離開Vim的情況下,執行一些終端機指令,例如查看檔案列表、執行一個腳本,或是編譯程式碼,Vim都能辦到喔。

在普通模式下,進入命令列模式,然後輸入 :! (一個冒號,一個驚嘆號),後面接著你想要執行的外部指令,然後按下 Enter 就行了。舉例來說:

:!ls -l:這會執行 ls -l 這個指令,並在Vim下方顯示當前目錄的詳細檔案列表。

:!pwd:這會顯示你目前所在的目錄路徑。

:!python my_script.py:如果你正在編輯一個Python腳本,可以直接在Vim裡面執行它,看看輸出結果。

執行完外部指令後,Vim會暫時顯示指令的輸出,然後按下任何鍵,你就會回到Vim的編輯畫面。這樣你就不用一直切換到另一個終端機視窗,工作流程會更加順暢,編輯和測試程式碼都超級方便的啦!這也是為什麼很多開發者都超愛Vim的原因之一。

Q5: 什麼是 `.vimrc`?要怎麼用它?

`.vimrc` 這個檔案,可以說是你的Vim的大腦,或是Vim的「設定檔」啦!它是一個純文字檔案,通常放在你的家目錄(Home Directory)下面,檔名是 .vimrc (開頭那個點點代表它是隱藏檔案喔)。Vim在啟動的時候,會自動去讀取這個檔案裡面的所有指令,並根據這些指令來設定自己的行為、外觀,甚至載入額外的功能。

要使用它,首先你得確定你的家目錄裡有沒有這個檔案。如果沒有,你可以自己用Vim建立一個:

vi ~/.vimrc

然後,你就可以把各種Vim的設定指令寫進這個檔案裡。我前面「客製化你的Vim環境」那個段落有列出一些超級常用的設定範例,像是顯示行號 (set number)、自動縮排 (set autoindent)、設定Tab鍵的寬度 (set tabstop=4) 或是啟用語法高亮 (syntax enable) 等等。

每次修改完 .vimrc 檔案後,記得要儲存它 (:wq)。如果你想讓這些新的設定馬上生效,而不想重新啟動Vim,可以在Vim裡面輸入 :source ~/.vimrc,這樣Vim就會重新載入你的設定檔了。透過這個 `.vimrc`,你可以把Vim打造成一個完全符合你個人習慣和工作流程的專屬編輯器,讓你的Vim用起來更順手、更有效率。這也是Vim能夠這麼彈性和強大的關鍵之一喔!