VS 2008 可擴充套件性開發(七) 操作文字編輯器

2021-07-26 23:30:14 字數 2206 閱讀 2190

前言

在可擴充套件性開發(六)中,我介紹了對於solution explorer的基本操作。不過,對咱們開發人員來說,絕大部分時間面對的還是編輯器。

程式設計時始終優先使用鍵盤而非滑鼠

跟以前一樣,這裡首先簡單介紹一下aom中的相關介面、型別。

1)documents

在預設情況下,vs會以標籤式文件呈現開啟的各個文件。這些文件的集合在aom中就是documents,它實現了ienumerable介面。通過該介面,我們可以獲取當前開啟的文件,它的重要屬性和方法有:

這些成員的含義是相當簡單、直白的。我們可以通過迴圈變數所有開啟的文件,以獲取所有文件的資訊,對於單個文件來說,它對應於document介面。

2)document

關於document成員的詳細資訊,請參看這裡。其中的selection屬性非常有用,因為很多時候我們都是先選中文件的部分內容,再進行相應的操作。另外,在開啟的多個文件中,只有乙個處於活動狀態,可以使用dte.activedocument屬性來快速獲取該文件。

在獲取文件的引用後,下一步就可以考慮如何進行編輯了。我們得了解5個介面:textselection、textpoint、editpoint、virtualpoint、textdocument。相信在了解了這些介面後,你在操作編輯器時會得心應手的。

3)textselection

該介面提供對文件的編輯操作和選定文字的訪問。它的成員比document還有多很多,功能非常全面,應當可以滿足絕大部分需要了,這裡就不再一一枚舉了,可以參看msdn的內容。

我們在手工輸入**時,可以看作總是在游標處輸入,也可以把游標看作乙個點,這個點包含一些資訊,如行號、列號等,這樣vs就可以處理輸入的內容,在add-in中以程式設計方式輸入時與此類似,這個「點」就是textpoint。

4)textpoint

該介面表示文件中的某個位置,editpoint和virtualpoint繼承於此。它的主要屬性和方法有:

absolutecharoffset:從文件開始計算的絕對字元位置,從1開始;

atendofdocument/atendofline:指示該點是否處於文件/行的結尾;

atstartofdocument/atstartofline:指示該點是否處於文件/行的開頭;

displaycolumn:顯示列號;

line:行號;

linecharoffset:該點在行內的位置;

linelength:該點所在行的字元數;

equalto()/greaterthan()/lessthan():與另乙個textpoint比較相互的位置關係;

關於textpoint的所有成員資訊,請參看這裡。光有textpoint還不能編輯,要真正進行編輯,得使用editpoint介面。

5)editpoint

editpoint從textpoint那裡繼承了所有的屬性和方法,它還提供了很多用於編輯的屬性和方法,比如常見的插入、刪除、剪下、粘帖、書籤操作,還有位置的移動等等,使我們在編輯文字時擁有了強大的能力。關於editpoint的所有成員資訊,請參看這裡。

有時一行內的字元數很多,此時在螢幕能就看不到了,也就是說超出了文件的右邊距,要操作在右邊距之外的文字需要virtualpoint。

6)virtualpoint

virtualpoint也繼承自textpoint,只是新增了少數幾個屬性和方法,這裡就不再贅述了,可以參看這裡。

7)textdocument

最後乙個介面是textdocument,它表示在編輯器中開啟的文件。在你了解了前面幾個介面的成員後,對textdocument的成員也很容易了解了。

在操作文字時,大部分時候可以選擇從textselection開始,不過在某些情況下textdocument是個不錯的開始,可以考慮先使用textdocument,如果不能滿足需要,再轉向前面的幾個介面。

在介紹了這麼多介面之後,該看乙個例子了。

codetemplate示例

0)問題分析

這一次要給nenhancer新增的功能是**模板。它源自我當前的專案需要,專案要求每次修改**都要新增這樣的注釋:

CSS可擴充套件性

今日在寫pc官網的時候,一直對於html css的結構編寫完全按照自己的思維方式,今天把 交給老大的時候,被他指出很多編寫 的錯誤性,比如 結構,標籤的使用,語義化,css的可擴充套件性,由於 主要還是需要做seo優化,所以在標籤使用上也有些不合理之處,給了我一些建議,自己記錄以下 1 在html標...

Flume的可擴充套件性

flume的可擴充套件性 flume採用了三層架構,分別為agent,collector和storage,每一層均可以水平擴充套件。其中,所有agent和 collector由master統一管理,這使得系統容易監控和維護,且master允許有多個 使用zookeeper進行管理和負載均衡 這就避 ...

Flume的可擴充套件性

flume的可擴充套件性 flume採用了三層架構,分別為agent,collector和storage,每一層均可以水平擴充套件。其中,所有agent和 collector由master統一管理,這使得系統容易監控和維護,且master允許有多個 使用zookeeper進行管理和負載均衡 這就避 ...