vi命令
三种工作模式:
1、命令模式:输入任何一个键都当成编辑命令;
2、输入模式:键盘中的任意一个键都当成文本内容;
3、末行模式:键盘中的任意一个键都当成文本管理命令;
退出输入模式:Esc
命令模式进入输入模式:
i:插入光标前一个字符;
I:插入行首;
a:插入光标后的一个字符;
A:插入行末;
o:向下新开一行,插入行首;
O:向上新开一行,插入行首;
命令模式进入末行模式按冒号:
末行模式进入命令模式:两次ESC。
保存退出:
1、命令模式下:ZZ
2、末行模式下:
:wq 保存退出
:x保存退出;
:q!强制不保存退出
:q 退出
命令模式下光标的移动:
K:上
J:下
H:左
L:右
G:光标到末尾位置;
gg:光标移动到文件开头;
nG:移动到指定行n,如4G,第4行;
w/W:单词为单位移动
0:光标移动到行首;
L:光标移到屏幕最后一行行首;
^:光标移到行首有内容的位置;
$:光标移到行尾;
M:移到中间行;
经验:命令模式和输入模式熟练切换,不推荐使用上下左右方向键。
编辑的时候光标直接在第几行:
[root@localhost home]# vim hello.txt +10
显示行号:
[zyj@localhost ~]$ 1 hello world 2 :set number
修改配置文件,设置行号,在用户的家目录下修改,~代表用户家目录。
说明:修改配置文件优先修改用户配置文件,不推荐修改系统配置文件;
[zyj@localhost ~]$ vim ~/.vimrc //没有的时候创建这个文件 一定要加点。~代表用户家目录。 set number
删除命令:
x:删除光标后一个字符,相当与Del
X:删除光标前一个字符,相当于Backspace
dd:删除光标所在的行,
ndd:删除指定的行数
D:删除光标后本行所有内容,包含光标所在字符
d0:删除光标前本行所有内容,不包含光标所在字符
dw:删除光标开始位置的字,包含光标所在字符
撤销命令:
u:一步一步撤销
ctr+r:反撤销
重复执行上一条命令:点 .
文本移动:
按v进入视图模式后,按上下键选中目标行后,通过<< >>键对文本进行左右移动。
修改tab键设置:
[zyj@localhost home]$ vi ~/.vimrc
set ts=4
复制粘贴
yy:复制当前行;
nyy:复制从光标行开始的n行;
yw:复制一个单词
进入末行模式复制:
:30,40y 复制30到40行;
:.,$-3y 复制光标所在行到倒数第三行,其中点代表光标所在行,$代表最后一行,$-3表示倒数第三行。
:1,.-3y 第一行到光标所在的前三行;
:1,.+3y 第一行到光标所在的后三行;
将上述y替换为d,则为删除选用的行;
p:粘贴
查找:在编辑模式下
/关键词,从光标行往下找。
?关键词 光标所在行往上找
循环查找,因此使用/关键字即可。
举例:/after 查找after
n:下一个
N:上一个
:%s/abc/123/g 光标所在行的abc替换为123
替换
r:替换当前字符
R:替换当前行光标后的字符
查找替换:末行模式
:%s/after/before/gi %表示整个文件,s表示查找替换,/为隔开符 g表述全局 i表示忽略大小写。
25 if [ -x /usr/bin/id ]; then 26 if [ -z "$EUID" ]; then 27 # ksh workaround 28 EUID=`/usr/bin/id -u` 29 UID=`/usr/bin/id -ru` 30 fi 31 USER="`/usr/bin/id -un`" 32 LOGNAME=$USER 33 MAIL="/var/spool/mail/$USER" 34 fi 35 36 # Path manipulation 37 if [ "$EUID" = "0" ]; then 38 pathmunge /sbin 39 pathmunge /usr/sbin 40 pathmunge /usr/local/sbin 41 else 42 pathmunge /usr/local/sbin before 43 pathmunge /usr/sbin before 44 pathmunge /sbin before :%s/before/after/gi //整个文件中的before替换为after并忽略大小写
:1,10s/abc/123/g 第一行到第十行替换。
36 # Path manipulation 37 if [ "$EUID" = "0" ]; then 38 pathmunge /sbin 39 pathmunge /usr/sbin 40 pathmunge /usr/local/sbin 41 else 42 pathmunge /usr/local/sbin after 43 pathmunge /usr/sbin after 44 pathmunge /sbin after :36,44s/after/before/g //36行到44行中的after替换为before
末行模式使用!执行命令。
36 # Path manipulation 37 if [ "$EUID" = "0" ]; then 38 pathmunge /sbin 39 pathmunge /usr/sbin 40 pathmunge /usr/local/sbin 41 else 42 pathmunge /usr/local/sbin before 43 pathmunge /usr/sbin before 44 pathmunge /sbin beforE 45 PATH=/etc/p //不确定是否存在此文件时,可以在末行模式下使用!加命令查看是否存在此文件。 :!ls /etc/p //末行模式下使用!后加命令,实现不退出vi的情况下进行操作。 [No write since last change] /bin/bash: ls/etc/p: No such file or directory shell returned 127 Press ENTER or type command to continue
小技巧:
[zyj@localhost ~]$ type ls ls is aliased to `ls --color=auto' [zyj@localhost ~]$ ls -r /home //在指令前面加上可以忽略alias的默认选项 zyj x hello.txt [zyj@localhost ~]$ ls /home hello.txt x zyj [zyj@localhost ~]$ date -s "20180417 21:19:19" //通过一条命令修改系统时间 date: cannot set date: Operation not permitted Tue Apr 17 21:19:19 PDT 2018