第六周 總結VIM編輯器的使用并完成練習題
1. VIM是什么?
VIM(Vi IMproved)是從vi發展出來的一個文本編輯器。
2.為什么要使用VIM?
VIM有代碼補完,編譯以及錯誤跳轉等方便編程的功能,在程序員中廣泛使用。對于大多數的用戶來說,VIM有著比較陡峭的學習曲線,但是一旦掌握一些基本操作之后,能大幅度提高編輯效率。VIM是類Unix系統用戶最喜歡的文本編輯器之一。
3.如何使用VIM?
介于VIM命令實在是太多及本人的時間有限,接下來就VIM的使用做盡可能的詳細介紹。讀者如想了解更多關于VIM的使用,可以在VIM中輸入不帶參數的“help”來閱讀幫助文檔。請讀者跟著下面的VIM使用介紹,動手實踐操作,切勿只是閱讀!
3.1 用VIM打開和退出文本文件
3.1.1 使用VIM打開文本文件
在shell命令行模式中輸入 vim FILENAME 即可用vim打開要編輯的文本文件。
3.1.2 退出VIM
退出VIM有多種方式:
a.保存退出 :wq b.不保存強制退出 :q! c.未編輯文本退出 :q
3.2 VIM模式
VIM大致可分為三種模式:普通模式,編輯模式和命令模式。
3.2.1 三種模式之間的切換
i鍵,在光標所在位置前插入,等待輸入。
a鍵,在光標所在位置之后添加,等待輸入。
o鍵,在光標所在行的下方添加新行,等待輸入。
I鍵,在光標所在行的行首,等待輸入。
A鍵,在光標所在行的行尾,等待輸入。
O鍵,在光標所在行的上方添加新行,等待輸入。
注意:
a,用vim命令編輯文本時,默認處在普通模式中,按i,o,a任意一個按鍵可進入編輯模式。當編輯完成后,可按ESC鍵返回普通模式。
b,在普通模式下,按冒號“:”鍵可進入命令模式。同樣,在命令模式下返回普通模式按ESC鍵。
c,在編輯模式下想進入命令模式必須先返回普通模式。
3.2.2 在普通模式下移動光標
a,字符間移動光標
h鍵,光標向左移動
j鍵,光標向下移動
k鍵,光標向上移動
l鍵,光標向右移動
b,單詞間移動光標
w鍵,光標向行尾移動到下一個單詞的詞首。
e鍵,光標向行尾移動到當前或下一個單詞的詞尾。
b鍵,光標向行首移動到當前或上一個單詞的詞首。
注意:以上按鍵可以結合數字鍵一起使用。例如:2w表示光標向行尾移動兩個單詞。
c,行首行尾移動光標
^鍵,光標移動到行首的第一個非空白字符。
數字0,光標移動到行首。
$鍵,光標移動到行尾。
d,文本行鍵移動光標
1G或gg,光標移動到文本行的第一行。
G,光標移動到文本行的末行。
注意:數字+G鍵,光標移動至指定數字的行。
e,句間移動光標
( 左括號,光標移動到上一句句首。
) 右括號,光標移動到下一句句首。
注意:數字鍵+括號鍵表示光標移動到數字鍵指定的句子的句首。例如:6(,表示光標向上移動6句。 f,段落間移動光標
{ 左花括號,光標移動到上一個段落段首。
} 右花括號,光標移動到下一個段落段首。
注意:數字鍵+花括號鍵表示光標移動到數字鍵指定的段落的段首。例如:3{,表示光標向上移動3個段落。
g,屏幕間移動光標
ctrl+d鍵,光標向下移動半屏。
ctrl+u鍵,光標向上移動半屏。
ctrl+f鍵,光標向下移動一屏。
ctrl+b鍵,光標向上移動一屏。
3.3 VIM的編輯命令
在編輯(普通)模式下編輯命令的格式是:operator [number] motion
operator,操作符,表示要做的事情,比如d代表刪除。
[number],可以附加的數字,代表動作的重復的次數。
motion,動作,代表在所操作的文本上的移動,例如w代表單詞,$代表行末。
a,刪除字符命令
x鍵:刪除光標所在位置的單個字符。
[number]+x鍵,刪除光標所在位置向后[number]個字符。
xp組合鍵,交換光標所在位置的字符與其后面的字符。
b,替換字符命令
r鍵,替換光標所在位置的字符,按r鍵后輸入要替換的字符。
c,刪除字符命令
d鍵,結合[number]和motion實現范圍刪除。
d$組合鍵,刪除當前光標位置至行尾的所有字符。
d^組合鍵,刪除當前光標位置至行首的所有字符。
dw組合鍵,刪除當前光標位置至下一個單詞詞首之間的所有字符。
de組合鍵,刪除當前光標位置至單詞詞尾的所有字符。
db組合鍵,刪除當前光標位置至單詞詞首的所有字符。
dd組合鍵,刪除當前光標所在的行。
注意:d2w組合鍵或2dw組合鍵,刪除當前光標位置至下二個單詞詞首之間的所有字符。其他上述組合鍵亦可與[number]一起使用。
d,黏貼字符命令
小寫p鍵,如果緩沖區的內容是整行,則黏貼在當前光標所在行的下方。如果不是整行,則黏貼在當前光標所在位置的后方。
大寫P鍵,如果緩沖區的內容是整行,則黏貼在當前光標所在行的上方。如果不是整行,則黏貼在當前光標所在位置的前方。
e,復制字符命令
y鍵,結合[number]和motion實現范圍復制。
y$組合鍵,復制當前光標位置至行尾的所有字符。
y^組合鍵,復制當前光標位置至行首的所有字符。
yw組合鍵,復制當前光標位置至下一個單詞詞首之間的所有字符。
ye組合鍵,復制當前光標位置至單詞詞尾的所有字符。
yb組合鍵,復制當前光標位置至單詞詞首的所有字符。
yd組合鍵,復制當前光標所在的行。
注意:y2w組合鍵或2yw組合鍵,復制當前光標位置至下二個單詞詞首之間的所有字符。其他上述組合鍵亦可與[number]一起使用。
f,改變字符命令 c鍵,實現刪除操作并轉換成輸入模式,結合[number]和motion實現范圍改變。
c$組合鍵,改變當前光標位置至行尾的所有字符,并進入輸入模式。
c^組合鍵,改變光標位置至行首的所有字符,并進入輸入模式。
cw組合鍵,改變當前光標位置至下一個單詞詞首之間的所有字符,并進入輸入模式。
ce組合鍵,改變當前光標位置至單詞詞尾的所有字符,并進入輸入模式。
cb組合鍵,改變當前光標位置至單詞詞首的所有字符,并進入輸入模式。
cd組合鍵,改變當前光標所在的行,并進入輸入模式。
注意:c2w組合鍵或2cw組合鍵,改變當前光標位置至下二個單詞詞首之間的所有字符,并進入輸入模式。其他上述組合鍵亦可與[number]一起使用。
g,可視化編輯
小寫v鍵,按字符選定范圍,結合c,y,d鍵執行想要的編輯操作。 大寫V鍵,按行選定范圍,結合c,y,d鍵執行想要的編輯操作。
h,撤消操作
小寫u鍵,撤消上一次的編輯操作,可與[number]結合使用。
大寫U鍵,撤消光標所在行的所有編輯操作。
ctrl+r鍵,撤消此前撤消的編輯操作,也就是可以重新執行被撤消的編輯操作。
.點號鍵,重復執行前一次編輯操作。
i,配對各位括號 [],{},()
把光標移動到任何一個括號上,然后按%百分號鍵,即可找到配對的括號。在程序調試時,這個功能用來查找不配對的括號非常有用。
3.4 命令模式
3.4.1在普通模式中輸入:冒號可進入命令模式,可執行保存,讀入,合并文件等功能。
a,輸入:w FILENAME,可將當前VIM中正在編輯的文件保存到名為FILENAME的文件中。
b,先輸入v或V鍵選定范圍,然后輸入:w FILENAME,可將選定范圍的字符保存到FILENAME中。
c,輸入:r FILENAME,可提取FILENAME并將其插入到當前光標所在位置的后面。
d,輸入:r !COMMAND,可讀取COMMAND命令的輸出結果并將其放置到當前光標所在位置的后面。
3.4.2 在命令模式下查找字符串
/鍵,加上PATTERN可以用以在當前文本中,從當前光標所在位置向文件尾部查找該PATTERN。查找到第一個匹配字符串后按小寫n鍵,可查找下一個。
?鍵,加上PATTERN可以用以在當前文本中,從當前光標所在位置向文件首部查找該PATTERN。查找到第一個匹配字符串后按大寫N鍵,可查找上一個。
3.4.3 在命令模式下查找并替換
輸入:s/OLD/NEW 表示在一行內替換頭一個字符串OLD為新字符串NEW。
輸入:s/OLD/NEW/g 表示在一行內替換所有個字符串OLD為新字符串NEW。
輸入[number],[number]:s/OLD/NEW/g 表示在第一個[number]行至第二個[number]行之間替換所有的字符串OLD為新字符串NEW。
輸入:%s/OLD/NEW/g 表示在全文中替換所有的字符串OLD為新字符串NEW。
輸入:%s/OLD/NEW/gc 表示在全文中替換所有的字符串OLD為新字符串NEW時詢問用戶確認是否替換。
注意1:[number],[number]是指定行范圍。
例如:
2,4 表示從第2行到第4行之間。
. 表示當前行。
$ 表示最后一行。
5,$ 表示從第5行至最后一行之間。 % 表示全文。 注意2:s///g中間三個斜杠為分隔符可用@@@或###替換。
3.4.4 在VIM內部執行外部命令
輸入:!COMMAND 即可執行外部命令,按鍵結束命令,回到VIM。
例如:
!ls 列舉出當前目錄的內容
!rm FILENAME 刪除名為FILENAME的文件
第六周練習題
1,復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#。
%s@^([[:space:]]+)@#\1@
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。
[root@www ~]# crontab -e
0 */4 * * * root cp -r /etc/ /backup/etc-$(date +%Y%m%d%H%M)
7,每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402。
[root@www ~]# crontab -e
0 * * * Tue,Tur,Sat root cp /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)
8,每天每兩個小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中。
[root@www ~]# crontab -e
0 */2 * * * root grep “^S” /proc/meminfo >> /stats/memory.txt
9,工作日的工作時間內,沒兩小時執行一次echo “howdy”。
[root@www ~]# crontab -e
0 9-18/2 * * 1-5 root echo “howdy”
腳本編程練習
10,創建目錄/tmp/testdir-當前日期時間。
#!/bin/bash mkdir /tmp/testdir-$(date +%Y%m%d%H%M%S) [root@www scripts]# bash -x mkdir2.sh ++ date +%Y%m%d%H%M%S + mkdir /tmp/testdir-20170902155548
11,在此目錄中創建100個空文件:file1-file100。
#!/bin/bash for num in `seq 1 100`; do touch /tmp/testdir-20170902155548/file$num done
12,顯示/etc/passwd文件中位于第偶數行的用戶的用戶名。
#!/bin/bash
sed '1~2d' /etc/passwd | cut -d : -f 1 [root@www scripts]# bash -x even.sh + cut -d : -f 1 + sed 1~2d /etc/passwd bin adm sync halt uucp games ftp dbus abrt ntp postfix tcpdump archlinux rpcuser apache redhat ubuntu slackware gentoo user1 chrooter bash basher
原創文章,作者:ZhengBin,如若轉載,請注明出處:http://www.www58058.com/85975
再接再勵 。