当前位置: 首页 > news >正文

Sublime Text 基础教程(个人总结)

Sublime Text 是一款广受欢迎的代码编辑器,以其简洁的界面和强大的功能而著称。它支持多种编程语言,具有高效的代码编辑和管理功能。本教程将详细介绍如何使用 Sublime Text,从安装到高级使用技巧,帮助你充分利用这款工具。

目录

  1. 安装和配置
  2. 基本操作
  3. 代码编辑
  4. 插件管理
  5. 自定义语法和 Snippets
  6. 使用 Git
  7. 代码编译和运行
  8. 高级技巧
  9. 常用快捷键
  10. 常见问题和解决方案

1. 安装和配置

1.1 下载和安装

  1. 下载 Sublime Text

    • 前往 Sublime Text 官方网站。
    • 根据你的操作系统(Windows、macOS 或 Linux)选择合适的版本下载。
  2. 安装 Sublime Text

    • Windows:运行下载的安装程序,按照提示完成安装。
    • macOS:将下载的 Sublime Text.app 拖到 Applications 文件夹。
    • Linux:根据系统的包管理器安装,如使用 sudo apt-get install sublime-text(Ubuntu)或 sudo dnf install sublime-text(Fedora)。

1.2 配置 Sublime Text

  1. 打开 Sublime Text
  2. 配置 Sublime Text
    • 选择 Preferences -> Settings 打开配置文件。你会看到两个窗口:左边是默认配置,右边是用户配置。
    • 在右侧的用户配置文件中添加或修改设置。

示例配置:

{"font_size": 12,"ignored_packages": ["Vintage"],"theme": "Adaptive.sublime-theme","color_scheme": "Packages/Color Scheme - Default/Monokai.sublime-color-scheme","auto_complete": true,"word_wrap": true,"tab_size": 4,"translate_tabs_to_spaces": true
}

2. 基本操作

2.1 界面介绍

  • 菜单栏:包含文件、编辑、查找、查看、工具、项目、首选项等菜单。
  • 侧边栏:显示打开的文件和项目目录。可以通过 View -> Side Bar -> Show Side Bar 显示或隐藏。
  • 编辑区:主工作区,用于编写和查看代码。
  • 状态栏:显示当前文件的编码、行列位置等信息。

2.2 打开和保存文件

  • 打开文件

    • 使用菜单 File -> Open File...,或者使用快捷键 Ctrl + O
    • 还可以拖放文件到编辑器窗口中打开。
  • 保存文件

    • 使用菜单 File -> Save,或者使用快捷键 Ctrl + S
  • 另存为

    • 使用菜单 File -> Save As...,或者使用快捷键 Ctrl + Shift + S

2.3 多标签操作

  • 新建标签:使用菜单 File -> New File 或快捷键 Ctrl + N
  • 切换标签:使用快捷键 Ctrl + Tab,或点击标签栏进行切换。
  • 关闭标签:点击标签上的关闭按钮,或使用快捷键 Ctrl + W

3. 代码编辑

3.1 代码高亮

Sublime Text 支持多种编程语言的代码高亮,可以自动识别文件类型并应用相应的高亮规则。

示例:当你打开一个 Python 文件时,Sublime Text 会自动应用 Python 语法高亮。你也可以通过右下角的语言选择器手动切换文件类型。

3.2 自动补全

Sublime Text 提供智能代码补全功能,可以根据上下文自动补全代码。输入部分关键字后,按 Tab 键可以选择建议的补全项。

示例:输入 pri,然后按 Tab,Sublime Text 会自动补全为 print

3.3 代码折叠

代码折叠功能允许你折叠不需要查看的代码块,以保持代码的简洁。点击行号左侧的三角图标可以折叠或展开代码块。

示例:在一个长函数内,可以折叠其中的部分代码,使编辑时更加简洁。

3.4 多光标编辑

按住 Ctrl 键并点击鼠标左键可以添加多个光标,同时编辑多个位置的代码。使用 Ctrl + Shift + L 可以选择多行后进行多行编辑。

示例:需要在多行代码的末尾添加相同的内容时,可以使用多光标编辑,同时在所有行末尾输入内容。

3.5 搜索和替换

  • 快速搜索:按 Ctrl + F 打开搜索框,输入关键字进行搜索。
  • 替换:按 Ctrl + H 打开替换框,输入搜索和替换的关键字。
  • 文件内搜索:按 Ctrl + Shift + F 打开全局搜索框,可以在整个项目中搜索关键字。

示例:要在整个项目中将 foo 替换为 bar,可以使用全局搜索和替换功能。

4. 插件管理

4.1 安装 Package Control

  1. 打开 Sublime Text,按 `Ctrl + `` 打开控制台。
  2. 输入以下代码并按回车安装 Package Control:
    import urllib.request,os,hashlib; h = 'a0e3e7fd12b20a8b70121a5aa4c4e42f' + '8cf1e9e1'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler())); by = urllib.request.urlopen( 'https://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h) if dh != h else open(os.path.join(ipp, pf), 'wb' ).write(by))
    

4.2 使用 Package Control 安装插件

  1. Ctrl + Shift + P 打开命令面板。
  2. 输入 Package Control: Install Package 并回车。
  3. 输入你要安装的插件名称并选择安装。

4.3 常用插件推荐

  • Emmet:提高 HTML 和 CSS 编写效率的插件。

    • 安装:使用 Package Control 安装 Emmet
    • 使用:在 HTML 或 CSS 文件中,输入简写代码后按 Tab 键自动展开。例如,输入 div>ul>li*5 后按 Tab,会生成一个包含 5 个 li 元素的 div 结构。
  • SublimeLinter:代码语法检查插件。

    • 安装:使用 Package Control 安装 SublimeLinter 和相应语言的 linter 插件(如 SublimeLinter-pylint)。
    • 使用:在编写代码时,SublimeLinter 会自动检查代码语法,并在错误处显示提示。
  • GitGutter:在编辑器中显示 Git 修改状态。

    • 安装:使用 Package Control 安装 GitGutter
    • 使用:在编辑文件时,GitGutter 会在行号旁边显示修改状态,如新增、修改或删除的行。
  • BracketHighlighter:高亮匹配的括号和标签。

    • 安装:使用 Package Control 安装 BracketHighlighter
    • 使用:在编辑代码时,BracketHighlighter 会自动高亮匹配的括号、括弧和标签,方便代码阅读和调试。

5. 自定义语法和 Snippets

5.1 自定义语法

自定义语法高亮可以帮助你更好地阅读和编写代码。你可以通过编写 .sublime-syntax 文件来自定义语法。

示例:创建一个简单的自定义语法高亮文件。

  1. Packages/User 目录下创建一个名为 example.sublime-syntax 的文件。

  2. 在文件中输入以下内容:

    %YAML 1.2
    ---
    name: Example Syntax
    file_extensions:- example
    scope: source.examplecontexts:main:- match: \b(if|else|for|while|return)\bscope: keyword.control.example- match: \b(true|false|null)\bscope: constant.language.example- match: '"'scope: punctuation.definition.string.begin.examplepush: stringstring:- meta_scope: string.quoted.double.example- match: '"'scope: punctuation.definition.string.end.examplepop: true- match: '\\.'scope: constant.character.escape.example
    
  3. 保存文件,重新启动 Sublime Text。

5.2 自定义 Snippets

Snippets 是预定义的代码模板,可以通过快捷键快速插入。你可以自定义 Snippets 来提高编码效率。

示例 Snippet

  1. 选择 Tools -> Developer -> New Snippet...

  2. 输入以下内容并保存为 html_template.sublime-snippet

    <snippet><content><![CDATA[
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>${1:Document}</title>
    </head>
    <body>${0}
    </body>
    </html>
    ]]></content><tabTrigger>html5</tabTrigger><scope>text.html</scope>
    </snippet>
    
  3. 保存文件,重新启动 Sublime Text。

  4. 在 HTML 文件中输入 html5 并按 Tab 键,可以快速插入 HTML5 模板。

6. 使用 Git

6.1 安装 Git 插件

  1. 使用 Package Control 安装 Git 插件。
  2. 使用 Package Control 安装 GitGutter 插件。

6.2 基本 Git 操作

  • 初始化 Git 仓库

    • 打开命令面板,输入 Git: Init 并回车。
  • 提交更改

    • 打开命令面板,输入 Git: Add All 并回车,添加所有更改到暂存区。
    • 输入 Git: Commit 并回车,输入提交信息后提交更改。
  • 推送到远程仓库

    • 打开命令面板,输入 Git: Push 并回车,将本地提交推送到远程仓库。

6.3 查看 Git 状态

  • 查看文件修改状态

    • 在编辑文件时,GitGutter 会在行号旁边显示修改状态,如新增、修改或删除的行。
  • 查看提交历史

    • 打开命令面板,输入 Git: Log 并回车,可以查看提交历史。

7. 代码编译和运行

7.1 配置构建系统

Sublime Text 支持通过自定义构建系统来编译和运行代码。你可以为不同的编程语言配置不同的构建系统。

示例:配置一个简单的 Python 构建系统。

  1. 选择 Tools -> Build System -> New Build System...

  2. 输入以下内容并保存为 Python.sublime-build

    {"cmd": ["python3", "-u", "$file"],"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)","selector": "source.python","shell": true
    }
    
  3. 保存文件,选择 Tools -> Build System -> Python

7.2 编译和运行代码

  1. 打开要编译和运行的代码文件。
  2. Ctrl + B 编译和运行代码。
  3. 结果会显示在 Sublime Text 的输出窗口中。

示例:编译和运行一个简单的 Python 程序。

print("Hello, World!")

Ctrl + B,输出窗口中会显示 Hello, World!

8. 高级技巧

8.1 快捷键自定义

  1. 选择 Preferences -> Key Bindings 进入快捷键配置文件。
  2. 在用户配置文件中添加自定义快捷键。

示例配置

[{"keys": ["ctrl+alt+n"],"command": "new_file"},{"keys": ["ctrl+alt+o"],"command": "prompt_open_file"}
]

8.2 自定义 Snippets

Snippets 是代码片段,可以通过快捷键快速插入。你可以自定义 Snippets 来提高编码效率。

示例 Snippet

  1. 选择 Tools -> Developer -> New Snippet...

  2. 输入以下内容并保存为 html_template.sublime-snippet

    <snippet><content><![CDATA[
    <!DOCTYPE html>
    <html lang="en">
    <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>${1:Document}</title>
    </head>
    <body>${0}
    </body>
    </html>
    ]]></content><tabTrigger>html5</tabTrigger><scope>text.html</scope>
    </snippet>
    
  3. 保存文件,重新启动 Sublime Text。

  4. 在 HTML 文件中输入 html5 并按 Tab 键,可以快速插入 HTML5 模板。

8.3 项目管理

Sublime Text 支持项目管理,可以方便地管理和切换多个项目。

  • 新建项目:选择 Project -> Add Folder to Project... 添加项目文件夹,然后选择 Project -> Save Project As... 保存项目。
  • 切换项目:选择 Project -> Quick Switch Project 或使用快捷键 Ctrl + Alt + P

9. 常用快捷键

  • 文件操作

    • 新建文件:Ctrl + N
    • 打开文件:Ctrl + O
    • 保存文件:Ctrl + S
    • 另存为:Ctrl + Shift + S
    • 关闭文件:Ctrl + W
    • 切换标签:Ctrl + Tab
  • 编辑操作

    • 撤销:Ctrl + Z
    • 重做:Ctrl + Y
    • 剪切:Ctrl + X
    • 复制:Ctrl + C
    • 粘贴:Ctrl + V
    • 全选:Ctrl + A
  • 查找和替换

    • 查找:Ctrl + F
    • 替换:Ctrl + H
    • 文件内查找:Ctrl + Shift + F
  • 视图操作

    • 显示/隐藏侧边栏:Ctrl + K, Ctrl + B
    • 切换全屏:F11
    • 切换无干扰模式:Shift + F11
  • 多光标编辑

    • 添加多个光标:Ctrl + 鼠标左键
    • 选择多个行:Ctrl + Shift + L
    • 多光标选择下一个:Ctrl + D

10. 常见问题和解决方案

问题1:Sublime Text 启动慢

解决方案

  • 清理未使用的插件。
  • 检查配置文件中是否有影响性能的设置。

问题2:插件无法安装

解决方案

  • 检查网络连接是否正常。
  • 手动安装插件,将插件文件下载后放入 Installed Packages 目录。

问题3:代码高亮不正确

解决方案

  • 确认文件类型是否正确识别,可以在右下角切换文件类型。
  • 安装对应语言的插件,提升高亮支持。

通过本教程,你已经了解了如何从零基础开始使用 Sublime Text,从安装、基本操作、代码编辑到插件管理和高级技巧。希望本教程对你有所帮助!

相关文章:

Sublime Text 基础教程(个人总结)

Sublime Text 是一款广受欢迎的代码编辑器&#xff0c;以其简洁的界面和强大的功能而著称。它支持多种编程语言&#xff0c;具有高效的代码编辑和管理功能。本教程将详细介绍如何使用 Sublime Text&#xff0c;从安装到高级使用技巧&#xff0c;帮助你充分利用这款工具。 目录…...

线程安全 - 笔记

1 程序a调用c.so,程序b也调用c.so c.so加载两次吗? 在这种情况下,通常 c.so 不会被加载两次。 当一个程序调用一个共享对象文件(.so)时,操作系统的动态链接器将该共享对象映射到进程的虚拟内存空间中。后续由不同程序或者同一个程序调用相同的共享对象,都不会导致共享…...

分支机构多,如何确保文件跨域传输安全可控?

随着企业全球化发展&#xff0c;分支机构的分布越来越广泛&#xff0c;跨域文件传输需求也随之增加。然而&#xff0c;跨域文件传输面临的数据安全和传输效率问题&#xff0c;使得构建一个安全、可控的文件交换系统成为迫切需求。FileLink跨网文件交换系统通过综合的技术手段和…...

长安链使用Golang编写智能合约教程(二)

长安链2.3.0的go合约虚拟机和2.3.0以下的不兼容&#xff0c;编译的方式也有差异&#xff0c;所以在ide上做了区分。 教程三会写一些&#xff0c;其他比较常用SDK方法的解释和使用方法 教程一&#xff1a;&#xff08;长安链2.1.的版本的智能合约&#xff09; 教程三&#xff…...

jpom linux发布前端 ruoyi

前置条件 辅助安装 安装jdk curl -fsSL https://jpom.top/docs/install.sh | bash -s Server jdkonly-moduledefault 一键安装maven 后端必备 curl -fsSL https://jpom.top/docs/install.sh | bash -s Server mvnonly-moduledefault 一键安装node 前端必备 curl -fsSL http…...

K8S认证|CKA题库+答案| 15. 备份还原Etcd

目录 15、 备份还原Etcd CKA v1.29.0模拟系统 下载试用 题目&#xff1a; 开始操作: 1&#xff09;、切换集群 2&#xff09;、登录master并提权 3&#xff09;、备份Etcd现有数据 4&#xff09;、验证备份数据快照 5&#xff09;、查看节点和Pod状态 6&#xff0…...

软件架构设计属性之一:功能性属性浅析

文章目录 引言一、定义二、关键要素1. 需求满足2. 操作性3. 数据处理4. 业务流程支持5. 合规性 三、 设计原则1. 用户中心设计2. 模块化3. 抽象化4. 可扩展性5. 可维护性6. 设计原则的实施策略7. 设计原则的评估 四、实现策略1. 需求分析2. 功能分解3. 接口设计4. 技术选型5. 迭…...

学习Java的日子 Day48 函数,DOM

Day48 1.流程控制语句 if else for for-in(遍历数组时&#xff0c;跟Java是否一样) While do while break 语句用于跳出循环 continue 用于跳过循环中的一个迭代 2.函数 2.1 JavaScript 函数语法 函数就是包裹在花括号中的代码块&#xff0c;前面使用了关键词 function funct…...

Scikit-Learn朴素贝叶斯

Scikit-Learn朴素贝叶斯 1、朴素贝叶斯1.1、贝叶斯分类1.2、贝叶斯定理1.3、贝叶斯定理的推导1.4、朴素贝叶斯及原理1.5、朴素贝叶斯的优缺点2、Scikit-Learn朴素贝叶斯2.1、Sklearn中的贝叶斯分类器2.2、Scikit-Learn朴素贝叶斯API2.3、Scikit-Learn朴素贝叶斯实践(新闻分类与…...

网页设计步骤总结

第一步&#xff1a;css重置 https://blog.csdn.net/BradenHan/article/details/132122504 第二步&#xff1a;媒体查询不同尺寸加载不同的css文件https://blog.csdn.net/Yi_Lesama/article/details/131184469 <!-- link元素中的CSS媒体查询 --> <link rel"styl…...

第十三期Big Demo Day亮点项目:CCarbon重塑碳交易生态,助力全球绿色发展

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。我们荣幸地宣布&#xff0c;利用区块链技术优化全球碳交易CCarbon项目将亮相&#xff0c;参与精彩的项目路演。本次活动由ZeeprLabs、BiKing Exchange、Gather冠名赞助&#xff0c;Central Rese…...

python基础知识总结(第一节)

一、python简介&#xff1a; Python是一种解释型&#xff0c;面向对象的高级语言。 Pyhton的语法和动态类型&#xff0c;以及解释性语言的本质&#xff0c;使它一跃成为多数平台上写脚本和快速开发应用的编程语言。 python语言百度百科介绍 二、Python基础语法&#xff1a;…...

DOS学习-目录与文件应用操作经典案例-comp

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一.前言 二.使用 三.案例 案例 1: 基本比较 案例 2: 十进制显示差异 案例 3: 字符形式显…...

原神抽卡点名程序教程(直接下载用)

今天我要给大家分享一个在抖音上特别火的视频——原神抽卡点名程序教程。 废话不多说&#xff0c;直接上链接 &#xff1a;--点击下载原神抽卡程序 步骤1&#xff1a; 步骤2&am…...

gpt-4o继续迭代考场安排程序 一键生成考场清单

接上两篇gpt-4o考场安排-CSDN博客&#xff0c;考场分层次安排&#xff0c;最终exe版-CSDN博客 当然你也可以只看这一篇。 今天又添加了以下功能&#xff0c;程序见后。 1、自动分页&#xff0c;每个考场打印一页 2、添加了打印试场单页眉 3、添加了页脚 第X页&#xff0c;…...

php 设置时区

date_default_timezone_set() 设置所有日期/时间函数使用的默认时区 除了在脚本中使用此函数设置默认时区&#xff0c;还可以使用 INI 设置 date.timezone 设置默认时区。 参数 timezoneId 时区标识符&#xff0c;像 UTC、Africa/Lagos、Asia/Hong_Kong 或 Europe/Lisbon。…...

ArcGIS不同图斑设置不同的透明度

对于设置一个图层的整体的透明度&#xff0c;我们在 ArcGIS制作带蒙版的遥感影像地图http://mp.weixin.qq.com/s?__bizMzIzNjM2NTYxMg&mid2247509080&idx1&sn38dccf0a52bb3bb3758f57114ee38b72&chksme8da161bdfad9f0d363da90959a8524dcf2b60d0e8d999f8ebeef0…...

前端 CSS 经典:图片边框

前言&#xff1a;有这么一个业务&#xff0c;需要边框随着图片宽度的变化而变化&#xff0c;比如一些聊天的气泡框等。 实现原理&#xff1a;使用 border-image 属性 效果图&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html lang"en"><he…...

异常有什么,异常类有什么

在Java中&#xff0c;异常&#xff08;Exception&#xff09;是一种在程序运行过程中出现的不正常情况。异常机制提供了一种从错误中恢复的途径。异常分为两大类&#xff1a;检查异常&#xff08;Checked Exception&#xff09;和运行时异常&#xff08;Runtime Exception&…...

如何解压忘记了密码的加密zip压缩包?这两个方法收藏好!

加密是一种保护信息不被未经授权访问的重要手段。ZIP压缩包作为一种常见的文件压缩格式&#xff0c;zip文件加密是很多人都回去做的一件事情&#xff0c;那么zip加密文件如何解密&#xff1f;有几种方法可以解密呢&#xff1f;今天介绍几种方法给大家。 一、尝试常用密码 我们…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

归并排序:分治思想的高效排序

目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法&#xff0c;由约翰冯诺伊曼在1945年提出。其核心思想包括&#xff1a; 分割(Divide)&#xff1a;将待排序数组递归地分成两个子…...

Java并发编程实战 Day 11:并发设计模式

【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天&#xff0c;今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案&#xff0c;它们不仅提供了优雅的设计思路&#xff0c;还能显著提升系统的性能…...

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件&#xff0c;同步使用QTableWidgetItem进行单元格的设置&#xff0c;最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...

GitHub 常见高频问题与解决方案(实用手册)

1.Push 提示权限错误&#xff08;Permission denied&#xff09; 问题&#xff1a; Bash Permission denied (publickey) fatal: Could not read from remote repository. 原因&#xff1a; 没有配置 SSH key 或使用了 HTTPS 而没有权限…...