python scatter 简书_写给 Pythonist 的 Spacemacs 入门指北
前言
最開始,使用 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 入门指北的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: getopt的用法与optarg
- 下一篇: mysql 转义字符6_MySQL的转义