國產編輯器EverEdit - 語法著色文件的語法

1 語法著色定義(官方文檔)

1.1 概述

EverEdit有著優異的語法著色引擎,可以高亮現存的絕大多數的編程語言。在EverEdit的語法著色中有Region和Item兩個概念,Region表示著不同的區塊。而Item則代表著這些區塊中不同的部分。一般情況下,Region表示跨行的文本匹配,而Item表示一行內的文本匹配。另外,Region也支持空匹配,也就是說您可以指定某個特定的位置用來表達Region的起始或者結束,比如行頭和行尾甚至于某個特定的列,從而可以完美的高亮markdown等語言的文件。同時Item還支持捕獲分組,可以極大地提高定義著色文件的準確性。在安裝目錄的syntax文件夾中已包含很多語法著色文件,您可以參照它們寫出更加優美正確的著色效果!

1.2 綁定代碼片段

不同的Region可以綁定不同的代碼片段,比如html中的css,js區域等。比如php.mac中的:
rPhp.AddSnippet "php.snippet"

這樣就把snippet加入到了php區域中了。這些snippet僅在該區域起作用,用戶輸入完整的提示字符,然后按下tab鍵就可以快速展開。一個區域可以使用AddSnippet函數添加多個snippet。同樣,一個文件也可能會有多個不同的著色區域,通過如此搭配,可以實現嚴格的區分效果。

1.3 類和函數

著色文件是可編程的,每個著色文件都是一個按照指定語法書寫的腳本文件。因EverEdit開發的歷史原因,目前著色文件的語法僅支持vbscript。

1.4 顏色定義

在定義語法文件的時候,一定會想到要把不同的部分顯示為不同的顏色。EverEdit內置多種顏色,趕快讓您的文件多彩起來吧!下面是syntax目錄中const.mac描述的顏色值。注意:顏色的具體設定是在主題里面指定的,這些只是顏色的定義,不是具體的顏色表達。


Const COLOR_DEFAULT       =0
Const COLOR_COMMENT1      =1
Const COLOR_COMMENT2      =2
Const COLOR_STRING1       =3
Const COLOR_STRING2       =4
Const COLOR_TAG           =5
Const COLOR_MACRO         =6
Const COLOR_URL           =7
Const COLOR_EMAIL         =8
Const COLOR_NUMBER        =9
Const COLOR_FOUND         =10
Const COLOR_PAIR          =11
Const COLOR_FUNCTION      =12
Const COLOR_VAR           =13
Const COLOR_SUBLAN        =14
Const COLOR_OPERATOR      =15
Const COLOR_WORD1         =16
Const COLOR_WORD2         =17
Const COLOR_WORD3         =18
Const COLOR_WORD4         =19
Const COLOR_HIGHLIGHT1    =20
Const COLOR_HIGHLIGHT2    =21
Const COLOR_HIGHLIGHT3    =22
Const COLOR_HIGHLIGHT4    =23
Const COLOR_HIGHLIGHT5    =24
Const COLOR_HIGHLIGHT6    =25
Const COLOR_HIGHLIGHT7    =26
Const COLOR_HIGHLIGHT8    =27
Const COLOR_IGNORE        =29
Const COLOR_CONCEAL       =30

注意: 凡是被指定為COLOR_IGNORE模式的字符串,它的前景色將和主界面的背景色一致,看起來好像不存在一樣。只有被選擇的時候,才會看到!而COLOR_CONCEAL則是一個比較有意思的模式,被指定為COLOR_CONCEAL的字符僅當處于選區或者當前行的時候,才是可見的!借助這個特性,可以實現出很多非常有用的功能!

1.5 SyntaxItem

// 捕獲可以用于對item定義的正則表達式,在進行更細節的著色描述
// 比如第一個捕獲的顏色為word1, 第二個為word2等
void Capture(int group, int state);
string Name;//get,set

1.6 WordItem

bool AutoCase;//get,set
string Name;//get,set
SyntaxRegion

1.7 函數

// 添加snippet到該Region。strName為snippet的文件名稱,因所有的snippet文件必須放到snippet文件夾,所以只需要提供snippet的文件名稱即可。bCase:snippet在匹配的時候是否區分大小寫
bool AddSnippet(string strName, bool bCase=true)void AddItem(SyntaxItem item );void AddWord(WordItem item );void AddRegion(SyntaxRegion child );// 指定語法文件的折疊方法。strFold和strUnFold指示了折疊和反折疊的正則表達式。bFCase/bUFCase:是否匹配大小寫
void FoldText(string strFold, bool bFCase, string strUnFold, bool bUFCase);// 塊注釋的文本。主要用于Ctrl+Shift+/的調用。比如c++中,可以這么設置 cpp.CommentBlock "/*", “*/"
void CommentBlock(string strOn, string strOff);// 行注釋的文本。用戶Ctrl+/的調用。比如c++中,可以這么設置 cpp.CommentLine "//"
void CommentLine(string strText);// 指示該Region可用的配對字符。strText:包含所有的配對字符。配對字符必須連續的放在一塊定義,很顯然strText的長度應為偶數。
void SetPairs(string strText);// 定義用于縮進和反縮進的正則表達式。
void IndentText(string strIndnet, bool c1, string strUnIndnet, bool c2);// 定義函數提示,具體參考函數提示部分。
void AddCallTip( string strPathName, bool bCase, string strWord="", string strBegin="(", string strSep=",", string strEnd=")", bool bRemoveSpace=false );// 添加snippet
void AddSnippet( string title, string trigger, string text, bool script=false);

1.8 屬性

// 當該區域的文本結束時,該Region默認情況下將會自動跳轉到父Region;如果定義了TransRegion那么將會跳轉到Region。
void TransRegion;//set// 該Region的名稱。設置該名稱之后,在腳本中可以獲取光標位置的詞法狀態。
string Name;//get;set

1.9 Parser

Parser默認情況下包含了一個DefaultRegion。部分針對Default Region函數的使用可以參考SyntaxRegion的說明。

1.9.1 函數

bool AddSnippet(string strPathName, bool case_sensitve=true );void AddItem(SyntaxItem item );void AddWord(WordItem item );void AddRegion(SyntaxRegion child);// 復制一個Region。用于某兩個不相關的Region可能包含類似的代碼。該函數較耗費資源。
SyntaxRegion CopyRegion(SyntaxRegion pCopy);/**創建正則表達式描述的匹配規則。state:顏色值。strMatch:正則描述的匹配文本bCase:是否區分大小寫bToRight:如果該匹配正好在行末,那么背景色是否延伸到窗口右側。
**/
SyntaxItem CreateItem(int state, string strMatch, bool bCase, bool bToRight=false);/**創建關鍵字匹配。理論上CreateItem可以代替CreateWord,但CreateWord的效率更高且可以自動完成和自動糾正大小寫。strMatch:以空格分割的關鍵字字符串。bCase:是否區分大小寫strDelimiters:默認的情況下strMatch所匹配的文本只包括字母數字和下劃線,strDelimiters則表示哪些特殊字符可以被當作一個詞,比如中劃線-等。
**/
WordItem CreateWord(int state, string strMatch, bool bCase, string strDelimiters="");// 設置單行著色的最大字符上限。默認的情況下,EverEdit只著色每一行的前1000個字符。注意:過大的設置,可能導致程序運行速度過于緩慢!
void SetParseMax(int value);// 直接在語法文件中,聲明一個代碼片段
void AddSnippet( string title, string trigger, string text, bool script=false);// 從文件中創建一個關鍵字列表并指定顏色和大小寫,該文件必須放置于syntax目錄
WordItem CreateWordFromFile(int color, string strFileName, bool bCase)/**從文件中添加指定規則的關鍵字,它不返回創建的對象,直接按照規則把文件中所有的關鍵字加入到指定的region。文件的每一行是一個關鍵字,頭尾不可有空格。;開頭的是注釋,#開頭的是新的關鍵字描述,后面更有3個數字,比如#16,1,0。第一個數字表示詞法狀態,第二個表示是否區分大小寫,第三個表示是否自動更正大小寫。典型的keyword文件如下:#16,1,0long...#17,1,0string...
**/
AddWordFromFile(string strFileName, string strDelimiters)/**創建一個正則表達式描述的Region。strBegin/strEnd:描述該區域開始或者結束的正則表達式bCase:strBegin/strEnd描述的正則是否區分大小寫bToRight:如果該Region在行末,那么擴展背景色到右側窗口注意:被+兩個加號+包圍起來的文本表示這不是一個正則表達式,就是普通的文字匹配(效率更高)
**/
SyntaxRegion CreateRegion(int state, string strBegin, string strEnd, bool bCase, bool bToRight=false );/**創建字符串匹配。strChar:字符串指示字符,通常為"或者'。strEscape:轉義字符,通常為\mline:字符串是否跨行。strContinueChar:字符串續行符,比如C++中的\
**/
SyntaxRegion CreateStringRegion(int state, string strChar, string strEscape, bool mline, string strContinueChar );void FoldText(string strFold, bool bFCase, string strUnFold, bool bUFCase);void IndentText(string strIndnet, bool c1, string strUnIndnet, bool c2);/**正則表達式描述的較為寬松的折疊。nLevel:折疊的層級strText:正則表達式
**/
void FoldAnyText(int nLevel, string strText);void SetPairs(string strText);void CommentBlock(string strOn, string strOff);void CommentLine(string strText);void AddCallTip( string strPathName, bool bCase, string strWord="", string strBegin="(", string strSep=",", string strEnd=")", bool bRemoveSpace=false );void SetFont( string font_name, int font_size, int base_line, bool bold);// 為該語法文件獨立綁定一個字體,當打開用該語法文件渲染的文本時,將會忽略用戶的設置,自動使用語法著色文件指定的字體。
void SetCJKFont( string font_name, int font_size, int base_line, bool bold);

1.9.2 屬性

// 默認區域的命名
string Name;//get,set// 該語法文件的折疊方法。取值為syntax/indent/anytext
string FoldingMethod;//get,set// 該語法文件可以被認為是單詞的特殊字符。當鼠標雙擊或者其它操作選擇詞匯時將會使用該設置。
string WordChars;//get,setSyntaxRegion DefaultRegion;//get// 事件處理腳本,當顯示該文件類型的大綱視圖時,會自動的調用這個腳本,該腳本應該按照指定格式輸出大綱視圖識別的格式,該格式后續會介紹。
string OnOutLine;//set// 事件處理腳本,當按下回車鍵時,會自動調用該腳本,該腳本可以執行常見的腳本函數。
string OnNewLine;

1.10 實例1:創建C++著色器

以C語言為例,描述一下如何去定義一個新的語法描述文件!那么,首先讓我們看一下C語言中常見的元素:

  • 單行注釋
  • 多行注釋
  • 字符串
  • 關鍵字

絕大多數的著色文件均是由上面幾個非常簡單的元素構成。好了,開始我們的自定義吧!建立一個新的文件mycpp.mac并把它放到syntax目錄下。為了使用顏色值,我們可以把已經定義好的cosnt.mac包含進來,當然您也可以直接把該文件的內容粘貼到這個文件當中。

Include( ".\const.mac" )

創建一個自定義的Parser,命名為cpp。

Set cpp=Parser.CreateParser()

在創建完自定義Parser之后,我們就要開始為之添加各種各樣的元素了! 創建單行注釋匹配:單行注釋很顯然是一個Region,而不是一個Item,因為它有開始和結束的標志!那就是以//開始,以行尾結束!

Set regionLine=cpp.CreateRegion( COLOR_COMMENT1, "+//+", "$", True )

注意:這兒我們使用了++, 其中被+包圍了, 表示這兒為了提高效率不使用正則表達式進行匹配! 結束標志我們把它定義成$, 明確表示匹配到行尾, 不然的話只會匹配//了! 創建多行注釋匹配:

Set regionBlock=cpp.CreateRegion( COLOR_COMMENT1, "+/*+", "+*/+", True )

創建字符串匹配:

Set regionString=cpp.CreateStringRegion( COLOR_STRING1, """", "\", False )

創建關鍵字匹配:

Set itemWord=cpp.CreateItem(COLOR_WORD1, "\b(int|float|double|char|void|
for|while|if|else|return|break|continue)\b", True)

注意:為了更好的創建關鍵字匹配, 可以使用CreateWord函數, 比如上文中的關鍵字匹配, 也可以這么寫,效率更高:

Set itemWord2=cpp.CreateWord(COLOR_WORD1, "int float double char void for while if else return break continue", True)

把所有創建的匹配加入到主區域中:

cpp.AddRegion( regionLine )
cpp.AddRegion( regionBlock )
cpp.AddRegion( regionString )
cpp.AddItem( itemWord )

到這兒為止我們就自定義了一個簡單的C語言著色引擎,看看成品吧!

Include( ".\const.mac" )
Set cpp=Parser.CreateParser()
Set regionLine=cpp.CreateRegion( COLOR_COMMENT1, "+//+", "", True )
Set regionBlock=cpp.CreateRegion( COLOR_COMMENT1, "+/*+", "+*/+", True )
Set regionString=cpp.CreateStringRegion( COLOR_STRING1, """", "\", False )
Set itemWord=cpp.CreateItem(COLOR_WORD1, "\b(int|float|double|char|void|for|while|if|else|return|break|continue)\b", True)
cpp.AddRegion( regionLine )
cpp.AddRegion( regionBlock )
cpp.AddRegion( regionString )
cpp.AddItem( itemWord )

別著急,還剩下最后一步。那就是讓EverEdit可以識別它!打開語法著色對話框,新建一文件類型為MyCpp,并選擇語法文件為剛剛定義的mycpp.mac!

1.11 實例2:細化C++著色器

在實例1中我們學習了如何創造一個自定義的著色引擎, 那么讓我們來進一步豐富這個引擎吧!首先, 我想讓注釋中所有大寫的TODO都顯示為一種特殊的顏色! 注意僅僅是注釋中, 其它的部分不變!

1.11.1 定義TODO匹配

Set itemTodo=cpp.CreateItem(COLOR_HIGHLIGHT1, "\bTODO\b", True)

把TODO匹配加入到單行和多行注釋中:

regionLine.AddItem( itemTodo )
regionBlock.AddItem( itemTodo )

這樣我們就可以僅僅在注釋中顯示高亮為COLOR_HIGHLIGHT1顏色的TODO文字了!EverEdit同樣為代碼折疊提供了簡單方便的調用接口。比如當遇到{時折疊一次,遇到}時反折疊一次,那么可以簡單的像下面書寫:

cpp.FoldText "\{", False, "\}", False

1.11.2 自動縮進

假設在mycpp中有這樣一種縮進:當您在行尾是EEA的時候,輸入回車時,自動縮進一次;輸入的行滿足含有EverEdit時,自動反縮進一次。

cpp.IndentText "EEA$ ", False, "EVEREDIT", False

1.11.3 括號匹配

我們定義[],{},(),“”,''是匹配的字符。

cpp.SetPairs "[]{}()""""''"

可以被快捷鍵調用的快速注釋:

cpp.CommentLine "//"
cpp.CommentBlock "/*", "*/"

到這兒為止,我們為mycpp添加了TODO高亮;添加了縮進和反縮進,添加了括號匹配和代碼折疊,同時還添加了可以被快捷鍵或者菜單命令調用的注釋和反注釋的匹配!EverEdit以其強大的功能,為您提供了大量的自定義特性!趕快動手試一下吧!

1.12 和著色文件綁定的操作

著色文件不僅描述了如何以分色的方式顯示一串文字的不同部分,同時還有一些特定的操作是和著色文件綁定在一起的,比如縮進規則、折疊規則、大綱顯示的規則、自定義工具、菜單、工具條等等,這些在EverEdit中均可實現。

1.13 縮進規則

在EverEdit中,按下回車的時候,是縮進的時機,這個時候應該根據上下行的規則進行細節判斷是縮進還是不縮進。那么反縮進呢?反縮進沒有更好的時機,在EverEdit中當用戶輸入的時候,如果光標行所在的文本滿足特定的正則表達式的話,進行一次反縮進。這么做不是100%完美的,多少會有些瑕疵。

1.14 折疊規則

首先我們需要知道的是,完美的代碼折疊如果不做語義分析的話,是做不到的,往往眼睛看到的、直觀的、應該折疊的地方,卻無法找到一個有效的模式去描述。EverEdit的折疊規則非常簡單,如果該行文本滿足折疊表達式,則折疊一次;滿足反折疊表達式,則反折疊一次;同時滿足,則折疊歸零。這么做非常高效,可以解決絕大數的常見的折疊,同時EverEdit還可以自動的對處于同一個Region的代碼進行折疊,不同的Region還可以綁定不同的折疊規則,就像html中的js區域和css區域一樣。

那么,有一些語言是比較特殊的,比如ini,它應該折疊折疊每一個section,這些section無法用折疊表達式來描述,所以EverEdit又提供了另一種折疊描述,那就是anytext。anytext是指定義一個規則和指定的level,遇到該規則,則自動的使用指定的level而不是EverEdit自動判斷的level。看看ini中的代碼折疊。

ini.FoldingMethod="anytext"
ini.FoldAnyText 0, "^\s*\[.*?\]$"

另外,EverEdit還提供了依據縮進進行折疊,很多縮進規則比較好的語言,用縮進更美觀。比如python中的折疊。

python.FoldingMethod="indent"

1.15 主題

EverEdit的主題非常的強大,但是它有一個缺點,那就是所有的語法文件都會應用到同一個主題。有時候我們期望某個獨特類型的文件能使用自己的主題,可不可以呢?當然沒問題!只要打開對應的語法著色文件,然后加一行代碼就可以了!

parser.SetTheme(“xxxx.ini”)

為什么要獨立設定主題? 比如markdown里面有加粗、傾斜等字體樣式,這些樣式有時候我們只希望在markdown中應用,這個時候獨立的主題就很有用了。

1.16 模式

模式文件的綁定需要通過界面進行操作。主菜單→工具→設置→語法著色,選定您的語法文件,然后點擊高級,綁定即可!

1.17 幫助文件

每一種文件類型可以綁定后綴為chm或者hlp的幫助文件,當打開對應的幫助文件的時候,EverEdit會自動根據選區的內容,定位到適合的章節。比如我們可以把php的幫助文檔,綁定到php中,這樣當不知道某個函數的用法的時候,選定這個函數,幫助→關聯幫助就可以迅速定位了。除此之外,在模式中也可以調用腳本完成,實現更多的幫助文件的綁定。

1.18 函數提示

EverEdit支持簡單的基于字符匹配的函數提示,當輸入函數的某個開始字符時,會在上方彈出一個文本框,顯示該函數的原型和釋義,方便用戶確認函數的參數和用法,在輸入函數參數的分割符時,EverEdit會自動地以下劃虛線的方式強調表示。函數提示是以文本文件的形式存儲在calltip文件夾中的,如果需要在calltip中顯示中日韓字符,要確保該文件是以UTF8不帶BOM的形式進行保存的。

下面來看看該文件的存儲格式,以c.ecp為例進行說明。

abs(int x):int\nReturns the absolute value of x

其中有\n字符,表示這是一個換行符,后面的部分表示函數的釋義,當然這部分是可以省略的。前面的部分表示函數的原型。abs一定要寫在最開始,EverEdit會從最開始進行匹配,所以我們把函數的返回類型寫在了最后。在定義完一個calltip之后,我們需要明確的告知EverEdit:該calltip要被那個著色文件的哪個region加載,使用下面的函數:

/**strFileName:文件名稱,不需要帶路徑。比如c.ecp。bCase:前面匹配的部分是否要區分大小寫strWord:該參數是指在匹配的時候,哪些字符可以被認為是單詞。以c.ecp的abs函數為例,因為該文件定義的函數都是以字母開始 的,所以不需要特殊的參數。如果某個函數是諸如abs-def(xx)這樣的話,我們可以把-加入到這個參數中,那就是"-"。strBegin:函數開始字符,一般是左括號(strSep:參數分割字符,一般是逗號,strEnd:函數結束字符,一般是右括號)bRemoveSpace:在匹配的時候是否要刪除空格。比如abs(…),設置該參數為true的話,則忽略abs到(之前的空格。
**/
void AddCallTip( string strFileName, bool bCase, string strWord="", string strBegin="(", s

文檔作者聲明:由于gitbook訪問抽風,EverEdit官方手冊訪問時好時壞,本文檔將其搬運,僅用于學習交流,未經作者許可,不得將本文檔用于其他目的。
Copyright ? 2022~2024 All rights reserved.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/72743.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/72743.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/72743.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Excel處理控件Aspose.Cells教程:如何自動將 HTML 轉換為 Excel

在處理 HTML 表中呈現的結構化數據時,將 HTML 轉換為 Excel 是一種常見需求。無論您是從網站、報告還是任何其他來源提取數據,將其轉換為 Excel 都可以更好地進行分析、操作和共享。 開發人員通常更喜歡使用編程方法將 HTML 轉換為 Excel,因…

基于springbo校園安全管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著信息時代的來臨,過去信息校園安全管理方式的缺點逐漸暴露,本次對過去的校園安全管理方式的缺點進行分析,采取計算機方式構建校園安全管理系統。本文通過閱讀相關文獻,研究國內外相關技術,提出了一種集進出校…

vim在連續多行行首插入相同的字符

工作中經常需要用vim注釋掉一段代碼或者json文件中的一部分,需要在多行前面插入//或者#符號。在 Vim 中,在連續多行行首插入相同字符主要有以下兩種方法: Visual Block 模式插入 將光標移到要插入相同內容的第一行的行首24。按下Ctrl v進入…

Git 實戰指南:本地客戶端連接 Gitee 全流程

本文將以 Gitee(碼云)、系統Windows 11 為例,詳細介紹從本地倉庫初始化到遠程協作的全流程操作 目錄 1. 前期準備1.1 注冊與配置 Gitee1.2 下載、安裝、配置客戶端1.3 配置公鑰到 Gitee2. 本地倉庫操作(PowerShell/Git Bash)2.1 初始化本地倉庫2.2 關聯 Gitee 遠程倉庫3. …

Pytest項目_day01(HTTP接口)

HTTP HTTP是一個協議(服務器傳輸超文本到瀏覽器的傳送協議),是基于TCP/IP通信協議來傳輸數據(HTML文件,圖片文件,查詢結果等)。 訪問域名 例如www.baidu.com就是百度的域名,我們想…

MySQL超詳細介紹(近2萬字)

1. 簡單概述 MySQL安裝后默認有4個庫不可以刪除,存儲的是服務運行時加載的不同功能的程序和數據 information_schema:是MySQL數據庫提供的一個虛擬的數據庫,存儲了MySQL數據庫中的相關信息,比如數據庫、表、列、索引、權限、角色等…

SQLMesh宏操作符深度解析:掌握@star與@GENERATE_SURROGATE_KEY實戰技巧

引言:解鎖SQLMesh的動態查詢能力 在復雜的數據處理場景中,手動編寫重復性SQL代碼不僅效率低下,還難以維護。SQLMesh作為新一代數據庫中間件,通過其強大的宏系統賦予開發者編程式構建查詢的能力。本文將重點解析兩個核心操作符——…

超詳細kubernetes部署k8s----一臺master和兩臺node

一、部署說明 1、主機操作系統說明 2、主機硬件配置說明 二、主機準備(沒有特別說明都是三臺都要配置) 1、配置主機名和IP 2、配置hosts解析 3、防火墻和SELinux 4、時間同步配置 5、配置內核轉發及網橋過濾 6、關閉swap 7、啟用ipvs 8、句柄…

高光譜相機在水果分類與品質檢測中的應用

一、核心應用領域 ?外部品質檢測? ?表面缺陷識別:通過400-1000nm波段的高光譜成像,可檢測蘋果表皮損傷、碰傷等細微缺陷,結合圖像分割技術實現快速分類?。 ?損傷程度評估:例如青香蕉的碰撞損傷會導致光譜反射率變化&#…

【藍橋杯每日一題】3.17

🏝?專欄: 【藍橋杯備篇】 🌅主頁: f狐o貍x 他們說內存泄漏是bug,我說這是系統在逼我進化成SSR級程序員 OK來吧,不多廢話,今天來點有難度的:二進制枚舉 二進制枚舉,就是…

Windows11 新機開荒(二)電腦優化設置

目錄 前言: 一、注冊微軟賬號綁定權益 二、此電腦 桌面圖標 三、系統分盤及默認存儲位置更改 3.1 系統分盤 3.2 默認存儲位置更改 四、精簡任務欄 總結: 前言: 本文承接上一篇 新機開荒(一) 上一篇文章地址&…

aws(學習筆記第三十三課) 深入使用cdk 練習aws athena

文章目錄 aws(學習筆記第三十三課) 深入使用cdk學習內容:1. 使用aws athena1.1 什么是aws athena1.2 什么是aws glue1.2 為什么aws athena和aws glue一起使用 2. 開始練習aws athena2.1 代碼鏈接2.2 整體架構2.3 代碼解析2.3.1 創建測試數據的S3 bucket2.3.2 創建保…

每日學習Java之一萬個為什么(待補充)

Git分支操作 git branch 分支名 git branch -v git checkout -b 分支名 git checkout 分支名 git merge 分支名 git branch -d | -D 分支名Git沖突 git同名文件合并的最基本單位是行。同名文件同一行不同就會發生沖突。 解決辦法:及時溝通,手動更改&…

C++ 多生產者單消費者(MPSC)模式

根據你的需求,多生產者單消費者(MPSC)模式的日志任務隊列需要調整設計。以下是改進后的代碼實現,重點在于多線程安全入隊、單線程消費任務,并確保停止時隊列任務全部處理完畢: 多生產者單消費者(MPSC)任務隊列實現 #include <iostream> #include <queue> …

OpenCV基礎【圖像和視頻的加載與顯示】

目錄 一.創建一個窗口&#xff0c;顯示圖片 二.顯示攝像頭/多媒體文件 三.把攝像頭錄取到的視頻存儲在本地 四.鼠標回調事件 五.TrackBar滑動條 一.創建一個窗口&#xff0c;顯示圖片 import cv2img_path "src/fengjing.jpg" # 自己的圖片路徑 img cv2.imre…

c++--vector

1.定義vector vector的定義分為四種 (1)vector() ——————無參構造 (2)vector(size_t n,const value_type& val value_type()) ——————構造并初始化n個val (3)vector(const vector& v1) ———————拷貝構造 (4)vector(inputiterator first,inpu…

宇樹科技純技能要求總結

一、嵌入式開發與硬件設計 核心技能 嵌入式開發&#xff1a; 精通C/C&#xff0c;熟悉STM32、ARM開發熟悉Linux BSP開發及驅動框架&#xff08;SPI/UART/USB/FLASH/Camera/GPS/LCD&#xff09;掌握主流平臺&#xff08;英偉達、全志、瑞芯微等&#xff09; 硬件設計&#xff1a…

「Unity3D」UGUI運行時設置元素的錨點Anchor,維持元素Rect的顯示不變,即待在原處

在編輯器中&#xff0c;通過設置Raw edit mode&#xff0c;可以切換兩種&#xff0c;元素錨點的改變模式&#xff1a; 一種是錨點單獨改變&#xff0c;即&#xff1a;不開啟原始模式&#xff0c;保持原樣&#xff0c;改變anchoredPosition與sizeDelta。一種是錨點聯動顯示&…

使用 Google Firebase 控制臺和 ESP8266 NodeMCU 的物聯網控制 LED

使用 Google Firebase 控制臺控制 LED ESP8266 您是否想過從世界任何地方控制任何外圍設備?是的,IoT(物聯網)使從任何地方控制任何設備成為可能,并且有許多 IoT 硬件和云平臺可用于實現這一目標。在前面的教程中,我們已經介紹了許多 IoT 應用程序。今天,我們將使用 Goo…

【數據庫】如何用索引優化查詢性能

引言 在數據庫查詢中&#xff0c;索引是提升性能的關鍵工具。合理使用索引可以顯著減少數據掃描量&#xff0c;加快查詢速度。然而&#xff0c;索引的使用也需要謹慎&#xff0c;錯誤的索引策略可能導致性能下降甚至系統崩潰。本文將深入探討如何通過索引優化查詢性能&#xf…