你需要知道的最低限度的 vi(m) 知识

Vim 或 vi 是一种命令行文本编辑器。可以说,它能做很多事。

有人会说,太多了。就像一个老笑话说的那样,你可以一边靠在键盘上,一边使用这个该死的东西,无论你敲到什么,它都会有实际意义。

我个人并不拥护 vim 作为我的首选文本编辑器。

不过,在命令行中拥有一个功能适中的文本编辑器还是非常有益的。无论你是想使用 git,还是必须通过 ssh 登录服务器并编辑某些内容,甚至在某些情况下使用数据库也会变得更容易。

本文并非关于 vim 或 vi 的完整教程。毕竟网上已经有很多 “速查表 “了。

但如果你看过其中的一些,就会发现它们看起来很吓人,让人不知所措。

本文的目的是教你一些非常基础的东西。这样,当你想学习更高级的操作时,你就可以使用 vim,也不会感到那么不知所措了。

VI 与 VIM

在本文中,vi 和 vim 没有区别。

vim 是 “vi 改进版 “的缩写,它在 vi 的基础上增加了许多功能,如代码高亮等,但这些功能与我们无关,我们只想知道最基本的功能。

在本文的其余部分,我将使用 vim,因为我预计你的大多数机器都会自带 vim,但如果你的环境只有 vi,那就使用它吧。

使用 vim

 

vi vim 速查表 图 1:可视化的 vim 基本命令

图 1:可视化的 vim 基本命令

Vim 模式

我保证图 1 看上去比实际更吓人。

简而言之,vim 有三种模式:

  • 普通模式,通过按快捷键输入指令
  • 插入模式,你可以在文件中实际输入指令
  • 命令模式,在此模式下执行键入的命令

第一次进入 vim 时,它处于 “普通模式”。这不是你可以键入的模式,这也是大多数初次使用 vim 的用户会感到困惑的地方。

aA 是两个不同的命令,i IpP 等也是如此。

移动光标

您可以在文件中移动光标。方向键很有用,但还有其他一些组合键可以跳转到特定位置。

我认为最有用的组合键是 gg G,可分别跳转到文件的第一行和最后一行。

输入

您可以通过按某些键从普通模式切换到编辑模式,例如按 i 键可以从光标所在的位置开始打字,按 A 键可以从光标所在行的末尾开始打字。

在编辑模式下,按下 ESC 键即可返回正常模式。

撤销和重做

在普通模式中:

  • u – 撤销
  • CTRL+r – 重做

很简单。

保存

要从普通模式切换到命令模式,请按:(然后用 ESC 或 CTRL+c 返回正常模式)。

在命令模式下,键入命令,然后用回车确认。

您需要知道的命令有

  • :w 保存文件,但保留在 vim 中
  • :wq 保存文件并退出 vim
  • :cq 不保存文件,并提示错误退出 vim

例如,最后一种方法在使用 git 时非常有用。比方说,你正在交互式地重新编译,发现在重新编译之前忘了做什么,这时 :cq 会带着提示错误退出 vim,并取消 git rebase 命令。

剪切和粘贴

从技术上讲,我们可以说你知道如何在文档中移动,知道如何编辑文档,知道如何保存或放弃更改。这已经是 “最基本的 “了。

不过,我还是忍不住要告诉你我最喜欢的 vim 功能:剪切和粘贴。

  • dd 剪切一行
  • dw 剪切一个单词
  • pP 会将剪切的内容再次粘贴到光标之前/之后

我为什么这么喜欢这个功能呢?

在使用 git 的过程中,我经常进行重置,而且总是以交互方式进行。

例如,如果我需要把第一个单词 “pick  “改成 “e “,我可以把光标放在该行上,然后点击

  1. dw – 删除单词 pick
  2. i – 进入编辑模式
  3. e -(包括空格)在提交哈希值前面输入编辑指令
  4. ESC – 返回正常模式

这非常快捷。使用几次后,就会很自然了。

或者,如果我需要从 rebase 待办事项列表中移除一个提交,只需简单的

  • dd – 删除该行

就可以了。

如果我想重新排列行,可以使用 pP 将该行添加到我选择的位置。

搜索

搜索功能并非 “最基本”,但也是一项非常有用的基本功能。

在普通模式下,按”/“键进入搜索。

然后输入要搜索的内容,并用回车确认。

从技术上讲,您仍处于正常模式,但现在可以使用 n N 分别跳转到搜索模式的下一个和上一个出现点。

默认情况下,搜索是区分大小写的。命令

  • :set ic – 使搜索忽略大小写
  • :set noic – 使搜索不忽略大小写

对于更高级的用户,regex 搜索是通过将 regex 包装成 \v(...) 来实现的,例如,要查找一个四位数字,可以输入

/\v(\d{4})

 

本文文字及图片出自 The minimum vi(m) you need to know

阅读余下内容
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号