vim小小的總結
(本總結摘自馬哥網絡班22期課堂筆記)
vim是一款交互式的全屏編輯器,是vi的升級版,在vi上增強了很多,如:多級撤銷,多窗口和多緩沖區,語法高亮,在線幫助等。
vim也是一種模式化的編輯器。分別是編輯模式也叫命令模式,輸入模式,末行模式。其中使用vim打開文件后默認的是編輯模式。
三種模式之間的轉換:
編輯模式--->輸入模式 i:在光標處輸入 a:在光標后輸入 o:在光標的下方打開一個新行 I:在光標所在的行首輸入 A:在光標所在的行尾輸入 O:在光標的上方打開一個新行 輸入模式--->編輯模式 ESC鍵 編輯模式--->末行模式 : 末行模式--->編輯模式 ESC鍵
打開文件:
vim [options] [file…]
+#:打開文件后,直接讓光標處于第3行的行首
+/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首
關閉文件
ZZ:保持并退出 :q 退出(如果文件有改動此命令沒法退出文件) :q! q強制退出,不保存此前的編輯操作 :wq 保存并退出 :x 保存并退出 :w /PATH/TO/SOMEFILE (保存至某文件)
光標跳轉:
字符間跳轉 h:左 j:下 k:上 l:右 #COMMAND:跳轉#個數的字符 單純間跳轉 w:下一個單詞的詞首 e:當前或后一個單詞的詞尾 b:當前或前一個單詞的詞首 #COMMADN:跳轉#個數的單詞 行首行尾跳轉 ^:跳轉至行首的第一個非空白字符 0:跳轉至行首 $:跳轉至行尾 行間跳轉 #G:跳轉至由#指定的行 1G,gg:第一行 G:最后一行 句間跳轉: ) ( 段間跳轉 } {
vim的編輯命令:
字符編輯: x:刪除光標所在處的字符 #x:刪除光標所在處起始的#個字符 xp:交換光標所在處的字符與其后面的字符的位置 替換命令 r:替換光標所在處的字符 如:rCHAR 刪除命令 d:刪除命令,可結合光標跳轉字符,實現范圍刪除 如:d$:刪除光標處至行尾處的字符 dd:刪除光標所在行 #dd:刪除以光標所在行為起始行的共#行 粘貼命令 P:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的下方,否則,則粘貼至當前光標所在處的后方; p:緩沖區中的內容如果為整行,則粘貼在當前光標所在行的上方;否則,則粘貼至當前光標所在處的前方; 復制命令 y:復制,工作行為相似于d命令,可結合光標跳轉字符,實現范圍復制 如:y$,y^,y0,ye,yw yy:復制一整行 #yy:復制#行 改變命令(c) 編輯模式--->輸入模式,實現刪除操作,同樣有c$,c^,c0,cb,ce,cw等 cc:刪除光標所在的行,并轉換為輸出模式,同樣有 #cc 其他編輯操作: 可視化模式 v:按字符選定 V:按行選定 可結合編輯命令使用:d,c,y 撤銷操作 u:撤銷此前的操作;還可以使用ctrl+r #u:撤銷此前的#個操作 重復執行前一個編輯操作 .
VIM末行模式: 內建的命令行接口
1,地址定界 :start_pos[,end_pos] #:特定的第#行,例如5即第5行 .:當前行 $:最后一行 #,#:指定行范圍,左側為起始行,右側為結束行 #,+#:指定行范圍,左側為起始行絕對編號,右側為相對左側行號的偏移量 %:全文 /pattern/:從光標所在處起始向文件尾部第一次被匹配到的行 /pat1/,/pat2/:從光標所在處起始,第一次由pat1匹配到的行開始,至第一次由pat2匹配到的行結束之間的所有行 可同編輯命令一同使用,實現編輯操作 如d,y,c w /PATH/TO/SOMEFILE:將范圍內的文本保存至指定的文件中、 r /PATH/FROM/SOMEFILE:將指定的文件中的文本讀取并插入至指定位置。 2,查找 /PATTERN:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的所有字符串 ?PATTERN:從當前光標所在處向文件首部查找能夠被當前模式匹配到的所有字符串 n:下一個,與命令方向相同 N:上一個,與命令方向相反 3,查找并替換 s:末行模式的命令; 使用格式:s/要查找的內容/替換為的內容/修飾符 要查找的內容:可使用正則表達式 替換為的內容:不能使用正則表達式,但可以引用 如果‘要查找的內容’部分在模式中使用分組符號:在‘替換為的內容’中使用后向引用 直接引用查找模式匹配到的全部文件,要使用&符號 修飾符: i:忽略大小寫 g:全局替換,意味著一行中如果匹配到多次,則均替換 可把分隔符替換為其他非常用字符: 如:s@@@ s###
1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
]# cp /etc/rc.d/rc.sysinit /tmp/grub ]#vim rc.sysinit : :%s@^[[:space:]]\+@#&@g :wq
2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;
]# cp /boot/grub/grub.conf /tmp ]#vim grub.conf : :%s@^[[:space:]]\+@@g :wq
3、刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行行的#和空白字符
]#vim /tmp/rc.sysinit :%s@^#[[:space:]]\+@@g :wq
4、為/tmp/grub.conf文件中前三行的行首加#號;
]#vim /tmp/grub.conf :1,3s@.*@#&@g :wq
5、將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1;
]#vim /etc/yum.repos.d/CentOS-Media.repo :%s@\(enabled\|gpgcheck\)=0@\1=1@g :wq
6、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202
0 */4 * * * /bin/cp -R /etc/ /backup/etc-$(date +%Y%m%d%H%M)
7、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
0 0 * * 2,4,6 /bin/cp /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)
8、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
0 */2 * * * /bin/grep -E "^S" /proc/meminfo >> /stats/memory.txt
9、工作日的工作時間內,每兩小時執行一次echo "howdy"
0 */2 * * 1,2,3,4,5 /bin/echo "howdy"
腳本編程練習
10、創建目錄/tmp/testdir-當前日期時間;
11、在此目錄創建100個空文件:file1-file100
12、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
13、創建10用戶user10-user19;密碼同用戶名;
14、在/tmp/創建10個空文件file10-file19;
15、把file10的屬主和屬組改為user10,依次類推。
#!/bin/bash # #創建目錄/tmp/testdir-當前日期時間 filename=$(date +%Y%m%d%H%M%S) mkdir /tmp/testdir-${filename} #在此目錄創建100個空文件:file1-file100,此處沒有判斷系統有無此文件 for i in {1..100};do touch /tmp/testdir-${filename}/file$i done #顯示/etc/passwd文件中位于第偶數行的用戶的用戶名 sed -n 'n;p' /etc/passwd | cut -d: -f 1 #創建10用戶user10-user19;密碼同用戶名 for i in {10..19};do useradd user$i echo user$i | passwd --stdin user$i done #在/tmp/創建10個空文件file10-file19 #把file10的屬主和屬組改為user10,依次類推 for i in {10..19};do touch /tmp/file$i chown user$i.user$i /tmp/file$i done
原創文章,作者:N22-成都-stephen,如若轉載,請注明出處:http://www.www58058.com/60076
為增加腳本的健壯性,可以在添加用戶或者創建目錄前做以判斷,寫代碼還是要嚴謹一些。