diff --git a/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java b/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java index e0477b09a..eb63a64ce 100644 --- a/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java +++ b/core/src/main/java/com/taobao/arthas/core/shell/cli/CompletionUtils.java @@ -99,7 +99,12 @@ public class CompletionUtils { } else { String commonPrefix = CompletionUtils.findLongestCommonPrefix(candidates); if (commonPrefix.length() > 0) { - completion.complete(commonPrefix, false); + if (commonPrefix.length() == prefix.length()) { + completion.complete(candidates); + } else { + completion.complete(commonPrefix.substring(prefix.length(), commonPrefix.length()), false); + } + } else { completion.complete(candidates); } diff --git a/core/src/main/java/com/taobao/arthas/core/shell/term/impl/CompletionAdaptor.java b/core/src/main/java/com/taobao/arthas/core/shell/term/impl/CompletionAdaptor.java index 17380f05c..b0fcb27b0 100644 --- a/core/src/main/java/com/taobao/arthas/core/shell/term/impl/CompletionAdaptor.java +++ b/core/src/main/java/com/taobao/arthas/core/shell/term/impl/CompletionAdaptor.java @@ -49,9 +49,11 @@ class CompletionAdaptor implements Completion { CliToken lastToken = tokens.get(tokens.size() - 1); if (!commonPrefix.equals(lastToken.value())) { // only complete if the common prefix is longer than the last token - String strToComplete = commonPrefix.substring(lastToken.value().length()); - completion.complete(io.termd.core.util.Helper.toCodePoints(strToComplete), false); - return; + if (commonPrefix.length() > lastToken.value().length()) { + String strToComplete = commonPrefix.substring(lastToken.value().length()); + completion.complete(io.termd.core.util.Helper.toCodePoints(strToComplete), false); + return; + } } } }