Vim 系列教程目录:php
Vim, 上古时期的编辑器, 号称编辑器之神. 我相信搞软件开发的大都据说过, 并且大多数人其实都多多少少用过 Vim. 什么? 你没用过? git commit
了解一下, Git 写提交信息时默认的编辑器就是 Vim 啊.前端
提起 Vim, 不少人的第一印象是: 功能强大, 可是难学, 难用, 能用 Vim 的要么是大牛, 要么是在装B... 老实说, Vim 在服务端用的比较多, 由于默认状况下, Vim 是服务器上惟二的选择(还有一个叫 Emacs 的上古神器), 搞客户端/前端/游戏/人工智能大数据开发的, 通常不怎么用 Vim. 并且如今各类编辑器, IDE(集成开发环境) 层出不穷, 界面美观, 功能强大, 上手容易, 而 Vim 以界面简陋, 上手困难著称, 这么一对比, 选择 Vim 的人愈来愈少, 对其望而生畏, 也不难理解.git
可是, 我仍是想写一些关于 Vim 的文章, 一来是总结记录我这些年来使用 Vim 的心得; 二来, Vim 其实真的是个很优秀的编辑器, 它就像一个其貌不扬却却充满智慧的男人, 你越深刻了解, 越能发现其魅力, 直到你爱上他, 离不开他(咳咳, gay 里 gay 气的).shell
听上去我像是个忠实 Vim 粉, 随时都要引起编辑器圣战. 其实不是的. 我在大学期间就学习了 Vim, 到如今也有六七年了, 中间也曾换过 Notepad++, Sublime, VSCode 做为主力编辑器, 各类 IDE 也都用过(Eclipse, AndroidStuido, JetBrains 全家桶等等), 最终我选择了 VSCode/IDE + Vim 插件做为主要的开发工具, 而 Vim 自己, 是我平时写文档, 记笔记, 简单修改 log/配置文件的工具.vim
我向你推荐 Vim, 不是要你把它看成主力工具, 而是但愿你能经过学习了解它, 学习一种高效的编辑方式, 同时你也能发现一些神奇的, 有趣的功能, 你能够在你喜欢的工具中添加 Vim 插件, 提高你的编辑效率, 这才是重点. 另外, 这系列文章并不会教你把 Vim 打形成 IDE, 即便对于我来讲, Vim 仍是做为一个文本编辑器比较合适.服务器
官网下载地址: www.vim.org/download.ph…编辑器
Windows 版本请点击: ftp.nluug.nl/pub/vim/pc/…工具
注意, 下载的文件名是 "gVim81.exe", gVim 的意思是带图形界面(Graphic)的 Vim, 由于 Vim 默认是在命令行里用的, 没有图形界面, 实在是太不友好了, 因此官方出了个 gVim, 有图形界面, 相对友好一些.post
PS. 我如今的电脑是 Windows, 因此如下都会以 Windows 版本的 gVim 作演示.学习
下载以后双击下一步下一步安装就行了, 没啥须要注意的, 安装好会在桌面上生成三个图标: gVim, gVim Easy, 以及 gVim Read-only, 注意, 请点击 gVim 图标来打开 Vim, 或者你也能够在某个文件上右键, 选择"用 Vim 编辑".
打开 Vim 以后, 你会发现这玩意奇丑无比, 简直不像21世纪的产物. 不要急, 咱们先不要管界面, 先学习使用, 后面咱们会慢慢地把它变好看(因此男人也得学会打扮啊).
接下来, 咱们就能够学习使用 Vim 了. 我不建议你如今立刻就去看官方文档(否则我写这些文章还有啥意义, 大误...), 由于直接看文档很容易看懵. 既然你选择看我这系列文章, 那么就安心看完, 以后你必定有所收获, 而且已经掌握基本使用和进阶技巧, 再去看官方文档就会轻松不少.
Vim 和普通的编辑器有一点很是大的区别, 或者是是本质的区别: Vim 是有不一样的模式(状态)的. 普通的编辑器, 你一打开就能够进行输入(打字)了, 很符合直觉, 打开就会用, 就好像使用 Word 同样. 可是 Vim 和他们不同, 你打开 Vim 以后, 是处于一种没法编辑的状态中的, 这是 Vim 的普通模式, 在这种状态下, 你是没法输入文字的, 只能执行一些指令.
在普通模式(默认模式)下, 你可使用 h,j,k,l
这几个按键来移动光标, 这四个键分别表明 左,下,上,右. 若是想输入文字, 你须要按下键盘上的 i
键, 才能进入可编辑的状态, 即 Vim 的插入模式, 才能像使用普通编辑器同样打字.
能够说, 正是因为 Vim 有不一样的模式, 才使得 Vim 的编辑效率远超其余编辑器. 模式是 Vim 的基础, 这里有必要先介绍一下 Vim 的几种模式.
Vim 有五种模式:
接下来我介绍如下如何进入/退出这几种状态, 我会把全部方式都列举出来, 可是如今你只需使用最简单的一种方式便可.
在开始以前, 请连续按几回 Esc 键, 保证你处于普通模式(不管你如今在任何模式下, 按 Esc 键可让你回到普通模式).
要从普通模式进入插入模式, 最简单的方法就是按 i
键, 你能够理解为 "insert". 按过 i 键以后, 你就能够打字了.
除此以外, 你还能够:
在继续学习以前, 请先输入一些文本(最好是英文), 以供后续的操做使用. 另外, 若是操做过程当中, 你不知道本身处于什么模式了, 那就连续按几回 Esc, 回到普通模式, 再继续进行操做. 遇事不决 Esc!
在普通模式下, 按 r
键(小写)可进入替换模式, 你能够理解为"replace". 此时你再次输入的字符, 能够替换光标处的那个字符. 若是你想连续替换多个字符, 则按 R
键(大写, 即 Shift+r), 此时你的输入会不断地替换光标处的字符. 想退出持续替换模式, 按 Esc 便可.
除此以外, 你还能够:
3rs
能够把光标向后的三个字符都替换成 s在普通模式下, 按 v 键可进入可视模式(选择模式), 你能够理解为"visual". 进入可视模式后, 你能够选择一些文本, 此时你使用 h,j,k,l 键, 能够改变选择的区域, 当你选择了一些文本后, 可使用一些执行操做你选择的文本, 这个后面再介绍. 要退出可视模式, 按 Esc 键或者 v 键.
除此以外, 你还能够:
在普通模式下, 按 :
键(即 Shift+;)便可进入命令模式, 此时光标会跑到编辑器的最底部, 你能够输入一些命令, 按回车执行, 执行完命令以后自动回到普通模式, 或者你能够直接按 Esc 回到普通模式.
任何模式下, 你均可以按 Esc 回到普通模式, 一次不行就多按几回, 遇事不决 Esc.
OK, 如今你想一下记住这么多模式以及进入方法, 确定是比较困难的. 这里说一下, Vim 不是学会的, 是用会的. 与其学怎么操做, 不如按照教程本身多作几回, 多用几回天然就记住了, 不用担忧把 Vim 折腾坏了, 大不了重装(滑稽).
接下来咱们就来学学普通模式下的一些指令. 普通模式是进入 Vim 后的默认模式, 在这种模式下, 没法输入, 只能移动光标或对文本进行操做.
在进行下面的操做以前, 请先保证你输入了必定量的文本(最好是英文. PS. 也别最好了, 请必定保证是英文, 中文会遇到一些小状况, 影响效果).
另外, 下面的指令很是多, 不可能背下来, 要经过"用"去记忆.
注意: 数字+指令表示执行屡次指令, 数字通常放在指令以前, 不少指令前面均可以加数字, 这个技巧很重要.
在普通模式下, 能够进行文本的复制, 剪切和粘贴, 这里要注意的是, 在 Vim 中, 剪切和删除的表现效果是同样的, 剪切或删除的文本都会进入到 Vim 的寄存器里(寄存器是什么鬼, 之后会讲).
注意: 几乎全部的移动, 复制, 粘贴命令前面均可以加数字, 表示重复的次数, 复制和剪切指令也几乎均可以加上移动指令, 表示向某个方向复制/剪切.
在普通模式下输入 /
, 便可对当前文件进行文本查找.
.*[]^%/?~$<>
等有特殊意义, 须要用 \ 转义/\\<xxx\\>
: 匹配完整的单词, 若是某单词中只是包含 xxx, 则不会被匹配上, 因为 >
有特殊含义, 因此须要转义, 因为 \
也有特殊含义, 须要二次转义...PS. Vim 会记录已经查找过的内容, 再次查找时, 可经过上下键来切换以前的输入
注意: 一个有用的命令: nohlsearch, 此命令能够取消当前的查找的高亮, 简写 nohl
在普通模式下, 可使用以下指令进行简单的文本操做:
>>/<<
: 当前行向右/向左缩进一个 Tab行号1 行号2 >>
: 从行号1到行号2向右缩进一个 Tab行号1 行号2 <<
: 从行号1到行号2向左缩进一个 Tab普通模式中按 v 键可进入可视模式(选择模式), 按 Esc 或 v 退出, 选择过程当中可以使用普通模式的移动指令改变选择区域, 选择以后能够对选择的内容进行复制/删除等操做.
普通模式中按 V 键进入整行可视化选择, 再按 Esc/V 退出, 以"行"为单位进行选择.
可视模式下的一些技巧:
在普通模式下按 : 进入命令模式, 能够执行一些 Vim 命令, 也可执行系统命令.
在我这系列 Vim 的文章中, 我会将普通模式下的操做称之为 "指令", 而命令模式下的操做称之为 "命令", 虽然在英文中, 它们都是 "command", 可是我这里仍是想区分开来, 之后我只要说 "指令", 指的就是普通模式的操做, 而 "命令", 指的就是命令模式下的操做.
:w
: 保存当前文件, 但不退出. 注意, 若是你是直接打开 Vim, 而后开始编辑, 你是没法直接使用 w 命令保存的, Vim 会提示你没有文件名, 要解决这个问题, 你须要在 w 命令后面跟上一个路径及文件名, 好比: :w d:/temp/test.txt
, 这样你才能保存当前文件. 这就比如你在其余编辑器里新建个文件, 当你要保存时, 其余编辑器会弹一个对话框, 让你选择保存路径, 只是 Vim 把这个过程命令化了.:q
/:q!
: 退出/强制不保存退出, 在任何命令后加 ! 表示强制执行此命令.:wq
: 保存并退出当前文件:e!
: 放弃全部修改, 载入文件的初始状态, 慎用!:pwd
: 显示当前目录:行号
: 定位到对应行号, 例如 :20
可定位到第20行, 和普通模式下的 20G 效果同样.行号1,行号2 d
: 删除从行号1到行号2的内容, 例如: :3,5 d
表示删除第3行到第5行, y 指令也一样适用.行号1,行号2 >>
: 从行号1到行号2向右缩进一个 Tab, 同理, 也能够向左缩进:! shell指令
: 执行 shell(dos) 指令, 例如: :! ipconfig
:r! shell指令
: 将 shell(dos) 指令的执行结果写到当前行的下面PS: 在命令模式里按上下箭头能够切换以前输入的命令
在普通模式下, 按 /
能够进行查找操做, 在命令模式下, 可以使用一些替换命令, 将查找到的文本的进行替换.
替换的基本表达式 [range]s/from/to/[flags]
, 表示将 range 范围的 from 替换成 to, flags 表示替换范围. 替换指令使用起来很复杂, 暂时不须要掌握.
:%s/aaa/bbb/g
: 把全文中的全部 aaa 替换成 bbb, %s 表示所有行(range), g 表示全部匹配的(flags):s/aaa/bbb/
: 把当前行的第一个 aaa 替换成 bbb, s 表示当前行(range), 不指定 flag 就只替换第一个:行号1,行号2s/aaa/bbb/g
: 把行号1和行号2之间的 aaa 替换成 bbb.:行号1,行号2s/^/aaa/g
: 把行号1和行号2之间的行前面都加上aaa(便可以使用正则, ^表示行首):行号1,行号2s/^/\/\//g
: 从行号1和行号2之间的行都加上//注释(/须要转义):行号1,行号2s/\/\//g
: 从行号1和行号2之间的行都去掉//注释PS. 在替换命令中 . 表明当前行, $ 表示最后一行
好了, 到此为止, Vim 的基本操做已经讲完了, 我相信你已经能够打开 Vim, 进行文字编辑, 并保存文件了.
上面列出的指令命令很是多, 须要你在使用过程当中慢慢记忆, 仍是那句话, Vim 不是学会的, 是用会的.
其实我这一系列教程就不错. emmm... 真的, 看完以后, 你必定能够掌握 Vim 的基本使用以及进阶用法, 并且我还讲了一些初学者会遇到的问题, 可以解释不少奇怪的现象.
Vim 自带一个交互式教程, 在 Linux/Mac 的 Vim 中, 你能够在命令模式下输入 vimtutor
开启这个教程, 在 Windows 下, 你能够打开 Vim 安装目录下的 vim81/vimtutor.bat 来开启这个教程. 这个交互式教程会开启一个 Vim 副本, 你能够随便在里面操做, 没必要担忧搞坏. 教程比较精炼, 一小时左右能够学完, 掌握 Vim 的基本操做.
固然了, 若是你想看更详细的教程, 我推荐 Vim 的官方文档. Vim 有很是详细的官方文档, 文档就是最权威的 Vim 教程. 要查看文档, 可在命令模式下输入 help
便可. 若是要查看某个主题的帮助文档, 则输入 help <主题>
便可. 看文档的时候按 Ctrl-]
跳入某个子主题, Ctrl-t/o
跳回来.
这里有个问题: 默认状况下文档是英文的, 看起来仍是很费劲, 这里给出一份中文文档:
连接:pan.baidu.com/s/1jpCwdBPH… 提取码:cyqf
里面有 PDF 版本, 还有一个安装程序, 会自动将中文文档安装到你的 Vim 安装目录下, 很贴心吧.
不过如今仍是不建议你看文档, 很容易看懵. 仍是继续把我这系列教程看完吧.