1 / 48

使用 vi 編輯器

使用 vi 編輯器. 管理 LINUX 一定要會的文字編輯器. vi 的執行與離開. vi 操作模式. Command Mode 命令模式 按鍵被當作指令 Insert Mode 輸入文字的模式 按鍵被當作文字輸入 Last Line Mode 開啟檔案、儲存檔案、搜尋替換、 …. vi 操作模式. 什麼是命令模式?. c-mode : vi 啟動後的狀態 只能下按鍵指令,不能輸入文字 這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令. 什麼是 Last Line Mode?. e-mode :

Download Presentation

使用 vi 編輯器

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 使用 vi 編輯器 管理LINUX一定要會的文字編輯器

  2. vi的執行與離開

  3. vi 操作模式 • Command Mode 命令模式 • 按鍵被當作指令 • Insert Mode 輸入文字的模式 • 按鍵被當作文字輸入 • Last Line Mode 開啟檔案、儲存檔案、搜尋替換、…

  4. vi 操作模式

  5. 什麼是命令模式? • c-mode: • vi 啟動後的狀態 • 只能下按鍵指令,不能輸入文字 • 這些指令可能是游標移動的指令,也可能是編輯指令或尋找替換指令

  6. 什麼是Last Line Mode? • e-mode: • 在 c-mode 輸入冒號:就會進入 e-mode • 左下角會有一個冒號出現,可下 ed 指令 • 按 Esc 回 c-mode • 正常狀態都是處於 c-mode。 • 在 vi 之前,ed 為主要的編輯器,在沒有全螢幕功能時,以 ed 編輯文件是系統管理員唯一的選擇。 • sed 也是從 ed 演變而來,應用於 Shell Script 之中處理串流中的文字編輯(搜尋與替換)

  7. 什麼是輸入模式? • 在 c-mode 按 i 就會進入 i-mode,此時才可以鍵入文字,撰寫文章內容。 • 按 Esc 回到 c-mode。

  8. 開啟與儲存檔案 • vi hello.sh 即開啟 hello.sh進行編輯 • 也可以先執行 vi 然後 last line mode 輸入:e hello.sh • 儲存檔案 • 以 last line mode 輸入:w • 若檔案名稱尚未設定則必須:w hello.sh • 儲存後結束vi的指令為(注意順序!):wq

  9. 打招呼練習 • 以 vi 編輯下列內容,並儲存成檔案,檔案名稱為 hello.sh • 以下列指令執行 hello.sh $ chmod +x hello.sh $ ./hello.sh • 也可以 $ sh hello.sh

  10. 打招呼練習說明 • 井字符號 # 代表註解(Comment) • 註解(備註)通常是給人看的,不是給電腦看的 • Shell Script 的第一行是例外 • #!/bin/sh 表示這個 Script 要由 /bin/sh 執行 • 在 LINUX 之中,驚嘆號 ! 為 Escape to Shell • 在程式裡面執行殼層程式 • 觀察 $ head `which yum` 和$ head `which mysqlreport`

  11. 打招呼練習說明 • $ sh hello.sh 是手動以 /bin/sh 執行 hello.sh • $ ./hello.sh 是依權限執行 hello.sh,殼層在 hello.sh的第一行看到 #!/bin/sh 便另外啟動一份 /bin/sh 載入 hello.sh執行之 • 透過 $ chmod +x hello.sh 讓 hello.sh有執行的權限 • 直接打 $ hello.sh 沒有用,因為 $PATH 不包含目前目錄 .

  12. 「Command Mode」可用指令 • i 插入(insert) • 由目前的游標位置輸入文字 • I 從行首開始插入 • a 增加(append) • 由目前游標的下一個位置輸入文字 • A從行末開始插入 • o 插入新行(open) • 在下一行加入新行並且由行首開始輸入文字 • O 從目前位置插入新的一行

  13. 「Command Mode」可用指令 • J 將下一行接至目前這一行(Joint) • 並無相對的 Split 功能,可在 i-mode 按 ENTER 將一行分成兩行 • 兩行合併後,目前這一行的 EOL 將會消失,留下一個空格

  14. Command Mode 功能鍵 • 游標移動 • 刪除 • 取代 • 復原 • 指令加上數字 • 重排 • 複製與貼上 • 重複上一個編輯指令 • 尋找 • 替換 • 存檔與離開 • 緊急回復

  15. 移動游標:上下左右 • h 或 Backspace 或 ←:游標左移一格 • j 或 Enter 或 +(要 Shift 鍵)或 ↓:游標下移一格 • k 或 -(不必 Shift 鍵)或 ↑:游標上移一格 • l 或 Space 或 →:游標右移一格

  16. 移動游標:上下左右 • 使用 hjkl鍵的移動是為了使手不必離開打字區(鍵盤中央的部位),以加快打字的速度 • Backspace 及 Space 的移動方式是到了行首或行尾時會折行,但方向鍵或 hl鍵的移動則在行首或行尾時您繼續按也不會折行。 • jk及使用方向鍵的上下移動游標會盡量保持在同一欄位。使用 Enter,+,- 的上下移動,游標會移至上(下)一行的第一個非空白字元處

  17. 移動游標:頁面移動 • Ctrl+b:向後捲動一個螢幕 • PageUp • Ctrl+f:向前捲動一個螢幕 • PageDown • Ctrl+u:向後捲動半個螢幕 • Ctrl+d:向前捲動半個螢幕 • Ctrl+e:向後捲動一行 • Ctrl+y:向前捲動一行

  18. 特殊的移動 • 數字0:游標移至該行的行首 • G:游標移至最後一行的行首 • G 之原意是 goto,指移至指定數目行之行首,如不指定數目,則預設是最後一行 • 數字+G:可以跳到指定的行數,例如10G。 • :n 移至第 n 行行首 • ^:游標移至行首第一個字 • $:游標移至該行的行尾

  19. 特殊的移動 • w:游標移至下個字的字首 • W 同上,但會忽略一些標點符號 • e:游標移至下個字的字尾 • E 同上,但會忽略一些標點符號 • b:游標移至上個字的字首 • B 同上,但會忽略一些標點符號

  20. 特殊的移動 • 數字+|:游標移至該行指定的字元,例如「7|」表示將游標移至該行的第7個字元。 • n| 移至第 n 個字元(欄)處。 • 注意,要用 Shift 鍵。 • n 是從頭起算的

  21. 特殊的移動 • ) 移至下一個句子(sentence)首 • ( 移至上一個句子(sentence)首 • } 移至下一個段落(paragraph)首 • { 移至上一個段落(paragraph)首 • sentence 是以 . ! ? 為區格 • paragraph 是以空白行為區格 • % 這是匹配 {},[],() 用的,例如您的游標現在在 { 上只要按 %,就會跑到相匹配的 } 上。寫程式時滿好用的

  22. 特殊的移動 • H:移至螢幕頂端 • M:移至螢幕中間 • L:移至螢幕底部 • 這和 PageDown,PageUp 不一樣,內文內容並未動,只是游標在動而已

  23. 刪除文字 • x 刪除游標所在處之字元 • X 刪除游標前之字元。不可使用 Backspace • dd 刪除一整行(delete line) • dw 刪除一個字(delete word)。不適用於中文 • dG 刪至檔尾 • d1G 刪至檔首

  24. 刪除文字 • D 刪至行尾,或 d$(含游標所在處字元) • d0 刪至行首,或 d^(不含游標所在處字元) • 請回憶一下 $ 及 ^ 所代表的意義,您就可以理解 d$ 及 d^ 的動作,這就是 vi 可愛之處。

  25. 刪除文字 • d+←:可將游標所在位置的前一個字元刪除 • d+→:可將游標所在位置的字元刪除 • d+↑:可將游標所在位置的行與上一行同時刪除 • d+↓:可將游標所在位置的行與下一行同時刪除

  26. 取代 • r 取代游標所在處之字元(replace) • R 取代字元至按 Esc 為止 • cc 取代整行內容。或大寫 S 亦可 • cw 替換一個英文字(change word) • ~ 游標所在處之大小寫互換。別忘了 Shift • C 取代至行尾,即游標所在處以後的字都會被替換。或 c$ • c0 取代至行首,或 c^ • s 替換一個字元為您所輸入的字串 • R 是覆蓋式的取代,s 則是插入式的取代

  27. 復原 • u 就是 undo,傳統的 vi 僅支援一次 • U 在游標沒離開本行之前,回復所有編輯動作 • Crtl+r 就是 redo 鍵,復原的狀態會被取消

  28. 練習 • 以 vi 編輯下列內容,並儲存成檔案,檔案名稱為 say_hello.sh • 以下列指令執行 say_hello.sh $ sh say_hello.sh

  29. 指令加上數目字 • 所有移動指令都可以加上數目字來控制 • 5dd 刪除游標所在處(含)起算以下五行內容 • 3r 按了 3r 後,您鍵入一個英文字,則三個字元皆會被您所鍵入的英文取代 • 5J 將五行合併成一行 • 3x 刪除三個字元 • 5i A 然後按 Ecs,插入五個 A • 2i system Esc 插入 systemsystem • 5G 游標移至第五行,是從檔首開始起算 • 5l 移至右第五個字元處,可以用方向鍵取代

  30. 簡單重排功能 • >> 整行向右移一個 shiftwidth(預設是 8 個字元,可重設) • << 整行向左移一個 shiftwidth(預設是 8 個字元,可重設) • :set shiftwidth? 可得知目前的設定值。:set shiftwidth=4 可馬上重設為 4 個字元。shiftwidth 可簡寫成 sw。別忘了 Shift 鍵!

  31. 簡單重排功能(續) • :ce(nter) 本行文字置中。注意是冒號命令! • :ri(ght) 本行文字靠右。 • :le(ft) 本行文字靠左。 • 所謂置中、靠左、靠右,是參考 textwidth (tw) 的設定。 • 如果 tw 沒有設定,預設是 80,就是以 80 個字元為總寬度為標準來置放。 • tw 可以重設。

  32. 簡單重排功能(續) • gqip 整段重排。 • gqq 本行重排。 • 重排的依據也是 textwidth。 • 這裡的重排是指您鍵入文字時沒有按 Enter 鍵,就一直在 keyin,這樣會形成一個很長的一行,重排後,會在每一行最後加入 EOL。 • gq 重排功能是 vim 才有的功能。

  33. 複製(yank)與貼上(paste) • yy 複製游標所在行整行。或大寫一個 Y • 2yy 或 y2y 複製兩行 • y^ 複製至行首,或 y0。不含游標所在處字元 • y$ 複製至行尾。含游標所在處字元 • yw 複製一個 word • y2w 複製兩個字 • yG 複製至檔尾 • y1G 複製至檔首

  34. 複製與貼上(續) • p 小寫 p 代表貼至游標後(下) • P 大寫 P 代表貼至游標前(上) • 整行的複製,按 p 或 P 時是插入式的貼在下(上)一行。 • 非整行的複製則是貼在游標所在處之後(前)。

  35. 練習 • 以 vi 編輯下列內容,並儲存成檔案,檔案名稱為 count-down.sh • 以下列指令執行 count-down.sh $ sh count-down.sh

  36. 複製與貼上(續) • "ayy 將本行文字複製到 a 緩衝區 • a 可為 26 個英文字母中的一個, • 如果是小寫的話,原先的內容會被清掉,如果是大寫的話是 append 的作用,會把內容附加到原先內容之後 • " 是 Enter 鍵隔壁的那一個同上符號(ditto marks)。 • 5"ayy 複製五行內容至 a 緩衝區。 • 5"Ayy 再複製五行附在 a 內容之後,現在 a 中有十行內容了!

  37. 複製與貼上(續) • "ap 將 a 緩衝區的內容貼上。 • 緩衝區的術語在 vi 稱為 registers。 • 用 d、c、s、x、y 等指令改變或刪除的內容都是放在 registers 中的。 • 例如:用 dd 刪除的一行,也可以使用 p 來貼上 • 只要是在緩衝區的內容都可以使用 p 來貼上,不是一定要 y 起來的內容才能用 p。

  38. 重複上一個編輯指令 • 用英文的句點 . 來重複上一個編輯指令

  39. 尋找 • / 在 c-mode 的情形下,按 / 就會在左下角出現一個 /,然後鍵入您要尋找的字串,按個 Enter 就會開始找 • ? 和 / 相同,只是 / 是向前(下)找,? 則是向後(上)找 • n 繼續尋找(next) • N 繼續尋找(反向)。

  40. 替換 • :[range]s/pattern/string/[c,e,g,i] • range 指範圍 • 1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。 • % 是目前編輯的文章,# 是前一次編輯的文章。 • pattern 要被替換掉的字串,可以用 regexp 來表示。 • string 將 pattern 由 string 所取代。

  41. 替換 • c confirm,每次替換前會詢問。 • e 不顯示 error。 • g globe,不詢問,整行替換。 • i ignore 不分大小寫。 • g 大概都是要加的,否則只會替換每一行的第一個符合字串。可以合起來用,如 cgi,表示不分大小寫,整行替換,替換前要詢問是否替換。 • 例如:以下指令將 ie 全部取代為 firefox,不分大小寫:%s/ie/firefox/ig

  42. 存檔與離開 • :q 如本文有修改而沒存檔,會警告,且無法離開。(quit) • :q! 捨棄所有修改,強迫離開。 • :wq 存檔後離開。縱使檔案未曾修改也是會再存一次檔。 • :x 也是存檔後離開,但如果檔案沒有修改,則不會做存檔的動作。 • ZZ 和 :x 完全一樣,隨您高興用哪一個。 • :w 檔名 另存他檔。不加檔名就是寫入原檔。(write)

  43. 緊急回復 • 有時候編輯到一半不小心將視窗關閉了,或是突然當機,用以下的技巧救回編輯到一半的檔案 • vi -r 檔名,或進入 vi 後,下 :recover 檔名

  44. 其他用法 • %:這個一個程式人員在撰寫程式時的利器,因為有時我們會遺漏了某個右括號或左括號,若要檢查這個錯誤,您可以將游標停留在某個右括號或左括號,然後按%鍵,vi即會找出其相對應的左括號或右括號。

  45. Last Line Mode功能鍵 • e+檔名:e是表示編輯(edit)的意思,若要在vi中建立一個新檔案,您可以使用這個指令,例如「:e test」指令會在目前的目錄中建立名為test的檔案。 • n+檔名:使用這個指令可以載入另一個檔案,例如「:n test」指令會在目前的vi視窗中,載入名為test的檔案。 • w:w是表示寫入(write)的意思,也就是將目前的檔案內容加以儲存,如果這是一個新檔案,您必須要指定檔名,如「:w test」。 • ?字串:您也可以利用「?字串」的指令來尋找特定字,例如「:/tcp」,如果搜尋的字串不是您要的,可以按「n」鍵來往上繼續尋找。 • 指令:說明

  46. Last Line Mode功能鍵 • q:q(quit)表示離開vi的執行,但若是檔案內容有修改,vi會出現錯誤訊息「No write since last change(use ! to override)」,並要求您使用「!」。 • q!:強制離開vi,並且不存檔。 • wq:將修改過的內容存檔,並且離開vi。 • set nu:在檔案中的每行行首加入行號 • set nonu:取消行號 • 輸入數字:如果直接輸入數字再按 鍵,就可將游標移至該行的行首。 • /字串:在很長的檔案中,您可以利用「/字串」的指令來尋找特定字,例如「:/tcp」,如果搜尋的字串不是您要的,您可以按「n」鍵來往下繼續尋找。

  47. 練習 • 以 vi 編輯下列內容,並儲存成檔案,檔案名稱為 01-home-backup.sh • 將 01-home-backup.sh 複製到 /etc/cron.hourly/ 附錄之中 • 以下列指令執行 01-home-backup.sh $ sh 01-home-backup.sh • 觀察其結果

More Related