整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          vite+vue3實現(xiàn)網(wǎng)頁版編輯器,帶高亮以及代碼提

          《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)備~

          1.簡述

          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)境的要求都有哪些。

          2.IDE 和代碼編輯器

          無論您是這方面的新手還是老手,都需要一個 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 是一些流行的代碼編輯器。

          3.好的Python編碼環(huán)境的要求

          我們列出了每個項目在其構(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ù)或任何其他塊代碼時,代碼會自行縮進。

          有了總體的了解后,開始上正菜……

          4.十款最佳Python IDE和代碼編輯器

          為了幫助選擇最佳 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)勢:

          • ü 易于學(xué)習(xí),還包括多項功能(CPython、Jython、IronPython)
          • ü 在 Eclipse 上通過Pydev 插件實現(xiàn) Python 編碼
          • ü 代碼自動補全和代碼分析等

          短處:

          • ü 用戶界面不是很豐富。

          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)勢:

          • ü 積極的社區(qū)支持;
          • ü 實時代碼驗證和語法高亮;
          • ü 無需任何外部要求即可執(zhí)行編輯和調(diào)試 Python 代碼.

          缺陷:

          • ü 加載時間慢;
          • ü 在可使用現(xiàn)有項目之前,可能需要調(diào)整默認設(shè)置。


          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 采用了三個原則:

          1. u 謹慎、最小的界面:我們必須能夠?qū)W⒂谖谋径皇菬o數(shù)的工具欄;
          2. u 文本沒有被窗口隱藏;
          3. u 使用盡可能多的空間:全屏、多屏、并排文件編輯應(yīng)該是可行的。

          由于不同的插件和包,一旦將 Sublime Text 安裝為 Python IDE,您將獲得高質(zhì)量和強大的 IDE,使您可以非常輕松地在 Python 中進行開發(fā)。它結(jié)合了基本 Python 文本編輯器的大部分功能,包括可自定義的語法突出顯示。

          優(yōu)勢:

          • ü 速度快,錯誤很少(很大的優(yōu)勢)
          • ü 打開大文件
          • ü 支持多種語言

          短處:

          • ü 難以修改,一切都通過 JSON。
          • ü 需要許可
          • ü 學(xué)習(xí)無捷徑

          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)勢:

          • ü 超過 4700 個擴展
          • ü 強大的代碼管理引擎
          • ü 從其他 Python 編輯器(例如 Sublime Text 或 Atom)按需導(dǎo)入鍵盤快捷鍵

          短處:

          • ü 由于可用的擴展程序有數(shù)千種,因此很難找到最適合您需求的擴展程序

          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)勢:

          • ü 軟件功能豐富,并通過社區(qū)支持而提供了良好的用戶體驗。
          • ü 文件格式的識別和轉(zhuǎn)換(UNIX、MS-DOS 或 Mac)

          短處:

          • ü 沒有足夠的創(chuàng)新功能

          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)勢 :

          • ü 免費且完全可定制的軟件。
          • ü 自動插入文檔結(jié)構(gòu)所需的元素,如空格、換行符、括號等;
          • ü 支持它的終端的 24位彩色編碼支持

          短處:

          • ü 編程初學(xué)者不易使用

          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)勢:

          • ü 完全可定制的界面
          • ü 優(yōu)秀的文檔幫助
          • ü 提供幾乎所有 VS Code 必須提供的東西

          短處:

          • ü RAM消耗過多
          • ü 在系統(tǒng)延遲和優(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)勢:

          • ü 可用于執(zhí)行單個語句。
          • ü 可用于創(chuàng)建、修改和執(zhí)行 Python 腳本。
          • ü 提供語法高亮、自動完成和智能縮進等功能。
          • ü 有一個帶有單步跟進和斷點功能的調(diào)試器。

          短處:

          • ü 在 Linux 的 Python 發(fā)行版中,默認情況下 IDLE 不可用。
          • ü 它需要一個相應(yīng)的包管理器進行安裝。

          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)勢:

          • ü 社區(qū)支持
          • ü 豐富的開發(fā)工具功能
          • ü 完整的文檔

          短處:

          • ü 執(zhí)行依賴
          • ü 可選依賴

          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é)者學(xué)習(xí)的IDE
          • ü 基本和功能用戶界面
          • ü 不需要大量內(nèi)存來運行

          劣勢:

          • ü 如是一位經(jīng)驗豐富的開發(fā)人員,那么這款軟件肯定不適合您。
          • ü 只有基本功能


          5.2022 年,如何選擇 最好的 Python IDE?

          對于初學(xué)者,有許多具有基本功能的 IDE可供選擇,可在進入下一個級別之前發(fā)現(xiàn)此環(huán)境并熟悉每個功能。對于有經(jīng)驗的開發(fā)人員,IDE 的選擇應(yīng)該基于大型項目的需要,IDE 的性能和高級功能的支持。這里有個列表供參考:

          2022 IDE for Python


          6.最后

          Python 是最著名的語言之一,甚至可能是最受歡迎的語言。與大多數(shù)主要語言一樣,擁有大量有用、實用且功能強大的 IDE可供選擇,無論它們是付費的還是免費的。

          如果你有更好的IDE推薦,也請您推薦一下,并說說你的體驗。

          如果你是 Python 的初學(xué)者或計劃學(xué)習(xí)Python編程,請留言給我 @牛旦IT課堂 ,我正在編寫一門《從初學(xué)者到專家級》 Python 開發(fā)者絕佳課程,希望可以助你玩轉(zhuǎn)Python編程。


          主站蜘蛛池模板: 日本一区二区三区在线视频| 熟妇人妻AV无码一区二区三区| 国产成人综合亚洲一区| 国产精品成人一区二区| 一区二区和激情视频| 亚洲一区精品视频在线| 国内精品一区二区三区在线观看| 亚洲一区精品无码| 一区二区三区视频在线播放| 五十路熟女人妻一区二区| 亚洲av日韩综合一区在线观看| 无码精品人妻一区| 国产一区二区三区在线看片| 日本精品3d动漫一区二区| 天美传媒一区二区三区| 亚洲国产成人精品无码一区二区| av在线亚洲欧洲日产一区二区| 无码日韩精品一区二区人妻 | 曰韩人妻无码一区二区三区综合部| 国产高清一区二区三区| 亚洲av无码一区二区三区人妖| 精品深夜AV无码一区二区老年| 成人精品一区二区户外勾搭野战| 亚州日本乱码一区二区三区| 久久久无码精品国产一区 | 精品无码国产AV一区二区三区| 无码中文字幕乱码一区| 国产成人AV区一区二区三 | 自慰无码一区二区三区| 国产精品伦一区二区三级视频| 精品欧洲av无码一区二区 | 国99精品无码一区二区三区| 农村乱人伦一区二区| 国产精品无码不卡一区二区三区 | 亚洲蜜芽在线精品一区| 中文无码一区二区不卡αv| 青娱乐国产官网极品一区| 亚洲熟妇av一区| 大帝AV在线一区二区三区| 久久久91精品国产一区二区三区| 无码人妻精品一区二区三区99仓本 |