請詳細總結vim編輯器的使用并完成以下練習題
VIM有三種模式,分別為標準模式、輸入模式、末行模式
模式切換:
標準模式——輸入模式:i
標準模式——末行模式::
末行模式、輸入模式——標準模式:esc
末行模式——輸入模式:esc之后按i鍵
光標移動:
h |
左 |
l |
右 |
j |
下 |
k |
上 |
w |
跳轉至下一單詞詞首 |
2w |
跳轉至往下兩個單詞的詞首 |
b |
向前跳轉至前一個詞首 |
e |
向后跳轉至下一個詞首 |
2b |
跳轉至前兩個詞首 |
2e |
跳轉至下兩個詞首 |
0 |
絕對行首 |
^ |
非空白行首 |
$ |
行尾 |
( |
上一句 |
) |
下一句 |
{ |
上一段 |
} |
下一段 |
G |
最后一行 |
gg、1G |
第一行 |
5G |
跳轉至第5行 |
退出:
q:在沒有修改時退出編輯器
q!:不保存退出
w:保存
wq:保存退出
x:保存退出
wq!:強制保存退出
w
/path/to/file:另存為
ZZ:編輯模式下保存退出
編輯操作:
x |
刪除光標所在處字符 |
5x |
刪除光標所在處及向后共5個字符 |
d |
結合光標跳轉字符實現范圍刪除,如d$、dw、de、db、d0 |
||
dd |
刪除光標所在行 |
2dd |
刪除2行 |
p |
在光標所在行下方粘貼 |
y |
結合光標跳轉字符實現范圍復制 |
5y |
從當前行向下復制5行 |
yy、Y |
復制當前行 |
c |
修改,結合光標跳轉字符實現范圍修改 |
cc |
刪除光標所在行并進入編輯模式 |
v |
可視化模式,按字符選擇 |
V |
可視化模式,按行選擇 |
u |
撤銷此前的操作 |
4u |
撤銷最近的4次操作 |
ctrl+r |
撤銷此前的撤銷操作 |
ctrl+f |
向文件尾部翻一屏 |
ctrl+b |
向文件首部翻一屏 |
ctrl+d |
向文件尾部翻半屏 |
ctrl+u |
向文件首部翻半屏 |
|
|
末行模式:
1、 地址定界
#:第#行
#1,#2:從#1行至#2行
#1,+#2:從#1行再往后#2行
.:當前行
$:最后一行
%:全文,相當于1,$
/path1/,/path2/:從第一次被path1匹配到的行到第一次被path2匹配到的行
2、 保存選取內容
w /path/to/file 需配合地址定界功能使用
3、 讀取文件內容
r /path/from/file
4、 查找
/key :從當前光標處向文件尾部查找
?key :從當前光標處向文件首部查找
查找過程中:
n:與查找方向相同
N:與查找方向相反
5、 替換
末行模式下s
s/要查找的內容/要替換為的內容/修飾符
要查找的內容:可使用正則表達式
要替換為的內容:不能使用正則表達式,但可以引用,可使用分組引用,也可以使用&引用
修飾符:i 忽略大小寫
g 全局模式
多文件模式:
:next |
切換至下一個文件 |
:previous |
切換至上一個文件 |
:last |
切換至最后一個文件 |
:first |
切換至第一個文件 |
:wqall |
保存退出全部文件 |
:qall |
退出所有文件 |
:wall |
保存所有文件 |
|
|
vim -o a.txt b.txt |
水平分割 |
||
vim -O a.txt b.txt |
垂直分割 |
多窗口
ctrl+w,s |
水平分割文件窗口 |
ctrl+w,v |
垂直分割文件窗口 |
ctrl+w,方向鍵 |
窗口間切換 |
|
|
窗口屬性定義(僅對當前vim進程有效):
:set nu |
顯示行號 |
:set nonu |
取消顯示行號 |
:set ai |
啟動自動縮進功能 |
:set noai |
取消自動縮進功能 |
:set ic |
忽略大小寫 |
:set noic |
取消忽略大小寫 |
:set sm |
括號匹配 |
:set nosm |
取消括號匹配 |
:syntax on |
語法高亮開啟 |
:syntax off |
語法高亮關閉 |
:set hisearch |
搜索高亮 |
:set nohlsearch |
關閉搜索高亮 |
也可修改以下文件
/etc/vimrc:全局配置
~/.vimrc:用戶配置文件,有可能默認不存在,需要創建
一、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;
[root@centos6
tmp]# cp /etc/rc.d/rc.sysinit /tmp #復制文件至/tmp下
在vim末行模式下輸入:
:%s@^[[:space:]]\+@#&@g
或:%s@^\([[:space:]]\+\)@#\1@g
二、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.conf文件中的行首的空白字符;
[root@centos6
tmp]# cp /boot/grub/grub.conf /tmp #復制文件至/tmp下
:%s@^[[:space:]]\+@@g
:%s@^[[:space:]]\{1,\}@@g
三、刪除/tmp/rc.sysinit文件中的以#開頭,且后面跟了至少一個空白字符的行行的#和空白字符
s@^#[[:space:]]\+@@g #引用前面的模式
:%s@^#[[:space:]]\{1,\}@@g #分組模式
四、為/tmp/grub.conf文件中前三行的行首加#號;
:1,3s@^.*@#&@g #引用模式
:1,3s@^\(.*\)@#\1@g #分組模式
五、將/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改為1;
:%s@\(enabled\|gpgcheck\)=0@&=1@g
六、每4小時執行一次對/etc目錄的備份,備份至/backup目錄中,保存的目錄名為形如etc-201504020202
方法一:[root@promote
backup]# crontab -e 輸入以下內容
* */4 * * * /bin/tar -P -Jcf /backup/etc-`date
+\%Y\%m\%d\%H\%M`.tar.xz /etc
方法二:[root@promote
crontabscript]# vim etcbackup
輸入以下內容:
#!/bin/bash
tar -P -Jcf /backup/etc-`date +%Y%m%d%H%M`.tar.xz /etc
[root@promote backup]#chmod u+x /tmp/crontabscript/etcbackup
#增加執行權限
[root@promote backup]# crontab -e
輸入以下內容:
* */4 * * * /tmp/crontabscript/etcbackup
七、每周2,4,6備份/var/log/messages文件至/backup/messages_logs/目錄中,保存的文件名形如messages-20150402
方法一:[root@promote
backup]# crontab -e 輸入以下內容
0 0 * * 2,4,6 /bin/tar -P -Jcf /backup/messages_logs/messages-`date
+\%Y\%m\%d\%H\%M`.tar.xz /var/log/messages
方法二:打開vim編輯器,輸入以下內容
#!/bin/bash
tar -P -Jcf /backup/messages_logs/messages-`date +%Y%m%d%H%M`.tar.xz
/var/log/messages
[root@promote backup]# crontab -e 輸入以下內容
0 0 * * 2,4,6 /tmp/crontabscript/messagesbackup
八、每天每兩小時取當前系統/proc/meminfo文件中的所有以S開頭的信息至/stats/memory.txt文件中
方法一:[root@promote
backup]# crontab -e 輸入以下內容
* */2 * * * /bin/cat /proc/meminfo | /bin/grep -i “^s”
>>/stats/memory.txt && /bin/echo
`/bin/date`>>/stats/memory.txt
#把/proc/meminfo文件中的所有以S開頭的信息和時間一起保存至/stats/memory.txt文件中
方法二:打開VIM編輯器,輸入以下內容
#!/bin/bash
cat /proc/meminfo | grep -i “^s” >>/stats/memory.txt
&& echo `date`>>/stats/memory.txt
[root@promote backup]# crontab -e 輸入以下內容
* */2 * * * /tmp/crontabscript/meminfobackup
九、工作日的工作時間內,每兩小時執行一次echo “howdy”
* (9-17)/2 * * 1-5 /bin/echo “howdy”
腳本編程練習
十、創建目錄/tmp/testdir-當前日期時間;
#!/bin/bash
# version 1
mkdir /tmp/testdir-`date +%Y-%m-%d-%H-%M`
#!/bin/bash
# version 2
i=`date +%Y%m%d%H%M`
if
[ -e testdir$i ];then
echo
“testdir$i is exists”
else
mkdir
./testdir$i
fi
十一、在此目錄創建100個空文件:file1-file100
#!/bin/bash
#version 1
touch file{1..100}
#!/bin/bash
#version 2
for i in
{1..100};do
if [ -e file$i ];then
echo “file$i is
exists”
else touch ./file$i
fi
done
十二、顯示/etc/passwd文件中位于第偶數行的用戶的用戶名;
方法一:
#!/bin/bash
sed ‘1~2d’
/etc/passwd | cut -d: -f1
方法二:
#!/bin/bash
sed -n ‘n;p’
/etc/passwd | cut -d : -f1
原創文章,作者:lixinkuan,如若轉載,請注明出處:http://www.www58058.com/79482
6,8,9題需要精確到分鐘的哈,加油?。?!