如何禁用VS Code Java扩展自动补全时自动添加左括号?
关于VSCode Red Hat Java扩展自动补全添加括号的配置问题
在VSCode中使用Red Hat Java语言支持扩展时,输入new ArrayList(并触发自动补全后,会得到new ArrayList<>((,扩展自动添加的括号严重干扰正常输入流程。此外调用静态方法时,补全还会自动添加括号和分号(比如输入f触发补全foo()后,会得到foo();_),这种行为和Python、C等语言的补全逻辑不一致,希望禁用自动添加括号/分号的特性,同时保留基础的自动补全功能。
问题场景细节
典型Java补全场景
以ArrayList为例,补全操作流程如下(下划线_代表光标位置):
| 输入按键 | 插入文本 |
|---|---|
n | n_ |
e | ne_ |
w | new_ |
<space> | new _ |
A | new A_ |
r | new Ar_ |
r | new Arr_ |
a | new Arra_ |
y | new Array_ |
L | new ArrayL_ |
<tab> | new ArrayList<>_() |
( | new ArrayList<>((_) |
可见补全后扩展自动添加了括号,导致手动输入(时出现重复括号。
Python/C语言补全对比场景
以Python的ASTNode为例,补全逻辑与Java不同:
| 输入按键 | 插入文本 |
|---|---|
A | A_ |
S | AS_ |
T | AST_ |
N | ASTN_ |
<tab> | ASTNode_ |
( | ASTNode(_ |
补全后仅插入类名,不会自动添加括号,需手动输入(来开启参数输入。
构造函数补全的额外差异
针对含参构造函数Class1和无参构造函数Class0,补全后的光标位置存在不一致:
- 补全
Class1时,光标会定位到参数占位符位置 - 补全
Class0时,光标会定位到括号外
配置解决方案
可以通过VSCode的设置调整Red Hat Java扩展的补全行为,实现和Python/C一致的逻辑:
- 打开VSCode设置(快捷键
Ctrl+,),切换到JSON格式(点击右上角的{}图标) - 添加以下配置项:
// 禁用方法/构造函数参数自动猜测(即不自动添加括号和参数占位符) "java.completion.guessMethodArguments": false, // 禁用代码片段式补全(避免自动添加分号、括号等额外内容) "java.completion.insertSnippet.enabled": false
如果仅需针对构造函数调整,可单独添加:
"java.completion.constructorGuessArguments": false
配置完成后,Java的自动补全行为会与Python/C保持一致:补全类名或方法名后仅插入名称,不会自动添加括号、分号,需手动输入(来触发参数提示。
内容的提问来源于stack exchange,提问作者Regis May
相关产品推荐
相关产品推荐

