vim简单教程及配置

vim是什么?

既然今天是向大家安利vim,那么先说说安利的原因吧:

通过官网链接下载vim并且安装后,我们可以看到vim的启动界面——

唔,请关注重点……

我是在安利读者为慈善事业做贡献呢!

这个逼装的,我给99分……剩下1分哪里去了呢?

——剩下一分是因为vim确实确实非常好用

言归正传,vim是一款编辑器,而编辑器是什么呢?

编辑器就是类似于notepad(记事本)这样的只能用来打字的工具,而当这种工具集成了编译运行调试等等功能后,就成了集成开发环境(Integrated Development Environment)也就是我们常说的IDE,比如DevC++和VC6.0。

IDE与编辑器的区别就在于由于IDE集成了所有功能,所以对初学者非常友好,但是开发效率通常来说比较糟糕,反之,编辑器一心只做编辑方面的优化,所以在编写代码方面效率完爆IDE。这些在之后都会提到。

Vim作为一个编辑器,作者亲身经历表示他至少能让你的代码编写速度提升一倍,而且和vim配套使用的g++,gdb还会使你的代码调试速度变成原来的三倍甚至更多。

为什么是vim

  1. 作者作为一个vim党,当然会推荐vim咯
  2. 帮助乌干达的可怜儿童
  3. 无视个人偏好,emacs,notepad++,sublime等“编辑器”都是很不错哒(换句话来说dev-c++,vc6.0,xcode等IDE就不符合这篇文章的核心思想了),当然,vim也属于这些编辑器中的一个
  4. 以后同学们编写代码不一定是在本机,有可能需要登录到其他电脑上,这时能够在终端里面使用的编辑器据我所知也就vim和emacs了,到时候即使你是一个资深IDE党也不得不去学习使用vim。
  5. 我曾在计算机系群里的调查,结果如下(大势所趋,不服不行啊……):
    1. 明确表示使用编辑器编程的同学们中,vim党最多
    2. 对于所有的被调查者vim也有相当大的优势

vim怎么用

不同平台的vim其实都是大同小异的

我们接下来就用mac下的终端vim举例了。

安装

不同平台vim的安装方式不同

  • Windows用户:在vim官网中搜索安装方法与安装文件,需要注意的是,windows下的vim是gvim,表示图形界面版本的vim。
  • Linux用户:可以使用该发行版自带的包管理器安装vim,比如Ubuntu使用 apt install vim
  • Mac用户: brew install vim

与此同时,倘若用vim写C++程序的话,我们还需要安装g++与gdb。

  • Mac用户: brew install g++ ,gdb最好就改成mac自带的lldb好了
  • Ubuntu用户: apt-get install g++ && apt-get install gdb
  • Windows用户:
    • 方法1:首先安装Dev-C++,在安装目录中找到g++,gdb所在的目录,将目录加入windows环境变量path中,至于环境变量该怎么用,有什么意义,不是本文探讨的范畴。
    • 方法2:安装MingW,然后使用mingw-get安装g++。

运行

Windows用户

windows用户在桌面打开图标就好了。

当你看到帮助乌干达的可怜儿童那句话就说明你成功打开vim了~

注意vim存在一个当前目录的概念,windows大家最好还是通过“用Vim打开”一个目录特定文件的方式进入vim以确保当前文件夹就是你想要储存文件的文件夹。否则,倘若直接打开vim的桌面快捷方式,你保存的文件会去一个奇奇怪怪的地方。

而检验gdb/g++是否安装成功,你只需要在CMD里面输入命令 g++ ,看是否报错说没有该命令。

MAC/LINUX用户

mac、linux用户在终端输入vim命令即可,在mac/linux终端里面,你在哪个文件夹下打开的vim,vim的当前目录就是哪个。

而检验gdb/g++是否安装成功,你只需要在终端输入命令 g++ ,看是否报错说没有该命令。

vim简易教程

首先,vim官方是有教程的,在开始界面输入 :help 就可以直接进去

其次,如果想要学习vim,最好拿着电脑跟着教程亲自试一试

最后,要有心理准备,你可能会经历一周左右生不如死的适应过程。

第一步:像用记事本一样用vim

先说个笑话:

问:如何生成随机字符串
答:让萌新退出vim

大家可以自己尝试一下(windows用户不允许使用窗口那个红叉叉)就会发现,进入vim后,不但不容易退出,甚至按键盘是无法直接开始编写程序的,因为vim分为不同模式,开始时进入的模式叫做“命令模式”,是专门输入命令的,而我们需要在“插入模式”中写程序。

模式切换

命令模式:输入命令的模式。之后没有特殊指名,所以命令都在命令模式下输入

插入模式:输入字符直接插入文本的模式

  • 命令模式->插入模式: i
  • 插入模式->命令模式: <esc>

基本操作

vim中,有很多操作以冒号开头,这些操作使用频率相对较低,但不影响其重要性:

退出vim:退出 :q 或强制退出 :q!

  • 查看帮助: :help
  • 运行命令: :!<command> ,例如 :!ls 列出当前文件夹下文件(命令的执行目录为当前vim打开的文件的目录)
  • 保存文件: :w 或 :w <filename>
  • 打开文件(若不存在新建): :e filename

保存与打开文件可以为绝对路径,也可以为一个文件名,此时默认在“当前目录”打开

快捷操作

在命令模式中,命令不一定以冒号开头。

  • 剪切/删除一行: dd
  • 粘贴: p
  • 撤销: u
  • 回退: <ctrl+r>
  • 光标移动:方向键或 h / j / k / l

第二步:像IDE一样用vim

先从一个特定目录进入vim,然后编写程序,并保存为a.cpp.

我们知道,倘若在终端下切换到了源文件所在目录,执行 g++ a.cpp o a 可以将当前文件下的a.cpp编译为可执行文件,同理,调用 gdb ./a 可以使用gdb调试程序(mac是lldb)。

我们还知道,vim中,我们可以使用 :!<command> 调用外部命令,所以我们在vim中输入 :!g++ % -o %< 就等同于从终端用g++命令编译源文件。(注意:命令中的 % 表示当前vim正在编辑的文件的文件名,而 %< 则表示他去了后缀的文件名。)

通过上面所述的手段,我们可以实现在vim中的编译运行:

  • 编译: :!g++ % -o %<
  • 调试: :!gdb %<
  • 运行: :!%< 
  • 查看空间: :!size %<

vim提供了键盘映射函数map,形如 :map A : B ,那么如果我们提前用了映射命令,就不用输入编译命令了。

  • 编译: :map <F9> : !g++ % -o %< <CR>
  • 运行: :map <F6> : !%< <CR>
  • 调试: :map <F5> : !gdb %< <CR>

其中, <CR> 表示回车,读者可以试试没有这个 <CR> 会变成什么。

通过了映射,我们可以直接按 <F9> 编译,按 <F5> 调试。

最后,由于这些map命令时预处理性质的,我们可以将它写入一个叫做vimrc的文件,每次打开vim的时候自动加载

  • 在mac/linux中该文件为 ~/.vimrc
  • 在windows中,可在菜单栏-编辑-启动设置中直接修改

比如我们可以在vimrc中加入

 

第三步:定义自己的vim

之前已经知道vimrc中可以定义编译运行快捷键,实际上还可以有更多的自定义属性,比如:

  • 左边显示行号: set number
  • 查找命令高亮: set hlsearch
  • 开启自动缩进:
    • set smartindent
    • filetype plugin indent on
  • 用鼠标拖拽分栏: set mouse=a
  • 设置折叠: set fdm=marker
  • 设置缩进:
    • set tabstop=2
    • set softtabstop=2
    • set shiftwidth=4
  • 设置代码高亮: syntax on
  • 令插入模式jj为退出: imap jj <esc>
  • 设置颜色: colors evening

其中,颜色我推荐大家使用

加上这些命令之后,界面美观度一下就上升了——

最后,读者可以在文末找到我的vimrc配置文件。

第四步:神一般的编辑器

了解完之前的只是,我们也只能把vim当做记事本来用,下面介绍一些快捷键,可以极大加快编写代码的速度。在开始了解快捷键前,你需要知道vim快捷键的设计初衷是让你可以不用鼠标,甚至手不离开主键盘就可以打字。

基本操作

vim中,有很多操作以冒号开头,这些操作使用频率相对较低,但不影响其重要性:

  • 退出Vim: :q
  • 强制退出Vim: :q!
  • 查看帮助: :help
  • 运行命令: :!<command> ,例如 :!ls 列出当前文件夹下文件(命令的执行目录为当前vim打开的文件的目录)
  • 保存文件: :w 或 :w <filename>
  • 强制保存: :w!
  • 保存并退出: :wq
  • 打开文件(若不存在新建): :e filename

撤销操作

  • 撤销: u
  • 回退: <ctrl+r>

分栏

  • 竖向分栏: :vsp
  • 横向分栏: :sp
  • 不同栏跨越: :<ctrl+w> <up>/<down>/<left>/<right> 或 :<ctrl+w> i/j/k/l

多文件

打开vim时用 vim a.cpp b.cpp 或 vim *.cpp 可以同时打开多个文件,不过第一个文件全屏显示,需要通过快捷键切换。

  • 下一个文件: :n
  • 上一个文件: :N

进入插入模式

  • 当前光标前: i
  • 当前光标后: a
  • 当前行首: I
  • 当前行末: A
  • 当前行后新建一行: o
  • 当前行前新建一行: O
  • 退出插入模式:
    • 默认:  <esc>
    • 在配置文件中加入 imap jj : <esc> 之后,可用 jj 退出插入模式

进入覆盖模式

  • 进入字符覆盖模式,并在覆盖后回到命令模式: r
  • 直接进入覆盖模式: R

复制粘贴与删除

  • 复制当前行: yy
  • 剪切当前行: dd
  • 删除光标位置字符: x
  • 复制之后的10行: 10yy
  • 剪切之后的10行: 10dd
  • 全文复制: :%y
  • 复制第3行到第5行: :3,5 y
  • 剪切第3行到第5行: :3,5 d
  • 粘贴: p
  • 粘贴10份: 10p

光标跳转

  • 行首: ^
  • 行末: $
  • 第5行: 5G 或 :5
  • 光标移动:方向键或 h / j / k / l
  • 文首: H
  • 文末: L

查找替换

  • 查找: /pattern
  • 全文替换: :%s/old_pattern/new_pattern/g
  • 全文替换(每行替换第一个匹配): :%s/old_pattern/new_pattern
  • 第5至10行替换: :5,10s/old_pattern/new_pattern/g
  • 跳到下一个: n
  • 跳到上一个: N
  • 替换所有int单词(正则表达式使用): :%s/\<int\>/long long/g

代码缩进

  • 自动缩进: yy=G 或 gg=G
  • 第五行到第十行向前缩进: 5,10 <
  • 第五行到第十行向后缩进: 5,10 >
  • 接下来五行向前缩进: 5<<
  • 压行: J

其他

  • 括号匹配: %
  • 宏定义(录制操作): q<name>
  • 宏定义调用: @<name> 或 @@
  • 调用make命令: :make

再论Vim的好处

效率高

  1. 使用了vim你的手甚至可以不动鼠标,不离主键盘
  2. 编程中存在的很多类似于复制特定行,粘贴若干遍的操作在vim下都是可以用命令解决的
  3. 查找替换功能强大,连不能查找替换的很多功能都可以用宏来解决,对于批量修改帮助极大
  4. 其配套的gdb让你永远告别肉眼查错,进入二分查错的行列,复杂度直接从O(N)降到了O(logN)

用途广

  1. 基本上所有平台都有vim,而其他IDE只能在特定平台用
  2. vim的操作不依赖于具体语言,不需要每学一门语言都重新学习一个新的IDE
  3. 有丰富的插件可以使用(但是插件方面Vim比起Emacs还是差远了)
  4. Vim模式在很多地方都有支持,比如Emacs和Sublime,所以你学了Vim还可以直接迁移到这些平台上

好玩

  1. 突然发现找到了除大括号换不换行(当然要换)之外新的战场:编辑器用Emacs还是Vim(当然是Vim),引战什么的最好玩了~
  2. 我这人还是非常支持慈善事业的

结语

愿世界和平,乌干达儿童幸福快乐~

 

原文为《【和平向】一波vim安利》,计62班级公众号

配置文件

总结下来,一个简单的windows版vimrc如下(其中1-33行是自带的内容,34行之后是自定义内容),这个版本适合OI党使用,可以现场手敲vimrc。

MAC版的vimrc如下(支持了更多文件的运行快捷键)

最后,可以在这里找到我的最新的vimrc

原创文章地址:【vim简单教程及配置】,转载时请注明出处mhy12345.xyz

《vim简单教程及配置》有3个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.