請詳細總結vim編輯器的使用并完成以下練習題
基本模式: 編輯模式,命令模式 輸入模式 末行模式 內置的命令行接口 打開文件 vim [options] [file ..] +#:打開文件后,直接讓光標處于第#行 +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行的行首 + 空格:直接到末尾 模式轉換: 編輯模式 --> 插入模式 i:insert,在光標所在處輸入 a:append,在光標所在處后方輸入 o:在光標所在處的下方打開一個新行 I:在光標所在行的行首輸入 A:在光標所在行的行尾輸入 O:在光標所在處的上方打開一個新行 輸入模式 --> 編輯模式 Esc 編輯模式 -->末行模式 : 末行模式 --> 編輯模式 Esc 關閉文件: ZZ:保存并推出 :q:退出 :q!:強制退出,不保存此前的編輯操作 :wq:保存并推出 :w,:q :x保存并推出 :w /PATH/TO/SOMEFILE 光標跳轉: 字符間跳轉 h:左 j: 下 k: 上 l: 右 #COMMAND:跳轉由#指定的個數的字符 單詞間跳轉 w: 下一個單詞的詞首 e: 當前或后一個單詞的詞尾 b: 當前或前一個單詞的詞首 行首行尾跳轉 ^: 跳轉至行首的第一個非空白字符 0:跳轉至行首 $: 跳轉至行尾 行間跳轉 #G:跳轉至由#指定的行 1G,gg:第一行 G:最后一行 句間跳轉: ) ( 段間跳轉 } { 翻屏: Ctrl+f:向文件尾翻一屏 Ctrl+b:向文件首部翻一屏 Ctrl+d:向問價你未卜翻半屏 Ctrl+u:向文件首部翻半屏 Enter:執行向后翻 vim編輯命令 字符編輯 x: 刪除光標所在處的字符 #x: 刪除光標所在處起始的#個字符 xp:交換光標所在處的字符與其后面的字符的位置 替換命令(replace) r: 替換光標所在處的字符 rCHAR 刪除命令 d:刪除命令,可結合光標跳轉字符,實現范圍刪除 d$: d^: dw: de: db: #COMMAND dd: #dd:刪除光標所處的行起始的共#行 粘貼命令(p,put,paste) p:緩沖區的內容如果為整行,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的后方 P:緩沖區的內容如果為整行,則粘貼咋當前光標所在行的上方;否則,則粘貼至當前光標所在處的后方 復制命令(yank,y) y$ y^ yo ye y yw yb #COMMAND y:復制,工作行為相似與d命令 yy:復制一整行 #yy:復制# 行 改變命令(change,c) 編輯模式 --> 輸入模式,實現刪除操作 c$ c^ co cb ce cw #COMMAND cc:刪除光標所在的行,并轉換為輸出模式 可視化模式, v:按字符選定 V:按行選定 結合編輯命令使用:d,c,y 撤銷(undo)操作 u: 撤銷此前的操作 #u:撤銷此前的#個操作 撤銷此前的撤銷: Ctrl+r 重復執行前的一個編輯操作: . vim自帶的練習教程:vimtutor vim末行模式 內建的命令行接口 (1)地址定界 :start_ports[,end_pos] #:特定的第# 行,例如5即第5行 .:當前行 $:最后一行 #,#: 指定行范圍,左側為起始行,右側為結束行 #,+#:指定行范圍,左側為起始行絕對編號,右側為相對左側行號的偏移量,例如:3,+7 .,$-1 當前行到倒數第二行 1,$:全文 %:全文 /pattern/:從光標所在處起始向文件尾部第一次被模式所匹配到的行 /first/,$ /pat1/,/pat2/:從光標所在處起始,第一次由part1匹配到的行開始,至第一次由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文件中的以至少一個空白字符開頭的行的行首加#;
:%s@^[[:space:]]\+@#&@g
2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;
:s@^[[:space:]]\+@@g
3、刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行行的#和空白字符
:%s@^#[[:space:]]\+@@g
4、為/tmp/grub.conf文件中前三行的行首加#號;
:1,3s@^@#&@g
5、將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1;
:%s@\(enabled\|gpgcheck\)=0@\1=1@g
6、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202
* */4 * * * /usr/bin/cp -r /etc/ /backup/etc-`date +%Y%m%d%H%M`
7、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
* * * * 2,4,6 /usr/bin/cp -r /var/log/messages /backup/messages_logs/messages-`date +%Y%m%d`
8、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
* */2 * * * /usr/bin/grep '^S' /proc/meminfo >> /stats/memory.txt
9、工作日的工作時間內,每兩小時執行一次echo "howdy"
* */2 * * 1-5 echo "howdy" 2>&1
腳本編程練習
10、創建目錄/tmp/testdir-當前日期時間;
1 #!/bin/bash 2 # 3 4 DATE=`date +%Y%m%d%H%M%S` 5 if [ -d /tmp/testdir-$DATE ];then 6 echo "/tmp/testdir-$DATE is exist." 7 else 8 mkdir /tmp/testdir-$DATE 9 if [ -d /tmp/testdir-$DATE ];then 10 11 echo "/tmp/testdir-$DATE create success." 12 else 13 echo "/tmp/testdir-$DATE create failure." 14 15 fi 16 fi
11、在此目錄創建100個空文件:file1-file100
1 #!/bin/bash 2 # 3 4 for i in {1..100};do 5 if [ -e ./file$i ];then 6 echo "./file$i is exit." 7 else 8 touch ./file$i 9 fi 10 done
12、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
sed -n '2~2p' /etc/passwd | cut -d: -f1
原創文章,作者:N25-趙叔,如若轉載,請注明出處:http://www.www58058.com/68430