鍍金池/ 教程/ C++/ 作用域設(shè)置、作用域和作用域描述符
調(diào)試
初始文件
作用域設(shè)置、作用域和作用域描述符
在Atom中移動
在Atom背后
Atom中的包
為什么選擇Atom?
從Textmate中轉(zhuǎn)換
小結(jié)
新手入門
折疊
代碼段
Hacking Atom
基本的自定義
Atom中的序列化
文本處理包
字?jǐn)?shù)統(tǒng)計包
所需工具
維護(hù)你的包
Atom基礎(chǔ)
深入鍵表(keymap)
配置API
使用Atom
自動補(bǔ)全
面板
在Atom中寫作
文本選擇
創(chuàng)建主題
圖標(biāo)
小結(jié)
開發(fā)Node模塊
編輯和刪除文本
安裝Atom
通過服務(wù)和其它包交互
小結(jié)
編寫 spec
語法
Atom中的版本控制
查找和替換

作用域設(shè)置、作用域和作用域描述符

Atom支持語言特定的設(shè)置。你可以在Markdown文件中軟換行,或者在Python中把tab的寬度設(shè)置為4。

語言特定的設(shè)置只是一些東西的子集,我們把它叫做“作用域設(shè)置”。作用域設(shè)置可以只作用于一類特定的語法符號。比如你可以僅僅對Ruby的注釋,Markdown中的代碼段,或者JavaScript函數(shù)名稱進(jìn)行設(shè)置。

語法符號中的作用域名稱

編輯器的每個符號都有一系列的作用域名稱。例如,前面提到的JavaScript函數(shù)可能擁有作用域functionname。一個左括號可能擁有punctuation、parametersbegin作用域。

作用域的名稱就像CSS中的class一樣工作。事實上,編輯器中的作用域名稱作為CSS的class附加到符號的DOM節(jié)點。

比如這段JavaScript代碼:

function functionName() {
  console.log('Log it out');
}

在開發(fā)工具中,第一行的標(biāo)記就像這樣:

http://wiki.jikexueyuan.com/project/atom-flight-manual-zh-cn/images/markup.png" alt="" />

span標(biāo)簽上的所有class名稱都是作用域名稱。任何作用域名稱都用于指向一個設(shè)置的值。

作用域選擇器

作用域選擇器允許你指向特性符號,就像CSS選擇器指向DOM中特定的節(jié)點。這里是一些例子:

'.source.js' # selects all javascript tokens
'.source.js .function.name' # selects all javascript function names
'.function.name' # selects all function names in any language

Config::set接受一個scopeSelector。如果你想要對JavaScript 函數(shù)名稱進(jìn)行設(shè)置,你可以向它提供一個js函數(shù)名稱的scopeSelector

atom.config.set('.source.js .function.name', 'my-package.my-setting', 'special value')

作用域描述符

作用域描述符是一個對象,它封裝了一個字符串?dāng)?shù)組。數(shù)組描述了從語法樹根節(jié)點到符號的路徑,包含整個路徑的所有作用域名稱。

在上面的JavaScript例子中,函數(shù)名稱符號的作用域描述符應(yīng)該為:

['source.js', 'meta.function.js', 'entity.name.function.js']

Config::get接受一個scopeDescriptor,你可以從作用在JavaScript函數(shù)名稱的設(shè)置中獲取值,通過:

scopeDescriptor = ['source.js', 'meta.function.js', 'entity.name.function.js']
value = atom.config.get(scopeDescriptor, 'my-package.my-setting')

但是你并不需要手動生成作用域描述符。有一些可用的方法來從編輯器獲取作用域描述符:

  • Editor::getRootScopeDescriptor獲取語言的描述符,例如[".source.js"]
  • Editor::scopeDescriptorForBufferPosition獲取緩沖區(qū)中特定位置的描述符。
  • Cursor::getScopeDescriptor獲取光標(biāo)處的描述符。例如,如果光標(biāo)在例子中的方法名稱上面,會返回["source.js", "meta.function.js", "entity.name.function.js"]。

讓我們使用這些方法來回顧我們的例子:

editor = atom.workspace.getActiveTextEditor()
cursor = editor.getLastCursor()
valueAtCursor = atom.config.get(cursor.getScopeDescriptor(), 'my-package.my-setting')
valueForLanguage = atom.config.get(editor.getRootScopeDescriptor(), 'my-package.my-setting')