一个python程序员的emacs配置文件emacs.d分享

前言

越来越多的人使用emacs作为开发工具. 甚至skype,gmail,豆瓣FM都能通过emacs. 作为一个产品开发,肯定使用很多插件,设置一些快捷键来提高开发效率.以前一直使用 prelude,很久之后发现有以下问题:

    比如开启python语言支持需要在prelude-modules.el里面把python这样的注释去掉
    我不需要支持这么多的语言,也不需要那么多快捷键
    aotupair实在太难用了
    scss/css模式不好自定义缩进空格数, tab和空格混用. 不好定制
    看过源码后发现,其实很来很简单粗暴的事情弄得有点复杂了

我造了个轮子.emacs.d,主要针对python和web开发

项目目录结构

├── Cask ; 我使用[cask](https://github.com/cask/cask)做包管理工具
├── auto-insert ; 使用auto-insert设置新增elisp/python文件自动添加基于yasnippet的模板
│   ├── elisp-auto-insert
│   └── python-auto-insert
├── custom ; 自定义插件目录,你也可以把你写的程序放进来然后在init.el里面require
│   ├── flycheck.el ; 定制flycheck,让它在保存python程序时自动执行pep8和flake8,有问题的条目会打开新的buffer打印出来
│   └── py-autopep8.el ; 我自己实现了autopep8插件,保存时自动根据pep8标准处理文件
├── functions.el ; 用到的相关函数
├── helper.el ; 我自己写了个类似`C-h b`的介绍绑定的快捷键的预览表
├── hs-minor-mode-conf.el ; python函数/类折叠
├── init.el ; emacs启动的主程序
├── keys.el ; Key-chord配置,默认被注释了,因为它和我经常大片粘贴代码中代码重复造成很多麻烦
├── local-settings.el ; 本机的本地配置,比如用户名,单独的快捷键等
├── misc.el ; 对emacs本身的一些配置
├── mode-mappings.el ; 模式映射,比如Cask会自动用emacs-lisp-mode
├── modeline.el ; 我重新定制了modeline,使用了nyan-mode和powerline,一些加颜色的hack
├── osx.el ; Mac下的一些独立配置,为我的hhkb定制
├── smartparens-config.el ; 定制了smartparens配置
├── tmp
│   └── README.md
└── xiaoming-theme.el ; 我自己写了一个主题,好吧 我就是`小明`

使用的插件列表

    f - 处理文件相关的库
    s - 处理字符串相关的库
    ag - 据说比ack更快的文本搜索工具the_silver_searcher的emacs插件
    ht - 处理哈希相关的库
    anzu - 显示当前匹配文本,预览替换效果和总匹配数的插件
    dash - 常用函数集合
    helm - 方便查找各种文件内容,buffer切换,emacs命令执行等
    jedi - python代码补全,快速需要函数/模块定义的插件
    smex - M-x 的命令行补全的功能
    direx - 展示目录树
    magit - git插件
    slime - commonlisp交互模式
    ac-js2 - js2-mode支持js函数定义查找
    rinari - 依赖,需要安装
    diff-hl - 在行首用颜色表示git状态-只支持图形界面的emacs
    dired-k - 用带不同颜色的高亮显示文件/目录,大小等信息
    bind-key - 本项目绑定快捷键的用法都根据这个包,没有用global-set-key
    css-mode - css-mode
    js2-mode - js-mode的升级版
    web-mode - 前端开发必备, html缩进,支持根据tag/元素/属性/block/dom跳转,语法高亮,支持mako,jinja2等模板
    git-blame - git-blame,单独版
    key-chord - 可以快速按键达到快捷键的作用
    nyan-mode - 一直可爱的小猫
    plim-mode - 我写的编辑plim的major-mode
    powerline - 提供一个漂亮的状态栏
    sass-mode - 编辑sass
    scss-mode - 编辑scss
    sublimity - 在图形界面的emacs能缩小预览代码-sublime-text有类似的插件
    undo-tree - 让undo可视化
    yaml-mode - 编辑yaml
    yasnippet - 一个神奇的模板系统,定义缩写并通过tab键自动帮你展开(一些自动的”填空题”机制)
    drag-stuff - 可以将代码块整体拖动
    helm-swoop - 项目内关键词查找,并能自动跳到对应文件和对应行
    ibuffer-vc - 支持版本空的ibuffer模式
    projectile - 管理项目,可快速访问项目里任何文件,支持全项目关键词搜索
    coffee-mode - 编辑coffee
    python-mode - 编辑python
    smartparens - 自动括号匹配,可以按块删除,tag跳转
    use-package - 本项目引用包的方式
    crontab-mode - 高亮编辑crontab
    golden-ratio - 黄金分割展示当前window
    helm-ipython - helm的ipython插件
    rainbow-mode - 在代码中通过背景色标示颜色值
    ace-jump-mode - 快速让光标位置到你想去的地方
    expand-region - 按层次块区域选择
    helm-css-scss - helm的css/scss插件
    markdown-mode - 编辑markdown
    switch-window - 可视化切换窗口
    visual-regexp - 可视化正则匹配
    gitconfig-mode - 单独的gitconfig-mode
    gitignore-mode - 单独的gitignore-mode
    helm-descbinds - 让默认的C-h b高亮并且按组分开
    imenu-anywhere - 类似于etag, 可直接跳到对应的标签
    multiple-cursors - 一次编辑多处/行文字
    discover-my-major - 告诉你当前mode的一些说明/快捷键设置
    virtualenvwrapper - virtualenvwrapper
    gitattributes-mode - 独立的gitattributes-mode
    rainbow-delimiters - 对内嵌的括号等pair符号加不同颜色
    idle-highlight-mode - 在设置的一段设置时间未操作电脑会自动高亮当前关键词,并且全文高亮相同关键词
    exec-path-from-shell - 可以使用$PATH环境变量
    find-file-in-repository - 根据git属性在项目里查找文件
    emmet-mode - 类似于zencoding,但是能编辑css,使用很少的代码就能构造一个复杂的div/css
    browse-kill-ring - 查看最近操作的删除文本,以及恢复后的效果

安装使用

curl -fsSkL https://raw.github.com/cask/cask/master/go | python
git clone https://github.com/dongweiming/emacs.d .emacs.d
cd .emacs.d
cask
sudo pip install jedi pep8 autopep8 flake8

快捷键分布

请参看项目的README.md

时间: 2024-12-03 07:02:42

一个python程序员的emacs配置文件emacs.d分享的相关文章

为什么用 Java:一个 Python 程序员告诉你

每当我告诉别人我一直在用Java工作时,大家的反应都是: "纳尼!Java?为啥是Java?" 说实话,本人刚开始的时候也是同样的反应.但是由于Java的类型安全,执行性能和坚如磐石的工具,我渐渐地开始欣赏Java.同时我注意到,现在的Java已今非昔比--它在过去的10年间稳健地改善着. 缘何是Java? 假 设每天都用Java的想法还没有让君恶心到食不下咽,我在此重申Java已非你所了解的"吴下阿蒙"了.当Python, Ruby, 和Javascript在&q

我是一个混蛋程序员

我最近收到了这封来自Artsicle公司创始人的邮件,我大一时整个夏天都在这家创业公司里实习. 来自:Scott Carleton 主题:刚刚重构了你一年前写的 find_art.js 脚本 从某些方面上看,我心里想:你是个相当混蛋的程序员. 但从另一方面上讲,真扯蛋,这个脚本在过去的20个月里完美的运行,根本不需要我去碰它.:) 本文的作者: Dan Shipper Scott说的一点没错:我是个混蛋程序员.我不认真的注释我的代码.有时,我会违反DRY编程原则.我不喜欢使用奇妙的三重操作符表达

Python 程序员都会喜欢的 6 个库

在编程时,小挫折可能与大难题一样令人痛苦.没人希望在费劲心思之后,只是做到弹出消息窗口或是快速写入数据库.因此,程序员都会喜欢那些能够快速处理这些问题,同时长远来看也很健壮的解决方案. 下面这6个Python库既可以快速解决眼前的棘手问题,同时也能够作为大型项目的基础. Pyglet 是什么:Pyglet是一个纯Python语言编写的跨平台框架,用于开发多媒体和窗口特效应用. 为什么需要它:从头开发图形界面应用所需要的功能模块是十分繁琐的,Pyglet提供了大量现成的模块,省去了很多的时间:窗口

Python 程序员最常犯的十个错误

常见错误1:错误地将表达式作为函数的默认参数 在Python中,我们可以为函数的某个参数设置默认值,使该参数成为可选参数.虽然这是一个很好的语言特性,但是当默认值是可变类型时,也会导致一些令人困惑的情况.我们来看看下面这个Python函数定义: >>> def foo(bar=[]):        # bar是可选参数,如果没有提供bar的值,则默认为[],  ...    bar.append("baz")    # 但是稍后我们会看到这行代码会出现问题.  ..

Python 程序员必知必会的开发者工具

Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作.同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中.本文将介绍Python程序员必知必会的开发者工具. 对于开发者来说,最实用的帮助莫过于帮助他们编写代码文档了.pydoc模块可以根据源代码中的docstrings为任何可导入模块生成格式良好的文档.Python包含了两个测试框架来自动测试代码以及验证代码的正确性:1)doctest模块,该模块可

一个平庸程序员的自白

Jacob Kaplan-Moss 是著名 Python 框架Django 的 Co-Creater 和核心开发者,在 Heroku 担任安全部门的 Director, 他常年参加 Python 社区的年度聚会 PyCon,并经常上台演讲.在这次 PyCon 2015 上,他声称自己顶多只是一个平庸的程序员,幻灯片上也写着: "Hi, I'm Jacob, and I'm a mediocre programmer." 这次演讲非常精彩,视频可以在 Youtube 上看到(如果不想看视

我是一个垃圾程序员

英文原文:I Am a Bad Software Developer, 编译:Dennis Gao 在过去的4个月里,我深刻地反思了我自己.就在7个月前,我还在从事一份虽不是十分讨厌,但却也感觉不到任何快乐的工作.我还不能确切地描述为什么我会有这样的感觉,直到我的一个朋友再次找到我,说有一份工作虽然干的活一样,但有机会参与开源软件项目开发,然后我就跳槽了.这一切让我知道了: 我是一个垃圾程序员. 3个月后我选择离开了这家公司.当时我签的是临时合同,在还没有完全投入工作前,却先感受到了公司内部的派

程序员之路——一个老程序员对刚上大学的学弟学妹的忠告

始终认为,对一个初学者来说,IT界的技术风潮是不可追赶. 我时常看见自己的DDMM们把课本扔了,去买些价格不菲的诸如C#, VB.Net 这样的大部头,这让我感到非常痛心. 而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑. C#就象当年的ASP 一样,"忽如一夜春风来,千树万树梨花开",结果许多学校的信息学院成了"Web 学院". 96, 97级的不少大学生都去做Web了.当然我没有任何歧视某一行业的意识. 我只是觉得如果他

我的程序员之路:一个女程序员的奋斗经历

因为有人在酷壳里评论里说我给一个女程序员的建议不靠谱,我不服,因为我的工作经历中的一些女程序员都很不错,比那些男程序员都强,所以,我在新浪微博和twitter上征集女程序员的故事和想法,这两天来,我收到了好几封邮件,让我很感动.其中,有一个故事让我回味很久,在脑海里挥之不去,可能是因为她的经历和我很相似,她的想法和我很有共鸣. 本来,我想通过收到的这些故事然后编辑成一篇关于女程序员的文章,但是我觉得这个故事已经足够好了,任何的编辑都是对这个故事的不尊重,所以,我原封不动,一字不改地把这个故事转到