Emacs中打造强大的Python IDE

Emacs中打造强大的Python IDE

原作者关于Python的博文链接:    http://www.cnblogs.com/coderzh/category/133952.html

本文将介绍,在Emacs中,通过各种扩展,打造强大的Python IDE环境,包括Snippet工具,智能提示,自动补全,重构工具,调试以及GAE的调试,等等。以下各工具的安装前提是你对Emacs的配置文件有一定的了解,所有相关的el文件都必须放在load_path能够加载的地方。

1. YASnippet

snippet工具,可自定义一些模板,必不可少的好东西!看了下面这个很酷的演示动画就明白了:

http://yasnippet.googlecode.com/files/yasnippet.avi

安装方法:

( require   ' yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/plugins/yasnippet-0.6.1c/snippets")


2. AutoComplete

自动完成工具,会像VS里一样,弹出一个列表框让你去选择。

Emacs中打造强大的Python IDE_第1张图片'

安装方法:

复制代码
( require   ' auto-complete)
(require 
' auto - complete - config)
(global
- auto - complete - mode t)
(setq
- default ac - sources  ' (ac-source-words-in-same-mode-buffers))
(add-hook 
' emacs - lisp - mode - hook (lambda () (add - to - list  ' ac-sources  ' ac - source - symbols)))
(add
- hook  ' auto-complete-mode-hook (lambda () (add-to-list  ' ac - sources  ' ac-source-filename)))
(set-face-background 
' ac - candidate - face  " lightgray " )
(set
- face - underline  ' ac-candidate-face "darkgray")
(set-face-background 
' ac - selection - face  " steelblue " ) ;;; 设置比上面截图中更好看的背景颜色
(define
- key ac - completing - map   " \M-n "   ' ac-next)  ;;;  列表中通过按M-n来向下移动
(define-key ac-completing-map "\M-p" 
' ac - previous)
(setq ac
- auto - start  2 )
(setq ac
- dwim t)
(define
- key ac - mode - map  (kbd  " M-TAB " ' auto-complete)
复制代码


3. Rope and Ropemacs

 

非常棒的重构工具,比如rename,move,extract method等等。还有非常好用的goto difinition(跳到定义),show documents(显示文档)等等。安装Ropemacs前,必须先安装rope和pymacs 。

rope的安装方法:

python setup.py install

pymacs的安装方法:

python setup.py install

.emacs中:

(autoload  ' pymacs-apply "pymacs")
(autoload 
' pymacs - call  " pymacs " )
(autoload 
' pymacs-eval "pymacs" nil t)
(autoload 
' pymacs - exec   " pymacs "  nil t)
(autoload 
' pymacs-load "pymacs" nil t)

Ropmacs的安装方法:

python setup.py install

.emacs中:

(pymacs - load  " ropemacs "   " rope- " )
(setq ropemacs
- enable - autoimport t)
 

ropemacs, rope in emacs

Ropemacs is a plugin for performing python refactorings in emacs. It uses rope library and pymacs.

You should install rope library, ropemode and pymacs before using ropemacs. You can download ropemacs from here.

Features

Supports many of the refactorings that are supported by rope_ library:

  • Rename
  • Extract method/local variable
  • Move class/function/module/package/method
  • Inline method/local variable/parameter
  • Restructuring
  • Change signature
  • ...

Other refactoring-related features:

  • Previewing refactorings
  • Undo/redo refactorings
  • Showing refactoring progress

Code-assists:

  • Code-completion
  • Goto definition
  • Show pydoc
  • Find occurrences
  • Organize imports (remove unused and duplicate imports and sort them)
  • Generating python elements

http://rope.sourceforge.net/ropemacs.html

refactoring很强大从上到下从左到右依次是主窗口,输出窗口,文档,还有最下面是自动补全和代码提示。可以装一个ropemacs,然后在.emacs里面加入下面一段配置自己感受一下,alt+/ 就会自动补全了。
  
;; python
(defun load-ropemacs ()
   "Load pymacs and ropemacs"
   (interactive)
   (setenv "PYMACS_PYTHON" "python2.5")
   (require 'pymacs)
   (autoload 'pymacs-load "pymacs" nil t)
   (autoload 'pymacs-eval "pymacs" nil t)
   (autoload 'pymacs-apply "pymacs")
   (autoload 'pymacs-call "pymacs")
   (autoload 'pymacs-exec "pymacs" nil t)
   (pymacs-load "ropemacs" "rope-")
   (global-set-key [(meta ?/)] 'rope-code-assist)
   (setq rope-confirm-saving 'nil)
   )
  
(add-hook 'python-mode-hook 'load-ropemacs)

Emacs中打造强大的Python IDE_第2张图片

4. pycomplete

一个更加强大的智能提示工具,比如,输入time.cl 然后按TAB键,会列出time模块所有cl开头的函数名。在调用函数时,还会在mini buffer中提示函数的参数类型。这个东西需要先安装pymacs。

安装方法:

1. 拷贝 python-mode.el and pycomplete.el 到Emacs的load_path中。

2. 拷贝 pycomplete.py 到PYTHONPATH (比如: c:/python25/Lib/site-packages)

3. .emacs中添加:

( require   ' pycomplete)
(setq auto-mode-alist (cons 
' ( " \\.py$ "   .  python - mode) auto - mode - alist))
(autoload 
' python-mode "python-mode" "Python editing mode." t)
(setq interpreter-mode-alist(cons 
' ( " python "   .  python - mode)
                           interpreter
- mode - alist))


5. pdb调试

在Emacs中,通过M-x pdb可调出pdb对python代码进行调试。但是发现在Windows系统中,总进入不了调试模式。主要原因有:

1. windows中,找不到pdb.py位置。需自己制定pdb的路径。可以通过下面的方法设置pdb的路径:

复制代码
;; pdb setup ,  note the python version
(setq pdb
- path  ' c:/python25/Lib/pdb.py
       gud-pdb-command-name (symbol-name pdb-path))
 (defadvice pdb (before gud-query-cmdline activate)
   "Provide a better default command line when called interactively."
   (interactive
    (list (gud-query-cmdline pdb-path
                 (file-name-nondirectory buffer-file-name)))))
复制代码


2. windows中,调用pdb时,未使用python -i 参数。

针对上面两个问题,我的解决办法是,不设置pdb具体路径,M-x pdb 回车后,出现下面命令:

Run pdb (like this): pdb 

然后手动修改一下:

Run pdb (like this):  python  - - m  pdb test.py

这样就搞定了。

6. 如何调试GAE程序

GAE是一个Web应用,需要跨线程进行调试,而pdb本身对线程调试支持不好。

使用pdb进行线程调试时,只有在需要调试的地方插入下面代码:

import  pdb
pdb.set_trace()

然后直接运行被调试代码,而不是通过python pdb来执行,就可以多线程代码进行调试了。

但是Google App Engine这样的Web应用,使用这个方法还是不能调试,和stdin和stdout有关,最后找到一个很好的解决方法:

def  set_trace():
    
import
 pdb, sys
    debugger 
=  pdb.Pdb(stdin = sys. __stdin__
,
        stdout
= sys. __stdout__
)
    debugger.set_trace(sys._getframe().f_back)


在任何需要调试的地方,调用上面的set_trace()函数。

如果你还有更好玩的东西,一定要告诉我!

参考文档:

http://www.emacswiki.org/emacs/PythonMode

http://www.enigmacurry.com/2008/05/09/emacs-as-a-powerful-python-ide/ 

http://jjinux.blogspot.com/2008/05/python-debugging-google-app-engine-apps.html 

 

 

 

[ 配置Emacs下的Python开发环境 ] 

特性

在Linux论坛上总有人问Python用什么IDE比较好,然后总会有人回答说Emacs。最近开始学Python,也花了点时间研究怎么配置Emacs,发现没有想象中的那么麻烦。这篇文章大致上来自于Lei Chen博客文章的翻译,完成以后的Emacs具有以下特性:

  • 自动完成同一个文件内的变量、函数
  • 自动完成python库中的名称
  • 代码重构
  • 模板展开功能
  • 在线帮助系统
  • 即时语法检测

其他特性还包括自动缩进,括号匹配,语法高亮,代码折叠等等。其中最有用的莫过于自动完成了,貌似很少有python编辑器可以做到这一点。而即时语法检测让emacs下的python代码书写变得像Eclipse一样,一旦有错误立刻就会高亮标记出来

如何安装

首先你得在home目录下有一个.emacs配置文件,并且有一个用来放插件的文件夹(比如说~/.emacs.d/)

  1. 下载auto-completion.el到.emacs.d,并且在.emacs中添加如下几行: 
    (require ‘auto-complete)
    (global-auto-complete-mode t)
  2. 下载yasnippet到.emacs.d并且编辑.emacs:
    (require ‘yasnippet) (yas/initialize) (yas/load-directory “~/.emacs.d/snippets”)
  3. 下载python-mode.el并且放到.emacs.d中。我们会在之后的配置中用到它
  4. 设置Rope, Ropemacs

    我们需要使用最新的development版的rope和ropemacs,否则在emacs中不能找到rope-completion函数。通过如下步骤安装:

    sudo apt-get install mercurial python-setuptools mkdir /tmp/rope && cd /tmp/rope
    hg clone http://bitbucket.org/agr/rope
    hg clone http://bitbucket.org/agr/ropemacs
    hg clone http://bitbucket.org/agr/ropemode
    sudo easy_install rope
    ln -s ../ropemode/ropemode ropemacs/
    sudo easy_install ropemacs
  5. 到 http://pymacs.progiciels-bpi.ca/archives/ 下载 pymacs并安装
  6. 安装pyflacks以进行自动语法检查
    sudo apt-get install pyflakes
  7. 把所有东西放到一块儿

在你的.emacs.d中创建一个init_python.el,并且加入以下内容:

(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)
(add-hook 'python-mode-hook
      (lambda ()
 (set-variable 'py-indent-offset 4)
 ;(set-variable 'py-smart-indentation nil)
 (set-variable 'indent-tabs-mode nil)
 (define-key py-mode-map (kbd "RET") 'newline-and-indent)
 ;(define-key py-mode-map [tab] 'yas/expand)
 ;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)
 (smart-operator-mode-on)
 ))
;; pymacs
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
;;(eval-after-load "pymacs"
;;  '(add-to-list 'pymacs-load-path YOUR-PYMACS-DIRECTORY"))
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Auto-completion
;;;  Integrates:
;;;   1) Rope
;;;   2) Yasnippet
;;;   all with AutoComplete.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun prefix-list-elements (list prefix)
  (let (value)
    (nreverse
     (dolist (element list value)
      (setq value (cons (format "%s%s" prefix element) value))))))
(defvar ac-source-rope
  '((candidates
     . (lambda ()
         (prefix-list-elements (rope-completions) ac-target))))
  "Source for Rope")
(defun ac-python-find ()
  "Python `ac-find-function'."
  (require 'thingatpt)
  (let ((symbol (car-safe (bounds-of-thing-at-point 'symbol))))
    (if (null symbol)
        (if (string= "." (buffer-substring (- (point) 1) (point)))
            (point)
          nil)
      symbol)))
(defun ac-python-candidate ()
  "Python `ac-candidates-function'"
  (let (candidates)
    (dolist (source ac-sources)
      (if (symbolp source)
          (setq source (symbol-value source)))
      (let* ((ac-limit (or (cdr-safe (assq 'limit source)) ac-limit))
             (requires (cdr-safe (assq 'requires source)))
             cand)
        (if (or (null requires)
                (>= (length ac-target) requires))
            (setq cand
                  (delq nil
                        (mapcar (lambda (candidate)
                                  (propertize candidate 'source source))
                                (funcall (cdr (assq 'candidates source)))))))
        (if (and (> ac-limit 1)
                 (> (length cand) ac-limit))
            (setcdr (nthcdr (1- ac-limit) cand) nil))
        (setq candidates (append candidates cand))))
    (delete-dups candidates)))
(add-hook 'python-mode-hook
          (lambda ()
                 (auto-complete-mode 1)
                 (set (make-local-variable 'ac-sources)
                      (append ac-sources '(ac-source-rope) '(ac-source-yasnippet)))
                 (set (make-local-variable 'ac-find-function) 'ac-python-find)
                 (set (make-local-variable 'ac-candidate-function) 'ac-python-candidate)
                 (set (make-local-variable 'ac-auto-start) nil)))
;;Ryan's python specific tab completion
(defun ryan-python-tab ()
  ; Try the following:
  ; 1) Do a yasnippet expansion
  ; 2) Do a Rope code completion
  ; 3) Do an indent
  (interactive)
  (if (eql (ac-start) 0)
      (indent-for-tab-command)))
(defadvice ac-start (before advice-turn-on-auto-start activate)
  (set (make-local-variable 'ac-auto-start) t))
(defadvice ac-cleanup (after advice-turn-off-auto-start activate)
  (set (make-local-variable 'ac-auto-start) nil))
(define-key py-mode-map "\t" 'ryan-python-tab)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; End Auto Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Auto Syntax Error Hightlight
(when (load "flymake" t)
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
         'flymake-create-temp-inplace))
    (local-file (file-relative-name
   temp-file
   (file-name-directory buffer-file-name))))
      (list "pyflakes" (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
        '("\\.py\\'" flymake-pyflakes-init)))
(add-hook 'find-file-hook 'flymake-find-file-hook)
(provide 'init_python)
在你的.emacs文件中添加 :(load-library “init_python”)

使用说明

  1. 代码自动展开。比如说在编辑C/C++头文件的时候键入once然后按tab,则会自动展开#ifndef __FILE_H__这样的宏。这个功能是YASnippet提供的,在emacs的菜单中可以看到它的所有宏。展开以后再按tab键可以在已展开的代码 之间切换位置。
  2. 自动完成代码。函数名输入到一半按tab键会调用Rope和Ropemacs的功能自动完成库文件中的函数、变量名
  3. C-c d 显示python的doc string
  4. C-c C-c 运行当前的文件
  5. C-c ! 打开python shell

事实上

init_python.el做的事情是通过使用auto_complete.el中的功能,把YASnippet和Rope的功能结合到了 一块儿,实现了类似TexMate的自动完成等功能。其中YASnippet可以自定义模板,很是实用。Rope的功能还在研究中。

 

Bonus:

Emacs补全利器:auto-complete+gccsense  

from:

http://emacser.com/emacs-gccsense.htm

  • 1 前言
  • 2 简介
  • 3 安装
    • 3.1 配置auto-complete
    • 3.2 配置gcc-code-assist
    • 3.3 安装配置gccsense
  • 4 主要模块介绍
  • 5 实例
  • 6 附录
  • 7 参考

1 前言

搜索引擎上关于emacs代码补全的文章一大堆,大多讲的是cedet、semantic、ctags之类的。我自己也尝试过一些“主流”的组合,奈何都不来感啊。用得最长的也就auto-complete了,但是用的也仅仅是它自带的buffer内内容的补全,基本不涉及语义的补全。偶然发现了gccsense这个东西,简单配置了下,比较满意。有图有真相

Emacs gccsense


我绑定的补全键到M+/,这样,遇到要补全的地方,按下M+/就出现了补全菜单,旁边是提示。

2 简介

auto-complete提供一个补全的前端,通过不同的后端,支持ctags等。
gccsense是补全的后端,能提供符合语义的补全。因为它是直接利用gcc的代码,使用了编译器内在的分析器。它是一个独立的程序,目前通过插件可以被用到emacs和vim的补全上。因为是用的gcc的代码,理论上可以补全所有gcc支持的语言。
auto-complete和gccsense是一家出的。

3 安装

3.1 配置auto-complete

下载:http://cx4a.org/software/auto-complete/
配置.emacs,我的auto-complete在/mydoc/lib/emacs-plugins/下

?[Copy to clipboard] View Code LISP
; auto complete (add-to-list 'load-path "/mydoc/lib/emacs-plugins/auto-complete")  (require 'auto-complete-config)  (add-to-list 'ac-dictionary-directories "/mydoc/lib/emacs-plugins/auto-complete/ac-dict")  (ac-config-default)

3.2 配置gcc-code-assist

gcc-code-assist就是在gcc代码基础上改的,主要用来从代码中提取补全信息

  1. 下载:http://cx4a.org/software/gccsense/#Downloads
    编译安装之前,准备好环境,debian系统如下:

    ?[Copy to clipboard] View Code BASH
    sudo apt-get install build-essential libgmp3-dev libmpfr-dev flex ruby rubygems libsqlite3-ruby

    其它系统,如freebsd、macos请自行参考用户手册。

  2. 配置安装:

    ?[Copy to clipboard] View Code BASH
    $ tar xvjf gcc-code-assist-*.tar.bz2  
    $ cd gcc-code-assist-*  
    $ ./configure --program-suffix=-code-assist --enable-languages=c,c++ --disable-bootstrap --disable-multilib  
    $ make # -j2   $ sudo make install

    安装成功之后执行下,如果有正常输出,就说明安装成功:

    ?[Copy to clipboard] View Code BASH
    $ gcc-code-assist --version  
    $ g++-code-assist --version

3.3 安装配置gccsense

gccsense这个包包含一些辅助函数,以及编辑器的插件

  1. 解压缩之后,执行:

    ?[Copy to clipboard] View Code BASH
    $ cd gccsense-* $ sudo cp bin/* /usr/local/bin/
  2. 执行一下命令,确保安装成功:

    ?[Copy to clipboard] View Code BASH
    $ gccrec --version 
    $ autopch --version
  3. emacs的插件文件为etc/gccsense.el,放到插件目录然后,在.emacs里面加入

    ?[Copy to clipboard] View Code LISP
    (require 'gccsense)

    即可。
    由于我的gccsense.el放到了。/mydoc/lib/emacs-plugins/c下,并且把auto-complete的补全命令绑定到了M+/上,所以这部分配置如下:

    ?[Copy to clipboard] View Code LISP
    (add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")  (require 'gccsense)  (global-set-key "\257" (quote ac-complete-gccsense))

    ok,搞定。

4 主要模块介绍

在介绍使用前,简单介绍下几个主要模块的作用

  • gcc-code-assist
    gcc4.4代码基础上改的那位,用来从被补全代码中分析出补全信息
  • gccrec
    编译一个文件,往往要加上编译参数的,比如自定义的include地址。但是编辑器在补全的时候,是不知道这些的,硬生生地调用gcc-code-assist来“模拟编译”,参数补全造成的错误会扰乱补全信息的获取。
    gccrec就是为了解决这个问题,在使用编辑器补全之前,需要执行一次gccrec,它会将编译参数信息存到~/.gccrec这个sqlite3的数据库中。具体用法参见下一节的示例。
  • autopch
    用来启用预编译头,来提高速度。
    autopch的相关部分请各位看官自行参考用户手册吧,后面的示例代码简单,不需要这个东西。

5 实例

  1. 准备一个测试cpp文件,test.cpp:

    ?[Copy to clipboard] View Code LISP
    #include <string>  
    using namespace std;   int main()  {
                       
        string s; }
  2. 使用gccrec记录编译命令

    ?[Copy to clipboard] View Code BASH
    gccrec g++-code-assist test.cpp

    这里可以认为g++-code-assist就是g++,参数一样的,比如-I -l之类的。

  3. 用emacs打开test.cpp,享受补全吧
    在string s;后面接着输入s.,然后按M-x ac-complete-gccsense,就可以利用auto-complete和它的gccsense后端来补全了。

6 附录

这里贴上我的emacs相关部分的配置文件。
我把补全的命令绑定到了M-/上面,
gccsense.el放到了/mydoc/lib/emacs-plugins/c/下面,所以这样写:

?[Copy to clipboard] View Code LISP
(add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")  (require 'gccsense)  (global-set-key "\257" (quote ac-complete-gccsense))

7 参考

gccsense用户手册,http://cx4a.org/software/gccsense/manual.html

Auto-complete: 

Auto Complete Mode User Manual: 
http://cx4a.org/software/auto-complete/manual.html

Gccsense : 

http://cx4a.org/software/gccsense/manual.html
 
 

最常用的Emacs的基本操作

什么是Emacs?

Emacs是一种强大的文本编辑器,在程序员和其他以技术工作为主的计算机用户中广受欢迎。EMACS,即Editor MACroS(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。 

Emacs不仅仅是一个编辑器,他是一个整合环境,或可称它为集成开发环境。在里面你可以收发电子邮件,FTP,上新闻组,日历,游戏,写代码,调试等等。对于某些人,打开电脑后,只要打开一个Emacs和FireFox,就可以完成所有的事情。甚至还流传着这么一句话:Emacs除了不能修理自行车,其他都可以做。

Emacs主页:http://www.gnu.org/software/emacs/

入手Emacs

Emacs入手有些难度,很多初学者很快就放弃了。因为Emacs的很多快捷键让人开始很难适应,比如习惯了狂按ctrl + s保存的同学会不适应,大多数人习惯的复制粘贴ctrl + c,ctrl + v,变成了alt + w, ctrl + y。《卓有成效的程序员》中,作者说到,一个程序员需要坚持使用Emacs一年以上,才能真正熟练掌握。我也是个初学者,现在为止才坚持了几个星期,还要努力啊。如果你也是Emacs初学者,和我一起互勉吧。开始可能会遇到输入障碍,但是没关系,坚持下来,当掌握更多的东西时,效率就会提高上来。

Emacs基本操作

Emacs的一些基本操作非常重要,必须牢记在心。一个最好的办法就是看Emacs的中文指南(ctrl + h, t),然后反复练习。

Emacs的快捷键都是绑定在ctrl和alt(或称meta)上的,例如c-x就是ctrl+x,m-x就是alt+x 

文件操作

  C-x C-f 打开文件
  C-x C-s 保存文件
  C-x C-w 存为新文件
  C-x C-c 退出Emacs

编辑操作

  C-f 前进一个字符
  C-b 后退一个字符
  M-f 前进一个字
  M-b 后退一个字
  C-a 移到行首
  C-e 移到行尾
  M-a 移到句首
  M-e 移到句尾
  C-p 后退一行
  C-n 前进一行
  M-x goto-line 跳到指定行
  C-v 向下翻页
  M-v 向上翻页
  M-< 缓冲区头部
  M-> 缓冲区尾部
  C-l 当前行居中
  M-n or C-u n 重复操作随后的命令n次
  C-d 删除一个字符
  M-d 删除一个字
  C-k 删除一行
  M-k 删除一句
  C-w 删除标记区域
  C-y 粘贴删除的内容
  注意:C-y可以粘贴连续C-k删除的内容;先按C-y,然后按M-y可以选择粘贴被删除的内容
  C-空格 标记开始区域(需修改输入法快捷键)
  C-x h 标记所有文字
  M-w 复制标记区域
  C-/ or C-x u 撤消操作

执行SHELL命令

  M-x shell 打开SHELL
  M-! 执行SHELL命令 (shell-command)

窗口操作

  C-x 0 关闭本窗口
  C-x 1 只留下一个窗口
  C-x 2 垂直均分窗口
  C-x 3 水平均分窗口
  C-x o 切换到别的窗口
  C-x s 保存所有窗口的缓冲
  C-x b 选择当前窗口的缓冲区

      C-M v 另外一个窗口向下翻页(需要对照时很好用)

      c-M-Shift v 另外一个窗口向上翻页

缓冲区列表操作

  C-x C-b 打开缓冲区列表
  C-x k 关闭缓冲区

搜索模式

  C-s 向前搜索
  C-s 查找下一个
  ENTER 停止搜索
  C-r 反向搜索
  C-s C-w 以光标所在位置的字为关键字搜索
  M-x replace-string ENTER search-string ENTER 替换
  C-M-s 向前正则搜索
  C-M-r 向后正则搜索
  C-M-% 正则交互替换

帮助

      C-h t 入门指南
      C-h v 查看变量
      C-h f 查看函数
      C-h ? 查看帮助列表 

作者:CoderZh(CoderZh的技术博客 - 博客园)
微博:http://t.sina.com.cn/coderzh
出处:http://coderzh.cnblogs.com
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

 

 

windows下安装emacs及添加配置文件


在这个蔚蓝色的星球上,流传着两大神器的传说:据说Emacs是神的编辑器,而Vim是编辑器之神。
一些人勇敢地拾起了Vim或Emacs,却发现学习曲线陡峭而漫长,还是有一些人留下来了,坚定地守护着这两大神器。
一些说葡萄太酸的人想离开又不甘心,总是问:它们到底神在哪里啊?

配置windowEmacs

首先我们需要下载windows版的emacs,官网下载地址:
http://ftp.gnu.org/pub/gnu/emacs/windows/
解压后有个addpm.exe,双击运行它

Emacs中打造强大的Python IDE_第3张图片

addpm.exe,注册系统变量ComSpec,它的值为C:\WINDOWS\system32\cmd.exe(和%SystemRoot%\system32\cmd.exe一样).该变量的作用是指示emacs调用系统的shell

Emacs中打造强大的Python IDE_第4张图片

当然也可以使用cgywin等其它的shell,使用cgywin等作为emacs默认的shell时可能会需要一些其它的设置,这些可以参考emacs的在线帮助

 

运行runemacs.exe可以启动emacs。

 

Windows下设置Emacs的HOME目录

总的来说,Emacs的默认配置文件放在变量HOME所指的路径下,所以,只要我们把.emacs扔到HOME所指向的目录就可以了,下面就简单介绍一下在Windows下设置home目录的几种方法,并进行简单的对比。

第一种方法,改变home环境变量的值。

这种方法,改变了$home变量,也会影响Cygwin或是其他一些应用程序,因为有一些程序会根据Windows的home环境变量来寻找数据存放的路径。

第二种方法,不改变Windows默认的home值,设置默认的.emacs文件读取你自己的Emacs配置文件,并重新设定Emacs的home目录

你可以在Emacs中输入C-x C-f,然后打开路径~

Emacs中打造强大的Python IDE_第5张图片

(即当前的home环境变量所指的路径,一般来说是这样的路径:C:/Documents and Settings/water/Application Data)。

Emacs中打造强大的Python IDE_第6张图片

看看显示的是哪个目录,如果此目录下没有.emacs,可以创建一个.emacs或_emacs,然后在这个.emacs文件里,加入如下语句

? View Code LISP
(load-file "E:/water/.emacs")

文件 E:/water/.emacs 才是我们真正的Emacs配置文件,我们可以在这个真正的配置文件里用如下语句设置我们的home目录

? View Code LISP
1
2
3
4
5
(setenv "HOME" "E:/water")
(setenv "PATH" "E:/water")
;;set the default file path (setq default-directory "~/")
(add-to-list 'load-path "~/emacs/site-lisp")

这个方法的优点是比较简单同样也方便对.emacs文件备份,不会对其它应用程序产生任何影响

第三种方法,修改注册表,在注册表中进行如下设置
HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs\HOME=%emacs_dir%
以上三种方法都可以设置好Emacs的Home目录,但是,系统是按什么顺序来解析它们的呢?大体上的顺序是这样的:

  1. 如果设置了环境变量HOME,则使用HOME指定的目录。
  2. 如果设置了注册表里的值HKCU\SOFTWARE\GNU\Emacs\HOME,则使用这个值所指定的目录作为home目录。并不是太推荐使用这种方法,因为会导致用户共享一个home目录。
  3. 如果 C:\.emacs 文件存在,则使用 C:\.emacs 这个文件。这个是为了向低版本的Emacs兼容,因为低版本的Emacs就是默认用这个文件作为配置文件。
  4. 把用户的AppData目录作为home目录(通常来说,就是类似这样的目录 C:/Documents and Settings/water/Application Data ),这个用户的数据目录根据Windows版本的不同而有所不同。

我个人比较喜欢用第二种方法,即简单又方便备份。

其实,如果你只是想要Emacs能找到你的.emacs的话,也可以不用管HOME目录的,写个批处理文件emacs.bat:

path-of-emacs.exe -q -l path-of-your.emacs

以后执行这个批处理文件就可以用你的配置打开Emacs了。


 

转载于:https://my.oschina.net/alphajay/blog/70965

你可能感兴趣的:(Emacs中打造强大的Python IDE)