Vim 快速指南



Vim - 简介

Vim 编辑器是当今我们使用的更流行的文本编辑器之一。它是 Vi 编辑器的克隆,由 Bram Moolenaar 编写。它是一个跨平台编辑器,可在大多数流行平台上使用,例如 Windows、Linux、Mac 和其他 UNIX 变体。在本节中,我们将讨论以下内容:

  • 简介
  • Vim 的特性
  • 为什么创建 Vim?

简介

Vim 是 **Vi IMproved** 的缩写。它是 Bram Moolenaar 编写的免费开源文本编辑器。它于 1991 年首次发布用于 UNIX 变体,其主要目标是增强 1976 年发布的 Vi 编辑器。

Vim 被认为是 Vi 编辑器的克隆。像 Vi 一样,它也是以命令为中心的编辑器。学习 Vim 的一个优势是——它随处可用。使用任何 UNIX 变体,如 Linux、Mac、HP-UX、AIX 和许多其他变体,Vim 默认都存在。Vim 传统上没有 GUI,但现在有一个名为 gVim 的单独安装程序,它提供了 GUI。

Vim 的特性

本节讨论 Vim 的一些重要特性:

  • 内存占用非常低

  • 它是命令为中心的。你可以用少量命令执行复杂的文本相关任务

  • 它高度可配置,并使用简单的文本文件来存储其配置

  • Vim 有许多可用的插件。可以使用这些插件以极大的方式扩展其功能

  • 它支持多个窗口。使用此功能,屏幕可以分割成多个窗口

  • 与多个窗口一样,它也支持多个缓冲区

  • 它支持多个标签,允许处理多个文件

  • 它支持录制功能,允许以重复的方式录制和播放 Vim 命令

为什么创建 Vim

Vim 基于 Bill Joy 于 1976 年创建的原始 Vi 编辑器。在 90 年代,Vi 在 Vi 和 Emacs 编辑器之间存在的所谓的“编辑器大战”中落后了。因此,Bram 实现了许多 Emacs 社区用来论证为什么 Emacs 比 Vi/Vim 更好的缺失功能。

Vim - 安装和配置

Vim 是一个轻量级软件包,其安装非常简单。在本节中,我们将讨论以下内容:

  • 在 Windows 平台上安装
  • 在基于 Debian 的 Linux 上安装
  • 在基于 RPM 的 Linux 上安装

在 Windows 平台上安装

Vim 没有任何特定要求。它是一个简单的软件包,提供了所有依赖项。

安装

  • 要下载 Vim,请访问 vim.org

  • 点击左侧面板的“下载”选项

  • 点击 PC - MS-DOS 和 MS-Windows 选项

  • 从此页面下载 .exe 安装程序。在编写本教程时,安装程序名称为 gvim80.exe

  • 双击安装程序并按照屏幕上的说明完成安装

配置

Vim 将其配置存储在一个名为 _vimrc 的简单文本文件中,该文件位于用户的 home 目录下。

  • 要在终端中查找当前用户的 home 目录,请执行以下命令:

$ echo %userprofile%
  • 导航到 home 目录并创建一个名为 _vimrc 的新文件。确保此文件没有任何扩展名。

  • 在文本编辑器中打开此文件,输入以下文本并保存:

set nu
  • 现在,打开文件时,Vim 将显示行号。稍后我们将向此文件添加更多选项。

在基于 Debian 的 Linux 上安装

与 Windows 相比,在 Linux 平台上安装非常简单。本节介绍在基于 Debian 的 Linux 上的安装和配置。

安装

  • 在终端中执行以下命令:

$ sudo apt-get update 
$ sudo apt-get install vim
  • 要确保 Vim 正确安装,请执行以下命令:

$ which vim
  • 它应该打印 Vim 二进制文件的路径。在我的情况下,它是:

/usr/bin/vim

配置

Vim 将其配置存储在一个名为 .vimrc 的简单文本文件中,该文件位于用户的 home 目录下。

  • 要在终端中查找当前用户的 home 目录,请执行以下命令:

$ echo $HOME
  • 导航到 home 目录并创建一个名为 .vimrc 的新文件。确保此文件没有任何扩展名。

  • 在文本编辑器中打开此文件,输入以下文本并保存:

set nu
  • 现在,打开文件时,Vim 将显示行号。稍后我们将向此文件添加更多选项。

在基于 RPM 的 Linux 上安装

本节介绍在基于 RPM 的 Linux 上的安装和配置。

安装

  • 在终端中执行以下命令:

$ su - 
$ yum install vim
  • 要确保 Vim 正确安装,请执行以下命令:

$ which vim
  • 它应该打印 Vim 二进制文件的路径。在我的情况下,它是:

/usr/bin/vim

配置

Vim 将其配置存储在一个名为 .vimrc 的简单文本文件中,该文件位于用户的 home 目录下。

  • 要在终端中查找当前用户的 home 目录,请执行以下命令:

$ echo $HOME
  • 导航到 home 目录并创建一个名为 .vimrc 的新文件。确保此文件没有任何扩展名。

  • 在文本编辑器中打开此文件,输入以下文本并保存:

set nu
  • 现在,打开文件时,Vim 将显示行号。稍后我们将向此文件添加更多选项。

Vim - 其它类似编辑器

Vim 是原始 Vi 编辑器的克隆。在本节中,我们将讨论其他 Vi 克隆。本节的主要目的是了解其他克隆及其与原始 Vi 编辑器的兼容性。

在本节中,我们将讨论以下内容:

  • Vi
  • Stevie
  • Elvis
  • nvi
  • vile
  • 与原始 Vi 的兼容性

Vi

Vi 是 Visual 的缩写。它最初为 UNIX 创建的面向屏幕的文本编辑器。Vi 的原始代码由 Bill Joy 于 1976 年编写,并首次在 BSD 平台上发布。Vi 是 ed 编辑器的扩展,当时最常见。

Vim 是第一个引入多种模式的编辑器。文本编辑、文本选择和命令执行分别有单独的模式。Vim 编辑器支持所有这些模式。本教程的后续部分将介绍这些模式。

Stevie

Stevie 编辑器是为 Atari ST 平台开发的。它于 1987 年发布,是 ST Editor for VI Enthusiasts 的缩写。

它非常简单,只提供了原始 Vi 编辑器的一小部分子集。但是,它为迁移到 Atari ST 平台的用户提供了熟悉的环境。

Elvis

Elvis 的主要目的是消除 Stevie 编辑器的限制。Stevie 曾经将整个文件加载到 RAM 中,Elvis 通过引入缓冲区消除了此限制。它还在其中添加了一些功能,例如语法高亮显示、多个窗口支持、网络支持和简单的 GUI。

nvi

nvi 代表 new Vi。它是 AT&T 实验室和加州大学伯克利分校计算机科学研究组 (CSRC) 之间许可证纠纷的结果。Vi 基于 ed 编辑器,并受 AT&T 的许可,这限制了他们将 Vi 与 BDS 一起分发。因此,他们重写了 Vi 并将其在 BSD 许可下发布。

Vim

Vim 是 Vi 的改进版本,它添加了许多 Vi 缺乏的功能。它添加了许多有用的功能,例如:

  • 多个窗口/标签/缓冲区
  • Vim 脚本语言的引入
  • 超过 200 种语言的语法高亮显示
  • 与编译器、解释器和调试器的集成

Vile

Vile 是 Vi like Emacs 的缩写,它试图将两个编辑器的流行功能结合到一个中。Vile 的一些流行功能是:

  • 每种文件类型一种编辑模式
  • Vile 过程语言的引入
  • 命名函数,根据用户选择绑定键

与原始 Vi 的兼容性

尽管上述编辑器被认为是 Vi 克隆,但它们与原始 Vi 不完全兼容。下表显示了有关其兼容性的更多详细信息:

克隆 Vi 兼容性 说明
STEVIE 10% 有限的功能是通用的
Vile 10% 有限的功能和 Vi 模式是通用的
Elvis 80% 更多功能是通用的
nvi 95% 更多功能是通用的
Vim 99% 几乎与 Vi 相同,并具有一些附加功能

Vim - 熟悉Vim

从本节开始,我们将开始实际操作 Vim。在本节中,我们将讨论以下内容:

  • 启动 Vim

  • Vim 模式

  • 创建新文件

  • 以只读模式查看文件

  • 编辑现有文件

启动 Vim

Vim 有点不同于今天的基于 GUI 的编辑器。它可以从 GUI 和终端启动和使用。

使用图形启动器

  • 要从图形启动器启动 Vim,只需双击 gVim 图标。它将打开编辑器窗口,如下所示:

Graphical

使用终端

在终端中使用 Vim 在 Windows 和 Linux 平台上都相同。执行以下步骤以从终端启动和退出 Vim:

  • 打开终端并输入 vim 命令,如下所示:

$ vim
  • 它将在终端中打开 Vim,如下所示:

Terminal
  • 要关闭它,请按 Esc 键,然后按冒号 (:) 和 q。在 Vim 中,q 命令代表退出。此命令将显示在编辑器本身的左下角:

Terminal One

Vim 模式

Vim 支持多种模式。本节讨论一些将在日常生活中使用的重要模式。

命令模式

这是 Vim 启动时的默认模式。我们可以在此模式下输入编辑器命令。我们可以在此模式下使用各种命令,例如复制、粘贴、删除、替换等等。我们将在后面的部分讨论这些命令。

注意 - 从这里开始,任何没有冒号的 Vim 命令都表示我们在此模式下执行该命令。

插入模式

你可以使用此模式输入/编辑文本。要从默认命令模式切换到插入模式,请按 i 键。它将显示编辑器左下角的当前模式。

一旦进入插入模式,我们就可以输入任何文本。下图显示了这一点:

Modes

使用 Escape 键从此模式切换回命令模式。

命令行模式

此模式也用于输入命令。此模式中的命令以冒号 (:) 开头。例如,在上一节中,退出命令在此模式下输入。我们可以从命令模式或插入模式进入此模式。

  • 要从命令模式切换到此模式,只需键入冒号

  • 要从插入模式切换到此模式,请按 Escape 并键入冒号

在下图中,左下角的冒号表示行模式。

Commandline

注意 - 从这里开始,任何以冒号开头的 Vim 命令都表示我们在此模式下执行该命令。

可视模式

在此模式下,我们可以直观地选择文本并在选定的部分上运行命令。

  • 要从命令模式切换到可视模式,请键入 v

  • 要从任何其他模式切换到可视模式,请首先按 Escape 切换回命令模式,然后键入 v 切换到可视模式

在下图中,左下角显示可视模式。

创建新文件

执行以下步骤以创建和保存新文件:

  • 执行以下命令以打开 Vim

$ vim
  • 在 Vim 中键入以下命令

:edit message.txt

    如果文件已存在,它将重新加载文件

  • 切换到插入模式

i
  • 输入一些文本

  • 切换回命令模式

Esc
  • 将更改保存到文件

:w

现在将创建 message.txt 文件。

  • 退出 Vim

:q

以只读模式打开文件

使用 –R 选项以只读模式打开文件

$ vim -R message.txt

在下图中,左下角显示只读模式:

Open File

或者,你可以使用 view 命令来获得相同的结果。

$ view message.txt

编辑现有文件

执行以下步骤以编辑现有文件:

  • 使用 Vim 打开文件

$ vim message.txt
  • 切换到插入模式并在其中输入一些文本。

i
  • 不保存更改就退出编辑器

:q!

  • 使用以下命令保存更改并退出编辑器:

:wq

Vim - 获取帮助

Vim是一个功能丰富的编辑器,因此记住它的所有功能是很困难的。但是不用担心,我们随时可以寻求帮助。幸运的是,Vim自身提供了帮助。

在本节中,我们将讨论以下内容:

  • 访问帮助手册
  • 特定主题的帮助
  • 在手册中搜索帮助短语
  • 访问在线帮助

访问帮助手册

帮助手册与Vim编辑器一起提供,内容非常全面。要访问帮助,请执行以下命令:

:help

Access

特定主题的帮助

帮助手册将显示关于Vim的全部帮助信息。但是,如果我们只对特定主题感兴趣呢?Vim也为此提供了命令,语法如下:

:help <topic-name>

在上面的命令中,用您感兴趣的主题替换<topic-name>。例如,要访问关于Vim模式的帮助,请执行以下命令:

:help modes

Specific

在手册中搜索帮助短语

只有知道主题名称才能搜索特定主题。但是,如果不知道帮助主题的确切名称怎么办?在这种情况下,您可以使用以下命令:

:helpgrep <phrase>

例如,要访问关于Vim中导航的帮助,请执行以下命令:

:helpgrep navigation

Search

访问在线帮助

Vim还提供在线帮助。要访问在线帮助:

Vim - 编辑

Vim提供了许多命令,使编辑功能非常强大。本章将讨论以下内容:

  • 插入
  • 追加
  • 打开新行
  • 替换
  • 更改
  • 替换
  • 连接

在光标前插入文本

要在光标前插入文本,请执行以下步骤:

  • 要在光标前插入文本,请执行以下步骤
  • 切换到插入模式
i

在行首插入文本

假设您位于行的中间,并且想要在当前行的开头插入文本,则执行以下步骤:

  • 切换到命令模式
Esc
  • 激活插入模式
I

此操作将光标移动到当前行的开头,并将Vim切换到插入模式。

在光标后追加文本

要在光标后追加文本,请执行以下步骤:

  • 切换到命令模式并将光标移动到适当的位置
Esc
  • 切换到插入模式
a

此操作将光标向后移动一个位置,并将Vim切换到插入模式。

在行尾追加文本

假设您位于行的中间,并且想要在当前行的末尾追加文本,则执行以下步骤:

  • 切换到命令模式
Esc
  • 切换到插入模式
A

此操作将光标移动到行尾,并将Vim切换到插入模式。

在光标下方打开新行

假设您位于行的中间,并且想要在当前行的下方打开新行,则执行以下步骤:

  • 切换到命令模式
Esc
  • 切换到插入模式
o

此操作将在当前行下方插入空行,并将Vim切换到插入模式。

在光标上方打开新行

假设您位于行的中间,并且想要在当前行的上方打开新行,则执行以下步骤:

  • 切换到命令模式
Esc
  • 切换到插入模式
o

此操作将在当前行上方插入空行,并将Vim切换到插入模式。

替换文本

假设您要替换单个字符,请执行以下步骤:

  • 切换到命令模式
Esc
  • 将光标移动到适当的位置
  • 切换到插入模式
s

此操作将删除光标下的字符,并将Vim切换到插入模式。要替换整行,请使用:

s

此操作将删除整行,并将Vim切换到插入模式。

更改文本

假设您要更改当前行中的文本,请执行以下步骤:

  • 切换到命令模式
Esc
  • 执行以下命令:
cc

这类似于使用S进行替换操作。

要从当前光标位置更改文本,请执行以下命令:

C

此操作将删除当前光标位置后的文本,并将Vim切换到插入模式。

替换文本

要替换单个字符,请执行以下步骤:

  • 切换到命令模式
Esc
  • 将光标移动到适当的位置
  • 执行以下命令:
r
  • 输入要替换的字符。

请注意,此命令不会将Vim切换到插入模式。

要替换整行,请执行:

R

它将Vim切换到替换模式,如下图所示:

Replace

连接文本

要连接两行,请执行以下步骤:

  • 切换到命令模式
Esc
  • 将光标移动到相应的行
  • 执行以下命令:
J

Vim - 导航

Vim对高级导航有很好的支持。本章将讨论一些流行的导航技巧,这些技巧有助于提高生产力。

基本导航

在基本导航中,我们可以按位置向左、向右、向上和向下导航。可以使用以下命令:

序号 命令和说明
1 h

将光标向左移动一个位置

2 l

将光标向右移动一个位置

3 k

将光标向上移动一行

4 j

将光标向下移动一行

要执行多位置导航,请将数字与这些命令一起使用。例如,要将光标从当前行向下导航10行,请执行以下命令:

10j

您也可以将数字与其余命令一起使用。

除此之外,以下命令还可以执行一些有用的导航操作。

序号 命令和说明
1 0

将光标移动到当前行首

2 $

将光标移动到当前行尾

3 Ctrl + f

向下滚动整页

4 Ctrl + b

向上滚动整页

导航到行

可以使用以下命令导航到特定行:

序号 命令和说明
1 :n

跳转到第n行

2 :0

跳转到文件开头

3 :$

跳转到文件结尾

单词导航

我们可以使用以下命令进行单词导航:

序号 命令和说明
1 w

将光标移动到下一个单词的开头

2 e

将光标移动到当前单词的结尾

3 b

将光标移动到前一个单词的开头

使用跳转

Vim使用跳转列表跟踪您的导航。您可以通过该列表向后和向前移动。

跳转列表通过跟踪文件名、行号和列号来跟踪您访问过所有位置。

要查看跳转列表,请执行以下命令:

:jumps

以下命令基于跳转列表:

序号 命令和说明
1 Ctrl + o

跳转回上一个位置

2 Ctrl + i

跳转到下一个位置

Vim - 再次学习编辑

我们之前已经看到了基本的编辑操作。让我们了解Vim的其他一些编辑功能。在本节中,我们将讨论以下内容:

  • 缓冲区
  • 交换文件
  • 剪切、复制、删除、粘贴操作
  • 撤消和重做操作

缓冲区

缓冲区是Vim使用的临时内存。当我们在编辑器中打开文件时,Vim会将其内容从磁盘驱动器加载到内存(RAM)。每当我们编辑文件时,实际上都是在编辑缓冲区中的文件。一旦我们完成编辑并保存文件,只有缓冲区内容才会传输到相应的文件。

交换

交换区是Vim创建的文件,用于定期存储缓冲区内容。在编辑文件时,由于各种原因,我们的更改可能会丢失,Vim提供交换文件来提供数据恢复。

要获取交换文件的实际名称,请执行以下命令:

:swapname

例如,在我的情况下,名称为message.txt.swp,如下图所示:

Swap

剪切、复制和粘贴操作

我们经常对文本执行剪切、复制和粘贴操作。Vim提供以下命令来执行这些操作(y表示提取,p表示粘贴操作):

序号 命令和说明
1 x

删除光标位置的字符

2 X

删除光标位置之前的字符

3 y

复制光标位置的单个字符

4 p

在光标位置后粘贴字符

5 P

在光标位置前粘贴字符

多位置命令

我们也可以将剪切、复制和粘贴命令与单词和句子一起使用。下表显示了这一点:

序号 命令和说明
1 dw

删除光标位置的单词

2 D

从光标位置删除整行

3 dd

删除整行

4 Y

复制整行

5 yy

复制整行

要执行多行/多字操作,只需将数字与命令一起使用即可。您也可以将此语法与其他命令一起使用。例如,要删除3个单词,请使用:

3dw

撤消

我们可以撤消单个或多个操作。要执行一次撤消操作,请执行:

u

要执行多次撤消操作,请将数字与同一命令一起使用。例如,以下命令将撤消最后3个操作:

3u

除此之外,要撤消所有操作,请执行以下命令:

U

重做

重做是撤消的反向操作。执行任何命令来执行重做操作。

Ctrl + r
OR
: red

Vim - 搜索

搜索是一个非常常见的操作,也是我们大多数时间都会使用的一种操作。在本章中,我们将看到一些允许有效执行这些操作的命令。

在本节中,我们将讨论以下内容:

  • 搜索设置
  • 在当前文件中搜索
  • 在多个文件中搜索
  • 在帮助文件中搜索

搜索相关设置

要执行增量搜索,请执行以下命令:

:set incsearch

要突出显示搜索结果,请执行以下命令:

:set hlsearch

此命令将自动突出显示当前匹配项。例如,在下图中,fox单词被突出显示:

Related

要禁用增量和突出显示搜索,请执行以下命令:

:set noincsearch
:set nohlsearch

在当前文件中搜索

向前搜索

使用以下命令执行向前搜索:

序号 命令和说明
1 /<expression>

向前搜索表达式

2 n

查找下一个匹配项。这与查找下一个相同

3 N

查找上一个匹配项。这与查找上一个相同

4 //

重复上一次向前搜索

向后搜索

使用以下命令执行向后搜索:

序号 命令和说明
1 ?<expression>

向后搜索表达式

2 n

查找上一个匹配项。这与查找上一个相同

3 N

查找下一个匹配项。这与查找下一个相同

4 ??

重复上一次向后搜索

搜索光标下的单词

将光标放在任何单词下,并执行以下命令来执行搜索操作:

序号 命令和说明
1 *

搜索当前单词的下一个匹配项

2 #

搜索当前单词的上一个匹配项

在多个文件中搜索

使用vimgrep命令,我们可以在多个文件中搜索<expression>。例如,以下命令在所有文本文件中搜索字符串 - Jarvis

:vimgrep Jarvis *.txt

请注意,要转到下一个和上一个匹配项,我们必须使用以下命令:

序号 命令和说明
1 :cn

转到表达式的下一个匹配项

2 :cN

转到表达式的上一个匹配项

Vim - 多文件操作

Vim是一个非常强大的编辑器。它支持许多高级功能,可以处理多个文件、缓冲区和窗口。在本节中,我们将讨论以下内容:

  • 多个文件
  • 多个缓冲区
  • 多个标签
  • 多个窗口

多个文件

假设您正在编辑一个文件,并且想要在同一个Vim会话中打开另一个文件。在这种情况下,您可以使用Vim的编辑命令。下表显示了这些命令:

序号 命令和说明
1 :e

加载新文件到缓冲区进行编辑

2 :edit

与:e相同

3 :e <tab>

列出当前目录中要编辑的文件

4 :edit <tab>

与:e <tab>相同

多个缓冲区

我们已经了解了Vim缓冲区是什么。Vim支持多个缓冲区。以下命令在使用缓冲区时将很有用:

序号 命令和说明
1 :badd <file>

将文件添加到新缓冲区

2 :bN

切换到第N个缓冲区。例如,要切换到第3个缓冲区,请使用:b3

3 :bnext

切换到缓冲区列表中的下一个缓冲区

4 :bprevious

切换到缓冲区列表中的上一个缓冲区

5 :buffers

列出所有缓冲区

6 :bfirst

切换到第一个缓冲区

7 :blast

切换到最后一个缓冲区

8 :ball

加载所有缓冲区

例如,以下命令将新文件添加到缓冲区:

Multiple

现在,缓冲区中有两个文件。执行以下命令以显示此内容:

:buffers

它将显示以下输出:

Buffer

多个标签

像其他编辑器一样,我们也可以在Vim中打开多个标签页。下表描述了与标签页相关的命令:

序号 命令和说明
1 :tabnew

打开新标签页

2 :tabnew <file>

在新标签页中打开文件

3 :tabclose

关闭当前标签页

4 :tabnext

切换到下一个标签页

5 :tabprevious

切换到上一个标签页

6 :tabfirst

切换到第一个标签页

7 :tablast

切换到最后一个标签页

例如,下图显示了多个标签页

Tabs

多个窗口

在Vim中,我们可以使用以下命令创建新窗口:

序号 命令和说明
1 :new <file>

打开新窗口

2 :new <file>

在新窗口中打开文件

在下图中,我们可以看到在执行以下命令后,当前Vim窗口被分成两部分:

$vim message.txt
:new

Window

Vim - 标记

Vim支持书签功能。使用此功能,我们可以使文件内的导航速度更快。在本章中,我们将讨论以下内容:

  • 创建书签
  • 跳转到书签
  • 列出所有书签
  • 删除书签
  • 局部书签
  • 全局书签

创建书签

要创建书签,请执行以下命令:

m{bookmark-name}

在上面的例子中,bookmark-name是单个字母字符。例如,以下命令创建名为a的书签。

ma

跳转到书签

创建书签后,我们可以跳转到该位置。可以使用以下命令跳转到书签:

序号 命令和说明
1 `{bookmark-name}

移动到书签的确切位置。请注意,此字符是反引号

2 ‘{bookmark-name}

跳转到书签行的开头。请注意,此字符是单引号

列出所有书签

要列出所有书签,请执行以下命令:

:marks

下图显示了当前文件的书签列表

Bookmarks

删除书签

要删除书签,请执行以下命令:

:delmarks {bookmark-name}

例如,以下命令删除名为a的书签。

:delmarks a

局部书签和全局书签

当您打开多个文件并且想要转到任何一个打开文件中特定位置时,您可以使用Vim的全局标记功能。

如果书签名称是大写字母,则它是全局书签。上述命令适用于局部和全局书签。

Vim - 宏

宏是录制和播放功能。当它与Vim命令结合使用时,它将成为一个非常强大的组合。在本节中,我们将讨论以下内容:

  • 开始录制
  • 执行Vim操作
  • 停止录制
  • 播放录制

开始录制

要开始录制,请按q键,然后按任何小写字母作为宏名称。例如,在下面的示例中,我使用了“a”作为宏名称

Recording

执行Vim操作

在此步骤中,您可以执行任何Vim操作,例如:剪切、复制、删除、替换等等。您可以通过执行以下命令查看这些操作:

:registers

例如,以下命令显示执行了粘贴和删除操作:

Perform

停止录制

完成操作后,再次按q键停止录制。现在录制模式将消失,如下所示:

Stop

播放

要播放,请执行以下命令:

@{macro-name}

例如,要执行宏“a”,请执行以下命令:

@a

要多次播放相同的宏,请使用数字。例如,要执行相同的宏10次,请执行以下命令:

10@a

Vim - 寄存器

Vim提供了许多寄存器。我们可以将这些寄存器用作多个剪贴板。此功能在处理多个文件时非常有用。在本章中,我们将讨论以下内容:

  • 将文本复制到寄存器
  • 从寄存器粘贴文本
  • 列出可用的寄存器
  • 寄存器类型

将文本复制到寄存器

对于复制,我们可以使用正常的yank命令,即yy,并使用以下语法将其存储在寄存器中:

“<register-name><command>

例如,要将文本复制到寄存器“a”,请使用以下命令:

“ayy

从寄存器粘贴文本

要从寄存器粘贴文本,请使用:

“<register-name>p

例如,以下命令从寄存器“a”复制文本:

“ap

列出可用的寄存器

要列出所有可用的寄存器,请使用以下命令

:registers

寄存器类型

Vim支持以下类型的寄存器:

未命名寄存器

未命名寄存器用“”表示。Vim将删除或复制的文本存储在此寄存器中

命名寄存器

我们可以使用26个命名寄存器;我们可以使用a-z或A-Z。默认情况下,vim不使用这些寄存器。

如果我们使用小写寄存器名称,则内容将被覆盖;如果我们使用大写名称,则内容将被附加到该寄存器中。

编号寄存器

我们可以使用0到9个命名寄存器。Vim用yank和delete命令中的文本填充这些寄存器。

  • 编号寄存器0包含最近一次yank命令的文本。
  • 编号寄存器1包含最近一次delete或change命令删除的文本

默认寄存器

以下是默认寄存器:

序号 寄存器和说明
1 %

当前文件的名称

2 #

当前窗口的备用文件的名称

3 :

最近执行的命令

4 .

包含最后插入的文本

5

最后使用的寄存器

Vim - 折叠

当文件内容为大文本时,折叠功能将很有用。使用此功能,我们只能显示文件的选定部分。此功能在使用编程语言时尤其有用。在本章中,我们将讨论以下内容:

  • 激活和停用折叠功能
  • 各种折叠操作

折叠激活和停用

要激活折叠,请使用以下命令:

:set foldenable 
:set foldmethod = indent

要停用折叠,请使用以下命令

:set nofoldenable

折叠操作

关闭折叠

要折叠代码,请转到任何方法并执行以下命令:

zc

例如,下图显示了此操作的结果:

Close

打开折叠

要打开折叠,请使用以下命令:

zo

下图显示了此操作的结果:

Open

关闭所有折叠

要关闭所有折叠,请执行以下命令

zM

下图显示了此操作的结果

Folds

展开所有

要展开所有内容,请执行以下操作:

zR

下图显示了此操作的结果:

Unfold

Vim - 比较差异

类似于UNIX diff命令,我们可以使用Vim以更好的方式显示diff。它将以彩色方式显示diff。在本章中,我们将讨论以下内容:

  • 显示文件之间的差异
  • 激活和停用diff模式
  • diff模式下的导航
  • 应用diff窗口中的更改

显示差异

要显示文件之间的差异,请执行以下命令:

$ vimdiff <file> <file> 
OR 
$ vim –d <file> <file>

例如,以下命令显示差异:

Show

在上图中,以洋红色突出显示的文本是公共的。其余文本以红色突出显示,这表示公共文本之后存在一些差异。

激活和停用diff模式

如果您已经在vim中并且想要执行diff操作,则可以使用以下命令之一:

diffsplit

使用以下命令执行水平分割:

:diffsplit filename

Split

上图显示我们正在比较两个文件,即message-1.txt和message-2.txt。

垂直diffsplit

要执行垂直分割,请使用以下命令:

:vert diffsplit <filename>

它将打开以下窗口:

Vertical

上图显示我们正在比较两个文件,即message-1.txt和message-2.txt。

diff模式下的导航

diff模式下的导航略有不同。例如,当您从一个窗口滚动文本时,相邻窗口的文本也会滚动。这称为scrollbind。要启用此功能,请使用:

:set scrollbind

要禁用此功能,请使用:

:set noscrollbind

如果您在此模式下编辑文件,则使用以下命令更新diff:

:diffupdate

在diff窗口之间切换

要在diff窗口之间切换,请执行以下命令:

Ctrl + w Ctrl + w

请注意,我们必须按两次Ctrl + w。

跳转到上一个更改

在diff窗口中,执行以下命令以跳转到上一个更改:

[c

跳转到下一个更改

在diff窗口中,执行以下命令以跳转到下一个更改:

]c

应用diff窗口中的更改

在当前diff窗口中应用更改

要将更改从相邻的diff窗口应用到当前diff窗口,请执行:

:diffget

例如,如果您在左侧窗口中,并且想要将更改从右侧窗口应用到当前窗口,则将执行上述命令。

将更改从当前窗格应用到另一个窗格

要将更改从当前diff窗口应用到相邻的diff窗口,请执行:

:diffput

例如,如果您在左侧窗口中,并且想要将更改从当前窗口应用到右侧窗口,则将执行上述命令。

Vim - 插件

使用插件,我们可以扩展Vim的功能。Vim支持许多插件,其中大多数都是免费提供的。本章是关于Vim插件的,我们将讨论以下内容:

  • 插件管理
  • 一些有用的插件

插件管理

本节讨论插件管理。Vim提供了各种插件管理器,但我们不会使用任何插件管理器,而是将手动执行所有这些步骤以更好地理解。一旦您理解了这些步骤,就可以使用插件管理器。

安装插件

要安装任何插件,请执行以下步骤:

  • 在用户的home目录中创建.vim/bundle目录
  • 将插件复制到此目录中
  • 在vim中设置runtimepath

让我们在Vim中安装badwolf插件。它是一个vim的配色方案。

$ mkdir -p ~/.vim/bundle 
$ cd ~/.vim/bundle/ 
$ git clone https://github.com/sjl/badwolf.git 
$ echo "set runtimepath^ = ~/.vim/bundle/badwolf" > ~/.vimrc

现在插件已安装,因此我们可以使用badwold配色方案,如下所示:

:colorscheme badwolf

更新插件

如果我们仔细观察,插件只是一个文件的集合,如果我们想要更新该插件,则只需从~/.vim/bundle更新相应的插件目录。

删除插件

在Vim中删除插件非常简单。要删除插件,请执行以下步骤:

  • 从~/.vim/bundle删除插件目录
  • 适当地修改runtimepath

一些有用的插件

以下是某些有用的Vim插件的列表

序号 名称和说明
1 DumpX

反汇编C/C++代码

2 awk.vim

AWK脚本的缩进

3 Pathogen

Vim包管理器

4 git-switcher.vim

根据git分支的切换自动保存和加载vim会话

5 Pyflakes

为python文件提供lint

Vim - 将Vim用作IDE

我们可以配置Vim将其用作IDE。在本节中,我们将讨论以下内容

  • 语法高亮
  • 智能缩进
  • 反弹
  • 执行shell命令
  • 配置ctags和csope
  • 自动完成和自动建议

语法高亮

语法高亮是IDE的重要功能之一。要启用语法高亮,请使用:

:syntax on

例如,下图显示了C代码的语法高亮:

Syntax

要禁用语法高亮,请使用:

:syntax off

禁用语法高亮后,它将显示以下输出:

Output

智能缩进

要执行自动和智能缩进,请使用以下命令:

: set autoindent 
: set smartindent

此外,您可以使用以下命令自动缩进C代码:

: set cindent

反弹

如果您使用的编程语言使用花括号来组合多个语句,那么%键将是您的朋友。此键将快速跳转到花括号的开始和结束位置。

例如,您位于第11行并执行%命令,则它会将光标移动到第4行。下图显示了这一点:

Bounce

执行shell命令

要从Vim编辑器用户执行单个命令,请使用:

:!<command>

例如,要执行pwd命令,请使用以下语法:

:!pwd

但是,如果您想要多个shell命令,请执行以下命令:

:shell

上述命令将提供终端访问权限,您可以在其中执行多个命令。完成后,只需键入 exit 命令即可返回 Vim 会话。

配置 ctags 和 cscope

ctags 和 cscope 的组合提供了许多有用的功能,例如跳转到函数定义、跳转到函数声明、查找函数调用、搜索文件等等。请执行以下步骤来配置这些工具:

  • 使用以下命令生成 tags:
$ ctags <file>

此命令将生成一个名为 tags 的新文件。

  • 使用以下命令为 vim 提供 tag 文件:
:set tags = tag
  • 现在将光标移动到函数名称下,然后按 Ctrl + ] 跳转到函数定义。
  • 使用 **Ctrl + t** 返回到上一个位置。

要安装和配置 cscope,请执行以下步骤:

  • 安装 cscope
$ sudo apt-get install cscope
  • 生成 ctags 并启动主窗口
$ cscope –R

Cscope
  • 使用 Ctrl + d 关闭 cscope 窗口

自动完成和自动建议

我们可以使用以下命令进行自动完成:

序号 命令和说明
1 Ctrl + x Ctrl + N

单词补全

2 Ctrl + x Ctrl + L

行补全

3 Ctrl + x Ctrl + F

文件名补全

请注意,必须在插入模式下使用这些命令。

Vim - 远程文件编辑

很多时候我们需要处理远程服务器。并且经常编辑这些远程服务器上的文件。编辑这些文件的一个显而易见的解决方案是登录到远程服务器并编辑文件。但是有时从本地机器编辑这些文件比较方便,因为我们可能在本地系统上安装和配置了各种插件。在本章中,我们将讨论以下内容:

  • 访问远程文件
  • 了解 netread 和 netwrite
  • 其他支持的协议

访问远程文件

Vim 使用以下语法支持远程文件编辑:

$vim scp://[email protected]/filepath

在上面的例子中,vim 将识别它必须使用 scp 协议,并将使用该协议访问文件。例如:

$ vim scp://[email protected]//tmp/message.txt

上述命令将打开远程服务器上的 /tmp/message.txt 文件。它将使用 SCP 协议和 jarvis 用户的凭据进行身份验证。

使用 nread 和 nwrite

Vim 支持 nread 和 nwrite 功能,分别代表网络读取和网络写入。上一节显示了在启动 Vim 时访问远程文件的方法。但是,如果您已经在 Vim 中,该怎么办?然后您可以使用以下命令:

:Nread scp://jarvis@localhost//tmp/message.txt

除了读取之外,我们还可以直接修改远程服务器上的文件。在这种情况下,请使用 Nwrite 命令,如下所示:

:Nwrite scp://jarvis@localhost//tmp/message.txt

打开文件后,您可以使用常规的 Vim 命令。

其他支持的协议

除了 SCP 之外,Vim 还支持以下协议:

  • FTP
  • SFTP
  • HTTP(只读)
  • rsync

Vim - 提示和技巧

现在我们对 Vim 有了相当的了解。让我们讨论一些 Vim 的技巧和窍门来提高生产力。在本节中,我们将讨论以下内容:

  • 将空格转换为制表符,反之亦然
  • 突出显示拼写错误的单词
  • 单词补全
  • 逐字符复制行
  • 缩进代码
  • 更改文件格式

将空格转换为制表符,反之亦然

将制表符转换为空格

如果您正在编辑文件,并且想要将输入的制表符转换为空格,则执行以下命令:

:set expandtab

请注意,此命令不会将现有的制表符更改为空格。要实现此目的,请执行以下命令:

:set tabstop = 4 shiftwidth = 4 expandtab 
:retab

在上面的命令中,我们指示 Vim 将制表符转换为 4 个空格。

将空格转换为制表符

要将空格转换为制表符,请执行以下命令:

:set noexpandtab :retab!

突出显示拼写错误的单词

我们可以指示 Vim 突出显示拼写错误的单词。为此,请执行以下命令:

:set spell

下图突出显示了 Vim 中拼写错误的单词:

Spelled

单词补全

Vim 还提供单词补全功能。为此,请在插入模式下执行以下命令:

Ctrl + p

Completion

逐行复制字符

使用以下命令逐字符复制和粘贴行:

序号 命令和说明
1 Ctrl + y

复制和粘贴光标上方的文本

2 Ctrl + e

复制和粘贴光标下方的文本

请注意,我们必须在插入模式下使用这些命令。

缩进代码

如果您有未缩进的代码要缩进,请执行以下命令:

=%

例如,如果您有如下未缩进的代码:

Indent

然后转到第 4 行并执行 =% 命令。它将缩进代码如下:

Indent Code

更改文件格式

要将文件格式更改为 UNIX,请执行以下命令:

:set ff = unix

要将文件格式更改为 DOS,请执行以下命令:

:set ff = dos

Vim - 个性化设置

我们可以根据需要个性化 Vim。在本节中,我们将讨论以下内容:

  • 配置文件
  • 更改字体
  • 更改配色方案
  • 个性化高亮显示
  • 状态栏

配置文件

对于 Vim 配置文件,可以位于用户级别或全局级别。用户特定设置将存储在用户级文件中,而全局设置将存储在全局级文件中。

Vimrc 文件

全局 vimrc

要在编辑器中查找全局 vimrc 文件,请执行以下命令:

:echo $VIM

:echo \%VIM\%

在 Linux 上,此文件位于 /usr/share/vim 目录下,而在 Windows 上,它位于 C:\Program Files\Vim 文件夹下。

本地 vimrc

本地 vimrc 将位于用户的 home 目录下。例如,在 Linux 上,它位于 /home/ 目录下,而在 Windows 上,它位于 C:\Documents and Settings\/ 文件夹下。

请注意,在 Windows 上,文件名将是 _vimrc,而在 Linux 上,它将是 .vimrc。

Gvimrc

全局 gvimrc

在 Linux 上,此文件位于 /usr/share/gvim 目录下,而在 Windows 上,它位于 C:\Program Files\Vim 文件夹下。

本地 gvimrc

本地 gvimrc 将位于用户的 home 目录下。例如,在 Linux 上,它位于 /home/ 目录下,而在 Windows 上,它位于 C:\Documents and Settings\/ 文件夹下。

请注意,在 Windows 上,文件名将是 _gvimrc,而在 Linux 上,它将是 .gvimrc。

exrc

exrc 文件用于向后兼容。如果存在 vimrc 或 gvimrc 文件,则会忽略这些文件。

全局 exrc

在 Linux 上,此文件位于 /usr/share/vim 目录下,而在 Windows 上,它位于 C:\Program Files\Vim 文件夹下。

本地 exrc

本地 exrc 将位于用户的 home 目录下。例如,在 Linux 上,它位于 /home/ 目录下,而在 Windows 上,它位于 C:\Documents and Settings\/_exrc 文件夹下。

更改字体

要更改字体,请在 gVim 中执行以下命令:

:set guifont = courier

上述命令将字体更改为 courier。

更改配色方案

要更改配色方案,请执行以下命令:

:colorscheme <tab>

当您按下 Tab 键时,它将显示 Vim 可用的配色方案。

个性化高亮显示

突出显示特定列之后的字符

执行以下命令以突出显示大于 73 的列:

:match ErrorMsg /\%>73v.\+/

下图显示了这一点:

Personal

以下是此命令的描述:

序号 命令和说明
1 \%>

匹配列之后

2 73

这是列号

3 V

它应该只适用于虚拟列

4 .\+

匹配一个或多个字符

添加行号

要添加行号,请执行以下命令:

:set number

要禁用此功能,请执行以下命令:

:set nonumber

设置行号宽度

要设置行号宽度,请执行以下命令:

:set numberwidth = <num>

拼写检查

要启用拼写检查,请执行以下命令:

:set spell

要设置拼写语言,请执行以下命令:

:set spelllang = <language>

例如,要设置德语,请使用以下命令:

:set spelllang = de

缩写

使用缩写,我们可以为长字符串创建快捷方式。例如,以下命令创建名为“quick”的缩写。

:abbr quick the quick brown fox

如果您键入“quick”并按下 Tab 键,它将被替换为“the quick brown fox”字符串。

我们可以用它来纠正一些错字。例如,以下命令就是这样做的:

:abr teh the

状态栏

状态栏显示在编辑器的底部。要启用状态栏,请执行以下命令:

:set laststatus = 2

要将其从当前会话中删除,请执行以下命令:

:set laststatus = 0

Vim - 总结

Vim 是一个非常强大的编辑器,现在您可以开始使用它了。掌握 Vim 将真正提高您的生产力。使用 Vim,您可以使用少量命令解决许多复杂的任务。您可以参考以下文档以了解更多关于 Vim 的信息。

Vim 官方文档

您可以从以下网站访问 Vim 的官方文档:

https://www.vim.org/

Vim 脚本指南

您可以通过编写脚本来进一步增强 vim。它有自己的脚本语言。要了解更多信息,请访问以下链接:

https://vim.sourceforge.io/scripts/index.php

Vim 插件

Vim 插件进一步扩展了其功能并提高了您的效率。您可以安装、配置甚至为 Vim 编写插件。您可以参考其官方网站上的相关文档。

广告