基本使用
基本使用
vim 哲学
- 摆脱对视觉控制的依赖,使用键盘快捷键来进行光标定位和文本操作。
- 利用模式切换来区分不同的编辑状态,如普通模式、插入模式、命令模式等。
- 遵循 Unix 哲学,将 Vim 作为一个小而美的工具,通过插件和外部命令来扩展其功能。
- 保持简洁和一致性,避免过度定制和复杂化。
所以基于 Vim, 将要打造的是一套全键盘, 而少用鼠标的生态
neovim 是 vim 的一个分支, 具有以下特点:
- ✨ 在 vim9.0 之前, 基本做到了完全兼容
- 💤 neovim 去掉部分 vim 历史遗留的兼容问题, 默认配置更加友好
- ⚒️ 嵌入了最快的脚本语言:
luajit
, 启动的效率进一步改善
- 🔅
lua
相比vimscript
, 语法更加可读, 可配置性更高
以下如果无特别说明, 以 vim 代替 vim/neovim
模式
上面提到 vim 的设计哲学之一
利用模式切换来区分不同的编辑状态,如普通模式、插入模式、命令模式等。
在我这段时间的使用看来, vim 的操作最重要的就是围绕 vim 定义的几种模式来展开, 所以这里我也以 vim 的模式来展开
前置知识: vim 的各种模式快捷键完全分离, 所以每一种模式下, 你都可以设置相应的快捷键 即使多种模式下,设定了同一种快捷键, 一般也不会发生冲突
常用的模式
🟢 Insert Mode(插入模式) 顾名思义, 这是所以编辑模式中最基本的功能, 这个功能下, 同其他编辑器一样, 会正常接受所有用户输入的字符, 并且显示到屏幕上 但是在 vim 里, 所有操作都是键盘快捷键驱动的, 我认为在这个模式下, 你需要注意的是:
即使是 Insert Mode 下, 你仍然可以映射普通的按键
例如:
inoremap ( ()<left> " 简单的自动括号
, 就可以简单实现一个自动括号匹配 (其中"
为vimscript
的注释, 可见语法可读性多堪忧)
🔵 Normal Mode(普通模式) 在这个模式下, 你的a-z将不再为输入字符, 而是 vim 的快捷键映射
例如: kjhl 键分别对应为光标的上下左右移动 在之后使用 vim 的大部分时间里, 你最常处于的模式, 应该就是 Normal Mode
🟡 Visual Mode(可视模式) 注意: 虽然看上去, 和其他编辑器里的选中模式类似, 但是实际上并不相同, 主要体现在:
Visual Mode 下, 你输入字符, 将被处理为 vim 定义的快捷键, 这与其他编辑器将此解析为删除选中的文本并替换并不相同
Visual Mode 作为一个单独的模式, 同样拥有自己的快捷键定义, 甚至拥有延伸的模式
- Visual Block Mode(可视块模式) 如果你向选中的部分, 不是连续的文本, 而是一个矩形的区域, 那么这个模式就是为这时候准备的
- Visual Line Mode(可视行模式) 同
Visual Block Mode
一样, 这个模式是为了需要按行为单位选中区域操作而诞生的
🟣Command Mode(命令模式) 类似与 Vscode,输入命令一样, 这是 Vim 的命令模式, 在这个模式下, 你可以输入一些 Vim 的命令, 他们可以是内置的, 也可以是插件定义的, 甚至你也可以自己定义 在 Vim 下, 你想到的一切, 基本留给你了充足的可配置空间, 这样能最大化提高 Vim 的上限, 但是提高了 Vim 的配置门槛
命令模式下, 你也同样可以定义快捷键, 但是一般定义的快捷键, 是方便你更好的输入命令 比如帮助快速移动光标到输入框的行首或者行为
Operator Pending Mode(操作符追加模式) 这是一个强大的模式,意味这你可以将映射看成一个操作,并且将他们进行组合 一般是按下一个键, 等待下一个键按下的时候的映射
一些更特殊的模式
- 🟠 Select Mode(选择模式) > 说实话, 在很长一段时间呢, 我都不知道有这么一个模式, 当我第一次知道这个模式, 是我在编写插件时, 想知道为什么补全插件可以选中文本,然后我随便输入什么就替换了我选中的文本 之前介绍 Vim 的 Visual Mode 是不同于其他编辑器的选中模式, 而这个模式, 就是对标的其他编辑器的选中模式了 在这个模式下, 输入的文本字符, 都会作为实际的文本用于替换选中的文本(看介绍貌似是为了帮助习惯其他编辑器用户更好的迁移到 vim) 同样, 在这个模式下, 你也可以定义相应的映射, 来改变 Vim 内置的行为
- ⚫ Terminal Mode(终端模式) 在 Neovim 中, 是自带有终端的, 而在终端下, 这个模式, 就是在 Vim 内置终端里, 所执行的映射 使用场景比较有限, 所以这里介绍比较少,我是在使用 Terminal 插件时,定义了从终端回到编辑区而不关闭终端窗口的映射时用到
- 🟤 Others 等我想到了再补充吧
模式切换
约定:
/ 代表被划去
-> Mode 代表需要先经过[Mode]再转换
[abcd]代表按下 abcd 键均可以
From \ to | Insert | Normal | Visual | Command | Select |
---|---|---|---|---|---|
Insert | / | [<Esc><C-[>] | ->Normal | ->Normal | ->Visual |
Normal | [iIoOaA] | / | [vV] | : | ->Visual |
Visual | [IA] | <Esc> | / | : | <C-g> |
Command | ->Normal | <Esc> | <Esc> | / | ->Visual |
快捷键
怎样快速得到一组真随机序列? 让从未使用 vim 的人退出 vim
虽然这是一个笑话, 但是也反应了 vim 的一部分问题 大量的快捷键让 vim 的能力无比强大, 完全取代了鼠标, 但是也让 Vim 的使用变得难以理解, 初学者会对这样一个屏幕无从下手
对此, 我并不想做过多介绍 Vim 的各种模式下的操作, 因为互联网上对此的介绍实在是太多了
如果你对此还不熟悉, 你可以尝试以下步骤:
- 选择你一个你喜欢的搜索引擎或者视频网站
- 搜索 Vim 的使用方式, 你会得到大量的教学文章
- 选择最受欢迎的, 看一遍即可
- 看完感觉到困难是正常的,但是如果你慢慢向此迁移, 最后你会感受到全键盘流带来的舒适
最后, 我在这里贴一张 Vim 快捷键的速记图,
1 | 但是请记住: 快捷键是使用过程中记忆的, 不是全部记忆了再去使用 |
我的打算将文章的重点放在配置一个属于你自己的, 舒适的快捷键工作流上, 而不是告诉你使用快捷键, 如果你需要知道任何快捷键的作用,搜索引擎是你最好的帮手