如何在IntelliJ中禁止指定Kotlin代码块被自动格式化?
解决方案
方案一:启用Formatter标记控制(最推荐,完全匹配需求)
你之前使用//@formatter:off///@formatter:on不生效,是因为IntelliJ默认没有开启注释格式化控制开关,按以下步骤配置即可:
- 打开IntelliJ设置:Windows/Linux按
Ctrl+Alt+S,macOS按Cmd+,,或点击菜单栏File > Settings - 依次进入
Editor > Code Style路径 - 在右侧的Formatter Control区域,勾选
Enable formatter markers in comments - 确认默认的格式化关闭标记为
@formatter:off、开启标记为@formatter:on,也可根据自身习惯自定义
配置完成后,在你需要保留排版的代码块前后加上对应注释即可:
//@formatter:off fun generateAllCards(): Array<Card> { return arrayOf( Card(FORMAT_1, COLOUR_BLACK, TYPE_RUN, 1, POINTS_1, arrayOf(RunAbility(arrayOf(TRIGGER_RAN_BLUE), EFFECT_CAN_FLY_10_SEC))), Card(FORMAT_2, COLOUR_YELLOW, TYPE_DRIVE, 3, POINTS_3, arrayOf(DriveAbility(arrayOf(TRIGGER_DROVE_RED, TRIGGER_DROVE_BLUE), arrayOf(GET_ONE_VICTORY_TOKEN)))), ... ) } //@formatter:on
该配置仅会保护两个标记之间的代码不被格式化,文件其余区域的格式化功能完全不受影响。
方案二:调整Kotlin格式化规则(不需要禁用格式化也能保留排版)
如果你只是不希望函数构造参数被自动拆分换行,可以单独调整Kotlin的格式化规则,无需局部禁用格式化:
- 进入设置
Editor > Code Style > Kotlin,切换到Wrapping and Braces标签页 - 找到
Function call arguments选项,将换行策略设置为Do not wrap - 同时勾选
Keep when reformatting分类下的Line breaks选项,取消勾选Ensure right margin is not exceeded
调整后IntelliJ格式化时会保留你手动写的单行参数排版,不会自动拆分为多行。
内容的提问来源于stack exchange,提问作者gotube
相关产品推荐
相关产品推荐

