Add support for setting local settings via filetype

This commit is contained in:
Zachary Yedidia
2017-12-03 23:38:09 -05:00
parent bf33ab532c
commit 9da1ef178e
3 changed files with 38 additions and 18 deletions

File diff suppressed because one or more lines are too long

View File

@@ -100,15 +100,23 @@ func InitLocalSettings(buf *Buffer) {
for k, v := range parsed {
if strings.HasPrefix(reflect.TypeOf(v).String(), "map") {
g, err := glob.Compile(k)
if err != nil {
TermMessage("Error with glob setting ", k, ": ", err)
continue
}
if strings.HasPrefix(k, "ft:") {
if buf.Settings["filetype"].(string) == k[3:] {
for k1, v1 := range v.(map[string]interface{}) {
buf.Settings[k1] = v1
}
}
} else {
g, err := glob.Compile(k)
if err != nil {
TermMessage("Error with glob setting ", k, ": ", err)
continue
}
if g.MatchString(buf.Path) {
for k1, v1 := range v.(map[string]interface{}) {
buf.Settings[k1] = v1
if g.MatchString(buf.Path) {
for k1, v1 := range v.(map[string]interface{}) {
buf.Settings[k1] = v1
}
}
}
}

View File

@@ -249,10 +249,25 @@ will set the option in all buffers.
The `colorscheme` option is global only, and the `filetype` option is local
only. To set an option locally, use `setlocal` instead of `set`.
In the `settings.json` file you can also put set options locally by specifying a
glob. Here is an example which has `tabstospaces` on for all files except Go
In the `settings.json` file you can also put set options locally by specifying either
a glob or a filetype. Here is an example which has `tabstospaces` on for all files except Go
files, and `tabsize` 4 for all files except Ruby files:
```json
{
"ft:go": {
"tabstospaces": false
},
"ft:ruby": {
"tabsize": 2
},
"tabstospaces": true,
"tabsize": 4
}
```
Or similarly you can match with globs:
```json
{
"*.go": {
@@ -265,6 +280,3 @@ files, and `tabsize` 4 for all files except Ruby files:
"tabsize": 4
}
```
As you can see it is quite easy to set options locally using the `settings.json`
file.