天天看点

在Ubuntu中实现python按tab键补全

 刚学习python,其实一切都很好接受,因为有过c语言的基础,感觉一切都来得那么自然,python极其精简的语法,让我真心是爱上这种语言!相信往后python一定会在我的it生涯中大放光彩!

    好,废话说完了,入正题。

1.问题引出:默认情况下python交互界面的tab键    

    在linux下,或在路由器、交换机上,按tab键按得很爽,什么不完整的,tab一下都出来了,无奈,在linux中安装的python,默认情况是没有tab功能的,也就是在python的交互界面中,tab是没有办法补全的,python的交互界面只是把它当作正常的多个空格补全来处理:

1

2

3

4

5

6

<code>xpleaf@py:~/seminar6/day1$ python</code>

<code>python </code><code>2.7</code><code>.</code><code>3</code> <code>(</code><code>default</code><code>, aug  </code><code>1</code> <code>2012</code><code>, </code><code>05</code><code>:</code><code>14</code><code>:</code><code>39</code><code>) </code>

<code>[gcc </code><code>4.6</code><code>.</code><code>3</code><code>] on linux2</code>

<code>type </code><code>"help"</code><code>, </code><code>"copyright"</code><code>, </code><code>"credits"</code> <code>or </code><code>"license"</code> <code>for</code> <code>more information.</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys  </code>

<code>&gt;&gt;&gt; sys.     =====&gt;按tab键,想看看sys的子模块,结果就是按出了一大堆空格键</code>

是啊,这也太恶心了!没有tab键,宝宝不开心!

2.解决方案:自行导入tab键的模块--创建tab.py模块文件

    问题是,没有tab键的模块,怎么办?百度一下吧!不过当时确实找了好多,都找不到一个在我自己的实验环境中可以使用的,总是提示各种错误!还好,总算让我找到一个可以使用的,下面直接给出tab.py的代码:

7

8

9

10

11

12

13

14

15

16

17

<code>#!/usr/bin/env python</code>

<code># python startup file </code>

<code>import</code> <code>sys</code>

<code>import</code> <code>readline</code>

<code>import</code> <code>rlcompleter</code>

<code>import</code> <code>atexit</code>

<code>import</code> <code>os</code>

<code># tab completion </code>

<code>readline.parse_and_bind(</code><code>'tab: complete'</code><code>)</code>

<code># history file </code>

<code>histfile = os.path.join(os.environ[</code><code>'home'</code><code>], </code><code>'.pythonhistory'</code><code>)</code>

<code>try</code><code>:</code>

<code>    </code><code>readline.read_history_file(histfile)</code>

<code>except ioerror:</code>

<code>    </code><code>pass</code>

<code>atexit.register(readline.write_history_file, histfile)</code>

<code>del os, histfile, readline, rlcompleter</code>

把上面的代码,保存成tab.py文件,然后保存到下面的指定路径之一:

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys</code>

<code>&gt;&gt;&gt; sys.path</code>

<code>[</code><code>''</code><code>, </code><code>'/usr/lib/python2.7'</code><code>, </code><code>'/usr/lib/python2.7/plat-linux2'</code><code>, </code><code>'/usr/lib/python2.7/lib-tk'</code><code>, </code><code>'/usr/lib/python2.7/lib-old'</code><code>, </code><code>'/usr/lib/python2.7/lib-dynload'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/pil'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/gst-0.10'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/gtk-2.0'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntu-sso-client'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntuone-client'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntuone-couch'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntuone-installer'</code><code>, </code><code>'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol'</code><code>]</code>

为了省事点,我直接把tab.py文件放到/usr/lib/python2.7这个目录下面好了:

<code>xpleaf@py:~/seminar6/day1$ sudo mv tab.py /usr/lib/python2.</code><code>7</code><code>/</code>

<code>xpleaf@py:~/seminar6/day1$ ll /usr/lib/python2.</code><code>7</code><code>/tab.py</code>

<code>-rw-rw-r-- </code><code>1</code> <code>xpleaf xpleaf </code><code>419</code>  <code>8</code><code>月  </code><code>6</code> <code>23</code><code>:</code><code>53</code> <code>/usr/lib/python2.</code><code>7</code><code>/tab.py</code>

3.方案测试:导入tab模块后,可使用tab键补全

下面就可以爽爽地使用tab键补全了,不过还是要先在python的交互界面中导入一下:

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

<code>&gt;&gt;&gt; </code><code>import</code> <code>sys    ===&gt;导入sys模块只是为了下面对tab键补全做测试</code>

<code>&gt;&gt;&gt; </code><code>import</code> <code>tab    ===&gt;这才是重点</code>

<code>&gt;&gt;&gt; sys.          ===&gt;输入sys.后按两次tab键</code>

<code>sys.__class__(              sys.exit(</code>

<code>sys.__delattr__(            sys.exitfunc(</code>

<code>sys.__dict__                sys.flags</code>

<code>sys.__displayhook__(        sys.float_info</code>

<code>sys.__doc__                 sys.float_repr_style</code>

<code>sys.__excepthook__(         sys.getcheckinterval(</code>

<code>sys.__format__(             sys.getdefaultencoding(</code>

<code>sys.__getattribute__(       sys.getdlopenflags(</code>

<code>sys.__hash__(               sys.getfilesystemencoding(</code>

<code>sys.__init__(               sys.getprofile(</code>

<code>sys.__name__                sys.getrecursionlimit(</code>

<code>sys.__new__(                sys.getrefcount(</code>

<code>sys.__package__             sys.getsizeof(</code>

<code>sys.__reduce__(             sys.get</code><code>trace</code><code>(</code>

<code>sys.__reduce_ex__(          sys.hexversion</code>

<code>sys.__repr__(               sys.long_info</code>

<code>sys.__setattr__(            sys.maxint</code>

<code>sys.__sizeof__(             sys.maxsize</code>

<code>sys.__stderr__              sys.maxunicode</code>

<code>sys.__stdin__               sys.meta_path</code>

<code>sys.__stdout__              sys.modules</code>

<code>sys.__str__(                sys.path</code>

<code>sys.__subclasshook__(       sys.path_hooks</code>

<code>sys._clear_type_cache(      sys.path_importer_cache</code>

<code>sys._current_frames(        sys.platform</code>

<code>sys._getframe(              sys.prefix</code>

<code>sys._mercurial              sys.ps1</code>

<code>sys.api_version             sys.ps2</code>

<code>sys.argv                    sys.py3kwarning</code>

<code>sys.builtin_module_names    sys.pydebug</code>

<code>sys.byteorder               sys.setcheckinterval(</code>

<code>sys.call_tracing(           sys.setdlopenflags(</code>

<code>sys.callstats(              sys.setprofile(</code>

<code>sys.copyright               sys.setrecursionlimit(</code>

<code>sys.displayhook(            sys.set</code><code>trace</code><code>(</code>

<code>sys.dont_write_bytecode     sys.stderr</code>

<code>sys.exc_clear(              sys.stdin</code>

<code>sys.exc_info(               sys.stdout</code>

<code>sys.exc_type                sys.subversion</code>

<code>sys.excepthook(             sys.version</code>

<code>sys.exec_prefix             sys.version_info</code>

<code>sys.executable              sys.warnoptions</code>

<code>&gt;&gt;&gt; sys.</code>

感觉好极了!虽然每次进入python的交互界面都要重新再导入一次tab模块,可是有总比没有好!对于我这样的初学者来说,已经很满足啦!