iPython不读取~/.inputrc

iPython不读取~/.inputrc,python,macos,ipython,readline,Python,Macos,Ipython,Readline,我正在使用iPython。文档说我应该能够使用inputrc重新映射readline库的键。以下是我的inputrc中的内容: set editing-mode emacs set keymap emacs Meta-h: backward-word Meta-s: forward-word Control-h: backward-char Control-s: forward-char Control-n: previous-history Control-t: next-history Co

我正在使用iPython。文档说我应该能够使用inputrc重新映射readline库的键。以下是我的inputrc中的内容:

set editing-mode emacs
set keymap emacs
Meta-h: backward-word
Meta-s: forward-word
Control-h: backward-char
Control-s: forward-char
Control-n: previous-history
Control-t: next-history
Control-p: yank
Meta-p: yank-pop
当我加载iPython时,这些映射根本不起作用。我在OSX10.9小牛上。我没有看到任何关于正在使用libedit而不是readline的警告。有什么想法吗?

来自:

所有这些特性都基于GNU readline库,它有一个非常可定制的界面。通常,readline是通过定义库行为的文件配置的;有关此语法的详细信息,请参阅系统或Internet上提供的readline文档。IPython不直接读取此文件(如果存在),但它支持通过简单接口将有效选项传递给readline。简而言之,您可以通过在配置文件中设置以下选项来自定义readline(请注意,这些选项不能在命令行中指定):

readline_parse_和_bind:它保存通过readline.parse_和_bind()命令执行的字符串列表。这类有效命令的语法可以通过阅读GNU readline库的文档找到,因为这些命令是readline在其配置文件中接受的类型

readline_remove_delims:从readline使用的默认单词分隔符列表中删除的字符串,以便对包含它们的字符串执行补全。除非您知道自己在做什么,否则不要更改默认值


因此,您必须在配置文件中设置
readline\u parse\u和
(默认情况下,这在
/path/to/ipython/dir/profile\u default/ipython\u config
中)。您可以使用
ipython profile create
生成一个示例的默认配置。我发现的方法是使用 vi键选项已启用

将密钥绑定模式设置为vi: 生成空白配置文件:

ipython profile create [profile-name]
运行该命令应显示生成的配置文件的路径, 哪些是python(.py)文件

发件人:

从5.0开始,IPython使用prompt_toolkit代替readline, 因此,它可以识别以“:”结尾的行,并缩进下一行, 同时在“提升”或“返回”后自动取消缩进,以及 支持真正的多行编辑以及语法着色 在编辑期间

此功能不再使用readline库,因此它将 不尊重您的~/.inputrc配置(或您的任何文件) INPUTRC环境变量指向)

特别是如果您想将输入模式更改为vi,您将 需要设置
TerminalInteractiveShell.editing_模式
配置 IPython的选件。

(强调矿山)

因此,导航到
ipython_config.py
文件,并确保 其中包含以下行:

c = get_config()
c.TerminalInteractiveShell.editing_mode = 'vi'
使用特定配置文件启动IPython:

在端子上,键入以下命令(不要键入大括号 从字面上说,它们只是实际名称的占位符 个人资料)


$>ipython--profile={profile name}

也许可以从Emacs内部调用IPython?应该有办法设置这些键。你能说得更具体一点吗?我无法用这种方式解决问题。@AlfredM。我三年前回答了这个问题,此后IPython有了很大的发展,所以我对我最初的答案不再有信心。我将很快发布更新。