1. 程式人生 > >四周第三次課

四周第三次課

vim

5.5 進入編輯模式

進入輸入或取代的編輯模式
i, I 進入輸入模式(Insert mode):
i 為『從目前光標所在處輸入』, I 為『在目前所在行的第一個非空格符處開始輸入』。 (常用)
a, A 進入輸入模式(Insert mode):
a 為『從目前光標所在的下一個字符處開始輸入』, A 為『從光標所在行的最後一個字符處開始輸入』。(常用)
o, O 進入輸入模式(Insert mode):
這是英文字母 o 的大小寫。o 為『在目前光標所在的下一行處輸入新的一行』; O 為在目前光標所在處的上一行輸入新的一行!(常用)
r, R 進入取代模式(Replace mode):

r 只會取代光標所在的那一個字符一次;R會一直取代光標所在的文字,直到按下 ESC 為止;(常用)
上面這些按鍵中,在 vi 畫面的左下角處會出現『--INSERT--』或『--REPLACE--』的字樣。 由名稱就知道該動作了吧!!特別註意的是,我們上面也提過了,你想要在檔案裏面輸入字符時, 一定要在左下角處看到 INSERT 或 REPLACE 才能輸入喔!
[Esc] 退出編輯模式,回到一般模式中(常用)

5.6 vim命令模式

指令行的儲存、離開等指令
:w 將編輯的數據寫入硬盤檔案中(常用)
:w! 若文件屬性為『只讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案權限有關啊!

:q 離開 vi (常用)
:q! 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。
註意一下啊,那個驚嘆號 (!) 在 vi 當中,常常具有『強制』的意思~
:wq 儲存後離開,若為 :wq! 則為強制儲存後離開 (常用)
ZZ 這是大寫的 Z 喔!若檔案沒有更動,則不儲存離開,若檔案已經被更動過,則儲存後離開!
:w [filename] 將編輯的數據儲存成另一個檔案(類似另存新檔)
:r [filename] 在編輯的數據中,讀入另一個檔案的數據。亦即將 『filename』 這個檔案內容加到遊標所在行後面
:n1,n2 w [filename] 將 n1 到 n2 的內容儲存成 filename 這個檔案。
:! command 暫時離開 vi 到指令行模式下執行 command 的顯示結果!例如
『:! ls /home』即可在 vi 當中察看 /home 底下以 ls 輸出的檔案信息!
vim 環境的變更
:set nu 顯示行號,設定之後,會在每一行的前綴顯示該行的行號
:set nonu 與 set nu 相反,為取消行號!
/ 光標之後查找匹配字符串 --- /word ----- shift + n 向上查找
:set nohls 不高亮
:set hls 高亮

?光標之前查找特定字符串----?word
搜索替換
/word 向光標之下尋找一個名稱為 word 的字符串。例如要在檔案內搜尋 vbird 這個字符串,就輸入 /vbird 即可! (常用)
?word 向光標之上尋找一個字符串名稱為 word 的字符串。
n 這個 n 是英文按鍵。代表重復前一個搜尋的動作。舉例來說, 如果剛剛我們執行 /vbird 去向下搜尋 vbird 這個字符串,則按下 n 後,會向下繼續搜尋下一個名稱為 vbird 的字符串。如果是執行 ?vbird 的話,那麽按下 n 則會向上繼續搜尋名稱為 vbird 的字符串!
N 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。 例如 /vbird 後,按下 N 則表示『向上』搜尋 vbird 。
使用 /word 配合 n 及 N 是非常有幫助的!可以讓你重復的找到一些你搜尋的關鍵詞!
:n1,n2s/word1/word2/g n1 與 n2 為數字。在第 n1 與 n2 行之間尋找 word1 這個字符串,並將該字符串取代為 word2 !舉例來說,在 100 到 200 行之間搜尋 vbird 並取代為 VBIRD 則:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g 從第一行到最後一行尋找 word1 字符串,並將該字符串取代為 word2 !(常用)
:1,$s/word1/word2/gc 從第一行到最後一行尋找 word1 字符串,並將該字符串取代為 word2 !且在取代前顯示提示字符給用戶確認 (confirm) 是否需要取代!(常用)

1,10s/root/aiker/g 1到10行,s表示開始替換,把root替換成aiker , g 全局替換global
不加g,只會替換第一個;

%s/aa/bb/g %表示所有行,把aa替換為bb,查找字符串並替換

1,$s/ftp/sftp/g 表示一直到末行,所有的

1,$s/\/etc\/hosts/\/etc\/hostname/g 把字符/etc/hosts替換為/etc/hostname
其中\表示脫義,把/etc/hosts識別為字符串

下面這樣寫 可以不用退意

1,$s#/etc/hosts#/etc/hostname#g

5.7 vim實踐

#cp /etc/dnsmasq.conf  /tmp/test.txt
#vim /tmp/test.txt

(1) 分別向下、向右、向左、向上移動6個字符(6j 6l 6h 6k)。

(2) 分別向下、向上翻兩頁(分別按兩次ctrl+f和ctrl+b)。

(3) 把光標移動到第49行(49G)。

(4) 把光標移動到行尾,再移動到行首(Shift+4, Shift+6)。

(5) 移動到1.txt文件的最後一行(G)。

(6) 移動到文件的首行(gg)。

(7) 搜索文件中出現的“dnsmasq”,並數一下該字符串出現的次數(/dnsmsq 然後按n)。

(8) 把從第1行到第10行出現的dnsmasq替換成dns(:1,10s/dnsmasq/dns/g)。

(9) 還原上一步操作(u)。

(10) 把整個文件中所有的etc替換成cte(:1,$s/etc/cte/g)。

(11) 把光標移動到第25行,刪除字符串 “ly”(25G 然後按l向右移動光標找到"ly",按v選中,然後按x)。

(12) 還原上一步操作(u)。

(13) 刪除第50行(50G dd)。

(14) 還原上一步操作(u)。

(15) 刪除第37-42行的所有內容(37G 6dd)。

(16) 還原上一步操作(u)。

(17) 復制第48行的內容並粘貼到第52行下面(48G yy 52G p)。

(18) 還原上一步操作(u)。

(19) 復制第37-42行的內容並粘貼到第44行上面(37G 6yy 44G P)。

(20) 還原上一步操作(按u)。

(21) 把第37-42行的內容移動到第19行下面(37G 6dd 19G p)。

(22) 還原上一步操作(按u)。

(23) 把光標移動到首行,把第1行內容改為“#!/bin/bash”(先按gg,把光標定位到第1行,然後按字母A,進入編輯模式,同時>光標到行末尾,進行修改操作,完成後按ESC)。

(24) 在第1行下面插入新的一行,並輸入“# Hello!”(按o進入編輯模式,同時光標向下另起一行,輸入“# Hello!”)。

(25) 保存文檔並退出(按Esc鍵,輸入“:wq”)。

四周第三次課