《vite+vue3實現(xiàn)網(wǎng)頁版編輯器,帶高亮以及代碼提示(以SQL語言為例)》
## 引言:探索Vite與Vue3結(jié)合構(gòu)建高效Web應(yīng)用
隨著前端技術(shù)的飛速發(fā)展,Vite和Vue3已成為現(xiàn)代Web開發(fā)領(lǐng)域的熱門工具。Vite以其快速冷啟動、熱更新等特性讓開發(fā)者享受前所未有的開發(fā)體驗;而Vue3則憑借其優(yōu)秀的組件化設(shè)計與Composition API,極大地提高了開發(fā)效率和代碼可維護性。本文將引導(dǎo)您如何利用這兩者搭建一款功能齊全、性能卓越的網(wǎng)頁版SQL編輯器,包括代碼高亮顯示及智能提示等功能。
## 一、項目初始化與環(huán)境配置
### 1. 創(chuàng)建項目
首先,確保已安裝Node.js和npm。然后通過Vite創(chuàng)建一個基于Vue3的新項目:
```bash
npm create vite@latest my-sql-editor --template vue
cd my-sql-editor
npm install
```
### 2. 安裝相關(guān)依賴
為了實現(xiàn)實時語法高亮和代碼提示,我們需要借助`codemirror`庫及其SQL相關(guān)的插件:
```bash
npm install codemirror @codemirror/lang-sql
```
## 二、編寫基礎(chǔ)HTML結(jié)構(gòu)與Vue組件
### 1. 在App.vue中引入CodeMirror
```html
<template>
<div id="app">
<textarea ref="editor"></textarea>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref } from 'vue';
import CodeMirror from 'codemirror';
onMounted(() => {
const editor = CodeMirror.fromTextArea(
document.querySelector('textarea'),
{
mode: 'text/x-sql',
lineNumbers: true,
theme: 'dracula', // 更多主題可以自定義選擇
}
);
});
</script>
```
此處我們已在App.vue中引入并初始化了一個基本的CodeMirror編輯器,并設(shè)置SQL模式以支持初步的語義高亮。
## 三、實現(xiàn)SQL代碼高亮
上述代碼已經(jīng)實現(xiàn)了基礎(chǔ)的SQL高亮,CodeMirror內(nèi)置了對SQL的支持。但為了讓效果更佳,我們可以進一步優(yōu)化配置項,如添加SQL關(guān)鍵字高亮等。
### 高級配置示例:
```javascript
import '@codemirror/theme-dracula'; // 引入主題樣式
import { Extension } from '@codemirror/state';
const sqlExtensions: Extension[] = [
// SQL語言插件
langSql(),
// 添加代碼行號
lineNumbers(),
// 設(shè)置主題
EditorView.theme({
'&': { background: '#282a36' },
'.cm-comment': { color: '#6272a4' }, // 注釋顏色
'.cm-keyword': { color: '#ff79c6' }, // 關(guān)鍵字顏色
// ...其他樣式自定義
}),
];
onMounted(() => {
const editor = CodeMirror.fromTextArea(
document.querySelector('textarea'),
{
extensions: sqlExtensions,
}
);
});
```
## 四、實現(xiàn)SQL代碼提示
CodeMirror并沒有直接提供SQL的自動補全功能,但我們可以通過自定義擴展來實現(xiàn)。這里我們使用`hint`和`autocomplete`插件配合自定義數(shù)據(jù)源實現(xiàn)SQL代碼提示。
### 實現(xiàn)代碼提示功能:
```javascript
// 假設(shè)我們有一個包含所有SQL關(guān)鍵字和函數(shù)的數(shù)組
const sqlKeywords = ['SELECT', 'FROM', 'WHERE', 'LIKE', /*...*/ ];
function sqlHint(cm: EditorView) {
let cur = cm.state.field(EditorState.cursor).head;
let token = cm.getTokenAt(cur);
if (token.string.startsWith('@')) { // 示例:針對特定字符開頭觸發(fā)提示
let list: string[] = [];
for (let keyword of sqlKeywords) {
if (keyword.startsWith(token.string.slice(1))) {
list.push(keyword);
}
}
return {
from: cm.posFromIndex(cur - token.start),
to: cm.posFromIndex(cur),
list: list,
};
}
}
const hintExtension = [
Completion.of([
{ provide: ['completion'], get: () => sqlHint },
]),
];
sqlExtensions.push(...hintExtension);
```
## 結(jié)語:進階優(yōu)化與未來展望
至此,我們已成功利用Vite+Vue3構(gòu)建了一個具備SQL高亮和代碼提示功能的網(wǎng)頁版編輯器。然而,為了提升用戶體驗,還可以在此基礎(chǔ)上進行諸如錯誤檢測、實時預(yù)覽查詢結(jié)果等更多高級功能的開發(fā)。同時,對于SQL提示的完善,可以考慮接入數(shù)據(jù)庫API獲取實時表結(jié)構(gòu)信息,實現(xiàn)更精準(zhǔn)的智能提示。希望本文能為您的前端開發(fā)之旅注入新的靈感與動力,讓我們一起在前端世界里創(chuàng)造更多可能!
著這幾年go語言的熱度提高,go的開源項目越來越多,得到商業(yè)應(yīng)用的開源也層出不窮,現(xiàn)在給大家推薦一個go實現(xiàn)的開源mqtt服務(wù)hmq,他支持websocket web調(diào)用和http接口認證,配合paho-mqtt.js調(diào)用庫方便集成到web應(yīng)用中
GitHub下載最新的hmq,編譯生成hmq.exe
配置文件為json格式的hmq.config文件,常用配置如下:
{
"workerNum": 4096,
"port": "1883",//服務(wù)端口
"host": "0.0.0.0",
"debug": true,
"httpPort": "8080",
"tlsPort": "8883",
"tlsHost": "0.0.0.0",
"wsPort": "8083", //websocket服務(wù)端口
"wsPath": "/mqtt",//服務(wù)路徑
"wsTLS": false,
"tlsInfo": {
"verify": false,
"caFile": "ssl/ca/ca.pem",
"certFile": "ssl/server/cert.pem",
"keyFile": "ssl/server/key.pem"
},
"plugins": {
"auth": "authhttp" //通過http鑒權(quán)
}
}
其中http鑒權(quán)的地址配置在plugins\auth\authhttp目錄下的http.json
{
"auth": "http://www.xxx.com/CoreSYS.SYS/AuthMQTT_RawJson.ajax",//一般用戶驗證
"acl": "http://www.xxx.com/CoreSYS.SYS/AuthALCMQTT_RawJson.ajax",//訂閱發(fā)布時候會驗
"super": "http://www.xxx.bslzg.com/CoreSYS.SYS/AuthSuperMQTT_RawJson.ajax"//超級用戶認證
}
通過認證接口由web應(yīng)用負責(zé)登陸訂閱發(fā)布權(quán)限鑒定,mqtt連接clientid可使用前綴加用戶id形式如mqtt-username,登陸臨時密鑰可由web應(yīng)用臨時分配clientid->口令存入redis,當(dāng)頁面的mqtt登陸時由hmq調(diào)用web應(yīng)用登陸認證接口,web應(yīng)用通過clientid拿到臨時密鑰和傳遞過來密鑰比對一致通過否則認證
失敗,認證成功刪除redis中clientid,發(fā)布和訂閱通過傳遞過來的client id確定客戶端是否有相應(yīng)權(quán)限,至于mqtt消息類型與消息訂閱發(fā)布可查閱相關(guān)資料,通過此方法可方便快捷實現(xiàn)web應(yīng)用的實時交互,譬如:公告,訂單等信息都可使用mqtt進行推送
以下是mqtt web應(yīng)用用于認證的和偽代碼
//超級用戶認證
//接口傳遞過來clientid username,鑒權(quán)通過狀態(tài)返回200否則401
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static public ReturnJson AuthSuperMQTT_RawJson(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
int StatusCode = 401;
try
{
m_ReturnJson.bOK = true;
WriteLog("AuthSuperMQTT_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));
string username = "", clientid = "";
if (KeyIsOK(m_HH, "username"))
{
username = m_HH["username"].ToString();
}
if (KeyIsOK(m_HH, "clientid"))
{
clientid = m_HH["clientid"].ToString();
}
string sMsg = "用戶:" + clientid + ",賬戶:" + username;
WriteLog("AuthSuperMQTT_RawJson:" + sMsg);
if (m_EMQAdminDIC.ContainsKey(clientid))
{
string tusername = m_EMQAdminDIC[clientid].ToString();
if (username == tusername)
{
StatusCode = 200;
}
}
else
{
}
WriteLog("AuthSuperMQTT_RawJson 返回碼:" + StatusCode.ToString());
ctx.Response.StatusCode = StatusCode;//驗證失敗調(diào)用
//ctx.Response.StatusCode=200;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
ctx.Response.StatusCode = StatusCode;
WriteLog("AuthSuperMQTT_RawJson 返回碼:" + StatusCode.ToString() + ",異常:" + e.ToString());
ctx.Response.End();
return m_ReturnJson;
}
}
//訂閱發(fā)布授權(quán)
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static private ReturnJson AuthALCMQTT_RawJson(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
int StatusCode = 401;
try
{
m_ReturnJson.bOK = true;
WriteLog("AuthALCMQTT_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));
string username = "", clientid = "", topic = "", access = "", ipaddr = "";
if (KeyIsOK(m_HH, "username"))
{
username = m_HH["username"].ToString();
}
if (KeyIsOK(m_HH, "clientid"))
{
clientid = m_HH["clientid"].ToString();
}
if (KeyIsOK(m_HH, "topic"))
{
topic = m_HH["topic"].ToString();
}
if (KeyIsOK(m_HH, "access"))
{
access = m_HH["access"].ToString();
}
if (KeyIsOK(m_HH, "ipaddr"))
{
ipaddr = m_HH["ipaddr"].ToString();
}
if (access == "1")
{
access = "訂閱";
}
if (access == "2")
{
access = "發(fā)布";
}
string sMsg = "用戶:" + clientid + ",賬戶:" + username + "," + access + ",消息:" + topic + ",ip地址:" + ipaddr;
WriteLog("AuthALCMQTT_RawJson:" + sMsg);
if (access == "訂閱")
{
if (AuthSubFreeMQTT(ctx, topic, username, clientid))
{
StatusCode = 200;
ctx.Response.StatusCode = StatusCode;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
else
{
StatusCode = 401;
ctx.Response.StatusCode = StatusCode;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
}
else
{
if (AuthPubFreeMQTT(ctx, topic, username, clientid))
{
StatusCode = 200;
ctx.Response.StatusCode = StatusCode;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
else
{
StatusCode = 401;
ctx.Response.StatusCode = StatusCode;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
}
}
catch (Exception e)
{
m_ReturnJson.bOK = false;
ctx.Response.StatusCode = StatusCode;
ctx.Response.End();
return m_ReturnJson;
}
}
}
//普通用戶登錄鑒權(quán)
[ModeMethod("{CanNoLogin:true,CanEnable:true}")]
static private ReturnJson AuthMQTT_RawJson(HttpContext ctx, Object m_Parame)
{
ReturnJson m_ReturnJson = new ReturnJson();
Hashtable m_HH = new Hashtable();
JsonHelper.OBJToHashTable(m_Parame, m_HH);
int StatusCode = 401;
try
{
m_ReturnJson.bOK = true;
WriteLog("AuthMQTT20200107_RawJson:" + JsonHelper.OBJToJsonStr(m_HH));
string username = "", clientid = "", password = "";
if (KeyIsOK(m_HH, "username"))
{
username = m_HH["username"].ToString();
}
if (KeyIsOK(m_HH, "clientid"))
{
clientid = m_HH["clientid"].ToString();
}
if (KeyIsOK(m_HH, "password"))
{
password = m_HH["password"].ToString();
}
string sMsg = "用戶:" + clientid + ",賬戶:" + username + ",口令:" + password;
WriteLog("AuthMQTT20200107_RawJson:" + sMsg);
if (m_EMQAdminDIC.ContainsKey(clientid))
{
string tusername = m_EMQAdminDIC[clientid].ToString();
if (username == tusername)
{
StatusCode = 200;
}
}
if (StatusCode != 200)
{
if (username == password)
{
using (NodeDBEngine m_NodeDBEngine = new NodeDBEngine())
{
try
{
string SQLString = "select username from sys_users where sys_users_nodeuuid=@sys_users_nodeuuid and username=@username";
List<Hashtable> m_varList = new List<Hashtable>();
m_varList.Add(NodeDBEngine.VarString("@username", username));
m_varList.Add(NodeDBEngine.VarDecimal("@sys_users_nodeuuid", clientid));
bool bOK;
DataSet pSet = m_NodeDBEngine.XNGetRecordVar(SQLString, out bOK, m_varList);
if (bOK)
{
if (pSet.Tables[0].Rows.Count > 0)
{
WriteLog("AuthMQTT20200107_RawJson 1");
StatusCode = 200;
}
else
{
if (AuthConnectFreeMQTT(ctx, username, clientid, password))
{
WriteLog("AuthMQTT20200107_RawJson 2");
StatusCode = 200;
}
else
{
WriteLog("AuthMQTT20200107_RawJson 3");
StatusCode = 401;
}
}
}
else
{
WriteLog("AuthMQTT20200107_RawJson 4");
StatusCode = 401;
}
}
catch (Exception r)
{
WriteLog("AuthMQTT20200107_RawJson 5:" + r.ToString());
StatusCode = 401;
}
}
}
else
{
if (AuthConnectFreeMQTT(ctx, username, clientid, password))
{
WriteLog("AuthMQTT20200107_RawJson OK1");
StatusCode = 200;
}
else
{
WriteLog("AuthMQTT20200107_RawJson 6");
StatusCode = 401;
}
}
}
else
{
WriteLog("AuthMQTT20200107_RawJson OK2");
StatusCode = 200;
}
}
catch (Exception e)
{
StatusCode = 401;
}
ctx.Response.StatusCode = StatusCode;//驗證通過調(diào)用
ctx.Response.End();
return m_ReturnJson;
}
關(guān)于paho-mqtt.js的使用可參看相關(guān)資料
在前面:
好久沒發(fā)文了……2021年余額基本告罄,為了走好2022年的IT之旅,這里為Python編程斗士或相關(guān)潛在人物,評估羅列了一下業(yè)界的開發(fā)IDE或編碼用的文本編輯器,你且看了后再來自行了斷——說錯了,自行決斷,以為來年早早做個準(zhǔn)備~
Python 由其創(chuàng)建者 Guido van Rossum 于 1991 年推出,是用于自動化特定重復(fù)性任務(wù)的主要編程語言之一。在許多開發(fā)人員/程序員的貢獻下,該語言已經(jīng)發(fā)生了巨大的發(fā)展。如果您是編程新手,建議您從 Python 開始學(xué)編程。 Python 解釋器可用于多種操作系統(tǒng),例如 Linux、macOS 和 Windows。
Python 是一種通用語言,這意味著它可以用于從 Blender(3D 建模軟件)到 Web 開發(fā)的許多應(yīng)用程序中都有。您可以使用 shell學(xué)習(xí)或來為小型項目編寫 Python 代碼。但是,如果您想處理更大的項目,強烈建議使用專用代碼編輯器或集成開發(fā)環(huán)境 (IDE)。每個 Python IDE 或代碼編輯器在功能、用戶界面等方面都各不相同。Python 社區(qū)也推薦了一些主流的這類工具。
在繼續(xù)之前,先來看看什么是 IDE 和代碼編輯器,以及良好的 Python 編碼環(huán)境的要求都有哪些。
無論您是這方面的新手還是老手,都需要一個 IDE(集成開發(fā)環(huán)境)或代碼編輯器來展示您的編碼技巧和才能。 IDE 是一種軟件,它將常見的開發(fā)人員工具整合到一個用戶友好的 GUI(圖形用戶界面)中。 IDE 主要包括用于編寫軟件代碼的源代碼編輯器、用于軟件的本地自動化構(gòu)建的特征工具,如編譯計算機源代碼。最后,它有一個調(diào)試器,一個用于測試其他程序的程序。除了這些功能之外,IDE 還可以具有更多功能,并且每個 IDE 的功能各不相同。
代碼編輯器也是軟件;它就像一個帶有一些附加功能的文本編輯器。它不是 IDE,因為 IDE 有許多開發(fā)人員工具。根據(jù)編輯器上的語言代碼,它突出顯示特殊關(guān)鍵字并提供一些建議。 Sublime Text、Atom、Visual Studio Code 是一些流行的代碼編輯器。
我們列出了每個項目在其構(gòu)建階段和之后所需的一些主要和標(biāo)準(zhǔn)功能和要求。一個項目可以有比下面提到的更多的要求,但這些是基本的,IDE必須具備:
? 保存并重新加載源代碼
IDE 或編輯器必須能保存您的工作成果,并可在以后重新打開所有內(nèi)容,要能保持離開/停止工作時的狀態(tài),以便節(jié)省開發(fā)時間。
? 在相同環(huán)境中執(zhí)行
要有一個內(nèi)置的編譯器來執(zhí)行你的代碼。如果不能在同一個軟件環(huán)境中執(zhí)行所有代碼,那么它可能是一個文本編輯器。
? 調(diào)試支持
大多數(shù) IDE 中的調(diào)試器提供單步調(diào)試代碼并為代碼的部分執(zhí)行設(shè)置斷點。
? 語法高亮
能夠快速發(fā)現(xiàn)代碼中的關(guān)鍵字、變量和符號使閱讀和理解代碼變得更加容易。
? 自動代碼格式化
這是一個有趣的功能。當(dāng)開發(fā)人員使用循環(huán)、函數(shù)或任何其他塊代碼時,代碼會自行縮進。
有了總體的了解后,開始上正菜……
為了幫助選擇最佳 Python IDE,我們整理了一些流行的 Python IDE 列表。這些推薦列表,是根據(jù)功能、用戶數(shù)量和每個用戶體驗的積極反饋而來,請看以下列表:
1) Pydev
平臺: GNU/Linux/macOS/Windows/Solaris
官網(wǎng): https://www.eclipse.org/; http://pydev.org/
類型: IDE
Pydev
Eclipse 歷史上為 Java 語言設(shè)計的集成開發(fā)環(huán)境 (IDE)。盡管如此,由于有一個優(yōu)秀的插件或擴展系統(tǒng)機制,它可以與其他編程語言一起使用,包括 C/C++ 和 PHP。 Pydev 是一個插件,它允許將 Eclipse 用作 Python IDE,它也支持 Jython 和 IronPython。 Pydev 使用高級推理技術(shù)來提供代碼完成和代碼分析等要素。 IDE 還提供以下功能:調(diào)試器、Django、交互式控制臺、基本語法突出顯示、代碼覆蓋率等。它也是 Python 的最佳 Ide 之一,也是最佳 Python 編輯器。
Pydev 是免費的、獨立于平臺的,并促進了與 Eclipse 世界的卓越完整性。由于開發(fā)人員的努力和技術(shù)的發(fā)展,python 開發(fā)幾乎可以與 Eclipse 上的 Java 開發(fā)相媲美,使開發(fā)體驗更加令人印象深刻并且表現(xiàn)卓越。
優(yōu)勢:
短處:
2)2. Pycharm
平臺: Linux/macOS/Windows
官網(wǎng): https://www.jetbrains.com/pycharm/
類型: IDE
Pycharm
Pycharm 是 JetBrains 開發(fā)的集成開發(fā)環(huán)境(IDE)。它因其生產(chǎn)力工具(例如快速修復(fù))而在競爭中脫穎而出。它提供三個版本,Apache 許可的社區(qū)版、教育 (Edu) 版和專有的專業(yè)版。前兩個版本是開源的,因此是免費的,而專業(yè)版是付費的
社區(qū)版非常有趣,因為它具有不同的功能,例如語法高亮、自動完成和實時代碼驗證。付費版本具有更高級的功能,例如完整的數(shù)據(jù)庫管理和許多社區(qū)版沒有的重要框架,例如 Django、Flask、Google App、Engine、Pyramid 和 web2py。
優(yōu)勢:
缺陷:
3) Sublime Text
平臺: Linux/macOS/Windows
官網(wǎng): http://www.sublimetext.com/
類型: Python Text editor(Python文編輯器)
Sublime Text
Sublime Text 最初被認為是 Vim 的擴展,是一個用于 C++ 和 Python 編碼的通用文本編輯器。從 2.0 版本開始,該軟件支持 44 種主要編程語言,包括 Python。它于 2007 年首次出版,由 Jon Skinner 開發(fā)。為了創(chuàng)建這個軟件,Jon Skinner 采用了三個原則:
由于不同的插件和包,一旦將 Sublime Text 安裝為 Python IDE,您將獲得高質(zhì)量和強大的 IDE,使您可以非常輕松地在 Python 中進行開發(fā)。它結(jié)合了基本 Python 文本編輯器的大部分功能,包括可自定義的語法突出顯示。
優(yōu)勢:
短處:
4)Visual Studio Code
平臺: Linux/macOS/Windows
官網(wǎng): https://code.visualstudio.com
類型: IDE
Visual Studio Code
由 Microsoft 為 Windows、Linux 和 OS 開發(fā)的 VS Code 是一個可擴展的代碼編輯器,不要與 Visual Studio 混淆。確實,VS Code 雖小但功能齊全,而且軟件是在 MIT 許可下開源的;這就是 Visual Studio 和 VS Code 之間區(qū)別特征。 VS Code 第一版于 2015 年 4 月 29 日發(fā)布,VS Code 在功能上與 Atom 不相上下。的確,就像 Atom 一樣,VS Code 也是建立在 Electron 之上的,這意味著這兩個程序具有幾乎相同的優(yōu)點和缺點。
VS Code 是微軟的項目,在 GitHub 上貢獻者數(shù)量最多。這一舉措提升了微軟的知名度,并將其定位為社區(qū)軟件的主要參與者之一。在這種情況下,您可以向環(huán)境中添加新語言,例如 Python。只需下載并安裝相應(yīng)的插件即可適應(yīng)環(huán)境。通過集成強大的代碼自動完成引擎 (IntelliSense)、調(diào)試控制臺和啟動服務(wù)器命令的終端等功能,代碼得到了增強。
VS Code 的整體設(shè)計非常好,它的主要優(yōu)點是它提供了基于擴展的架構(gòu)。由于 IDE 是輕量級的,因此可以根據(jù)需要通過添加連續(xù)的組件來對其進行擴展。
優(yōu)勢:
短處:
5)Vim
平臺: Linux/macOS/Windows
官網(wǎng): https://www.vim.org
類型: Text editor
Vim
Vim 是一個文本編輯器,一個允許操作文本文件的編輯器。它的源代碼于 1991 年由其主要開發(fā)人員 Bram Moolenaar 首次發(fā)布。從那時起,該軟件得到了開發(fā)人員以及開發(fā)人員社區(qū)的貢獻,得到不斷發(fā)展和改進。 Vim 與大多數(shù)其他 Python 文本編輯器的不同之處在于其操作模式,請注意 Vim 具有三種基本模式:插入模式、正常或命令模式以及命令行模式。
Vim 是免費軟件,可以通過添加擴展或修改其配置文件在很大程度上進行自定義,這意味著您可以非常輕松地將其調(diào)整為用 Python進行開發(fā)。該軟件包括多種功能,例如支持同步文件編輯的多緩沖區(qū)、適應(yīng)語言的自動縮進等。要下載 Vim,只需單擊此鏈接 https://www.vim.org/download.php。
優(yōu)勢:
短處:
6) GNU/Emacs
平臺: Linux/macOS/Windows
官網(wǎng): https://www.gnu.org
類型: Text editor
GNU/Emacs
Emacs(在 TECO 上運行的編輯 MACroS)于 1976 年由 Richard Stallman 創(chuàng)建,是一系列具有可擴展功能的文本編輯器。這個免費軟件在開發(fā)者社區(qū)中非常受歡迎。
Richard Stallman 堅持這樣一個事實,即該軟件必須是完全免費和可定制的,在編程上沒有任何限制。幾年后,Emacs 出現(xiàn)了很多版本,包括 1984 年由 Richard Stallman 發(fā)起的 GNU Emacs 和 1991 年推出的 XEmacs。GNU Emacs 使用一種稱為 Emacs Lisp 的強大擴展語言,它支持高級任務(wù),例如寫作、編譯程序、上網(wǎng)、閱讀電子郵件和論壇討論。
該軟件可免費下載,適用于所有平臺。 GNU Emacs 使用各種定制腳本進行多種語言的開發(fā),包括 Python。
對于 Python 開發(fā),您可以使用 Emacs 上的 Elpy 擴展來處理 Python 項目。這個軟件功能非常豐富。在它的眾多功能中,如前面提到的突出顯示語法以區(qū)分關(guān)鍵字和注釋等文檔元素;在文件中自動縮進以具有一致的格式等。
優(yōu)勢 :
短處:
7)Atom/Atom-IDE
平臺: Linux/macOS/Windows
官網(wǎng): https://atom.io/
類型: IDE
Atom/Atom-IDE
Atom 包括基本 IDE 的大部分功能。它的功能包括語法突出顯示和自動完成。 Atom 的開發(fā)人員正在致力于集成 Rust 或 Go 等主要編程語言。 Atom 在提升性能方面不斷取得進展,開發(fā)者非常關(guān)注社區(qū)的需求和意見,努力讓用戶體驗更有價值。打開軟件的等待時間有改進,重要計算所需的時間有小幅改進,以減少延遲。盡管如此,預(yù)計未來幾個月會取得越來越多的進展。
Atom 是最好的 Python 文本編輯器之一。
促成 Atom 成功的原因之一是其完全可定制的界面。從界面到基本功能,一切都可以改變。另一方面,這種相當(dāng)有利的舉措也是程序延遲的根源問題之一。但總的來說,Atom 仍然是一個非常實用和功能強大的 IDE,我們期待程序更新。
優(yōu)勢:
短處:
8)IDLE
平臺: Linux/macOS/Windows
官網(wǎng): https://docs.python.org/3/library/idle.html
類型: IDE
IDLE
集成開發(fā)與學(xué)習(xí)環(huán)境,是Guido Van Rossum于1998年12月發(fā)布的用于Python開發(fā)的IDE(集成開發(fā)環(huán)境)。它是一個簡單的 IDE,因此適合初學(xué)者。它包含一個多窗口文本編輯器,具有語法高亮顯示和集成調(diào)試器,具有按步、持久斷點和調(diào)用堆棧可見性等調(diào)試特性。
優(yōu)勢:
短處:
9.)Spyder
平臺: Linux/macOS/Windows
官網(wǎng): https://github.com/spyder-ide/spyder
類型: IDE
Spyder
Spyder 的第一個版本命名為 Pydee,由 Pierre Raybaut 于 2008 年創(chuàng)建。它是跨平臺的,并且在非 copyleft 許可下(非 copyleft 自由軟件由其作者發(fā)布,并獲得重新分發(fā)和修改的許可)。自 2012 年以來,由于他們的貢獻,Python 科學(xué)社區(qū)一直在維護 Spyder。
Spyder 具有語法高亮和自動補全等基本功能,還集成了許多科學(xué)使用庫,如 Matplotlib、Numpy、IPython、Scipy。它是開源和免費的,而且安裝非常容易,這要歸功于 Python 包管理器。
它提供了科學(xué)軟件包的高級分析、調(diào)試、編輯、交互式執(zhí)行、深入檢查和可視化功能的獨特組合。這些主要組件是交互式控制臺、文檔查看器、變量瀏覽器和開發(fā)工具等。
優(yōu)勢:
短處:
10)Thonny
平臺: Linux/macOS/Windows
官網(wǎng): https://thonny.org
類型: IDE
Thonny
Thonny 是一個集成開發(fā)環(huán)境 (IDE)。該軟件由愛沙尼亞的塔爾圖大學(xué)開發(fā),主要旨在通過為 Python 初學(xué)者提供簡單、輕量級的 IDE 來使他們的編碼更輕松。盡管如此,憑借出色的功能,它有點像初學(xué)者的工具包。因此,該軟件特別適合希望開始使用 Python 進行編程和開發(fā)的初學(xué)者,因此完全不適合開發(fā)專家。
用戶界面與所有可能分散初學(xué)者注意力的功能隔離開來。對于想要快速、輕松、簡單地使用 Python 進行開發(fā)的初學(xué)者來說,這是一門經(jīng)過深思熟慮的課程教學(xué)IDE。
優(yōu)勢:
劣勢:
對于初學(xué)者,有許多具有基本功能的 IDE可供選擇,可在進入下一個級別之前發(fā)現(xiàn)此環(huán)境并熟悉每個功能。對于有經(jīng)驗的開發(fā)人員,IDE 的選擇應(yīng)該基于大型項目的需要,IDE 的性能和高級功能的支持。這里有個列表供參考:
2022 IDE for Python
Python 是最著名的語言之一,甚至可能是最受歡迎的語言。與大多數(shù)主要語言一樣,擁有大量有用、實用且功能強大的 IDE可供選擇,無論它們是付費的還是免費的。
如果你有更好的IDE推薦,也請您推薦一下,并說說你的體驗。
如果你是 Python 的初學(xué)者或計劃學(xué)習(xí)Python編程,請留言給我 @牛旦IT課堂 ,我正在編寫一門《從初學(xué)者到專家級》 Python 開發(fā)者絕佳課程,希望可以助你玩轉(zhuǎn)Python編程。
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。