Vim入门:基础知识

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

Opensource.com

我记得第一次接触Vim的时候。我还是个大学生,计算机科学系实验室里的电脑都安装了Ubuntu Linux。虽然早在大学之前我就接触过不同的Linux版本(比如RHEL)(Red Hat在百思买卖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基本操作

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

Vim有其他模式,如可视(Visual)、选择(Select)和Ex模式,但普通(Normal)、插入(Insert)和命令行(Command Line)模式对我们来说就足够了。

你现在处于普通(Normal)模式。如果你有文本,你可以使用你的箭头键或其他导航键进行移动(你稍后会看到)。要确保你处于普通(Normal)模式,只需点击Esc(Escape)键。

提示: Esc切换到普通(Normal)模式。即使你已经处于普通(Normal)模式,也请点击Esc,只是为了练习。

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

Editing Vim

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

一旦你按下Enter,你就不应该再在Vim中了。重复练习几次,只是为了掌握它。一旦你完成了,继续到下一节,学习如何更改这个文件。

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

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

在左下角,你应该看到-- INSERT --。这意味着你处于插入(Insert)模式。

Vim insert mode

输入一些Java代码。你可以输入任何你想要的东西,但这里有一个例子供你参考。你的屏幕将如下所示

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

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

保存文件。点击Esc离开插入(Insert)模式并进入命令行(Command Line)模式。键入:,然后键入x!(即冒号,然后是x和!)。点击Enter保存文件。你也可以输入wq来执行相同的操作。

现在你知道如何使用插入(Insert)模式输入文本,并使用:x!:wq保存文件。

步骤3:Vim中的基本导航

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

Esc键以确保你处于普通(Normal)模式,然后键入:set number并按Enter

瞧!你在每一行的左侧都看到了行号。

Showing Line Numbers

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

:2

现在移动到第3行。

Jump to line 3

但想象一下,你正在处理一个有1,000行的文件,并且你想转到文件的末尾。你如何到达那里?确保你处于普通(Normal)模式,然后键入:$并按Enter

你将位于最后一行!

现在你已经知道如何在行之间跳转,作为一个奖励,让我们学习如何移动到一行的末尾。确保你在一行带有文本的行上,比如第3行,然后键入$

Go to the&nbsp;last character

你现在位于该行的最后一个字符。在本例中,突出显示了左花括号以显示你的光标移动到的位置,并且突出显示了右花括号,因为它与左花括号匹配。

Vim中的基本导航就到此为止。等等,不要退出文件。让我们进入Vim中的基本编辑。不过,随意去喝一杯咖啡或茶。

步骤4:Vim中的基本编辑

现在你已经知道如何通过跳到你想要的行来在文件中导航,你可以使用该技能在Vim中进行一些基本编辑。切换到插入(Insert)模式。(还记得怎么做吗,通过点击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。这称为yank模式,它会将文本复制到剪贴板。接下来,通过输入o在下面创建一个新行。请注意,这会将你置于插入(Insert)模式。通过按Esc退出插入(Insert)模式,然后点击p,它代表paste。这会将第3行中的复制文本粘贴到第4行。

Pasting in Vim

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

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

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

步骤 5: Vim 中的基本搜索

假设您的团队领导希望您更改项目中的文本字符串。您如何快速完成?您可能想要使用某个关键字来搜索该行。

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

Searching in Vim

但是,一个关键字可能会出现多次,而这可能不是您想要的那个。那么,如何浏览找到下一个匹配项呢?只需按 n 键,它代表 *next*(下一个)。 确保您在执行此操作时不在插入模式下!

奖励步骤:在 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 是 GitHub 的一只 Octocat,这虽然不是正式头衔,但他喜欢这样称呼自己。 GitHub 是一家以托管世界上大多数开源项目而闻名的公司。 在工作中,他正在探索不同的 git 技术、GitHub Actions、GitHub 安全性等。 之前,他是 Red Hat 的高级顾问,Red Hat 是一家以其 Linux 服务器和开源贡献而闻名的技术公司。

6 条评论

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

感谢 Andre 的赞美,也感谢分享很棒的资源。 我会看看它们,看看是否有机会将它们包含在未来的写作中,或者也可以随意为 Opensource.com 博客做出贡献。 我也同意有很多关于 VIM 的知识要学习 :)

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

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

干杯!

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