## VIM 使用总结
首先 VIM 是 VI IMproved 的缩写,是 vi 编辑器的增强型。它与 sed awk 并称为文本处理三剑客。其主要作者 Bram Moolenaar 也是个非常有爱心的人,在 vim 的[官网](http://www.vim.org/) 和 在命令行中直接输入 vim 的命令都可以看到 “help poor children in Uganda” 的字样。当然,vim 还支持扩展,可以做成 IDE,这里就不再具体展开。下面介绍其常见的使用方法。
<h3>模式</h3>
接着 VIM 式是一个模式化的编辑器,常见的模式有:
1. 编辑模式,也称命令模式,是默认的模式
2. 输入模式,也称插入模式
3. 末行模式,是 vim 内置的命令行接口
这三种模式的转换如下:
编辑模式 –> 输入模式
1. 输入 i:insert 在光标所在处插入
2. 输入 I:在光标所在行的行首插入
3. 输入 a: append 在光标所在处之后输入
4. 输入 A: 在光标所在行的行尾插入
5. 输入 o:在光标所在处下方打开的一个新行
6. 输入 O:在光标所在处上方打开的一个新行
输入模式 –> 编辑模式
直接按 `ESC` 键即可
编辑模式 –> 末行模式:
输入 `:`
末行模式 –> 编辑模式
直接按 `ESC` 键即可
<h3>文件操作</h3>
接着是如何打开文件和关闭文件。
打开文件的语法是 `vim [options][file…]`。在打开文件时,利用某些选项,还可以让光标处于特定的位置,例如:
+# 打开文件后,直接将光标处于第 # 行行首
+/PATTERN 打开文件后,直接将光标处于第一个被 PATTERN 匹配到的行的行首
+ 打开文件后,直接将光标处于行尾
关闭文件的相关命令有:
ZZ :保存并退出
:q 退出
:q! 强制退出,不保存此前的编辑操作
:wq = :w,:q 保存并退出
:x 保存并退出
:w /PATH/TO/SOMEFILE 另存到文件
<h3>光标的跳转</h3>
vim 支持在某个命令的前面添加数字来达到多次执行的目的。
字符间跳转:
h 左 j 下 k 上 l 右
单词间跳转
w 跳到下一个单词的词首
b 当前或前一个单词的词首
e 当前或后一个单词的词尾
行首行尾跳转
^ 跳转至行首的第一个非空白字符
0 跳转至行首
$ 跳转至行尾
行间跳转
#G 跳转至由数字 # 指定的行
1G,gg 跳转至第一行
G 跳转至最后一行
句间跳转
) 跳到后一句
( 跳到前一句
段间跳转
} 跳到前一段
{ 跳到后一段
翻屏:
Ctrl+f 向文件尾部翻一屏
Ctrl+b 向文件首部翻一屏
Ctrl+d 向文件尾部翻半屏
Ctrl+u 向文件首部翻半屏
Enter 按行向后翻
<h3>编辑命令</h3>
接下来是与编辑命令相关的介绍。
字符编辑:
x 删除光标所在处的字符
#x 删除光标所在处起始的 # 个字符
xp 交换光标所在处的字符及其后面的字符的位置
替换命令 replace
r 替换光标所在处的字符 rCHAR
删除命令
d 删除命令,可结合光标跳转字符,实现范围删除
d$
d^
dw
de
db
dd 删除光标所在处的行
#dd
粘贴命令
p 缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则粘贴至当前光标所在处的后面
P 缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则粘贴至当前光标所在处的前面
复制命令 yank
y 复制,工作方式与 d 命令类似
改变命令 change
编辑模式 –> 输入模式,实现删除操作
可视化模式
v 按字符选定
V 按行选定
结合编辑命令使用:d,c,y,p
撤销操作 undo
u 撤销此前的操作
#u 撤销此前的 # 次操作
撤销此前的撤销
Ctrl+r
重复执行前一个编辑操作
.
<h3>查找和替换操作</h3>
(1) 地址定界 :start_pos[,end_pos]
# 特定的第 # 行
. 当前行
$ 最后一行
#,# 指定行范围
#,+# 指定行范围,相对初始位置
% 表示全文
/pattern/ 从光标所在处开始向后寻找,第一次被模式所匹配到的行
/parrern1/,/pattern2/
可同编辑命令一同使用,实现编辑操作
d,y,c
w /PATH/TO/SOMEFILE 将范围内的文本保存至指定的文件中
r /PATH/OF/SOMEFILE 将指定文件中的文本读取并插入至指定位置
(2) 查找
/PATTERN 从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
?PATTERN 从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
n 下一个,与命令方向相同
N 上一个,与命令方向相反
(3) 查找替换
s 末行模式的命令;使用格式
s/查找内容/替换内容/修饰符
查找内容:可使用正则表达式
替换内容:不能使用正则表达式,可引用
如果 查找内容 部分在模式中使用分组符号,在 替换内容中使用后向引用
直接引用查找模式匹配到的全部文本,使用 & 符号
修饰符:
i 忽略大小写
g 全局替换,意味着一行中如果匹配到多次,则均替换;
## 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;
命令:
cp /etc/rc.d/rc.sysinit /tmp
vim /tmp/rc.sysinit
:%s@^[[:space:]]\+@#\1@g
## 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;
命令:
cp /boot/grub/grub.conf /tmp
vim /tmp/grub.conf
:%s@^[[:space:]]\+@@g
## 3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符
命令:
vim /tmp/rc.sysinit
:%s@^#[[:space:]]@@g
## 4、为/tmp/grub.conf文件中前三行的行首加#号;
命令:
vim /tmp/grub.conf
:1,3s@^@#\1@g
## 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
## 6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202
命令:
crontab -e
0 */4 * * * cp -a /etc /backup/etc-$(date +%Y%m%d%H%M
)
## 7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402
命令:
crontab -e
0 0 * * 2,4,6 cp -a /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)
## 8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中
命令:
crontab -e
0 */2 * * * grep -E “^S” /proc/meninfo >> /stats/memory.txt
## 9、工作日的工作时间内,每两小时执行一次echo “howdy”
命令:
crontab -e
0 9-18/2 * * 1-5 echo “howdy”
脚本编程练习
## 10、创建目录/tmp/testdir-当前日期时间;
## 11、在此目录创建100个空文件:file1-file100
## 12、显示/etc/passwd文件中位于第偶数行的用户的用户名;
vim testdir.sh
#! /bin/bash
DIR=/tmp/testdir-$(date +%Y%m%d)
mkdir $DIR
touch $DIR/file{1..100}
sed -n ‘n;p’ /etc/passwd | cut -d: -f1
原创文章,作者:FSSlc,如若转载,请注明出处:http://www.178linux.com/70961
评论列表(1条)
能熟练使用vim会提升你操作的速度~~后面的习题也不错~加油!