完成时转义字符的 jline 问题

jline problems with escape character in completion

我正在 java 中使用 jline version3 开发一个项目,但在完成时,我需要有“else if”,但它会将 \ 作为转义字符转义 space 而我不'有任何转义字符我也试过 null 而不是 char[] 但它因空指针异常而崩溃

另外,我检查了https://github.com/jline/jline3/issues/173

错误是:

        at org.jline.reader.impl.DefaultParser$ArgumentList.escape(DefaultParser.java:383)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.update(LineReaderImpl.java:4403)
        at org.jline.reader.impl.LineReaderImpl$MenuSupport.next(LineReaderImpl.java:4317)
        at org.jline.reader.impl.LineReaderImpl.doMenu(LineReaderImpl.java:4471)
        at org.jline.reader.impl.LineReaderImpl.doList(LineReaderImpl.java:4614)
        at org.jline.reader.impl.LineReaderImpl.doComplete(LineReaderImpl.java:4149)
        at org.jline.reader.impl.LineReaderImpl.expandOrComplete(LineReaderImpl.java:3875)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:585)
        at org.jline.reader.impl.LineReaderImpl.readLine(LineReaderImpl.java:443)
        at REPLReader.readLine(REPLReader.java:99)
        at Compiler.getInputCode(Compiler.java:24)
        at CompilerMain.lex(CompilerMain.java:75)
        at CompilerMain.compile(CompilerMain.java:15)
        at Main.main(Main.java:59)

我假设您正在使用 JLine 内置完成器 StringsCompleterDefaultParser

如果您有具有 space 个字符的完成候选,则

  1. space 个字符被转义如果 defaultParser.escapeChars != null
  2. 如果 defaultParser.escapeChars == null.
  3. 将引用完成候选

这就是 StringsCompleter 的工作方式。 请参阅 StringsCompleterTest.java 方法:escapeCharsNull()escapeChars()

NPE 已在提交 68a9c1f 中修复。您应该使用 JLine 3.10 或更高版本。