即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

说,谁才是最帅的编程工具?

微信 MacTalk 30℃ 0评论
本文目录
[隐藏]

题图:from Zoommy

最近微信后台总收到 Vim 相关的提问,这让我怀疑是不是新一代 Vim 程序员又成长起来了。Vim 是一款非常神奇的编程工具,我从2000年开始使用,历经16载,差不多是杨过苦等小龙女的岁月,几乎每天都会打开这款工具。计算机编程历史持续了数十年,诞生了无数的编程工具,Vim 在其中独树一帜,历久弥新,穿透时光的迷雾,在今天依然闪耀着迷人的光芒,无数技术天才基于 Vim 开发出了伟大的软件产品。

可以说,Vim 是最简朴的编辑器,也可以说 Vim 是最繁复的编程工具,还可以说,Vim 是一款史诗般的编程软件。我们部门编写 PHP、Go 和 Lua 的程序员依然在用 Vim 编程,对有些人来说,Vim 甚至是他们唯一的编程工具,对于运维人员来说,Vim 也是必不可少的工具之一。

以前我在 MacTalk 中零零散散写过一些 Vim 的内容,后来放到了《MacTalk·人生元编程》这本书里,周末拿出来重新整理编排完善,发现居然有近2万字的内容,于是去掉了插件篇和一些「废话」,形成了今天的文章。

想看 Vim 插件篇的,去微信读书搜索 MacTalk,就能找到。

1.历史

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

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

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

2.场景

在不同的场景下采用最合适的工具,永远是最佳选择。这时就会有人问,Vim 适合什么场景呢?简单说来,Vim 比较适合 Unix/Linux 服务器端编程,当然,这因人而异。我自己用 Vim 写过 Java、Perl、Python、Lua、Go 等程序,当然编写 Java 程序使用 Intellij IDEA 更多一些。在 Unix/Linux 服务器端编辑和修改文件也离不开Vim,另外,由于我一直用 Mac,所以改个文本读读代码的,也就用 Vim 顺手做了。

很多人觉得不用 Vim 一样一身正气,是的,编写 JavaEE、HTML/CSS/JS、Objective-C,最优方案可能是 Intellij IDEA 和 XCode等,这些优秀的工具可以帮助我们提升效率,减少错误,但是如果你还想更进一步,Vim 值得拥有。

Vim 本身开箱即用,什么都不配置也可以使用其基本功能。如果大家已经掌握了基本操作,以下内容可以帮助你提升效率,打造你的专属 Vim。

3.编辑模式

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 

4.使用帮助

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

  • 下载中文帮助的文件压缩包(网上找去)

  • 解压,把doc目录下的文件复制到~/.vim/doc下

  • 确认在.vimrc中设置了set helplang=cn

  • 输入命令:help即可进入中文帮助

  • 输入命令:help user-manual直接进入用户手册

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

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

  • 移动: 使用光标键,或者用 h 向左,j 向下,k 向上,l 向右。

  • 退出: 使用 :q

  • 跳转到一个主题: 将光标置于标签 (例如 usr_01.txt) 上然后输入 CTRL-]。

  • 跳回: 键入 CTRL-T。

  • 翻页:键入 CTRL-F/B

当然,大家也可以从网上下载 PDF 版本的户手册和帮助文档。

5.配置

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  gt
nnoremap  gT
nnoremap t : tabe

"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等文件夹都会冒出来了。一个插件所包含的文件往往会分布在多个文件夹下,管理起来比较麻烦,稍后我们会介绍两个管理插件的插件,让这个目录变得干净整洁,容易管理,这两个插件的名字叫 pathogen 和 Vundle

6.基本概念

下面我们来介绍一下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 的关系。

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

7.几个小技巧

1、打开 Vim之后,可以用 :split filename 或 :vsplit filename 或 new 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 

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

Vim 是一款越用越爱的编辑器,看了这篇文章,希望你也能爱上 Vim,它的名字叫做「唯快不破」。

整理完这篇文章,已经周六下午4点多了,不过距天黑尚有不少时间,所以我去睡了个午觉。

那么,你用过哪些好用的编程工具呢?可以在评论里说说。


MacTalk 8月份更换了底部 Banner 赞助商:掘金。注意,这不是个炒股软件。

掘金是一个高质量的技术社区,从 Swift 到 React Native,从性能优化到开源类库,让你不错过互联网开发的每一个技术干货。长按图片二维码识别或者各大应用市场搜索「掘金」,技术干货尽在掌握中。


点击阅读原文,了解详情。

转载请注明:CodingBlog » 说,谁才是最帅的编程工具?

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情
(50)个小伙伴在吐槽
  1. 就整体来说VISUAL STUDIO,没有之一。
    小白快跑2016-08-03 00:30 回复
  2. 每次不小心打开 vi 都只能去拔电源/微笑
    邱岳2016-08-03 00:31 回复
  3. 没有 emacs ?
    xhf2016-08-03 00:34 回复
  4. 卖桃君如此勤奋,二爷如此真爱你
    王二2016-08-03 00:34 回复
  5. 1. Jetbrains 全系列,特别是 IDEA,CLion 和 PhpStorm; 2. Spf13 Vim,一个 vim 插件包,vim.spf13.com; 3. Atom 编辑器 + 各种插件; 4. zsh terminal + Oh my zsh + Powerline theme;5. 无关的操作系统:Gentoo
    方熊2016-08-03 00:35 回复
  6. Emacs用户飘过
    谢鹏2016-08-03 00:36 回复
  7. eclipse
    Angus2016-08-03 00:36 回复
  8. Xbeta善用佳软的张玉新老师就是用Vim来编辑文稿的。
    张启2016-08-03 00:39 回复
  9. 问:如何生成一个随机的字符串? 答:让新手退出VIM。
    lzjun2016-08-03 00:41 回复
  10. VIM,沉浸式编程
    Eagle2016-08-03 00:41 回复
  11. 一直用sublime 喜欢图形化的 而且spark python elx三个常用的都可以跑
    nemo2016-08-03 00:41 回复
  12. 然而不如emacs强大/呲牙
    jerry2016-08-03 00:42 回复
  13. java用idea,oc用Xcode,其它……一律用emacs……
    sheck2016-08-03 00:42 回复
  14. vs code
    Simeone2016-08-03 00:42 回复
  15. Vim&Emacs coder
    疯哥2016-08-03 00:43 回复
  16. 我还是用完的Sublime Text 3吧……
    乳酸君2016-08-03 00:43 回复
  17. 是篇旧文,vim普及其实已经够了,不知卖桃君为啥不介绍点新的东西。比如vim常用指令,技巧等。上面介绍的指令都不常用,而且复杂。vimrc的配置github上有很多非常好又快的配置方案,既然卖桃,顺便说一下iterm2的最新版本的功能也不错。。。或者macvim的方便之处。
    Realzz2016-08-03 00:44 回复
  18. chrome还有一个vim的插件,浏览网页都不用鼠标/偷笑
    Mr明智2016-08-03 00:44 回复
  19. 我也用Vim, 有本事讲讲Emacs/呲牙
    杜金房2016-08-03 00:45 回复
  20. 就写写python pycharm。其他用的很少
    M1k32016-08-03 00:45 回复
  21. 只用过Xcode怎么办/流泪/流泪/流泪
    烤鲳鱼2016-08-03 00:49 回复
  22. 用上tmux/tmuxinator了!节省了手动打开各种窗口的时间,可以多喝两杯咖啡!Cygwin,Mac和阿里云的CentOS通过git保持tmux配置文件的统一。另外,再也不用担心关闭ssh的session了!
    褚瑞2016-08-03 00:50 回复
  23. V哥无敌,V哥v5
    pxl2016-08-03 00:52 回复
  24. Spacemacs才是最强的
    子龙山人2016-08-03 00:52 回复
  25. 最好的编辑器是 Vim + Emacs = Spacemacs
    isaac2016-08-03 00:54 回复
  26. 喜欢用两个大ZZ退出的点赞
    Case2016-08-03 01:00 回复
  27. emacs是最帅的
    大宝大2016-08-03 01:03 回复
  28. 最近写得最好的一篇。
    angela2016-08-03 01:06 回复
  29. 结果还是去下载了池老师的推广,快截图给赞助商看
    zyy2016-08-03 01:08 回复
  30. Xcode,WebStorm,Vim,Atom,Sublime Text 3目前来说Xcode来撸Mac/iOS这个领域是最帅的,WebStorm来撸Node.js这个领域是最帅的。Vim在服务器运维的时候是最帅的。Atom来撸ReactNative的时候是最帅的,因为官方的插件。就是基于它。Sub则是写Web前端领域里最帅的。/呲牙
    icepy2016-08-03 01:09 回复
  31. Vim 是一款完全面向程序员的软件,活了这么多年我还没有见到过用 Vim 编辑文字的普通用户,如果你是,你一定要告诉我。 让我看看有多少非程序员关注这个号/撇嘴
    末日没有进行曲2016-08-03 01:11 回复
  32. Visual Studio 2015/尴尬
    xiaopeng2016-08-03 01:14 回复
  33. 即便无法完全掌握VIM,也应该掌握一点基础,从而可以在服务器上直接打开,眼神调试/傲慢
    古虫2016-08-03 01:15 回复
  34. 为什么不用sublime?我是做前端的
    Stephen高2016-08-03 01:23 回复
  35. 喜欢vim 的编辑模式,不像emacs 废手指!不过平时用emacs 更多,vim 加emacs 等于spacemacs哈哈/偷笑
    桐汭2016-08-03 01:23 回复
  36. atom
    陈佳2016-08-03 01:37 回复
  37. 当然是xcode
    我的名字2016-08-03 01:42 回复
  38. 这个问题会引发命案/微笑
    烤羊2016-08-03 01:46 回复
  39. 赶紧掏出小本本复习一下:vim,emacs,textmate,sublime text,嗯嗯,都记着呢。可我觉得最帅的编程工具是Retina屏和“妈妈我再也不用窗口最大化了…”/偷笑
    穎儿2016-08-03 01:54 回复
  40. 当然是我大Emacs。欢迎来 emacs-china.org。最近Emacs社区也活跃了好多。
    满招损,谦受益《尚书》 CJJ2016-08-03 01:59 回复
  41. 说老实话,不会编程的我曾经用了一下vim,结果喜闻乐见地被吓跑了,不过对它hjkl代替上下光标键移动倒一直印象深刻。大部分还是ST3写LaTeX。 在知乎上看到过字幕组大神用vim处理大量纯文本操作,效率很高。 ps:谁说不是程序员不会关注这个号来着?😈
    拙山人2016-08-03 02:01 回复
  42. 这是赤裸裸的忽视EMACS党的存在啊/尴尬
    吴磊2016-08-03 02:15 回复
  43. 假如池老师从现在开始学习编程,池老师会选择哪种语言,为什么?希望池老师写篇文章来谈谈。
    厚黑绅士2016-08-03 02:19 回复
  44. emacs 党表示,看到 vim 就直接拖到了留言板 /傲慢
    azalea2016-08-03 02:32 回复
  45. 打赏后才更有动力去实践,不然就白打赏了/微笑
    书书不说话2016-08-03 02:49 回复
  46. VS code +1
    徐超Charles2016-08-03 03:51 回复
  47. vim + emacs = spacemacs (i like it) 
    杜比比2016-08-03 05:32 回复
  48. 现在用的比较多的是sublime text 3,law三个平台通吃,学习曲线不那么陡峭,界面在mac下堪称完美,缺点是想买买不起,不买老得点弹窗里的cancel,真希望它降低价格,一狠心,一跺脚买了! 但话说玩linux的,还是要学vim,vim比nano用起来激爽多了!特别是玩Gentoo的,在没有搞出GUI时,不会vim,那估计也就永远搞不出GUI了!另外Gentoo的系统升级需要经常比较新旧版本的配置文件以便决定去留,这时我不晓得nano是否能搞出vim -d的效果来。
    乌尔班羊2016-08-03 05:54 回复
  49. Emacs:编辑器之神 Vim:神的编辑器
    @Alone2016-08-03 07:36 回复
  50. *unx下最喜欢的编辑器之一/色
    2016-08-03 12:09 回复