Skip to content

UserGuide zh CN.md

POP edited this page Oct 11, 2026 · 4 revisions

NikoTools 中文使用指南

语言选择 · English

本指南对应 0.1.4,依据当前插件实现编写。NikoTools 将常用脚本保存为列表,执行前生成参数表单,并在 IDE 原生 Run 控制台显示结果。脚本库与环境路径属于 IDE 用户级配置,跨项目共享;执行时的工作目录、参数文件选择和 Android 设备来自当前项目窗口。

目录

  1. 安装与环境准备
  2. 第一次运行
  3. 脚本管理与模板
  4. 执行类型
  5. 参数模板语法
  6. 执行配置
  7. 参数元数据
  8. Android 设备
  9. 运行输出与停止
  10. 分享、导入与迁移
  11. 常用示例
  12. 排错与常见问题
  13. 数据位置与开发入口

安装与环境准备

IDE 与安装包

最低平台版本为 242(IntelliJ IDEA 2024.2 系列),字节码要求 Java 21;使用符合要求的 IDE 自带运行时即可,不需要为了使用插件单独配置开发 JDK。项目以 IDEA 2024.2.6 为构建基线,面向 Android Studio、IntelliJ IDEA、PyCharm 等 IntelliJ Platform IDE。不同产品的版本号不完全相同,应以平台构建号和实际兼容性为准。

  1. 获取项目构建的 NikoTools-0.1.4.zip;本地构建方法见项目 README。
  2. 打开 IDE 的 Settings / Preferences → Plugins → 齿轮 → Install Plugin from Disk,选择 ZIP。
  3. 按 IDE 提示重启,打开项目,通过 Tools → NikoTools 或侧边 NikoTools 图标打开工具窗口。
  4. 插件发布到 Marketplace 后,也可通过对应 Marketplace 页面安装。项目中的发布配置并不表示已经上架。

外部工具

插件不附带 Python、PowerShell、Bash、cmd、adb 或 scrcpy。只需准备脚本实际使用的工具:Python 脚本需要 Python,Bash 脚本需要 Bash,普通脚本不需要 Android 设备或 adb。

打开 Settings → NikoTools,或工具窗口顶部的“环境路径”,可填写以下可执行文件的绝对路径:

设置项 用途
python Python 解释器;虚拟环境可选择其 Python 可执行文件
powershell PowerShell,通常是 pwsh 或 Windows 的 powershell.exe
bash Bash;Windows 默认使用已安装的 Git Bash
cmd Windows 批处理解释器 cmd.exe
adb Android 调试工具
scrcpy Android 屏幕镜像工具

留空时显示自动解析到的默认路径(灰色提示及下方完整路径);未检测到时明确提示。显示默认路径不会保存为手动配置。默认使用 IDE 进程继承的 PATH;Windows 的 Bash 优先使用 PATH 对应的 Git 安装,并检测常见的系统与用户 Git 安装目录。其他系统的 Bash 使用 PATH。脚本级解释器路径优先于全局设置,全局设置优先于默认环境解析。显式配置的路径无效时会报错,不自动回退。修改系统 PATH 后通常需要重启 IDE;终端临时激活的虚拟环境不会自动传递给插件。

第一次运行

以 Python 为例,先确保 IDE 能找到 Python,或在“环境路径”中指定它。

  1. 打开 NikoTools,点击顶部“新建脚本”图标。

  2. 名称填写 问候,执行类型选择 python。

  3. 正文填写:

    import sys
    print("Hello, " + sys.argv[1])
  4. 展开“执行配置”,在“参数数组 JSON”中填写:

    ["${姓名:World}"]
  5. 其余配置保持默认并点击“保存”。

  6. 双击列表中的脚本,在“运行参数”弹窗输入姓名,点击“执行”。“执行后保留弹窗”默认不勾选,执行后关闭;勾选后保留弹窗,可修改参数再次执行。点击“关闭”结束填写。弹窗不阻塞 IDE 操作,同一项目中重复打开同一脚本会聚焦已有弹窗,运行期间不会重复启动脚本。

  7. 在 IDE 的 Run 窗口查看 Hello, World(或你输入的姓名)以及退出码。

这个示例把用户输入作为独立进程参数传递,正文无需拼接输入。没有占位符的脚本直接启动,不显示参数表单。

脚本管理与模板

顶部工具栏包含七个入口,悬停图标可查看名称:

入口 操作
新建脚本 创建名称、说明、执行类型及正文
批量操作 导入目录或导出整个脚本库
导入 从剪贴板读取脚本 JSON
排序 按使用频率、添加顺序或名称排序
环境路径 配置全局解释器和工具路径
帮助 直接打开“脚本模板与参数语法”弹窗
复制 SKILL 将完整的脚本参数转换技能复制到剪贴板,供 AI 编写插件脚本使用

列表展示名称、类型、说明。双击脚本执行;右键脚本行可“执行脚本”“编辑脚本”“分享脚本”“删除脚本”。选中后也可按 Shift+F10 或菜单键打开菜单。选中单个脚本后按 Delete 也可弹出删除确认(macOS 支持 Backspace)。顶部“排序”提供使用频率(高到低)、添加顺序(先添加在前)、名称(忽略大小写升序)三种方式,并持久化选择。使用频率按实际启动次数累计,再次运行计入,取消或启动失败不计入;同频率或同名时保留添加顺序。删除需要确认;右键或双击空白处不会操作脚本。

点击顶部“帮助”或编辑器中的“脚本模板与参数语法”可打开帮助弹窗,采用左右布局,左侧列表选择模板,右侧自动切换语法说明与参考代码,代码下方内嵌参数输入与实时替换结果预览,可分别复制原始代码和预览结果。预览仅查看替换结果,不运行命令。复制后粘贴到脚本正文,调整执行类型及配置再保存。当前没有独立模板库或“保存为模板”入口。内置完整脚本示例为“全部参数类型演示 Bash”,覆盖十种类型、默认值和重复引用;路径 1、2 与令牌 1009 是演示值,示例最后会输出令牌内容。

点击工具栏“复制 SKILL”,可将完整的脚本参数转换技能复制到剪贴板,与业务需求或原脚本一起交给 AI。该技能指导 AI 将运行前的用户输入转换成参数控件和 var 声明,保留脚本语言与业务逻辑;按钮不会自动安装技能。

安装并启用 IDE Terminal 插件后,可在支持的本地终端选中文本,右键选择“新建 NikoTools 自定义脚本”。选区进入编辑器,保存前不会执行。新建脚本默认类型为 powershell;从 Bash/Python 等终端复制内容后应改为对应类型。Terminal 为可选依赖,缺少它不影响脚本列表和执行。

执行类型

类型 正文含义 适合场景
powershell 交给 PowerShell 执行的命令或脚本正文 PowerShell 自动化、Windows 管理命令
python Python 代码,或可识别的现有 Python 脚本文件路径 数据处理、文件工具、多行逻辑
bash 交给 bash -c 执行的命令正文 macOS/Linux 命令、管道与重定向
batch Windows 批处理正文,或现有批处理文件路径 .bat / .cmd 脚本
process 一个可执行文件路径或名称,参数另填 JSON 数组 直接启动 git、adb、scrcpy 等工具

process 在列表中显示为“外部进程”。正文应为 git,参数数组为 ["status", "--short"];不要把 git status --short 全部写进正文。它不经过 Shell,不解析管道、重定向或 Shell 变量,也不需要单独的脚本解释器。只执行一个程序时很合适;需要多条命令或 Shell 语法时选择相应语言。

Python 正文若为一行,且首个解析项指向工作目录下存在的文件,会按脚本文件启动;否则作为 Python 代码写入临时文件。路径含空格时可在正文中加双引号;建议把参数写到参数数组。Bash 和 PowerShell 的文件调用使用各自语言语法,例如 Bash 的 bash "./scripts/task.sh"、PowerShell 的 & './scripts/task.ps1'。批处理文件的参数使用参数数组,不依赖正文路径后的参数。

类型决定运行方式,不代表自动跨平台转换。batch 需要 Windows cmd;Bash、PowerShell、Python 是否可用取决于本机安装。

参数模板语法

插件从正文、参数数组、环境变量值、工作目录识别占位符,保存时生成参数表单。解释器路径不参与模板解析。

写法 含义
${名称} 文本输入,无内联默认值
${名称:默认值} 文本输入及默认值
${名称=默认值} 兼容旧格式的默认值
${模式:开启=1|关闭=0} 下拉项;显示中文标签,替换为 1 或 0,默认第一项
${名称@text:示例} 显式单行文本,不根据内容推断下拉选项
${说明@multiline} 多行文本输入,保留换行
${重试次数@integer:3} 整数输入,执行前校验
${比例@number:0.5} 数字输入,支持整数和小数,执行前校验
${启用缓存@boolean:true} 复选框;true/1 默认勾选,false/0 或无默认值时不勾选;输出 True/False
${模式@choice:开启=1|关闭=0} 显式下拉单选;默认第一项,输出实际值
${环境@radio:开发=dev|生产=prod} 单选按钮组;默认第一项,输出实际值
${访问令牌@secret} 密码输入;支持设为默认值及显示/隐藏密码,帮助预览显示星号
${输入文件@file} 文件选择器
${输出目录@dir} 目录选择器;元数据类型名为 directory
${输入文件@file:./data.txt} 文件输入及内联默认路径

参数名称支持中文、字母、数字和下划线,不包含空格。重复使用同一个参数名称会共用输入;重复定义的类型、默认值或选项冲突会报错。表格中的 \| 仅为 Markdown 转义,实际脚本写 |。

统一格式为 ${名称@类型:默认值或选项};类型省略时保留旧解析规则。@choice 和 @radio 必须提供选项,支持仅一个选项,选项标签不能为空或重复、实际值不能为空。@text 和 @multiline 等显式输入类型将 A=1|B=2 当作普通内容。重复的裸引用 ${名称} 共用已定义的参数类型;显式类型冲突会报错。分享脚本会移除输入默认值并保留类型和选项定义。密码输入支持通过“设为默认值”保存内容,并通过眼睛图标切换显示或隐藏。参数标题不显示必填星号,必填校验仍然有效;单选按钮组横向排列。

var 声明

可用声明将内部变量名与显示标签分开:

var file = ${输入文件路径@file}
var mode = ${模式:开启=1|关闭=0}
var output = ${输出目录@dir}

在后续正文、参数数组等处用 ${file}、${mode}、${output}。声明中的标识符是元数据 id,大括号中的名称是表单标签。推荐使用小写 var,兼容旧写法 Var 和 pVal,声明需单独占一行;声明行执行前会被移除,不是交给 Shell/Python 的变量定义。

路径选择与替换

点击文件或目录输入框的浏览按钮,优先打开输入框中的目录或文件所在目录(相对路径基于当前项目根目录);文件或目录不存在时,逐级向上查找最近可打开的父目录,例如 A/B/C.txt 中 C 不存在时打开 B,B 也不存在时打开 A。路径为空、格式无效或没有可用父目录时,从当前 IDE 窗口打开的项目根目录开始,也可选择项目外路径;无项目根目录时使用 IDE 的默认行为。@file 用于选择文件,@dir 用于选择目录。浏览文件时可进入文件夹是正常导航;手工输入路径目前只检查必填,不检查路径是否存在或确为文件/目录。

模板使用字面替换,不自动转义引号、反斜线、换行或 Shell 特殊字符。把任意文本嵌入脚本正文时,需由脚本作者处理目标语言语法。传递路径或任意文本时优先使用参数数组,每个数组元素是一项参数。

默认值与条件参数

运行弹窗中部分输入提供“设为默认值”,保存到脚本库后供后续使用;布尔、下拉、单选按钮组和设备控件没有此按钮,密码控件支持保存默认值。修改模板内容并保存时,会按模板重新同步默认值、文件/目录类型及下拉选项;未修改模板时保留已保存的自定义默认值。

参数数组支持条件项,例如 "?verbose:--verbose":verbose 值为真时添加 --verbose,否则省略。布尔按 true(不区分大小写)或 1 判断,数字按非零判断,其他类型按非空判断。用于控制条件的参数也需通过模板声明;完整例子见后文。

执行配置

日常创建脚本只需名称、类型、正文;以下设置按需要展开填写。

字段 默认行为 何时设置
工作目录 当前项目根目录 工具需在子目录运行;相对路径以项目根目录解析,目录必须存在
解释器路径 全局设置,然后 IDE 的 PATH 为某脚本指定虚拟环境 Python 或不同解释器;process 时覆盖实际可执行程序
依赖工具 空 运行前检查额外工具,如 adb, scrcpy;当前类型的解释器本身会自动解析
输出编码 utf-8 外部工具实际输出其他编码时,如 GBK;此项控制控制台解码
超时秒数 空,不限 正整数;超时后停止本次进程及可追踪子进程
参数数组 JSON [] 向程序传递独立参数,支持模板和条件项
环境变量 JSON {} 仅对本次子进程覆盖环境变量,支持值中的模板

参数数组示例:

["--input", "${输入文件@file}", "--output", "${输出目录@dir}"]

环境变量示例:

{"APP_MODE": "${运行模式:dev}", "LOG_LEVEL": "info"}

环境变量 JSON 是可选高级功能,普通脚本保持 {} 即可。插件继承 IDE 环境,并注入运行所需工具路径、设备序列号(如有)和输出目录。声明工具依赖后,对应工具目录加入本次 PATH,并提供 POPTOOLS_ADB、POPTOOLS_SCRCPY 等 POPTOOLS_<工具名大写> 路径变量。

插件设置 PYTHONUTF8=1、PYTHONIOENCODING=utf-8、PYTHONUNBUFFERED=1;这些 Python 环境值在自定义环境之后写入。POPTOOLS_OUTPUT_DIR 也由运行器生成。相关变量名称保留 POPTOOLS 前缀以兼容已有脚本。

Bash 参数数组对应 $1、$2 等($0 固定为 poptool-script);Python 对应 sys.argv;批处理对应 %1、%2 等。PowerShell 会将参数附加到 -Command 调用,应按 PowerShell 的调用语义编写正文。

参数元数据

元数据是参数表单的高级配置,默认从模板自动生成,不是创建普通脚本的必填项。十种普通控件可直接使用显式模板类型;需要可选参数、自定义标签或 Android 设备输入时再编辑 JSON 数组。

类型 kind 表单及规则
text 单行文本
multiline 多行文本
integer 整数,提交时校验
number 十进制数,提交时校验
boolean 复选框,替换为 True / False
choice 下拉选择,使用选项的 value;选项建议写在模板中
radio 横向单选按钮组,使用选项的 value
file 文件浏览输入
directory 目录浏览输入
secret 密码输入,遮蔽显示;模板替换仍使用真实文本
android_device 当前 IDE 所选设备序列号,只读

字段说明:id 对应模板内部名称,label 为显示名称,required 控制非空校验,default 是默认值,options 是下拉或单选项的标签和值。兼容字段 placeholder 可保存在 JSON 中,但当前表单未显示该提示。

例如正文有 ${count:3},元数据可写:

[
  {
    "id": "count",
    "label": "重复次数",
    "kind": "integer",
    "required": true,
    "default": "3",
    "options": []
  }
]

先保存包含占位符的脚本,再编辑自动生成的元数据,最容易保持 id 一致。编辑器保存时只保留模板中使用的参数,未被引用的元数据会移除;显式类型、默认值及选项会随模板同步。兼容已有脚本中通过元数据设置 integer、boolean、secret 等类型的普通文本占位符;新脚本推荐直接使用显式 @类型。

secret 控件只负责遮蔽输入,不是加密存储。将其“设为默认值”会持久化真实内容,脚本输出或直接嵌入正文也可能展示它。

Android 设备

不需要指定脚本“是否为 adb 命令”,编辑器没有 auto / use / none 选择。运行时自动尝试读取当前项目 IDE 运行工具栏中唯一、在线、可用的 Android 设备,取得序列号后设置本次进程的 ANDROID_SERIAL。

普通脚本不依赖 Android 设备。未安装/启用 Android 插件、设备选择 API 不兼容、未选择设备、设备离线或选择多个设备时,不注入自动序列号,普通脚本仍可启动。仅选择设备也不会给普通脚本额外添加 adb 依赖。

  1. 在 Android Studio 或具有兼容 Android 插件的 IDE 中连接并授权设备。
  2. 在当前项目运行工具栏选择一个设备。
  3. 确保 adb 或 scrcpy 已安装,必要时配置其路径。
  4. 执行脚本。控制台显示取得的默认设备序列号。

若业务确实要求已选设备,可在依赖工具中填写 adb, android_device,或将一个被模板引用的参数设为 kind: "android_device"、required: true。此时无有效设备会阻止运行;非必填设备参数无设备时为空。

设备选择在运行开始时读取,执行中切换设备不会更新已启动进程。脚本环境中的显式 ANDROID_SERIAL 可覆盖自动值,adb -s SERIAL 按工具自身规则指定设备。没有自动值时,外部工具使用继承的环境和自身选设备规则,可能正常运行,也可能提示设备缺失或多设备;插件不扫描/连接设备,不重启 adb 服务。

旧 JSON 中的 android_device_mode 仍保留用于兼容存储与导入,不再控制执行。

运行输出与停止

  • 输出进入当前项目的 IDE Run 标签,显示标准输出、错误、退出码及本次输出目录;不自动打印包含脚本正文的启动命令行。
  • 同一脚本按 ID 复用标签,即使改名也复用;再次执行后旧输出清空。
  • 启动中或运行中重复点击同一脚本,会切回已有控制台,不创建重复进程;不同脚本可并发。
  • 绿色三角形“再次运行”按钮使用 IDE 标准运行图标,读取最新保存的脚本,并用上次输入初始化参数表单。
  • “停止”或超时会终止本次进程及可追踪子进程,不停止共享 adb 服务。脚本主动脱离父进程的程序不保证可追踪。
  • 运行进程的标准输入关闭,不支持需要实时输入的交互菜单、密码提示等;改用运行前参数表单或程序的非交互选项。

每次执行创建一个临时输出目录,通过 POPTOOLS_OUTPUT_DIR 提供给脚本并在控制台打印路径。普通 echo、print 只显示到控制台,不会自动写入文件;脚本可以主动将报告、截图等生成文件写入此目录。退出后临时 Python/批处理源文件会删除,空输出目录会清理,非空目录保留生成结果。目录位于系统临时目录,仍可能被系统清理;需要长期保存的结果应复制到项目或自选目录。

分享、导入与迁移

剪贴板分享与导入

右键“分享脚本”复制 JSON,接收方复制整段 JSON 后点击顶部“导入”。支持:

  • poptools.custom-script 的 v1 分享封装;
  • 原始 v1 自定义工具 JSON;
  • 工具 JSON 数组;
  • 包含 scripts 数组的对象(剪贴板入口)。

分享会移除解释器路径、参数默认值和模板内联默认值,保留显式类型和下拉、单选按钮组选项。正文、环境变量中的普通字面内容与非默认路径仍保留;分享前应按实际内容检查,移除不希望分享的值。分享不复制外部脚本文件。

ID 或名称冲突时,可选“覆盖”(保留已有 ID)、“另存”(生成新 ID 和不重复名称)或“跳过”。批量导入逐条报告成功、跳过、失败,不因某一项失败回滚已成功项。未知字段、类型或版本会拒绝导入;internal、url 执行方式不支持,PopTool 托管环境或内部资源路径需要手动调整。

最小可导入示例(Python):

{
  "schema_version": 1,
  "id": "custom.hello",
  "title": "Hello Python",
  "description": "输出一条问候",
  "executor": {
    "kind": "python",
    "command": "print('Hello from NikoTools')"
  }
}

批量目录导出与导入

“批量操作 → 导出目录”选择目标目录后,会新建 poptool-scripts-时间戳:

poptool-scripts-时间戳/
├── tools/       # 脚本 JSON,保留默认值
└── scripts/     # 可迁移的外部脚本文件(如有)

“批量操作 → 导入目录”选择导出根目录,优先读取其中 tools 子目录,递归查找 JSON。目录文件使用单个工具/分享对象或工具数组;scripts 包装对象用剪贴板入口导入。导入前会备份当前库到 IDE 配置目录下的 poptool-backups/时间戳,来源文件不修改。

直接引用绝对路径 .py/.ps1/.sh/.bat/.cmd 文件的脚本导出时,插件会复制其所在目录的文件并改为相对入口;导入可迁移的相对入口时,将文件复制到 IDE 配置目录的 poptool-assets 并更新路径。符号链接不参与复制。动态引用、项目其他位置的资源、额外工具和解释器路径需另行迁移;目录导出不能视为完整项目打包。

批量导出与自动备份保留默认值,适合备份和换机;剪贴板分享会移除默认值,适合分享脚本定义。换机后重新配置外部工具路径。

常用示例

Python:选择文件,作为独立参数传递

执行类型 python,正文:

import pathlib
import sys
path = pathlib.Path(sys.argv[1])
print(path)
print(path.stat().st_size)

参数数组 JSON:

["${输入文件@file}"]

Bash:选择目录

执行类型 bash,正文:

printf 'Directory: %s\n' "$1"
ls -la -- "$1"

参数数组 JSON:["${目录@dir}"]。目录含空格时仍作为一项参数传递。

PowerShell:问候与选择参数

执行类型 powershell,正文:

var message = ${消息:你好}
var mode = ${模式:开启=1|关闭=0}
Write-Output '${message}'
Write-Output '${mode}'

此例演示字面替换;消息中含单引号时须调整正文的字符串处理。

process:查看 Android 设备

执行类型 process,正文 adb,参数数组 ["devices", "-l"]。它用于列出设备,无需 IDE 已选设备。如需读取所选设备属性,参数数组改为 ["shell", "getprop", "ro.product.model"];取得的 ANDROID_SERIAL 为 adb 提供默认目标。希望强制有 IDE 所选设备时设置依赖 android_device。

Bash:条件参数

执行类型 bash,正文:

var verbose = ${详细输出:False}
printf 'Argument: %s\n' "$@"

参数数组 JSON:["?verbose:--verbose"]。保存后编辑 verbose 元数据,将 kind 改为 boolean。选中复选框时添加 --verbose,未选中时省略该参数;这个演示脚本只打印收到的参数。用于实际工具时将正文的打印替换为工具调用,例如 mytool "$@"。

排错与常见问题

问题 处理方法
找不到解释器/工具 检查是否安装、IDE 的 PATH 或 NikoTools 全局路径;显式无效路径必须修正或清空
终端能运行,插件不能运行 检查 IDE 启动时继承的环境、虚拟环境、工作目录和执行类型
process 提示找不到 git status 正文只写 git,其余移到参数数组
工作目录不存在 默认使用当前项目根目录;相对路径基于该根目录,创建目录或填写已有绝对目录
没有 Android 设备 普通脚本可继续;强制设备脚本需选择唯一在线且已授权设备,并启用兼容 Android 插件
文件输入能进入文件夹 属于浏览导航;选择目录参数用 @dir,文件参数用 @file
输出乱码 根据工具实际输出调整“输出编码”;Python 运行器默认请求 UTF-8
参数报错或 JSON 不能保存 使用标准 JSON 双引号,参数数组为数组、环境为对象、元数据为数组;检查重复定义和整数/数字格式
输入含引号后语法错误 占位符不自动转义,改用参数数组或按目标语言处理引号
脚本一直等待输入 插件不提供运行中 stdin,改用运行前参数或非交互方式
终端没有新建脚本菜单 确认 Terminal 插件启用并已有选区;不同终端实现需具备兼容选区 API
项目 B 也看到了项目 A 的脚本 脚本库是 IDE 用户级共享;执行上下文仍来自当前窗口

数据位置与开发入口

持久化文件为 IDE 配置目录下的 options/poptool-scripts.xml,包含脚本库和工具路径;不是项目目录内的文件。目录备份在 poptool-backups,导入资源在 poptool-assets。不同 IDE 安装或配置目录之间不会自动共享,可使用批量迁移。

项目实现使用 Kotlin 和官方 Kotlin UI DSL,UI 文本当前为中文。完整构建、测试、兼容性验证及 Marketplace 发布步骤见项目 README。中英文 Overview 在 plugin.xml 的 description 中维护;重新构建并安装后可查看本地插件介绍,Marketplace 的更新需发布新版安装包。

插件源码及模板资源采用 MIT License;外部工具和 IDE 使用各自许可。