vi命令使用

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
原文地址:https://www.cnblogs.com/zhaoyujiao/p/8848638.html