Linux vim 详解
Linux vim 编辑工具介绍
在linux上我们编辑脚本的时候都绕不过vim工具,vim内设的各种功能是vim具有非常强大的编辑能力,让我们快速的完成各种编辑任务。
vim和vi 区别
vi是vim的基础版本。vim是vi的升级强化版本。
vi的安装包是: vim-minimal-7.4.629-7.el7.x86_64
vim 模式
![](https://img2022.cnblogs.com/blog/1433835/202207/1433835-20220726214020313-1660180351.gif)
vim 光标的移动(motion)
假定: 当前文本内容。 Monday Tuesday Wednesday Thursday Friday Saturday w命令实验(w移动到下一个字符串的起始位置,当前字符串第一个字符被排除) 假如当前光标在Friday F处,按下w键后,F是当前字符串的第一个字符串,会被排除掉,所以光标会移动到下一个字符串Saturday首字母处 假如当前光标在Saturday S处,按下w键后,由于Saturday已经是本文将的最后一个字符串,光标会移动到Saturday文件末尾y的位置 假如当前光标在Wednesday W处,按下w键后,Wednesday 是本行的最后一个字符串,光标会移动到下一空行起始位置。 e命令实验(e移动到当前字符串的末尾位置,当前字符串最后字符算在内,如果已经处于末尾,会跳转到下一个字符串的末尾) 假如当前位置在Friday F处,按下e键后,当前字符串是Friday,末尾的y不会被排除掉,光标会移动到Friday的y的位置。 假如当前光标在Wednesday y处,按下e键后,由于e命令不会停止空行上,所以光标会移动到Thursday 的y的位置上。 b命令实验 (b移动到当前字符串的起始位置,当前字符串首字符算在内,如果已经处于起始位置,会跳转到下一个字符串的起始位置) 假如当前位置在Friday y处,按下b键后,当前光标处于是Friday的末尾y的位置,所以光标会移动到Friday的y的位置。 假如当前位置在Thursday T处,按下b键后,当前光标处于是Thursday 的起始的位置,所以光标会移动到上一空行起始的位置。 ge命令实验 (ge命令会跳转到前一个字符的末尾位置) 假如当前位置在Friday r处,按下ge键后,当前光标处于是Friday的r的位置,所以光标会移动到上一个字符串Thursday的末尾位置y。 假如当前位置在Thursday r处,按下ge键后,当前光标处于是Thursday 的r的位置,而Thursday是本行的第一个字符串,所以光标会移动到上一空行的位置。
vim各种模式的切换
vim 编辑模式
当我哦们在普通模式的时候,我们使用 i I ,a A,o O可以进入对应的编辑模式
i 在当前光标位置前一字符位置进入插入模式
I 在当前行行首位置进入插入模式
a 在当前光标后以字符的位置进入插入模式
A 在当前行行尾位置进入插入模式
o 在当前行新建下一行进入插入模式
O 在当前行新建上一行进入插入模式
[num]s命令删除n个字符后进入插入模式
[num]S命令删除n行文本后进入插入模式
[num]c{motion} 删除{motion}文本后执行插入操作
[num]cc 删除{motion}文本后执行插入操作
Vim普通模式
vim删除字符命令
当我们在普通模式的时候我们可以用x或X命令来删除字符。但是注意删掉的这些字符会被放入到缓存中,当我们使用p的时候会在当前光标处复制删掉的内容。
[num]x 表示删除当前字符,或删除当前字符以及后面的num-1个字符,删除的字符会被放入缓存器中。使用p来进行复制删掉的内容。x等于dl
[num]X 表示删除当前字符,或删除当前字符以及前面的num-1个字符,删除的字符会被放入缓存器中。使用p来进行复制删掉的内容。x等于dh
例如 : 字符串abcdefghijklmn 当前光标位置在g字符上
x 删除当前字符 [g]
5x 删除从当前位置开始的5个字符[ghijk]
X 删除前一个字符 [f]
5X 删除前面5个字符 [bcdef]
删除字符串命令
通过dw/de 或db/dge命令我们可以实现向后删除字符串的操作。
[num]dw 从光标开始向后删除num个字符串到下一个字符串起始位置,光标前的字符串不会被删除
[num]de 从光标开始向后删除到num个字符串末尾,光标前的字符串不会被删除,空行不算在内。
向前删除字符串
[num]db 从光标前一位置向前删除num个字符串,光标以及之后的字符串不会被删除,空行会被当做一个字符串
[num]dge 从光标前一位置向前删除到第num个字符串末尾,光标以及之后的字符串不会被删除。空行不算在内。
删除整个字符串
[num]daw 删除包括当前字符串在内的num个字符串,空格会删掉,空格不算字符串。
[num]diw 删除包括当前字符串在内的num个字符串,空格不会删掉,空格也算字符串。
删除到行首或行尾
d0 删除光标前到行首的所有字符(不包括当前光标的字符)
d$ 删除光标前到行尾的所有字符(包括当前光标的字符)
dw和de类似,都是在当前光标开始向后删除num个字符串,不同的是对应空行的处理方式不一样,w都会把空行当做一个字符串,e不会算在内.
例如:当前文本内容如下当前光标在Monday的d字符上
Monday Tuesday Wednesday
Thursday Friday Saturday
Sunday Monday
演示如下:
6dw 会删除day Tuesday Wednesday 空行 Thursday Friday dw 空行算字符串
6de 会删除day Tuesday Wednesday 空行 Thursday Friday Saturday 第二个空行不会删掉 de空行不算字符串
7dw 会删掉day Tuesday Wednesday 空行 Thursday Friday Saturday dw 空行算在内
7de 会删掉day Tuesday Wednesday 空行 Thursday Friday Saturday 空行 Sunday de 空行不算在内
db和dge类似 ,都是在当前光标开始前一位置向前删除num个字符串。不同的是对应空行的处理方式不一样,w都会把空行当做一个字符串,e不会算在内.
例如:当前文本内容如下。当前光标第三行的Monday的d字符上 Monday Tuesday Wednesday Thursday Friday Saturday Sunday Monday 演示如下: 3db 会删除Monday 的d字符往前的3个字符串,所以Mon(第一个),Sunday(第二个),空行(第三个)会被删除 3dge 会删除Monday 的d字符往前的3个字符串的末尾 所以y Mond(第一个),空行Sunda(第二个),Saturday的y(第三个)会被删除 2db 会删除Monday 的d字符往前的w个字符串到行首,所以Mon(第一个),Sunday(第二个)会被删除 2dge 会删除Monday 的d字符往前的2个字符串的末尾 所以y Mond(第一个) ,然后空行 Sunda(第二个)会被删除。
daw和diw类似,都是删除整个单词,不同的是diw不会删除最后一个空格,而daw会将所有空格删掉。
例如:当前文本内容如下。光标停在 Wednesday的W位置 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 实验如下: 3daw 会删除Wednesday【space】Thursday【space】Friday【space】。 3diw 会删除Wednesday【space】Thursday。 4daw 会删除Wednesday【space】Thursday【space】Friday【space】Saturday【space】。 4diw 会删除Wednesday【space】Thursday【space】。
删除到行首或行尾
d0 删除光标前到行首的所有字符(不包括当前光标的字符)
d$ 删除光标前到行尾的所有字符(包括当前光标的字符)
例如:当前文本内容如下。光标停在 Wednesday的n位置 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 实验如下: d0 会将当前光标之前到行首的所有字符删掉。Monday Tuesday Wed会被删掉 d$ 会将当前光标都行尾的所有字符都删掉。nesday Thursday Friday Saturday Sunday会被删掉
vim 删除行命令
当我们在普通模式的时候,我们可以使用dd命令来删除当前行,也可以使用D来删除当前光标到末尾的内容。
[num]dd dd命令会删除当的行,向后删除,如果有数字接着dd,例如5dd 则表示删除当前行及后面4行文本内容
[num]D命令删除当前光标到行末尾,如果有数字5D这表示删掉当前光标到末尾已经后面的4行文本内容
dG 从当前行到文件末尾全部删除
dgg或d1G 从当前行到文件起始全部删除
[num]dd和[num]D实验如下:
例如: 当前文档有如下7行文本,当前光标在星期三的n字符上。 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 演示如下: dd 会删除Wednesday这一行 3dd会删除Wednesday ,Thursday,Friday这三行 D 会删除Wednesday中的nesday只留下Wed三个字符 3D会删除nesday ,以及Thursday,Friday这两行
dG和dgg/d1G实验如下:
例如: 当前文档有如下7行文本,当前光标在星期三的n字符上。 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 演示如下: dG 会删除星期三这行到文件末尾。Wednesday Thursday Friday Saturday Sunday都会被删除掉 dgg/d1G 会删除星期三这行到文件起始。Monday Tuesday Wednesday都会被删掉。
vim合并行命令
当我们需要合并两行的内容是我们可以使用J或gJ的命令来合并当前行和后一行。也可以搭配[num]使用。
[num]J命令 删除当前行的换行符,然后合并后面的行,并用空格分开。
[num]gJ 命令删除当前行的换行符,然后合并后面的行,但是不会用空格分开。
例如: 当前文档有如下7行文本,当前光标在星期三的n字符上。 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 演示如下: J/1J /2J 命令 Wednesday【space】Thursday这两行会合并为一行,并用空格分开 3J 命令Wednesday【space】Thursday【space】Friday这3行会合并为一行,并用空格分开 gJ/1gJ/2gJ 命令 WednesdayThursday这两行会合并为一行,但是中间没有空格 3gJ 命令WednesdayThursdayFriday这3行会合并为一行,但是中间没有空格
vim 重复命令
当我们执行过一条命令修改过内容后,如果想重复执行,我们不需要重行敲一遍命令,. 点号会直接重复上一次的修改命令。
. 点号只会重复修改内容的命令其他的命令不会重复执行。
.点号重复命令实验 当前文本有7行内如,光标停在第一行Monday的M处。 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 当我们执行 3J 就是合并3行文件内容之后文件内容变为如下情况。 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 这时如果我们重复执行命令.键按下之后会变成,会重复执行3J命令 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 在按一次.键,依然重复执行3J命令 Monday Tuesday Wednesday Thursday Friday Saturday Sunday
vim撤销操作
撤销操作也就是回滚操作就是取消上一次的操作,当我们修改数据后发现不行我们预想的结果,我们可以使用u键来进行撤销。
撤销命令实验: 当前文件内容如下:光标停在Monday的M位置 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 此时我想删除 Monday Tuesday Wednesday三个日期,我执行了三次daw命令,结果如下 Thursday Friday Saturday Sunday 然后我发现我删除了错误的日期,我想恢复到原来的状态,第一次使用u命令还原一次,Wednesday被恢复了 Wednesday Thursday Friday Saturday Sunday 第二次使用u命令还原一次,Tuesday 被恢复了 Tuesday Wednesday Thursday Friday Saturday Sunday 第三次使用u命令还原一次,Monday 被恢复了,此时数据已经完全恢复回来了 Monday Tuesday Wednesday Thursday Friday Saturday Sunday
vim复制和粘贴命令
复制命令
[num]y命令 复制一个或多个字符,yank的缩写。。。
[num]yy命令 复制一行或多行文本。
粘贴命令,其实put 命令是将缓冲器里的内容拿出来放到光标前或后面,缓冲器里的内容,可以是通过y命令复制来的,但是我们执行过 [num]x ,[num]dd dw等其他删除命令后,删除的内容也会放在缓冲器中。
[num]p命令 在当前光标后粘贴字符和行,put的缩写。注意行的粘贴只会在下一行粘贴,不会从当前光标开始。
[num]P命令 在当前光标前粘贴字符和行。
复制粘贴命令实验如下: 当前文本内容:光标在Monday的d上 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 此时执行3y(复制三个字符day),然后移动到行尾使用p命令,结果如下 Monday day 然后移动到行尾使用3p,结果如下:复制了3次day,加上第一次一共4个day字符串。 Monday daydaydayday 删除粘贴命令实验如下:光标在Monday的d上 Monday Tuesday Wednesday Thursday Friday Saturday Sunday 此时执行3x(就是删除了3个字符day),然后移动到行首执行p命令,结果如下:可以看到删掉的内容确实在缓冲区中。 Mdayon 还原文件内容为初始状态,然后移动光标到第2行,执行2dd命令,就是删除两行文本,然后向右移动光标到Thursday的s光标处。执行p命令,可以看到删除的2行文本在下一行复制出来,同时光标移动到了Tuesday的行首T位置。 Monday Thursday Tuesday Wednesday Friday Saturday Sunday
vim的替换字符命令
r命令是替换字符的命令,每次只能替换一个字符。
vim替换字符命令实验 当前文本内容为: Tuesday 光标在T位置 此时我们按下r键,然后输入X文件内容会变为 Xuesday 向右移动光标然后 按下.重复执行键,文件内容变为 XXesday