Vim 是 UNIX 文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff),语法高亮,全面的帮助系统,本地脚本(Vimscript),和便于选择的可视化模式。 Vim 专注于键盘操作,这意味着带来丝滑操作的同,你需要花时间来学习,并值得花上更多的时间来掌握。在一般工作中更多的使用gvim,它是vim添加图形化界面后的版本,在linux与windows环境使用都很便捷。
获取GVIM很容易,输入vim.org,下载你喜欢的vim版本即可,或者从任何你喜欢的途径获取。接下来为了使得演示同步进行,也会在本机安装系统(WIN11)下最新版本的GVIM。同时请确保你的PC已经安装了GVIM。

GVIM的安装(windows版本)

你也可以点击这里直接下载,或者进入vim官网,打开下载栏目,选择你要下载的文件下载。如下图所示,下载成功,你将会得到一个gvim.exe的可执行文件在你的下载目录。
GVIM下载地址与文件选择

安装步骤

安装步骤1安装步骤2

最后选择一个安装地址即可完成安装。安装完成后会在桌面创建三个快捷方式,点击桌面快捷方式gVim 9.0即可打开gvim,其余删除即可。如下图所示。请不要进行其他操作,直接关闭该页面即可。接下来的章节会有更详细的介绍。
初始界面

首先为了使得你的GVIM打开变得更加美丽,请将如下代码粘贴到你的_vimrc文件中。选中快捷方式,左键,选择打开文件所在位置,接下来向后退出一级即可找到该文件。该文件的作用以及下述代码的作用将会在后文进行介绍。更详细的GVIM配置将会在后文给出。

"---------User define set option-----------
"设置快速编辑.vimrc的快捷键
:nnoremap ,ev :vsplit $MYVIMRC<cr>
:nnoremap ,sv :source $MYVIMRC<cr>

"高亮配色设置
syntax on "语法高亮度显示
set t_Co=256 "开启256色支持
set hlsearch "搜索设置高亮
colorscheme desert "配色方案
set background=dark "配置主题整体的色调,只有两个选择:dark和light(暗色调和亮色调)
highlight Function cterm=bold,underline ctermbg=red ctermfg=green "color set

"set guifont=Monospace\ 16 "gui style for linux
set guifont=Courier_new:h16"for windows

VIM的基本介绍

VIM的三种模式

VIM有三种模式,分别是命令模式(Command mode/normal mode)输入模式(Insert mode)底线命令模式(Last line mode)。如下图所示,输入模式是用来编辑文本的,底线命令模式与命令模式分别用来处理用户命令。下图也分别展示了进入与退出各个模式的按键。
VIM的三种模式

VIM命令大全

这两种命令模式下有很多命令,一般在不需要过多的关注,在使用中慢慢学习,下面给出两个地址,为VIM命令大全,有关命令不在这里进行展示。
菜鸟教程 vim教程以及W3Cschool VIM教程重点推荐后者。

获取帮助的方式

VIM本身提供了详细的帮助手册。打开你的VIM,输入:h即可打开帮助界面,可以用:h _subject_命令来访问。_subject_主题可以是命令,配置选项,热键绑定,插件等。使用:h命令(不带任何subject)来获取帮助系统的相关信息以及在不同的主题之间切换。
VIM Tutor学习——基本的VIM操作经过简单的学习,练习就应该可以操作vim了。

VIM配置

我们前面打开的_vimrc文件就是VIM的配置。个人理解VIM受欢迎的原因,就是因为精简,其将大量的功能交给用户自定义。因此刚刚开始使用VIM的新手可能不是很习惯,甚至使用了很久的老鸟,使用别人的VIM也会不习惯。这其中除去基本的操作,VIM的配置是一个定义用户个人使用方案的文件。
在Linux环境下,该文件为位于~/.vimrc,在windows环境下,该文件位于你的你的VIM安装目录的后一级目录。名称为_vimrc在_任意_系统中,在Vim中执行:echo $MYVIMRC命令可以快速得知这个文件的位置和名称。 文件的路径会在屏幕的底部显示。

VIM插件

使用插件来提高效率,它能改变Vim的界面,添加新命令,代码自动补全,整合其他程序和工具,添加其他编程语言等功能。VIM提供了很多有用户分享的插件,可以理解为自定义的功能,这将是一个及其强大的功能,在vim官网首页也有对应的栏目,可以用户上传分享自己的插件。在后续将会更详细的介绍vim插件。

小贴士: 参阅Vim Awesome获取一些热门插件

同时vim8.0以上的版本提供了自身的插件管理器,对于入门以及不是很复杂的插件管理已经足够了,这里简单介绍使用方式,后续插件的安装就直接使用插件管理器进行管理即可。使用如下命令可以进行查看:help packages

插件管理器

插件管理器使安装和管理插件有相似的方法,而与在何种平台上运行Vim无关。它是一个像包管理器一样的用来管理其它Vim插件的插件。这里使用vim自带的插件管理器package。首先确保你的vim版本是在8.0以上。
然后在你的.vim文件夹下新建一个文件夹,pack,进入后执行

mkdir -p package/start
mkdir -p package/opt

这里其实是新建两个文件夹,作为以后插件安装更方便的使用。可以理解为,package可以是任何名称,主要用于表明你的插件是做什么的,可以是一个大的类,然后可以将你需要执行的插件解压缩放在对应插件的start目录下同样是一个文件夹,是一个小的类型,该文件夹中就是下载的插件,将暂时不需要执行的插件放置在opt目录下。使用可以调用:packadd package目录下opt中的插件。这样一个插件新建一个文件夹,就可以不用担心插件管理的问题了。可以随时删除更新而不会影响其他的插件。同样还有一个好处是不需要联网,可以直接使用安装包进行插件的安装。更详细的使用将在后续的插件使用部分进行展示。

小贴士: windows环境下,将.vim文件夹换成vimfiles即可,问价的位置与_vimrc在同级目录下哦

GVIM进阶

前面经过简单的介绍,同时经过一段时间的学习,GVIM的相关命令的进一步熟练,接下来的部分将会帮助你更好的使用GVIM,不仅炫酷且简洁,强大且灵活!!!!!!

本文参考艰难地学习 Vimscript本书大致分为三个部分:

  • 第一部分讲述了一些Vim的基本命令,通过这些命令修改你的~/.vimrc可以快速、 方便地定制你的Vim环境。
  • 第二部分将Vimscript作为一门编程语言做深入了解,包括变量、比较还有函数。
  • 第三部分实例创建一个插件。

我也会将其概括性的总结,将其进一步总结精炼。按自己的理解进行重新划分,完成下面的部分。

Vimscript 设置选项

Vim拥有很多选项可以设置以改变其展现方式。主要有两种选项:布尔选项(值为”on”或”off”)和键值选项。

布尔选项

执行如下命令:

:set number

如果之前屏幕左侧没有显示行号,那么现在你就会看见行号。执行命令:

:set nonumber

行号应该消失。number是一个布尔选项:可以off、可以on。通过:set number命令打开、 :set nonumber命令关闭。所有的布尔选项都是这种配置方法。:set <name>打开选项、:set no<name>关闭选项。

切换布尔选项

你可以”切换”布尔选项的值,即从开启切为关闭或从关闭切为开启。执行命令:

:set number!

行号会再次显示出来。再次执行命令:

:set number!

行号应该会再次消失。添加一个!(感叹号)至布尔选项后面就会切换对于选项的值。

查看选项当前值

你可以使用一个?符号向Vim获取一个选项的当前值。执行如下命令并查看每个命令的 返回结果:

:set number
:set number?
:set nonumber
:set number?

注意第一次:set number?命令返回的是number而第二次返回的是nonumber

键值选项

有些选项并不只有off或on两种状态,它们需要一个值。执行如下命令,查看返回结果:

:set number
:set numberwidth=10
:set numberwidth=4
:set numberwidth?

numberwidth选项改变行号的列宽。你可以通过:set <name>=<value>命令改变 非布尔选项的选项值,并使用:set <name>?命令查看选项的当前值。来看看一些常用选项的值:

:set wrap?
:set shiftround?
:set matchtime?

练习

阅读:help 'number'(注意有单引号)帮助文档。
阅读:help relativenumber帮助文档。
阅读:help numberwidth帮助文档。
阅读:help wrap帮助文档。
阅读:help shiftround帮助文档。
阅读:help matchtime帮助文档。
按你自己的喜好在你的~/.vimrc文件中添加几个设置选项。

VIM基本映射

简单来说就是,当我按下这个键时,我需要你放弃默认操作,按我的想法做。
我们先从normal模式,就是命令模式的键盘映射开始。随意在文本中敲写几行文字,然后运行命令:

:map - x

将光标置于文本中的某处,按下-。注意Vim删除了当前光标下的字符,就好像你按了x一样。我们本来就有个按键用于 “删除当前光标下的字符” ,所以我们将-重新映射到稍微有用的 功能。执行命令:

:map - dd

现在移动光标到任意一行,再按下-,这次Vim删除了整行的文本,因为dd的功能就是删除整行。同时注意可以映射特殊字符,但是注释是不被允许的。如下举例:map <space> viw " Select word。可以自行尝试。我们了解到,vim有三种模式,命令模式,输入模式与命令行模式,可以使用nmapvmapimap命令分别指定映射仅在normal、visual、insert模式有效。同时还有这里还需要考虑递归。
尝试添加如下命令

:nmap x dd
:nmap \ x
”:nnoremap \ x

尝试将第二第三行分别使用"来进行注释,查看在normal模式下的x的行为以及\的行为。在使用非递归模式的时候,使用\删除的是光标所在的字符,不加nore时,删除的是整个行。需要清楚,每一个*map系列的命令都有个对应的*noremap命令,包括:noremap/nnoremapvnoremapinoremap。这些命令将不递归解释映射的内容。该何时使用这些非递归的映射命令呢?答案是: 任何时候是的,没开玩笑, *任何时候* 。

Vimscript Leaders

键盘映射方法可以使得我们使用一个按键具有一个新的功能,但是他会将按键原有的功能覆盖掉。vim提供了leader来解决这个问题。我们称这个“前缀”为“leader”。你可以按你的喜好设置你的leader键。运行命令:

:let mapleader = ","

你可以替换,为你喜欢的按键。推荐使用,,因为这个键比较 比较容易按到。当你创建新的映射时,你可以使用<leader>表示“我设置的leader按键”。运行命令:

:nnoremap <leader>d dd

现在试试按下你的leader按键和d,也就是,d。Vim会删除当前行。Vim有另外一个“leader”成为“local leader“。这个leader用于那些只对某类文件 (如Python文件、HTML文件)而设置的映射。阅读:help mapleader,help maplocalleader`获取相关信息