前言

最开始,使用 Sublime Text 编码,后来用 Vim 混合 PyCharm 写 Python。

前几天,Github 上的 Spacemacs 已经成功的突破一万 Star, 听说几个我非常佩服的 Pythoner(比如『Python Web 开发实战』的作者董伟明) 也是非常喜欢 Spacemacs, 我就萌生了从 Vim 切换到 Spacemacs 的想法,说做就做。

注:本文所有内容基于 macOS 10.11, 软件环境为 zsh , pyenv , python3.5.2 , node5.12.0. 其他类 Unix 平台略作修改即可使用。至于 Windows 平台,建议安装 Ubuntu 虚拟机。本文也需要读者具备基本的 VIM 基本常识和 Python 常识。

迁移到一个编辑器需要找到一些操作的 Emacs 替代操作。于是我安排文章结构如下:

[0x00. 基本软件环境安装](#0x00- 基本软件环境安装)

[0.1 zsh 与 ohmyzsh](#01-zsh- 与 -ohmyzsh)

[0.2 pyenv 与 pyenv virtualenv](#02-pyenv- 与 -pyenv-virtualenv)

[0.3 nvm 以及常用 npm 包](#03-nvm- 以及常用 -npm- 包)

[0.4 Spacemacs 安装以及基本配置](#04-spacemacs- 安装以及基本配置)

[0x01. 日常的编辑](#0x01- 日常的编辑)

[1.1 文件导航](#11- 文件导航)

[1.2 文件编辑](#12- 文件编辑)

[0x02. Python 编程](#0x02-python- 编程)

[2.1 代码补全](#21- 代码补全)

[2.2 代码跳转](#22- 代码跳转)

[2.3 pytest 测试](#23-pytest- 测试)

0x03. IPython Notebook

[3.1 IPython Notebook 基本配置](#31-ipython-notebook- 基本配置)

[0x04. 扩展](#0x04- 扩展)

本文只负责把读者带入Spacemacs的世界中,而不是涉及到Spacemacs的方方面面,所以此文为指北.而非详细的指南(Guide).

0x00. 基本软件环境安装

0.1 zsh 与 ohmyzsh

brew install zsh

chsh -s /bin/zsh

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

0.2 pyenv 与 pyenv virtualenv

git clone https://github.com/yyuu/pyenv.git ~/.pyenv

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc

echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc

echo 'eval "$(pyenv init -)"' >> ~/.zshrc

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.zshrc

# 不喜写兼容代码,所有代码均向 3.5+ 靠拢

v=3.5.2|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

v=3.6.0|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

v=2.7.9|wget http://mirrors.sohu.com/python/$v/Python-$v.tar.xz -P ~/.pyenv/cache/;pyenv install $v

# 设置 Global Python 为 2.7.9, 备注:尽量不要把 Py3 设置为全局,否则由于 Homebrew 本身有一些应用是依赖于 Py2 的,设置为Py2容易出现一些奇怪的问题。

pyenv global 2.7.9

pip install -i https://pypi.doubanio.com/simple requests

# 下面这个是用于安装基本的代码补全功能

pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy

pyenv virtualenv 3.5.2 py3-daily

pyenv activate py3-daily

pip install -i https://pypi.doubanio.com/simple requests

pip install -i https://pypi.doubanio.com/simple beatutifulsoup4

pip install -i https://pypi.doubanio.com/simple ipython[notebook]

pip install -i https://pypi.doubanio.com/simple jupyter

# 下面这个是用于安装基本的代码补全功能

pip install -i https://pypi.doubanio.com/simple --upgrade "jedi>=0.9.0" "json-rpc>=1.8.1" "service_factory>=0.1.5" flake8 pytest autoflake hy

pyenv deactivate

# pyenv uninstall py3-daily

0.3 nvm 以及常用 npm 包

# 安装 nvm

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash

nvm install 5.12.0

echo '\n#alias for cnpm\nalias cnpm="npm --registry=https://registry.npm.taobao.org \

--cache=$HOME/.npm/.cache/cnpm \

--disturl=https://npm.taobao.org/dist \

--userconfig=$HOME/.cnpmrc"' >> ~/.zshrc && source ~/.zshrc

npm install -g vmd

npm install -g gitbook-cli

npm install -g hexo-cli

npm install -g tern

npm install -g js-beautify

npm install -g js-hint

0.4 Spacemacs 安装以及基本配置

brew install ag

brew install grep

brew tap d12frosted/emacs-plus

brew install emacs-plus

# 安装完毕之后,克隆我的配置 repo, 有一些基本的配置用于解决墙的问题。解决方案来自于子龙山人

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

mv ~/.spacemacs .spacemacs.bak

git clone https://github.com/twocucao/spacemacs.d.git ~/.spacemacs.d

# 输入 emacs 进行初始化,如果你可以正常访问 Github 的话时间在半小时之内。

emacs

安装 Spacemacs 过程中画面如下:

安装 Spacemacs 过程中画面

安装前,Emacs 长这个样子:

安装前

安装后,Emacs 长这个样子:

安装后.png

在正式进入,请牢牢记住下面几个按键已经功能,以备不时之需

spc : 跳出命令面板

spc-spc : 跳出命令列表,可运行命令,也可以查找快捷键

spc-h-spc : 查找包的用途与定义

嗯,可以谈下一话题了!

0x01. 日常的编辑

1.1 文件导航

(VIM 流)hjkloOaA zz

(VIM 流)查找 * /words

spc-f-j 开发 neotree

spc-tab 切换到上一个 buffer

spc-f-f 打开文件 spc-p-f fuzzfind 类似于 ctrlp spc-s-g-p grep 搜索项目 spc-s-a-p ag 搜索项目

搜索项目如图 (spc-s-a-p ag 搜索项目):

按照关键字搜索项目

实在是方便至极

1.2 文件编辑

文件内容编辑

(VIM 流)u 与 c-r d c 等

有趣的是查找替换功能也是自带预览的。比如 :%s/foo/bar/g

查找替换预览

文件本身编辑

在 dired mode 下:copy - C , delete - D, new folder - +

也可以 spc-f-t 在 neotree 下进行编辑

除去这些和 Vim 相似的文件编辑功能之外,甚至窗口管理都和 Vim 一致了,使用 c-w+hjkl 直接跳转。

强烈建议在读者抽空过一遍基本的 Vimtutor

1.3 Markdown Writing

spc-spc-markdown-generate-to 回车即可生成本文的 Toc(Table Of Content)

spc-b-i 打开 buffer 的 imenu(类似于 Vim 的 Tagbar 插件),enter 跳转

搜索项目如图 (spc-b-i 开启 buffer imenu ,enter 跳转):

IMenu

0x02. Python 编程

2.1 代码补全

当你按照前面的所有配置走一圈下来,基本上就已经可以完美的进行补全了。

比如,当我编辑一个 py 文件的时候,

# 先激活虚拟环境

pyenv activate 3.5.2/envs/py3-daily

emacs py.py

如图所示,因为 requests,numpy 这种第三方库都可以完美补全,其他自然不在话下。

代码补全

代码补全还有另一个神器,就是可以内嵌 lisp 的 Snippet 模板 -- yasnippet, 由于模板功能基本上和其他编辑器相同,而使用 elisp 语言进行编写动态 Snippet 模板则需要会 elisp, 这以后有机会再学学。

2.2 代码跳转

文件代码跳转 spc-spc-helm-imenu 查看文件结构

文件跳转 在 normal-mode 下,gd 即可跳转到函数定义上,但是不能跨文件跳转。

单文件使用 helm_imenu 进行浏览

使用 ag 进行代码搜索

2.3 pytest 测试

spc-m-s-py3-daily enter 选择 py3-daily 虚拟环境

spc-spc-pytest-all enter 即可运行所有 pytest 测试。

测试过程:

运行测试失败,运行测试失败,使用 c-w-j 跳转到下面窗口,对红色标记处 enter, 即可跳转到出错文件行。

pytest 运行测试失败

修正运行测试成功,如图:

pytest 运行测试成功

0x03. IPython Notebook

通常情况下我使用 IPython Notebook 都是在 Web 端,因为是 Web 端,实际上大量的 Dom 渲染对浏览器的渲染速度还是有一定的影响的,我还是比较喜欢客户端,因为客户端的快捷键可以定制,而 Web 端的快捷键实在是相当的不方便。

是不是 IPython Notebook 的 web 端没有好处呢?有的,比如我可以借用外部的 JS 可视化图表对 js 进行可视化呀。

但,如果不需要 js 功能的话,还是用客户端舒服一些。

3.1 IPython Notebook 基本配置

spacemacs 貌似只支持密码访问 IPython Notebook, 那么我们就生成密码。

# 首先激活 py3-daily 环境

python -c "from notebook.auth import passwd;print(passwd())" | pbcopy

# 恩,于是剪切板上就有如下的字符串

sha1:9bf4c48a6b83:26bc24a78a1e4aea7baa36874f5e86bafac0dbb9

# 打开 config 文件取消注释并修改 c.NotebookApp.password

vim ~/.jupyter/jupyter_notebook_config.py

c.NotebookApp.password = 'sha1:35543659622f:f9a78f0b20132f3e04aa1d4ed4060f9fd9eb7663'

3.2 Emacs IPython Notebook

# 首先在终端打开 IPython Notebook

ipython notebook

接着打开 emacs, 输入 spc-a-i-n, 默认端口,然后输入密码即可。首次登陆后还需要在输入一次 spc-a-i-n 即可看到 IPython Notebook 的主界面。

IPYNB 的主界面

光标移到 [New Notebook] 键击 enter 新建 IPython Notebook.

输入如下代码:

# The %... is an iPython thing, and is not part of the Python language.

# In this case we're just telling the plotting library to draw things on

# the notebook, instead of on a separate window.

%matplotlib inline

# See all the "as ..." contructs? They're just aliasing the package names.

# That way we can call methods like plt.plot() instead of matplotlib.pyplot.plot().

import numpy as np

import scipy as sp

import matplotlib as mpl

import matplotlib.cm as cm

import matplotlib.pyplot as plt

import pandas as pd

import time

pd.set_option('display.width', 1000)

pd.set_option('display.max_columns', 100)

pd.set_option('display.notebook_repr_html', True)

import seaborn as sns

sns.set_style("darkgrid")

sns.set_context("poster")

sns.set()

# Load the example flights dataset and conver to long-form

flights_long = sns.load_dataset("flights")

flights = flights_long.pivot("month", "year", "passengers")

# Draw a heatmap with the numeric values in each cell

sns.heatmap(flights, annot=True, fmt="d", linewidths=.5)

shift+enter , 咣

热力图就出来了

热力图

0x04. 扩展

看完上文,就可以深入文档进行探索了。

ChangeLog:

2017-01-15 18:53:45 重修文字

2017-01-16 12:49:19 润饰文字,增加可读性,首发简书。

python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北相关推荐

  1. python scatter 简书_【挖掘模型】:Python-DBSCAN算法 - 简书

    数据源:data (7).csv data (7).csv DBSCAN算法结果 DBSCAN模型 DBSCAN原理 # DBSCAN算法:将簇定义为密度相连的点最大集合,能够把具有足够高密度的区域划 ...

  2. python snap7 简书_第14篇-Python中的Elasticsearch入门

    我的Elasticsearch系列文章,逐渐更新中,欢迎关注 另外Elasticsearch入门,我强烈推荐ElasticSearch搭建手册给你,非常想尽的入门指南手册. 在本文中,我将讨论Elas ...

  3. python 数据挖掘 简书_[Python数据挖掘入门与实践]-第一章开启数据挖掘之旅

    1.数据挖掘简介(略) 2.使用Python和IPython Notebook 2.1.安装Python 2.2.安装IPython 2.3.安装scikit-learn scikit-learn是用 ...

  4. python关键词 打标签详解_Python学习日记13|利用python制作简书首页热门文章关键词标签云...

    今天是6.16号. 昨天去面越秀金融风险控制部计算机实习生,去面了才知道主要也就是做数据抓取这一块.面试过程中有问到分词,然后自己心虚的说了有接触过分词这一块,面试结果就不去想了,过不过都其实不重要了 ...

  5. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  6. Python 简单入门指北(试读版)

    本文是我小专栏中 Python 简单入门指北 一文的前半部分,如果你能坚持读完并且觉得有一定收获,建议阅读原文,只需一杯咖啡钱就可以阅读更精彩的部分,也可以订阅小专栏或者加入我的知识星球,价格都是 6 ...

  7. 萌妹子Python入门指北(二)

    原文来自 (ixindoo.com)[http://ixindoo.com/articles/662] 只写了第一篇就好久没更新了,为啥?因为妹子学编程的意愿不强了,我也不能逼迫她去学.不过后来收到部 ...

  8. python中format函数用法简书_从Python安装到语法基础,这才是初学者都能懂的爬虫教程...

    Python和PyCharm的安装:学会Python和PyCharm的安装方法 变量和字符串:学会使用变量和字符串的基本用法 函数与控制语句:学会Python循环.判断语句.循环语句和函数的使用 Py ...

  9. python工厂模式 简书_工厂

    思考题 public void printMenu() { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList ...

最新文章

  1. mysql日志文件相关的配置【2】
  2. [4] 算法之路 - 插入排序之Shell间隔与Sedgewick间隔
  3. 前端模块管理器命令:npm bower
  4. 035 函数和代码复用小结
  5. 【学亮IT手记】PL/SQL编程-存储过程
  6. 布林通道参数用20还是26_“布林强盗”量化交易系统,它真正厉害的地方是在这里...
  7. java流写入数据库_使用Java流查询数据库
  8. 删除list中的一个节点
  9. java 多线程 串行 加锁_Java多线程(2)线程锁
  10. python坐标图设计_python 三维坐标图
  11. 苹果降价潮一波接一波 两款廉价iPad“箭在弦上”
  12. Render Monkey中可渲染纹理的Clear Color
  13. 数字值太大,plsql显示不全的设置
  14. linux如何查看系统崩溃日志,Linux系统日志及日志分析
  15. 水煮肉片+各种牛肉等四种川味特色菜
  16. JVM之 永久代与元空间
  17. 【Python实战】用Scrapy编写“1024网站种子吞噬爬虫”,送福利
  18. 拼多多面试官没想到ThreadLocal我用得这么溜,人直接傻掉
  19. Android 百度地图获取定位信息并实时传给后台
  20. 计算机怎么设置搜索桌面,桌面百度:电脑上的直接搜索框,想搜就搜

热门文章

  1. XEIM 帮助文档【草稿版】
  2. 周鸿祎:谷歌Chrome不是浏览器
  3. 电脑技术吧_干货!12年技术员从零开始讲电脑硬件之攒机
  4. QuillBot:又一个值得拥有的论文润色工具
  5. 统计测序数据reads数和碱基数的几种方法
  6. 热图绘制一个快乐五一
  7. NBT:你想成为计算生物学家?
  8. 易生信转录组培训第一期总结
  9. Mac技巧|如何在 MacBook上设置一位数登录密码
  10. 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法