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 │
* │ └───┴─────┴───────────────────────┴─────┴───┘ │
* └─────────────────────────────────────────────────────────────┘
*/