一、Vi/Vim编辑器概述

vi是 Linux 和Unix系统内置的不可或缺的文本编辑命令,VIM 是 vi 的加强版本,兼容 vi 的所有指令。

vi/vim不仅能编辑文本文件,而且还具有 shell 编程功能,编辑时会用不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性,提高了工作效率。

vi是Visual interface 的简称,因为它是由POSIX标准指定的,所以绝大多数的linux/unix都遵循此标准,默认都会安装它。红帽系统中默认会安装vim-minimal软件包,这是一个轻量化的版本,可以用vi filename进行文件编辑。如果我们需要一个更完整功能、一个在线帮助系统和一个教程程序,我们应该安装vim-enhanced软件包,可以用vim filename进行文本编辑。

二、VIM四种模式

vi/vim 四种模式:命令模式/普通模式(command mode)、输入模式/编辑模式(input mode)、末行模式/底线命令模式(last line mode)和可视模式(visual mode)

命令模式(Command mode)

vim filename命令执行后,默认处于命令模式,在此模式下,可以使用上、下、左、右键或者KJHL键进行光标移动,还可以对文件内容进行复制、粘贴、替换、删除等操作。

kjhl助记(k=kick up,j=jump down,h=hand back,l=leap forward)

输入模式(Insert mode)

vim filename命令模式打开文件后,文件是处于不可自由编辑状态,输入“i”,进入编辑模式,键入的所有文本将变为文件内容。键盘的上下左右箭头可以移动光标到指定位置,编写完成后,按Esc键即可返回命令模式。

未行模式(Last line mode)

在命令模式下(输入模式,按Esc可转命令模式),输入”:”,vim窗口的左下方会出现一个”:”符号,输入wq(保存并退出),或输入q!(不保存退出)

可视模式(visual mode)

在命令模式下,输入v键,就进入到可视模式,可在文本内容中选择多个字符进行文本操作。使用Shift+v也就是说输入大写V,选择多行(行模式),使用ctrl+v可以选择文本块(块模式)。用v/Shift+v/ctrl+v或Esc键可以退出可视模式。

各模式之间的转换示意图如下

image-20240309095957321

三、命令格式

vim [选项] 文件

vim 文件名 不存在,则为新建;存在 ,则为修改文件

 

四、VIM命令模式

命令模式/一般模式(command mode)

维度 命令 说明
光标定位类
G 将光标跳到最后一行
1G 将光标跳到第一行
$ 将光标跳到本行行尾
0|^ 将光标跳到本行行首
gg 将光标跳转到文件顶端
字符搜索类
/abcd 将向下查找字符串abcd所在位置,
N或n 按n,继续往前查找,按N,往回找 n~=next
ctrl+f 向下翻页
ctrl+b 往上翻页
编辑类
x 删除光标处的单个字符
dd 删除光标所在的行,3dd表示从当前行向后2行,总计删除3行
yy 复制当前行到缓冲区,若有3行,按3yy
p 将缓冲区的内容粘贴到光标所在行的上/下行 p(小写),光标的下一行 P(大写),光标的上一行
u 撤销最近的编辑,小写u,按一次,撤销一次 大写U,按一次,撤销当前行所做的变更
r 替换当前光标标记的单个字符

五、VIM编辑模式

插入模式/(insert mode)

维度 命令 说明
i 光标所在处前面开始插入
I 光标跳到本行开关,并进入插入模式
a 光标所在处后面开始插入
A 光标跳到行尾,在行尾增加
o 从光标所在行下面新插入一行
O 从光标所在行上面新插入一行

六、未行模式

维度 命令 说明
:wq 保存后退出
:w! 强制保存
:q! 不保存退出
:wq! 强制保存并退出
ZZ 若修改,保存后退出(shift+zz) 有点像快捷方式
:set nu 显示行号
:set nonu 取消显示行号
:%s/sbin/bin/g 替换文本文件中所有”sbin“为“bin”
:数字 快速跳到指定的行

七、可视模式

可视模式(visual mode)

命令字符 说明
o 重新定义光标起始位置
x或d 剪切或删除字符,方向键配合进行操作,指令操作完会自动退回到普通模式
y或Y 复制,y只复制字符,Y复制选定行,方向键配合进行操作,指令操作完会自动退回到普通模式
p或P 在当前位置粘贴剪贴板里内容,p粘在光标后面,P粘在光标前面
r 所有选中字符替换为新字符,方向键配合进行操作
c 修改选中的字符,方向键配合进行操作
I 在选中文本前插入
A 在选中文本后插入
>> 按2次,文本向右移动
<< 按2次,文本向左移动,缩进

八、VI编辑使用

普通编辑模式,修改目标文件httpd.conf,要求:

  1. 找到”Listen 80“行,把80修改为8080

  2. 找到”User apache“行,把apache修改为www

  3. 找到”Group apache”行,把apache修改为www

  4. 找到”DocumentRoot “/var/www/html”行,把/var/www/html修改为/data/html

  5. 找到”<Directory “/var/www/html”>”行,把/var/www/html修改为/data/html

  6. 复制355行内容,把它粘贴到文件的最后一行

  7. 复制337行(含)之后的三行内容,把它们粘贴到文件的355行的上一行处

  8. 删除该文件中含有”memory-mapping“字符的行

  9. 保存文件

[myansible@rhel92-236 liuguohua.com]$ cat httpd.conf 
#
# This is the main Apache HTTP server configuration file.  It contains the
# configuration directives that give the server its instructions.
# See <URL:https://www.liuguohua.com/docs/2.4/> for detailed information.
...

#Listen 12.34.56.78:80
Listen 80

...
User apache
Group apache

# 'Main' server configuration

...
DocumentRoot "/var/www/html"

#
# Relax access to content within /var/www.
#
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>

# Further relax access to the default document root:
<Directory "/var/www/html">

...
# Some examples:
#ErrorDocument 500 "The server made a boo boo."
#ErrorDocument 404 /missing.html
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
#ErrorDocument 402 http://www.example.com/subscription_info.html
#

#
# EnableMMAP and EnableSendfile: On systems that support it, 
# memory-mapping or the sendfile syscall may be used to deliver
# files.  This usually improves server performance, but must
# be turned off when serving from networked-mounted 
# filesystems or if support for these functions is otherwise
# broken on your system.
# Defaults if commented: EnableMMAP On, EnableSendfile Off
#
#EnableMMAP off
EnableSendfile on

# Supplemental configuration
#
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf

底线命令行模式

#保存
:w

#保存
:x

#退出
:q

#保存并退出
:wq

#强制保存并退出
:wq!

#保存为另外一个文件
:w newfilename

#不保存
:q!

#放弃所有修改
:e!

可视模式练习

用vim打开/opt/test-shell-c.sh文件,在所有行前面加#号

# vim /opt/test-shell-c.sh
#!/bin/bash

for i in {1..5000000}
do
  echo $i
  echo "$i" > ./qw/txt${i}.txt 
done

操作步骤如下:
(1) Ctrl + v进入块选择模式
(2) 向上或向下移动光标选择多行
(3) 移动光标到行的起始位置(或输入指令^)
(4) 然后按大写 I进入行首插入模式
(5) 插入注释符
(6) 按Esc回到命令模式

用vim打开/opt/test-shell-c.sh文件,把echo字符更换为print

# vim /opt/test-shell-c.sh
#!/bin/bash

for i in {1..5000000}
do
  echo $i
  echo "$i" > ./qw/txt${i}.txt 
done

操作步骤如下:
(1) Ctrl + v进入块选择模式
(2) 向上或向下移动光标到第5行的echo字符中的e处,按o键,重新定义
(3) 将光标移动到第6行的echo字符的o处
(4) 然后按c进入字符更换模式
(5) 输入print
(6) 按Esc回到命令模式

九、vi异常中止处理

在使用vi/vim时,经常会碰到网络不通,机器宕机等意外情况,造成编辑异常中断,如果我们再重新用vi filename格式,编辑同一个文件时,系统会给出如下提示,我们输入’r’键,就可以恢复该文件的编辑,编辑完,视情况保存。

再次编辑同一个文件,也可用‘ vim -r haha’格式,进入后,无须再按’r’键。

确认文件没有问题后,我们需要用’ls -l -a’命令,查找一下文件所在目录下,存在的隐藏临时交换文件,以.开头,以swp结尾,把这个文件删除,否则后续再次编辑该文件,还会报出提示信息。

myansible@rhel92-236 liuguohua.com]$ ls -al .
total 32
drwxr-xr-x.  2 myansible myansible    64 Sep 22 09:44 .
drwxrwxrwt. 14 root      root       4096 Sep 22 09:38 ..
-rw-------.  1 myansible myansible 12288 Sep 22 09:37 .haha.swp
-rw-r--r--.  1 myansible myansible 12005 Sep 14 20:20 httpd.conf
-rw-r--r--.  1 myansible myansible   107 Sep 14 20:18 test-shell-a.sh


myansible@rhel92-236 liuguohua.com]$ rm .haha.swp
声明:欢迎大家光临本站,学习IT运维技术,转载本站内容,请注明内容出处”来源刘国华教育“。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。