Vim 入门：基础
为工作或者新项目学习足够的 Vim 知识。
vim vi
115.60.83.187
文章不错，编辑的也不错，汉字上面有英文提示是如何实现的，
逍遥养生605 [Firefox 66.0|Windows 10]
2019-04-22T18:57:03.000
61.148.68.166
&lt;ruby&gt;分割&lt;rt&gt;split&lt;/rt&gt;&lt;/ruby&gt;
来自北京的 Chrome 62.0|Windows 7 用户
2019-04-24T15:49:32.000
183.157.72.30
厉害了
来自浙江杭州的 Chrome 74.0|Windows 10 用户
2019-04-28T22:11:39.000
223.104.63.94
好
来自223.104.63.94的 WeChat 7.0|Android 用户
2019-04-30T09:42:07.000
113.5.3.59
确实是很实用的基础功能，很适合新手上手，给一个赞，支持用心编辑的文章。
来自黑龙江哈尔滨的 Chrome 73.0|Windows 10 用户
2019-05-06T09:44:19.000
49.81.205.233
ADFA
来自江苏徐州的 Chrome 72.0|Windows 7 用户
2019-05-17T09:43:48.000
为工作或者新项目学习足够的 Vim 知识。

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


![](/data/attachment/album/201904/20/104238gvg444k5tbm4gqt5.jpg)


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


![Real Programmers comic](/data/attachment/album/201904/20/104307h6o5ntn9h225onn0.jpg "Real Programmers comic")


*真正的程序员，来自 [xkcd](https://xkcd.com/378/)*


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


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


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


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


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


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


![Create a folder](/data/attachment/album/201904/20/104312nbyok8arxho0bnok.jpg "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!`）。你的屏幕将显示如下：


![Editing Vim](/data/attachment/album/201904/20/104313nxbiqx37yq3kk5qx.jpg "Editing Vim")


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


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


### 第 2 步：在 Vim 中修改并保存


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


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


![Vim insert mode](/data/attachment/album/201904/20/104315z2klgi2lwlbvthgg.jpg "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` 并键入回车。


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


![Showing Line Numbers](/data/attachment/album/201904/20/104319ow29q27wwzs00s0y.jpg "Showing Line Numbers")


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



```
:2
```

现在，跳到第三行。


![Jump to line 3](/data/attachment/album/201904/20/104322x033zctfxff9ff2z.jpg "Jump to line 3")


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


你将来到最后一行！


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


![Go to the last character](/data/attachment/album/201904/20/104325w6poo9hhj9x6ozi9.jpg "Go to the last character")


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


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


### 第 4 步：Vim 中的基本编辑


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


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


![Deleting A Line](/data/attachment/album/201904/20/104329i0oripvlg8wz8lk7.jpg "Deleting A Line")


这就是<ruby> 删除 <rt>  delete </rt></ruby>命令。不要担心，键入 `u`，你会发现这一行又回来了。喔，这就是<ruby> 撤销 <rt>  undo </rt></ruby>命令。


![Undoing a change in Vim](/data/attachment/album/201904/20/104332o8nnv8qlqqlnelim.jpg "Undoing a change in Vim")


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


![Highlighting text in Vim](/data/attachment/album/201904/20/104335ol7u6u61uprm7bmr.jpg "Highlighting text in Vim")


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


![Pasting in Vim](/data/attachment/album/201904/20/104338li1hb4qmyeq46d2h.jpg "Pasting in Vim")


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



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


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


### 第 5 步：Vim 中的基本搜索


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


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


![Searching in Vim](/data/attachment/album/201904/20/104340tlsr8a33l2zr2zdl.jpg "Searching in Vim")


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


### 附加步骤：Vim 中的分割模式


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


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


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


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


![Split mode in Vim](/data/attachment/album/201904/20/104345e9e9ucep9o9cruo4.jpg "Split mode in Vim")


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


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


![Modify GoodBye.java file in Split Mode](/data/attachment/album/201904/20/104349vqbzq47gnzq4x99u.jpg "Modify GoodBye.java file in Split Mode")


保存两份文件，成功！



> 
> **提示 1：** 如果你想将两个文件窗口垂直分割，使用 `:vsplit <FILE_NAME>` 命令。（代替 `:split <FILE_NAME>` 命令，`<FILE_NAME>` 指你想要使用分割模式打开的文件名）。
> 
> 
> **提示 2：** 你可以通过调用任意数量的 `split` 或者 `vsplit` 命令来打开两个以上的文件。试一试，看看它效果如何。
> 
> 
> 


### Vim 速查表


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


为了让一切变得简单些，我已经将你学到的一切总结到了 [一份方便的速查表](https://opensource.com/downloads/cheat-sheet-vim) 中。




---


via: <https://opensource.com/article/19/3/getting-started-vim>


作者：[Bryant Son](https://opensource.com/users/brson) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Modrisco](https://github.com/Modrisco) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

