新聞中心
在Linux中,我們可以使用CTags來開發(fā)一個(gè)Sublime Text代碼補(bǔ)全插件,CTags是一個(gè)強(qiáng)大的標(biāo)簽生成器,它可以幫助我們?cè)谖谋疚募刑砑訕?biāo)簽,從而實(shí)現(xiàn)代碼補(bǔ)全功能,本文將詳細(xì)介紹如何使用CTags和Sublime Text構(gòu)建一個(gè)代碼補(bǔ)全插件。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了橋西免費(fèi)建站歡迎大家使用!
準(zhǔn)備工作
1、安裝CTags:首先需要在Linux系統(tǒng)中安裝CTags,可以通過以下命令安裝:
sudo apt-get install ctags
2、準(zhǔn)備CTags的配置文件:我們需要為Sublime Text創(chuàng)建一個(gè)CTags的配置文件,這個(gè)配置文件通常是一個(gè)名為ctags的可執(zhí)行腳本,內(nèi)容如下:
!/bin/sh $1: language $2: output directory $3: tags file ...
3、安裝Sublime Text:如果還沒有安裝Sublime Text,請(qǐng)?jiān)L問官方網(wǎng)站下載并安裝。
創(chuàng)建Sublime Text插件
1、打開Sublime Text,點(diǎn)擊菜單欄的Tools > Build System > New Build System,然后將以下內(nèi)容粘貼到新建的文件中:
{
"shell_cmd": "ctags --languages $(lang) --totals --fields=+l --extras=+q"
}
這里我們使用ctags命令來生成標(biāo)簽,其中--languages $(lang)表示根據(jù)指定的語言生成標(biāo)簽,--totals表示顯示所有標(biāo)簽的數(shù)量,--fields=+l表示只顯示標(biāo)簽名,--extras=+q表示輸出格式為易讀的JSON格式。
2、將新建的文件保存為.sublime-build文件,例如命名為CTags.sublime-build,并將其保存到Sublime Text的Packages/User目錄下,你可以通過點(diǎn)擊菜單欄的Preferences > Browse Packages...找到這個(gè)目錄。
3、點(diǎn)擊菜單欄的Tools > Build System,選擇剛剛創(chuàng)建的CTags構(gòu)建系統(tǒng),這樣就可以使用CTags生成代碼標(biāo)簽了。
編寫代碼補(bǔ)全插件
1、在Sublime Text中創(chuàng)建一個(gè)新的Python文件,例如命名為CodeComplete.py,并在其中編寫以下代碼:
import sublime_plugin
import os
import json
from subprocess import Popen, PIPE, STDOUT
class CTagsCommand(sublime_plugin.TextCommand):
def run(self, edit):
獲取當(dāng)前光標(biāo)位置所在的行號(hào)和列號(hào)
row, col = self.view.rowcol(self.view.sel()[0].begin())
讀取CTags生成的標(biāo)簽文件
with open(os.path.join(sublime.packages_path(), 'CTags'), 'r') as f:
tags = json.load(f)['tags']
根據(jù)當(dāng)前光標(biāo)位置查找匹配的標(biāo)簽
for tag in tags[row]:
if tag['file'].startswith('*'): continue
if tag['file'][len('*'):] == self.view_name(): break
else: continue
獲取匹配的標(biāo)簽對(duì)應(yīng)的函數(shù)名和參數(shù)列表
function_name = tag['func'] or tag['type'] or tag['name'] or ''
args = [] if not tag['args'] else [arg['name'] for arg in tag['args']] + ['$0']
調(diào)用Sublime Text的API實(shí)現(xiàn)代碼補(bǔ)全功能
self.view.run_command('completion_matcher', {'text': function_name + '(' + ', '.join(args) + ')'})
2、將編寫好的插件保存為.pyw文件,例如命名為CodeComplete.pyw,并將其保存到Sublime Text的Packages/User目錄下,同樣的方法可以創(chuàng)建其他語言的代碼補(bǔ)全插件,只需修改相應(yīng)的配置即可。
測(cè)試與優(yōu)化
1、在Sublime Text中打開一個(gè)Python文件,然后嘗試輸入部分代碼并按Tab鍵進(jìn)行自動(dòng)補(bǔ)全,如果一切正常,那么恭喜你已經(jīng)成功開發(fā)了一個(gè)代碼補(bǔ)全插件!
2、如果發(fā)現(xiàn)代碼補(bǔ)全功能不夠完善或者有性能問題,可以通過調(diào)整CTags命令中的選項(xiàng)來進(jìn)行優(yōu)化,可以增加更多的語言支持、提高標(biāo)簽生成的速度等,具體可以參考CTags的相關(guān)文檔和示例。
新聞名稱:linux代碼補(bǔ)全提示
鏈接地址:http://m.fisionsoft.com.cn/article/dhsdghi.html


咨詢
建站咨詢
