Linux 上的 Python cmd 不会自动完成特殊字符或符号

标签 python linux readline tab-completion python-cmd

-+ 等字符在 Python 的基于 readline 的 cmd 模块中的解析方式与字母数字 ASCII 字符不同。这似乎只是 linux 的特定问题,因为它似乎在 Mac OS 上按预期工作。

示例代码

import cmd

class Test(cmd.Cmd):
    def do_abc(self, line):
        print line 
    def complete_abc(self, text, line, begidx, endidx):
        return [i for i in ['-xxx', '-yyy', '-zzz'] if i.startswith(text)]

try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    if 'libedit' in readline.__doc__:
        readline.parse_and_bind("bind ^I rl_complete")
    else:
        readline.parse_and_bind("tab: complete")

Test().cmdloop()

Mac OS 上的预期行为

(Cmd) abc <TAB>
abc  
(Cmd) abc -<TAB>
-xxx  -yyy  -zzz  
(Cmd) abc -x<TAB>
(Cmd) abc -xxx

Linux 上的不正确行为

(Cmd) abc <TAB>
abc  
(Cmd) abc -x<TAB>
 <Nothing>
(Cmd) abc -<TAB> 
(Cmd) abc --<TAB>
(Cmd) abc ---<TAB>
(Cmd) abc ----

我尝试将 - 添加到 cmd.Cmd.identchars,但没有帮助。

cmd.Cmd.identchars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'

为什么 Mac OS 和 Linux 之间的 readline 解析存在差异,即使两者都使用 GNU readline:

Mac 操作系统:

>>> readline.__doc__
'Importing this module enables command line editing using GNU readline.'

Linux:

>>> readline.__doc__
'Importing this module enables command line editing using GNU readline.'

谢谢!

最佳答案

在 linux 上,readline 模块将 - 视为制表符完成的定界符。也就是说,在遇到 - 之后,将尝试重新完成。

您的问题的解决方案是从 readline 用作分隔符的字符集中删除 -

例如。

old_delims = readline.get_completer_delims()
readline.set_completer_delims(old_delims.replace('-', ''))

关于Linux 上的 Python cmd 不会自动完成特殊字符或符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27288340/

相关文章:

python - 如何缩小现实生活图像中的大差距?

linux - install.packages ("devtools") 在 R 3.0.2 上在 Ubuntu 14.04 中失败

linux - 如何获取日期字段并对其进行操作

python - 带有 python 2.7 的 Windows 上的 Readline 功能

ruby - irb历史记录保存但未加载

c - 对 'readline' - C 的 undefined reference

javascript - 对于 Python,获取 WebDriverException : Message: u'[JavaScript Error: "e is null"

python - 如何对文本文件执行二进制搜索以在 python 中搜索关键字?

linux - 我如何在 gdb 中查看 STL 列表值

python - 如何从 python 中打开和关闭 PDF 文件