請詳細總結vim編輯器的使用并完成以下練習題
光標跳轉 | ||
字符間跳轉 |
h或向左箭頭鍵 | 光標向左移動一個字符 |
j或向下箭頭鍵 | 光標向下移動一個字符 | |
k或向上箭頭鍵 | 光標向上移動一個字符 | |
l或向右箭頭鍵 | 光標向右移動一個字符 | |
翻屏 | Ctrl+f | 屏幕向下移動一頁 |
Ctrl+b | 屏幕向上移動一頁 | |
Ctrl+d | 屏幕向下移動半頁 | |
Ctrl+u | 屏幕向上移動半頁 | |
Enter | 按行向后翻 | |
單詞間跳轉 | w | 下一個單詞的詞首 |
e | 當前或后一個單詞的詞尾 | |
b | 當前或前一個單詞的詞首 | |
行首行尾跳轉 | ^ | 跳轉至行首的第一個非空白字符 |
0 | 跳轉至行首 | |
$ | 跳轉至行尾 | |
行間跳轉 | #G | 跳轉至由#指定的行 |
1G,gg | 第一行 | |
G | 最后一行 | |
字符編輯 | ||
字符編輯 | i | 進入插入模式,并從當前光標所在處插入 |
a | 進入插入模式,并從當前光標所在處的下一個字符處插入 | |
o | 進入插入模式,并從當前光標所在行的下一行處插入 | |
x | 刪除光標所在處的字符 | |
#x | 刪除光標所在處起始的#個字符 | |
xp | 交換光標所在處的字符與其后面的字符的位置 | |
替換命令 | r | 替換光標所在處的字符一次 |
R | 會一直替換光標所在處字符,直到按下ESC | |
刪除命令 | d$ | 刪除從光標所在處到該行的最后一個字符 |
d0 | 刪除從光標所在處到該行第一個字符 | |
d1G | 刪除從光標所在到第一行的所有數據 | |
dG | 刪除從光標所在處到最后一行的所有數據 | |
dd | 刪除光標所在行 | |
ndd | n為數字。刪除光標所在的向下n行 | |
復制命令 | y$ | 復制光標所在的那個字符到該行行尾的所有數據 |
y0 | 復制光標所在的那個字符到該行行首的所有數據 | |
y1G | 復制光標所在行到第一行的所有數據 | |
yG | 復制光標所在行到最后一行的所有數據 | |
yy | 復制光標所在行 | |
nyy | n為數字。復制光標所在的向下n行 | |
粘貼命令 | p | 緩沖區中的內容如果為整行,則粘貼在當前光標所在行的下方;否則,則粘貼至當前光標所在處的后方 |
P | 緩沖區中的內容如果為整行,則粘貼在當前光標所在行的上方;否則,則粘貼至當前光標所在處的前方 | |
可視化編輯 | v | 字符選擇,會將光標經過的地方反白選擇 |
V | 行選擇,會將光標經過的行反白選擇 | |
Ctrl+v | 塊選擇,可以用長方形的方式選擇數據 | |
y | 將反白的地方復制起來 | |
d | 將反白的地方刪除 | |
撤銷與撤銷撤銷 | u | 撤銷此前的操作 |
Ctrl+r | 撤銷此前的撤銷 | |
. | 重復執行前一個編輯操作 | |
末行模式 | ||
地址定界 | :# | 特定的第#行 |
:% | 選定全文 | |
:. | 選定當前行 | |
:$ | 選定最后一行 | |
:#,# | 從左側第#行到右側第#行 | |
:#,+# | 從左側第#行起,加上右側#表示的行數 | |
:/pat1/,/pat2/ | 從第一次被pat1匹配開始到第一次被pat2匹配結束 | |
:#,/pat/ | 從第#行開始到第一次匹配到pat結束 | |
:/pat/,$ | 從第一次匹配到pat開始到最后一行結束 | |
查找和替換 | /pat | 從當前光標所在處向文件尾部查找能夠被pat匹配到的所有字符串 |
?pat | 從當前光標所在處向文件首部查找能夠被pat匹配到的所有字符串 | |
:s/pat1/pat2/ | 將當前行的pat1替換為pat2 | |
:%s/pat1/pat2/g | 將全文中所有的pat1替換為pat2 | |
多文件編輯 | :next | 切換到下一個文件 |
:prev | 切換到上一個文件 | |
:first | 切換到第一個文件 | |
:last | 切換到最后一個文件 | |
:wqall | 保存所有文件并退出 | |
:wall | 保存所有文件 | |
:qall | 退出所有文件 | |
多窗口 | Ctrl+w,s | 水平分割窗口 |
Ctrl+w,v | 垂直分割窗口 | |
Ctrl+w,方向鍵 | 窗口間切換 | |
個性化定制 | :set nu | 顯示行號 |
:set nonu | 取消顯示行號 | |
:set ai | 啟用自動縮進 | |
:set noai | 禁用自動縮進 | |
:set hlsearch | 啟用高亮搜索 | |
:set nohlsearch | 禁用高亮搜索 | |
:syntax on | 啟用語法高亮 | |
:syntax off | 禁用語法高亮 | |
:set ic | 啟用忽略字符大小寫 | |
:set noic | 禁用忽略字符大小寫 |
1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
:%s@^\([[:space:]]\+\)@#\1@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@^@#@
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
# crontab -e 0 */4 * * * /bin/cp -a /etc/ /backup/etc-$(date +%Y%m%d%H%M) >/dev/null
7、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
# crontab -e 0 0 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d) >/dev/null
8、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
# crontab -e 0 */2 * * * /bin/grep ^S /proc/meminfo >>/stats/memory.txt
9、工作日的工作時間內,每兩小時執行一次echo "howdy"
0 9-17/2 * * 1-5 /bin/echo "howdy"
腳本編程練習
10、創建目錄/tmp/testdir-當前日期時間;
11、在此目錄創建100個空文件:file1-file100
10,11題合并解答:
#!/bin/bash _DIR="/tmp/testdir-$(date +%Y%m%d%H%M%S)" /bin/mkdir -p $_DIR for i in `seq 100` do touch $_DIR/file$i done
12、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
# sed -n 'n;p' /etc/passwd
13、創建10用戶user10-user19;密碼同用戶名;
#!/bin/bash for i in {10..19} do id user$i &>/dev/null && echo "user$i already exists!" && continue || useradd user$i echo "user$i"|passwd --stdin user$i done
14、在/tmp/創建10個空文件file10-file19;
15、把file10的屬主和屬組改為user10,依次類推。
14,15題合并解答:
#!/bin/bash for i in {10..19} do [ ! -f /tmp/file$i ] && touch /tmp/file$i /bin/chown user$i:user$i /tmp/file$i done
原創文章,作者:N26-西安-方老喵,如若轉載,請注明出處:http://www.www58058.com/66934