Vim 入门:基础

Vim 入门:基础

为工作或者新项目学习足够的 Vim 知识。

-- Bryant Son

我还清晰地记得我第一次接触 Vim 的时候。那时我还是一名大学生,计算机学院的机房里都装着 Ubuntu 系统。尽管我在上大学前也曾接触过不同的 Linux 发行版(比如 RHEL —— Red Hat 在百思买出售它的 CD),但这却是我第一次要在日常中频繁使用 Linux 系统,因为我的课程要求我这样做。当我开始使用 Linux 时,正如我的前辈和将来的后继者们一样,我感觉自己像是一名“真正的程序员”了。

Vim 入门:基础

真正的程序员,来自 xkcd

学生们可以使用像 Kate 一样的图形文本编辑器,这也安装在学校的电脑上了。对于那些可以使用 shell 但不习惯使用控制台编辑器的学生,最流行的选择是 Nano ,它提供了很好的交互式菜单和类似于 Windows 图形文本编辑器的体验。

我有时会用 Nano,但当我听说 Vi/Vim 和 Emacs 能做一些很棒的事情时我决定试一试它们(主要是因为它们看起来很酷,而且我也很好奇它们有什么特别之处)。第一次使用 Vim 时吓到我了 —— 我不想搞砸任何事情!但是,一旦我掌握了它的诀窍,事情就变得容易得多,我就可以欣赏这个编辑器的强大功能了。至于 Emacs,呃,我有点放弃了,但我很高兴我坚持和 Vim 在一起。

在本文中,我将介绍一下 Vim(基于我的个人经验),这样你就可以在 Linux 系统上用它来作为编辑器使用了。这篇文章不会让你变成 Vim 的专家,甚至不会触及 Vim 许多强大功能的皮毛。但是起点总是很重要的,我想让开始的经历尽可能简单,剩下的则由你自己去探索。

第 0 步:打开一个控制台窗口

在使用 Vim 前,你需要做一些准备工作。在 Linux 操作系统打开控制台终端。(因为 Vim 也可以在 MacOS 上使用,Mac 用户也可以使用这些说明)。

打开终端窗口后,输入 ls 命令列出当前目录下的内容。然后,输入 mkdir Tutorial 命令创建一个名为 Tutorial 的新目录。通过输入 cd Tutorial 来进入该目录。

Vim 入门:基础

Create a folder

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

第 1 步:创建一个 Vim 文件和不保存退出

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

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

你好,Vim!现在,讲一下 Vim 中一个非常重要的概念,可能也是最需要记住的:Vim 有多种模式,下面是 Vim 基础中需要知道的的三种:

模式描述正常模式默认模式,用于导航和简单编辑插入模式用于直接插入和修改文本命令行模式用于执行如保存,退出等命令

Vim 也有其他模式,例如可视模式、选择模式和命令模式。不过上面的三种模式对我们来说已经足够用了。

你现在正处于正常模式,如果有文本,你可以用箭头键移动或使用其他导航键(将在稍后看到)。要确定你正处于正常模式,只需按下 esc (Escape)键即可。

提示: Esc 切换到正常模式。即使你已经在正常模式下,点击 Esc 只是为了练习。

现在,有趣的事情发生了。输入 : (冒号键)并接着 q! (完整命令::q!)。你的屏幕将显示如下:

Vim 入门:基础

Editing Vim

在正常模式下输入冒号会将 Vim 切换到命令行模式,执行 :q! 命令将退出 Vim 编辑器而不进行保存。换句话说,你放弃了所有的更改。你也可以使用 ZQ 命令;选择你认为更方便的选项。

一旦你按下 Enter (回车),你就不再在 Vim 中。重复练习几次来掌握这条命令。熟悉了这部分内容之后,请转到下一节,了解如何对文件进行更改。

第 2 步:在 Vim 中修改并保存

通过输入 vim HelloWorld.java 和回车键来再次打开这个文件。你可以在插入模式中修改文件。首先,通过 Esc 键来确定你正处于正常模式。接着输入 i 来进入插入模式(没错,就是字母 i)。

在左下角,你将看到 -- INSERT --,这标志着你这处于插入模式。

Vim 入门:基础

Vim insert mode

写一些 Java 代码。你可以写任何你想写的,不过这也有一份你可以参照的例子。你的屏幕将显示如下:

public class HelloWorld {

public static void main([String][11][] args) {

}

}

非常漂亮!注意文本是如何在 Java 语法中高亮显示的。因为这是个 Java 文件,所以 Vim 将自动检测语法并高亮颜色。

保存文件:按下 Esc 来退出插入模式并进入命令行模式。输入 : 并接着 x! (完整命令::x!),按回车键来保存文件。你也可以输入 wq 来执行相同的操作。

现在,你知道了如何使用插入模式输入文本并使用以下命令保存文件::x! 或者 :wq。

第 3 步:Vim 中的基本导航

虽然你总是可以使用上箭头、下箭头、左箭头和右箭头在文件中移动,但在一个几乎有数不清行数的大文件中,这将是非常困难的。能够在一行中跳跃光标将会是很有用的。虽然 Vim 提供了不少很棒的导航功能,不过在一开始,我想向你展示如何在 Vim 中到达某一特定的行。

单击 Esc 来确定你处于正常模式,接着输入 :set number 并键入回车。

瞧!你现在可以在每一行的左侧看到行号。

Vim 入门:基础

Showing Line Numbers

好,你也许会说,“这确实很酷,不过我该怎么跳到某一行呢?”再一次的,确认你正处于正常模式。接着输入 :<LINE_NUMBER>,在这里 <LINE_NUMBER> 是你想去的那一行的行数。按下回车键来试着移动到第二行。

:2

现在,跳到第三行。

Vim 入门:基础

Jump to line 3

但是,假如你正在处理一个一千多行的文件,而你正想到文件底部。这该怎么办呢?确认你正处于正常模式,接着输入 :$ 并按下回车。

你将来到最后一行!

现在,你知道如何在行间跳跃了,作为补充,我们来学一下如何移动到一行的行尾。确认你正处于有文本内容的一行,如第三行,接着输入 $。

Vim 入门:基础

Go to the last character

你现在来到这行的最后一个字节了。在此示例中,高亮左大括号以显示光标移动到的位置,右大括号被高亮是因为它是高亮的左大括号的匹配字符。

这就是 Vim 中的基本导航功能。等等,别急着退出文件。让我们转到 Vim 中的基本编辑。不过,你可以暂时顺便喝杯咖啡或茶休息一下。

第 4 步:Vim 中的基本编辑

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

来到第三行,这里的代码是 public static void main(String[] args) {。双击 d 键,没错,就是 dd。如果你成功做到了,你将会看到,第三行消失了,剩下的所有行都向上移动了一行。(例如,第四行变成了第三行)。

Vim 入门:基础

Deleting A Line

这就是 删除(delete)命令。不要担心,键入 u,你会发现这一行又回来了。喔,这就是 撤销(undo)命令。

Vim 入门:基础

Undoing a change in Vim

下一课是学习如何复制和粘贴文本,但首先,你需要学习如何在 Vim 中突出显示文本。按下 v 并向左右移动光标来选择或反选文本。当你向其他人展示代码并希望标识你想让他们注意到的代码时,这个功能也非常有用。

Vim 入门:基础

Highlighting text in Vim

来到第四行,这里的代码是 System.out.println("Hello, Opensource");。高亮这一行的所有内容。好了吗?当第四行的内容处于高亮时,按下 y。这就叫做 复制(yank)模式,文本将会被复制到剪贴板上。接下来,输入 o 来创建新的一行。注意,这将让你进入插入模式。通过按 Esc 退出插入模式,然后按下 p,代表 粘贴(paste)。这将把复制的文本从第三行粘贴到第四行。

Vim 入门:基础

Pasting in Vim

作为练习,请重复这些步骤,但也要修改新创建的行中的文字。此外,请确保这些行对齐工整。

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

当你完成了,通过 x! 命令保存文件。以上就是 Vim 基本编辑的全部内容。

第 5 步:Vim 中的基本搜索

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

Vim 的搜索功能非常有用。通过 Esc 键来进入命令模式,然后输入冒号 :,我们可以通过输入 /<SEARCH_KEYWORD> 来搜索关键词, <SEARCH_KEYWORD> 指你希望搜索的字符串。在这里,我们搜索关键字符串 Hello。在下面的图示中没有显示冒号,但这是必须输入的。

Vim 入门:基础

Searching in Vim

但是,一个关键字可以出现不止一次,而这可能不是你想要的那一个。那么,如何找到下一个匹配项呢?只需按 n 键即可,这代表 下一个(next)。执行此操作时,请确保你没有处于插入模式!

附加步骤:Vim 中的分割模式

以上几乎涵盖了所有的 Vim 基础知识。但是,作为一个额外奖励,我想给你展示 Vim 一个很酷的特性,叫做 分割(split)模式。

退出 HelloWorld.java 并创建一个新文件。在控制台窗口中,输入 vim GoodBye.java 并按回车键来创建一个名为 GoodBye.java 的新文件。

输入任何你想输入的让内容,我选择输入 Goodbye。保存文件(记住你可以在命令模式中使用 :x! 或者 :wq)。

在命令模式中,输入 :split HelloWorld.java,来看看发生了什么。

Vim 入门:基础

Split mode in Vim

Wow!快看! split 命令将控制台窗口水平分割成了两个部分,上面是 HelloWorld.java,下面是 GoodBye.java。该怎么能在窗口之间切换呢? 按住 Control 键(在 Mac 上)或 Ctrl 键(在 PC 上),然后按下 ww (即双击 w 键)。

作为最后一个练习,尝试通过复制和粘贴 HelloWorld.java 来编辑 GoodBye.java 以匹配下面屏幕上的内容。

Vim 入门:基础

Modify GoodBye.java file in Split Mode

保存两份文件,成功!

提示 1: 如果你想将两个文件窗口垂直分割,使用 :vsplit <FILE_NAME> 命令。(代替 :split <FILE_NAME> 命令,<FILE_NAME> 指你想要使用分割模式打开的文件名)。

提示 2: 你可以通过调用任意数量的 split 或者 vsplit 命令来打开两个以上的文件。试一试,看看它效果如何。

Vim 速查表

在本文中,您学会了如何使用 Vim 来完成工作或项目,但这只是你开启 Vim 强大功能之旅的开始,可以查看其他很棒的教程和技巧。

为了让一切变得简单些,我已经将你学到的一切总结到了 一份方便的速查表 中。

上一篇:使用LeakCanary进行内存泄漏追踪


下一篇:Objective-C Autorelease Pool 的实现原理