反馈模式

反馈模式确定JShell中的提示,反馈和其他交互。 提供具有不同反馈级别的预定义模式。 可以根据需要创建自定义模式。

设置反馈模式

反馈模式定义了与JShell交互时使用的提示和反馈。 为方便起见,提供了预定义模式。 您可以根据需要创建自定义模式.

无法修改预定义模式,但可以将它们用作自定义模式的基础。 预定义模式按详细程度的降序排列是verbose(详细), normal(一般), concise(简洁), 和 silent(静默).

下表显示了预定义模式的差异。

模式 片段值 声明 更新 命令 提示
verbose name ==> value (和描述) Yes Yes Yes \njshell>
normal name ==> value Yes No Yes \njshell>
concise name ==> value (仅在异常时显示) No No No jshell>
silent No No No No ->
  • Mode列指示正在描述的模式
  • “值片段”列指示显示具有值的片段的内容,例如表达式,赋值和变量声明。
  • 声明列指示是否为声明或方法,类,枚举,接口和注解接口提供反馈。
  • “更新”列指示是否显示除当前代码段之外的更改。
  • “命令”列指示命令是否提供指示成功的反馈。
  • “提示”列指示使用的提示。

默认反馈模式是normal的。 通过设置命令行选项或使用/set feedback命令更改反馈模式,如以下示例所示:

jshell> /set feedback verbose 
|  Feedback mode: verbose

jshell> 2 + 2
$1 ==> 4
|  created scratch variable $1 : int

jshell> /set feedback silent 
-> 2 + 2
-> /set feedback normal 
|  Feedback mode: normal

jshell> 2 + 2
$3 ==> 4

jshell> /set feedback concise 
jshell> 2 + 2
$4 ==> 4
jshell>

请注意,当设置normal或verbose时,命令反馈set显示,但concise和silent模式则不会。 另请注意,当模式设置为silent时,表达式2 + 2的反馈会跟其他三种反馈模式的形式不同。

要查看当前和可用的反馈模式,请使用/set feedback命令,不带选项。 请注意,当前模式显示为设置它的命令:

jshell> /set feedback 
|  /set feedback verbose
|  
|  Available feedback modes:
|     concise
|     normal
|     silent
|     verbose

定义一个反馈模式

通过自定义反馈模式,您可以定义要查看的提示以及要为JShell中输入的不同元素接收的反馈。

反馈模式具有以下设置:

  • Prompts(提示):Regular和continue
  • Truncation(截断): 显示的最大值
  • Format: 提供的反馈格式

无法更改预定义模式,但您可以轻松创建现有模式的副本,如以下示例所示:

jshell> /set mode mine normal -command
|  Created new feedback mode: mine

新模式mine是正常模式的副本。 -command选项表示您需要命令反馈。 如果您不希望命令描述发生的操作,请使用-quiet而不是-command。

设置Prompts

与所有/set命令一样,使用/set prompt命令来显示当前设置:

jshell> /set prompt normal
|  /set prompt normal "\njshell> " "   ...> "

在为前一个示例提供的反馈中,第一个字符串是常规提示,第二个字符串是在代码段扩展到多行时使用的延续提示。 以下示例显示如何切换到新模式以尝试它:

jshell> /set prompt mine "\nmy mode: "  ".......: "

jshell> /set feedback mine
|  Feedback mode: mine

my mode: class C {
.......:    int x;
.......: }
|  created class C

my mode:

提示字符串可以包含%s,它将替换为下一个代码段ID。 但是,如果输入命令或代码段导致错误,则可能不会为用户在提示符处输入的值分配该ID。

所有设置都有当前会话的持续时间; 它们不会被/reset命令重置。 如果您希望将设置作为将来会话的默认设置,请使用-retain选项保留它们。 以下示例显示如何跨会话保持自定义模式:

my mode: /set mode mine -retain

my mode: /set feedback mine -retain
|  Feedback mode: mine

my mode: /exit 
|  Goodbye
% jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro

my mode:

设置Truncation

如果值太长,则在显示时会截断它们。 使用/ et truncation命令设置为值显示的最大长度。 如果未使用该命令输入任何设置,则显示当前设置。 以下示例显示从normal模式继承的设置:

my mode: /set truncation mine 
|  /set truncation mine 80 
|  /set truncation mine 1000 expression,varvalue

my mode: String big = IntStream.range(0,1200).mapToObj(n -> "" + (char) ('a' + n % 26)).collect(Collectors.joining())
big ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv ... fghijklmnopqrstuvwxyzabcd"

截断设置生效的条件由截断长度后输入的可选选择器确定。 定义了两种类型的选择器(在线帮助中称为选择器类型):

  • 案例选择器指示其值显示的片段类型。
  • 操作选择器描述了代码段发生的情况。

输入/help/set truncation以获取有关选择器的详细信息。

上一个示例中显示的设置意味着值被截断为80个字符,除非该值是表达式(表达式大小写选择器)的值或变量的值,如通过仅输入变量名称(varvalue)明确请求的设置。

以下示例将默认截断设置为100,并且仅在显式请求时显示长值:

my mode: /set truncation mine 100

my mode: /set truncation mine 300 varvalue

my mode: big + big
$2 ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghi ... yzabcdefghijklmnopqrstuvwxyzabcd"

my mode: big
big ==> "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu
vwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl ... jklmnopq
rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd"

my mode: /set mode mine -retain

要保留新设置,请保留更改,如示例末尾所示。

设置Formats

代码段输出是您可以自定义的另一个设置。 在从normal模式继承的格式中,import不提供任何反馈,并且不显示值的类型:

my mode: import java.beans.*

my mode: Locale.CANADA.getUnicodeLocaleAttributes()
$5 ==> []

使用/set format命令设置片段输出的格式。 使用模式名称输入此项,无需设置即可查看当前格式设置:

my mode: /set format mine

/help/set format命令提供了有关此命令的帮助。 您可能希望将其用作本节其余部分的参考,其中提到了在定义format时使用的字段。

显示的主要反馈由display字段确定。 可以定义其他字段以帮助定义display字段。 silent之外的预定义模式定义了其中几个字段,如/help/set format命令的输出中所示。 这些字段在示例模式中继承。 导入的display定义如以下示例所示:

my mode: /set format mine display "{pre}added import {name}{post}" import-added

my mode: /set format mine display "{pre}re-added import {name}{post}" import-modified,replaced

name字段预定义为代码段的名称。 以下示例显示现在为import提供反馈:

my mode: import java.beans.*
|  re-added import java.beans.*

显示定义中使用的pre和post字段是每行反馈输出的前缀和后缀字符。 以下示例将pre更改为空字符串:

my mode: /set format mine pre ""

my mode: void m() {}
created method m()

my mode: import java.beans.*
re-added import java.beans.*

my mode: /set truncation mine 
/set truncation mine 100
/set truncation mine 300 varvalue

对前缀字符的更改会影响所有反馈,包括命令反馈。

要在display值时显示类型,请更改由预定义模式定义的result字段:

my mode: /set format mine result "{type} {name} = {value}{post}" added,modified,replaced-primary-ok

my mode: Locale.CANADA.getUnicodeLocaleAttributes()
Set<String> $11 = []

my mode: 2 + 2
int $12 = 4

在输入的片段(主要)上只有当它是new的或updated(added,modified,replaced),并且没有错误(ok)时,此更改才会使result非空。

要永久删除保留模式,请将-retain选项与-delete选项一起使用:

my mode: /set feedback verbose -retain
|  Feedback mode: verbose

jshell> /set mode mine -delete -retain

results matching ""

    No results matching ""