用Emacs的这些年
读技术博客时发现又有人提起我曾写的那篇口水文章 为何Emacs和Vim被称为两大神器。写那篇文章时,我还在Vim和Emacs之间摇摆。当然主要在用vim,博士学位论文和所有的国际会议文章都是用Vim编辑,latex编译生成的。
从写文到现在,快8年时间了,这八年时间我一直在用Emacs,只有在没有Emacs的环境下才会用vim或者vi。我是怎么从Vim转投Emacs阵营的呢?
写那篇水文的时候,还没有结束博士学业。写文后不久就奔赴工作岗位了。在单位需要做一个java项目,和别人一起,所以随大流地用了Eclipse。用Eclipse时一直用它的Emacs键绑定,结果项目一期结束时,我对Emacs按键很熟了。所以很自然地就用起Emacs了,狠心地抛弃Vim。就像当初学会了双拼输入,狠心地抛弃五笔一样。
后来再做java项目,我自己能做主,就没再用Eclipse,全部用Emacs完成。要什么对象成员提示,有javadoc就足够了。IDE中的提示只会让懒人不求甚解,看javadoc才能看到类的继承层次、接口的详细说明。因为在单位连接互联网不方便,这种情况用Maven构建项目是不适合的。于是我就动手写了一个针对java项目的通用makefile。当然这也是一个半成品,不能解决代码间循环依赖的问题。但对我自己来说够用了。这就是我的优点,不难为别人也不难为自己,遇到困难就含糊过去了,当然也是个缺点。
后来我去了做国产操作系统的公司,大家都在Linux环境下开发,我对Emacs更是爱不释手。代码、文档、日记都在Emacs中写,还用Emacs org模式写写我那些不能发表的小说。这段时间,Emacs写了不少python代码,也写了一些c代码,完全没有压力。
再后来,去一家公司做了半年NLP,训练机器翻译的模型,部署机器翻译的服务,这段时间用Emacs写了几个用maven管理的java项目,也写了一些python程序。TDD(测试驱动开发)帮了我不小的忙。
今年,走人才引进的路子,我又跑到高校来了。现在觉得编程没问题,写论文成为比较困难的事情了。这些天一直在找方向。计算机图形学的论文都很漂亮,但是这玩意儿似乎太难了。让我用SDL和OpenGL写个二维三维动画和小游戏什么的还可以,去改进算法实现,对我这数学渣来说,恐怕难为我了。机器学习大热,虽然也打下点基础了,可不是热情所在。再说就是做机器学习,也得先定个领域啊。按我的知识结构和热情所在,我想玩玩嵌入式操作系统,想写写嵌入式OS。但这东西似乎不好发文章啊,想灌个SCI一区二区的水,太不容易,想灌个三区四区的水,还得往物联网上靠才行。现在是摩拳擦掌想煮米,但还没有找到锅。
有点跑题了,还是说回Emacs和Vim吧。我觉得最终投奔Emacs还是投奔vim,和性格有关。我用Vim时,觉得心不静,用Emacs却有心静如水的感觉。虽然Emacs按键繁琐一些,都是key chain,但架不住你爱她啊。
不用纠结用Emacs的人少,用Vim的人多,Sublime的UI更友好等这类问题,都是shit。用Vim的人虽多,其中很多人都是像用windows记事本一样在操作光标呢,所以他们觉得vim还没有windows notepad好用。
还有,不要纠结Emacs代码补全不好用什么的,别人只是一个编辑器,你为什么要用IDE的标准来要求它呢?让我用IDE我还不习惯呢,上半年在公司时,同事让我用intellij idea,这号称最好的java IDE老偷偷摸摸在后台建索引占用我的CPU资源,我敲字的时候,老弹出补全候选项,干扰我的思路。还有写个scala文件,只要有main入口,你右键一点就能运行了,凭什么?你凭什么替我做这些工作,我不知道你给java命令行传递了哪些参数,你只会让我变懒,让我依赖你。我写了测试用例,用mvn test,照样能测试我的程序,为什么用你呢?
果断删除,我就要用Emacs和mvn命令行来做项目,我就要装逼,就是这么任性。再说我又没耽误工作。
用什么工具来做事,也是个性使然吧,就像我喜欢开手动档汽车,不喜欢开自动档汽车一样。
现在和八年前相比,我有什么长进呢?八年前我还和师兄弟打DOTA,现在不碰游戏了。时光一去用不会,往事只能回味,浪费的时间永远追不回了。就像我东搞搞西搞搞,频繁地换工作,到现在不可能再有大的做为了,只能安心做个平凡人了。
打游戏浪费时间,折腾工作环境也是浪费时间。我现在也很少折腾Linux环境了。环境折腾得再标新立异,也不代表你水平多高。把做正事的时间挤没了,有什么用。这都是很浪费时间的事情。上次我升级了一下自己的ArchLinux,结果无线网卡怎么也支持不了,自己编译的无线模块也加载不了。果断回滚到我升级之前的状态。这样又可以工作了。换作过去,我非得花个一两天时间把这个问题解决了。这就是说,年纪大了,玩不起了。
用Emacs的这些年的更多相关文章
- 的vim和emacs常用配置记录
因为经常改变工作环境,所以在这里记录一下我的.vimrc文件和.emacs文件的内容. vimrc的配置文件,主要是设置语法高亮,和tab键的宽度,个人喜欢设置为4个空格的分量. " set ...
- IntelliJ添加Emacs编辑器
Intellij只支持emacs as a external tool: https://www.jetbrains.com/help/idea/2016.2/tutorial-using-emacs ...
- ubuntu 下emacs 配置
(set-language-environment 'Chinese-GB) (set-keyboard-coding-system 'utf-8) (set-clipboard-coding-sys ...
- 我的emacs配置
我的emacs配置文件 ;; .emacs ;; ============================== Basic Configure START ====================== ...
- Emacs 配置文件
以下是我整理的 emacs 配置文件,供刚开始玩 emacs 的同学参考.网上有人说:emacs 是神的编辑器,如果能够用到这样的编辑器,那这个人就是神了.从我个人的经验来看,emacs 是一把利器, ...
- [emacs] 使用ggtags浏览代码
[emacs] 使用ggtags浏览代码 // */ // ]]> [emacs] 使用ggtags浏览代码 Table of Contents 1 相关的连接 2 global简介 2.1 ...
- Emacs学习心得之 LaTeX编辑
目录 1. 前言 2. texlive的安装 3. AUCTEX的安装和配置 4. RefTEX的安装和配置 一.前言 本篇博文记录了Emacs下LaTeX编辑环境的搭建,参考一下文章: http:/ ...
- 创建.emacs.d目录和.emacs文件
1.双击bin下的addpm.exe 2.HKEY_CURRENT_USER->Software->GNU->Emacs 新建字符串值HOME,数值数据为emacs的安装路径 3.创 ...
- MAC emacs下安装php-mode
在某一个个页面(抱歉不记得了), 比较了三个配置,php-mode, php-mode-improved, xnhtml. 作者在比较后推荐xnhtml,但在xnthml官网下载链接一直显示403,真 ...
- eclipse下的emacs风格快捷键
Ieclipse emacs类快捷键 win + shift + b 切换设置断点 win + shift + f 格式化代码 win + shift + l 显示绑定的快捷键 win + shift ...
随机推荐
- 使用Java HttpComponent/HttpClinet 调用 WebAPI问题的解决
几个关键字: WebAPI, Android, Apache HttpComponent/HttpClient 问题:无论怎么测试, WebAPI的FormBody value总是空. 最简单的代码 ...
- mysql 分页数据错乱
最近在使用mysql 分页查询数据的时候发现返回的数据与预期的不一样,显示数据重复错乱. 在官方文档 有这样一句话 If multiple rows have identical values in ...
- 利用caffe自带的Makefile编译自定义so文件
1.文件目录结构 caffe-root |--include |--example |--modules |--test.h |--test.cpp |--python |--src |--tools ...
- Classification with DeepLearning
分类网络总结 https://github.com/handong1587/handong1587.github.io/blob/master/_posts/deep_learning/2015-10 ...
- codeforces116B
Little Pigs and Wolves CodeForces - 116B Once upon a time there were several little pigs and several ...
- hdu 1025
Problem Description JGShining's kingdom consists of 2n(n is no more than 500,000) small cities which ...
- day11 作用域
返回值可以任何类型,返回可以是函数,返回函数还可以再被调用仅仅返回函数是无法运行的.要运行需要加上()没有返回值的时候,默认返回值为空,None def test1(): print("in ...
- jsp操作MySQL时报错:Operation not allowed after ResultSet closed
一个stmt对多个rs进行操作引起的ResultSet关闭的错误 解决办法:创建新的stmt,一个rs对应一个stmt
- SharePoint 2013 APP 开发示例 (一)List 读写
在这个示例里,我们将创建一个页面测试 SharePoint APP的权限.这个页面有二个按钮,一个从documents里读数据,一个往documents里写数据: 1. 打开Visual Studio ...
- 转载:Windows下stdlib.h与glut.h中exit()函数重复定义的解决方案
最近用到 OpenGL的第三方库Glut,碰到了exit()这个函数在stdlib.h与glut.h两个头文件中重复定义的情况,解决方案如下: 打开glut.h,找到exit()函数定义的地方(144 ...