Python实现Tab自动补全和历史命令管理的方法


Posted in Python onMarch 12, 2015

本文实例讲述了Python实现Tab自动补全和历史命令管理的方法。分享给大家供大家参考。具体分析如下:

Python的startup文件,即环境变量 PYTHONSTARTUP 对应的文件

1. 为readline添加tab键自动补全的功能

2. 像Shell一样管理历史命令

代码如下:

import rlcompleter

import readline

import atexit

import os

# http://stackoverflow.com/questions/7116038/python-tab-completion-mac-osx-10-7-lion

if 'libedit' in readline.__doc__:

    readline.parse_and_bind('bind ^I rl_complete')

else:

    readline.parse_and_bind('tab: complete')

histfile = os.path.join(os.environ['HOME'], '.pyhist')

try:

    readline.read_history_file(histfile)

except IOError:

    pass

atexit.register(readline.write_history_file, histfile)

del readline, rlcompleter, histfile, os

希望本文所述对大家的Python程序设计有所帮助。

一。这个方法可以修改shell命令行的自动补全
1.获取python目录【我使用的是64位ubuntu系统】

[~$]python
Python 2.7.3 (default, Apr 10 2013, 06:20:15) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', 
'/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', 
'/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/dist-packages/ubuntuone-client', 
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel', '/usr/lib/python2.7/dist-packages/ubuntuone-couch', 
'/usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
>>>

从上面看出python在我电脑上的路径是 /usr/lib/python2.7

2.切换至该目录写个startup.py的脚本,脚本目录就是处理python中<tab>事件,脚本内容如下

#!/usr/bin/python 
# python startup file 
     
import sys 
import readline 
import rlcompleter 
import atexit 
import os 
# tab completion 
readline.parse_and_bind('tab: complete') 
# history file 
histfile = os.path.join(os.environ['HOME'], '.pythonhistory') 
try: 
  readline.read_history_file(histfile) 
except IOError: 
  pass 
atexit.register(readline.write_history_file, histfile) 
     
del os, histfile, readline, rlcompleter

3.切换至自己主目录

[/usr/lib/python2.7$]cd 

[~$]vi .bashrc

4. 增加环境变量

#for python

export PYTHONSTARTUP=/usr/lib/python2.7/startup.py

5.配置环境变量生效

[~$]source .bashrc

PYTHONSTARTUP是什么东西呢?

If this is the name of a readable file, the Python commands in that file are executed before the first prompt 

is displayed in interactive mode.  The file is executed in the same name space where interactive commands are

executed so that  objects defined  or  imported in it can be used without qualification in the interactive session.  

You can also change the prompts sys.ps1 and sys.ps2 in this file.

二。这个方法能在VIM中自动补全

    1. 下载插件:
       下载地址:https://3water.com/softs/305586.html

   2.拷贝致相应的目录

unzip  pydiction-1.2.1.zip

cp python_pydiction.vim  /usr/share/vim/vim73/ftplugin

mkdir  /usr/share/vim/vim73/pydiction

cp complete-dict  /usr/share/vim/vim73/pydiction/

cp pydiction.py  /usr/share/vim/vim73/pydiction/

 3.修改vim配置文件

 

 let g:pydiction_location = '/usr/share/vim/vim73/pydiction/complete-dict'

let g:pydiction_menu_height = 20

 

 OK,测试是否生效吧

Python 相关文章推荐
python通过imaplib模块读取gmail里邮件的方法
May 08 Python
Python获取运行目录与当前脚本目录的方法
Jun 01 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
Python探索之SocketServer详解
Oct 28 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
python实现多人聊天室
Mar 31 Python
Python获取时间戳代码实例
Sep 24 Python
python内置模块collections知识点总结
Dec 19 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
Apr 14 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
Jun 03 Python
用python画城市轮播地图
May 28 Python
Python实现将n个点均匀地分布在球面上的方法
Mar 12 #Python
Python求解平方根的方法
Mar 11 #Python
python自动格式化json文件的方法
Mar 11 #Python
python处理csv数据的方法
Mar 11 #Python
python模拟鼠标拖动操作的方法
Mar 11 #Python
Python创建系统目录的方法
Mar 11 #Python
Python实现从订阅源下载图片的方法
Mar 11 #Python
You might like
用Apache反向代理设置对外的WWW和文件服务器
2006/10/09 PHP
php 将excel导入mysql
2009/11/09 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
JavaScript中的History历史对象
2008/01/16 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
Jquery颜色选择器ColorPicker实现代码
2012/11/14 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
理解JS事件循环
2016/01/07 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
JavaScript常用正则函数用法示例
2017/01/23 Javascript
ionic中的$ionicPlatform.ready事件中的通用设置
2017/06/11 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
使用python实现rsa算法代码
2016/02/17 Python
python实现排序算法解析
2018/09/08 Python
python并发和异步编程实例
2018/11/15 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
python tornado修改log输出方式
2019/11/18 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
茶叶生产计划书
2014/01/10 职场文书
鸿星尔克广告词
2014/03/21 职场文书
食品安全承诺书
2014/05/22 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
python实战之90行代码写个猜数字游戏
2021/04/22 Python
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电