Intellij 插件新秀 CommentShell,让你的注释运行起来! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
KesonAn
V2EX    程序员

Intellij 插件新秀 CommentShell,让你的注释运行起来!

  •  
  •   KesonAn 2021-03-26 10:18:12 +08:00 4015 次点击
    这是一个创建于 1669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    CommentShell

    demo

    https://github.com/anqiansong/CommentShell

    CommentShell(CSL)一个可以在注释中运行 shell 命令的 intellij 插件,欢迎 Star,Fork,Issue

    其可以帮助开发者快速在文件内执行指定命令,而不需要在终端去敲打 shell 命令, 如:开发 golang 的 grpc 服务时,我们需要用 protoc 工具生成 pb.go ,传统做法是编写完 proto 文件后在打开终端输入 shell 命令去生成 pb 文件, 但是现在,你可以用 CLS 去替代传统做法提高你的开发效率,只需要在单行注释中以 x:generate 开头, 后面跟上你需要执行的 shell 命令即可,如:我期望通过 shell 命令打印 hello proto, 你可以通过 //x:generate echo hello proto 这样一行单行注释即可实现

    支持的语言

    • .gitignore
    • Antlr(g4)
    • Api(go-zero)
    • Dart
    • Dockerfile
    • Drools
    • Gherkin
    • Gradle
    • Groovy
    • Html
    • Java
    • Javascript
    • JFlex
    • JSPX
    • Kotlin
    • Lua
    • Markdown
    • Perl
    • PHP
    • Properties
    • Proto
    • Python
    • R
    • React
    • Ruby
    • Rust
    • Scala
    • SQl
    • TypeScript
    • Vue
    • XML
    • YAML

    以上语言或者文件已经经过测试,除此外,只要编程语言或者某类型文件支持单行注释语法且指定单行注释类型和语法书写规范理论均可使用(见下文)。

    安装方式

    方式一: 下载地址 方式二:intellij plugin 仓库搜索 CommentShell install 即可,plugin 商店还在审核中。

    支持的注释类型

    • Java 风格单行注释
      //x:generate echo hello java 
    • Yaml 风格单行注释
      #x:generate echo hello yaml 
    • SQL 风格单行注释
      --x:generate echo hello sql 
    • xml/html 风格单行注释
      <!--x:generate echo hello xml--> 

    书写规则

    格式

    [linePrefix]x:generate [shell] [arg...] [lineSuffix] 
    • linePrefix 为单行注释开始标志,仅支持//#--<!--
    • lineSuffix 为单行注释结束标志,仅支持 --> 此为 html/xml 风格单行注释特有
    • x:generate 为关键字

    注意

    • linePrefix 与 x:generate 之间不能有任何其他内容

    常量

    • %DIR% 代表当前文件的文件目录,如:/foo/bar
    • %FILENAME% 代表当前文件路径,如:/foo/bar/foobar.txt
    • %PERCENT_SIGN% 代表百分号符号本身%
    • "%BASE%" 代表当前文件名称,如:foobar.txt

    示例

    • 在 Java 文件注释中输出 hello java
      //x:generate echo hello java 
      output:
      hello java 
    • 在 proto 文件中生成 pb.go
      //x:generate protoc --go_out=plugins=grpc:. %FILENAME% 
    • 在 Java 代码中输出 PATH 环境变量值
      //x:generate echo $PATH 

    点击这里查看各主流编程语言的 shell 写法。

    20 条回复    2021-03-27 12:00:11 +08:00
    xiaofan2
        1
    xiaofan2  
       2021-03-26 10:29:22 +08:00
    注释运行和我用 IDEA 自带的 Terminal 运行有啥区别吗?
    anankun
        2
    anankun  
       2021-03-26 10:35:02 +08:00
    花里胡哨的
    KesonAn
        3
    KesonAn  
    OP
       2021-03-26 10:43:47 +08:00
    @xiaofan2 其实本质是运行 shell 命令,但是这个的场景是适用于命令比较长,很难记的情况下,如 grpc 通过 proto 生成 pb.go 文件,我们通常会把命令写在头部的注释中,方便下次 copy 到终端执行,而插件在这里就减少了 copy 到终端的过程,可以点击运行按钮直接运行。
    locoz
        4
    locoz  
       2021-03-26 10:50:53 +08:00 via Android
    emmmm,你举的这个例子貌似没有必要用插件实现?你看看 grpc 的样例代码,里面那个开头的注释就是可以在 goland 里直接点击执行的。
    xaplux
        5
    xaplux  
       2021-03-26 10:52:38 +08:00
    看明白了,其实就是省去了复制粘贴打开 Terminal 的过程,类似于 stackoverflow 插件可以打开浏览器自动去 stackoverflow 网站搜索
    K1W1
        6
    K1W1  
       2021-03-26 10:56:35 +08:00 via Android
    挺好的,支持一下
    sxfscool
        7
    sxfscool  
       2021-03-26 10:57:53 +08:00 via Android
    有点像 go: generate
    KesonAn
        8
    KesonAn  
    OP
       2021-03-26 11:05:50 +08:00
    @sxfscool 灵感涞源于它
    KesonAn
        9
    KesonAn  
    OP
       2021-03-26 11:06:10 +08:00
    KesonAn
        10
    KesonAn  
    OP
       2021-03-26 11:07:30 +08:00
    @locoz go 代码可以用 //go:generate 去生成,proto 代码中没有快捷生成的按钮的。
    KesonAn
        11
    KesonAn  
    OP
       2021-03-26 11:09:15 +08:00
    @xaplux 是的,如果只是简单的 shell 命令,其实这个插件没必要,它的使用场景是针对的是命令比较长,不方便记忆的情况使用,下次来直接运行就行,也省去再花时间想这个命令怎么敲来着。
    aguesuka
        12
    aguesuka  
       2021-03-26 11:47:13 +08:00 via Android
    idea 的功能性注释有官方先例的,比如 region 和 endregion 或者 language injection 。

    但是我不会用这个插件。首先命令不应该出现在注释里,而是构建脚本比如 makefile)的工作,再不济也应该是 bash 或者 markdown 里。而且 x:generate 意义不明,语法比 TODO,FIXME language injection 复杂太多。
    KesonAn
        13
    KesonAn  
    OP
       2021-03-26 11:50:49 +08:00
    @aguesuka 这只是尽可能提升开发效率,像 makefile,shell 脚本这类做专业的事,它不可能去和那些专业的脚本比较哈。
    lanlan2020
        14
    lanlan2020  
       2021-03-26 16:47:46 +08:00
    我觉得很有用,支持你
    locoz
        15
    locoz  
       2021-03-26 16:51:01 +08:00 via Android
    @KesonAn #10 这样啊,那还是挺有用的
    itechify
        16
    itechify  
    PRO
       2021-03-26 17:01:58 +08:00
    戳中萌点,支持下 23333
    KesonAn
        17
    KesonAn  
    OP
       2021-03-26 17:04:25 +08:00
    KesonAn
        18
    KesonAn  
    OP
       2021-03-26 17:04:35 +08:00
    KesonAn
        19
    KesonAn  
    OP
       2021-03-26 17:04:43 +08:00
    nanjoyoshino
        20
    nanjoyoshino  
       2021-03-27 12:00:11 +08:00
    虽然目前用不到,但是有点意思啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1036 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 18:49 PVG 02:49 LAX 11:49 JFK 14:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86