vscode - plugs - koroFileHeader
vscode - plugs - koroFileHeader
参考资料
简介
功能
- 头部注释
- 注释图案
- 函数注释: 自动提取函数参数
配置
全部配置
/** koroFileHeader 自定义配置 */ // 头部注释,默认设置: /** { Author: 'your name', Date: 'Do not edit', LastEditors: 'your name', LastEditTime: 'Do not edit', Description: 'file content', }; */ "fileheader.customMade": { "Date": "Do not edit", // 文件创建时间(不变) "Author": "zclee", // 文件最后编辑者 "LastEditTime": "Do not edit", // 文件最后编辑时间 "LastEditors": "zclee", // 文件最后编辑时间 "FilePath": "Do not edit", // 文件在项目中的相对路径 自动更新 "Description": "" }, // 在光标处插入函数注释,默认配置:{'description':'','param':'','return':''} "fileheader.cursorMode": { "Author": "zclee", // 文件最后编辑者 "Date": "Do not edit", // 文件创建时间(不变) "LastEditTime": "Do not edit", // 文件最后编辑时间 "method": "函数名称", "description": "函数注释配置模板", "param": "", "return": "" }, "fileheader.configObj": { "autoAdd": false, // 自动添加头部注释开启才能自动添加 "designAddHead": false, // 默认关闭, 生成的图案注释是否附带头部注释 "headDesign": false, // 默认关闭 开启后,所有生成头部注释的场景都会生成图案注释 "headDesignName": "random", // 默认为随机图案 "autoAddLine": 100, // 文件超过一定行数不再自动添加头部注释 默认文件超过100行就不再自动添加头部注释 "autoAlready": true, // 只让支持的语言,自动添加头部注释 默认开启 // 当前时间/创建文件时间: "createFileTime": true, // 设为false更改为当前生成注释的时间 "language": { "js/ts": { "head": "/**", "middle": " * @", "end": " */", "functionSymbol": { "head": "/** ", "middle": " * @", "end": " */" }, // 自定义语言支持函数参数提取 // "functionParams": "typescript" // 使用ts语言的解析逻辑 "functionParams": "js" } }, "annotationStr": { // 默认注释形式: "head": "/*", "middle": " * @", "end": " */", "use": false }, // 自定义特殊字段 "specialOptions": { "特殊字段": "自定义比如LastEditTime/LastEditors", "Date": "createDate", }, // 自动添加文件黑名单 "prohibitAutoAdd": [ "json", "md" // 禁止.json .md文件,自动添加头部注释 ], // 自动添加项目黑名单 "prohibitItemAutoAdd": [ "项目的全称, 整个项目禁止自动添加头部注释, 可以使用快捷键添加" ], // 自动添加文件白名单 "supportAutoLanguage": [], // 文件夹或文件名禁止自动添加头部注释 "folderBlacklist": [ "node_modules", "文件夹禁止自动添加头部注释", "webpack.config.js" // 可以禁止某些文件自动添加注释 ], // 修改路径分隔符 // "filePathColon": "\\\\", // \ 路径要转义 所以要写两遍 // old: FilePath: /文件夹名称/test.js // now: FilePath: \\文件夹名称\\test.js "filePathColon": "路径分隔符替换", // 头部注释等宽设置wideSame "wideSame": false, "wideNum": 13, // 新建文件自动添加 "createHeader": true, // 节流时间自定义, 自定义同一个文件触发保存的频率 "throttleTime": 60000, // 对同一个文件 需要过1分钟再次修改文件并保存才会更新注释 // 头部注释第几行插入 "headInsertLine": { "php": 2, // php后缀的文件,在第二行插入文件头部注释 "sh": 2, "*": 1, // 所有文件都在第1行插入注释(除了php sh) }, // 时间格式化: // PS: 该功能将影响所有时间字段。 "dateFormat": "YYYY-MM-DD HH:mm:ss", // 头部注释前面插入内容: "beforeAnnotation": { // "文件后缀": "该文件后缀的头部注释之前添加某些内容 换行符\n", // "js": "// js", // "*": "\n" // 所有文件的头部注释都在前面增加一个换行(除了js) }, // 头部注释后面插入内容: "afterAnnotation": { // "文件后缀": "该文件后缀的头部注释之后添加某些内容", // "js": "// js文件头部注释之后的内容", // "*": "\n" // 所有文件新增头部注释之后都空一行(除了js) }, "switch": { // 遇到换行添加注释符号 "newlineAddAnnotation": true }, // 移动光标到`Description :`所在行 "moveCursor": true, // 自定义注释中的艾特和冒号: // 所有文件的头部注释和函数注释的默认值 "atSymbol": [ "@", "@" ], "atSymbolObj": { // "文件后缀": [ // "头部注释@符号", // "函数注释@符号" // ], "js": [ " - ", "@" ], // .js文件的头部注释@符号去掉,所有文件的函数注释默认为@ }, // 所有文件的头部注释和函数注释的默认值 "colon": [ ": ", ": " ], "colonObj": { // "文件后缀": [ // "头部注释冒号", // "函数注释冒号" // ] "js": [ " - ", ": " ], // .js文件 头部注释去掉: 留一个空格 函数注释保留冒号 }, // 隐藏插件抛出的错误通知 "showErrorMessage": false, // 默认不显示错误通知 用于debugger // 错误日志 // 开启错误日志后,每次重启vscode如果有报错都将会清空日志,这是防止日志过多的情况。 // 设置错误日志生成地址 // 按快捷键ctrl+p,调出命令行面板,输入以下命令即可选择文件夹设置日志地址。 // >空格fileheader.errPathSet "writeLog": false, // 默认不生成错误日志 // 单个文件保存时进行diff检查 // 每次保存之后,会进行一次diff检查, 如果文件只变更了LastEditors/LastEditTime,该文件将会回滚到本地仓库的最新版本. // 使用场景:对文件进行修改之后又撤销,但是LastEditors和LastEditTime已经变更了,在提交代码的时候很容易忘记恢复它,导致无意义的提交,反正我很经常遇到这个问题。 "CheckFileChange": false, // 默认关闭 // 区分工作区配置模板 // 该设置我们可以区分工作区设置的模板和用户设置的通用模板,默认情况下是合并工作区设置和用户设置的字段。 // 头部注释customMade 和函数注释cursorMode都可以区分。 "useWorker": false, // 函数注释自动提取函数的参数 // 开启的话,在cursorMode函数注释模板中需要有param字段 "openFunctionParamsCheck": true, "functionWideNum": 0, // 函数内生成函数注释 "cursorModeInternalAll": { "ts": true, // ts文件后缀是函数内生成函数注释 "js": false, // js文件后缀是在函数外生成函数注释 "python": true, // python语言类型文件时在函数内生成函数注释 "defaultSetting": false // 默认是在函数外生成注释 }, // 函数参数外形自定义 // [ "{", "}"] // 默认值 @param {number} c // [ "[", "]"] @param [number] c // "functionParamsShape": "no type", @param c "functionParamsShape": [ "{", "}" ], // 函数注释空格缩进 "functionBlankSpaceAll": { // "js": 2, // 单独设置文件:js文件后缀 缩进两格 "python": 4, // 设置语言:python语言类型 函数注释空格缩进4格 "defaultSetting": 0 // 不设置 默认值为0 }, // 参数没有类型时的默认值 "functionTypeSymbol": "*", // 参数类型 和 参数的位置自定义 // "typeParamOrder": "param type" // @param axiosMethods {type} // "typeParamOrder": "param" 只有参数 没有类型 @param axiosMethods "typeParamOrder": "type param", // 类型在前面 参数在后面 // 自定义取消注释的head和end部分 // 注意该配置只在自定义语言注释language也配置了,才会生效 "customHasHeadEnd": { // "js": "cancel head and function", // 头部注释和函数注释均不取消head和end - 单独设置文件 js文件后缀 // "ts": "cancel function", // 函数注释不带有head和end-ts文件后缀 // "python": "cancel head", // 头部注释不带有head和end // "defaultSetting": '' // 不设置 默认所有文件都有head和end }, } /** koroFileHeader 自定义配置 end */
customMade
"fileheader.customMade": { "Date": "Do not edit", // 文件创建时间(不变) "LastEditors": "OBKoro1", // 文件最后编辑者 "LastEditTime": "Do not edit", // 文件最后编辑时间 "FilePath": "Do not edit" // 文件在项目中的相对路径 自动更新 } // 不填写对应属性即关闭对应功能
FilePath
文件相对于项目的路径
FilePath
会自动更新,防止因为文件被移动、重命名导致文件路径错误。- 将
FilePath
设为no item name
可以去掉项目名称。 - 将
FilePath
设为only file name
可以去掉路径,只展示文件名。 - 将
FilePath
设为only file name without ext
可以去掉路径,去掉文件后缀,只展示文件名。 - 如果想给字段换一个名字,可以在
specialOptions
中修改它。 - 字段的值为:生成头部注释时,文件相对于当前VsCode窗口打开的文件夹的路径(如下所示)。
- 该配置的作用在于:项目的文件夹层级较为复杂或者项目中存在大量相同的文件名(比如一大堆
index.js
)
/* * Author: zclee * Date: 2019-10-20 15:43:37 * LastEditTime: 2019-10-20 17:37:45 * FilePath: /文件夹名称/src/index.js // 默认带上项目名称 * FilePath: /src/index.js // "FilePath": "no item name" 去掉项目名称 * FilePath: index.js // "FilePath": "only file name" 只剩文件名 * FilePath: index // "FilePath": "only file name without ext" 去掉路径,去掉文件后缀,只展示文件名 */
language
用户自定义注释符号
language自定义注释形式须知:
- 此项配置是最高级别的,会覆盖插件的语言注释格式
- 任何语言/文件(新的语言、特殊的文件),用户都可以设置对应的注释符号,只要像上述栗子中的格式一样即可。
- 还有一种场景:某些库会对注释格式有特殊要求,库会对其识别、处理。插件标准的注释格式并不能满足需求,此时在config.language里添加一项配置即可。
- language下面的属性可以是文件后缀,也可以是语言类型,比如test.js,js是文件后缀,javascript是语言类型.
- 推荐使用文件后缀来设置,这样比较不容易出错。
// 设置 "fileheader.configObj": { "language": { // 普通后缀文件 "js": { "head": "/$$", "middle": " $ @", "end": " $/", // 函数自定义注释符号:如果有此配置 会默认使用 "functionSymbol": { "head": "/******* ", // 统一增加几个*号 "middle": " * @", "end": " */" } }, // 一次匹配多种文件后缀文件 不用重复设置 "h/hpp/cpp": { "head": "/*** ", // 统一增加几个*号 "middle": " * @", "end": " */" }, // 针对有特殊要求的文件如:test.blade.php "blade.php":{ "head": "<!--", "middle": " * @", "end": "-->", } }, }
自定义语言支持函数参数提取
在自定义语言的对象中使用functionParams
字段,可以获取对应语言的解析函数参数的逻辑。
如果解析的逻辑不符合自定义语言的语法,那可以尝试其他语言的解析逻辑,应该会有合适。
"fileheader.configObj": { // 自定义语言 "language": { "tsx": { // jsx后缀的文件 "head": "/**", "middle": " * ", "end": "*/", "functionParams": "typescript" // 使用ts语言的解析逻辑 } } }
使用下列对象的key,即可获取对应语言解析函数参数的逻辑。
// 支持函数注释的语言 const supportLanguage = { javascript: 'function-js.js', javascriptreact: 'function-js.js', // react jsx vue: 'function-js.js', // vue html: 'function-js.js', // html typescript: 'function-ts.js', // ts typescriptreact: 'function-ts.js', // react tsx java: 'function-java.js', // java python: 'function-python.js', // py rust: 'function-rust.js', // rust go: 'function-go.js', // go c: 'function-c.js', cpp: 'function-c.js', php: 'function-php.js', solidity: 'function-solidity.js' // 智能合约的语言 }
默认注释形式 annotationStr
- 配置规则匹配
language
- 匹配插件支持的语言
- 当上面两种注释形式都没匹配到时,并且use选项为true,才会使用此项配置。
"fileheader.configObj": { "annotationStr": { "head": "/*", // 自定义注释头部 "middle": " * @", // 自定义注释中间部分(注意空格,这也是最终生成注释的一部分) "end": " */", // 自定义注释尾部 "use": false // 是否使用自定义注释符号 } }
自动添加头部注释
"fileheader.configObj": { "autoAdd": true, // 自动添加文件头部注释 }
配置规则
开启该选项之后,插件会检测当前保存的文件有没有头部注释,如果没有的话,将为自动添加头部注释
检测规则
- 前15行没有进入该语言/自定义的注释
- 进入注释之后,注释中没有LastEditors、LastEditTime、FilePath、Date这四个特殊字段
- 如果使用了自定义特殊字段,那么插件将改为检测自定义的特殊字段。
- 也就是说你注释模板中没有这四个字段,那就不要开启这项功能,因为会无限添加头部注释(一直检测不到头部文件注释,一直自动添加)。
- 在本插件中,这四个设置都有其自己的功能,所以以这四个字段为检测标准
autoAlready
自动添加头部注释:只允许插件支持的语言,以及用户通过 language
选项自定义的注释。
- 像
.json
文件这种类型的文件,文件不能添加注释 - 有一些语言,插件没有支持,添加默认注释,并不适配,导致问题。 (可以通过language选项添加自定义注释来解决。)
将autoAlready关闭,即给所有文件自动添加头部注释
"fileheader.configObj": { "autoAdd": true, // 自动添加文件头部注释 "autoAlready": true, // 只让支持的语言,自动添加头部注释 默认开启 }
新建文件自动添加
- 插件匹配到language自定义语言注释配置、自定义注释配置时才会自动添加头部注释,如果匹配不到不会使用默认注释。
- 如果该文件被添加进黑名单,将不会自动添加头部注释。
- 这样在创建一些项目配置文件时,不会出现不必要的注释。
"fileheader.configObj": { "createHeader": true // 默认打开 }
自动添加行数
"fileheader.configObj": { "autoAddLine": 100 // 文件超过一定行数不再自动添加头部注释 默认文件超过100行就不再自动添加头部注释 }
自动添加文件夹或文件名黑名单
插件会对地址进行切割,如果完全匹配到文件夹或者文件名字符串则禁止添加。
"fileheader.configObj": { "folderBlacklist": [ "node_modules", "文件夹或文件名禁止自动添加头部注释", // "webpack.config.js" // 可以禁止某些文件自动添加注释 ] }
自动添加文件黑名单
插件黑名单的参数接收的是文件后缀,当文件后缀匹配跟黑名单数组内的元素匹配时,该文件不会自动添加头部注释。
自动添加头部注释,本身是一个相当不错的功能,但因为有些文件不适合自动添加注释,比如.json文件是不能有注释的,在这些不适宜的情景下,自动添加会被关闭。
"fileheader.configObj": { "prohibitAutoAdd": [ "json", "md" ] // 禁止.json .md文件,自动添加头部注释 }
自动添加项目黑名单
- 要禁止项目的全称, 整个项目禁止自动添加头部注释, 可以使用快捷键自行添加头部注释。
- 如test_koro项目, 需要以test_koro为根目录打开项目,才可以禁止自动添加,如果将其包含,或者打开该项目的一部分则不会被禁止
- 电脑中如果有其他项目也是完全一样的项目名,那么以该项目为根目录时,也会被禁止自动添加头部注释。(这种场景比较少见)
"fileheader.configObj": { "prohibitItemAutoAdd": [ "test_koro", "test_koro2" ] // 禁止test_kro/test_koro2项目自动添加头部注释 }
自动添加文件白名单
规则与黑名单prohibitAutoAdd
相同,该功能是为了防止语言实在太多,黑名单设置不过来,提供仅支持特定的几种特定语言的自动添加。
"fileheader.configObj": { "supportAutoLanguage": [ ] // 设置过后只有该数组里面的文件 才会自动添加头部注释 }
只允许文件自动添加头部注释一次
如果某个文件曾经自动添加过头部注释,那么插件会记录该文件的路径,在这次VsCode编辑器关闭前,都将不再允许该文件自动添加头部注释。
有时候我们并不希望该文件自动添加头部注释,删除也没有用,它会一直手动添加,该功能就是为了用于防止这种情况的。
自定义特殊字段
- 目前在插件中头部注释有五个特殊字段:
Date、LastEditTime、LastEditors、Description、FilePath
- 函数注释有三个特殊字段:
Description、param、return
- 类似
Date
字段,在静态博客中有自己定义的字段(如:updated_at
),不是Date
。
example
- 默认为空对象,也就是不更改特殊字段。
- 你可以只设置一个对应的字段,也可都设置。
- 当你更改了特殊字段,那些使用老的特殊字段的注释,插件也进行过处理了,可以放心食用。
- 注意:如果是团队使用,需要团队成员一起修改。 否则将不会自动更新最后编辑时间/最后编辑人以及打开自动添加注释的话,会检测不出来新的特殊字段,导致插件自动添加头部注释。
"fileheader.customMade":{ "Author": "zclee", "Date": "Do not edit", "LastEditTime": "Do not edit", "LastEditors": "Do not edit", "FilePath": "Do not edit", "Description": "头部注释配置模板" }, "fileheader.cursorMode":{ "Description": "函数注释配置模板", "param": "", "return": "" }, "fileheader.configObj": { "specialOptions":{ "Date": "since", "LastEditTime": "lastTime", "LastEditors": "LastAuthor", "Description": "message", "FilePath": "文件相对于项目的路径" "param": "param2", // 函数注释parm参数别名 "return": "return2", // 函数注释return参数别名 } }
效果
/* * @Author: OBKoro1 * @since: 2019-05-13 15:54:32 * @lastTime: 2019-08-08 16:25:22 * @LastAuthor: Do not edit * @文件相对于项目的路径: /testItem/src/index.js * @message: */ /** * description: * param2 [type] param字段重命名 * return2 [type] return字段重命名 */ function test(a, b) {}
注释自定义信息
在customMade/cursorMode中设置特殊属性custom_string_obkoro1~custom_string_obkoro100,用来输入一段自定义信息,设置如下:
PS:还有两个特殊字段custom_string_obkoro1_copyright
(版权)、custom_string_obkoro1_date
(时间)
"fileheader.customMade": { "custom_string_obkoro1_date": "Do not edit", // 不带Date前缀的时间 "Github": "https://github.com/OBKoro1", "custom_string_obkoro2": "custom_string_obkoro1~custom_string_obkoro100都可以输出自定义信息", "Author": "OBKoro1", "custom_string_obkoro1_copyright": "Copyright ${now_year} OBKoro1, All Rights Reserved. ", // 版权声明 保留所有权利 自动替换年份 "custom_string_obkoro1": "可以输入预定的版权声明、个性签名、空行等" }
效果:
/** * 2020-07-03 14:50:17 // 不带Date字段的时间 * @Github: https://github.com/OBKoro1 * custom_string_obkoro1~custom_string_obkoro100都可以输出自定义信息 * @Author: OBKoro1 * Copyright 2020 OBKoro1, All Rights Reserved // 版权字段 * 可以输入预定的版权声明、个性签名、空行等 // 使用atSymbol字段可以去掉@ */
换行添加注释符号
遇到\r\n、\n、\r换行情况时,自动在下一行开头添加应该有的注释标识符,设置如下:
"fileheader.configObj": { "switch": { "newlineAddAnnotation": true // 默认开启 } }
移动光标到Description :所在行
- 该选项默认开启
- 如果视图中没有注释,将会移动视图到顶部。
- 必须在customMade/cursorMode中有Description选项,没有该选项的话,将不生效。
- Description可在configOptions.specialOptions中修改。
"fileheader.configObj": { "moveCursor": true // 移动光标到`Description :`所在行 }
自定义注释中的艾特和冒号
注释中的@
和:
符号希望能够自定义
增加了以下四项配置,用以修改所有文件的@、:
以及单独修改某个文件类型的@
和:
:
"fileheader.configObj": { "atSymbol": [ "@", "@"], // 所有文件的头部注释和函数注释的默认值 "atSymbolObj": { "js": ["", "@"], // .js文件的头部注释@符号去掉,所有文件的函数注释默认为@ "java": [ "#", "@"] // .java文件 头部注释@改为#, 函数注释还是@ }, "colon": [ ": ", ": " ], // 所有文件的头部注释和函数注释的默认值 "colonObj": { "js": [ " ", ": " ], // .js文件 头部注释去掉: 留一个空格 函数注释保留冒号 "java": [ ": ", "$"] // .java文件 头部注释是冒号 函数注释是$ } }
头部注释等宽设置wideSame
"fileheader.configObj": { "wideSame": false, // 设置为true开启 "wideNum": 13 // 字段长度 默认为13 }
开启效果:
// wideNum为13长度充足,每个字段都有空格: /* * Author : OBKoro1 * Date : 2019-09-24 20:25:33 * LastEditors : OBKoro1 * LastEditTime : 2019-12-16 21:16:08 * FilePath : /fileHead/test.js */ // 之前没有对齐的注释 插件也会更新它的修改时间, 效果如下 /* * @Author: OBKoro1 * @Date: 2019-09-24 20:25:33 * LastEditors : OBKoro1 // 字段会填充空格 * LastEditTime : 2019-12-17 19:43:01 // 字段会填充空格 * @FilePath: /fileHead/test.js */ // wideNum为9,字段长度超出会导致长度不齐 /* * Author : OBKoro1 * Date : 2019-09-24 20:25:33 * LastEditors: OBKoro1 * LastEditTime: 2019-12-17 10:35:19 * FilePath : /fileHead/test.js */
函数注释等宽设置
"fileheader.configObj": { "functionWideNum": 0 // 0 默认关闭 设置一个正整数即可开启 比如12 }
开启效果
/** * @description 设置为13 * @param {*} * @return {*} */ /** * @description 设置为0 关闭 * @param {*} * @return {*} */
函数内生成注释
设为true开启函数内生成函数注释,下面是设置示例:
"fileheader.configObj": { "cursorModeInternalAll": { "ts": true, // ts文件后缀是函数内生成函数注释 "js": false, // js文件后缀是在函数外生成函数注释 "python": true, // python语言类型文件时在函数内生成函数注释 "defaultSetting": false // 默认是在函数外生成注释 } }
头部注释
- 在文件开头添加注释,记录文件信息/文件的传参/出参等
- 支持用户高度自定义注释选项, 适配各种需求和注释。
- 保存文件的时候,自动更新最后的编辑时间和编辑人
快捷键
函数注释
在光标处添加函数注释
- 在光标处自动生成一个注释模板, 自动解析函数参数,生成函数参数注释。
- 支持用户高度自定义注释选项
- 快捷键:
window
:ctrl+window+t
,mac
:ctrl+cmd+t
,linux
:ctrl+meta+t
- 快捷键不可用很可能是被占用了,参考这里
注释图案
快捷键
window:ctrl+alt+j, mac:ctrl+cmd+j
随机
快捷键shift+command+p 输入> 随机 ,选中并回车即可随机生成一个注释图案。
图案注释和头部注释
"fileheader.configObj": { "designAddHead": false, // 默认关闭, 生成的图案注释是否附带头部注释 "headDesign": false, // 默认关闭 开启后,所有生成头部注释的场景都会生成图案注释 "headDesignName": "random" // 默认为随机图案 // 'random', // 随机 // 'buddhalImg', // 佛祖 // 'buddhalImgSay', // 佛祖+佛曰 // 'buddhalSay', // 佛曰 // 'totemDragon', // 龙图腾 // 'belle', // 美女 // 'coderSong', // 程序员之歌 // 'loitumaGirl', // 甩葱少女 // 'keyboardAll', // 全键盘 // 'keyboardSmall', // 小键盘 // 'totemWestDragon', // 喷火龙 // 'jesus', // 耶稣 // 'dog', // 狗 // 'grassHorse', // 草泥马 // 'grassHorse2', // 草泥马2 // 'totemBat', // 蝙蝠 }
佛祖
/* * _oo0oo_ * o8888888o * 88" . "88 * (| -_- |) * 0\ = /0 * ___/`---'\___ * .' \\| |// '. * / \\||| : |||// \ * / _||||| -:- |||||- \ * | | \\\ - /// | | * | \_| ''\---/'' |_/ | * \ .-\__ '-' ___/-. / * ___'. .' /--.--\ `. .'___ * ."" '< `.___\_<|>_/___.' >' "". * | | : `- \`.;`\ _ /`;.`/ - ` : | | * \ \ `_. \_ __\ /__ _/ .-` / / * =====`-.____`.___ \_____/___.-`___.-'===== * `=---=' * * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 佛祖保佑 永不宕机 永无BUG */
佛曰
/* * 佛曰: * 写字楼里写字间,写字间里程序员; * 程序人员写程序,又拿程序换酒钱。 * 酒醒只在网上坐,酒醉还来网下眠; * 酒醉酒醒日复日,网上网下年复年。 * 但愿老死电脑间,不愿鞠躬老板前; * 奔驰宝马贵者趣,公交自行程序员。 * 别人笑我忒疯癫,我笑自己命太贱; * 不见满街漂亮妹,哪个归得程序员? */
佛祖+佛曰
/* * _oo0oo_ * o8888888o * 88" . "88 * (| -_- |) * 0\ = /0 * ___/`---'\___ * .' \\| |// '. * / \\||| : |||// \ * / _||||| -:- |||||- \ * | | \\\ - /// | | * | \_| ''\---/'' |_/ | * \ .-\__ '-' ___/-. / * ___'. .' /--.--\ `. .'___ * ."" '< `.___\_<|>_/___.' >' "". * | | : `- \`.;`\ _ /`;.`/ - ` : | | * \ \ `_. \_ __\ /__ _/ .-` / / * =====`-.____`.___ \_____/___.-`___.-'===== * `=---=' * * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 佛祖保佑 永不宕机 永无BUG * * 佛曰: * 写字楼里写字间,写字间里程序员; * 程序人员写程序,又拿程序换酒钱。 * 酒醒只在网上坐,酒醉还来网下眠; * 酒醉酒醒日复日,网上网下年复年。 * 但愿老死电脑间,不愿鞠躬老板前; * 奔驰宝马贵者趣,公交自行程序员。 * 别人笑我忒疯癫,我笑自己命太贱; * 不见满街漂亮妹,哪个归得程序员? */
少女
/* * .::::. * .::::::::. * ::::::::::: * ..:::::::::::' * '::::::::::::' * .:::::::::: * '::::::::::::::.. * ..::::::::::::. * ``:::::::::::::::: * ::::``:::::::::' .:::. * ::::' ':::::' .::::::::. * .::::' :::: .:::::::'::::. * .:::' ::::: .:::::::::' ':::::. * .::' :::::.:::::::::' ':::::. * .::' ::::::::::::::' ``::::. * ...::: ::::::::::::' ``::. * ````':. ':::::::::' ::::.. * '.:::::' ':'````.. */
龙图腾
/* * ......................................&&......................... * ....................................&&&.......................... * .................................&&&&............................ * ...............................&&&&.............................. * .............................&&&&&&.............................. * ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........ * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.............. * ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&................. * .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......... * ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............... * ..................&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............ * ...............&&&&&@ &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&........... * ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&......... * ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........ * ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&....... * .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&...... * ........&&&&&.....................&&&&&&&&&&&&&&&&&&............. * ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............ * ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............ * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............ * ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............ * ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............ * .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............ * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............ * ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&............. * .....&&&&&&&&&&&&&&&&............................&&.............. * ....&&&&&&&&&&&&&&&.................&&........................... * ...&&&&&&&&&&&&&&&.....................&&&&...................... * ...&&&&&&&&&&.&&&........................&&&&&................... * ..&&&&&&&&&&&..&&..........................&&&&&&&............... * ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&............. * ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&........... * ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&......... * ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&....... * ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&...... * ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&..... * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&.... * .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&.... * ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&... * .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&... * .......&&&...............&&&&&&&.......&&&&&&&&............&&&... * ........&&...................&&&&&&.........................&&&.. * .........&.....................&&&&........................&&.... * ...............................&&&.......................&&...... * ................................&&......................&&....... * .................................&&.............................. * ..................................&.............................. */
江城子程序员之歌
/* * 江城子 . 程序员之歌 * * 十年生死两茫茫,写程序,到天亮。 * 千行代码,Bug何处藏。 * 纵使上线又怎样,朝令改,夕断肠。 * * 领导每天新想法,天天改,日日忙。 * 相顾无言,惟有泪千行。 * 每晚灯火阑珊处,夜难寐,加班狂。 * */
耶稣
/* * |~~~~~~~| * | | * | | * | | * | | * | | * |~.\\\_\~~~~~~~~~~~~~~xx~~~ ~~~~~~~~~~~~~~~~~~~~~/_//;~| * | \ o \_ ,XXXXX), _..-~ o / | * | ~~\ ~-. XXXXX`)))), _.--~~ .-~~~ | * ~~~~~~~`\ ~\~~~XXX' _/ ';)) |~~~~~~..-~ _.-~ ~~~~~~~ * `\ ~~--`_\~\, ;;;\)__.---.~~~ _.-~ * ~-. `:;;/;; \ _..-~~ * ~-._ `'' /-~-~ * `\ / / * | , | | * | ' / | * \/; | * ;; | * `; . | * |~~~-----.....| * | \ \ * | /\~~--...__ | * (| `\ __-\| * || \_ /~ | * |) \~-' | * | | \ ' * | | \ : * \ | | | * | ) ( ) * \ /; /\ | * | |/ | * | | | * \ .' || * | | | | * ( | | | * | \ \ | * || o `.)| * |`\\) | * | | * | | */
狗
/* * :: * :;J7, :, ::;7: * ,ivYi, , ;LLLFS: * :iv7Yi :7ri;j5PL * ,:ivYLvr ,ivrrirrY2X, * :;r@Wwz.7r: :ivu@kexianli. * :iL7::,:::iiirii:ii;::::,,irvF7rvvLujL7ur * ri::,:,::i:iiiiiii:i:irrv177JX7rYXqZEkvv17 * ;i:, , ::::iirrririi:i:::iiir2XXvii;L8OGJr71i * :,, ,,: ,::ir@mingyi.irii:i:::j1jri7ZBOS7ivv, * ,::, ::rv77iiiriii:iii:i::,rvLq@huhao.Li * ,, ,, ,:ir7ir::,:::i;ir:::i:i::rSGGYri712: * ::: ,v7r:: ::rrv77:, ,, ,:i7rrii:::::, ir7ri7Lri * , 2OBBOi,iiir;r:: ,irriiii::,, ,iv7Luur: * ,, i78MBBi,:,:::,:, :7FSL: ,iriii:::i::,,:rLqXv:: * : iuMMP: :,:::,:ii;2GY7OBB0viiii:i:iii:i:::iJqL;:: * , ::::i ,,,,, ::LuBBu BBBBBErii:i:i:i:i:i:i:r77ii * , : , ,,:::rruBZ1MBBqi, :,,,:::,::::::iiriri: * , ,,,,::::i: @arqiao. ,:,, ,:::ii;i7: * :, rjujLYLi ,,:::::,:::::::::,, ,:i,:,,,,,::i:iii * :: BBBBBBBBB0, ,,::: , ,:::::: , ,,,, ,,::::::: * i, , ,8BMMBBBBBBi ,,:,, ,,, , , , , , :,::ii::i:: * : iZMOMOMBBM2::::::::::,,,, ,,,,,,:,,,::::i:irr:i:::, * i ,,:;u0MBMOG1L:::i:::::: ,,,::, ,,, ::::::i:i:iirii:i:i: * : ,iuUuuXUkFu7i:iii:i:::, :,:,: ::::::::i:i:::::iirr7iiri:: * : :rk@Yizero.i:::::, ,:ii:::::::i:::::i::,::::iirrriiiri::, * : 5BMBBBBBBSr:,::rv2kuii:::iii::,:i:,, , ,,:,:i@petermu., * , :r50EZ8MBBBBGOBBBZP7::::i::,:::::,: :,:,::i;rrririiii:: * :jujYY7LS0ujJL7r::,::i::,::::::::::::::iirirrrrrrr:ii: * ,: :@kevensun.:,:,,,::::i:i:::::,,::::::iir;ii;7v77;ii;i, * ,,, ,,:,::::::i:iiiii:i::::,, ::::iiiir@xingjief.r;7:i, * , , ,,,:,,::::::::iiiiiiiiii:,:,:::::::::iiir;ri7vL77rrirri:: * :,, , ::::::::i:::i:::i:i::,,,,,:,::i:i:::iir;@Secbone.ii::: */
喷火龙
/* * __----~~~~~~~~~~~------___ * . . ~~//====...... __--~ ~~ * -. \_|// |||\\ ~~~~~~::::... /~ * ___-==_ _-~o~ \/ ||| \\ _/~~- * __---~~~.==~||\=_ -_--~/_-~|- |\\ \\ _/~ * _-~~ .=~ | \\-_ '-~7 /- / || \ / * .~ .~ | \\ -_ / /- / || \ / * / ____ / | \\ ~-_/ /|- _/ .|| \ / * |~~ ~~|--~~~~--_ \ ~==-/ | \~--===~~ .\ * ' ~-| /| |-~\~~ __--~~ * |-~~-_/ | | ~\_ _-~ /\ * / \ \__ \/~ \__ * _--~ _/ | .-~~____--~-/ ~~==. * ((->/~ '.|||' -_| ~~-/ , . _|| * -_ ~\ ~~---l__i__i__i--~~_/ * _-~-__ ~) \--______________--~~ * //.-~~~-~_--~- |-------~~~~~~~~ * //.-~~~--\ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 神兽保佑 永无BUG */
蝙蝠
/* * ___====-_ _-====___ * _--^^^#####// \\#####^^^--_ * _-^##########// ( ) \\##########^-_ * -############// |\^^/| \\############- * _/############// (@::@) \############\_ * /#############(( \\// ))#############\ * -###############\\ (oo) //###############- * -#################\\ / VV \ //#################- * -###################\\/ \//###################- * _#/|##########/\######( /\ )######/\##########|\#_ * |/ |#/\#/\#/\/ \#/\##\ | | /##/\#/ \/\#/\#/\#| \| * ` |/ V V ` V \#\| | | |/#/ V ' V V \| ' * ` ` ` ` / | | | | \ ' ' ' ' * ( | | | | ) * __\ | | | | /__ * (vvv(VVV)(VVV)vvv) * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * * 神兽保佑 永无BUG */
甩葱少女
/* * _______________#########_______________________ * ______________############_____________________ * ______________#############____________________ * _____________##__###########___________________ * ____________###__######_#####__________________ * ____________###_#######___####_________________ * ___________###__##########_####________________ * __________####__###########_####_______________ * ________#####___###########__#####_____________ * _______######___###_########___#####___________ * _______#####___###___########___######_________ * ______######___###__###########___######_______ * _____######___####_##############__######______ * ____#######__#####################_#######_____ * ____#######__##############################____ * ___#######__######_#################_#######___ * ___#######__######_######_#########___######___ * ___#######____##__######___######_____######___ * ___#######________######____#####_____#####____ * ____######________#####_____#####_____####_____ * _____#####________####______#####_____###______ * ______#####______;###________###______#________ * ________##_______####________####______________ */
草泥马
/* * * ┏┓ ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃ ┃ * ┃ ━ ┃ ++ + + + * ████━████ ┃+ * ┃ ┃ + * ┃ ┻ ┃ * ┃ ┃ + + * ┗━┓ ┏━┛ * ┃ ┃ * ┃ ┃ + + + + * ┃ ┃ * ┃ ┃ + 神兽保佑 * ┃ ┃ 代码无bug * ┃ ┃ + * ┃ ┗━━━┓ + + * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ + + + + * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛+ + + + * */
草泥马2
/* * * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃... ⌒ ... ┃ * ┃ ┃ * ┗━┓ ┏━┛ * ┃ ┃ * ┃ ┃ * ┃ ┃ * ┃ ┃ 神兽保佑 * ┃ ┃ 代码无bug * ┃ ┃ * ┃ ┗━━━┓ * ┃ ┣┓ * ┃ ┏┛ * ┗┓┓┏━┳┓┏┛ * ┃┫┫ ┃┫┫ * ┗┻┛ ┗┻┛ */
全键盘
/* * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ * │Esc│ │ F1│ F2│ F3│ F4│ │ F5│ F6│ F7│ F8│ │ F9│F10│F11│F12│ │P/S│S L│P/B│ ┌┐ ┌┐ ┌┐ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ └┘ └┘ └┘ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ ┌───┬───┬───┬───┐ * │~ `│! 1│@ 2│# 3│$ 4│% 5│^ 6│& 7│* 8│( 9│) 0│_ -│+ =│ BacSp │ │Ins│Hom│PUp│ │N L│ / │ * │ - │ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ ├───┼───┼───┼───┤ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{ [│} ]│ | \ │ │Del│End│PDn│ │ 7 │ 8 │ 9 │ │ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ ├───┼───┼───┤ + │ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter │ │ 4 │ 5 │ 6 │ │ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ ├───┼───┼───┼───┤ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│ Shift │ │ ↑ │ │ 1 │ 2 │ 3 │ │ * ├─────┬──┴─┬─┴──┬┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ ├───┴───┼───┤ E││ * │ Ctrl│ │Alt │ Space │ Alt│ │ │Ctrl│ │ ← │ ↓ │ → │ │ 0 │ . │←─┘│ * └─────┴────┴────┴───────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ └───────┴───┴───┘ */
小键盘
/* * ┌─────────────────────────────────────────────────────────────┐ * │┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐│ * ││Esc│!1 │@2 │#3 │$4 │%5 │^6 │&7 │*8 │(9 │)0 │_- │+= │|\ │`~ ││ * │├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤│ * ││ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │{[ │}] │ BS ││ * │├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤│ * ││ Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │: ;│" '│ Enter ││ * │├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤│ * ││ Shift │ Z │ X │ C │ V │ B │ N │ M │< ,│> .│? /│Shift │Fn ││ * │└─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴┬─────┴───┘│ * │ │Fn │ Alt │ Space │ Alt │Win│ HHKB │ * │ └───┴─────┴───────────────────────┴─────┴───┘ │ * └─────────────────────────────────────────────────────────────┘ */
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步