iT邦幫忙

2

linux 下的文字編輯器 vi / vim (Part 1)

在linux的指令行打 vi 或是 vim ,進入 vi/vim 文字編輯器
https://ithelp.ithome.com.tw/upload/images/20200419/20126460J2AIDYs1iX.jpg
可以看到底下三行告訴我們要離開、要查詢幫助和獲取此版本(version7)相關訊息時,可分別打:q、:help和:help version7

一、基本

●瞭解不同的模式:

先認識幾個模式: Insert Mode , Command Mode / Normal Mode , Visual Mode , Replace Mode

  • 按i進入insert模式,即可輸入文字,想跳出insert模式時,按Esc回到command/normal模式即可

  • 按v進入visual模式,此模式下可做剪、貼、複製,一樣按Esc回到command/normal模式

  • replace模式在下面的編輯檔案單元再詳細說明。

  • 在command/normal模式時,想要離開vi/vim文字編輯器,回到linux指令行,可以按
    :q! (強制離開不存檔)
    :wq 檔案名 (存檔後離開)

: 代表接下來為指令
w 代表寫入 = 儲存
q 代表離開程式
! 代表強制執行 ,有時候因為一些因素導致安全機制不讓你寫入。
例如檔案在開啟後被其他人修改過。強制執行可以強制儲存成現在看到的內容。

另外,若在底下打:set number,則上面打的內文一開頭就會秀出行號

●開啟、關閉檔案:

  • 在command/normal模式時,打:w <第一次時要打要存檔的檔案名>,即可存檔
  • 回到linux指令行時,可以用 cat 檔案名 來秀出文字檔裡的文字內容
  • 要將這個檔在 vi/vim裡打開,可以直接在linux指令行上打 vim 檔案名,或是先打 vim進入編輯器開始界面後,再打:e 檔案名 (表示edit 檔案),都會進到這個檔案的command/normal模式

● ex、vi、vim 歷史演進:

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

Bram Moolenaar 在1980年代後期買了一台Amiga電腦時,但剛好這台電腦上沒有他最常用的編輯器vi。於是Bram從一個開源的vi複製Stevie開始,進行Vim1.0版本的開發,而他最初的目標只是完全複製vi的功能,所以Vim是Vi IMitation(模擬)的簡稱。在1992年的1.22版本的Vim更被移植到了UNIX和MS-DOS上,直到那時開始,Vim的全名就變成Vi IMproved(改良)而非一開始的(模擬)。

二、編輯檔案

● Inserting和appending text

假設目前游標在That desk這一行的e這個字母上,按i或a都會進入insert模式,差別在於i(表示insert)的話會從e的前面(d和e之間)插入新打入的字母,而a(表示append)的話則是游標會先往後移一個至s的地方,新打入的字母就會出現在e的後面(e和s)之間; 打完後按Esc回到command模式,可以按u(表示undo)還原之前所做的修改。

● Replacing text

  • 在command/normal模式時,想要替換一個字母時,將游標移至那個字母上後,按r再輸入欲更改成的字母即可,要還原的話按u即可(若已更改了不同字裡的不同字母,可一直按u依序把所做過的更改還原);
  • 若要替換一個字時,則是將游標移至那個字的第一個字母上後,按c(表示change)再按w(表示word), 那個字即會被刪除,即可打上新字;(如果游標不是在那個字的第一個字母,按cw後,是從原本游標所在位置的字母到那個字的最後一個字母會先消失,游標會出現在這個字和下個字之間的空白上,而左下角會出現INSERT模式)
    在打了cw後,左下角會出現insert,表示要輸入新字母、新字時是在insert模式,所以只要按Esc就一樣回到command/normal模式
  • 如果是按2cw,則會從原本游標所在位置的字母到那個字的最後一個字母,和後面接著的一個字會消失,並呈現為insert模式,讓我們可以直接打上新字。
  • 若是按c後再按$,則是從游標所在字母開始到此句的最後一個字都會被刪除,一樣再打上新句段即可。
  • 按c後再打0(數字0),則會移除從游標所在字母前一個字母開始到此句的最前面的所有字,接著就可以打上新的內文。
  • 若有一行的內文為 Have a beautiful day there!而游標正在字母r上,我們按了c3b的話(3表示3個words,b表示backward),此行為變成 Have a re!(從r前面的字母開始往前到第三個字beautiful的地方都被刪除了),再輸入的新字就會從r前面開始插入。
  • 同樣若原行內文為 Have a beautiful day there!游標正在字母f上,我們按了R(大寫)的話,左下角會出現REPLACE字樣(表示在REPLACE模式),此時內文尚不會有任何變動,但我們若開始輸入其它內容,例如ice tea is great,則從f開始的內文會陸續被取代,變成 Have a beautiice tea is great

● Deleting text

  • 要刪除游標所在位置的字母時,只要按x就可以了。
  • 若要刪除一個字時,則是將游標移至那個字的任一個字母上後,按d(表示delete)再按w(表示word), 那個字即會被刪除,游標會出現在下個字的第一個字母上(還是在command模式)
  • 同前面cw、2cw、c$、c0、c3b、R一樣的觀念,我們也可使用dw、2dw、d$、d0、d2b、D等按鍵來刪除內文(但是按了這些後,不會進入insert模式,依然在command/normal模式)
  • 當游標在某一行內文的任一個位置(字(母))上時,按dd的話,整行都會被刪除;若想一次刪除3行,只要按3dd即可。
  • vim裡這些被delete的內文事實上有被暫存著,所以我們可以移到某行的任一個位置後,按P,則前一步驟刪除的3行內文就會被插入在這一行和上一行之間(可以重複一直按,那麼這三行就會一直被重新貼回); 如果是按p,則前一步驟刪除的3行內文就會被插入在這一行之後。

● Yanking(copying) and pasting


1 則留言

1
咖咖拉
iT邦研究生 4 級 ‧ 2020-04-23 17:17:13

比較喜歡用 nano 比較直覺

我要留言

立即登入留言