Vim 是最流行的文本编辑器之一,因此绝对值得花时间学习如何使用它。 如果你只能学会用无处不在的 Vi(m) 命令行文本编辑器打开文件,输入和编辑一些文本,保存编辑后的文件以及退出程序,你也会从中受益匪浅。
在几乎总是需要运行远程 shell 操作的情况下,你会发现了解 Vim 非常方便。 如果你经常使用安全 shell:
$ ssh user@hostname.provider.com
并使用虚拟专用服务器 (VPS) 或本地虚拟化容器,那么精通 Vim 技能将使你受益匪浅。
将 Vim 设置为你的默认文本编辑器
Vim 几乎可以在所有现代 Linux(或 BSD)发行版的终端模拟器 shell 命令提示符中使用。 一旦你将 Vim 定义为用户 shell 中的默认编辑器,你就可以使用熟悉的 Vim 键绑定来浏览内置实用程序,如 $ man。 我将解释如何在 Bash 和 Z shell (zsh) 中做到这一点,zsh 现在是 macOS 用户的默认 shell(自 Catalina 以来)。
在 Bash 中将 Vim 设置为默认值
Bash 通过点文件管理设置。 最常见的是将你喜欢的编辑器添加到你主目录中的 .bashrc 文件中,但也可以添加到 .bash_profile 中。 (阅读 GNU Bash 文档以了解差异)。
通过将以下内容添加到 ~/.bashrc 中,将 Vim 设置为你的默认编辑器
# set default editor to Vim
export EDITOR=vim
以 # 开头的行是可选注释,这是一种提醒自己命令作用的好方法。
在 Zsh 中将 Vim 设置为默认值
Zsh 是一种越来越流行的终端模拟器,尤其是在 Apple 基于 FreeBSD 的 Darwin 系统最近从 Bash 切换到 zsh 之后。
zsh 点文件与 Bash 的点文件相似,因此你可以选择 ~/.zshrc 或 ~/.zprofile。 有关何时使用哪个的详细信息,请参阅 zsh 文档。
使用以下命令将其设置为默认值
# set default editor to Vim
export EDITOR=vim
优化你的 Vim 配置
Vim 就像终端模拟器 shell 一样,使用点文件来设置个人偏好。 如果你发现了规律,你可能已经猜到它是 ~/.vimrc。
你可能想要更改的第一个设置是将旧版 Vi 兼容模式切换为关闭。 由于 Vim 是 Vi 的超集,Vi 中的所有内容都可以在 Vim 中使用并得到极大改进,并且你还可以获得许多高级功能。 最新版本 (8.2) 允许你打开一个终端作为在拆分窗口中运行的子进程 shell。
顺便说一句,关闭旧版兼容性可能看起来没有任何作用(事实上,可能确实如此)。 当 Vim 遇到 .vimrc 文件时,它会自动将模式切换为关闭。 有时显式关闭它仍然很重要。 速记 "nocp" 与 "nocompatible" 同义,后者也有效。 有很多 "TIMTOWTDI" 方便你在工作时切换首选项。
以 " 开头的行是 .vimrc 语法中的注释(就像 .bashrc 文件中的 # 一样)。 它们可以帮助你记住为什么选择一个神秘的设置名称。
要关闭 Vi 兼容性,请将以下内容添加到你的 ~/.vimrc 文件中
" ensure that legacy compatibility mode is off
" documentation: http://vimdoc.sourceforge.net/htmldoc/options.html#'compatible'
set nocp
理解模式
Vim 的 "模式" 的概念非常重要,特别是 Normal 和 Insert 模式之间的区别。 对模式的困惑是让大多数新用户绊倒的原因。 模式不是 Vim 独有的,也不是 Vi 引入的。 命令模式非常古老,甚至早于 20 世纪 70 年代的 复制和粘贴 功能的发明。
重要模式
Vim 依赖于不同的模式来定义按键行为。 需要了解的重要模式有
- Normal mode: 主要用于导航和打开文件的默认模式
- Insert mode (包括 Replace): Vim 允许向打开的文件输入文本的地方
- Visual mode: Vim 的行为类似于基于鼠标的输入,例如复制、编辑、替换等
- Command mode (包括 Line、Ex command 和 Last-line mode): 在 Vim 中执行更多操作的强大方法
每种模式都有很多值得探索的地方。 使用 Vimtutor ($ vimtutor) 交互式地学习移动、模式以及在 "Last Line" 模式下运行 Ex 命令。 一些不可或缺的生产力运算符包括
:E | 打开资源管理器以查找文件和目录 |
. | . |
; | 重复上一次编辑操作 |
, | 向前重复上一次移动或运动 |
/ | 向后重复上一次移动或运动 |
? | / |
* | 向前搜索文档 |
# | ? |
~ | 向后搜索文档 |
% | * |
查找光标下单词的下一个出现位置 | # |
查找光标下单词的上一个出现位置
~
切换大小写
%
在打开和关闭 ()、[] 和 {} 之间切换; 对编码非常有用
z=
提供拼写建议
像弹钢琴一样玩 Vim
虽然将 Vim 的运算符 "语言" 牢记在心很重要,但掌握的关键是学会像音乐家一样思考,并将运算符和移动组合成 "和谐的和弦",这样你就可以像弹钢琴一样玩 Vim。 这就是使用 Vim 进行文本操作的能力可以与另一个著名的命令行编辑器 Emacs 相媲美的地方。 (虽然其中一个编辑器会磨损你的 Esc 键,但使用另一个编辑器会磨损你的 Ctrl 键。)
在描述键和弦时,Vim 惯例使用大写字母 C 后跟一个连字符 (C-) 来表示 Ctrl 键。 这不是通用的,但我将从此处开始遵循该惯例,并在存在任何潜在混淆时进行澄清。
如果你在 Vim 中输入长行,你将需要将其设置为自动换行文本。 要开始根据你的工作方式个性化 Vim,请考虑该设置:你希望 Vim 在启动时如何默认处理文本换行? 开启还是关闭? 我喜欢将其关闭,并将其从运行时命令文件中删除。 当我想要文本换行时,我只需使用 :set wrap 在命令行模式下设置它。
默认情况下将 Vim 设置为换行文本没有任何问题。 这仅仅是一个偏好的问题 - 随着时间的推移可能会发生变化。 处理粘贴、代码语言缩进语法以及 Tab 键(制表符还是空格? 以及然后多少个空格?深入研究这些选项 这里)。 所有这些默认行为选项都是完全可配置的,并且可以在你使用命令行模式操作时实时更改。
你将在社区论坛、Vim wiki 和文章(如本文)中找到许多关于设置 Vim 默认值的建议。 设置你的个人计算环境的首选项应该对你来说相当熟悉,Vim 也不例外。 我强烈建议你首先对你的设置进行非常小的更改,并缓慢地进行其他更改,以便你可以轻松地恢复设置。 这样,你可能会避免使用插件多年 - 甚至完全避免使用插件。
Vim 8.2 中的拆分、选项卡和终端
有两种方法可以将你的工作文件拆分为不同的视图:它们可以并排显示,或者你可以使用应用程序选项卡在完整(窗口)屏幕之间切换。 对你的应用程序窗口的这些更改是从命令行模式启动的,这需要一个冒号 (:) 来调出提示符。
使用这五个用于编写代码的插件扩展 Vim 的功能并改进你的工作流程。