Chapter 8 Use Linux Text Editor VBird 2005/08/04 Linux基礎--vi 文書處理器
課程目標 認識 vi 與 vim 實際操作 vi 利用 vim 的相關功能 Linux 與 DOS 格式的斷行字元 VBird (2005/08/04) Linux基礎--vi 文書處理器
內容 使用 vi 使用 vim 的額外功能 Unix 與 dos 純文字檔之斷行格式 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi Linux 上的文書處理軟體: 所有 Unix like 的機器上都會有的是 vi,但增強版的 vim 可以作為『程式編輯器!』 emacs xemacs joe e3 xedit kedit pico 所有 Unix like 的機器上都會有的是 vi,但增強版的 vim 可以作為『程式編輯器!』 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 直接輸入 vi 時: VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) vi 後直接加檔案: VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) Vi 的三種模式: 一般模式: command mode 編輯模式: input mode 可進行刪除、複製、搜尋、取代等 編輯模式: input mode 可進行資料的輸入 螢幕左下角會出現 –INSERT– 或 –REPLACE– 指令列模式: command-line mode 可進行儲存、讀取其他檔案等 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) Vi 的三種模式切換方法(ps: 編輯與指令列不可直接互換) VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 一般模式的游標移動: 單一字元移動: 整頁翻動: 螢幕上游標移動: 可使用方向鍵移動游標 可使用 hjkl 四個按鍵 (左下上右) 0:移動到該行行首 $:移動到該行行尾 整頁翻動: [ctrl] + f :向下移動一頁(等於 pagedown) [ctrl] + b :向上移動一頁(等於 pageup) 1G:到第一行,相當於 gg G:到最後一行 [number]G:到第 number 行 [Number][Enter]:向下移動 number 行 螢幕上游標移動: H(最上方)、M(中間)、L(最下方一行) 的行首 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 一般模式的複製與貼上 刪除: 複製: x:向右刪除字元 (相當於 delete) X:向左刪除字元 (相當於 backspace) [Number]x:向右刪除 number 個字元 dd:刪除一整列 [Number]dd:刪除 number 列 d1G:刪除游標到第一行的所有資料 dG:刪除游標到最後一行的所有資料 複製: yy:複製一行 [Number]yy:複製 number 行 p, P:貼上複製的資料 J:連結兩行成為一行 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 一般模式的搜尋與取代: 其他特殊指令: 搜尋: 取代: 重複上一個動作:『.』 復原上一個動作:u /searchword:向下尋找 ?searchword:向上尋找 n :重複上一個搜尋動作 N :重複『反向』上一個搜尋動作 取代: n1,n2s/oldword/newword/gc:取代 n1 到 n2 行之間的 oldword 成為 newword 且允許決定是否要替換 1,$s/old/new/g:取代第一到最後一行的 old 成為 new 其他特殊指令: 重複上一個動作:『.』 復原上一個動作:u 重作上一個動作: [Ctrl]+r VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 一般模式進入編輯模式: 新增資料: 取代: [ESC] (回到一般模式) a :在游標所在處的下個字元開始插入 o:在游標所在處的下一行新增新的一行; O :在游標所在處的上一行新增新的一行; 取代: r :僅取代『游標所在處的單一字元』 R:一直取代,直到 [Esc] 按下為止。 [ESC] (回到一般模式) VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 指令列模式: 存檔與離開: 讀取其他檔案或另存新檔 執行其他動作: :q 離開該檔案 :w 儲存檔案 :wq! 『強制』儲存後離開該檔案 :e! 回到檔案的原始狀態 ZZ 不儲存離開或儲存後離開 讀取其他檔案或另存新檔 :r file 在此檔案中,讀入 file 檔案的資料 :w file 將目前的資料寫入 file 這個新檔 :n1,n2 w file 將目前資料的 n1 到 n2 行寫入 file 中。 執行其他動作: :!command 額外進行其他動作 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續)-- 練習 利用 vi 建立一個檔名為 /root/newman.conf 將 /etc/man.config 的資料讀進來 在第一行輸入 This file comes from /etc/man.config 搜尋 MANPATH 取代成為 mywebname 搜尋 mywebname 字串 取消高亮度 刪除第 51 到 60 行 複製第 1~10 行,並且在第 20 行後貼上(新的行在 21 開始) 連結第2與第3行 復原上個動作 強制儲存後離開 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續)-- 練習二 以底下指令捉取檔案: wget http://linux.vbird.org/linux_basic/0310vi/man.config 請在 /tmp 這個目錄下建立一個名為 vitest 的目錄; 進入 vitest 這個目錄當中; 將 /etc/man.config 拷貝到本目錄底下(或由上述的連結下載 man.config ); 使用 vi 開啟本目錄下的 man.config 這個檔案; 移動到第 58 行,向右移動 40 個字元,請問您看到的雙引號內是什麼目錄 移動到第一行,並且向下搜尋一下『 bzip2 』這個字串,請問他在第幾行 接著下來,我要將 50 到 100 行之間的 man 改為 MAN,並且一個一個挑選是否需要修改,如何下達指令? 修改完之後,突然反悔了,要全部復原,有哪些方法? 我要複製 51 到 60 行這十行的內容,並且貼到最後一行之後; 刪除 11 到 30 行之間的 20 行; 將這個檔案另存成一個 man.test.config 的檔名; 去到第 29 行,並且刪除 15 個字元; 儲存後離開吧! VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vi(續) 關於檔案的回復與暫存檔案的意義: 使用 vi 時,會主動的產生 .filename.swp 檔案; Swap file "/path/to/.filename.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort: 表示可能: 該檔案正在被其他程式所編輯; 該檔案上次編輯時,發生不明的離線所致。 解決方案: 選擇 R (recover) 將資料救回來; 將與該檔案同時存在的 .filename.swp 刪除; VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vim 的額外功能 一般模式底下, vim 的額外功能 區塊選擇: 可以使用 p 來將資料給他貼在不同的區域! [Ctrl]+v 區塊選擇,可以用長方形的方式選擇資料 y 將反白的地方複製起來 d 將反白的地方刪除掉 可以使用 p 來將資料給他貼在不同的區域! 多檔案編輯功能: vi file1 file2 file3 file4 .. :n 編輯下一個檔案 :N 編輯上一個檔案 :files 列出目前這個 vim 的開啟的所有檔案 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vim 的額外功能(續) 一般模式底下, vim 的額外功能(續) VIM 的操作環境設定: 視窗分割功能: :set nu 設定行號 :sp [filename] 開啟一個新視窗,可加與不加 filename。 [ctrl]+wj 游標可移動到下方的視窗。 [ctrl]+wk 同上,不過游標移動到上面的視窗。 [ctrl]+wq 其實就是 :q 結束離開啦! VIM 的操作環境設定: :set nu 設定行號 :set hlsearch 設定是否將搜尋的字串反白 :set autoindent 是否自動縮排? :set backup 是否自動儲存備份檔?一般是 nobackup 的 如果設定 backup 的話,那麼當你更動任何一個檔案時,則原始檔案會被另存成一個檔名為 filename~ 的檔案。 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vim 的額外功能(續) VIM 的操作環境設定: :set ruler 顯示或不顯示狀態列(最下方)! :set showmode 是否要顯示 --INSERT-- 之類的字眼 :set backspace=(012) 設定倒退鍵的功能: 2 在編輯模式中,可以利用倒退鍵 來刪除任意字元 0 與 1 僅可刪除剛剛輸入(且尚未離開游標所在行) 的字元。 :set all 顯示目前所有的環境參數設定值。 :syntax (off|on) 是否依據程式相關語法顯示不同顏色? 可以依據檔案的語法來以顏色顯示語法; 可以進行語法的除錯! 但某些螢幕可能會造成色差,不容易看清楚字元。 VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vim 的額外功能(續) VIM 的操作環境設定: 相關環境設定檔 系統設定檔:/etc/vimrc 個人設定檔:~/.vimrc vim 使用記錄檔:~/.viminfo 環境設定範例: vi ~/.vimrc :set hlsearch :set backspace=2 :set autoindent :set rulet :set showmode :syntax on VBird (2005/08/04) Linux基礎--vi 文書處理器
使用 vim 的額外功能(續) 練習: 我們可以利用 locate 進行檔案的搜尋,可以進行資料庫的更新。資料庫更新設定檔?如何修改成每日進行資料庫更新? VBird (2005/08/04) Linux基礎--vi 文書處理器
Unix 與 dos 純文字檔之斷行格式 不同系統的斷行設定: 檔案格式如何轉換 Dos 檔案斷行字元的困擾: Unix 系統:使用 LF 單一符號表示換行 DOS 系統:使用 CR 與 LF 兩個符號表示換行,即為 CRLF 如何察看? cat –A filename 檔案格式如何轉換 dos2unix, unix2dos -k :包留 mtime 不變; -m :將轉換的資料輸出到新檔。 範例: unix2dos -k -n /etc/man.config /tmp/man.config.dos Dos 檔案斷行字元的困擾: 導致 script 無法順利執行 (enter 才開始!) VBird (2005/08/04) Linux基礎--vi 文書處理器