Fork me on GitHub

Linux中Vim编辑模式中的四种模式及实用技巧(可快速上手)

vim一共有4个模式:

• 正常模式 (Normal-mode)
• 插入模式 (Insert-mode)
• 命令模式 (Command-mode)
• 可视模式 (Visual-mode)

正常模式(从插入模式进入到正常模式实际也为对当前文本的命令模式)
启动vim后默认处于正常模式。不论位于什么模式,按下<Esc>键(有时需要按两下)都会进入正常模式。
~ 正常模式下,最后一行No file前面为一个小横杠 -
~
- No file [Modified] 3/5 60%


插入模式(编辑模式)
在正常模式中按下i, I, a, A等键,会进入插入模式。现在只用记住按i键会进行插入模式。在插入模式中,击键时会写入相应的字符。
~ 插入模式下,最后一行No file前面为一个大写字母I,表示insert插入模式,若退出插入模式需要按两下esc键,然后前面大写I变成小横杠-
~
I No file [Modified] 1/5 20%


命令模式(末行模式)
在正常模式中,按下:(英文冒号)键,会进入命令模式。在命令模式中可以执行一些输入并执行一些vim或插件提供的指令,就像在shell里一样。这些指令包括设置环境、文件操作、调用某个功能等等。
命令模式输入是在最后一行进行输入,可在插入模式按两下esc退出变成小横杠时按下:(即Ctrl+:输入冒号)进入命令模式

 

常用的命令有:q(退出)、q!(强制退出)、w(保存)、wq(保存并退出)。


可视模式
在正常模式中按下v, V, <Ctrl>+v,可以进入可视模式。可视模式中的操作有点像拿鼠标进行操作,选择文本的时候有一种鼠标选择的即视感,有时候会很方便。
vim ctrl+v垂直选取产生 e353错误

原因是/etc/vim/vimrc中map ctrl+v为其他作用了

解决方法:

  删除掉map<C-V>...项即可

客户端putty, xshell连接linux中vim的小键盘问题
在putty上用vi的时候,开NumLock时按小键盘上的数字键并不能输入数字,而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键)。解决方法

选项Terminal->Features里,找到Disable application keypad mode,选上就可以了

在xmanager 4 中的xshell也有小键盘问题 解决方法为

修改session 属性 -> 终端->VT模式->初始数字键盘模式

选择 设置为普通。

注:命令模式和末行模式有区别:

命令模式只需要按esc即可,最后一行的No file 前面为小横杠,此时可输入指定命令对刚刚插入模式的内容进行更改,如dd表示删除当前行。还有如下操作:
- No file [Modified] 3/5 60%
一:命令模式
1、退出保存:ZZ(及按住shift的同时,按两次z)
2、代码格式化:gg=G(即连续按2个g,再按=,再按G)
3、光标移动
3.1、上、下、左、右:方向键或者k、j、h、l
3.2、跳到文件头部:gg
3.3、跳到文件尾部:G
3.4、跳到某行行尾:$
3.5、跳转到某行开头:行号+G(比如跳到200行开头->200G)
3.6、跳转到某行末尾:行号+$(比如跳到200行末尾->200$)
3.7、向下移动n行:行号+回车
4、撤销操作
4.1、撤销:u
4.2、反撤销:ctrl+r
5、删除
5.1、删除光标后面的字符:x
5.2、删除光标前面的字符:X
5.3、删除一个单词:dw(注意保证光标在单词的最前面,不然只能删除光标后面的部分)
5.4、删除当前行光标前面部分:d0
5.5、删除当前行光标后面部分:D或者d$
5.6、删除当前行(整行):dd
5.7、删除多行:ndd(如10dd,即从当前位置起,往下删除10行(包括当前行))
5.8、删除当前位置后面的所有内容:dG(包括当前行)
5.9、删除当前位置前面的所有内容:dgg(包括当前行)
温馨提示:vim中的删除其实是剪切操作,删除的内容可以用p命令粘贴
6、复制操作
6.1、复制当前行:yy
6.2、粘贴复制内容:p(当前行下一行);P(当前行上一行)
6.3、复制多行:nyy(如3yy,即从当前位置起,往下复制3行(包括当前行))
6.4、复制选中:按v进入可视模式,选择要复制的内容,按一个y即可复制完成
7、替换操作
7.1、替换当前字符(单个):输入r,然后在输入要替换的字符
7.2、替换当前字符(多个):输入R,然后在输入要替换的字符(往后替换)
8、查找
8.1、输入/或?,然后输入要查找的内容,如:/hello
如果搜到多个:n下一个,N上一个
8.2、搜索当前光标所在的单词:#
9、进入编辑模式
9.1、a:从光标后面开始插入
9.2、A:会跳到行尾并从光标后面开始插入
9.3、i:从光标前面开始插入
9.4、I:会跳到行首并从光标前面开始插入
9.5、o:会在光标下一行新建空白行插入
9.6、O:会在光标上一行新建空白行插入
9.7、s:删除光标盖住的字符开始插入
9.8、S:删除光标所在行后开始插入

回到命令模式:按Esc键(一次或多次)。命令模式是对文本内容进行快速操作,相较于编辑模式的增加内容,命令模式强大在于删改查。

末行模式:要在按esc进入命令模式后,再按:进入末行模式,末行模式主要是用来对文本进行操作,如保存文本,而不是对文本内容进行操作。
二:末行模式(输入“:”进入该模式)
1、q:退出当前文件
2、q!:强制退出,不保存当前修改
3、wq或x:保存并退出
4、文本替换
4.1、s/old/new:如:s/exit/quit,将exit替换为quit(只替换当前行第一处)
4.2、s/old/new/g:文本替换(替换当前行全局)
4.3、10-20s/old/new/g:范围行内替换
4.4、%s/old/new/g:当前文件内进行替换
5、分屏命令
5.1、sp:水平分屏
5.2、vsp:垂直分屏
5.3、ctrl+ww:多屏之间切换
5.4、qall:退出所有屏,以此内推有:wall、wqall
5.5、vim -o aa.txt bb.txt:进入的时候就进行分屏(o水平;O垂直)
6、支持shell命令:!,如:!pwd

 

从插入模式(编辑模式)下新建文件并输入内容,但是没有保存时,若回到正常模式进行退出(:q或:q!)会进行报错(如下):(需进行:wq!保存后退出)shift+:

~
~
~
No write since last change (:quit! overrides)
按:wq!保存后退出出现如下错误:
No current filename
可以用hjkl快速浏览,如果需要编辑,可以输入i,进入编辑模式,然后输入。在最后,也许你想保存的输入为另外一个文件,比如保存为test2.txt,怎么办呢。进入命令模式(shift+:),然后输入w test2.txt,回车就可以了。返回如下,然后进行退出
~
~
~
"test2.txt " 20L, 77C
其实就是输入w加上你要保存的文件名就行了,不管是保存还是重命名,通用。


按【ESC】键跳到命令模式,然后再按【:】冒号键,最后再按【wq】,即可保存退出vi的编辑状态;如果是不想保持直接按下【:】冒号键加【q!】键,就能直接退出;

  此外还有这些命令,:w 保存文件但不退出vi;:w file 将修改另外保存到file中,不退出vi;:w! 强制保存,不推出vi;:wq 保存文件并退出vi;:wq! 强制保存文件,并退出vi;q: 不保存文件,退出vi;:q! 不保存文件,强制退出vi;:e! 放弃所有修改,从上次保存文件开始再编辑;

 

  最后,如果使用Ubuntu的话,输入LS还会出现小火车呦~

posted @ 2021-07-16 00:02  Hayon  阅读(1468)  评论(0编辑  收藏  举报