我正在使用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。有任何想法吗?
所有这些功能都基于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
生成默认配置示例。
我找到的方法是创建一个启用了vi-keys选项的新IPython配置文件。
生成空白配置文件:
ipython profile create [profile-name]
运行该命令应显示生成的配置文件的路径,即python(.py)文件。
从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 --profile={profile-name}