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的列表中利用remove()方法删除元素的教程
May 21 Python
python构建自定义回调函数详解
Jun 20 Python
TensorFlow实现Logistic回归
Sep 07 Python
python 为什么说eval要慎用
Mar 26 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 Python
Python类中的装饰器在当前类中的声明与调用详解
Apr 15 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
简述python&amp;pytorch 随机种子的实现
Oct 07 Python
python 窃取摄像头照片的实现示例
Jan 08 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图片处理类(水印、透明度、旋转)
2015/10/21 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
Gambit vs ForZe BO3 第三场 2.13
2021/03/10 DOTA
HTML TO JavaScript 转换
2006/06/26 Javascript
JavaScript 关键字屏蔽实现函数
2009/08/02 Javascript
一个挺有意思的Javascript小问题说明
2011/09/26 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
javascript中indexOf技术详解
2015/05/07 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
深入理解nodejs中Express的中间件
2017/05/19 NodeJs
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
如何用webpack4带你实现一个vue的打包的项目
2018/06/20 Javascript
对Vue beforeRouteEnter 的next执行时机详解
2018/08/25 Javascript
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
DataFrame中去除指定列为空的行方法
2018/04/08 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python远程连接服务器MySQL数据库
2018/07/02 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
基于Python2、Python3中reload()的不同用法介绍
2019/08/12 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python语言的优势是什么
2020/06/17 Python
浅谈CSS3中的变形功能-transform功能
2017/12/27 HTML / CSS
经济学人订阅:The Economist
2018/07/19 全球购物
竞聘书怎么写,如何写?
2014/03/31 职场文书
前台岗位职责
2015/02/13 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
超级礼物观后感
2015/06/15 职场文书
在职证明范本
2015/06/15 职场文书
投诉书范文
2015/07/02 职场文书
高三化学教学反思
2016/02/22 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers