iPython不读取〜/ .inputrc

问题描述 投票:4回答:2

我正在使用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时,这些映射根本不起作用。我是OS X 10.9 Mavericks。我没有看到任何警告使用libedit而不是readline。有任何想法吗?

python macos ipython readline
2个回答
3
投票

来自IPython Documentation

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

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

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

因此,您必须在配置文件中设置readline_parse_and_bind(默认情况下,这是在/path/to/ipython/dir/profile_default/ipython_config。您可以使用ipython profile create生成默认配置示例。


1
投票

我找到的方法是创建一个启用了vi-keys选项的新IPython配置文件。

将键绑定模式设置为vi:

生成空白配置文件:

ipython profile create [profile-name]

运行该命令应显示生成的配置文件的路径,即python(.py)文件。

来自:Source: Options Reference

从5.0开始,IPython使用prompt_toolkit代替readline,因此它可以识别以':'结尾的行并缩进下一行,同时也可以在'raise'或'return'后自动缩进,并支持真正的多行编辑以及版本期间的句法着色。

此功能不再使用readline库,因此它不会遵循〜/ .inputrc配置(或INPUTRC环境变量指向的任何文件)。

特别是如果要将输入模式更改为vi,则需要设置IPython的TerminalInteractiveShell.editing_mode配置选项。 (强调我的)

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

c = get_config()
c.TerminalInteractiveShell.editing_mode = 'vi'

使用特定的配置文件启动IPython:

Source: Manging Profiles

在终端上,键入以下命令(不要按字面意思键入大括号,它们只是配置文件实际名称的占位符)。

$> ipython --profile={profile-name}

© www.soinside.com 2019 - 2024. All rights reserved.