当前位置: 首页 > news >正文

【Linux】文本编辑器Vim

 0 前言

Linux中的所有内容以文件形式管理,在命令行下更改文件内容,常常会用到文本编辑器。 我们首选的文本编辑器是Vim,它是一个基于文本界面的编辑工具,使用简单且功能强大,更重要的是,Vim是所有Linux发行版本的默认文本编辑器

 1 Vim的工作模式

在使用Vim编辑文件前,我们先来了解一下它的三种工作模式:命令模式、输入模式和编辑模式,如下图所示。

  • 命令模式

使用Vim编辑文件时,默认处于命令模式。在此模式下,可以使用上、下、左、右键或者H、J、K、L命令进行光标移动,还可以对文件内容进行复制、粘贴、替换、删除等操作。

  • 输入模式

在输入模式下可以对文件执行写操作,类似在Windows的文档中输入内容。进入输入模式的方法是输入i、a、o等插入命令,编写完成后按Esc键即可返回命令模式。

  • 编辑模式

如果要保存、查找或者替换一些内容等,就需要进入编辑模式。编辑模式的进入方法为:在命令模式下按“:”键,Vim窗口的左下方会出现一个“:”符号,这时就可以输入相关的指令进行操作了。指令执行后会自动返回命令模式。

不论是自己忘了,还是不小心切换了模式,都可以直接按一次Esc键返回命令模式。如果你多按几次Esc键后听到了“嘀——”的声音,则代表你已经处于命令模式了。

 

 2 进入Vim

打开方法如下: [root@itxdl ~]# vim vi.test 刚打开文件时进入的是命令模式,此时文件的下方会显示文件的一些信息,包括文件名、文件的总行数和字符数,以及当前光标所在的位置等,此时可以使用插入命令进入输入模式对文件进行编辑

 3 退出vim

输入:wq

 4 Vim的基本应用

4.1 插入

从命令模式进入输入模式进行编辑,可以按下I、i、O、o、A、a等键来完成,不同的键只是光标所处的位置不同而已

i ——在当前光标所在位置插入随后输入的文本,光标后的文本相应向右移动
I ——在光标所在行的行首插入随后输入的文本,行首是该行的第一个非空白字符,相当于光标移动到行
首再执行i命令
a ——在当前光标所在位置之后插入随后输入的文本

A ——在光标所在行的行尾插入随后输入的文本,相当于光标移动到行尾再执行a命令
o ——在光标所在行的下面插入新的一行。光标停在空行的行首,等待输入文本
O ——在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本 

若光标所在位置为:

按下I;按下i;按下O

按下o;按下A;按下a

4.2 移动光标

H、j、k、l ——移动光标 

w ——移动光标到下一个单词的单词首
b ——移动光标到上一个单词的单词首
e ——移动光标到下一个单词的单词尾 

$ ——移动光标到行尾
0或^ ——移动光标到行首

其实,对于$命令来说,可以使用诸如“n$”之类的命令来将光标移至当前光标所在行的之后n行的行尾(n为数字);对于“0”命令来说却不可以,但可以用“n^”。

f字符 ——移动光标到第一个符合条件的字符处 如果在一行中需要将光标移动到当前行的某个特定字符处,则可以使用f命令。

例如,某行为“you can you up, no can no bb”,现在需要将光标移动到字符p处,则可以使用“fp”命令,这样光标就会迅速定位到字符p处。f命令有一个使用条件,即光标需在指定字符前。

 

% ——在匹配的括号间切换 

nG或:n ——移动光标到指定的行 可以直接在命令模式中输入“nG”(n为数字,G为大写)或“:n”(在编辑模式中输入数字)命令将光标快速地定位到指定行的行首。

若光标所在位置为:

按下$;按下3$

按下^;按下fi

按下%

4.3 删除

x ——删除光标所在字符
nx ——从光标所在位置向后删除n个字符,n为数字
dd ——删除整行。如果之后粘贴,则此命令的作用是剪切
ndd ——删除多行
dG ——删除从光标所在行到文件末尾的内容
D ——删除从光标所在处到这行行尾的内容
:起始行,终止行d ——删除指定范围的行

本来是这样,按下dd

 

4.4 复制

 yy或Y ——复制单行
nyy或nY ——复制多行
p ——粘贴到当前光标所在行下
P ——粘贴到当前光标所在行上 

本来是这样按下yy,再按下p 

本来是这样,按下5yy,再按下P

4.5 查找

/要查找的字符串 ——从光标所在行开始向下查找所需的字符串
?要查找的字符串 ——从光标所在行开始向上查找所需的字符串
:set ic ——查找时忽略大小写 

要查找一个以root为行首的行,则可以进行如下操作: /^root

要查找一个以root为行尾的行,则可以进行如下操作: /root$ 

4.6 替换

r ——替换光标所在处的字符
R ——从光标所在处开始替换字符,按Esc键结束 

:替换起始处,替换结束处 s/源字符串/替换的字符串/g
——替换范围内的字符串
:% s/源字符串/替换的字符串/g
——替换整篇文档的字符串 

本来是这样;按下r,再按下1

4.7 撤销

u——如果您误执⾏⼀个命令,可以⻢上按下「u」,回到上⼀个操作。按多次“u”可以执⾏
多次回复。
ctrl + r—— 撤销的恢复

 5 Vim的进阶应用

5.1 显示行号

在使⽤末⾏模式之前,请记住先按「ESC」键确定您已经处于命令模式,再按「:」冒号即可进⼊编辑模式。

在命令模式下输入“:set nu”即可显示每一行的行号。

如果想要取消行号,则再次输入“:set nonu”即可。

5.2 切换窗口

切换到另一个文件窗口,可以按“Ctrl+WW”快捷键。

5.3 区域复制

全部复制

如果想将一个文件的内容全部复制到另一个文件中,则可以输入命令

“:r被复制的文件名”,

即可将导入文件的全部内容复制到当前光标所在行下面。

打开一个空白文档,输入r,再输入“ vi.test”按下回车键

部分复制

将光标移动到需要复制的第一行处,然后按下“Ctrl+V”快捷键,这时底部状态栏出现“VISUAL BLOCK”,就可以使用上、下、左、右方向键进行区域的选取了;当全部选完后,按下“y”键,然后将光标移动到目标位置处,按下“p”键,即可完成区域复制

5.4 加注释

在指定范围行加“#”注释

可以使用:“起始行,终止行s/^/#/g”,

例如: :1,10s/^/#/g 表示在第1~10行行首加“#”注释。“^”意为行首。“g”表示执行替换时不询问确认。如果希望每行交互询问是否执行,则可将“g”改为“c”。

按下回车

取消连续行注释

可以使用:“起始行,终止行s/^#//g”,

例如: :1,10s/^#//g 意为将行首的“#”替换为空,即删除。

按下回车

添加“//”注释

要稍微麻烦一些,:“起始行,终止行s /^/\/\//g”,因为“/”前面需要加转义字符“\”,所以写出来比较奇特,

例如: :1,5s /^/\/\//g 表示在第1~5行行首加“//”注释。

按下回车

定义快捷键

:map 快捷键 执行命令 ——定义快捷键

如定义快捷键“Ctrl+P”为在行首添加“#”注释,可以执行“:map ^P I#<Esc>”。其中“^P”为定义快捷键“Ctrl+P”

注意:必须同时按“Ctrl+V+P”快捷键生成“^P”方可有效,或先按“Ctrl+V”再按“Ctrl+P”也可以,直接输入“^P”是无效的。

在后面两行分别按ctrl+P

设置成功后,直接在任意需要注释的行上按“Ctrl+P”快捷键,就会自动在行首加上“#”注释。取消此快捷键定义,输入“:unmap ^P”即可。

访问shell

在Vim中,可以在编辑模式下用“!”命令来访问Linux的Shell以进行操作。命令格式如下:

:! 命令 直接在“!”后面跟所要执行的命令即可,这样可以在系统中直接查看命令的执行结果。例如,在编辑过程中想查看一下/etc/passwd文件的权限,则可以使用如下命令: :! ls -l /etc/passwd 执行后,会在当前编辑文件中显示命令的执行结果,完毕后会提示用户按回车键返回编辑状态

宏记录

有时候需要对某些行进行相同的改动,如果逐一对每行进行修改则比较麻烦。Vim提供了非常优秀的宏记录功能

(1)在命令模式中将光标移动到liudehua.h行的行首,按下“qx”键,其中“q”代表宏记录,“x”代表给宏起的名,可以是任意字符。

这时候可以发现,在屏幕左下角会出现“recording”字样

 

(2)将第一行设置成想要的第一行所示的形式。当修改完成后,接Esc键回到命令模式,再按下“q”键退出宏记录模式。 

(3)当宏记录完成后,就可以执行它了。执行的方法是将光标移动到需要进行修改的行,然后执行“@宏名”命令即可。如本例就可以将光标移动到第二行行首,然后执行“@x”命令,其他的行以此类推,最后得到如上图右的效果。

 6 小结

学习Vim,首先需要掌握Vim的工作模式,其次需要掌握Vim的插入、移动光标、复制粘贴、剪切、删除、搜索、替换、撤销、保存退出等基本应用,我们在后续学习中会经常使用。

进阶应用,重点掌握Vim配置文件.vimrc中的各项设置,包括各种使用的小技巧,如多窗口编辑、区域复制、定义快捷键、与Shell交互、宏记录、ab命令,其中很多操作可以把基本应用中的命令融会贯通。

其实绝大多数Vim命令都是英文单词的缩写,如w for write、q for quit、p for paste、set nu for set number、syn on for syntax on……可以联想记忆。

 

 

 

 

http://www.dtcms.com/a/394880.html

相关文章:

  • flink1.18下游配置多个sink
  • 如何删除 MySQL 数据库中的所有数据表 ?
  • win10加域后,控制面板中的,internet 时间就没有了
  • Unity移动平台笔记
  • 【图像算法 - 27】基于YOLOv12与OpenCV的无人机智能检测系统
  • html css js网页制作成品——圣罗兰护肤html+css+js 4页附源码
  • 21届-3年-Java面经-华为od
  • 计算机视觉(opencv)实战三十一——CascadeClassifier 详解与实战人脸检测
  • 计算机视觉:基于YOLOv11 实例分割与OpenCV 在 Java 中的实现图像实例分割
  • 【实战】Spring Boot 3.x整合Redis:注解式缓存与分布式锁最佳实践
  • 密钥耳语-一个轻量、易备份、支持命令行与图形界面的口令派生加密工具 具有 CLI 和 GUI 的轻量级密码衍生加密工具
  • AI重塑流量背后,微软广告打造下一代广告生态
  • 低代码数字化时代的开发新范式
  • 微信小程序“无损去水印精灵”技术解析大纲
  • 少儿舞蹈小程序(18)订单确认
  • Uniapp X 打包抖音小程序教程
  • uni-app中实现在input的placeholder中添加图标
  • vue面试题集锦
  • 基于Springboot+UniApp+Ai实现模拟面试小工具十二:模拟面试功能实现
  • 基于Springboot+UniApp+Ai实现模拟面试小工具十一:主页功能及简历上传功能实现
  • BGP选路“十一步”法则
  • MITRE ATLAS 对抗威胁矩阵与 LLM 安全
  • 第5章:技术深度与广度:构筑你的核心壁垒(1)
  • 洞察未来:Temporal.io 如何赋能复杂模拟引擎的韧性与智能
  • Android 实例 - Android 圆形蒙版(Android 圆形蒙版实现、圆形蒙版解读)
  • PyCharm 在 Linux 上的安装指南
  • Linux 入门:开启开源世界的大门
  • ​​[硬件电路-321]:数字电路的两大家族CMOS(来源于MOS三极管管)与TTL(来源于BJT三极管)
  • 【GitHub每日速递 250922】开源 AI 搜索引擎 Perplexica:本地大模型 + 多模式搜索,免费又强大!
  • CCF-CSP-S 2021 初赛解析