【VIM编辑功能总结】
【一】Vim功能介绍
【1】什么是VIM
-
vi和vim是Linux下的一个文本编辑工具
-
VIM(Vi IMproved)是Linux下的一个文本编辑工具,相当于Windows系统下的记事本或Word文档。
-
它是Vi编辑器的增强版。
【2】为什么要使用VIM?
- 因为Linux系统一切皆为文件,而我们工作最多的就是修改某个服务的配置(其实就是修改文件内容)。
- 也就是说如果没有vi/vim,我们很多工作都无法完成。
- PS: vim是学习linux最重要的命令之一
【3】VI与VIM有什么区别?
- vi和vim都是文本编辑器,只不过vim是vi的增强版,比vi多了语法高亮显示,其他编辑功能几乎无差,所以使用vi还是vim取决个人习惯。(相当于windows系统下的文本编辑软件“记事本”与”notepad++”的区别)
- PS:因为前期最小化安装CentOS系统,所以默认情况下没有vim命令
- 但可以使用yum install vim -y安装
【4】如何使用VIM编辑器?
- 在使用VIM之前,我们需要先介绍下VIM的三种模式:
- 普通模式、编辑模式、命令模式
- 每种模式分别支持多种不同的快捷键,要想高效率地操作文本,就必须先搞清这三种模式的操作区别以及模式之间的切换方法。
【5】VIM模式三种模式介绍
1.普通模式:
- 主要是控制光标移动,可对文本进行复制、粘贴、删除等工作。
- 使用vim filename 编辑一个文件时,一进入该文件就是普通模式了。
- 在这个模式下,可以进行光标移动、复制、删除、粘贴操作。
2.编辑模式:
- 主要进行文本内容编辑和修改
- 从普通模式进入编辑模式,只需你按一个键即可(i, I, a, A, o, O)
- 当进入编辑模式时,会在屏幕的最下一行会出现 “INSERT”标记
- 从编辑模式回到普通模式只需要按键盘左上方的 ESC 键即可。
3.末行模式:
- 主要用于保存或退出文本。
- 在普通模式下,输入 “:” 或者 “/“ 即可进入命令模式。
- 在命令该模式下,可进行的操作有,显示行号、搜索、替换、保存、退出。
【6】vim编辑打开文件整体流程
- 1.默认打开文件处于普通模式
- 2.从普通模式切换至编辑模式需要使用a、i、o
- 3.编辑模式修改完毕后需要先使用ECS返回普通模式
- 4.在普通模式输入”:”或”/“进入命令模式,可实现文件的保存与退出。
- PS: 在vim中,无法直接从编辑模式切换到命令模式。
【二】VIM模式使用
【1】普通模式
(1)命令光标跳转
G
:跳转至文件末尾gg
:跳转至文件开头Ngg
:跳转至当前文件内的第N行$
:跳转至当前行的末尾^
或者0
:跳转至当前行的开头
(2)文件内容较多
ctrl+f
:向下翻页(适用于行数较多的情况)ctrl+b
:向上翻页
(3)复制与粘贴
yy
:复制当前行Nyy
:复制当前行及往下的N-1行p
(小写):粘贴至当前光标下一行P
(大写):粘贴至当前光标上一行
(4)删除、剪贴、撤销
dd
:删除当前行Ndd
:删除当前行及往下的N-1行dG
:删除当前光标后的所有行D
:删除当前光标及之后的内容x
:删除当前光标后的字符X
:删除当前光标前的字符u
:撤销上一次操作
(5)替换
r
:替换当前光标标记的单个字符R
:进入REPLACE模式,连续替换(按ESC键结束)
【2】编辑模式(从普通模式进入到编辑模式)
i
:在当前光标位置前插入a
:在当前光标位置后追加o
:在当前光标下插入一行空白内容I
:在当前行首插入A
:在当前行尾追加O
:在当前行上方插入一行空白内容
【3】命令模式(主要用于搜索/保存/退出文件)
(1)文件保存与退出
:w
:保存当前状态:w!
:强制保存当前状态:q
:退出当前文档(需要先保存):q!
:强制退出文档(不保存):wq
:先保存再退出:wq!
:强制保存并退出:x
:先保存再退出ZZ
:保存并退出文件(快捷方式,按Shift+zz)
(2)文件内容查找
/string
:搜索指定内容的字符串n
:顺序向下查找匹配内容N
:顺序向上查找匹配内容
(3)文件内容替换
- 这些命令用于在Vim编辑器中进行文件内容的替换操作。
- 替换命令的基本语法是
:[range]s/pattern/replacement/[flags]
- 其中
pattern
是要查找的内容replacement
是要替换成的内容flags
是可选的标志。
- 示例: 假设有以下文本文件内容:
- 执行命令
:1,5s#sbin#test#g
后,文件变为:
- 执行命令
:1,5s#sbin#test#
后,文件变为:
- 执行命令
:%s#sbin#test#g
后,文件变为:
- 执行命令
:%s#sbin#test#gc
后,将逐个匹配替换,提示是否替换:
- 在提示中
- 可以选择替换(y)
- 不替换并进入下一个匹配(n)
- 替换所有剩余的匹配(a)
- 结束替换过程(q)
- 向后查找匹配(l)
- 向前查找匹配(^E)
- 显示剩余的匹配(^Y)
(4)文件内容另存
- 这个命令用于将当前编辑的文件内容另存为指定的文件。
- 使用
:w
命令可以将文件保存,后面跟上文件路径即可另存为指定路径的文件。- 示例:
- 假设当前正在编辑一个名为
example.txt
的文件,并且想将其另存为/root/test.txt
- 执行命令
:w /root/test.txt
即可将文件内容保存到/root/test.txt
。
(5)文件内容读入
- 这些命令用于将指定文件的内容读入到当前编辑的文件中。
- 示例:
- 假设当前正在编辑一个文件,并且要在当前光标所在行的下面插入
/etc/hosts
文件的内容 - 执行命令
:r /etc/hosts
即可实现。
- 假设当前正在编辑一个文件,并且要在当前光标所在行的下面插入
- 假设当前正在编辑一个文件,并且要将
/etc/hosts
文件的内容插入到当前文件的第五行下面- 执行命令
:5r /etc/hosts
即可实现。
- 执行命令
【4】视图模式(从普通模式进入视图模式),主要进行批量操作
(1)ctrl+v 进入可视块模式,选中需要注释的行
- 1.插入:按shift+i进入编辑模式,输入#,结束按ESC键
- 2.删除:选中内容后,按x或者d键删除
- 3.替换:选中需要替换的内容, 按下r键,然后输入替换后的内容
(2)shift+v 进入可视行模式,选中整行内容
- 1.复制:选中行内容后按y键及可复制。
- 2.删除:选中行内容后按d键删除。
【三】VIM扩展知识
【1】环境变量临时生效
- 显示行号:
:set nu
- 忽略大小写,在搜索时非常有用:
:set ic
- 自动缩进:
:set ai
- 显示制表符、空行和Tab键:
:set list
- 取消临时设定的环境变量,例如取消行号设置:
:set nonu
【2】环境变量永久生效。
- ~/.vimrc 个人环境变量(优先级高)
- /etc/vimrc 全局环境变量
【3】如何同时编辑多个文件
在Vim中,你可以使用以下命令来同时编辑多个文件:
- 水平分割打开文件:
vim -o file1 file2
这会将 file1 和 file2 水平分割在不同的窗口中,并同时编辑这两个文件。- 垂直分割打开文件:
vim -O file1 file2
这会将 file1 和 file2 垂直分割在不同的窗口中,并同时编辑这两个文件。在打开多个文件后,你可以使用
ctrl+ww
快捷键在不同的文件之间进行切换。例如,要同时编辑 file1 和 file2,可以在终端中输入以下命令:
【4】相同文件之间差异对比
- 相同文件之间差异对比,通常用于对比修改前后差异
文件对比:
diff
- 以 Vim 方式打开两个文件并进行差异对比:
vimdiff
文件对比:
diff
- 可以使用
diff
命令进行文件的对比。- 该命令会显示出两个文件之间的差异,并标识出不同的内容。
以 Vim 方式打开两个文件并进行差异对比:
vimdiff
- 使用
vimdiff
命令可以以 Vim 的方式打开两个文件进行差异对比。- Vimdiff 会高亮显示不同的内容,并方便地进行修改和合并操作。
例如,要对比文件 file1 和 file2 的差异,可以在终端中输入以下命令:
【5】非正常退出后处理.swp文件
- 如果在Vim中发生非正常退出(例如使用
ctrl+z
挂起或强制退出终端),可能会留下一个名为.filename.swp
的临时文件,其中filename
是你编辑的文件的名称。 - 为了解决此问题,你可以执行以下命令来删除同名的
.swp
文件:
- 通过运行上述命令,你可以删除产生的
.swp
文件,以避免后续的冲突或错误。- 请记住,
.swp
文件通常用于在 Vim 正常退出前自动保存未保存的更改,因此在非正常退出后可以使用.swp
文件来恢复丢失的数据。
【四】VIM练习示例
【1】练习一
1.将/etc/passwd 复制到/root/目录下,并重命名为test.txt
2.用vim打开test.txt并显示行号
3.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻两页
4.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
5.搜索文件中出现的 root 并数一下一共出现多少个,不区分大小写搜索
6.把从第一行到第三行出现的root 替换成–od–,然后还原上一步操作
8.把整个文件中所有的root替换成–od–
9.把光标移动到20行,删除本行,还原上一步操作
10.删除第19行,还原上一步操作
11.删除从5行到10行的所有内容,还原上一步操作
12.复制2行并粘贴到11行下面,还原上一步操作(按两次u)
13.复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)
14.把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
15.光标移动到首行,把/sbin/nologin改成/bin/bash
16.在第一行下面插入新的一行,并输入”# Hello!”
17.保存文档并退出
【2】练习示例2
(1)文件
(2)题目
1.使用vim打开proxy.conf文件
2.修改Listen为listen小写,并将8080修改为80
3.修改ServerName为server_name小写。
4.修改vim.OldboyEDU.com为vim.oldboy.com
5.在server_name行下插入一行 root /code;
5.复制5-14行的内容,然后将其粘贴到14行下面
6.删除与proxy_set_header相关的两行全部删除
7.如上操作完成后,在13-20行前面加上#号
8.删除21-23的行,然后保存当前文件
【3】解析
(1)练习一
1.将/etc/passwd 复制到/root/目录下,并重命名为test.txt
- 在上述命令中,
cp
是用于复制文件的命令,/etc/passwd
是要复制的源文件路径,/root/test.txt
是复制后的目标文件路径。 - 通过执行此命令,
/etc/passwd
文件将被复制到/root/
目录下,并重命名为test.txt
。
2.用vim打开test.txt并显示行号
- 上述命令中,
vim
是打开 Vim 编辑器的命令,-N
参数用于显示行号,/root/test.txt
是要打开的文件路径。 - 通过执行此命令,使用 Vim 打开了
test.txt
文件,并显示了行号。
3.分别向下、向右、向左、向右移动5个字符,分别向下、向上翻两页
使用下列命令和操作实现:
- 向下移动5行:按下
5j
。 - 向右移动5个字符:按下
5l
。 - 向左移动5个字符:按下
5h
。 - 向右移动5个字符:按下
5l
。 - 向下翻两页:按下
2Ctrl + D
。 - 向上翻两页:按下
2Ctrl + U
。
4.把光标移动到第10行,让光标移动到行末,再移动到行首,移动到test.txt文件的最后一行,移动到文件的首行
使用下列命令和操作实现:
- 移动到第10行:按下
10G
或:10
。 - 移动到行末:按下
$
。 - 移动到行首:按下
0
。 - 移动到文件的最后一行:按下
G
或:$
。 - 移动到文件的首行:按下
gg
或:1
。
5.搜索文件中出现的 root 并数一下一共出现多少个,不区分大小写搜索
- 上述命令中,
grep
是用于在文件中搜索匹配模式的命令,-i
参数表示不区分大小写,-o
参数表示只输出匹配到的部分,'root'
是要搜索的模式,/root/test.txt
是要搜索的文件路径,wc -l
用于计算匹配到的行数。 - 通过执行此命令,可以搜索文件中出现的 "root" 并输出该单词出现的总次数。
6.把从第一行到第三行出现的root 替换成–od–,然后还原上一步操作
-
上述命令中,
sed
是用于进行文本替换的流编辑器,-i
参数表示直接修改源文件,'1,3 s/root/-od-/'
是指在第一行到第三行之间将所有的 "root" 替换为 "-od-",/root/test.txt
是要进行替换的文件路径。通过执行此命令,可以实现替换操作。 -
如果需要还原上一步操作,可以使用 Git 进行版本控制或者使用 Vim 的撤销命令
u
。
8.把整个文件中所有的 root 替换成–od–
- 上述命令中,
s/root/-od-/g
指示将文件中所有的 "root" 替换为 "-od-",/root/test.txt
是要进行替换的文件路径。 - 通过执行此命令,文件中的所有 "root" 都会被替换为 "-od-"。
9.把光标移动到20行,删除本行,还原上一步操作
先移动到第20行再删除本行:
- 移动到第20行:按下
20G
或:20
。 - 删除本行:按下
dd
。
要还原上一步操作,可以使用 Vim 的撤销命令 u
。
10.删除第19行,还原上一步操作
-
上述命令中,
d
是sed
命令的删除操作符,19d
表示删除第19行,/root/test.txt
是要进行删除操作的文件路径。 -
通过执行此命令,可以删除第19行。
-
要还原上一步操作,可以使用 Git 进行版本控制或者使用 Vim 的撤销命令
u
。
11.删除从5行到10行的所有内容,还原上一步操作
- 上述命令中,
5,10d
表示删除从第5行到第10行的所有内容,/root/test.txt
是要进行删除操作的文件路径。 - 通过执行此命令,可以删除指定行数范围内的内容。
- 复制2行并粘贴到11行下面,还原上一步操作(按两次u)
- 命令:yy;p;p
- 解释:yy命令用于复制当前行,p命令用于在当前行的下方粘贴复制的内容。因此,yy;p;p表示将当前行复制两次并粘贴到当前行的下方。
- 案例:
还原上一步操作的方法是按两次撤销命令(通常是按下u键),这将撤销上述复制和粘贴操作。
- 复制从11行到15行的内容并粘贴到8行上面,还原上一步操作(按两次u)
- 命令:11,15y;8p
- 解释:11,15y命令用于复制从第11行到第15行的内容,8p命令用于在第8行的上方粘贴复制的内容。因此,11,15y;8p表示将第11行到第15行的内容复制并粘贴到第8行的上方。
- 案例:
还原上一步操作的方法是按两次撤销命令(通常是按下u键),这将撤销上述复制和粘贴操作。
- 把13行到18行的内容移动文件的尾部,还原上一步操作(按两次u)
- 命令:13,18m$
- 解释:13,18m$命令用于将第13行到第18行的内容移动到文件的尾部。其中,m表示移动行的命令,$表示文件的尾部。
- 案例:
- 还原上一步操作的方法是按两次撤销命令(通常是按下u键),这将撤销上述移动操作。
- 光标移动到首行,把/sbin/nologin改成/bin/bash
- 命令:gg/\sbin/nologin/s///bin/bash
- 解释:gg命令用于将光标移动到首行,/\sbin/nologin/用于搜索第一个出现的字符串"/sbin/nologin",s命令用于将搜索到的字符串替换为"/bin/bash"。
- 案例:
- 在第一行下面插入新的一行,并输入”# Hello!”
- 命令::2put!="# Hello!"
- 解释::2put!命令用于在当前行的下方插入文本,"# Hello!"表示要插入的文本内容。
- 案例:
- 保存文档并退出
- 命令::wq
- 解释::wq命令用于保存对文档的修改并退出Vi编辑器。
- 案例:
(2)练习二
- 使用vim打开proxy.conf文件:
- 修改Listen为listen小写,并将8080修改为80:
- 修改ServerName为server_name小写,并将vim.OldboyEDU.com修改为vim.oldboy.com:
- 在server_name行下插入一行root /code;:
- 复制5-14行的内容,然后将其粘贴到14行下面:
- 删除与proxy_set_header相关的两行全部删除:
- 如上操作完成后,在13-20行前面加上#号:
- 删除21-23的行,然后保存当前文件:
__EOF__

本文链接:https://www.cnblogs.com/dream-ze/p/17647815.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:Chimengmeng,转载请注明原文链接:https://www.cnblogs.com/dream-ze/p/17647815.html