新版本的IPython不再依赖于readline
,而是使用纯Python库prompt-toolkit
,解决Apple和Windows上的维护问题。系统
一项新功能是能够编辑多行代码块,使用光标键在代码块中自由移动 - 这种功能至少对我来说是一个问题:因为 ret 在你的代码中插入一个新行,将整个块传递给解释器,你必须使用快捷键 alt + ret 或者可能是不太方便的键序列 esc 后跟 ret 。
我说,这是一个问题,因为我选择的终端模拟器是XTerm,并且在许多Linux发行版中,快捷方式 alt + ret 未传递给应用程序,但它直接由运行IPython的XTerm使用,切换所述终端的屏幕丰满度(@ThomasDickey,xterm' s mantainer和共同作者指出,默认情况下,xterm不会&# 39;即使在解除全屏动作的情况下,也要小心在Enter上发送修改符位。
出于这个原因,我想至少修改这个特定的IPython密钥绑定。
我已经找到了适用于新版5.0版本的以前版本的基于readline
的IPython版本的说明(类型)。
我需要的是指示,让我在IPython的用户文档中找到我可以绑定的可能操作的名称,与操作绑定的快捷方式的名称以及要遵循的过程配置新的密钥绑定。
如果没有这种类型的规范答案,我可能对完成此特定键绑定的配方感到满意,条件是配方仍可在IPython 6.0中使用
答案 0 :(得分:4)
您可以更改xterm的配置。
xterm是可配置的(并记录在案)。在xterm手册中,Default Key Bindings部分显示了此密钥的默认绑定:
Alt <Key>Return:fullscreen() \n\
您可以通过多种方式抑制该绑定:
omitTranslation
资源来取消功能fullscreen
资源设置为 never
然而,只是抑制它不会使它发送一些有趣的东西(xterm忽略 Enter 的修饰符)。设置 translation
资源有效,例如,在$HOME/.Xdefaults
文件中:
*VT100*translations: #override \n\
Alt <Key>Return: string("\033[27;3;13~")
答案 1 :(得分:2)
ctrl + j 或 ctrl + m 键盘快捷键正在验证该条目。
答案 2 :(得分:0)
使用prompt_toolkit时,在配置中修改键盘快捷键是不可能的;虽然从源代码安装IPython非常容易。如果查看文件IPython/terminal/shortcuts.py
,您会看到它包含各种逻辑;特别是你会发现:
# Ctrl+J == Enter, seemingly
registry.add_binding(Keys.ControlJ,
filter=(HasFocus(DEFAULT_BUFFER)
& ~HasSelection()
& insert_mode
))(newline_or_execute_outer(shell))
将CtrlJ(输入)绑定到负责添加新行的函数newline_or_execute_outer
;它稍后在文件中定义。特别是如果你在代码块的末尾按两次输入,它应该执行块而不需要使用任何其他快捷方式。
剥离添加新行的逻辑:
def execute_outer(shell):
def execute(event):
"""When the user presses return, insert a newline or execute the code."""
b = event.current_buffer
# some logic to also dismiss the completer
b.accept_action.validate_and_handle(event.cli, b)
return execute
将它绑在20行左右:
registry.add_binding(Keys.ControlE,
filter=(HasFocus(DEFAULT_BUFFER)
& ~HasSelection()
& insert_mode
))(execute_outer(shell))
享受吧。如果您对文档不满意我们欢迎帮助;例如,在那里获取答案的要点并将其贡献回来。当我们在发行说明中说到时,阅读严厉的评论有点伤害:
New terminal interface
The overhaul of the terminal interface will probably cause a range of minor
issues for existing users. This is inevitable for such a significant
change, and we’ve done our best to minimise these issues. Some changes that
we’re aware of, with suggestions on how to handle them:
IPython no longer uses readline configuration (~/.inputrc). We hope that
the functionality you want (e.g. vi input mode) will be available by
configuring IPython directly (see Terminal IPython options). If something’s
missing, please file an issue.
...
帮助实际改进IPython以使用动作名称进行可配置的键绑定也很受欢迎,因此您将能够回答您自己的问题。