今天开始全新的Linux命令学习,本篇博客开始学习vim编辑命令。
vim分为三个模式,命令模式,插入模式,编辑模式。首先通过vi命令加文件名打开一个文件。
打开文件后,进入的便是命令模式。
在此模式中直接敲相应的命令就可以实现控制。
当我们按:冒号就可以进入编辑模式
此时可以输入一串命令来进行操作。
按ESC可以退出编辑模式回到命令模式,当我们按i,a或o可以进入insert模式,也叫输入模式,插入模式可以直接修改文本内容。按ESC同样可以退出输入模式,回到命令模式。接下来将介绍一些常用命令。
插入命令
- a:在光标所在字符后插入
- A:在光标所在行尾插入
- i:在光标所在字符前插入
- I(大写i):在光标所在行行首插入
- o:在光标下插入新行
- O(大写o):在光标上插入新行
这里就不一 一展示了,大家可以在去自己调试一下。
定位命令
有的命令是要用冒号:进入编辑模式的,大家要注意。
- :set nu:设置行号
- :set nonu:取消设置行号
- :n:到第几行
- gg:到第一行行首
- G:到最后一行行首
- $:移至行尾
- 0:移至行首
删除命令
-
x:删除光标所在处字符
-
nx:删除光标所在处后n个字符
比如我想删掉第8行的2021,此时将光标移动到第八行第一个字符,由于算上自己一共是四个字符,所以直接4n就搞定了
-
dd:删除光标所在行,ndd删除n行,其中光标所在行为第一行
比如我想删掉8,9和10行,那么将光标移动到第8行,再敲命令3dd就可以了
-
dG:删除光标所在行到文件末尾内容
比如我想删除11行之后所有的内容,将光标放在12行,再敲dG就可以了。
-
D:删除光标所在处到行尾内容
比如我想删除第11行数字20之后的内容,将光标定位到20的后一个点,如果将光标指到0,会连0一起删除掉。然后敲D就可以了
-
:n1,n2d:删除指定范围(n1到n2行)的行
比如我想删除2,3行,那么我就可以先敲冒号进入编辑模式,再敲2,3d这个命令就可以了
复制命令
- yy:复制当前行
- nyy:复制当前行以下n行
- dd:剪切当前行
- ndd:剪切当前行以下n行
- p,P:粘贴在当前光标所在行下或行上
这里可以结合dd和p命令实现剪切,举个例子,比如我想将4和5行移动到最后一行,先将光标移动到第4行,剪切两行,即2dd,然后将光标移动到最后一行再粘贴p即可。
替换和取消命令
-
r:取代光标所在处字符
比如我想将第三行的what的w变成大写W,将光标移动到w,进行替换即可。
-
R:从光标所在处开始替换字符,按Esc结束。注意是替换,不是增加!
比如我想将第2行的him替换成she,先将光标移动到h,然后开始替换,最后按Esc退出。
-
u:取消上一步操作
搜索命令
-
/string:搜索指定字符串,搜索时区分大小写
比如要搜索him,直接敲/him即可。按n可以切换到下一个him的位置。
-
set ic:搜索时不区分大小写
-
set noic:取消搜索时不区分大小写
-
:%s/old/new/g:全文替换指定字符串,/g表示不询问,/c:询问确认
比如我想将him替换成me,就要敲:%s/him/me/g
-
:n1,n2s/old/new/g:在一定范围内替换指定字符串
比如我想将只将第8行的test替换成TEST,那可以这样。
保存退出命令
- :w:保存修改
- :w new_filename:另存为指定文件
比如要另存为/tmp/save_test的文件,那么:w /tmp/save_test这样敲即可。 - :wq:保存修改并退出
- ZZ:保存修改并退出
- :q!:不保存修改退出
- :wq!:保存修改并退出(文件所有者及root可使用),可能出现的情况是某个文件的所属者权限没有写权限,当所属者使用vi命令时是可以进行编辑的,只不过当保存时会提示是否强行保存。
接下来说一下啊vim中一些常见的组合命令实现
-
:r!:导入命令执行结果
比如我想将当前时间导入,就可以执行:r! date这个命令了
这个命令只要灵活运用是会有很多妙处的,大家可以灵活使用。 -
:!which:找到某个命令所在的位置
比如编辑到一半的时候,突然想知道useradd命令的位置,那我可以这样
-
map:快捷键触发器
举个栗子,比如我想注释某行,如果要按照之前的命令,先移动到某行的第一个字符,然后进入输入模式,输入#后又要退出,很麻烦。通过使用map,可以把一系列的命令整合起来变成一个键。
这张图中看不清的蓝色符号是^P,但是并非这样输入的,该命令是这样的:map (Ctrl V + Ctrl P) I#<ESC>,这里的^P是先按Ctrl V再按Ctrl P的结果。按Ctrl V后确认要添加的快捷键,而Ctrl P就是快捷键,接下来是大写的i,回顾之前的知识,大写I表示在指在光标行行首插入,接下来#就是要插入的,最后<ECS>表示ECS键,即退出输入模式。
-
:n1,n2s/^/#/g:连续行注释
比如我想将8和9行都注释掉,可以执行这个命令:8,9s/^/#/g。其中这个命令的^表示行首。整个命令解读是,首先8,9s确定行,/^表示要替换的字符,由于我只是想插入#,因此确定行首^就可以了,无需替换。/#表示把之前的空替换成#,/g表示不用询问。
-
:n1,n2s/^#//g:取消连续行注释
-
:n1,n2s/^//\/\/g:连续行//
这里有个很有意思的符号 \——转义字符,本来/是起到分隔作用的,但是我要插入/,因此要把插入的/给转义掉。 -
:n1,n2s/\/\///g:取消连续行//
-
ab mail chenxuanqi6@163.com:当输入mail后,按空格或者回车变成chenxuanqi6@163.com
刚刚说的这些常用技巧,当退出编辑后便因为没有保存而失效,想要在某个用户中永久生效,要编写这么一个文件存储起来。
通常快捷命令都存放在/home/user/.vimrc
比如:/root/.vimrc
只需要在这个文件中把之前的技巧命令按行敲进去即可。