星期三, 五月 30, 2018

VIM学习笔记-开篇

一直在学,也一直在用Vim。一直遇到问题,也一直在得到答案。慢慢的,Vim成了我最重要的文本编辑器和网页编辑器。

文章溯源

某日在某Blog,下载了一个名为《vi编辑器的学习使用》的文件。打开一看——密密麻麻的文字有一百多页。当时,觉得复杂的可怕。现在,才越来越发现它的价值。每次有所疑问,都能从这个文件中找到解答。每天花十几分钟,阅读几十行,也有不少收获。可问题是,这个文章的排版真是糟糕,命令和文字混在一起,内容也缺乏有条理的组织,阅读起来十分吃力。所以,我在边阅读时也边整理(同时也结合了其他阅读资料),希望能把它以更好的形式展示出来。我将文章按主题分拆为多个章节,并尽量控制每节的信息量,以便读者消化其中的知识;每节中通过文字色彩和字体,将命令、快捷键突出显示出来;在每节结尾,提供一个命令列表,以便回顾文中介绍的重要命令。如果这些文章能对喜欢Vim的朋友有所益处,我将不胜荣幸。

发展历史

1976年,Bill Joy开发了vi,他毕业于伯克利大学,后来共同成立了Sun Microsystems公司并成为了Sun的首席科学家。一开始Bill开发了ex,尔后开发了vi作为 ex的visual interface,也就是说vi允许一次能看到一屏的文本而非一行,所以vi也代表visual editor。

1988年,Bram Moolenaar在Amiga计算机上改进一个叫Stevie的VI版本,他称之为“Vi IMitation”。

1991年11月2日,Vim的首个版本1.14g公开发布。Vim既是开源软件(Opensource),也是慈善软件(Charityware)的概念,你可以自由地使用Vim,但鼓励用户通过ICCF Holland为乌干达的孤儿做出捐助。

1992,随着功能逐渐丰富的1.22版本发布,VIM的名称也想要改成了“Vi IMproved”。相比原始的VI,VIM增加的一项最重要的功能便是多级撤销,VI只支持一级撤销。

Timeline
1988Vim 1.0Vi IMitation on the Amiga
1991Vim 1.14First public release (on Fred Fish disk #591)
1992Vim 1.22Port to Unix
1993Vim 2.0Renamed to Vi IMproved
1994Vim 3.0Multiple buffers and windows
1996Vim 4.0GUI
1998Vim 5.0Syntax coloring and highlighting
2001Vim 6.0Folding, plugins, multi-language
2006Vim 7.0On the fly spell checker, support for tabs
2016Vim 8.0Jobs, Timers, Partial, Packages

功能哲学

Vim起初是为在终端中使用而设计的,但现如今已有多种图形界面提供菜单、工具栏和滚动条。普通用户可以完全无障碍的使用常用的文本编辑功能。而追求编辑效率的程序员,其它经常处理纯文本的人员,Web 开发人员,编写LaTeX文档的研究人员,Unix / Linux 系统管理员,也能找到自己需要的特定高级功能。

多模式编辑 Vim设计在不同的模式下,分别进行文字录入和文字操作。你可在插入模式下,像普通文本编辑器那样输入文字;而退回到常规模式,则可以利用命令和快捷键对文字进行增、删、改等等处理。 为了高效使用Vim,我们必须习惯尽量停留在常规模式:只在必要时进入插入模式以输入文字,然后立刻使用Esc键退换到命令模式,这样双手不用离开键盘就可以继续对个别乃至整篇文本进行下一步操作。

跨平台 Mac上有MacVim,Windows上有GVim, Linux上有Vim。而且,在不同的平台上可以使用相同的命令和插件完成相同的任务。所以,看似陡峭的学习曲线也同时带来更大的持续回报。

可度灵活的可配置性 在Vim生态之中,有大量不同的插件专注于完成不同的任务。比如:格式化代码,自动化备注,整合Git/Github,语法高亮度等等。再配合Vim强大的自定义配置能力,你完全可以按照自己的喜好定制出一个属于你的开发环境。

强大的搜索功能 Vim可以对文本进行及其复杂的查找和替换,包括对正则表达式(regular expressions)和grep的全面支持。

丰富的帮助信息 不提网上浩如烟海的Vim文档,只是内置的在线帮助 “:help” 就已经完整的令人发指!

笔记目录

第一部分 基础知识

第二部分 高阶操作

第三部分 模式详解

第四部分 文字处理

第五部分 图形界面

第六部分 多文件操作

第七部分 自定义系统

第八部分 代码开发

第九部分 正则表达式

第十部分 脚本