Vim 入门:基础知识

学习如何使用 Vim,足以应付工作或新项目。
205 位读者喜欢这篇文章。
Person standing in front of a giant computer screen with numbers, data

Opensource.com

我记得第一次接触 Vim 的情景。那时我还是个大学生,计算机科学系实验室里的电脑都安装了 Ubuntu Linux。虽然早在大学之前我就接触过不同的 Linux 版本(比如 RHEL),甚至在大学之前(红帽在百思买卖它的 CD!),但这是我第一次需要经常使用 Linux 操作系统,因为我的课程要求我这样做。一旦我开始使用 Linux,就像之前和之后的许多人一样,我开始觉得自己像一个“真正的程序员”。

Real Programmers comic

真正的程序员,作者: xkcd

学生可以使用图形文本编辑器,如 Kate,它默认安装在实验室的电脑上。对于可以使用 shell 但不习惯基于控制台的编辑器的学生来说,流行的选择是 Nano,它提供了良好的交互式菜单和类似于 Windows 图形文本编辑器的体验。

我有时使用 Nano,但我听说了很多关于 Vi/VimEmacs 的很棒的事情,真的很想尝试一下(主要是因为它们看起来很酷,我也很好奇想知道它们到底有多棒)。第一次使用 Vim 吓了我一跳——我不想搞砸任何东西!但是一旦我掌握了窍门,事情就变得容易多了,我可以体会到编辑器强大的功能。至于 Emacs,好吧,我有点放弃了,但我很高兴我坚持使用了 Vim。

在本文中,我将(根据我的个人经验)介绍足够多的 Vim,以便您可以将其用作 Linux 系统上的编辑器。这既不会让你成为专家,甚至连 Vim 许多强大功能的皮毛都算不上。但是起点总是很重要的,我想让开始的体验尽可能容易,你可以自己探索其余的部分。

步骤 0:打开控制台窗口

在深入了解 Vim 之前,您需要做一些准备工作。从您的 Linux 操作系统打开一个控制台终端。(由于 Vim 也可在 MacOS 上使用,Mac 用户也可以使用这些说明。)

一旦终端窗口启动,输入 ls 命令以列出当前目录。然后,输入 mkdir Tutorial 创建一个名为 Tutorial 的新目录。通过输入 cd Tutorial 进入该目录。

Create a folder

准备工作就这些。现在是时候进入有趣的部分了——开始使用 Vim。

步骤 1:创建并关闭 Vim 文件而不保存

还记得我说过我一开始害怕使用 Vim 吗?嗯,可怕的部分是想,“如果我更改现有文件并搞砸了怎么办?”毕竟,几个计算机科学作业要求我修改现有文件。我想知道:如何在不保存更改的情况下打开和关闭文件?

好消息是您可以使用相同的命令在 Vim 中创建或打开文件:vim <FILE_NAME>,其中 <FILE_NAME> 代表您要创建或修改的目标文件名。让我们通过输入 vim HelloWorld.java 创建一个名为 HelloWorld.java 的文件。

你好,Vim!现在,这是 Vim 中一个非常重要的概念,可能是最需要记住的:Vim 有多种模式。以下是您需要了解的三个基本模式

模式 描述 
普通模式 默认;用于导航和简单编辑
插入模式 用于显式插入和修改文本
命令行模式 用于保存、退出等操作

Vim 还有其他模式,如可视模式、选择模式和 Ex 模式,但普通模式、插入模式和命令行模式对我们来说已经足够了。

您现在处于普通模式。如果您有文本,您可以使用箭头键或其他导航键(稍后您将看到)移动。为了确保您处于普通模式,只需按 Esc(Escape)键。

提示: Esc 切换到普通模式。即使您已经处于普通模式,也请按 Esc 以进行练习。

现在,这将很有趣。按 : (冒号键),然后按 q! (即 :q!)。 您的屏幕将如下所示

Editing Vim

在普通模式下按冒号会将 Vim 切换到命令行模式,而 :q! 命令会退出 Vim 编辑器而不保存。换句话说,您放弃了所有更改。您也可以使用 ZQ;选择任何更方便的选项。

一旦您按下 Enter,您应该不再处于 Vim 中。重复练习几次,只是为了掌握窍门。一旦您完成,请继续下一节,学习如何对此文件进行更改。

步骤 2:在 Vim 中进行和保存修改

通过输入 vim HelloWorld.java 并按下 Enter 键重新打开文件。插入模式是您可以对文件进行更改的地方。首先,按 Esc 确保您处于普通模式,然后按 i 进入插入模式。(是的,那是字母 i。)

在左下角,您应该看到 -- 插入 --。这意味着您处于插入模式。

Vim insert mode

输入一些 Java 代码。您可以输入任何您想要的内容,但这是一个供您参考的示例。 您的屏幕将如下所示

public class HelloWorld {
    public static void main(String[] args) {
    }
}

非常漂亮!请注意文本是如何以 Java 语法高亮颜色突出显示的。因为您以 Java 启动了文件,Vim 将检测语法颜色。

保存文件。按 Esc 离开插入模式并进入命令行模式。输入 :,然后输入 x! (即冒号后跟 x 和 !)。按 Enter 保存文件。您也可以输入 wq 来执行相同的操作。

现在您知道如何使用插入模式输入文本,以及如何使用 :x!:wq 保存文件。

步骤 3:Vim 中的基本导航

虽然您总是可以使用友好的上、下、左和右箭头按钮在文件中移动,但在几乎有无数行的大文件中,这将非常困难。能够在线内跳转也很有帮助。 虽然 Vim 有大量的出色导航功能,但我想向您展示的第一个功能是如何转到特定行。

Esc 键确保您处于普通模式,然后输入 :set number 并按 Enter

瞧!您会在每行左侧看到行号。

Showing Line Numbers

好的,您可能会说,“这很酷,但我如何跳转到某一行?”再次,确保您处于普通模式,然后按 :<LINE_NUMBER>,其中 <LINE_NUMBER> 是您要转到的行号,然后按 Enter。尝试移动到第 2 行。 

:2

现在移动到第 3 行。

Jump to line 3

但是想象一下,您正在处理一个 1,000 行的文件,并且您想要转到文件末尾的情况。您如何到达那里?确保您处于普通模式,然后输入 :$ 并按 Enter

您将在最后一行!

既然您知道如何在行之间跳转,作为奖励,让我们学习如何移动到行尾。确保您位于带有文本的行上,例如第 3 行,然后输入 $

Go to the&nbsp;last character

您现在位于行中的最后一个字符。在本例中,左大括号突出显示以显示光标移动到的位置,右大括号突出显示是因为它是左大括号的匹配字符。

这就是 Vim 中的基本导航。等等,先别退出文件。让我们转到 Vim 中的基本编辑。不过,请随意喝一杯咖啡或茶。

步骤 4:Vim 中的基本编辑

现在您知道如何通过跳到您想要的行来在文件中导航,您可以使用这项技能在 Vim 中进行一些基本编辑。切换到插入模式。(还记得如何操作吗,按 i 键?) 当然,您可以使用键盘删除或插入字符进行编辑,但 Vim 提供了更快捷的文件编辑方式。

移动到第 3 行,其中显示 public static void main(String[] args) {。连续快速按两次 d 键。是的,那是 dd。如果您成功执行此操作,您将看到如下所示的屏幕,其中第 3 行消失了,并且后面的每一行都向上移动了一行(即,第 4 行变为第 3 行)。

Deleting A Line

那是删除命令。别害怕!按 u 您将看到已删除的行已恢复。唷。这是撤消命令。

Undoing a change in Vim

下一个课程是学习如何复制和粘贴文本,但首先,您需要学习如何在 Vim 中突出显示文本。按 v 并移动您的左和右箭头按钮来选择和取消选择文本。当您向他人展示代码并想要标识您希望他们看到的代码时,此功能也非常有用。

Highlighting text in Vim

移动到第 4 行,其中显示 System.out.println("Hello, Opensource");。突出显示第 4 行的所有内容。 完成了吗?好的,当第 4 行仍然突出显示时,按 y。这称为复制模式,它会将文本复制到剪贴板。接下来,通过输入 o 在下面创建一个新行。请注意,这将使您进入插入模式。按 Esc 退出插入模式,然后按 p,代表粘贴。这会将从第 3 行复制的文本粘贴到第 4 行。

Pasting in Vim

作为练习,重复这些步骤,但也要修改您新创建的行上的文本。此外,请确保这些行对齐良好。

提示: 您需要在插入模式和命令行模式之间来回切换才能完成此任务。

完成后,使用 x! 命令保存文件。 这就是 Vim 中的基本编辑的全部内容。

步骤 5:Vim 中的基本搜索

想象一下,您的团队负责人希望您更改项目中的文本字符串。您如何快速做到这一点?您可能想要使用某个关键字搜索行。

Vim 的搜索功能非常有用。通过 (1) 按 Esc 键,然后 (2) 按冒号 : 键进入命令行模式。 我们可以通过输入 :/<SEARCH_KEYWORD> 搜索关键字,其中 <SEARCH_KEYWORD> 是您要查找的文本字符串。 在这里,我们搜索关键字字符串“Hello”。在下图中,缺少冒号,但它是必需的。

Searching in Vim

但是,一个关键字可能会出现多次,而这可能不是您想要的那个。那么,您如何导航以找到下一个匹配项?您只需按 n 键,代表下一个。确保在执行此操作时您没有处于插入模式!

奖励步骤:在 Vim 中使用拆分模式

这几乎涵盖了所有 Vim 基础知识。但是,作为奖励,我想向您展示一个很酷的 Vim 功能,称为拆分模式

退出 HelloWorld.java 并创建一个新文件。在终端窗口中,输入 vim GoodBye.java 并按 Enter 创建一个名为 GoodBye.java 的新文件。

输入任何您想要的文本;我决定输入“Goodbye”。保存文件。(请记住,您可以在命令行模式下使用 :x!:wq。)

在命令行模式下,输入 :split HelloWorld.java,看看会发生什么。

Split mode in Vim

哇!看看那个!split 命令创建了水平分割的窗口,上面是 HelloWorld.java,下面是 GoodBye.java。您如何切换窗口?按住 Control (在 Mac 上)或 CTRL (在 PC 上),然后按 ww(即连续按两次 w)。 

作为最后的练习,尝试通过从 HelloWorld.java 复制和粘贴来编辑 GoodBye.java 以匹配下图。

Modify GoodBye.java file in Split Mode

保存这两个文件,您就完成了!

提示 1: 如果您想垂直排列文件,请使用命令 :vsplit <FILE_NAME> (而不是 :split <FILE_NAME>,其中 <FILE_NAME> 是您想要在拆分模式下打开的文件的名称。

提示 2: 您可以通过根据需要调用任意数量的附加 splitvsplit 命令来打开两个以上的文件。尝试一下,看看它是什么样子。

Vim 速查表

在本文中,您学习了如何使用 Vim,足以应付工作或项目。但这只是您解锁 Vim 强大功能的旅程的开始。务必查看 Opensource.com 上的其他精彩教程和技巧。

为了让事情变得更容易,我将您学到的所有内容总结为 一份方便的速查表

User profile image.
Bryant Jimin Son 是一名 Octocat,虽然这不是正式头衔,但他喜欢被这样称呼,在 GitHub 工作,这是一家以托管世界上大多数开源项目而闻名的公司。在工作中,他正在探索不同的 git 技术、GitHub Actions、GitHub 安全等。此前,他曾在红帽担任高级顾问,红帽是一家以其 Linux 服务器和开源贡献而闻名的科技公司。

6 条评论

对于新用户来说,最好使用 :q 而不是 :q!,因为前者会在您没有保存文件时发出警告。同样,:w 会写入文件,但如果您要覆盖一些不是您打开的现有文件,则会发出警告。

谢谢 André,您的赞美和分享的优秀资源。我会看看它们,看看我是否有机会将它们包含在未来的写作中,或者随时为 Opensource.com 博客做出贡献。我也同意关于 VIM 有很多东西要学习 :)

回复 作者 André Jaenisch (未验证)

太棒了!....非常感谢您!....我多年来一直试图掌握 Vim!....但至少现在?....我有一个可以构建的命令和操作基线...您太棒了!...

干杯!

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.