我为什么选择Vim
总看到一些飞快敲击键盘而不用鼠标的时候你可以很羡慕和佩服,其实这完全没有必要。就像一个吉他手熟练地弹吉他有必要羡慕吗?一个瓦匠熟练地砌砖有必要羡慕吗?这些都是他们赖以生存的工具而已,熟练地运用工具是理所当然的事情。而一个程序员,一个文本编辑者,你如果没有熟练运用你的编辑工具,其实还是挺不应该的,而工具又有优劣之分,选对工具很重要。编辑器有Sublime、Notepad++、EditPlus、Visual Studio Code,以及号称21世纪编辑器的Atom,这些编辑器都很好用,用户基础都很多,而且可以满足日常几乎所有的需求,而vim相对他们一个很突出的特点就是难用,下面Michael Mrozek画的一副比较“写实”的各个编辑器学习曲线图:
作为“编辑器之神”的vim,想驾驭它可不是简单的事情,需要不断地学习然后放弃、再学习、再放弃,说的好像很恐怖,其实我我相信你看这篇文章的时候可能已经放弃了不止一次了吧:D 所以从现在开始你将真正走入vim的神殿,接近并驾驭它。众多的编辑器之中,作为“神之编辑器”——emacs是vim的最强竞争者。两个都很难学,我为啥学vim而不是emacs呢?由于我从vim入门,那时没有听说emacs,也无法体会她真正的魅力,那时的网上也没有这么激烈的争论吧。也许,我从emacs开始,可能就是是emacser了吧。不对,我想,以我的性格,最终的结果甚至都是偏向于vim这一方的,两者最大的不同是理念不一样。理念就是一个骑自行车爱好者,听到自行车的优点就会两眼放光,说到汽车的优点就敷衍了事,凡事皆如此。而网上的负面评论都是不熟悉vim或emacs的用户胡乱评论的,总存在以偏概全,胡搅蛮缠,甚至有点胡说八道了,我每条都可以驳斥,但是没有那么多时间,但是这些小丑觉得无人反驳,就觉得自己说的很对。比如有些人拿一方的优点来贬低另一方的“缺点”:
个人觉得Emacs的按键也比vim的按键设置的合理,虽然vim的按键非常短,但是都是特别难按。比如回到行尾的$,回到第一个非空白字符的^,还有删除一个单词dw,试想阿,你如果想删除一系列单词怎么办?难道先要数数要删除多少个单词?然后用dNw?太慢了。要么就dw,dw,dw,。。。,按N次,这样就需要按2N次键,但是在Emacs下删除一个单词是M-d,你只需要按着Alt键一直不放,然后不停的按d就可以了,仅需要按N+1次键,方便之极。
这是很明显的不懂vim,vim中可以各种删除方式,如果照上边说的,如果要删除一篇10万字的文章,难道按着M-d,要按着Alt不放,按100000次的d,我觉得最好的机械键盘的按键也报废了,这也太贵了。用vim直接用gg ddG就可以,你的机械键盘还是全新的呢。难道就着一个就全面否决emacs吗,肯定不能,作为vim最强大的对手,把emacs贬低的越利害,其实也在贬低vim啊。其实,主要是emacs的理念是可以用它来干任何事情,而vim则希望用户只用vim来高效编辑器。emacs的重度用户陷在其中无法自吧,vim却是不改初衷,高效编辑着,从理念上来看,emacs似乎是不务正业,vim的理念才更符合unix的哲学,一个工具只做一件事情,并且做到极致。我选择了vim,成了vimer。两者的战争已经打了几十年,并将一直持续下去,其实打口水战没必要,两个都是神,所以两个存在肯定都是有道理的,更何况emacs其实有个evil模式,可以让你在emacs上使用vim的快捷操作,从侧面说明vim的编辑方式还是得到了对手的认可的,两者终于找到了和谐共处的方法,如果你哪天真的要叛逃emacs,那你将拥有神之编辑器之神。下面我着重给出点成为vimer的理由,毕竟我们大多数小老百姓并不需要去利用编辑器发邮件发twitter什么的。
1. 编辑文本效率高
编辑器的作用是处理文本,文本的操作主要有输入、光标移动、删除、以及复制粘贴等,vim对每种操作都有很多种的操作方式,可以很慢可以很快。比如光标的移动,vim可以以单个字符移动,可以以一个单词移动,可以以一篇文章移动,可以以不可思议的方式移动,几乎能跟上你的思维移动,目前为止,没有看到哪个编辑器这么利害。vim比一般的编辑器快上许多,用编辑器打开一个10M的代码,再来说vim慢的我才服气你。我分析android源码时,有近20G的源代码,vim+ctags建立好索引后,代码跳转几乎没有延迟。没听说哪个IDE能做到的。vim的所有功能都是围绕这文本编辑,所以vim的复制粘贴功能也强大到令人发指,相信我,学好vim将显著提升你编码的效率。
2.完美跨平台,跨各种IDE
如果你想把vim打造成c/c++/python甚至java的IDE,完全没有问题,再怎么配置也不可能超越IDE吧。不要忘了,vim只是编辑器,如果能够用Android Studio或者Pycharm的快捷键配合上vim作编辑不是更好?事实证明这是可行的,很多ide都提供对vim的编辑支持,而且几乎所有的编辑器或者IDE都有vim插件,还是很不错的,只是我觉得不太习惯,不用在linux上没有你心爱的notepad++,也不用担心从android转行ios在编辑方式上的巨大改变了,学会了vim,在不同平台上,不同编辑器或者IDE里面,一个vim走天下。vim是一个跨平台的编辑器。
3.远程无图形编辑
linux系统大部分都内置了vi编辑器,一个不到120k的编辑器,速度不错,功能就够用了。作为vi的拓展vim,每个linuxer都应该学学,我想只要搞开发应该是逃不过远程访问一些日志或者修改一些配置参数什么的,无法图形操作,此时正是vim的技能就派上用场的时候,如果只知道i和:wq就ok了,那也是没有问题,毕竟很多人开始都是这么干的,包括我也是,当你学会各种方式流利移动光标之后就想要好好学习vim了。
4.扩展性强,可订制性强
vim虽然已经很强大,对个人的特殊的需求不能尽善尽美,可以通过自学vimscript来自己写脚本,实现私人订制。不学vimscript的话,学python也行,但是基本的vimscript还是要掌握的。更懒的可以去baidu或者github,也许你需要的功能需求没准别人已经写好了插件,直接拿来用就行了。我自学了vimscript,学的不好,感觉vim不顺手就自己写个小脚本来实现。下面就是我的实现的,新建不同的程序文件,自动添加文件信息。
5.启动特别快
就像武侠小说说的,天下武功唯快不破。编辑器快是必须条件,又快又能跨平台,有可以自己定制,又符合unux哲学的,似乎只剩下vim了。无论是用来打开修改一些配置文件以及编辑文本很高效的。还是编辑C代码,还是python代码,还是shell脚本,vim足够了。如果你需要一个用了十年和第一年一样的编辑器,notepad觉得是你该选的,如果你需要一个用了十年有了巨大变化的编辑器,选择vim吧,十年后的你再用vim一定是非常顺溜,vim也在你的生命中留下一个痕迹了。还在等什么呢,深入了解一下vim,也许你发现以前的码字还有很大的改善空间,希望一起学习,把vimmer的精神发扬光大,让vim成为你最后的编辑器。
https://linuxtoy.org/archives/zsh.html
https://www.oreilly.com/openbook/linuxdrive3/book/
xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
xrandr --addmode HDMI1 1920x1080_60.00
xrandr --output HDMI1 --mode 1920x1080_60.00 --output LVDS1 --off
我为什么选择Vim的更多相关文章
- Vim入门教程
尽管网上有成打的Vim在线教程,但是要么艰深晦涩,要么太过肤浅.本教程的目标让每个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越现在编辑技巧,成为其中的牛人. 简单来说,本教程的学习方式将使你终 ...
- 为什么选择 Visual Studio Code
为什么选择 Visual Studio Code 你在 VS Code 中找到的每个功能都完成一项出色的工作,构建了一些简单的功能集,包括语法高亮.智能补全.集成 git 和编辑器内置调试工具等,将使 ...
- 如何创建Vim Dotfile?
Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...
- 玩转Vim 编辑器
一:VIM快速入门 1.vim模式介绍 以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数 ...
- vim安装中文帮助手册
安装方法: 在下面的网站下载中文帮助的文件包:$wget http://nchc.dl.sourceforge.net/sourceforge/vimcdoc/vimcdoc-1.5.0.tar. ...
- vim环境变量配置、背景色配置
我们使用vi或者vim的时候,如果想要显示行号,可能会这样做:切换到命令模式,然后输入set nu,再按回车键就显示了:还有就是咱们在编写程序的时候,有的时候会希望按下回车键后,光标不是每次都在行首, ...
- vim+vundle配置
Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用.一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能.一般流程都是下载需要的工具,然 ...
- 萌新笔记——vim命令“=”、“d”、“y”的用法(结合光标移动命令,一些场合会非常方便)
vim有许多命令,网上搜有一堆贴子.文章列举出各种功能的命令. 对于"="."d"."y",我在无意中发现了它们所具有的相同的一些用法,先举 ...
- VIM教程
vim 的环境设定参数 :set nu :set nonu 就是设定与取消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 ...
随机推荐
- c#指定长度切割字符串,返回数组
public List<string> subStringByCount(string text, int count) { ;//开始索引 ;//结束索引 double count_va ...
- Discuz!数据库操作DB类和C::t类介绍
类定义文件 DB类: 文件\source\class\class_core.php class DB extends discuz_database {} discuz_database类定义 文件\ ...
- Python学习日记(十) 生成器和迭代器
使用dir()我们可以知道这个数据类型的内置函数有什么方法: print(dir(int)) print(dir(bool)) print(dir([])) print(dir({})) print( ...
- python之编码与解码、is 与==的区别
一.编码与解码 编码的过程其实就是采用一定的编码格式将unicode字符转换成str字符的过程 非ASCII码字符按字节为单位被编码成十六进制转义字符 解码采用的编码格式跟设置和环境有关 ascii ...
- 【Flask】 python学习第一章 - 3.0 正则转换和错误捕捉
3.1正则转换器定义 Class RegexConverter(BaseConverter): regex = "[0-9]{6}" app.url_map.converters[ ...
- node-images 进行图片压缩
前置条件:先安装images npm install images 编写代码 思路: 从指定文件夹遍历图片,执行压缩,压缩完成后放到指定文件夹中,并保持图片名无变化. var images = req ...
- 【转】Java奇技淫巧-插件化注解处理API(Pluggable Annotation Processing API)
参考资料 JDK6的新特性之六:插入式注解处理API(Pluggable Annotation Processing API) Java Annotation Processing and Creat ...
- Makefile学习二
今天继续对Makefile进行研究,话不多说,进入正题: make常用内嵌函数: 下面利用上面的知识点来实现一个多级目录的Makefile,如下: 多级目录Makefile: 这个例子的目录结构如下: ...
- SourceTree&Git -01 -代码拉取推送流程 -提交时的相关注意事项
1.进行文件的暂存,忽略不提交的文件 防止自己的文件从仓库拉取时被覆盖掉 2.获取,然后从仓库拉取内容 (勾选被合并提交的内容) 先获取,可以防止冲突的发生 3.推送自己暂存的文件 推送失败,请再次进 ...
- 题解 洛谷P1457 【城堡 The Castle】
这道题,看似很烦,无从下手,但其实只要用位运算和联通快就能水过了呀. 首先,输入:似乎大意是把一个数拆成二进数的相加,分别表示\((i,j)\)东南西北是否有墙.\(1\)表示西,\(2\)表示北,\ ...