Atom支持語言特定的設(shè)置。你可以在Markdown文件中軟換行,或者在Python中把tab的寬度設(shè)置為4。
語言特定的設(shè)置只是一些東西的子集,我們把它叫做“作用域設(shè)置”。作用域設(shè)置可以只作用于一類特定的語法符號。比如你可以僅僅對Ruby的注釋,Markdown中的代碼段,或者JavaScript函數(shù)名稱進(jìn)行設(shè)置。
編輯器的每個(gè)符號都有一系列的作用域名稱。例如,前面提到的JavaScript函數(shù)可能擁有作用域function
和name
。一個(gè)左括號可能擁有punctuation
、parameters
和begin
作用域。
作用域的名稱就像CSS中的class一樣工作。事實(shí)上,編輯器中的作用域名稱作為CSS的class附加到符號的DOM節(jié)點(diǎn)。
比如這段JavaScript代碼:
function functionName() {
console.log('Log it out');
}
在開發(fā)工具中,第一行的標(biāo)記就像這樣:
span標(biāo)簽上的所有class名稱都是作用域名稱。任何作用域名稱都用于指向一個(gè)設(shè)置的值。
作用域選擇器允許你指向特性符號,就像CSS選擇器指向DOM中特定的節(jié)點(diǎn)。這里是一些例子:
'.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
接受一個(gè)scopeSelector
。如果你想要對JavaScript 函數(shù)名稱進(jìn)行設(shè)置,你可以向它提供一個(gè)js函數(shù)名稱的scopeSelector
:
atom.config.set('.source.js .function.name', 'my-package.my-setting', 'special value')
作用域描述符是一個(gè)對象,它封裝了一個(gè)字符串?dāng)?shù)組。數(shù)組描述了從語法樹根節(jié)點(diǎn)到符號的路徑,包含整個(gè)路徑的所有作用域名稱。
在上面的JavaScript例子中,函數(shù)名稱符號的作用域描述符應(yīng)該為:
['source.js', 'meta.function.js', 'entity.name.function.js']
Config::get
接受一個(gè)scopeDescriptor
,你可以從作用在JavaScript函數(shù)名稱的設(shè)置中獲取值,通過:
scopeDescriptor = ['source.js', 'meta.function.js', 'entity.name.function.js']
value = atom.config.get(scopeDescriptor, 'my-package.my-setting')
但是你并不需要手動(dòng)生成作用域描述符。有一些可用的方法來從編輯器獲取作用域描述符:
Editor::getRootScopeDescriptor
獲取語言的描述符,例如[".source.js"]
。Editor::scopeDescriptorForBufferPosition
獲取緩沖區(qū)中特定位置的描述符。Cursor::getScopeDescriptor
獲取光標(biāo)處的描述符。例如,如果光標(biāo)在例子中的方法名稱上面,會(huì)返回["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')
更多建議: