vim的下载与安装

下载windows版vim

从github下载windows版的vim:https://github.com/vim/vim-win32-installer/releases

安装vim

无特殊要求默认安装即可。
安装完成后默认打开README文件。

添加环境变量

在安装路径中找到vim.exe或者gvim.exe(两者在同一文件夹下),复制路径。

右键我的电脑->属性->高级系统设置->环境变量,选中Path,并点击编辑,添加路径。

添加vim的一个用户变量$VIM,右键我的电脑->属性->高级系统设置->环境变量,点击上面的新建。
然后输入新建的环境变量名VIM以及变量值,并点击确定。

认识vim

安装结束后桌面Vim

菜单栏Vim

  1. 有g和没有g
    gVim 是在windows下的Gui图形用户界面的的 vim (GUI Vim),支持windows的一些快捷方式,支持鼠标操作
    vim 是在windows下的类似linux vi 编辑的界面,只能用键盘操作
    vim的操作指令同时适用于gVim
  2. Vim, Vim Diff, Vim Easy, Vim Read-only
    Diff 是用来对比两个文件内容用的,直接打开挺没用的,不过直接拖2个文件到快捷方式上倒是可行;
    Easy启动的时候是insert模式,适合普通windows用户的习惯;
    Read-Only的用途:比如用read-only打开已经用vim打开过的文件,就不会提示让人烦躁的.swp文件存在的问题;

我们暂时会使用Vim来入门,最后您会使用gVim编程,这是因为gVim在没有配置的时候比Vim还不方便操作。

Vim基本的使用说明

用Vim打开文件

在cmd下输入vim + 路径即可,同时直接将文件拖动到快捷方式图标上也可以。

Vim的四种模式

vim 共分为四种模式,分别是普通模式(Normal mode)、底行模式(Last line mode)、输入模式(Insert mode)和可视化模式(Visual mode)。四种模式的切换与作用如下

Normal Mode

这个模式一般用于浏览代码与进入底行模式输入命令,使用快捷键修改文章

快捷键 效果
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符

用上面的按键你就可以上下浏览代码了,但是不建议使用方向键
Vim中还有一些键位是进行光标移动的

快捷键 效果
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n < space > 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20< space > 则光标会向后面移动 20 个字符距离。
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 :set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n< Enter > n 为数字。光标向下移动 n 行(常用)

以上是光标移动命令,然后是文档查询替换命令

命令 作用
/word 向光标之下寻找一个名称为 word 的字符串。例如要在档案内搜寻 vbird 这个字符串,就输入 / vbird 即可! (常用)
?word 向光标之上寻找一个字符串名称为 word 的字符串。
n 这个 n 是英文按键。代表重复前一个搜寻的动作。举例来说, 如果刚刚我们执行 /vbird 去向下搜寻 vbird 这个字符串,则按下 n 后,会向下继续搜寻下一个名称为 vbird 的字符串。如果是执行 ?vbird 的话,那么按下 n 则会向上继续搜寻名称为 vbird 的字符串!
N 这个 N 是英文按键。与 n 刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird 后,按下 N 则表示『向上』搜寻 vbird 。
使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!
:n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则: 『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用)
:1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !且在取代前显示提示字符给用户确认 (confirm) 是否需要取代!(常用)

最后是最常用的增删改命令

快捷键 作用
x, X 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符( 相当于 [backspace] 亦即是退格键) (常用)
nx n 为数字,连续向后删除 n 个字符。举例来说,我要连续删除 10 个字符, 『10x』。
dd 删除游标所在的那一整行(常用)
ndd n 为数字。删除光标所在的向下 n 行,例如 20dd 则是删除 20 行 (常用)
d1G 删除光标所在到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d$ 删除游标所在处,到该行的最后一个字符
d0 那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy 复制游标所在的那一行(常用)
nyy n 为数字。复制光标所在的向下 n 行,例如 20yy 则是复制 20 行(常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制光标所在的那个字符到该行行首的所有数据
y$ 复制光标所在的那个字符到该行行尾的所有数据
p, P p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! 举例来说,我目前光标在第 20 行,且已经复制了 10 行数据。则按下 p 后, 那 10 行数据会贴在原本的 20 行之后,亦即由 21 行开始贴。但如果是按下 P 呢? 那么原本的第 20 行会被推到变成 30 行。 (常用)
J 将光标所在行与下一行的数据结合成同一行
c 重复删除多个数据,例如向下删除 10 行,[ 10cj ]
u 复原前一个动作。(常用)
[Ctrl]+r 重做上一个动作。(常用)
. 不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点『.』就好了! (常用)

以上的增删改查命令有一定的命名规律,比如y是复制,然后复制什么没说,你用yw就是复制一个单词(word),重复写一个命令就是对这个对行操作,例如yy就是复制一行,还可以y+数字,例如y3就是复制三行,还可以与其他命令组合比如yG就是从当前光标位置复制到文档最后,这样组合才可以让我们高效的使用Vim

Last line mode模式

我一直觉得这就是Vim的Normal模式,结果别人都觉得这是一个新模式,那就当他是个新模式吧
你会发现在没有配置Vim的其他功能的时候,Vim的下面会写有一个Normal等,但是似乎下面还有一行,这一行是让你输入命令的,想要输入命令必须使用\或者:触发,\是用来查找内容的,严格说属于Normal模式,所以其实只有:开头的命令

命令 作用
:w 将编辑的数据写入硬盘档案中(常用)
:w! 若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!
:q 离开 vi (常用)
:q! 若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。
注意一下啊,那个惊叹号 (!) 在 vi 当中,常常具有『强制』的意思~
:wq 储存后离开,若为 :wq! 则为强制储存后离开 (常用)
:w [filename] 将编辑的数据储存成另一个档案(类似另存新档)
:r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1 到 n2 的内容储存成 filename 这个档案。
:! command 暂时离开 vi 到指令行模式下执行 command 的显示结果!例如 『:! ls /home』即可在 vi 当中察看 /home 底下以 ls 输出的档案信息!

还有很多,但是都是特殊的命令,或者某一个插件特有的,这里不做介绍

Insert模式

插入模式是让你正常写代码的,注意的是,插入模式下hjkl的上下左右切换是失效的,可以用方向键,但是不建议,还是退出编辑模式在normal下改光标方便,进入插入模式的快捷键最常用的是i,还有如下的也可以

快捷键 作用
i, I 进入输入模式(Insert mode): i 为『从目前光标所在处输入』, I 为『在目前所在行的第一个非空格符处开始输入』。 (常用)
a, A 进入输入模式(Insert mode): a 为『从目前光标所在的下一个字符处开始输入』, A 为『从光标所在行的最后一个字符处开始输入』。(常用)
o, O 进入输入模式(Insert mode): 这是英文字母 o 的大小写。o 为『在目前光标所在的下一行处输入新的一行』; O 为在目前光标所在处的上一行输入新的一行!(常用)
r, R 进入取代模式(Replace mode): r 只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)

这一部分没什么好说的,因为没有快捷键(否则你打着打着代码就触发了什么快捷键)

Visual模式

可视化模式在很多文献中都没有介绍,但是是一个非常好用的模式,在这个模式下你可以用鼠标选择内容要选取一段文本,首先将光标移到段首,在普通模式下按 v 进入可视模式,然后把光标移到段末。 需要注意,光标所在字符是包含在选区中的

  • v 进入字符可视化模式
  • V 进入行可视化模式
  • Ctrl+v 进入块可视化模式
    块选择在表格中删除指定列非常有用
    用 v 命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。
    用 V 命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。
    用 ctrl-V 进入的块可视化模式(Blockwise visual mode)。可以选择一个矩形内的文本。

使用鼠标或者hjkl即可选中字符/行/块,然后可以y,x…
更有用的是对块批量操作,例如批量注释可以这么写
批量注释:
Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。
取消注释:
Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出
还可以在选择文字后输入:然后把你在平时这么用的就怎么写,注意按:会多出一些东西不要管他,例如

:A //这是一堆注释

然后Vim会根据你所写,先对每一样在Normal模式下使用A把光标移动到该行行尾,然后进入Insert模式输入//这是一堆注释对每一行都操作结束之后就会自动退出到Normal模式
具体的这个模式如何使用见Vim可视化入门

配置vim

安装好的vim文件夹下有一个_vimrc文件,相当于Linux下vim的.vimrc文件,在里面配置vim,大多数情况和Linux一样。
Windows 7 C:\Program Files\Vim\_vimrc中默认是这样的——

" Vim with all enhancements
source $VIMRUNTIME/vimrc_example.vim

" Use the internal diff if available.
" Otherwise use the special 'diffexpr' for Windows.
if &diffopt !~# 'internal'
  set diffexpr=MyDiff()
endif
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg1 = substitute(arg1, '!', '\!', 'g')
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg2 = substitute(arg2, '!', '\!', 'g')
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let arg3 = substitute(arg3, '!', '\!', 'g')
  if $VIMRUNTIME =~ ' '
    if &sh =~ '\<cmd'
      if empty(&shellxquote)
        let l:shxq_sav = ''
        set shellxquote&
      endif
      let cmd = '"' . $VIMRUNTIME . '\diff"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  let cmd = substitute(cmd, '!', '\!', 'g')
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
  if exists('l:shxq_sav')
    let &shellxquote=l:shxq_sav
  endif
endfunction

你会发现在Vim安装目录和C://User/你的用户名下还有一个,我们使用自己用户名下的,如果没有的话就自己新建一个,这个不是因为你的Vim没安装,他就是没有。

第一个Vim配置,行号

找到或者新建这个文件,右键选中用Vim打开,我们就打开了一个空的_vimrc文件,试着往里面写下set number,这个配置的意思是自动为添加行号,这样你写代码就可以在左边看到行号了
按动ZZ(大写的)保存文件,然而行号并没有出来,这是因为我们没有"刷新配置文件",在Normal下输入命令:source $MYVIMRC然后你就可以看到行号了,至此你成功配置了第一个Vimrc

设置快捷键映射

但是这似乎比较麻烦,每次修改之后还要输入那么长的刷新保存,如果有个快捷键帮助我们就好了,我设置的快捷键是大写的R,也就是Shift+R,那么我们应该如何设置呢?首先要想好自己要设置的快捷键,不能与之前的快捷键相重合,还有快捷键的生效范围,是只有在Normal模式下生效还是在四个模式下都生效。例如我将大写R作为快捷键最好只在Normal下操作,否则在Insert模式下我输入大写的R就没法输入了,但是例如F5这样的快捷键从来不会与其他模式冲突我们就可以设置为全局的
快捷键映射可以将一个组合键映射到一个命令,一个其他的组合键或者其他语法为

前缀+map 快捷键 映射结果

这里的前缀限定了map的作用范围是那几个模式,不写前缀默认是前缀n

  • nmap:只有在Normal模式下生效
  • vmap:只有在Visual模式下生效
  • imap:只有在Insert模式下生效
  • cmap:只有在行底命令的模式下生效
  • Xnoremap:X是前面的n/v/i/c,nore表示非递归的例如a被映射为了b,b被映射为了c,那么如果是递归的的话a就映射为了c

对于被映射与要映射的动作按键遵循以下写法

  • 普通按键就直接写
  • Alt组合键写成<A-X>,例如Alt+S就是<A-S>
  • Ctrl组合键写成<C-X>,例如Ctrl+S就是<C-S>
  • FX写成<FX>,例如<F5>就是F5
  • 四个方向键写成<方向>,例如<LEFT>就是方向左键
  • ESC就写成<ESC>
  • Leader键就写成
  • 回车写成<CR>

关于leader键:
Vim预置有很多快捷键,再加上各类插件的快捷键,大量快捷键出现在单层空间中难免引起冲突。为缓解该问题,而引入了前缀键<leader>。藉由前缀键, 则可以衍生出更多的快捷键命名空间(namespace)。例如将r键配置为<leader>r<leader><leader>r等多个快捷键。前缀键默认为\
但是在我的键盘上\太远了,于是我就把leader换成了空格,只需要如下的命令let mapleader = "\<space>"写在开头就完成了替换。

针对上面的问题我们就可以把刷新配置文件映射成S,配置如下

map R :source $MYVIMRC<CR>

安装插件管理器

Vim好用就在于有大量插件供我们使用,这样我们可以自己配置自己喜欢的Vim,这里我们介绍插件管理器Vim-Pluig,同时我们一般的插件都是在GitHub上托管的,所以我们一般也是在GitHub上找插件,Vim的插件非常好识别,他使用的语言大多会写Vim script

打开插件管理器所在仓库。

下载如下文件并放入Vim的安装目录下的autoload。

这样我们就完成了插件管理器的安装
之后我们开始尝试安装第一个插件
首先在vimrc中写下这样三行,他可以帮助插件管理器识别你要装那些插件

call plug#begin('~/.vim/plugged')

call plug#end()

以后只要是需要安装的插件我们只需要把地址写在里面就可以直接安装了

另一款插件管理器—— Vundle 的安装教程:Windows gvim安装插件_gvim插件

尝试安装第一个插件

我们先来尝试安装一个主题插件。
首先我们找到这个主题的GitHub库
那如何告诉插件管理器我要安装这个插件,这个插件的安装包在哪里呢?
刚刚那个库的地址是
https://github.com/connorholyday/vim-snazzy
我们发现https://github.com/是GitHub的前缀,而插件管理器默认库在GitHub所以只要告诉插件connorholyday/vim-snazzy就可以了,于是我们只需要在哪两行代中间写上:

Plug 'connorholyday/vim-snazzy'

即为——

call plug#begin('~/.vim/plugged')
Plug 'connorholyday/vim-snazzy'
call plug#end()

完事,我们要让插件管理器去安装它,只需保存并刷新配置文件,输入命令:PlugInstall回车,等他跑完进度条即可。
至此我们完成了第一个插件的安装。

尝试卸载第一个插件

如果哪一天插件不想要了,可以卸载,方法很简单,要么删除插件安装的哪一行,要么把他注释掉(vim下的注释是"),然后保存刷新配置文件,输入命令:PlugClean

Powershell中使用Vim

执行Set-ExecutionPolicy RemoteSigned命令,在对话框中选择Y

重启Shell,输入vim进行测试

参考

1. vim 的安装及配置 - QIYUEXIN - 博客园
windows10安装配置vim_win10 vim_八块腹肌怎么练的博客
Vim使用全指南 (环境配置,插件推荐,美化) (C++,Python,MarkDown,R...)_vim 编辑插件_Liukairui的博客
Powershell中使用Vim_powershell输入vim后蓝屏了_themingyi的博客
(Linux学习笔记) - vi/vim编辑器的使用
Windows gvim安装插件_gvim插件_其铄的博客-CSDN博客