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导入oracle数据的方法
Jul 10 Python
Python正则简单实例分析
Mar 21 Python
python3爬取数据至mysql的方法
Jun 26 Python
解决Python安装时报缺少DLL问题【两种解决方法】
Jul 15 Python
python中列表的切片与修改知识点总结
Jul 23 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
python对验证码降噪的实现示例代码
Nov 12 Python
python实现简单图书管理系统
Nov 22 Python
Opencv求取连通区域重心实例
Jun 04 Python
简单的Python人脸识别系统
Jul 14 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
pytorch--之halfTensor的使用详解
May 24 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
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
判断控件是否已加载完成的代码
2010/02/24 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
jQuery EasyUI API 中文文档 - Tabs标签页/选项卡
2011/10/01 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
js进行表单验证实例分析
2015/02/10 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
轮播的简单实现方法
2016/07/28 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
详解如何用python实现一个简单下载器的服务端和客户端
2019/10/28 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
儿科主治医生个人求职信
2013/09/23 职场文书
给老婆的搞笑检讨书
2014/01/12 职场文书
产品设计开发计划书
2014/05/07 职场文书
学习退步检讨书
2014/09/28 职场文书
2015年政风行风工作总结
2015/04/21 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
Ajax实现异步加载数据
2021/11/17 Javascript