Vim is a highly configurable text editor built to make creating and changing any kind of text very efficient.
为什么要学习 Vim
- Keyboard Driven, 使用 Vim,你可以专注于程序/文本,不会分散注意力;
- 极强的可定制性,可扩展性,使用 Vim,你可以打造一个独一无二的属于你自己的编辑器,在这一点上,我认为唯有 Emacs 可以与之较量;
- Vim 是一种文本操作的模式,因此,即使你不使用 Vim 编辑器,你也可以在其它编辑器(如 Vs Code, Jetbrains, Sublime, Emacs...)中使用 Vim,Enjoy both worlds!
- Vim 很有趣。
使用 Vim 的方式
- Vim Editor(支持 VimScript 配置)
- Neovim(支持 VimScript 和 Lua 配置)
- Emacs + evil 插件(个人认为最好的 Vim 插件) *
- Vscode + Vim 插件
- Vscode + Vscode-neovim 插件(个人推荐,可以原生支持绝大多数 Neovim 插件) *
- JetBrains + IdeaVim 插件(该插件很强大) *
Vim 四种模式
Insert Mode: 插入模式,类似于其他编辑器,用于文本的输入;Normal Mode: 普通模式,此模式下键盘上的所有按键均可以映射为命令;Visual Mode: 选择模式,可以选择文本,组合为可以操作的文本对象;Command Mode: 命令模式,在普通模式下输入:进入命令模式,可以执行一些预设的或自定义的方法,可以认为 Command Mode 属于 Normal Mode。
Vim 基础操作
输入i进入 Insert Mode,输入ESC进入 Normal Mode。
在 Normal Mode 下:
:q: 退出 Vim;:q!: 退出且不保存;:w: 保存;:wq: 保存之后退出;:saveas: 另存为;/: 搜索。
Vim 是一门操作文本的语言
可以把 Vim 视为一门专为操作文本而设计的语言,其包含着一般语言所具有的动词、修饰词、名词等。
动词
d: delete,删除;y: yank,复制;c: change,修改;>: indent,缩进;v/V: visual select,选择文本;- ...
名词
w: word,一个单词;): sentence,一句话;}: paragraph,一段话;t: tag,标签;- ...
修饰词
修饰词用于修饰名词,组合为可以操作的文本对象。
i: in,内部,如iw表示单词内部;a: around,周围;f: forward,向前搜索一个字符,如fo表示从当前点到o,包括o;t: to,向前搜索一个字符,如to表示从当前点到o,但不包括o;/: search,在当前 buffer 中搜索,如d/to<CR>表示删除从当前点到to的所有字符;Number: 数量修饰,如2w表示两个单词;- ...
Examples
dd: 删除当前行;cc: 修改当前行;yy: 复制当前行;>>: 缩进当前行;dw/diw: 删除一个单词;d): 删除一句话;d}: 删除一段话;d2w: 删除两个单词;yi": 复制 "" 内的文本;ct<: 修改当前点到<的文本。
移动
上下左右
j: 向下移动;k: 向上移动;h: 向左移动;l: 向右移动。
其他常用移动方法
* 向前:指光标右下侧;
* 向后:指光标左上侧。
0: 移动至行首;$: 移动至行尾;gg: 移动至文件顶端;G: 移动至文件结尾;f": 移动至"处,光标在";t": 移动至"处,光标在"前面;w: 向前移动一个单词;b: 向后移动一个单词;): 向前移动一句话;(: 向后移动一句话;}: 向前移动一段话;{: 向后移动一段话;- ...
撤销/复原
u: undo,撤销操作;Ctrl+r: 复原。
重复
.: dot,重复执行上一次操作;qa: 录制一个名为a的宏;@a: 执行宏a。
总结
本文涉及了 Vim 的一些基础操作,考虑到本文是为了使初学者适应 Vim,在 Vim 中“存活”,对于 Vim 的定制性、扩展性、在其他流行编辑器中的使用并未深入讨论,但我认为其已经足够强大到替代原有的编辑器了,希望读者阅读本文后,能够不再惧怕 Vim,享受 Vim。