关于新手vim的使用和常用命令

在本文的开头分享一首远唯美忧伤缠绵轻抚感的美乐!????


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写到自己终端上的信息
上一篇:2019阿里云双11拼团全攻略


下一篇:如何获取HTML5视频的持续时间