Vim 魔法指南:探索编辑世界的高效利器

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

  1. 首先通过oh-my-zsh来安装,在终端中输入:
bash 复制代码
git clone --depth=1 https://gitee.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
  1. 然后在zshrc文件中,添加一行:
bash 复制代码
ZSH_THEME="powerlevel10k/powerlevel10k"
  1. 紧接着在终端键入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的小游戏

Vim Tips Wiki

Vim Advent Calendar

《Practical Vim》

hi, 我是快手社交的moksha

快手社交技术团队 正在招贤纳士🎉🎉🎉! 我们是公司的核心业务线, 这里云集了各路高手, 也充满了机会与挑战. 伴随着业务的高速发展, 团队也在快速扩张. 欢迎各位高手加入我们, 一起创造世界级的产品~

热招岗位: Android/iOS 高级开发, Android/iOS 专家, Java 架构师, 产品经理, 测试开发... 大量 HC 等你来呦~

内部推荐请发简历至 >>>我们的邮箱: social-tech-team@kuaishou.com <<<, 备注我的花名成功率更高哦~ 😘

相关推荐
Ronin30514 小时前
【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile
linux·运维·服务器·ubuntu·编辑器·vim
朱杰jjj3 天前
Docker容器中无法使用vim、vi命令处理
docker·容器·vim
许白掰4 天前
Linux入门篇学习——Linux 帮助手册
linux·运维·服务器·嵌入式硬件·学习·编辑器·vim
清沫4 天前
键盘效率提升指南(VSCode+Vim+SurfingKeys)
前端·vim·visual studio code
GDAL5 天前
Node.js REPL 教程
node.js·编辑器·vim
F_D_Z15 天前
【vim】通过vim编辑器打开、修改、退出配置文件
linux·编辑器·vim
android_cai_niao16 天前
Sublime text启用vim
vim·sublime text
Demisse17 天前
[Linux] Vim编辑器 & Linux输入输出重定向
linux·编辑器·vim
晨曦backend19 天前
Vim-vimrc 脚本文件表头设置
编辑器·vim·vimrc
Little-Hu19 天前
linux使用vscode加cmake代替vim、gcc、gdb、makefile编辑、构建、调试程序
linux·vscode·vim