为了账号安全,请及时绑定邮箱和手机立即绑定
1. 脚本插件

脚本插件就是我们在.gradle文件 [例如 demo.gradle ]中定义自己的编译任务。在项目中的build.gradle文件中通过apply from:'demo.gradle'就可以使用这个脚本插件。下面我们以输出项目名称为例子,来简单学习脚本插件,一般我们将脚本插件写在项目的根目录下,项目目录结构如下:

6. 运行 Kotlin 脚本

Kotlin 也可以用作脚本语言。脚本是具有顶层可执行代码的 Kotlin 源文件(.kts)。实例:实现一个输出当前目录所有文件的 kotlin 脚本(-dir 后跟目录):import java.io.Fileval filePath = if(args.contains("-dir")) args[1 + args.indexOf("-d")] else "."File(filePath).listFiles { file -> println(file) return@listFiles true}要运行脚本,我们只需使用相应的脚本文件将 -script 选项传递给编译器。kotlinc -script read_files.kts -- -dir xxx从 Kolint 1.3.0 开始,Kotlin 对脚本定制提供了实验性支持,例如添加外部属性、提供静态或动态依赖关系等。自定义由所谓的 脚本定义 带有适当支持代码的带注释的 kotlin 类定义。脚本文件扩展名用于选择适当的定义。当适当的 jar 文件包含在编译类路径中时,会自动检测并正确应用正确编写的脚本定义。或可以使用编译器的 -script-templates 选项来手动定义:kotlinc -script-templates org.example.CustomScriptDefinition -script custom.script1.kts

2. 脚本的执行顺序

在 Postman 中,对于一个单一请求,脚本执行顺序如下:跟请求相关的请求前脚本会在请求发送之前执行;跟请求相关的测试脚本会在请求发送之后执行。对于一个集合中的每个请求,脚本执行顺序如下:跟集合相关的“请求前脚本”会在集合中任意请求之前执行;跟文件夹相关的“请求前脚本”会在该文件夹中的任意请求之前执行;跟集合相关的“测试脚本”会在集合中任意请求之后执行;跟文件夹相关的“测试脚本”会在该文件夹中的任意请求之后执行;对于集合中的每个请求,脚本将始终按照以下层次结构运行:集合级别的脚本 -> 文件夹级别的脚本 -> 请求级别的脚本;注意,这个执行顺序同时适用于请求前脚本和测试脚本。例如,假设你有如下集合,包含一个文件夹,该文件夹中有两个请求:如果你在集合、文件夹和请求的“请求前脚本”和“测试脚本”部分中创建了日志输出脚本,那么在 Postman 控制台中你就会清楚的看到脚本的执行顺序:是不是很神奇?为什么这里可以运行脚本? 这是因为 Postman 沙箱的原因。Postman 沙箱是一个JavaScript 执行环境,在给请求编写“请求前脚本”和“测试脚本”时会用到它(在 Postman 和 Newman )。你在 Postman 和 Newman 写的任何脚本都会在沙箱中执行。

2.2 直接指定脚本文件名称

[root@shell workspace]# lltotal 4-rw-r--r-- 1 root root 44 Sep 3 14:16 01-scripts.sh[root@shell workspace]# . ./01-scripts.sh-bash: ./01-scripts.sh: Permission denied[root@shell workspace]# chmod +x 01-scripts.sh [root@shell workspace]# lltotal 4-rwxr-xr-x 1 root root 44 Sep 3 14:16 01-scripts.sh[root@shell workspace]# . ./01-scripts.sh this is my first script[root@shell workspace]# /workspace/01-scripts.sh this is my first script利用直接在终端指定脚本文件名称方式执行,此种方式需要为脚本添加可执行权限,在当前 Shell 来执行,不启动子 Shell,利用此种方式执行脚本的解释器为脚本内的第一行指定的解释器,例如此例中为#!/bin/bash,利用. 命令来执行脚本,一般用在当前目录没有在 PATH 中,所以第二个./ 是用来表示当前目录的。

2. 创建 CMake 构建脚本

要创建一个可以用作 CMake 构建脚本的纯文本文件,请按以下步骤操作:从 IDE 的左侧打开 Project 窗格,然后从下拉菜单中选择 Project 视图。右键点击 your-module 的根目录,然后依次选择 New > File。输入 CMakeLists.txt 作为文件名,然后点击 OK。现在,我们可以通过添加 CMake 命令来配置我们的构建脚本。要指示 CMake 根据原生源代码创建原生库,请向我们的构建脚本添加 cmake_minimum_required() 和 add_library() 命令:# Sets the minimum version of CMake required to build your native library.# This ensures that a certain set of CMake features is available to# your build.cmake_minimum_required(VERSION 3.4.1)# Specifies a library name, specifies whether the library is STATIC or# SHARED, and provides relative paths to the source code. You can# define multiple libraries by adding multiple add_library() commands,# and CMake builds them for you. When you build your app, Gradle# automatically packages shared libraries with your APK.add_library( # Specifies the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/native-lib.cpp )在使用 add_library() 向 CMake 构建脚本添加源代码文件或库时,Android Studio 还会在我们同步项目后在 Project 视图中显示相关的头文件。不过,为了让 CMake 能够在编译时找到头文件,我们需要向 CMake 构建脚本添加 include_directories() 命令,并指定头文件的路径:add_library(...)# Specifies a path to native header files.include_directories(src/main/cpp/include/)CMake 使用 liblibrary-name.so 这样的规范来为库文件命名。例如,如果我们在构建脚本中指定 native-lib 作为共享库的名称,CMake 就会创建一个名为 libnative-lib.so 的文件。不过,在 Java 代码中加载此库时,要使用在 CMake 构建脚本中指定的名称:static { System.loadLibrary("native-lib");}

5. 测试脚本

你还可以用 JavaScript 为 Postman API 请求编写测试脚本。测试脚本能确保你的请求按预期工作,确保后台服务之间的集成运行可靠,验证新开发的功能没有破坏之前已存的功能。当 API 出现问题时,还可以使用测试脚本帮你调试程序。比如,你可以编写一个测试脚本,通过发送不完整的数据给请求来验证请求的错误处理。可以向单个请求、文件夹和集合添加测试脚本。Postman 里包含一些脚本你可以通过点击来增加,然后根据需求来修改里面的逻辑。要给请求添加测试代码,跟上面添加“请求前脚本”一样,打开请求,并在 “Tests” 选项卡中添加代码。在 “Test Results” 选项卡中看到输出。

3.2 编辑启动脚本

MacOS 默认的 shell 是bash,启动脚本是 ~/.bash_profile, 如果你的shell和我一样是zsh,那么启动脚本就是 ~/.zshrc, 以bash为例,使用vim编辑器编辑启动脚本:vim ~/.bash_profile输入字母i切换到输入模式,在启动脚本下添加如下两行命令:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Homeexport PATH=$JAVA_HOME/bin:$PATH第一行命令是设置一个名为 JAVA_HOME的环境变量,它指向 Java 的安装目录。第二行命令是将 JAVA_HOME 的bin目录附加到系统变量的 PATH上,这样,bin目录下的很多可执行文件就被系统加载了。最后保存并退出启动脚本,切换到底线命令模式(敲击esc按键 ,输入 :),输入wq,敲击回车按键。

3. 编写“请求前脚本”

在 Postman 中可以使用“请求前脚本”在请求运行前执行 JavaScript。通过在请求、集合或文件夹的 “Pre-request Script” 选项卡中编写代码,就可以为请求执行一些预处理,比如设置变量值、参数、头和主体数据。可以使用“请求前脚本”来调试代码,比如将数据输出到控制台。下面是使用“请求前脚本”的一个例子:在一个集合中有一系列请求,要求按顺序执行它们;第二个请求依赖第一个请求返回来的值;在将返回来的值传递给第二个请求之前需要做些处理;第一个请求将响应中的值写到“测试脚本”中的变量中;第二个请求在“请求前脚本”中拿到并处理这个变量,然后再把处理后的变量设置为另一个变量。

3. Scripting Console 脚本控制台

脚本控制台可用于编写简单的脚本,通过访问 IntelliJ 平台 API,自动执行 PyCharm 功能并提取各种信息。所以,可以将它视为插件的轻量级替代方法,从而添加或修改 IDE 的一些行为。默认情况下,它支持用JavaScript和Groovy编写的脚本,也需要对 intellij_platform API有足够深的理解,建议有相关背景知识的同学可以 参考 做尝试。PyCharm 对于我们大多数人来说就是IDE工具,除非特殊需要,很少对IDE本身功能做更多操作,所以本节只做简单的介绍,知道有这样一个功能就可以了。从主菜单中选择 Tools -> IDE Scripting Console;选择所需的脚本语言。这些脚本存储在IDE的配置目录中(比如: ~/Library/Application Support/JetBrains/PyCharm2020.1/consoles/ide)。文件也可以在"Project"工具窗口中的Scratches and Consoles -> PyCharm Consoles 看到它们。

7. gradlew 和 gradlew.bat 文件

这两个文件其实就是 Gradle 启动的脚本文件,我们可以使用gradlew命令来打包相当于gradle命令。关于gradle的命令我们后面有一节专门介绍。这节我们看下这两个文件的区别,以及怎么使用gradlew命令。下面我们看看这两个文件的前面几行:gradlew 文件#!/usr/bin/env sh################################################################################## Gradle start up script for UN*X################################################################################gradlew.bat 文件@if "%DEBUG%" == "" @echo off@rem ##########################################################################@rem@rem Gradle startup script for Windows@rem@rem ##########################################################################通过上面的注释我们可以看到,原来这两个文件的作用是你一样的,都是 Gradle 启动的脚本文件,不过gradlew文件是 Linux 系统或是 Unix 系统的脚本文件,而gradlew.bat是 Windows 系统的脚本文件。使用 gradlew 命令,以 clean 命令为例,我们只需要在 AndroidStudio下输入如下命令://Windows系统gradlew clean//Linux系统或是Mac系统./gradlew cleanTips: 我们可能在 MAC 或是 Linux 系统中遇到bash: ./gradlew: Permission denied这个错误,这是因为没有权限。我们只需要执行chmod +x gradlew这个命令后,再执行./gradlew clean命令就 OK 了。

3.1 脚本传递

脚本传递参数,就是在运行脚本的时候通过位置参数传递进脚本内,每个参数利用一个空格来进行分割,如果传递的参数本身就有空格,则可以利用 "" 来引起来,作为一个整体传递,在脚本内通过 $n 来获取。[root@master Shell_args]# cat args1.sh #!/bin/bashecho "第一个参数为: $1"echo "第二个参数为: $2"echo "脚本名称为: $0"[root@master Shell_args]# bash args1.sh go "python Shell java"第一个参数为: go第二个参数为: python Shell java脚本名称为: args1.sh例如我们第二个参数为一个带有空格的多个字符串,我们可以用双引号引起来作为一个位置参数进行传入。

1.2 Shell 脚本结构

Shell 脚本在其中的第一行需要有指明解释器,在上面 CLI Shell 中的那些解释器,都可以写,在以./install_mysql.sh 的时候,此时就是利用脚本中第一行的解释器来运行脚本,其格式为#!Shell解释器,例如#!/bin/bash, 但是这种方式存在一定的局限性,我们推荐使用 env 环境变量中的 bash,推荐使用这种方式#!/usr/bin/env bash。

2.1 在 gradle 文件中添加脚本

我们还是以上面的输出模块名称为例,我们定义一个PluginInGradleScript的类实现Plugin接口://app 模块下build.gradleclass PluginInGradleScript implements Plugin<Project> { @Override void apply(Project target) { target.task('showProjectName'){ doLast { println("PluginInGradleScript:Module Name is $target.name") } } }}引用该插件,引用自定义插件时我们使用apply plugin语句,记住这句还是要在 build.gradle 的最上面两行,具体如下:apply plugin: PluginInGradleScript我们到这里就已经将插件引用到项目中了,下面我们还是执行命令,看看定义的插件能否正常输出 module name。$ gradle showProjectName> Task :app:showProjectNamePluginInGradleScript:Module Name is appDeprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.Use '--warning-mode all' to show the individual deprecation warnings.See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warningsBUILD SUCCESSFUL in 1s1 actionable task: 1 executed如上所示,我们就成功定义了一个对象插件,这种定义方式适合项目中比较小巧的,简单的一些功能插件。较复杂的还是不建议这种定义方式。

1.2 创建一个Ruby脚本

在命令行中输入一个命令:创建一个hello_world.rb脚本(Ruby的脚本都是.rb后缀的),并在其增加一行输出“Hello World”的代码。$ echo "puts \"Hello World\"" > hello_world.rb在命令行下,我们需要使用ruby命令才可以运行Ruby脚本。$ ruby hello_world.rb Hello World我们可以看到,运行脚本命令的下方输出了我们想要的 “Hello World”,hello_world.rb就是一个最简单的 Ruby 脚本。运行 hello_world.rb 脚本使用vim可以编辑 Ruby 脚本。下面是执行 $ vim hello_world.rb后显示的内容:使用 Vim 编辑 Ruby 脚本经验:在 Ruby 开发中,虽然有很多种编辑器都可以进行开发,不过我更推崇的是使用Vim编辑器开进行Ruby 开发,对 Vim 以及指法熟悉之后,开发效率照常规程序员会高出很多很多。

4. 在版本工具下管理文件

主菜单:View -> Tool Windows -> Commit, 打开 Local Changes. 可以选择文件增加/排除到版本库。根据 Project 窗口中文件颜色,可知道文件的状态。可以在编辑器中修改文件时跟踪对文件的更改。所有更改都用更改标记突出显示在修改行旁边的侧边栏处。( 前提是文件已经提交过远程存储库,然后在本地又更新了文件)Tips: 当文件被提交后,标记也会自动消失。如果删除受版本控制的文件,则在提交更改之前,该文件仍然存在于存储库中。已删除的文件将放置在活动更改列表中,并突出显示为灰色,直到再次提交,才会真正删除。(在"项目"工具窗口中选择一个文件,然后按⌦,或选择从上下文菜单中删除, 同样需要文件提交过远程库 )。提供多种文件比较方式将修改后的文件与存储库版本进行比较将文件的当前修订版与同一分支中的选定修订版本进行比较将文件的当前修订版与其他分支进行比较

在 PyCharm 里使用版本控制

软件开发是在一定周期内完成特定的任务,在这期间要创建许多不同类型的文件,也需要记录和跟踪项目中各文件内容的修改变化,为了提高效率,我们希望这类操作是自动进行的,这时就需要版本控制工具。本节的主要内容是介绍PyCharm 支持哪些版本控制工具,都有哪些常用功能。

1. 概述

CMake 构建脚本是一个纯文本文件,我们必须将其命名为 CMakeLists.txt,并在其中包含 CMake 构建我们的 C/C++ 库时需要使用的命令。如果我们的原生源代码文件还没有 CMake 构建脚本,我们需要自行创建一个,并在其中包含适当的 CMake 命令。下面我们将学习应该在构建脚本中包含哪些基本命令,以便指示 CMake 在创建原生库时使用哪些源代码文件。如需了解详情,请参阅介绍 CMake 命令的官方文档。

3.3 上传脚本文件到远程服务器

在本地计算机上,在 project 工具窗口中,选择文件,右键单击选择并选择 Deployment -> upload to 远程连接名,然后查看 Fi 检查文件传输对话框窗口,确保本地计算机中的文件上载到远程服务器。

6. 编写测试脚本

测试脚本会在 API 收到响应之后执行。要验证返回的结果是否正确,你可以使用 pm.response 对象。可以使用 pm.test 方法,提供一个名称和函数,该函数会返回一个布尔值(true 或者 false) 指示测试时成功还是失败。还可以在断言中使用 ChaiJS BDD 语法和 pm.expect 来测试响应细节。pm.test 的第一个参数用来标识这个测试脚本,会出现在测试结果输出中。例如,在 “Tests” 选项卡中为任一请求输入一下内容,以测试响应状态代码是否为200。pm.test("Status test", function () { pm.response.to.have.status(200);});点击“发送”运行请求,并在响应部分打开 “Test Results” 选项卡,在选项卡标题中显示了运行了几个测试有几个通过了。代码还可以测试请求环境,如下所示:pm.test("environment to be production", function () { pm.expect(pm.environment.get("env")).to.equal("production");});pm.test("response should be okay to process", function () { pm.response.to.not.be.error; pm.response.to.have.jsonBody(""); pm.response.to.not.have.jsonBody("error");});使用定制响应数据格式的语法来验证请求响应的有效性:pm.test("response must be valid and have a body", function () { pm.response.to.be.ok; pm.response.to.be.withBody; pm.response.to.be.json;});测试脚本可以包含任意数量的测试,当点击保存的时候,测试脚本会随请求详情一起被保存。

1.3 Shell 脚本是什么

我们知道了 Shell 是一个用户与 Linux 系统内核的通讯的桥梁后,那么 Shell 脚本是什么呢?Shell 脚本就是操作 Shell 的指令集合编写成的一段实现目的需求的代码,也为一种管理 Linux 系统的脚本语言,我们可以简单地将其理解为,Linux 的各种指令加上一些流程控制和数据的集合,因为它还有不少的语法及格式,后面我们来通过学习,详细剖析其内在精髓。

1. 插入页眉页脚

编写 Word 文档时除了正文内容外,还有一部分也很关键,就是页眉和页脚,通常我们习惯在页眉处加入公司名称或 logo,在页脚添加页码或其他声明信息。在软件中编辑页眉和页脚如下图所示。对于文档通篇页眉页脚内容一致的情况下可以使用软件完成编辑,但如果页眉和页脚在不同页中有不同展示效果,比如奇数页和偶数页显示不同的内容,很明显手动编辑的方式就不再适用了,这时可以通过 python-docx 模块编辑页眉和页脚。

1.2 插入页脚

为文档 info.docx 设置页脚,代码如下:from docx import Documentdocument = Document("C:/info.docx") footer = document.sections[0].footer # 获取第一个节的页脚footer.add_paragraph('这是第一节的页脚') # 为第一页添加页脚document.save('C:/info.docx')代码解释:代码中首先读取上一小节中完成的 info.docx 文档,加载完成后,获取文档中 sections 部分,索引为 0 即获取第一部分,根据 footer 属性获取页脚,在页脚插入段落。运行后代码后 info.docx 文档的页脚效果如下图所示。

2.1 什么叫站点的文件结构?

一个网站站点不可能只有 HTML 页面,可能还有 JSP 页面,ASP 页面,CSS 页面,Javascript 脚本文件,图片文件,Gif 图片文件等。那么如何在一个站点(这里特指站点的“文件集中地”含义)下去归类管理这些不同种类的文件呢?这就涉及到了我们接下来要将的文件的站点结构。文件的站点结构就是将不同类型的文件,按功能相同/类型相同等共性,分类地存储在站点下。比如,我的网站主要以页面文件,图片文件,脚本文件,样式表文件四个部分组成。那么我就可以按照这种方式,在网站站点下创建四个文件夹pages,images,scripts,css。

4. 在请求发送前运行脚本

为了在请求发送前运行脚本,打开请求并点击 “Pre-request Script” 选项卡,如下图所示:在请求执行前输入你想运行的代码:当你点击“发送”,这些代码会在请求发送之前被执行。

2.3 生成 JSON 文件

现在让我们将一个哈希转换成 JSON 文件。require 'json'data = { Shandong: [ "Jinan", "Qingdao", "Zibo" ], Guangdong: [ "Guangzhou", "Shenzhen", "DongGuan" ], Liaoning: [ "Shenyang", "Dalian", "Jinzhou" ]}f=File.new("temp2.json","w+")f.puts(data.to_json)f.close运行完代码后,我们可以在脚本所在目录找到 temp2.json 的文件。格式为:{:Shandong=>["Jinan", "Qingdao", "Zibo"], :Guangdong=>["Guangzhou", "Shenzhen", "DongGuan"], :Liaoning=>["Shenyang", "Dalian", "Jinzhou"]}Tips:上述的方法生成的 JSON 都在一行,使用JSON.pretty_generate(data)可以让 JSON 直接格式化。f.puts(JSON.pretty_generate(data)) # 将倒数第二行进行替换得到的文件被格式化:{ "Shandong": [ "Jinan", "Qingdao", "Zibo" ], "Guangdong": [ "Guangzhou", "Shenzhen", "DongGuan" ], "Liaoning": [ "Shenyang", "Dalian", "Jinzhou" ]}

2. 项目文件

当你创建一个新的项目,PyCharm 会自动生成一个 .idea 文件夹。这个文件夹的主要作用在于存放项目的控制信息,包括版本信息,历史记录等等。.idea 目录在项目视图中是不可见的的, 如果要看到 .idea 目录的内容,可以选择 “Project” 工具栏, 点击下右侧的箭头, 选择 Project Files:下面是 .idea 目录中的内容:我们分别来看下这几个文件都有哪些作用:.iml 文件:描述项目结构;workspace.xml 文件:包含与工作区相关的参数与选项;xml 文件:每个 xml 文件负责其自己的设置集,可以通过其名称识别:projectCodeStyle.xml、encoding.xml、vcs.xml 等等。Tips:.idea 目录中的所有设置文件都应置于版本控制之下,但存储本地信息的 workspace.xml 除外。workspace.xml 文件应标记为忽略。(具体方法会在版本控制的章节详细说明)

1. 概述

如需添加我们的原生库项目作为 Gradle 构建依赖项,我们需要向 Gradle 提供 CMake 或 ndk-build 脚本文件的路径。当我们构建应用时,Gradle 会运行 CMake 或 ndk-build,并将共享的库打包到我们的 APK 中。Gradle 还会使用构建脚本来了解要将哪些文件添加到我们的 Android Studio 项目中,以便我们可以从 Project 窗口访问这些文件。如果我们没有原生源代码文件的构建脚本,则需要先创建 CMake 构建脚本,然后再继续。Android 项目中的每个模块只能关联到一个 CMake 或 ndk-build 脚本文件。例如,如果我们想要构建并打包来自多个 CMake 项目的输出,就需要使用一个 CMakeLists.txt 文件作为顶级 CMake 构建脚本(然后将 Gradle 关联到该脚本),并添加其他 CMake 项目作为该构建脚本的依赖项。同样,如果我们使用的是 ndk-build,则可以在顶级 Android.mk 脚本文件中包含其他 Makefile。

2.1 脚注、尾注的声明

2.1.1 添加引用的描述要增加脚注(尾注),首先需要在文章的适当位置增加引用的描述,形如:[^引用ID]: 说明文字。实例 1:脚注的声明。[^footnote]: 此处是 **脚注** 的 *文本内容*。注意,此步完成后,不会有渲染的内容输出,必须将引用添加到内容中才有显示。2.1.2 引用部位添加引用注释在需要增加引用标记的内容后面增加 [^引用ID]。实例 2:完整的脚注。这里有一个脚注[^脚注ID1]。这里有一个脚注[^脚注ID2]。[^脚注ID1]: 此处是 **脚注** 的 *文本内容*。[^脚注ID2]: 此处是 **脚注** 的 *文本内容*。该内容会被渲染成:可以看到脚注的标号会自动编号。其 Html 代码为:<p>这里有一个脚注<sup class="md-footnote"><a href="#dfref-footnote-1" name="ref-footnote-1">1</a></sup>。</p> <p>这里有一个脚注<sup class="md-footnote"><a href="#dfref-footnote-2" name="ref-footnote-2">2</a></sup>。</p> <div class="footnotes-area"> <hr /> <div class="footnote-line"> <span class="md-fn-count">1</span> 此处是 <strong>脚注</strong> 的 <em>文本内容</em>。 <a name="dfref-footnote-1" href="#ref-footnote-1" title="回到文档" class="reversefootnote">↩</a> </div> <div class="footnote-line"> <span class="md-fn-count">2</span> 此处是 <strong>脚注</strong> 的 <em>文本内容</em>。 <a name="dfref-footnote-2" href="#ref-footnote-2" title="回到文档" class="reversefootnote">↩</a> </div></div> 在 Markdown 中,尾注和脚注的声明方式是一样的,区别在于是否把引用的描述部分写到了文章的最末尾。由于 Markdown 在一些特定渲染输出的情况下(比如:PDF)才有分页的概念,所以我们优先采用尾注的形式,也就是将注释内容写到文章末尾。

HTML 文件基本结构

HTML 文件和普通文本文件不一样的地方还在于,我们如果想在 HTML 文件当中编写网页的内容,我们不仅要遵循 HTML 的语法,我们还必须按照 HTML 文件的结构来编写我们的代码,只有我们按照规定的结构来编写代码,才能达到我们想要的效果。

2.1 设置文件 icon

一个好的文件 icon 可以更快的让我们更快的分辨哪个文件是哪一个类型的,从此敲代码就变成一种享受!Preferences > Package Control > Install Packages,支持模糊搜索 a file, 点击 A File Icon 下载即可。

首页上一页1234567下一页尾页
直播
查看课程详情
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号