最近在学习C语言,顺便就用vim做编辑器,让自己熟悉一下一些常见的操作及命令。
打开或者新建文件
在命令提示符后面输入:vim filename,如果filename这个文件存在,则vim会打开它,如果不存在,则vim会新建一个filename文件。
vim的三种模式
- 一般模式
当我们用vim直接打开一个文件之后什么也不做,就进入了一般模式。在一般模式下,你可以对内容进行复制、删除、粘贴等操作,还可以在文件内快速跳转到不同的行及不同的列
- 编辑模式
当你在一般模式下按下A,a,I,i,O,o,R,r
这几个按键之一,就进入了编辑模式,此时你就可以愉快的输入内容了。
- 命令模式
当你在一般模式下输入/:?
这三个字符之一,就会进入命令模式,可以进行一些搜索查询、替换、读入文件内容、另存文件内容、显示行号、执行命令行指令以及保存文件、退出vim等操作。这三种模式之间互相切换的规则如下:
用户只能从一般模式切换到编辑模式,或者从一般模式切换到命令模式,不能从编辑模式直接切换到命令模式。要想从编辑模式切换到命令模式,只能先按Esc键退出编辑模式,再按?/:这三个按键进入命令模式。
懒得画图了,盗用鸟哥的图
一般模式中常用的操作
光标的移动
下面加粗的都是比较常用的按键
hjkl
这四个按键或者←↓↑→这四个按键可以操作光标向左、向下、向上、向右移动。h对应着←,j对应着↓,k对应着↑,l对应着→。并且hjkl这四个按键在键盘上是从左至右依次排列的。nj或者nk表示从当前光标所在行向下或者向上移动n行,同理nh或者nl表示将光标向左或者向右移动n个字符。-
n<enter>
——表示将光标向下移动n行。 0或者home键表示移动光标到行首,$或者end键表示移动光标到行尾
n<space>
——n加空格键,表示将光标向右移动n个字符。H
——表示将光标移动到当前屏幕最上方那一行的行首,注意是当前屏幕显示的内容的第一行,而不是文档的第一行。M
——则表示将光标移动到当前屏幕最中间那一行的行首。L
——表示将光标移动到当前屏幕最下面那一行的行首。nG
——表示将光标移动到当前文档的第n行。1G
——表示将光标移动到当前文档的首行。G
——表示将光标移动到当前文档的末行。gg
——也是将光标移动到当前文档的首行。ctrl+f
(或者PageDown)——屏幕向下移动一页ctrl+b
(或者PageUp)——屏幕向上移动一页
删除、复制与粘贴
删除
x,X
——x表示向后删除文字,从当前光标所在文字开始向后删除一个文字,连续按键则连续向后删除。X则正好相反,是往前删除一个文字。nx,nX
则表示向前或者向后删除n个文字,以当前光标所在文字为起点。dd
——删除光标所在的当前这一行ndd
——从光标所在这一行往下删除n行(包括光标所在这一行)d1G
——删除光标所在这一行到首行之间的所有行(包括光标所在的行及首行)dG
——删除光标所在行到末行的所有行(同上)d0
——删除光标所在字符到行首字符之间的所有字符d$
——删除光标所在字符到行尾字符之间的所有字符
复制(与删除非常类似,只是把d换成了y)
yy
——复制光标所在行nyy
——从光标所在行往下复制n行(包括光标所在这一行)y1G
——复制光标所在这一行到首行之间的所有行(包括光标所在的行及首行)yG
——复制光标所在这一行到尾行之间的所有行(包括光标所在的行及尾行)y0
——复制光标所在字符到行首字符之间的所有字符y$
——复制光标所在字符到行尾字符之间的所有字符
粘贴
p
(小写)——将已复制的数据粘贴到光标所在行的下一行P
(大写)——将已复制的数据粘贴到光标所在行的上一行
其他操作
u
——撤销前一动作ctrl+r
——重做前一动作
指令模式中常见的操作
搜索与替换
/
——在一般模式下,按下/键,就会进入搜索模式,/word就会从当前光标所在位置向后搜索关键字word?
——在一般模式下,按下?键,就会进入搜索模式,?word会从当前光标所在位置往前搜索关键字word- 注意,此处的往前搜索与王后搜索与n和N关系极大。当搜索一个关键字后,不论是往前还是往后搜索,文档中所有匹配的关键字都会高亮显示。当你搜索一个关键字之后,按下n,则继续进行前面的搜索动作,即如果你是往后搜索(/),那么按下n就继续往后搜索,光标会往后走到达关键字,继续按则继续走,而按下N,则按相反方向搜索,即继续往前搜索,光标往前走到达关键字上。同理,往前搜索时,按n继续往前搜索,按N则往后搜索。
n和N就是让你在被搜索到的所有关键字之间移动光标
- 搜索时,所有匹配的关键字都会被高亮显示,当你退出搜索模式或者再次打开文件时,仍然会高亮显示,此时我们可以主动关闭高亮显示
`:nohlsearch` 或者 `:set nohlsearch`可以关闭高亮显示,不过他们有些细微的区别,`:nohlsearch`会关闭本次高亮显示,当你下次搜索时,会继续让关键字高亮显示。而`:set nohlsearch`则会彻底关闭高亮显示,以后再次搜索时不会有高亮,在这种情况下,可以使用`:set hlsearch`恢复高亮显示。
:n1,n2s/word1/word2/g
——这是字符串替换指令,n1代表起始的行号,n2代表结束的行号,word1为被替换的关键字,word2则是用来替换的关键字,g表示全局替换即n1daon2之间匹配的所有word1都被替换为word2。这条指令的意思就是,在第n1-n2行之间搜寻word1并将其替换为word2。:1,$s/word1/word2/g
——这条命令则是在第一行到最后一行搜索并替换。$表示最后一行。:n1,n2s/word1/word2/gc
——在后面加上c,会让你在替换每一个Word1之前确定是否替换,以防误删。- 如果没有g,则只替换匹配到的第一个关键字。
读写文件及保存退出
:w
——保存当前编写的内容:w!
——当文件为只读文件时,强制写入,具体能否写入还要看用户的权限:q
——退出vim:q!
——强制退出。如果文件被修改了,则不保存退出。wq
——保存并退出ZZ
——如果文件被修改过,则保存之后退出,如果文件没有被修改,则直接退出。w newFileName
——将文件另存为n1,n2 w newFileName
——将文件n1-n2行之间的内容另存为一个新文件r newFileName
——将newFilename这个文件的内容读取并添加到当前光标所在行的后面! command
——即在没有退出vim的状态下执行Linux指令,指令输出内容下面会有提示,按enter或者其他按键回到vim界面。set nu
——显示行号set nonu
——不显示行号
vim的暂存档.filename.swp
当你使用vim创建一个文件或者编辑一个文件时,系统就会自动创建一个隐藏文件,.filename.swp
(也叫交换文件或暂存文件),如果你正常退出vim,则该文件会被自动删除。如果你没有正常退出导致正在进行的工作没有保存,则该文件就会保留下来,用来进行文件恢复。该文件会保存用户对文件内容的操作,以便用户恢复。
当文件没有正常退出保存,则再次打开时,会弹出下面的画面:
下面就分别来说说:
文字接口显示的是英文,我的系统语言选的是中文,上面的图片是在图像界面下的终端里截取的,因此显示的是中文,下面统一用英文,其意思都一样。
- [O]pen read-only:以只读方式打开,一般用在你只想看看文件内容而不想编辑时。这种情况正对应上面图片中的有人正在编辑文件,而你打开文件就会弹出这六种可选操作,此时可以选择只读。
- [E]dit anyway:以正常模式打开文件进行编辑,这样不会载入swp文件内容。这样会出现两人同时改变文件,而可能出现有的操作没有保存的情况。
- [R]ecover:加载暂存文件,恢复当前文件。文件恢复后,暂存文件不会自动删除,需要用户手动去删除,否则下次打开文件还是会弹出这六种操作的界面。
也可以在下次打开文件时选择[D]elete操作删除暂存文件。
- [D]elete:删除暂存文件。如果你确定不需要暂存文件的内容,则可以选择这个操作删除它。
- [Q]uit:直接退出vim。
- [A]bort:类似[Q]uit,也是退出vim。
当文件多次编辑时出现不正常关闭情况,就会产生多个暂存文件
(如果你没有删除暂存文件的话)。比较新的文件依旧以.swp结尾,次一级的以.swo结尾,再次一级的以.swn结尾,其他的依次类推。即文件后缀最后一个字母按照字母顺序出现,越靠后的字母,表示暂存文件越新,最新的就是以p结尾的.swp文件。
vim高级操作
区块选择
区块选择也是在一般模式下
进行的操作。具体操作见下图:
- 小写的v,以字符为单位进行选择,你可以用上下左右键移动光标选择不同的形状与大小,选中的是光标初始位置与结束位置之间的所有字符。
- 大写的V,则是以行为的单位进行选择,默认选中当前行,可以用上下键移动光标选择多行,选中的使光标初始位置与光标结束位置之间所有的行。
- ctrl+v:会选中初始光标位置与结束光标位置之间的矩形框,如果初识光标与结束光标不在同一列,则这两个光标位置就处于一个矩形框的对角位置,以他俩为对角线的矩形框整个会被选中。如果开始光标与结束光标在同一列,则选中这两光标之间的所有的行上光标所在列的字符。效果如下:
当选中文字之后,可以进行以下操作:
- 小写y:复制选中的文字,复制之后vim会自动回到一般模式。
- 小写的d:删除选中的文字,删除之后会自动回到一般模式。
- 小写的p:其实就是一般模式下的粘贴操作,这个必须在一般模式下进行。将复制的内容粘贴到光标所在行的下面。顺便复习一下大P,是将复制的内容粘贴到光标所在行的上面。
多文件编辑
在vim后面接多个文件名,可以同时打开多个文件。这样就进入了多文件编辑。多文件编辑时常用的按键如下:
* :files
:显示当前打开的文件列表
:n
:切换到下一个文件:N
:切换到上一个文件- 这两种切换进入的都是
一般模式
多窗口操作
在Windows下很多文本编辑器都有多窗口功能,当一个文件太大来回查看不方便时,就可以将一个文件在多个窗口打开,每个窗口显示想要看到的那一部分,免去了来回拖动页面的烦恼。
或者想要同时看到或者编辑多个文件,此时也可以使用多窗口功能,而不用点击标签切换文件,windows中的效果如下,以vscode为例:
在vim中,也可以将文件多窗口显示。使用:sp
命令即可分割窗口。
使用:sp fileName命令则会在新窗口中打开fileName这个文件,从而实现多文件多窗口。
打开了多个窗口,那么如何在多个窗口键切换呢?常用的命令如下:
补充一下:ctrl+w+q离开的是当前光标所在的文件,即离开的是你当前正在编辑的文件,这个命令是和:q等价的,当你在命令行直接输入:q,则离开当前正在编辑的文件。
补全功能
许多编辑器都有命令补全功能,当你输入相应的关键字,会联想出一个命令列表,供读者选择,这样能大大提高coder的编码效率。在vim中也有相关功能。
根据文件扩展名来补全相关的命令
。即vim会根据文件扩展名来确定文件使用的语法,从而提示用户相应的关键词或者命令,这种功能在可视化编辑器中很常见,即会显示一个关键字列表以供用户选择。使用的按键是ctrl+x -> ctrl + o,即先按下ctrl+x,然后再按下ctrl+o即可调出关键词列表。下面以a.css文件来示例:
在出现命令列表之后,可以用上下按键选择命令,最终按enter就输入了命令。
根据文件内容来补全相关命令
。即你在一个文件中多次输入同一个关键字,那么在你再次输入时,只要输入这个关键词的首字母,然后使用按键ctrl+x -> ctrl + n即可补全该关键字,免去了重复输入的痛苦。
以当前文件所在目录内的文件名作为关键字进行补全。
使用按键ctrl+x -> ctrl + f,则会以当前文件所在目录内的文件名作为关键字进行补全,对于一些文件操作比较方便。
第二张图中描述有误,应该是ctrl+x -> ctrl+f,而不是ctrl+x -> ctrl+x
vim的环境设定
上面的指令只是临时设定,如果想要长期生效的话可以创建自己的配置文件。关于vim的配置文件有两个,一个是系统的配置文件/etc/vimrc,还有一个就是用户自己的配置文件,放置在home目录下,即~/.vimrc文件,文件预设不存在的,请手动创建。配置文件相关语法示例如下:
顺便提一下,用户在vim中的操作都被记录在~/.viminfo
这个文件中。
至此,vim的常用功能就此介绍完毕,文章中有错误之处,还望不吝指教,谢谢各位的阅读。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。