diff options
Diffstat (limited to '')
| -rw-r--r-- | README.md | 1 | ||||
| -rwxr-xr-x | build | 1 | ||||
| -rw-r--r-- | ftdetect/polyglot.vim | 4 | ||||
| -rw-r--r-- | ftplugin/nix.vim | 17 | ||||
| -rw-r--r-- | syntax/nix.vim | 131 | 
5 files changed, 154 insertions, 0 deletions
| @@ -64,6 +64,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo  - [liquid](https://github.com/tpope/vim-liquid) (syntax, indent, ftplugin, ftdetect)  - [markdown](https://github.com/tpope/vim-markdown) (syntax, ftplugin, ftdetect)  - [nginx](https://github.com/nginx/nginx) (syntax, indent, ftdetect) +- [nix](https://github.com/spwhitt/vim-nix) (syntax, ftplugin, ftdetect)  - [objc](https://github.com/b4winckler/vim-objc) (ftplugin, syntax, indent)  - [ocaml](https://github.com/jrk/vim-ocaml) (syntax, indent, ftplugin)  - [octave](https://github.com/vim-scripts/octave.vim--) (syntax) @@ -135,6 +135,7 @@ PACKS="    liquid:tpope/vim-liquid    markdown:tpope/vim-markdown    nginx:nginx/nginx::/contrib/vim/ +  nix:spwhitt/vim-nix    objc:b4winckler/vim-objc    ocaml:jrk/vim-ocaml    octave:vim-scripts/octave.vim-- diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 9bd0f1c8..fdb540e2 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -254,6 +254,10 @@ au BufRead,BufNewFile */etc/nginx/* set ft=nginx  au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx  au BufRead,BufNewFile nginx.conf set ft=nginx  endif +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1 +   +autocmd BufNewFile,BufRead *.nix setfiletype nix +endif  if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'opencl') == -1  au! BufRead,BufNewFile *.cl set filetype=opencl diff --git a/ftplugin/nix.vim b/ftplugin/nix.vim new file mode 100644 index 00000000..19d20977 --- /dev/null +++ b/ftplugin/nix.vim @@ -0,0 +1,17 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1 +   +if exists("b:did_ftplugin") +    finish +endif +let b:did_ftplugin=1 + +setlocal comments= +setlocal commentstring=#\ %s + +" Nixpkgs indent settings +setlocal tabstop=2 +setlocal softtabstop=2 +setlocal shiftwidth=2 +setlocal expandtab + +endif diff --git a/syntax/nix.vim b/syntax/nix.vim new file mode 100644 index 00000000..9a275ea7 --- /dev/null +++ b/syntax/nix.vim @@ -0,0 +1,131 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'nix') == -1 +   +" +" Syntax file for Nix +" +" TODO: +"   Emphasize : +"   Deemphasize ; +"   Consistent () +"   rec (red?) + +if exists("b:current_syntax") +    finish +endif + +" Operators +syn match nixOperator "\V++" +syn match nixOperator "\V+" +syn match nixOperator "\V!" +syn match nixOperator "\V==" +syn match nixOperator "\V!=" +syn match nixOperator "\V&&" +syn match nixOperator "\V||" +syn match nixOperator "\V->" + +syn match nixOperator "\V-" +syn match nixOperator "\V*" +syn match nixOperator "\V/" +syn match nixOperator "\V>" +syn match nixOperator "\V<" + +" Keywords +syn keyword nixKeyword let in or assert inherit null with rec +syn keyword nixConditional if else then +syn keyword nixBoolean true false + +" Builtins +syn keyword nixBuiltin builtins abort add attrNames attrValues +            \ baseNameOf compareVersions concatLists currentSystem deepSeq +            \ derivation dirOf div elem elemAt filter filterSource fromJSON +            \ getAttr getEnv hasAttr hashString head import intersectAttrs +            \ isAttrs isList isFunction isString isInt isBool isNull length +            \ lessThan listToAttrs map mul parseDrvNames pathExists readDir +            \ readFile removeAttrs seq stringLength sub substring tail throw +            \ toFile toJSON toPath toString toXML trace typeOf tryEval + +syn match nixpkgs "<nixpkgs>" +syn match nixSpecialOper "\V@\|;\|,\|?\|..." + +" Attribute Lists +"syn match nixBrace "\v[(){}\[\]]|rec\s*\{" +syn region nixSet matchgroup=nixBraces start="{" end="}" contains=ALL +syn region nixRecSet matchgroup=nixBraces start="rec\s*{" end="}" contains=ALL +syn region nixList matchgroup=nixBraces start="\[" end="\]" contains=ALLBUT,nixAttr +syn match nixAttr "\v[0-9A-Za-z\-\_]+\ze\s*\=" contained + +syn match nixInteger "\v<\d+>" + +" Functions +syn match nixFuncArg "\v\zs\w+\ze\s*:" + +" TODO: Exclude ; and other illegal characters +syn match nixPath "\v\S*/\S+|\S+/\S*" + +" This operator is placed after nixPath to override nixPath's highlighting +syn match nixOperator "\V//" + +" Strings +syn match nixStringIndentedEscapes +'''\|''\${\|''\\n\|''\\r\|''\\t+ +syn match nixStringEscapes +\\"\|\\\${\|\\n\|\\r\|\\t\|\\\\+ +syn region nixStringIndented +            \ start=+''+ +            \ skip=+'''+ +            \ end=+''+ +            \ contains=nixAntiquotation,nixStringIndentedEscapes +syn region nixString +            \ start=+"+ +            \ skip=+\\"+ +            \ end=+"+ +            \ contains=nixAntiquotation,nixStringEscapes + +" If this contains nixBrace, it ignores its own closing brace and syntax gets +" thrown way off contains=ALLBUT,nixBrace +syn region nixAntiquotation start=+\${+ end=+}+ contains=nixAntiQuotation + +" Comments +syn region nixMultiLineComment start=+/\*+ skip=+\\"+ end=+\*/+ contains=nixTodos +syn match  nixEndOfLineComment "#.*$" contains=nixTodos +syntax keyword nixTodos TODO XXX FIXME NOTE TODOS contained + +" Special (Delimiter +hi def link nixBraces                Delimiter +hi def link nixpkgs                  Special +hi def link nixSpecialOper           Special +hi def link nixStringIndentedEscapes SpecialChar +hi def link nixStringEscapes         SpecialChar +hi def link nixBuiltin               Special +hi def link nixOperator              Operator + +" Constants +hi def link nixBoolean          Boolean +hi def link nixInteger          Number +hi def link nixString           String +hi def link nixStringIndented   String + +" Comments +hi def link nixMultiLineComment Comment +hi def link nixEndOfLineComment Comment + +" Identifiers +hi def link nixConditional      Conditional +hi def link nixKeyword          Keyword +hi def link nixOperator         Operator +hi def link nixException        Exception +hi def link nixAttr             Identifier +hi def link nixFuncArg          Identifier + +" PreProc +hi def link nixAntiquotation      Macro + +" Underlined (html links) +hi def link nixPath             Underlined + +" Error + +syn sync maxlines=20000 +syn sync minlines=50000 + +let b:current_syntax = 'nix' + +endif | 
