1.三种模式的切换
命令模式(默认)
输入模式
末行模式
命令 ->(a,i,o) 输入
i 光标后插入
a 光标前插入
o 光标下一行插入
A(shift+a) 光标所在行行尾插入
O(shift+o) 光标上一行插入
输入 -> (esc) 命令
命令 ->(:) 末行
末行 ->(esc) 命令
2.常用功能
光标移动
方向
小键盘方向键 or hjkl
行内跳转
home或^(shift+6) 跳转行首
end或$(shift+4) 跳转行尾
w 跳转单词
行间跳转
命令模式
G(shift+g) 跳转尾行
gg 跳转首行
ngg 跳转至第n行
末行模式
:n 跳转至第n行
:% 跳转至行尾
翻页
pgup
pgdn
复制
命令模式
yy 复制光标所在行
yw 复制光标所在单词
nyy 复制从光标所在行开始,往下n行
末行模式
:ny 复制第n行
:m,ny 复制第m行到第n行
:%y 复制全文
删除
命令模式
del或x 删除光标所在字符
dw 删除单词
D(shift+d) 删除光标至行尾
dd 删除光标所在行
ndd 删除从光标所在行开始,往下n行
末行模式
:nd 删除第n行
:m,nd 删除第m行到第n行
:%d 删除全文
粘贴
命令模式
p 光标后粘贴
P(shift+p) 光标前粘贴
剪切
先删除在粘贴
查找
/word
?word
n 从上往下
N 从下往上
替换
:s/old/new 替换光标所在行匹配的第一个字段
:s/old/new/g 替换光标所在行所有匹配的字段
:m,ns/old/new/g 替第m行到所有匹配的字段
:%s/old/new/g 替换全文匹配的字段
撤销
u 撤回到上一步
U 全部撤回
ctrl+r 回滚
退出
:q 正常退出(没对文件做任何的修改)
:wq 保存退出
:q! 强制不保存退出
:wq!强制保存退出
:x 保存退出
命令模式
ZZ 保存退出
VIM练习
请把/etc/passwd 复制到/root/目录下,并重命名为test.txt
[root@hd ~]# cp /etc/passwd /root/
[root@hd ~]# mv /root/passwd /root/test.txt
[root@hd ~]# ls /root/
anaconda-ks.cfg bd_logo1.png hello.txt secure.log user.sh
bbb.txt bd_logo1.png?where=super nginx.log test.txt
用vim打开test.txt并设置行号
[root@hd ~]# vim /root/test.txt
:set nu
分别向下、向右、向左、向右移动5个字符
分别向下、向上翻两页
pgup
pgdn
把光标移动到第10行
10gg
:10
让光标移动到行末,再移动到行首
G
gg
移动到test.txt文件的最后一行
:%
移动到文件的首行
gg
搜索文件中出现的 root 并数一下一共出现多少个,不区分大小写搜索
:/root
4
把从第一行到第三行出现的root 替换成--alex--
:1,3s/root/--alex--/g
还原上一步操作
u
把整个文件中所有的root替换成--alex--
:%s/root/--alex--/g
把光标移动到20行,删除本行
20gg
dd
还原上一步操作
u
删除第19行
:19d
还原上一步操作
u
删除从5行到10行的所有内容
:5,10d
还原上一步操作
u
复制2行并粘贴到11行下面
:2y
:11
p
还原上一步操作(按两次u)
复制从11行到15行的内容并粘贴到8行上面
:11,15y
:8
P
还原上一步操作(按两次u)
把13行到18行的内容移动文件的尾部
:13,18y
G
p
:13,18d
还原上一步操作(按两次u)
光标移动到首行,把/sbin/nologin改成/bin/bash
:s/\/sbin\/nologin/\/bin\/bash/g
在第一行下面插入新的一行,并输入"# Hello!"
gg
o
# Hello!
保存文档并退出
:wq
vim环境变量
环境变量临时生效
:set nu 显示行号
:set ic 忽略大小写, 在搜索的时候有用
:set ai 自动缩进
:set list 显示制表符(空行、tab键)
:set no[nu|ic|ai…] 取消临时设定的变量
环境变量永久生效
~/.vimrc 个人环境变量(优先级高) /etc/vimrc 全局环境变量
# vim ~/.vimrc
syntax on
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
set number
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set ruler
set incsearch
set showmatch
set matchtime=10
set ignorecase
set cursorline
set t_Co=256
colorscheme molokai
#语法检查及高亮
syntax on
#设定默认解码
set?fenc=utf-8?
set?fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
#显示行号
set?number?
#vim使用自动对齐,也就是把当前行的对齐格式应用到下一行
set?autoindent?
#依据上面的对齐格式,智能的选择对齐方式
set?smartindent?
#设置tab键为4个空格
set?tabstop=4?
#设置当行之间交错时使用4个空格
set?shiftwidth=4?
#设置在编辑过程中,于右下角显示光标位置的状态行
set?ruler?
#设置增量搜索,这样的查询比较smart
set?incsearch?
#高亮显示匹配的括号
set?showmatch?
#匹配括号高亮时间(单位为?1/10?s)
set?matchtime=10?
#在搜索的时候忽略大小写
set?ignorecase?
#禁止生成临时
#set?nobackup?
#当前行高亮
set?cursorline?
#支持256色
set?t_Co=256?
sed
将/etc/selinux/config的SELINUX=enforcing,替换成SELINUX=disabled
# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
删除test.txt里包含hello的行
# sed '/hello/d' test.txt
[root@hd ~]# sed '/hello/d' test.txt
文本处理三剑客 grep awk sed