提升你的Vim技能的5种方法

通过一些有趣的技巧来提升你的文本编辑器。
106 位读者喜欢这个。
How do we fix the state of technical documentation?

Victor 通过 Flickr. CC BY 2.0

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 的 "模式" 的概念非常重要,特别是 NormalInsert 模式之间的区别。 对模式的困惑是让大多数新用户绊倒的原因。 模式不是 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 中的拆分、选项卡和终端

有两种方法可以将你的工作文件拆分为不同的视图:它们可以并排显示,或者你可以使用应用程序选项卡在完整(窗口)屏幕之间切换。 对你的应用程序窗口的这些更改是从命令行模式启动的,这需要一个冒号 (:) 来调出提示符。

每个窗口拆分都可以托管一个用于编辑的文件,并且你可以随意安排选项卡以在其他文件之间切换。 拆分可用的屏幕空间有限,因此当你想要拆分更多屏幕时,选项卡非常方便。 你如何决定工作完全取决于个人喜好。 要水平拆分窗口,请使用 :sp,要垂直拆分,请使用 :vs

Vim 8.2 开始,你可以使用 :vert term 在垂直拆分中打开一个终端 shell 子进程,以便在代码旁边运行命令行操作。 你需要键入 exit 来关闭你的终端进程,就像你结束 shell 会话一样,但是你可以使用 :q 关闭任何普通的 Vim 窗口一样关闭拆分和选项卡。

要初始化一个选项卡,请使用一个特殊的编辑命令::tabedit,它会自动将你切换到新的打开的选项卡。 如果你给命令一个文件名作为参数,该文件将打开以进行编辑。 如果你忽略给它一个文件名作为参数,那么命令行模式编辑 :e filename.txt 的工作方式与它在任何普通的 Vim 窗口中的工作方式完全相同。 使用下一个 (:tabn) 和上一个 (:tabp) 命令导航选项卡。

多年来,我一直想学习 Vim,现在它是我的首选 Linux 文本编辑器,也是开发人员和系统管理员最喜欢的开源工具。 当我说学习时,我…

使用这五个用于编写代码的插件扩展 Vim 的功能并改进你的工作流程。

Vim

很棒的文章,我也使用 Vim,而且很容易学习它的基础知识。 Vim 帮助我更快地完成工作,这篇文章将帮助我提升我的技能。

设置 zsh 默认值与更改默认 EDITOR 重复了。

对于像我这样的 Vim 新手来说,这是一篇不错的文章。 谢谢。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.