编辑

JShell支持在jshell提示符下编辑输入并在您选择的外部编辑器中进行编辑。

通过Shell编辑,您可以在输入时编辑片段和命令,以及检索和更改以前输入的片段和命令。 外部编辑器提供了另一种编辑和创建代码段的方法,使得在多行代码段时更容易。

编辑shell

在命令提示符下编辑输入可以轻松更正输入并检索和修改以前输入的命令和片段。

JShell中的Shell编辑是基于JLine2构建的,它在功能上类似于Emacs模式下的BSD editline和GNU readline。 请参阅JLine2用户信息GNU Readline文档

输入行导航

jshell支持编辑当前行,或通过Jshell history访问历史记录

对于输入行导航,Ctrl键和Meta键用于组合键。 如果您的键盘没有Meta键,则通常会映射Alt键以提供Meta键功能。

对于一行内的基本导航,请使用向右和向左箭头键或向后按Ctrl + B,向前按Ctrl + F. 要在历史记录中的行之间导航,请使用向上和向下箭头键。 按下向上箭头一次用前一个命令或片段行替换当前行。 再次按向上箭头可以转到之前的行。 历史记录包含命令和代码段行。 如果代码段有多行,则向上和向下箭头会浏览代码段的每一行。

下表列出了使用的键和导航输入行所采取的操作。

动作
Return(回车) 进入当前行
<-(左箭头) 向后移动一个字符
->(右箭头) 向前移动一个字符
向上箭头 向上移动一行,向后移动历史
向下箭头 向下移动一行,向前移动历史
Ctrl+A 移动到行的开头
Ctrl+E 移动到行的结尾
Meta+B 向后移动一个单词
Meta+F 向前移动一个单词

历史导航

JShell会话中保留了片段和命令的历史记录。 通过此历史记录,您可以访问在当前和以前会话中输入的项目。

要重新输入或编辑先前的输入,请使用向上,向下,向左和向右箭头导航历史记录。 输入的文本将插入光标处。 Delete键用于删除文本。 按Enter键重新输入历史记录行,是否已修改。

向上和向下箭头键一次向前和向后移动历史记录,例如:

jshell> class C {
   ...>    int x;
   ...> }
|  created class                                                                                           
jshell> /list

   1 : class C 
         int x;
       }

jshell> <向上箭>

向上箭头键显示以下行:

jshell> /list

再次按向上箭头显示类定义的最后一行:

jshell> }

按向下箭头返回/ list命令。 按Enter执行:

jshell> /list

   1 : class C {
         int x;
       }

片段按Ctrl +向上箭头向上移动。 对于单行片段,Ctrl +向上箭头的行为与向上箭头相同。 对于多行片段,例如C类,Ctrl +向上箭头会跳过其他行并转到片段顶部。

修改输入行

从历史记录中检索的输入行可以根据需要进行修改并重新输入,这样您就不必重新键入一行就可以进行小的更改。

只需输入文本即可在当前光标位置添加文本。

下表列出了使用的键以及修改输入行所采取的操作。

动作
Delete 删除光标处或之后的字符,具体取决于操作系统。
Backspace 删除光标前的字符。
Ctrl+K 删除光标到行尾的文本。
Meta+D 删除光标到单词末尾的文本。
Ctrl+W 删除光标中的文本到上一个空白区域。
Ctrl+Y 将最近删除的文本粘贴到该行中。
Meta+Y 在Ctrl + Y之后,Meta + Y循环显示先前删除的文本。

搜索等功能

搜索历史记录是JShell的一项功能,可以更轻松地找到所需的行,而无需一次查看历史记录。

要开始搜索,请按Ctrl-R。 在提示符下,输入搜索字符串。 搜索从最近的条目向后进行,包括以前的JShell会话。 以下示例显示按Ctrl-R后显示的提示:

jshell> <Ctrl+R>
((reverse-i-search)`':

根据历史导航中的示例,输入class会更改显示以显示文本中含有class的最新行:

(reverse-i-search)`class': class C {

搜索是增量搜索,因此仅使用第一个字符c检索此行。 您可以反复按Ctrl + R继续在历史记录中搜索。 Ctrl + S将搜索向前移动到当前。

您可以通过输入Ctrl-x(然后输入文本,最后输入Ctrl-x)来定义键盘宏。 要使用宏,请输入Ctrl + x e。

下表显示了搜索和创建宏的组合键。

动作
Ctrl+R 向后搜索历史记录
Ctrl+S 向前搜索历史记录
Ctrl+X ( 启动宏定义
Ctrl+X ) 结束宏定义
Ctrl+X e 执行一个宏

外部编辑

在命令提示符下编辑的另一种方法是使用外部编辑器。 此编辑器可用于编辑和创建代码段,对多行代码段特别有用。 您可以配置JShell以使用您选择的编辑器。

要在编辑器中一次编辑所有现有代码段,请使用/edit而不使用任何选项。 要在编辑器中编辑特定代码段,请使用带有代码段名称或ID的/edit命令。 使用/list命令获取代码段ID。 以下示例打开一个编辑器,以编辑名为volume的代码段,该代码段在Forward References中定义:

jshell> /edit volume

您还可以在编辑器中输入新的代码段。 在编辑器中保存时,任何已更改的片段或新片段都会输入到JShell会话中。 来自片段的反馈显示在JShell窗口中,但是,没有显示JShell提示。 在编辑器关闭之前,您无法在JShell窗口中输入命令或片段。

如果未指定编辑器,则按顺序检查以下环境变量:JSHELLEDITOR,VISUAL和EDITOR。 如果没有设置,则使用简单的默认编辑器。 要设置JShell以打开您选择的编辑器,请使用/set editor命令。 /set editor命令的参数是启动要使用的外部编辑器所需的命令。 以下示例将kwrite设置为编辑器,并使用所有现有代码段打开编辑器:

jshell> /set editor kwrite
|  Editor set to: kwrite

jshell> /edit

在外部编辑器窗口中定义x并保存更改会在JShell窗口中生成以下输出:

|  created variable x of type int with initial value 6

关闭外部编辑器将恢复JShell提示。

jshell>

results matching ""

    No results matching ""