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