前言
最開始寞冯,使用 Sublime Text 編碼吮龄,后來用 Vim 混合 PyCharm 寫 Python咆疗。
前幾天午磁,Github 上的 Spacemacs 已經(jīng)成功的突破一萬 Star, 聽說幾個我非常佩服的 Pythoner(比如『Python Web 開發(fā)實戰(zhàn)』的作者董偉明) 也是非常喜歡 Spacemacs, 我就萌生了從 Vim 切換到 Spacemacs 的想法,說做就做衙熔。
注:本文所有內(nèi)容基于 macOS 10.11, 軟件環(huán)境為 zsh , pyenv , python3.5.2 , node5.12.0. 其他類 Unix 平臺略作修改即可使用红氯。至于 Windows 平臺,建議安裝 Ubuntu 虛擬機塞栅。本文也需要讀者具備基本的 VIM 基本常識和 Python 常識放椰。
遷移到一個編輯器需要找到一些操作的 Emacs 替代操作庄敛。于是我安排文章結(jié)構(gòu)如下:
- [0x00. 基本軟件環(huán)境安裝](#0x00- 基本軟件環(huán)境安裝)
- [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 文件導(dǎo)航](#11- 文件導(dǎo)航)
- [1.2 文件編輯](#12- 文件編輯)
- 1.3 Markdown Writing
- [0x02. Python 編程](#0x02-python- 編程)
- [2.1 代碼補全](#21- 代碼補全)
- [2.2 代碼跳轉(zhuǎn)](#22- 代碼跳轉(zhuǎn))
- [2.3 pytest 測試](#23-pytest- 測試)
-
0x03. IPython Notebook
- [3.1 IPython Notebook 基本配置](#31-ipython-notebook- 基本配置)
- 3.2 Emacs IPython Notebook
- [0x04. 擴展](#0x04- 擴展)
本文只負責(zé)把讀者帶入Spacemacs的世界中,而不是涉及到Spacemacs的方方面面,所以此文為指北.而非詳細的指南(Guide).
0x00. 基本軟件環(huán)境安裝
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
# 設(shè)置 Global Python 為 2.7.9, 備注:盡量不要把 Py3 設(shè)置為全局兴猩,否則由于 Homebrew 本身有一些應(yīng)用是依賴于 Py2 的倾芝,設(shè)置為Py2容易出現(xiàn)一些奇怪的問題。
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 的話時間在半小時之內(nèi)莫瞬。
emacs
安裝 Spacemacs 過程中畫面如下:
安裝前,Emacs 長這個樣子:
安裝后,Emacs 長這個樣子:
在正式進入,請牢牢記住下面幾個按鍵已經(jīng)功能吉嚣,以備不時之需
- spc : 跳出命令面板
- spc-spc : 跳出命令列表秉撇,可運行命令琐馆,也可以查找快捷鍵
- spc-h-spc : 查找包的用途與定義
嗯,可以談下一話題了歧胁!
0x01. 日常的編輯
1.1 文件導(dǎo)航
- (VIM 流)hjkloOaA zz
- (VIM 流)查找 * /words
- spc-f-j 開發(fā) 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 文件編輯
文件內(nèi)容編輯
- (VIM 流)u 與 c-r d c 等
- 有趣的是查找替換功能也是自帶預(yù)覽的滋饲。比如 :%s/foo/bar/g
文件本身編輯
- 在 dired mode 下:copy - C , delete - D, new folder - +
- 也可以 spc-f-t 在 neotree 下進行編輯
除去這些和 Vim 相似的文件編輯功能之外,甚至窗口管理都和 Vim 一致了喊巍,使用 c-w+hjkl 直接跳轉(zhuǎn)屠缭。
強烈建議在讀者抽空過一遍基本的 Vimtutor
1.3 Markdown Writing
- spc-spc-markdown-generate-to 回車即可生成本文的 Toc(Table Of Content)
- spc-b-i 打開 buffer 的 imenu(類似于 Vim 的 Tagbar 插件),enter 跳轉(zhuǎn)
搜索項目如圖 (spc-b-i 開啟 buffer imenu 崭参,enter 跳轉(zhuǎn)):
0x02. Python 編程
2.1 代碼補全
當你按照前面的所有配置走一圈下來勿她,基本上就已經(jīng)可以完美的進行補全了。
比如阵翎,當我編輯一個 py 文件的時候逢并,
# 先激活虛擬環(huán)境
pyenv activate 3.5.2/envs/py3-daily
emacs py.py
如圖所示玻蝌,因為 requests,numpy 這種第三方庫都可以完美補全,其他自然不在話下陋率。
代碼補全還有另一個神器,就是可以內(nèi)嵌 lisp 的 Snippet 模板 -- yasnippet, 由于模板功能基本上和其他編輯器相同址遇,而使用 elisp 語言進行編寫動態(tài) Snippet 模板則需要會 elisp, 這以后有機會再學(xué)學(xué)。
2.2 代碼跳轉(zhuǎn)
- 文件代碼跳轉(zhuǎn) spc-spc-helm-imenu 查看文件結(jié)構(gòu)
- 文件跳轉(zhuǎn) 在 normal-mode 下,gd 即可跳轉(zhuǎn)到函數(shù)定義上,但是不能跨文件跳轉(zhuǎn)呼胚。
2.3 pytest 測試
- spc-m-s-py3-daily enter 選擇 py3-daily 虛擬環(huán)境
- spc-spc-pytest-all enter 即可運行所有 pytest 測試厨幻。
測試過程:
運行測試失敗漠另,運行測試失敗满败,使用 c-w-j 跳轉(zhuǎn)到下面窗口,對紅色標記處 enter, 即可跳轉(zhuǎn)到出錯文件行。
修正運行測試成功架谎,如圖:
0x03. IPython Notebook
通常情況下我使用 IPython Notebook 都是在 Web 端在塔,因為是 Web 端,實際上大量的 Dom 渲染對瀏覽器的渲染速度還是有一定的影響的,我還是比較喜歡客戶端,因為客戶端的快捷鍵可以定制偎捎,而 Web 端的快捷鍵實在是相當?shù)牟环奖恪?/p>
是不是 IPython Notebook 的 web 端沒有好處呢败京?有的晶姊,比如我可以借用外部的 JS 可視化圖表對 js 進行可視化呀。
比如我發(fā)在簡書上的這篇技術(shù)文 IPython Notebook 引入 ECharts 做可視化
但忆蚀,如果不需要 js 功能的話,還是用客戶端舒服一些察皇。
3.1 IPython Notebook 基本配置
spacemacs 貌似只支持密碼訪問 IPython Notebook, 那么我們就生成密碼。
# 首先激活 py3-daily 環(huán)境
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 的主界面徒爹。
光標移到 [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. 擴展
看完上文,就可以深入文檔進行探索了芋类。
- 打開 Vim, 輸入:help vimtutor 熟悉基本的 Vim 操作隆嗅。
- Spacemacs Layer 文檔
- Spacemacs 文檔
- 我的 Spacemacs 配置頁面
- Spacemacs 達人子龍山人的教程
ChangeLog:
- 2017-01-15 18:53:45 重修文字
- 2017-01-16 12:49:19 潤飾文字,增加可讀性侯繁,首發(fā)簡書胖喳。