Vim 魔法指南:探索编辑世界的高效利器
作为程序员,我们大部分时间都花在代码编辑上,所以花点时间掌握某个适合自己的编辑器是非常值得的,下面我将介绍一个强大而高效的文本编辑工具,Vim。
一、Vim是什么
Stack Overflow社区对Vim有过这样一段评价:"Vim避免了使用鼠标,因为那样太慢了;Vim 甚至避免用上下左右键,因为那样需要太多的手指移动。"
Vim(Vi IMproved) 是一款文本编辑器,它是从早期的Unix文本编辑器Vi发展而来的。Vim在功能上比Vi更强大,并添加了许多新特性和改进。它被广泛用于命令行界面和终端环境下的文本编辑,且具有高度可定制性 和强大的编辑功能,可以处理各种编程语言和文件格式。下图来源于"Tweak Your Vim As A Powerful IDE":
它支持多种操作模式,包括命令模式、插入模式和可视模式,这使得用户可以在不同的场景下高效地编辑文本。
它还具有丰富的功能,包括语法高亮、自动补全、宏录制、多窗口编辑、代码折叠、搜索替换等。它还支持各种插件和脚本扩展,使用户可以根据自己的需求进一步定制和扩展编辑器功能。
Vim的学习曲线可能相对陡峭,但一旦熟悉了基本操作,它可以成为一个强大而高效的文本编辑工具 。Vim的学习曲线 :
Vim的优势
- 强大的编辑功能
- 高度可定制性。可以自定义键盘映射、配置文件设置,颜色主题等
- 命令行界面支持
- 跨平台支持和强大的社区支持
可能有的人会问
- 事实上已经有非常好用的
Typora
了,为什么我会选择用vscode
并借助vim插件写markdown
呢? - "在日常开发中我已经很忙了,居然还要抽出时间来写doc..."
事实上
首先Vim作为一款强大的文本编辑工具 ,熟练掌握之后的确能够提高 我们日常编写文档和代码的速度。
下面我们来简单演示一些场景,展现一下Vim的强大之处:
- 快速注释几行代码

- 在选中的代码行末尾加上分号

- 一键给下一行代码行增加形参

- 快速为不相邻的代码行增加形参

学习新编辑器的方法
- 坚持在日常开发中使用新编辑器(即便一开始会减慢我们编辑的速度)
- 边做变查
了解Vim的哲学和设计理念,有助于我们更好地理解和应用其基本操作。接下来,我们将介绍Vim的一些常用操作和快捷键,以便你开始使用和探索这个强大的编辑器。
二、Vim的基本操作
Vim中常见的四种模式
normal
:普通模式visual
:可视化模式insert
:编辑模式command
:命令行模式
2.1 Normal模式
这是默认 的启动模式。在普通模式下,你可以输入各种编辑器命令来执行操作,例如移动光标、复制粘贴、删除文本等。也可以使用快捷键和命令来操作文本文件,但不能直接输入或编辑文本内容。
esc
:从其他模式返回到normal
模式(试着将esc
映射到不常用的大写键,用shift+字母
的方式进行大写的输出,这样操作起来效率会更高! MacOS设置教程)
光标移动
早期的计算机键盘上没有上下左右按键,也没有鼠标,所以使用键盘来进行光标移动是必然的选择。为了方便终端用户进行编辑,vi选择了h、j、k和l作为光标移动键。
h/j/k/l
:左/下/上/右移动0
:跳转到行首%
:当光标处于左括号时,移动到匹配的右括号

b/w
:以单词为单位左/右移动

屏幕滚动
ctrl+d
:向下翻页ctrl+u
:向上翻页ctrl+e
:窗口向下滚动一行ctrl+y
:窗口向上滚动一行

文本搜索
默认情况下,模糊查找是区分大小写的(Case Sensitive)。可以通过:set smartcase
来设置不区分大小写的搜索,这个操作是接下来我们将要介绍的命令模式下的操作。
/
:开启模糊查找
n
:查找下一个N
:查找上一个f
:点击后再按下任何一个字符,在当前行中,可以移动到当前位置开始匹配的第一个字符

编辑文本
y
:复制当前字符yy
:复制当前行d
:剪切当前字符dd
:剪切当前行p
:在当前行的下一行粘贴P
:在当前行的上一行粘贴x
:删除选中的字符r
:输入一个字符可以替换掉当前字符

编辑文本(进阶)
将上述编辑操作组合起来,可以归纳为[count] [operation] [motion]
。其中count指的是想要执行操作的次数,operation指的是操作类型,motion指的是操作的执行动作,比如i"
表示在引号中执行操作。
da
:(Delete Around)。移动到括号或者引号中间,先按下da
,紧接着再按下"
或者(
,即可将中间的内容,包括括号也全部删除di
:(Delete Inside)。跟上一个命令的区别在于不删除外侧的括号
- 相应地也可以这样组合
va(
、vi"
、ci"
等等

光标跳转
ctrl+]
:跳转函数ctrl+o
:返回到上一次光标处ctrl+i
:前进道上一次光标处

撤销重做操作
u
:回退ctrl+r
:撤销回退

行号跳转
gg
:跳转到行首G
:跳转到行尾ngg
:跳转到指定行(n为行号)- 在接下来将要介绍的命令行模式中,也可以通过:n来跳到指定行(n为行号)

重复操作
.
:重复执行上一步操作

2.2 Insert模式
在普通模式下按下i键进入插入模式。在插入模式中,你可以直接键入文本内容,就像在其他常见文本编辑器中一样,可以自由地添加、修改和删除文本。
插入文本
i
:当前位置编辑I
:跳转到行首编辑A
:跳转到行尾编辑o
:在当前行的下一行另起一行编辑O
:在当前行的上一行另起一行编辑

2.3 Visual模式
在普通模式下 ,按下v
键可以进入可视模式。在可视模式下,你可以通过移动光标选择文本块,然后对所选文本执行操作,如复制、删除、替换等。可视模式非常有用,可以方便地对文本进行批量操作。
文本选择
v
:进入visual
模式并选中当前字符shift+v
:进入visual
模式并选中整行- 进一步可以通过
shift+>
或shift+<
进行缩进,也可以执行复制/剪切/删除操作
- 进一步可以通过
ctrl+v
:进入visual
模式并选中当前字符并按列选中

2.4 Command模式
在普通模式下,按下:键可以进入命令模式。命令模式允许你在底部输入各种命令,例如保存文件、退出编辑器、执行外部命令等,在命令行中输入命令并按下回车键来执行操作。
:q
退出:w
保存:x
/:wq
保存并退出

三、Vim进阶
3.1 宏
如果"."能够重复执行一次操作,那么宏可以重复执行一系列操作
q{字符}
将会在该字符对应的寄存器中开始录制操作- 再按一次
q
会结束录制 @{字符}
会重新执行该字符对应寄存器中录制的一些列操作{number}@{字符}
将会重复执行宏{number}
次- 下面演示录制宏并存入寄存器a中,快捷删除方法调用链路的操作

3.2 全局替换
:%s/old/new/g
将文件内所有的old
替换为new

3.3 打开文件
:e {文件名}
打开新的文件
:ls
显示打开的缓存

3.4 多窗口
:sp
分割窗口(默认为横向)ctrl+w/v
横向/竖向分割窗口:term
分割窗口并打开终端ctrl+w j/k
上\下切换窗口焦点q
退出窗口

四、让你的vim与众不同
大多数时间 ,我们热衷于配置自己的vim,让它看起来更美观 、用起来更舒适便捷 。下图来源于"Learnings after 500 commits to my vimrc":

通过修改配置文件和安装插件,我们能够自定义配置vim的配色方案、状态栏、快捷键和映射、插件和扩展、编辑器布局 。建议安装oh-my-zsh 这一款高度可定制化的shell,下面我将围绕这个shell的相关配置进行展开。
4.1 安装oh-my-zsh
建议参考README,里面有非常详细的安装教程。
4.2 主题配色
换肤后不仅能更加炫酷,还能自定义在终端界面中显示更详细的信息。例如git的缓存数、落后分支数、电量、wifi信号等等。
- powerlevel10k插件
如想要更高度的自定义配置,建议参考README
- 首先通过oh-my-zsh来安装,在终端中输入:
bash
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
- 然后在zshrc文件中,添加一行:
bash
ZSH_THEME="powerlevel10k/powerlevel10k"
- 紧接着在终端键入
p10k configure
开始进入配置指导

4.3 插件配置
在oh-my-zsh中安装插件非常方便 ,内置插件只需要在~./zshrc
文件中添加官方支持的插件名即可,内置插件目录。
bash
vim ~/.zshrc # 使用vim打开zshrc文件
按照以下格式在文件中添加内置插件名即可:

autosuggestion
"不需要alias别名配置 同样可以很便捷",可以自定义配置历史缓存的显示优先级。

vi-mode
在shell中使用vim

autojump
可以直接通过目录名跳到缓存的目录,不需要通过绝对路径或者相对路径

git
git插件为我们提供了很多方便的别名 ,比如我们可以使用gaa
命令来代替git add -all
。如果想了解更多别名,可以参考一下官方总结的配置

4.4 自定义配置
通过编辑~/.vimrc
文件,来高度自定义vim 。Github上有很多共享的配置,也可以参考一下我的配置,建议阅读并理解它,筛选出对你有用的部分。
五、其他程序的Vim模式
5.1 Chrome
对于那些熟悉依赖触控板浏览网页的同学,可以在chrome上安装vimium插件释放双手,没有烦恼地"外接键盘"

5.2 VSCode
安装Markdwon Enhanced(插件)
+ Vim(插件)
【强烈推荐】
markdown
插件不仅支持及时渲染,还支持Latex
语法,也支持进一步插入复杂的数学公式,是非常高效写doc的工具。

5.3 Android Studio
- 进入设置页面

- 安装vim插件

5.4 Xcode
- 打开内置的vim模式

- 因为对vim支持是不全的,且新版xcode不支持xvim了,需要进一步配置一下。配置光标和函数跳转

六、结语
学习完上面的操作后,你应该对Vim有了基本的了解。回到最开始演示复杂操作的动图,好好磨练吧! 使用vim模式之后...下图来源于"The Vim tips of the day for Xcode Collection":

附录
推荐一些学习Vim的网站和书籍
Vim Adventures:非常好玩的Vim的小游戏
hi, 我是快手社交的moksha
快手社交技术团队 正在招贤纳士🎉🎉🎉! 我们是公司的核心业务线, 这里云集了各路高手, 也充满了机会与挑战. 伴随着业务的高速发展, 团队也在快速扩张. 欢迎各位高手加入我们, 一起创造世界级的产品~
热招岗位: Android/iOS 高级开发, Android/iOS 专家, Java 架构师, 产品经理, 测试开发... 大量 HC 等你来呦~
内部推荐请发简历至 >>>我们的邮箱: social-tech-team@kuaishou.com <<<, 备注我的花名成功率更高哦~ 😘