Vim 学习卡和提鞋的问题

vimemacs1

题图由GraphSketcher(大名鼎鼎的Omni提供的免费开源产品)绘制。

Vim 这个系列很久没写了,今天从坑里捡起来,发现灰落了厚厚一层,抖掉灰尘,我决定续写 Vim 。在纸版《MacTalk·人生元编程》里我已经写了 Vim 缘起、模式、帮助、配置、概念、技巧和部分常用插件,手里有书的可以先看看那部分内容。今天准备写写 Vim 学习卡。

说到 Vim,常常让人想起 Emacs,在这个蓝色的星球上,在编辑器领域,永远存在两股暗黑势力,他们就是 Vim 党和 Emacs 党,这两股力量势如水火,分别守候着两大上古神器:Vim 和 Emacs……不停的有新人入会,也不停的有旧人出走,因为很多人发现这两大神器的学习曲线是如此陡峭和诡异,在没有发现神器的强大力量之前,这些人就离开了,去寻找 Eclipse 和 jetBrains 的庇护。但是永远会有一些人留下来,通过了艰难的考验,坚定的守护这两大神器……

以上是一种文艺的写法,真实的情况是:双方经常叫嚣 A 不配给 B 提鞋,B 甩了 A 几条街,到底是扔鞋还是扑街,就看谁的戾气更重了。古人云,文人相轻,其实技术领域也是一个德行,经常有人在人堆里喊一声「Perl 是世界上最好的语言,Ruby 不配给 Python 提鞋」,之后就是一群程序员争先恐后冲上去一顿群骂,等所有人口吐白沫笔走龙蛇的时候,发现原 PO 主早已转身离去专心致志的去写 Java 了,不带走一片 C# 代码。

对于这种技术争论,我的观点是:不提倡。

无论是夸,还是骂,您都得说到点子上,有理有利有节的文章永远胜过无谓的口舌之争,网络上的争论永远没有终点,成文成章才能流传。在这方面做的比较好的程序员,举两个例子:徐宥( http://blog.youxu.info )和王垠( http://www.yinwang.org ),倒不是这两个人的所以观点我都同意,而是他们写文章的态度非常值得赞赏。这两个人在「痛恨 Unix」领域还有过一次交锋,感兴趣的读者可以去他们的博客看看,可惜的是徐宥已经写的越来越少了……

今天的文章题图分别是 Vim 和 Emacs 的学习曲线,Vim 的曲线异常陡峭,但是当你度过了那一段艰难时候,就会领略到千帆竞发、百舸争流的美妙,并且从此天堑变通途。Emacs 则是初期似乎不过尔尔,但是学习愈深愈艰,而且还会出现回退,反复,360度大回环等匪夷所思的情况,到最后你终于明白,Emacs 原来是个伪装成编辑器的操作系统,满眼都是泪!

在互联网的江湖里流行着「唯快不破」的传说,一款互联网产品似乎不以迅雷不及掩耳盗铃之势做出来,江山美人就会白白拱手送人。圈地,出产品,拉用户,快干猛上,一抬头已经花团锦簇!当然,快的后果也可能是这块地压根没有江山美人,刨了半宿,其实是块盐碱地。在产品的成败上,都是以结果论英雄,所以,急性子成功了,当然唯快不破,慢公司赢了,那就是以慢打快,以柔克刚。

但是,「唯快不破」这个词,用来形容 Vim 却是最合适不过。我在之前的 Vim 系列中写过:

写过程序的人都知道,编程的时候双手大部分时间都放在键盘上,或编码、或插入、或移动、或定位、或查找,这种连续操作的时间和频率远远大于阅读、翻页、设置字体、摆弄样式等文案工作,而二者往往产生很多停顿和间隙,而编程时的停顿是非常影响编程效率的,所以 Vim 的设计理念就是通过模式的转换、命令的组合和数以万计的插件,保证程序员在编程的过程中,双手尽可能保留在键盘中央的区域,快如闪电的编辑文件,并且,不需要鼠标。

想做到快如闪电,就需要你记住四种模式切换(普通模式、插入模式、可视模式、命令模式)、大量的快捷键和命令,想通过死记硬背记住这些东西是不现实的,唯有长期坚持不懈的练习和使用才能达到随心所欲的地步,就像乔峰一般,任何平坦无奇的武功到了他的手里,均可化腐朽为神奇。难道就没有捷径和快速学习的方法么?

捷径真没有,方法可以有!今天就给大家说说如何通过 Vim 学习卡逐步实现从入门到精通。

所谓 Vim 学习卡,是用 Vimscript 编写的一个 Vim 脚本,其中包含了两百多个 Vim 用法。首先,我们把这个文件下载到本地,下载地址:

https://gist.github.com/gmccreight/7519289/raw/master.vim

为了避免混淆,把该文件复制命名为 study.vim,命令如下:

cp master.vim study.vim

用 Vim 命令打开文件,我们可以看到文件分为两部分,从第35行华丽的分割线以上是 Vimscript 脚本,用来创建三个命令:「,,」「,c」「,k」,后续我们将通过这三个命令操控 Vim 卡片。

分割线以下是两个队列,第一个是「= Study」,在37行,表示在学的 Vim 卡片。第二个是「= Known」,在831行,表示已知的 Vim 卡片。

开始时所有的 Vim 卡片都在学习队列种,每个 Vim 卡片有三行,第一行是命令,第二行是解释,第三行空行。代码片段如下:

M
go to the middle of the window(大写 M 把光标移到窗口中部)

L
go to the bottom of the window(大写 L 把光标移到窗口底部)

10L
go to the tenth line from the bottom of the window(10+大写 L 把光标从底部上移10行)

<c-d>
Go down half a screen(ctrl +d 向下翻半屏)

学习方式就是从第一个 Vim 卡片开始,学命令,看解释,然后进行操练,练习完成后通过那三个命令移动 Vim 卡片。具体做法:

1、在普通模式执行「:so %」,加载 Vimscript 脚本,定义上面提到的三个命令。

2、把光标移动到 Vim 卡片的第一行,执行:

,,:两个逗号,表示你已经比较熟悉这个命令了,但是还不放心,该操作会把 Vim 卡片放到学习队列的最底部。

,c:逗号+c,表示你对这个命令不明觉厉,希望很快再次见到它,该操作会把 Vim 卡片下移几位,这样你很快就能再次见到它了。

,k:逗号+k,表示你已经彻底掌握了这个命令,该操作会把 Vim 卡片移除学习队列,放入已知队列,也就是「= Known」的下面。

每次学习完成之后,用「:wq」保存退出,下次打开根据上次的进度继续学习。如此循环往复,生生不息,武功终将大成。

当然,你如果总结出了该卡片不包含的命令,也可以加入进来,不断完善,这个 Vim 脚本将变成你的 Vim 学习宝库。

这世界上一直存在一条路,让我们的能力从平庸到杰出,这条路漫长而艰辛,只有少数人愿意走下去,所以,优秀的人永远是少数——来自《MacTalk·人生元编程》

VIM——概念和技巧

vim4

这个周末被公司拉到一个有山有水有藏獒的荒郊野岭,除了电灯电话、楼上楼下,就没有什么别的了。很多人抱怨条件艰苦,我觉得还好,体会一下原生态的自然风光,与昆虫近距离亲密接触,也算回归自然。郊区的夜让人感觉已入初秋,凉风习习,满天星斗烁烁生辉,周边的山都很低,橘色的月亮就挂在屋脊上,尺寸大的吓人,远远望去,看到如水的月光流淌在低矮的山脊上,明灭闪烁。记不清有多少年没见到过这么好的月光了。

村里的藏獒个顶个身姿挺拔伟岸,看见有人走过偶尔犬吠,大部分时候只是含情脉脉的盯着我们,或者急促的走来走去,估计心里在想,这帮孙子怎么不到这边来玩会?

周日的爬山活动最为搞笑,大家卯足了劲准备登山,没想到一抬脚已经登顶了,站在山包上极目远眺,除了蚊子和我们,没有其他活物,带上去的西瓜也没吃完,结果年轻力壮的小伙又扛了下去,实践证明:扛着西瓜上山并不可怕,上山后吃不了再扛下来才可怕,人生最痛苦的事莫过于此!

自然其实离我们没那么远,离开沙发和书桌,稍微往外走一走就好!

Vim 概念


Vim 系列有很多人催更了,今天就写写 Vim 的基本概念,之后介绍几个使用技巧。

下面我们来介绍一下Vim中的几个基本概念:Buffer(缓冲区)、Window(窗口)和Tab-page(标签页)。

1、Buffer:很多读者问,用 Vim 打开文件后,文件内容存哪了,每次修改都要读写硬盘吗?显然不会每次编辑都写硬盘,事实上Vim打开的文件都会被加载到内存中,在内存中我们使用 Buffer 来描述正在编辑的文件,一个Buffer对应一个被编辑的文件副本。当我们在完成了一个Buffer的编辑后就可以保存该文件。Buffer不仅包含了文件的内容,也记录了该文件的编辑状态等配置信息,比如激活、隐藏、上次编辑行数等。

用Vim可以打开多个文件同时编辑,也可以把不需要的文件关掉,但这时文件副本依然保存在缓冲区中,我们可以通过 :ls:buffers查看这些Buffer,还可以通过类似:buffer n的方式重新打开文件(n表示Buffer的序号)。当然,我们有更好的方式来处理这些Buffer,那就是CommandTBuffer,要想使用CommandTBuffer,先要安装CommandT插件,请大家记住这个插件的名字,我们以后会用到。

2、Window:是对应Buffer的一个展示窗口。一个Buffer可以对应多个窗口,比如我们可以通过:split filename:vsplit filename命令在多个窗口打开一个文件,当修改某一个窗口的文件时,其他窗口都会同步更新。当然我们也可以在多个窗口打开多个文件,编辑后用:wq保存退出,但是记住,只要没有最终退出Vim进程,那么这些打开的文件Buffer依然保存在缓存区中,可以随时再次打开。

3、Tab-page:Tab-page就比较容易理解,对应一组窗口,我们可以通过:tabedit filename在另一个标签页中打开一个文件,在这个标签页中又可以打开多个窗口。

下图可以清晰的表达Buffer、Window和Tab-page的关系:

bwt

理解了这三个概念和三者之间的关系,对我们用好Vim有非常大的帮助。

Vim 技巧


1、打开 Vim之后,可以用:split filename:vsplit filenamenew filename横向或纵向切割窗口,使用 ctrl + w可以在个窗口之间跳转,使用 ctrl + 方向键可以按照方向切换窗口。

2、用 Vim 打开一个文件,如果我们想实现所有文本行翻转,那么可以执行如下命令:
:g/^/m 0

3、在 Vim 中统计文本行数和当前光标的位置,可以使用 ctrl + g,统计字节数,可以使用 g + ctrl + g

4、对文本进行简单排序:
用 shift v 选中多行文本,输入 : !sort,看看效果如何

5、如果你想把当前目录下(包括子文件夹)所有后缀为 java 的文件中的 apache 替换成 eclipse,那么依次执行如下命令: 在当前目录下执行:

vim 
:n **/*.java 
:argdo %s/apache/eclipse/ge | update

第四个技巧在 Vim 系列第二篇里提到过,今天解释一下,这就用到了buffer 的概念,通过正则表达式在内存中打开多个文件,argdo 表示在内存中执行 Vim 的命令,%s/apache/eclipse/ge 表示在内存中执行字符串替换,g 表示全局替换,e 表示如果文件中没有可替换字符串不报错继续执行,| 是管道标识符,update 表示替换完之后更新并写入文件。


文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· 网站:https://macshuo.com

VIM——帮助和配置(兼谈微信5.0)

2013-08-05 21.16.56

昨天文章的篇首语似乎把很多老鸟的时间指针拨回到了十年以前的青葱岁月,在那代码与Vim齐飞、键盘共鼠标一色的日子里,每个人要么是井底之蛙,要么是夜郎自大,每个成长和蜕变都值得现在的我们细细回味。所以我说,你们以为我在写 VIM,其实我是在致青春!

有人说这不是致青春,这是致坑。我说,生活就是由一个坑接着下一个坑组成的,什么时候所有的坑都平了,长出了自己的草,才算完结。


今天微信5.0终于发了,万众期待比肩苹果。网络上各类雄文一坨坨的,我本不想趟这个浑水的,不过有铁杆读者非让说说,那就说几句。

微信距离上次发布有近4个月的距离,在移动互联网唯快不破的原则下,这简直是个奇迹。有人说微信发个版本又不会怀孕,我说如果你上一版怀孕了,现在孩子已经4个月了……

几点感受:

  1. 4.5发布时进来就听老崔的一无所有,5.0发布时进来就打飞机,从文艺到节操的转变说明了微信增加了游戏中心。
  2. 各种小道消息说微信5.0扁平了,结果是只有图标被拍扁了,整体框架依然保持了4.5的风格,只是四个功能菜单从「微信、通讯录、朋友们、设置」变成了「微信、通讯录、发现、我」。
  3. 公众账号分为服务号和订阅号,服务号每月只能推送一条消息,但菜单和 API 功能丰富,订阅号的功能保持不变。
  4. 原以为服务号和订阅号在微信频道都会被折叠,结果发现只有订阅号被折叠了,而且订阅号的消息不会有提醒,大爷的!不过做为一个宽容乐观的老同志,我觉得这样有利于去伪存真,只有好的内容才能吸引读者去打开订阅号寻找并点击,让垃圾内容去见鬼吧。
  5. 游戏中心在「发现」频道,朋友圈排最上,游戏中心排最下,目前游戏有「打飞机和天天爱消除」(感觉还是没节操)。
  6. 扫一扫功能增强了,还能扫条码、封面、翻译,还有街景功能,很酷。
  7. 所有的设置信息被归并到「我」这个频道,除了你见过的,还增加了我的收藏(想收藏啥收藏啥)和表情商店(想要好表情,请掏雪花银)。
  8. 添加朋友增加了按住按钮找的功能,我没找到。语音识别增强了。
  9. 文本消息双击可以大字体全屏阅读(妈妈再也不担心你的近视眼问题了)。
  10. 4.5在 iOS7上的大部分 bug 没了,但是仍然无法把其他应用的东西分享到朋友圈,比如音乐、微博等,应该是 API 变了。
  11. 最后说说支付,如果你和我一样土鳖的认为有这样一个独立功能你就 OUT 了,这玩意是集成在服务号里的,比如你订阅服务号「QQ充值」,会发现这货有充话费的功能,点击充话费,就会让你绑定银行卡,然后就能充值了。那么有多少类似的服务号呢,好吧目前就这一个。

蜻蜓点水,就这几句。大家升级后自己体会吧,我觉得创业机会还是有的,MacTalk 呢,也可以继续写下去。


好吧回到正题,今天是 Vim 系列的第三篇,想看前两篇的,回复 172、173,直接去 macshuo.com上读也好。

今天我们介绍帮助和配置内容。

使用帮助


Vim 本身提供了非常详细的帮助系统,初学者可以通过帮助手册学习Vim的基础内容。在Vim中输入命令:help,即可进入帮助页面,默认是英文帮助,如果你喜欢看中文,可以通过以下方式安装中文帮助内容:

  • 下载中文帮助的文件压缩包
  • 解压,把doc目录下的文件复制到~/.vim/doc下
  • 确认在.vimrc中设置了set helplang=cn
  • 输入命令:help即可进入中文帮助
  • 输入命令:help user-manual直接进入用户手册

用户手册的界面是这样的:

vim3

如何浏览帮助呢?请牢记如下秘籍:

  • 移动: 使用光标键,或者用 h 向左,j 向下,k 向上,l 向右。
  • 退出: 使用 :q<Enter>
  • 跳转到一个主题: 将光标置于标签 (例如 usr_01.txt) 上然后输入 CTRL-]。
  • 跳回: 键入 CTRL-T。
  • 翻页:键入 CTRL-F/B

当然,大家也可以从如下网址下载用 PDF 版本的户手册和帮助文档:下载「须翻墙」

配置

Vim以简洁的方式提供了丰富的配置功能,主要配置体系由一个文件和文件夹组成。在一台安装了Vim的OS X/Linux/Unix机器上,进入用户主目录,可以找到.vimrc文件和.vim文件夹,这就是Vim所有的配置信息。

1、.vimrc

用户目录下的.vimrc文件就是Vim针对当前用户的主配置文件,该文件不是必备的,没有的话就创建它。文件位于当前用户的主目录下,可以用~/.vimrc找到,Vim启动时会自动运行文件中的每条命令。
通过.vimrc我们可以为Vim进行个性化配置,包括使用方式、显示风格、编写函数和运行插件等,.vimrc中所有的命令都可以在Vim运行时通过类似:comm args[=args1]的方式动态运行,即时生效。
以下是一个.vimrc的样例脚本,包含了一些常用配置,后面的注释是简要说明。

.vimrc的注释用双引号(”)表示 ,样例中的大括号仅表示功能区,属于注释的一部分,无其他含义
.vimrc的配置非常丰富,可以定义各种宏、函数、插件和映射,我见过最长的.vimrc配置有1000多行,这里的示例比较简单,适合入门级用户

syn on                      "语法支持

"common conf {{             通用配置
set ai                      "自动缩进
set bs=2                    "在insert模式下用退格键删除
set showmatch               "代码匹配
set laststatus=2            "总是显示状态行
set expandtab               "以下三个配置配合使用,设置tab和缩进空格数
set shiftwidth=4
set tabstop=4
set cursorline              "为光标所在行加下划线
set number                  "显示行号
set autoread                "文件在Vim之外修改过,自动重新读入

set ignorecase              "检索时忽略大小写
set fileencodings=uft-8,gbk "使用utf-8或gbk打开文件
set hls                     "检索时高亮显示匹配项
set helplang=cn             "帮助系统设置为中文
set foldmethod=syntax       "代码折叠
"}}

" conf for tabs, 为标签页进行的配置,通过ctrl h/l切换标签等
let mapleader = ','
nnoremap <C-l> gt
nnoremap <C-h> gT
nnoremap <leader>t : tabe<CR>

"conf for plugins {{ 插件相关的配置
"状态栏的配置 
"powerline{
set guifont=PowerlineSymbols\ for\ Powerline
set nocompatible
set t_Co=256
let g:Powerline_symbols = 'fancy'
"}
"pathogen是Vim用来管理插件的插件
"pathogen{
call pathogen#infect()
"}

"}}

2、 .vim

.vim是Vim的主配置文件夹,位于当前用户的主目录下,可以用cd ~/.vim进入。该文件夹一般用来放置插件和相关的帮助文档,常用的目录结构包括:

doc                           //帮助文档目录
autoload                      //Vim启动时自动加载的插件目录
plugin                        //插件目录,一般在使用Vim时通过命令呼出

当然,如果你已经安装了足够多插件,那么这个目录下就会变得五花八门,syntax、snippets、indent等文件夹都会冒出来了。一个插件所包含的文件往往会分布在多个文件夹下,管理起来比较麻烦,稍后我们会介绍两个管理插件的插件,让这个目录变得干净整洁,容易管理,这两个插件的名字叫pathogenVundle

今天就到这儿,后续文章会介绍 Vim 的Buffer、Window和 Tab,敬请期待。


文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · 网站:https://macshuo.com

如果希望持续听MacTalk,请点击首页的赞助

VIM——为效率而生

vim1

现在回想早年用 Vim 编程的场景,当可体现「专注」二字,那个年月的网络没有这么多诱惑,编写代码时差不多只开一个终端工具,噼噼啪啪的敲击键盘,累了就躺在办公室外的沙发上休息,也可以站起身看看窗外,舒缓一下疲惫的眼光就能延展到清华东门上空。五道口还地属荒凉,没有高楼,夕阳可以直接从窗口进入室内,光影打在办公桌上让人感觉非常温暖。

时过境迁,现在靠着硬盘的快、内存的大,我常常同时开几十个程序,用 command+tab 一切,屏幕中央一排几毫米见方的小图标一字排开,看着它们我有时候茫然若失,不知道自己到底想点开哪个,估计它们看着我也郁闷,「这孙子把我们都打开想干什么?」环境变好,硬件充沛,软件强劲,我们的效率是下降了呢,还是下降了呢?

而Vim,正是为效率而生的。

历史


Vim 源于 Vi,但不是 Vi,Vi 作为计算机的文本编辑器历史极为悠远,它是由美国计算机科学家比尔·乔伊编写并于1976年发布的,同年苹果公司成立。我在「传统的黑客——史蒂夫·沃兹」中提到过比尔·乔伊,他是 Sun 公司的联合创始人和首席科学家,一位传奇的技术天才,我个人以为他最伟大的贡献是独立编写 BSD 操作系统,开发 Vi 编辑器,创立 Sun 公司,当然,他还是 Java 语言的主要贡献者之一,任何人有幸完成其中一项工作已经足以名垂计算机发展史,而乔伊则通过一己之力完成了这些科技成果,推动了整个计算机科技的发展。

Vim 则诞生的要晚一些,它的第一个版本由布莱姆·米勒在1991年发布,这个兄弟也是一位声名显赫的程序员,80年代买了一台Amiga电脑,打开电脑一看,米勒鼻子差点气歪了,居然没有他最常用的 Vi编辑器!对于米勒来说这是不可接受的。

愤怒的米勒决定自己开发一个文本编辑器,完全复制 Vi 的功能,并起名为Vi IMitation(模拟)。事实证明,牛X的程序员都具备这种德行,感到不爽了,就会写出个什么东西,要么完善一下,要么创新一下,要么是你写,要么是我写,于是很多伟大的软件程序就发明出来了。随着 Vim 的不断发展,更多更好的功能被加了进来,正式名称改成了Vi IMproved(增强),也就形成了现代的 Vim,目前最新的稳定版本是7.3,Vim 的开发语言是 C 和 VimScript(后续我们还会谈到这门语言)。

理念


Vim 是一款完全面向程序员的软件,活了三十多年我还没有见到过用 Vim 编辑文字的普通用户,如果你是,你一定要告诉我。

写过程序的人都知道,编程的时候双手大部分时间都放在键盘上,或编码、或插入、或移动、或定位、或查找,这种连续操作的时间和频率远远大于阅读、翻页、设置字体、摆弄样式等文案工作,而二者往往产生很多停顿和间隙,而编程时的停顿是非常影响编程效率的,所以 Vim 的设计理念就是通过模式的转换、命令的组合和数以万计的插件,保证程序员在编程的过程中,双手尽可能保留在键盘中央的区域,并且,不需要鼠标。

想用好 Vim,先要理解 Vim 的模式转换。Vim 常用的模式有四种:

  1. 普通模式:Vim 启动后的默认模式,用来移动光标、删除文本、覆盖输入文本、恢复操作、粘贴文本等等。
  2. 插入模式:输入 i 或 a 进入插入模式,在这个模式下敲击键盘会往文字缓冲区增加文字,相当于普通编辑器的编辑模式。
  3. 可视模式:选择文本,可以行选、块选和依次选择,选择后可以进行复制、删除、排序等操作。
  4. 命令模式:执行内部和外部命令,通过「: 」「/」「?」「!」可以进入命令模式,分别对应的是:执行内部命令、向上或向下搜索、执行外部命令。

Vim 的模式和普通的编辑器有所不同,而且命令繁多千变万化,所以初期的学习曲线较高,一旦你坚持练习并且度过了最早的平台期,就会领略 Vim 的妙和全键盘的好。事实上 Vim 除了能够快速编辑文本文件之外,还能够通过简单的命令做更多的事情,所以,「如果你认为Vim只是一个文本编辑器,你就输了!」

举几个例子,大家领略一下 Vim 的风采:

1、如果你想在 Vim 打开的文本中插入一个1到100的序列,执行如下命令:

:r!seq 100

2、如果你想在当前的每一行文字前面增加「序号. 」,那么执行如下命令:

:let i=1 | g /^/ s//\=i.". "/ | let i+=1

3、如果你想把当前目录下(包括子文件夹)所有后缀为 java 的文件中的 apache 替换成 eclipse,那么依次执行如下命令: 在当前目录下执行:

vim
:n **/*.java
:argdo %s/apache/eclipse/ge | update 

后续还会为大家介绍一些 Vim 使用技巧,不过这个系列不会去讲如何通过 hjkl 移动光标,如何块选、行选,如何查找、定位,如何跳到行首行尾等等,我会告诉大家如何通过 Vim 自带的帮助去学习这部分内容,当然,如果大家有需要,我可以出一个常用快捷键操作列表。

下一篇 Vim 文章的内容是:「使用帮助」和「环境配置」。


文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · 网站:https://macshuo.com

VIM——缘起

玉簪花

MacTalk新增加了不少读者,如果你想学习一些 Mac 使用技巧和技术,建议通过 m 查看目录,从头看起,因为早期的几十篇文章中包含了大量的使用 Tips 和 Tricks,有心之人自有收获。

这次出差非常奇葩的没带电源,由于 iPhone 和 iPad 都可以通过Mac 充电,我外出一般只带 Mac 电源,此源一绝,基本上所有电子设备就都没有粮草了,当真是「此恨绵绵有绝期」。后果就是我开始极其吝啬的使用那块 Mac 电池和 iPhone 备用电池的配额,能用 iPad 就不用 Mac,能用 iPhone 就不使Pad,Mac 只用来写长邮件和产品演示,另外负责给 iPhone 充电。那篇「老兵不死,只能自我提升」自然是在 Mac 上完成的,不过由于很早就构思了这个主题,再加上电池的压力,写起来真是倚马可待,一气呵成,成文之后居然好评多多,也算奇事。回京的时候Mac 和 Pad 都已「筋疲力竭」,只有 iPhone 还有60%的电量,真是险到极点!

从湿漉漉的广州回来,兜头遭遇一盆大雨,大雨过后,整个京城变得清凉干爽,俗话说,环保基本靠风,清洁基本靠雨,此言非虚。傍晚从办公室出来,满园的白玉簪花散发出淡淡清香,碧叶莹润,花色如玉,新鲜的雨珠还挂在绿叶和白花上,一点一点,晶莹剔透,折射着夕阳的余晖,闪闪烁烁,煞是好看。

最近不断有 vim 的关键词在微信后台的回复中出现,好把,今天就开始给 Vim 系列搬家。

操作系统、编程语言和编辑器是程序员永恒的吐槽话题,技术发展了几十年,争论起来依然是「此恨绵绵无绝期」。在文本编辑器领域,Vim 和 Emacs 是永恒的焦点。我在「如何学习一门编程语言」里写道,「Emacs和Vim程序猿,大家沿着不同的道路和目标前进,但总是会在某个点交叉相遇,见面就扔石头和臭鸡蛋,砸得对方鼻青脸肿,然后擦擦眼泪和口水继续前行」。你们就知道,编程其实是个危险的工作,当真不是瞎扯。

工作十几年来我用过各种编程工具,用错过,也用对过,虽然每种优秀的编辑器都有传奇的故事,每个程序员都有自己的脾气,但这一次,我只想写一写 Vim……

为什么 Vim 总会和 Emacs 相提并论呢?因为 Vim 号称编辑器之神,Emacs 则是神的编辑器;Vim 编程唯快不破,插件遍天下,Emacs 则宣称自己是伪装成文本编辑器的操作系统,所谓针尖对麦芒,就是这样的效果,写完 Vim 这个系列,我希望还有机会写写 Emacs。

缘起


我从2000年开始接触 Vim,当时正值第一波互联网浪潮,我刚毕业不久,一如现在的热血青年,投身到互联网的大熔炉中(当然和现在的互联网弄潮儿不一样的,当年我们大部分都被熔掉了)。

当时的公司聚集了很多清华北大的兄弟,技术牛人扎堆,大家清一色使用 Vim 在服务器端编程,语法高亮都不设,内部BBS也是水木清华那种,通过终端访问,非常高端大气。走进办公室一眼望去,满目皆是黑漆漆的屏,绿瓦瓦的字,每个人都在那里噼噼啪啪的敲击键盘,韵律十足,我想,这简直酷毙了!

当时我还在使用 Editplus 编程,隶属菜鸟帮。别人的开发、编译和发布环境都在服务器端,而我则需要在本地编写好程序,通过 Editplus 的 ftp 功能上传到服务器端,再进行调试、测试和发布,非常麻烦。

所谓文人相轻,我这种行为遭到了小伙伴的无情嘲讽,当年的 Mac 君只好眼泪往肚子里咽,把愤怒都发泄在键盘上,每天在满天星斗的夜色中学习 Vim 技法,在清晨的微光中编译 Linux 内核,上午敲打键盘输出 Perl 程序,中午吃完五又四分之一口米饭之后开始研习 Vim 的多窗口和标签……由于单身住在公司,时间充裕到让你不好意思,很快小成,编码时鼠标锁进抽屉,双手敲击键盘上下翻飞,成就感十足,我对语法高亮情有独钟,经常把自己的界面配置的花花绿绿,没事看看也是件乐事。

自此以后,与 Vim 结下不解之缘,十几年过去了,工作一直没有离开过Vim,断断续续一直在用。到了2009年,我开始把工作环境完全切换到了 Mac 上,记得当时打开 Mac 的终端时,欣喜若狂的想,这不就是 Vim、Shell 和 IDE 的完美集成么?

场景


在不同的场景下采用最合适的工具,永远是最佳选择。这是就会有人问,Vim 适合什么场景呢?简单说来,Vim 比较适合 Unix/Linux 服务器端编程,当然这因人而异。我个人使用 Vim 主要用来进行 Shell/Python/C 编程。在 Unix/Linux 服务器端编辑和修改文件也离不开Vim,另外由于我个人工作环境是 Mac,所以改个文本文件查个代码的,也就用 Vim 顺手做了。

与很多程序员交流,大家会认为不用 Vim 一样能修改服务器端的文件,ftp拉下来,改好了再传上去。这当然是一种方案,但不是最优方案。而且极端情况下需要直接在客户服务器上解决问题,你总不能说「骚瑞,Sir,我不会在Linux下编辑文件,Down一份下来先」?这就像用Vim编写 Markdown 文件一样,能不能用,当然可以,甚至有人已经为 Vim 开发了 Markdown 插件,可以编写时通过快捷键查看转换的HTML文本,但是显然不如Mou/Byword。

编写 JavaEE、HTML/CSS/JS、Objective-C,最优方案可能是Eclipse、IDEA、XCode等,这些优秀的工具可以帮助我们提升效率,减少错误,但是如果你还想更进一步,那么Vim绝对值得拥有。

Vim用了很多年,也总结果过很多次,但不完整,我想这次在 MacTalk 能有始有终,完成这个系列。网络上介绍Vim的文章浩如烟海,各种精巧的用法数不胜数,看起来还是比较费时费力。Vim本身开箱即用,什么都不配置也可以使用其基本功能,如果大家掌握了基本操作,以下内容可以帮助提升效率,打造你的专属Vim。

待续……


*文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · 网站:https://macshuo.com

如果希望持续听MacTalk,点击{阅读原文}对作者进行小额赞助