0%

mac-emacs

1. 安装emacs

使用brew

1
brew install emacs --with-cocoa

C-h t # 打开tutorial

2. 配置emacs

原来是用的prelude,后来发现太重,反应有点慢。因为我主要是为了python,所以重新配置。参考了几篇文章:

  • Emacs:最好的Python编辑器?
    注意有几处不同,elpy的ipython配置现在是
    1
    2
    (setq python-shell-interpreter "ipython"
    python-shell-interpreter-args "-i --simple-prompt")

2.1 elpy

  • 看elpy的配置,M-x elpy-config,查看python的版本,package的情况。
  • 激活virtualenv, M-x pyvenv-activate, 输入你的virtualenv目录即可,不需要到它的bin目录

2.2 emacs 临时文件和备份文件

  • 临时文件(Auto-Save file)
    Emacs的临时文件的文件名是使用“#”包围,这种文件一般是在Emacs中编辑时,emacs自动保存的文件,他在编辑文件的同一个目录内生成一个以#file-name#这样的文件,这个文件会在我们保存文件之后被emacs删除。这个文件的作用是为了防止在进行编辑的时候异常退出造成的损失。

  • 备份文件(Backup files)
    备份文件是在第一次保存的时候,如果保存的文件已经存在,Emacs会自动将当前已经存在的文件重命名作为备份文件,并将当前buffer的内容写入同名的文件中来替代原来的文件。而备份文件使用的是一个“~”作为后缀(如:file-name~)。

https://www.emacswiki.org/emacs/AutoSave

1
2
3
4
5
6
7
(defconst emacs-tmp-dir (expand-file-name (format "emacs%d" (user-uid)) temporary-file-directory))
(setq backup-directory-alist
`((".*" . ,emacs-tmp-dir)))
(setq auto-save-file-name-transforms
`((".*" ,emacs-tmp-dir t)))
(setq auto-save-list-file-prefix
emacs-tmp-dir)

Emacs的临时文件和备份文件

3 emacs 快捷键

3.1 C-j 执行lisp

打开一个emacs的缓冲区,如默认的临时缓冲区scratch,输入lisp命令 (xxx),在末尾 C-j就会执行。

3.2 C-c C-c

执行python

3.3 C-c ! v

in python-file buffer and see that flake8 imported from virtualenv

3.4 剪切,复制,粘贴

剪切 C-w
复制 M-w
粘贴 C-y

3.5 矩形操作

开头都是C-x r,先选中起点,C-@,然后移动光标到对角线。
C-x r r 复制一个矩形块
C-x r k 剪切一个矩形块
C-x r y 粘贴一个矩形块
C-x r o 插入一个矩形块
C-x r c 清除一个矩形块,使其变成空白
C-x r t 在选定的区域的所有列前插入光标,输入字符

4. jupyter

jupyter notebook 原来是ipython notebook,因为原来支持ipython,现在的支持语言多了,有了一个kernel的概念,用pip3下载,默认就是python3。

1
pip install jupyter

安装成功后配置,先配置jupyter server

卸载jupyter
https://stackoverflow.com/questions/33052232/how-to-uninstall-jupyter

4.1 jupyter server 配置文件

先生成一个config.py文件,jupyter notebook --generate-config,在~/.jupyter下面就会有一个jupyter_notebook_config.py文件,修改其中的参数。

4.1.1. 修改密码

from notebook.auth import passwd; passwd(),输入一个你想使用的密码,会产生一个长的字符串结果,拷贝这个字符串到c.NotebookApp.password的值中

1
2
c.NotebookApp.password='' #这个不是原始密码,而是靠notebo.auth.passwd生成的。
c.NotebookApp.password_required = True
4.1.2 配置端口

c.NotebookApp.port = 7812

4.1.3 ssh
  • 生成秘钥
    1
    openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
  • 修改jupyter_notebook_config.py
    1
    2
    3
    4
    c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
    c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
    # Set ip to '*' to bind on all interfaces (ips) for the public server
    c.NotebookApp.ip = '*'
    我没有使用ssh,因为emacs连接时失败了,所以我关掉了。

ipython notebook使用教程

5. emacs intergrate jupyter

记得使用顺序

  1. M-x ein: notebooklist-login,输入port,password,成功后进入第二步。
  2. M-x ein: notebooklist-open,输入port,成功后会有一个缓冲区对于jupyter notebook服务器消息。
  3. 在第二步中的缓冲区中,先选择Kernel,python 3,移动到那个 ( ) python 3,按下enter键;移动光标到[New Notebook],按下回车键。就会出现ipython的交互窗口,这里就是一个cell,可以输入python,然后按C-c C-c,就会提交到jupyter notebook服务器,然后返回执行结果。

注意:Emacs的terminal版本(Emacs -new)不支持matplotlib的图片结果,GUI版本(Emacs)支持,所以先用GUI版本试试。

5.1 ein的快捷键

5.1.1 保存notebook

C-x C-s

5.1.2 重命名notebook

C-x C-w

6. python debug

方法有print, logging, pdb, ipdb, assert

原理就是使用pdb,ipdb:
在emacs中运行:

  • M-x pdb RET
  • ptyon -m ipdb test.py 或者 python -m pdb test.py
  • 在ipdb的buffer中操作,设置断点需要插入代码(import ipdb; ipdb.set_trace()),调试完再删除。

http://wenshanren.org/?p=348,参考这个。
http://wikemacs.org/wiki/Python