在本文的开头分享一首远唯美忧伤缠绵轻抚感的美乐!🎶
vim是什么?
Vim是一个文本编辑器。Vim具有代码编译、补完以及错误跳转等编程功能,在程序员中被广泛使用。Vim的第一个版本由布莱姆·米勒在1991年发布,最初的简称是ViMitation,随着功能的不断增加,正式名称改成了ViIMproved。
Vim普遍被推崇为类 Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年 Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳 开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs同样都是非常优秀的文本编辑器
想要了解更多的小伙伴可去百度了解更多相关内容
在上文使用Ubuntu安装Jdk中我提到了Vim
其实,我们只要记住一些常用的命令,在工作中经常使用 Vim 进行编辑,就可以了
为什么要用vim?
一个1991年正式发布,如今已经的高龄代码编辑器Vim,为什么如此受欢迎?
大家可以查看几乎排名前列的主流IDE,他们的编辑器模式排名第一的插件,都是vim。也就是说。学习了vim的操作。将来无论你用哪个ide,无论你用哪个终端,无论你用何种环境,都可以使用一套统一的编辑模式与命令操作。对程序员来说,掌握vim算是性价比最高的知识了
接下来是一段转载自知乎的一段话,觉得说的很对原文链接
狭义的vim: 指命令行文本编辑软件vim和neovim。 广义vim: 采用vim键位绑定的一切插件和配置。
可以依据对vim的态度将程序员分为以下几种
反vim或对vim无感者。觉得IDE的各类补全功能和快捷键已经非常好用,而且编程最重要的是思考的时间,不需要为了一点点编码效率的提升而去入门艰深的vim,最多在命令行快速改文件时临时使用一下。少部分极端的不相信真的有人可以通过vim提高编码速度,认为大多数vim使用者只是装逼。
广义vim支持者。认同vim的输入模式,但很少使用纯vim,在不同的ide中开启vim插件。在享受ide带来的好处的同时也能通过vim提高自己的编码效率。
vim原教旨主义者。认为纯vim或neovim才是真正的vim,信仰通过插件vim可以达到一切IDE有的功能。近乎强迫症地使用键盘。
大部分程序员属于第一种人。知乎和B站上很多直播编程的大佬也不使用vim,但能看出他们的编码速度绝对不慢。
第一种人可以向第二种转化,而且这种转化基本上是不可逆的。一旦一个人通过一段时间的训练习惯了vim的输入方式,那他几乎不可能再回到过去的输入方法。至于第三种,我曾经尝试向第三种转化,但是一次次被繁重的配置和很多图形化功能的缺失劝退了。
比如说作为一个算法研究员,你需要去vscode里改代码,去jupyter
notebook里可视化输出,去overleaf写论文,去leetcode找工作刷题。你几乎不可能只用vim,因此很难成为第三种人。但如果你是一个纯粹的程序员,每天绝大多数时间都是在写代码,你必然会有很多时候觉得IDE不顺手。
而vim允许你重度自定义,把它改造成任意你需要的样子,也许就会慢慢成为第三种人了。
我们需要vim,不是因为在终端不得不用vim,而是vim更好用*
vim的使用
vi/vim 的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:
命令模式:
用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:
i 切换到输入模式,以输入字符。
x 删除当前光标所在处的字符。
: 切换到底线命令模式,以在最底一行输入命令。
1
2
3
若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。
输入模式
在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符 ENTER,回车键,换行 BACK SPACE,退格键,删除光标前一个字符 DEL,删除键,删除光标后一个字符 方向键,在文本中移动光标 HOME/END,移动光标到行首/行尾 Page Up/Page Down,上/下翻页 Insert,切换光标为输入/替换模式,光标将变成竖线/下划线 ESC,退出输入模式,切换到命令模式
底线命令模式
在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):
q 退出程序 w 保存文件 • 1 • 2
按ESC键可随时退出底线命令模式。
进入vim的命令
vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename….filename :打开多个文件,依次编辑
移动光标类命令
h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 Enter :光标下移一行 w或W :光标右移一个字至字首 b或B :光标左移一个字至字首 e或E :光标右移一个字j至字尾 ) :光标移至句尾 ( :光标移至句首 }:光标移至段落开头 {:光标移至段落结尾 nG:光标移至第n行首 n+:光标下移n行 n-:光标上移n行 n$:光标移至第n行尾 H :光标移至屏幕顶行 M :光标移至屏幕中间行 L :光标移至屏幕最后行 0:(注意是数字零)光标移至当前行首 $:光标移至当前行尾
屏幕翻滚类命令
Ctrl+u:向文件首翻半屏 Ctrl+d:向文件尾翻半屏 Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏 nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行
删除命令
ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d$:删至行尾 ndd:删除当前行及其后n-1行 x或X:删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令 :
/pattern:从光标开始处向文件尾搜索pattern ?pattern:从光标开始处向文件首搜索pattern n:在同一方向重复上一次搜索命令 N:在反方向上重复上一次搜索命令 :s/p1/p2/g:将当前行中所有p1均用p2替代 :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g:将文件中所有p1均用p2替换
选项设置
all:列出所有选项设置情况 term:设置终端类型 ignorance:在搜索中忽略大小写 list:显示制表位(Ctrl+I)和行尾标志($) number:显示行号 report:显示由面向行的命令修改过的数目 terse:显示简短的警告信息 warn:在转到别的文件时若没保存当前文件则显示NO write信息 nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 mesg:允许vi显示其他用户用write写到自己终端上的信息