diff options
Diffstat (limited to 'runtime')
397 files changed, 25661 insertions, 7561 deletions
diff --git a/runtime/autoload/ccomplete.vim b/runtime/autoload/ccomplete.vim index 156b3af025..95a20e16b0 100644 --- a/runtime/autoload/ccomplete.vim +++ b/runtime/autoload/ccomplete.vim @@ -1,13 +1,13 @@ " Vim completion script " Language: C " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 Aug 20 +" Last Change: 2020 Nov 14 let s:cpo_save = &cpo set cpo&vim " This function is used for the 'omnifunc' option. -function! ccomplete#Complete(findstart, base) +func ccomplete#Complete(findstart, base) if a:findstart " Locate the start of the item, including ".", "->" and "[...]". let line = getline('.') @@ -244,7 +244,7 @@ function! ccomplete#Complete(findstart, base) return map(res, 's:Tagline2item(v:val, brackets)') endfunc -function! s:GetAddition(line, match, memarg, bracket) +func s:GetAddition(line, match, memarg, bracket) " Guess if the item is an array. if a:bracket && match(a:line, a:match . '\s*\[') > 0 return '[' @@ -260,13 +260,13 @@ function! s:GetAddition(line, match, memarg, bracket) endif endif return '' -endfunction +endfunc " Turn the tag info "val" into an item for completion. " "val" is is an item in the list returned by taglist(). " If it is a variable we may add "." or "->". Don't do it for other types, " such as a typedef, by not including the info that s:GetAddition() uses. -function! s:Tag2item(val) +func s:Tag2item(val) let res = {'match': a:val['name']} let res['extra'] = s:Tagcmd2extra(a:val['cmd'], a:val['name'], a:val['filename']) @@ -289,10 +289,10 @@ function! s:Tag2item(val) endif return res -endfunction +endfunc " Use all the items in dictionary for the "info" entry. -function! s:Dict2info(dict) +func s:Dict2info(dict) let info = '' for k in sort(keys(a:dict)) let info .= k . repeat(' ', 10 - len(k)) @@ -307,7 +307,7 @@ function! s:Dict2info(dict) endfunc " Parse a tag line and return a dictionary with items like taglist() -function! s:ParseTagline(line) +func s:ParseTagline(line) let l = split(a:line, "\t") let d = {} if len(l) >= 3 @@ -334,12 +334,12 @@ function! s:ParseTagline(line) endif return d -endfunction +endfunc " Turn a match item "val" into an item for completion. " "val['match']" is the matching item. " "val['tagline']" is the tagline in which the last part was found. -function! s:Tagline2item(val, brackets) +func s:Tagline2item(val, brackets) let line = a:val['tagline'] let add = s:GetAddition(line, a:val['match'], [a:val], a:brackets == '') let res = {'word': a:val['match'] . a:brackets . add } @@ -377,10 +377,10 @@ function! s:Tagline2item(val, brackets) let res['menu'] = s:Tagcmd2extra(s, a:val['match'], matchstr(line, '[^\t]*\t\zs[^\t]*\ze\t')) endif return res -endfunction +endfunc " Turn a command from a tag line to something that is useful in the menu -function! s:Tagcmd2extra(cmd, name, fname) +func s:Tagcmd2extra(cmd, name, fname) if a:cmd =~ '^/^' " The command is a search command, useful to see what it is. let x = matchstr(a:cmd, '^/^\s*\zs.*\ze$/') @@ -395,13 +395,13 @@ function! s:Tagcmd2extra(cmd, name, fname) let x = a:cmd . ' - ' . a:fname endif return x -endfunction +endfunc " Find composing type in "lead" and match items[0] with it. " Repeat this recursively for items[1], if it's there. " When resolving typedefs "depth" is used to avoid infinite recursion. " Return the list of matches. -function! s:Nextitem(lead, items, depth, all) +func s:Nextitem(lead, items, depth, all) " Use the text up to the variable name and split it in tokens. let tokens = split(a:lead, '\s\+\|\<') @@ -485,7 +485,7 @@ function! s:Nextitem(lead, items, depth, all) endfor return res -endfunction +endfunc " Search for members of structure "typename" in tags files. @@ -493,7 +493,7 @@ endfunction " Each match is a dictionary with "match" and "tagline" entries. " When "all" is non-zero find all, otherwise just return 1 if there is any " member. -function! s:StructMembers(typename, items, all) +func s:StructMembers(typename, items, all) " Todo: What about local structures? let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) if fnames == '' @@ -586,12 +586,12 @@ function! s:StructMembers(typename, items, all) " Failed to find anything. return [] -endfunction +endfunc " For matching members, find matches for following items. " When "all" is non-zero find all, otherwise just return 1 if there is any " member. -function! s:SearchMembers(matches, items, all) +func s:SearchMembers(matches, items, all) let res = [] for i in range(len(a:matches)) let typename = '' @@ -635,3 +635,5 @@ endfunc let &cpo = s:cpo_save unlet s:cpo_save + +" vim: noet sw=2 sts=2 diff --git a/runtime/autoload/clojurecomplete.vim b/runtime/autoload/clojurecomplete.vim index 030785e901..2c0f0eacd4 100644 --- a/runtime/autoload/clojurecomplete.vim +++ b/runtime/autoload/clojurecomplete.vim @@ -1,14 +1,15 @@ " Vim completion script -" Language: Clojure -" Maintainer: Sung Pae <self@sungpae.com> -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 18 July 2016 +" Language: Clojure +" Maintainer: Alex Vear <av@axvr.io> +" Former Maintainers: Sung Pae <self@sungpae.com> +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2021-02-13 " -*- COMPLETION WORDS -*- -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj -" Clojure version 1.8.0 -let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","cat","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","identical?","identity","if","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"] +" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj +" Clojure version 1.10.2 +let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","PrintWriter-on","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-tap","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","case-fallthrough-err-impl","cast","cat","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-cause","ex-data","ex-info","ex-message","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","quote","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read+string","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-tap","remove-watch","repeat","repeatedly","replace","replicate","require","requiring-resolve","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","tap>","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"] " Simple word completion for special forms and public vars in clojure.core function! clojurecomplete#Complete(findstart, base) diff --git a/runtime/autoload/decada.vim b/runtime/autoload/decada.vim index 7741ff0572..5124429a75 100644 --- a/runtime/autoload/decada.vim +++ b/runtime/autoload/decada.vim @@ -25,7 +25,7 @@ function decada#Unit_Name () dict " {{{1 " Convert filename into acs unit: " 1: remove the file extenstion. " 2: replace all double '_' or '-' with an dot (which denotes a separate) - " 3: remove a trailing '_' (wich denotes a specification) + " 3: remove a trailing '_' (which denotes a specification) return substitute (substitute (expand ("%:t:r"), '__\|-', ".", "g"), '_$', "", '') endfunction decada#Unit_Name " }}}1 diff --git a/runtime/autoload/dist/ft.vim b/runtime/autoload/dist/ft.vim index cf26bc3172..1ac74b5785 100644 --- a/runtime/autoload/dist/ft.vim +++ b/runtime/autoload/dist/ft.vim @@ -1,7 +1,7 @@ " Vim functions for file type detection " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2019 Mar 08 +" Last Change: 2020 Aug 17 " These functions are moved here from runtime/filetype.vim to make startup " faster. @@ -298,7 +298,7 @@ endfunc func dist#ft#FTmms() let n = 1 - while n < 10 + while n < 20 let line = getline(n) if line =~ '^\s*\(%\|//\)' || line =~ '^\*' setf mmix @@ -325,7 +325,7 @@ endfunc func dist#ft#FTmm() let n = 1 - while n < 10 + while n < 20 let line = getline(n) if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)' setf objcpp diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim index 984ba8b58e..6b9d49a469 100644 --- a/runtime/autoload/htmlcomplete.vim +++ b/runtime/autoload/htmlcomplete.vim @@ -1,7 +1,7 @@ " Vim completion script " Language: HTML and XHTML " Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2014 Jun 20 +" Last Change: 2019 Sep 27 " Distinguish between HTML versions. " To use with other HTML versions add another "elseif" condition to match @@ -245,7 +245,8 @@ function! htmlcomplete#CompleteTags(findstart, base) " If context contains white space it is attribute. " It can be also value of attribute. " We have to get first word to offer proper completions - if context == '' + if context =~ '^\s*$' + " empty or whitespace line let tag = '' else let tag = split(context)[0] diff --git a/runtime/autoload/man.vim b/runtime/autoload/man.vim index c629923cd3..4f556e6e87 100644 --- a/runtime/autoload/man.vim +++ b/runtime/autoload/man.vim @@ -252,11 +252,11 @@ function! s:verify_exists(sect, name) abort if !empty($MANSECT) try let MANSECT = $MANSECT - unset $MANSECT + call setenv('MANSECT', v:null) return s:get_path('', a:name) catch /^command error (/ finally - let $MANSECT = MANSECT + call setenv('MANSECT', MANSECT) endtry endif diff --git a/runtime/autoload/netrw.vim b/runtime/autoload/netrw.vim index 7a799abb13..74ceab35d4 100644 --- a/runtime/autoload/netrw.vim +++ b/runtime/autoload/netrw.vim @@ -1,7 +1,7 @@ " netrw.vim: Handles file transfer and remote directory listing across " AUTOLOAD SECTION -" Date: Jan 07, 2020 -" Version: 168 +" Date: Sep 18, 2020 +" Version: 170 " Maintainer: Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim " Copyright: Copyright (C) 2016 Charles E. Campbell {{{1 @@ -43,7 +43,7 @@ if exists("s:needspatches") endfor endif -let g:loaded_netrw = "v168" +let g:loaded_netrw = "v170" if !exists("s:NOTE") let s:NOTE = 0 let s:WARNING = 1 @@ -86,7 +86,16 @@ fun! netrw#ErrorMsg(level,msg,errnum) endif " call Decho("level=".level,'~'.expand("<slnum>")) - if g:netrw_use_errorwindow + if g:netrw_use_errorwindow == 2 && (v:version > 802 || (v:version == 802 && has("patch486"))) + " use popup window + if type(a:msg) == 3 + let msg = [level]+a:msg + else + let msg= level.a:msg + endif + let s:popuperr_id = popup_beval(msg,{}) + let s:popuperr_text= "" + elseif g:netrw_use_errorwindow " (default) netrw creates a one-line window to show error/warning " messages (reliably displayed) @@ -203,7 +212,11 @@ let g:netrw_localrmdiropt = "" " --------------------------------------------------------------------- " Default values for netrw's global protocol variables {{{2 -call s:NetrwInit("g:netrw_use_errorwindow",1) +if (v:version > 802 || (v:version == 802 && has("patch486"))) && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") && has("mouse") + call s:NetrwInit("g:netrw_use_errorwindow",2) +else + call s:NetrwInit("g:netrw_use_errorwindow",1) +endif if !exists("g:netrw_dav_cmd") if executable("cadaver") @@ -559,6 +572,7 @@ call s:NetrwInit("s:netrw_posn",'{}') if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") " call Decho("installed beval events",'~'.expand("<slnum>")) let &l:bexpr = "netrw#BalloonHelp()" +" call Decho("&l:bexpr<".&l:bexpr."> buf#".bufnr()) au FileType netrw setl beval au WinLeave * if &ft == "netrw" && exists("s:initbeval")|let &beval= s:initbeval|endif au VimEnter * let s:initbeval= &beval @@ -591,7 +605,18 @@ if v:version >= 700 && has("balloon_eval") && has("syntax") && exists("g:syntax_ if &ft != "netrw" return "" endif - if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval) + if exists("s:popuperr_id") && popup_getpos(s:popuperr_id) != {} + " popup error window is still showing + " s:pouperr_id and s:popuperr_text are set up in netrw#ErrorMsg() + if exists("s:popuperr_text") && s:popuperr_text != "" && v:beval_text != s:popuperr_text + " text under mouse hasn't changed; only close window when it changes + call popup_close(s:popuperr_id) + unlet s:popuperr_text + else + let s:popuperr_text= v:beval_text + endif + let mesg= "" + elseif !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval) let mesg= "" elseif v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing" let mesg = "i: thin-long-wide-tree gh: quick hide/unhide of dot-files qf: quick file info %:open new file" @@ -1212,6 +1237,10 @@ fun! netrw#Lexplore(count,rightside,...) setlocal winfixwidth let g:netrw_altv = keep_altv let t:netrw_lexbufnr = bufnr("%") + " done to prevent build-up of hidden buffers due to quitting and re-invocation of :Lexplore. + " Since the intended use of :Lexplore is to have an always-present explorer window, the extra + " effort to mis-use :Lex is warranted. + set bh=wipe " call Decho("let t:netrw_lexbufnr=".t:netrw_lexbufnr) " call Decho("t:netrw_lexposn".(exists("t:netrw_lexposn")? string(t:netrw_lexposn) : " n/a")) if exists("t:netrw_lexposn") @@ -1864,7 +1893,7 @@ fun! s:NetrwRestoreSetting(keepvar,setting) if type(a:setting) == 0 exe "let ".a:setting."= ".keepvarval elseif type(a:setting) == 1 - exe "let ".a:setting."= '".keepvarval."'" + exe "let ".a:setting."= '".substitute(keepvarval,"'","''","g")."'" else call netrw#ErrorMsg(s:ERROR,"(s:NetrwRestoreSetting) doesn't know how to restore ".a:keepvar." with a setting of type#".type(a:setting),105) endif @@ -3596,6 +3625,8 @@ fun! s:NetrwBookHistSave() let savefile= s:NetrwHome()."/.netrwhist" " call Decho("savefile<".savefile.">",'~'.expand("<slnum>")) 1split + + " setting up a new buffer which will become .netrwhist call s:NetrwEnew() " call Decho("case g:netrw_use_noswf=".g:netrw_use_noswf.(exists("+acd")? " +acd" : " -acd"),'~'.expand("<slnum>")) if g:netrw_use_noswf @@ -4678,7 +4709,7 @@ endfun " "new directory name" is actually a file, " NetrwBrowseChgDir() edits the file. fun! s:NetrwBrowseChgDir(islocal,newdir,...) -" call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") +" call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." win#".winnr()." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">") " call Decho("tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol(),'~'.expand("<slnum>")) let ykeep= @@ @@ -4707,13 +4738,14 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) let newdir = a:newdir let dolockout = 0 let dorestore = 1 +" call Decho("win#".winnr(),'~'.expand("<slnum>")) " call Decho("dirname<".dirname.">",'~'.expand("<slnum>")) " call Decho("newdir<".newdir.">",'~'.expand("<slnum>")) " ignore <cr>s when done in the banner " call Decho('(s:NetrwBrowseChgDir) ignore [return]s when done in banner (g:netrw_banner='.g:netrw_banner.")",'~'.expand("<slnum>")) if g:netrw_banner -" call Decho("w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." line(.)#".line('.')." line($)#".line("#"),'~'.expand("<slnum>")) +" call Decho("win#".winnr()." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'n/a')." line(.)#".line('.')." line($)#".line("#"),'~'.expand("<slnum>")) if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt && line("$") >= w:netrw_bannercnt if getline(".") =~# 'Quick Help' " call Decho("#1: quickhelp=".g:netrw_quickhelp." ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)",'~'.expand("<slnum>")) @@ -4750,7 +4782,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) " ------------------------------ " NetrwBrowseChgDir: edit a file {{{3 " ------------------------------ -" call Decho('(s:NetrwBrowseChgDir) edit-a-file: case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">",'~'.expand("<slnum>")) +" call Decho('edit-a-file: case "handling a file": win#'.winnr().' newdir<'.newdir.'> !~ dirpat<'.dirpat.">",'~'.expand("<slnum>")) " save position for benefit of Rexplore let s:rexposn_{bufnr("%")}= winsaveview() @@ -4785,7 +4817,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) NetrwKeepj call s:NetrwOptionsRestore("s:") let curdir= b:netrw_curdir if !exists("s:didsplit") -" call Decho("edit-a-file: s:didsplit does not exist; g:netrw_browse_split=".string(g:netrw_browse_split)." win#".winnr(),'~'.expand("<slnum>")) +" " call Decho("edit-a-file: s:didsplit does not exist; g:netrw_browse_split=".string(g:netrw_browse_split)." win#".winnr()." g:netrw_chgwin=".g:netrw_chgwin",'~'.expand("<slnum>")) if type(g:netrw_browse_split) == 3 " open file in server " Note that g:netrw_browse_split is a List: [servername,tabnr,winnr] @@ -4793,22 +4825,27 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) call s:NetrwServerEdit(a:islocal,dirname) " call Dret("s:NetrwBrowseChgDir") return + elseif g:netrw_browse_split == 1 " horizontally splitting the window first " call Decho("edit-a-file: horizontally splitting window prior to edit",'~'.expand("<slnum>")) - keepalt new + let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize + exe "keepalt ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s" if !&ea keepalt wincmd _ endif call s:SetRexDir(a:islocal,curdir) + elseif g:netrw_browse_split == 2 " vertically splitting the window first " call Decho("edit-a-file: vertically splitting window prior to edit",'~'.expand("<slnum>")) - keepalt rightb vert new + let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize + exe "keepalt ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s" if !&ea keepalt wincmd | endif call s:SetRexDir(a:islocal,curdir) + elseif g:netrw_browse_split == 3 " open file in new tab " call Decho("edit-a-file: opening new tab prior to edit",'~'.expand("<slnum>")) @@ -4817,6 +4854,7 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) let b:netrw_curdir= getcwd() endif call s:SetRexDir(a:islocal,curdir) + elseif g:netrw_browse_split == 4 " act like "P" (ie. open previous window) " call Decho("edit-a-file: use previous window for edit",'~'.expand("<slnum>")) @@ -4826,13 +4864,14 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) return endif call s:SetRexDir(a:islocal,curdir) + else " handling a file, didn't split, so remove menu " call Decho("edit-a-file: handling a file+didn't split, so remove menu",'~'.expand("<slnum>")) call s:NetrwMenu(0) " optional change to window if g:netrw_chgwin >= 1 -" call Decho("edit-a-file: changing window to #".g:netrw_chgwin,'~'.expand("<slnum>")) +" call Decho("edit-a-file: changing window to #".g:netrw_chgwin.": (due to g:netrw_chgwin)",'~'.expand("<slnum>")) if winnr("$")+1 == g:netrw_chgwin " if g:netrw_chgwin is set to one more than the last window, then " vertically split the last window to make that window available. @@ -4845,19 +4884,26 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) endif call s:SetRexDir(a:islocal,curdir) endif + endif " the point where netrw actually edits the (local) file " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will " no keepalt to support :e # to return to a directory listing + if !&mod + " if e the new file would fail due to &mod, then don't change any of the flags + let dolockout= 1 + endif if a:islocal " call Decho("edit-a-file: edit local file: exe e! ".fnameescape(dirname),'~'.expand("<slnum>")) " some like c-^ to return to the last edited file " others like c-^ to return to the netrw buffer + " Apr 30, 2020: used to have e! here. That can cause loss of a modified file, + " so emit error E37 instead. if exists("g:netrw_altfile") && g:netrw_altfile - exe "NetrwKeepj keepalt e! ".fnameescape(dirname) + exe "NetrwKeepj keepalt e ".fnameescape(dirname) else - exe "NetrwKeepj e! ".fnameescape(dirname) + exe "NetrwKeepj e ".fnameescape(dirname) endif " call Decho("edit-a-file: after e! ".dirname.": hidden=".&hidden." bufhidden<".&bufhidden."> mod=".&mod,'~'.expand("<slnum>")) call s:NetrwCursor() @@ -4868,7 +4914,6 @@ fun! s:NetrwBrowseChgDir(islocal,newdir,...) else " call Decho("edit-a-file: remote file: NetrwBrowse will edit it",'~'.expand("<slnum>")) endif - let dolockout= 1 " handle g:Netrw_funcref -- call external-to-netrw functions " This code will handle g:Netrw_funcref as an individual function reference @@ -5332,16 +5377,6 @@ fun! netrw#BrowseX(fname,remote) endif let ret= v:shell_error - elseif has("unix") && executable("kfmclient") && s:CheckIfKde() -" call Decho("(netrw#BrowseX) unix and kfmclient",'~'.expand("<slnum>")) - call s:NetrwExe("sil !kfmclient exec ".s:ShellEscape(fname,1)." ".redir) - let ret= v:shell_error - - elseif has("unix") && executable("exo-open") && executable("xdg-open") && executable("setsid") -" call Decho("(netrw#BrowseX) unix, exo-open, xdg-open",'~'.expand("<slnum>")) - call s:NetrwExe("sil !setsid xdg-open ".s:ShellEscape(fname,1).redir) - let ret= v:shell_error - elseif has("unix") && $DESKTOP_SESSION == "mate" && executable("atril") " call Decho("(netrw#BrowseX) unix and atril",'~'.expand("<slnum>")) if a:fname =~ '^https\=://' @@ -5356,9 +5391,19 @@ fun! netrw#BrowseX(fname,remote) endif let ret= v:shell_error + elseif has("unix") && executable("kfmclient") && s:CheckIfKde() +" call Decho("(netrw#BrowseX) unix and kfmclient",'~'.expand("<slnum>")) + call s:NetrwExe("sil !kfmclient exec ".s:ShellEscape(fname,1)." ".redir) + let ret= v:shell_error + + elseif has("unix") && executable("exo-open") && executable("xdg-open") && executable("setsid") +" call Decho("(netrw#BrowseX) unix, exo-open, xdg-open",'~'.expand("<slnum>")) + call s:NetrwExe("sil !setsid xdg-open ".s:ShellEscape(fname,1).redir.'&') + let ret= v:shell_error + elseif has("unix") && executable("xdg-open") " call Decho("(netrw#BrowseX) unix and xdg-open",'~'.expand("<slnum>")) - call s:NetrwExe("sil !xdg-open ".s:ShellEscape(fname,1).redir) + call s:NetrwExe("sil !xdg-open ".s:ShellEscape(fname,1).redir.'&') let ret= v:shell_error elseif has("macunix") && executable("open") @@ -6053,10 +6098,10 @@ fun! s:NetrwListHide() " Duplicate characters don't matter. " Remove all such characters from the '/~@#...890' string. " Use the first character left as a separator character. -" call Decho("find a character not in the hide string to use as a separator") +" call Decho("find a character not in the hide string to use as a separator",'~'.expand("<slnum>")) let listhide= g:netrw_list_hide let sep = strpart(substitute('~@#$%^&*{};:,<.>?|1234567890','['.escape(listhide,'-]^\').']','','ge'),1,1) -" call Decho("sep=".sep," (sep not in hide string)'~'.expand("<slnum>")) +" call Decho("sep<".sep."> (sep not in hide string)",'~'.expand("<slnum>")) while listhide != "" if listhide =~ ',' @@ -6066,7 +6111,7 @@ fun! s:NetrwListHide() let hide = listhide let listhide = "" endif -" call Decho("..extracted from listhide: hide<".hide."> g:netrw_sort_by<".g:netrw_sort_by.'>','~'.expand("<slnum>")) +" call Decho("..extracted pattern from listhide: hide<".hide."> g:netrw_sort_by<".g:netrw_sort_by.'>','~'.expand("<slnum>")) if g:netrw_sort_by =~ '^[ts]' if hide =~ '^\^' " call Decho("..modify hide to handle a \"^...\" pattern",'~'.expand("<slnum>")) @@ -6078,7 +6123,7 @@ fun! s:NetrwListHide() endif " Prune the list by hiding any files which match -" call Decho("..prune the list by hiding any files which ",((g:netrw_hide == 1)? "" : "don't")." match hide<".hide.">") +" call Decho("..prune the list by hiding any files which ".((g:netrw_hide == 1)? "" : "don't")."match hide<".hide.">") if g:netrw_hide == 1 " call Decho("..hiding<".hide.">",'~'.expand("<slnum>")) exe 'sil! NetrwKeepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d' @@ -9161,6 +9206,7 @@ endfun " (full path directory with trailing slash returned) fun! s:NetrwTreeDir(islocal) " call Dfunc("s:NetrwTreeDir(islocal=".a:islocal.") getline(".line(".").")"."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> ft=".&ft) +" call Decho("Determine tree directory given current cursor position") " call Decho("g:netrw_keepdir =".(exists("g:netrw_keepdir")? g:netrw_keepdir : 'n/a'),'~'.expand("<slnum>")) " call Decho("w:netrw_liststyle=".(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'),'~'.expand("<slnum>")) " call Decho("w:netrw_treetop =".(exists("w:netrw_treetop")? w:netrw_treetop : 'n/a'),'~'.expand("<slnum>")) @@ -9266,7 +9312,6 @@ fun! s:NetrwTreeDisplay(dir,depth) call setline(line("$")+1,a:depth.shortdir.'/') endif " call Decho("setline#".line("$")." shortdir<".a:depth.shortdir.">",'~'.expand("<slnum>")) - " append a / to dir if its missing one let dir= a:dir @@ -9280,7 +9325,7 @@ fun! s:NetrwTreeDisplay(dir,depth) let listhide= split(g:netrw_list_hide,',') " call Decho("listhide=".string(listhide)) for pat in listhide - call filter(w:netrw_treedict[dir],'v:val !~ "'.pat.'"') + call filter(w:netrw_treedict[dir],'v:val !~ "'.escape(pat,'\\').'"') endfor elseif g:netrw_hide == 2 @@ -9418,6 +9463,7 @@ fun! s:NetrwTreeListing(dirname) " call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")",'~'.expand("<slnum>")) " display from treetop on down +" call Decho("(s:NetrwTreeListing) w:netrw_treetop<".w:netrw_treetop.">") NetrwKeepj call s:NetrwTreeDisplay(w:netrw_treetop,"") " call Decho("s:NetrwTreeDisplay) setl noma nomod ro",'~'.expand("<slnum>")) @@ -9678,7 +9724,7 @@ fun! s:PerformListing(islocal) " Hiding... -or- Showing... {{{3 if g:netrw_banner -" call Decho("--handle hiding/showing (g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">)",'~'.expand("<slnum>")) +" call Decho("--handle hiding/showing in banner (g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">)",'~'.expand("<slnum>")) if g:netrw_list_hide != "" && g:netrw_hide if g:netrw_hide == 1 NetrwKeepj put ='\" Hiding: '.g:netrw_list_hide @@ -9731,7 +9777,7 @@ fun! s:PerformListing(islocal) " call Decho("g:netrw_banner=".g:netrw_banner.": banner ".(g:netrw_banner? "enabled" : "suppressed").": (line($)=".line("$")." byte2line(1)=".byte2line(1)." bannercnt=".w:netrw_bannercnt.")",'~'.expand("<slnum>")) if !g:netrw_banner || line("$") >= w:netrw_bannercnt -" call Decho("manipulate directory listing (hide)",'~'.expand("<slnum>")) +" call Decho("manipulate directory listing (support hide)",'~'.expand("<slnum>")) " call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">",'~'.expand("<slnum>")) if g:netrw_hide && g:netrw_list_hide != "" NetrwKeepj call s:NetrwListHide() @@ -11744,7 +11790,7 @@ endfun " --------------------------------------------------------------------- " s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2 fun! s:NetrwEnew(...) -" call Dfunc("s:NetrwEnew() a:0=".a:0." bufnr($)=".bufnr("$")." expand(%)<".expand("%").">") +" call Dfunc("s:NetrwEnew() a:0=".a:0." win#".winnr()." winnr($)=".winnr("$")." bufnr($)=".bufnr("$")." expand(%)<".expand("%").">") " call Decho("curdir<".((a:0>0)? a:1 : "")."> buf#".bufnr("%")."<".bufname("%").">",'~'.expand("<slnum>")) " grab a function-local-variable copy of buffer variables @@ -11811,6 +11857,9 @@ fun! s:NetrwEnew(...) endif endif endif + if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on") + let &l:bexpr = "netrw#BalloonHelp()" + endif " call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh." win#".winnr()." winnr($)#".winnr("$")) endfun @@ -11870,6 +11919,7 @@ endfun " -1=failed fun! s:NetrwLcd(newdir) " call Dfunc("s:NetrwLcd(newdir<".a:newdir.">)") +" call Decho("changing local directory",'~'.expand("<slnum>")) let err472= 0 try @@ -11905,6 +11955,8 @@ fun! s:NetrwLcd(newdir) return -1 endif +" call Decho("getcwd <".getcwd().">") +" call Decho("b:netrw_curdir<".b:netrw_curdir.">") " call Dret("s:NetrwLcd 0") return 0 endfun diff --git a/runtime/autoload/netrwFileHandlers.vim b/runtime/autoload/netrwFileHandlers.vim index ed31e29a66..d07235c107 100644 --- a/runtime/autoload/netrwFileHandlers.vim +++ b/runtime/autoload/netrwFileHandlers.vim @@ -1,8 +1,8 @@ " netrwFileHandlers: contains various extension-based file handlers for " netrw's browsers' x command ("eXecute launcher") " Author: Charles E. Campbell -" Date: May 03, 2013 -" Version: 11b ASTRO-ONLY +" Date: Sep 18, 2020 +" Version: 11 " Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright @@ -20,7 +20,7 @@ if exists("g:loaded_netrwFileHandlers") || &cp finish endif -let g:loaded_netrwFileHandlers= "v11b" +let g:loaded_netrwFileHandlers= "v11" if v:version < 702 echohl WarningMsg echo "***warning*** this version of netrwFileHandlers needs vim 7.2" diff --git a/runtime/autoload/python3complete.vim b/runtime/autoload/python3complete.vim index a3b057d4d0..1d7f5d18f5 100644 --- a/runtime/autoload/python3complete.vim +++ b/runtime/autoload/python3complete.vim @@ -1,7 +1,8 @@ "python3complete.vim - Omni Completion for python -" Maintainer: Aaron Griffin <aaronmgriffin@gmail.com> +" Maintainer: <vacancy> +" Previous Maintainer: Aaron Griffin <aaronmgriffin@gmail.com> " Version: 0.9 -" Last Updated: 18 Jun 2009 (small fix 2015 Sep 14 from Debian) +" Last Updated: 2020 Oct 9 " " Roland Puntaier: this file contains adaptations for python3 and is parallel to pythoncomplete.vim " @@ -83,7 +84,7 @@ function! python3complete#Complete(findstart, base) break endif endwhile - execute "py3 vimpy3complete('" . cword . "', '" . a:base . "')" + execute "py3 vimpy3complete('" . escape(cword, "'") . "', '" . escape(a:base, "'") . "')" return g:python3complete_completions endif endfunction diff --git a/runtime/autoload/pythoncomplete.vim b/runtime/autoload/pythoncomplete.vim index 9cc0ae0d79..575c23e6d3 100644 --- a/runtime/autoload/pythoncomplete.vim +++ b/runtime/autoload/pythoncomplete.vim @@ -1,7 +1,8 @@ "pythoncomplete.vim - Omni Completion for python -" Maintainer: Aaron Griffin <aaronmgriffin@gmail.com> +" Maintainer: <vacancy> +" Previous Maintainer: Aaron Griffin <aaronmgriffin@gmail.com> " Version: 0.9 -" Last Updated: 18 Jun 2009 +" Last Updated: 2020 Oct 9 " " Changes " TODO: @@ -81,7 +82,7 @@ function! pythoncomplete#Complete(findstart, base) break endif endwhile - execute "python vimcomplete('" . cword . "', '" . a:base . "')" + execute "python vimcomplete('" . escape(cword, "'") . "', '" . escape(a:base, "'") . "')" return g:pythoncomplete_completions endif endfunction diff --git a/runtime/autoload/rubycomplete.vim b/runtime/autoload/rubycomplete.vim index ea18470232..e8a1879668 100644 --- a/runtime/autoload/rubycomplete.vim +++ b/runtime/autoload/rubycomplete.vim @@ -3,7 +3,7 @@ " Maintainer: Mark Guzman <segfault@hasno.info> " URL: https://github.com/vim-ruby/vim-ruby " Release Coordinator: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2019 Jan 06 +" Last Change: 2019 Feb 25 " ---------------------------------------------------------------------------- " " Ruby IRB/Complete author: Keiju ISHITSUKA(keiju@ishitsuka.com) @@ -53,6 +53,23 @@ if !exists("g:rubycomplete_include_objectspace") endif " }}} configuration failsafe initialization +" {{{ regex patterns + +" Regex that defines the start-match for the 'end' keyword. +let s:end_start_regex = + \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' . + \ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' . + \ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' . + \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>' + +" Regex that defines the middle-match for the 'end' keyword. +let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>' + +" Regex that defines the end-match for the 'end' keyword. +let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>' + +" }}} regex patterns + " {{{ vim-side support functions let s:rubycomplete_debug = 0 @@ -103,7 +120,7 @@ function! s:GetBufferRubyEntity( name, type, ... ) endif let curpos = getpos(".") - let [enum,ecol] = searchpairpos( crex, '', '\(end\|}\)', 'W' ) + let [enum,ecol] = searchpairpos( s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'W' ) call cursor(lastpos[1], lastpos[2]) if lnum > enum @@ -128,19 +145,28 @@ function! s:IsPosInClassDef(pos) return ret endfunction +function! s:IsInComment(pos) + let stack = synstack(a:pos[0], a:pos[1]) + if !empty(stack) + return synIDattr(stack[0], 'name') =~ 'ruby\%(.*Comment\|Documentation\)' + else + return 0 + endif +endfunction + function! s:GetRubyVarType(v) let stopline = 1 let vtp = '' - let pos = getpos('.') + let curpos = getpos('.') let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$' let [lnum,lcol] = searchpos(sstr,'nb',stopline) if lnum != 0 && lcol != 0 - call setpos('.',pos) + call setpos('.',curpos) let str = getline(lnum) let vtp = substitute(str,sstr,'\1','') return vtp endif - call setpos('.',pos) + call setpos('.',curpos) let ctors = '\(now\|new\|open\|get_instance' if exists('g:rubycomplete_rails') && g:rubycomplete_rails == 1 && s:rubycomplete_rails_loaded == 1 let ctors = ctors.'\|find\|create' @@ -150,9 +176,13 @@ function! s:GetRubyVarType(v) let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)' let sstr = ''.escape(a:v, '*').'\>\s*[+\-*/]*'.fstr - let [lnum,lcol] = searchpos(sstr,'nb',stopline) - if lnum != 0 && lcol != 0 - let str = matchstr(getline(lnum),fstr,lcol) + let pos = searchpos(sstr,'bW') + while pos != [0,0] && s:IsInComment(pos) + let pos = searchpos(sstr,'bW') + endwhile + if pos != [0,0] + let [lnum, col] = pos + let str = matchstr(getline(lnum),fstr,col) let str = substitute(str,'^=\s*','','') call setpos('.',pos) @@ -174,7 +204,7 @@ function! s:GetRubyVarType(v) end return '' endif - call setpos('.',pos) + call setpos('.',curpos) return '' endfunction @@ -671,11 +701,10 @@ class VimRubyCompletion methods.delete_if { |c| c.match( /'/ ) } end - when /^::([A-Z][^:\.\(]*)$/ # Absolute Constant or class methods + when /^::([A-Z][^:\.\(]*)?$/ # Absolute Constant or class methods dprint "const or cls" receiver = $1 - methods = Object.constants - methods.grep(/^#{receiver}/).collect{|e| "::" + e} + methods = Object.constants.collect{ |c| c.to_s }.grep(/^#{receiver}/) when /^(((::)?[A-Z][^:.\(]*)+?)::?([^:.]*)$/ # Constant or class methods receiver = $1 @@ -684,13 +713,13 @@ class VimRubyCompletion load_buffer_class( receiver ) load_buffer_module( receiver ) begin - classes = eval("#{receiver}.constants") - #methods = eval("#{receiver}.methods") + constants = eval("#{receiver}.constants").collect{ |c| c.to_s }.grep(/^#{message}/) + methods = eval("#{receiver}.methods").collect{ |m| m.to_s }.grep(/^#{message}/) rescue Exception dprint "exception: %s" % $! + constants = [] methods = [] end - methods.grep(/^#{message}/).collect{|e| receiver + "::" + e} when /^(:[^:.]+)\.([^.]*)$/ # Symbol dprint "symbol" diff --git a/runtime/autoload/syntaxcomplete.vim b/runtime/autoload/syntaxcomplete.vim index ea72204cbb..396193d8b0 100644 --- a/runtime/autoload/syntaxcomplete.vim +++ b/runtime/autoload/syntaxcomplete.vim @@ -1,12 +1,20 @@ " Vim completion script " Language: All languages, uses existing syntax highlighting rules " Maintainer: David Fishburn <dfishburn dot vim at gmail dot com> -" Version: 13.0 -" Last Change: 2019 Aug 08 +" Version: 15.0 +" Last Change: 2021 Apr 27 " Usage: For detailed help, ":help ft-syntax-omni" " History " +" Version 15.0 +" - SyntaxComplete ignored all buffer specific overrides, always used global +" https://github.com/vim/vim/issues/8153 +" +" Version 14.0 +" - Fixed issue with single quotes and is_keyword +" https://github.com/vim/vim/issues/7463 +" " Version 13.0 " - Extended the option omni_syntax_group_include_{filetype} " to accept a comma separated list of regex's rather than @@ -38,7 +46,7 @@ " let g:omni_syntax_use_single_byte = 1 " - This by default will only allow single byte ASCII " characters to be added and an additional check to ensure -" the charater is printable (see documentation for isprint). +" the character is printable (see documentation for isprint). " " Version 9.0 " - Add the check for cpo. @@ -86,7 +94,7 @@ endif if exists('g:loaded_syntax_completion') finish endif -let g:loaded_syntax_completion = 130 +let g:loaded_syntax_completion = 150 " Turn on support for line continuations when creating the script let s:cpo_save = &cpo @@ -141,14 +149,10 @@ let s:prepended = '' " This function is used for the 'omnifunc' option. function! syntaxcomplete#Complete(findstart, base) - " Only display items in the completion window that are at least - " this many characters in length - if !exists('b:omni_syntax_ignorecase') - if exists('g:omni_syntax_ignorecase') - let b:omni_syntax_ignorecase = g:omni_syntax_ignorecase - else - let b:omni_syntax_ignorecase = &ignorecase - endif + " Allow user to override ignorecase per buffer + let l:omni_syntax_ignorecase = g:omni_syntax_ignorecase + if exists('b:omni_syntax_ignorecase') + let l:omni_syntax_ignorecase = b:omni_syntax_ignorecase endif if a:findstart @@ -179,7 +183,7 @@ function! syntaxcomplete#Complete(findstart, base) endif " let base = s:prepended . a:base - let base = s:prepended + let base = substitute(s:prepended, "'", "''", 'g') let filetype = substitute(&filetype, '\.', '_', 'g') let list_idx = index(s:cache_name, filetype, 0, &ignorecase) @@ -195,13 +199,13 @@ function! syntaxcomplete#Complete(findstart, base) if base != '' " let compstr = join(compl_list, ' ') - " let expr = (b:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*' + " let expr = (l:omni_syntax_ignorecase==0?'\C':'').'\<\%('.base.'\)\@!\w\+\s*' " let compstr = substitute(compstr, expr, '', 'g') " let compl_list = split(compstr, '\s\+') " Filter the list based on the first few characters the user " entered - let expr = 'v:val '.(g:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'" + let expr = 'v:val '.(l:omni_syntax_ignorecase==1?'=~?':'=~#')." '^".escape(base, '\\/.*$^~[]').".*'" let compl_list = filter(deepcopy(compl_list), expr) endif @@ -222,6 +226,26 @@ function! syntaxcomplete#OmniSyntaxList(...) endif endfunc +function! syntaxcomplete#OmniSyntaxClearCache() + let s:cache_name = [] + let s:cache_list = [] +endfunction + +" To retrieve all syntax items regardless of syntax group: +" echo OmniSyntaxList( [] ) +" +" To retrieve only the syntax items for the sqlOperator syntax group: +" echo OmniSyntaxList( ['sqlOperator'] ) +" +" To retrieve all syntax items for both the sqlOperator and sqlType groups: +" echo OmniSyntaxList( ['sqlOperator', 'sqlType'] ) +" +" A regular expression can also be used: +" echo OmniSyntaxList( ['sql\w\+'] ) +" +" From within a plugin, you would typically assign the output to a List: > +" let myKeywords = [] +" let myKeywords = OmniSyntaxList( ['sqlKeyword'] ) function! OmniSyntaxList(...) let list_parms = [] if a:0 > 0 @@ -239,37 +263,25 @@ function! OmniSyntaxList(...) " let use_dictionary = a:1 " endif - " Only display items in the completion window that are at least - " this many characters in length - if !exists('b:omni_syntax_use_iskeyword') - if exists('g:omni_syntax_use_iskeyword') - let b:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword - else - let b:omni_syntax_use_iskeyword = 1 - endif - endif - - " Only display items in the completion window that are at least - " this many characters in length - if !exists('b:omni_syntax_minimum_length') - if exists('g:omni_syntax_minimum_length') - let b:omni_syntax_minimum_length = g:omni_syntax_minimum_length - else - let b:omni_syntax_minimum_length = 0 - endif - endif - let saveL = @l let filetype = substitute(&filetype, '\.', '_', 'g') if empty(list_parms) + " Allow user to override per buffer + if exists('g:omni_syntax_group_include_'.filetype) + let l:omni_syntax_group_include_{filetype} = g:omni_syntax_group_include_{filetype} + endif + if exists('b:omni_syntax_group_include_'.filetype) + let l:omni_syntax_group_include_{filetype} = b:omni_syntax_group_include_{filetype} + endif + " Default the include group to include the requested syntax group let syntax_group_include_{filetype} = '' " Check if there are any overrides specified for this filetype - if exists('g:omni_syntax_group_include_'.filetype) + if exists('l:omni_syntax_group_include_'.filetype) let syntax_group_include_{filetype} = - \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g') - let list_parms = split(g:omni_syntax_group_include_{filetype}, ',') + \ substitute( l:omni_syntax_group_include_{filetype},'\s\+','','g') + let list_parms = split(l:omni_syntax_group_include_{filetype}, ',') if syntax_group_include_{filetype} =~ '\w' let syntax_group_include_{filetype} = \ substitute( syntax_group_include_{filetype}, @@ -324,11 +336,20 @@ function! OmniSyntaxList(...) else " Default the exclude group to nothing let syntax_group_exclude_{filetype} = '' - " Check if there are any overrides specified for this filetype + + " Allow user to override per buffer if exists('g:omni_syntax_group_exclude_'.filetype) + let l:omni_syntax_group_exclude_{filetype} = g:omni_syntax_group_exclude_{filetype} + endif + if exists('b:omni_syntax_group_exclude_'.filetype) + let l:omni_syntax_group_exclude_{filetype} = b:omni_syntax_group_exclude_{filetype} + endif + + " Check if there are any overrides specified for this filetype + if exists('l:omni_syntax_group_exclude_'.filetype) let syntax_group_exclude_{filetype} = - \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g') - let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',') + \ substitute( l:omni_syntax_group_exclude_{filetype},'\s\+','','g') + let list_exclude_groups = split(l:omni_syntax_group_exclude_{filetype}, ',') if syntax_group_exclude_{filetype} =~ '\w' let syntax_group_exclude_{filetype} = \ substitute( syntax_group_exclude_{filetype}, @@ -524,6 +545,30 @@ endfunction function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full ) + " Allow user to override iskeyword per buffer + let l:omni_syntax_use_iskeyword = g:omni_syntax_use_iskeyword + if exists('b:omni_syntax_use_iskeyword') + let l:omni_syntax_use_iskeyword = b:omni_syntax_use_iskeyword + endif + + " Allow user to override iskeyword_numeric per buffer + let l:omni_syntax_use_iskeyword_numeric = g:omni_syntax_use_iskeyword_numeric + if exists('b:omni_syntax_use_iskeyword_numeric') + let l:omni_syntax_use_iskeyword_numeric = b:omni_syntax_use_iskeyword_numeric + endif + + " Allow user to override iskeyword_numeric per buffer + let l:omni_syntax_use_single_byte = g:omni_syntax_use_single_byte + if exists('b:omni_syntax_use_single_byte') + let l:omni_syntax_use_single_byte = b:omni_syntax_use_single_byte + endif + + " Allow user to override minimum_length per buffer + let l:omni_syntax_minimum_length = g:omni_syntax_minimum_length + if exists('b:omni_syntax_minimum_length') + let l:omni_syntax_minimum_length = b:omni_syntax_minimum_length + endif + let syn_list = "" " From the full syntax listing, strip out the portion for the @@ -642,14 +687,23 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full ) \ syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)' \ , "", 'g' \ ) - - if b:omni_syntax_use_iskeyword == 0 + + if l:omni_syntax_use_iskeyword == 0 " There are a number of items which have non-word characters in " them, *'T_F1'*. vim.vim is one such file. " This will replace non-word characters with spaces. + " setlocal filetype=forth + " let g:omni_syntax_use_iskeyword = 1 + " let g:omni_syntax_use_iskeyword_numeric = 1 + " You will see entries like + " #>> + " (.local) + " These were found doing a grep in vim82\syntax + " grep iskeyword * + " forth.vim:setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255 let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' ) else - if g:omni_syntax_use_iskeyword_numeric == 1 + if l:omni_syntax_use_iskeyword_numeric == 1 " iskeyword can contain value like this " 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94 " Numeric values convert to their ASCII equivalent using the @@ -669,7 +723,7 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full ) " cycle through each character within the range let [b:start, b:end] = split(item, '-') for range_item in range( b:start, b:end ) - if range_item <= 127 || g:omni_syntax_use_single_byte == 0 + if range_item <= 127 || l:omni_syntax_use_single_byte == 0 if nr2char(range_item) =~ '\p' let accepted_chars = accepted_chars . nr2char(range_item) endif @@ -677,13 +731,13 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full ) endfor elseif item =~ '^\d\+$' " Only numeric, translate to a character - if item < 127 || g:omni_syntax_use_single_byte == 0 + if item < 127 || l:omni_syntax_use_single_byte == 0 if nr2char(item) =~ '\p' let accepted_chars = accepted_chars . nr2char(item) endif endif else - if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0 + if char2nr(item) < 127 || l:omni_syntax_use_single_byte == 0 if item =~ '\p' let accepted_chars = accepted_chars . item endif @@ -719,9 +773,9 @@ function! s:SyntaxCSyntaxGroupItems( group_name, syntax_full ) endif endif - if b:omni_syntax_minimum_length > 0 + if l:omni_syntax_minimum_length > 0 " If the user specified a minimum length, enforce it - let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.b:omni_syntax_minimum_length.'}\ze ', ' ', 'g') + let syn_list = substitute(' '.syn_list.' ', ' \S\{,'.l:omni_syntax_minimum_length.'}\ze ', ' ', 'g') endif else let syn_list = '' @@ -751,5 +805,6 @@ function! OmniSyntaxShowChars(spec) endfor return join(map(result, 'nr2char(v:val)'), ', ') endfunction + let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/autoload/tohtml.vim b/runtime/autoload/tohtml.vim index 9c3d4d2d7e..76092f0f93 100644 --- a/runtime/autoload/tohtml.vim +++ b/runtime/autoload/tohtml.vim @@ -1,6 +1,6 @@ " Vim autoload file for the tohtml plugin. " Maintainer: Ben Fritz <fritzophrenic@gmail.com> -" Last Change: 2018 Nov 11 +" Last Change: 2019 Aug 16 " " Additional contributors: " @@ -364,6 +364,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ let body_line = '' let html = [] + let s:html5 = 0 if s:settings.use_xhtml call add(html, xml_line) endif @@ -371,8 +372,9 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ call add(html, "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">") call add(html, '<html xmlns="http://www.w3.org/1999/xhtml">') elseif s:settings.use_css && !s:settings.no_pre - call add(html, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">") + call add(html, "<!DOCTYPE html>") call add(html, '<html>') + let s:html5 = 1 else call add(html, '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"') call add(html, ' "http://www.w3.org/TR/html4/loose.dtd">') @@ -383,7 +385,11 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ " include encoding as close to the top as possible, but only if not already " contained in XML information if s:settings.encoding != "" && !s:settings.use_xhtml - call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close) + if s:html5 + call add(html, '<meta charset="' . s:settings.encoding . '"' . tag_close) + else + call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close) + endif endif call add(html, '<title>diff</title>') @@ -392,6 +398,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ call add(html, '<meta name="settings" content="'. \ join(filter(keys(s:settings),'s:settings[v:val]'),','). \ ',prevent_copy='.s:settings.prevent_copy. + \ ',use_input_for_pc='.s:settings.use_input_for_pc. \ '"'.tag_close) call add(html, '<meta name="colorscheme" content="'. \ (exists('g:colors_name') @@ -400,16 +407,8 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ call add(html, '</head>') let body_line_num = len(html) - if !empty(s:settings.prevent_copy) - call add(html, "<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>") - call add(html, "<!-- hidden divs used by javascript to get the width of a char -->") - call add(html, "<div id='oneCharWidth'>0</div>") - call add(html, "<div id='oneInputWidth'><input size='1' value='0'".tag_close."</div>") - call add(html, "<div id='oneEmWidth' style='width: 1em;'></div>") - else - call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>') - endif - call add(html, "<table border='1' width='100%' id='vimCodeElement".s:settings.id_suffix."'>") + call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>') + call add(html, "<table ".(s:settings.use_css? "" : "border='1' width='100%' ")."id='vimCodeElement".s:settings.id_suffix."'>") call add(html, '<tr>') for buf in a:win_list @@ -443,7 +442,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ " Grab the style information. Some of this will be duplicated so only insert " it if it's not already there. {{{ 1 - let style_start = search('^<style type="text/css">') + let style_start = search('^<style\( type="text/css"\)\?>') 1 let style_end = search('^</style>') if style_start > 0 && style_end > 0 @@ -481,7 +480,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ " TODO: restore using grabbed lines if undolevel is 1? normal! 2u if s:settings.use_css - call add(html, '<td valign="top"><div>') + call add(html, '<td><div>') elseif s:settings.use_xhtml call add(html, '<td nowrap="nowrap" valign="top"><div>') else @@ -515,7 +514,13 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ let name = substitute(name, '\d*\.x\?html$', '', '') . i . '.' . fnamemodify(copy(name), ":t:e") let i += 1 endwhile + + let s:ei_sav = &eventignore + set eventignore+=FileType exe "topleft new " . name + let &eventignore=s:ei_sav + unlet s:ei_sav + setlocal modifiable " just in case some user autocmd creates content in the new buffer, make sure @@ -544,7 +549,7 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ " add required javascript in reverse order so we can just call append again " and again without adjusting {{{ - let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids || !empty(s:settings.prevent_copy) + let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids " insert script closing tag if needed if s:uses_script @@ -555,31 +560,6 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ \ ]) endif - " insert script which corrects the size of small input elements in - " prevent_copy mode. See 2html.vim for details on why this is needed and how - " it works. - if !empty(s:settings.prevent_copy) - call append(style_start, [ - \ '', - \ '/* simulate a "ch" unit by asking the browser how big a zero character is */', - \ 'function FixCharWidth() {', - \ ' /* get the hidden element which gives the width of a single character */', - \ ' var goodWidth = document.getElementById("oneCharWidth").clientWidth;', - \ ' /* get all input elements, we''ll filter on class later */', - \ ' var inputTags = document.getElementsByTagName("input");', - \ ' var ratio = 5;', - \ ' var inputWidth = document.getElementById("oneInputWidth").clientWidth;', - \ ' var emWidth = document.getElementById("oneEmWidth").clientWidth;', - \ ' if (inputWidth > goodWidth) {', - \ ' while (ratio < 100*goodWidth/emWidth && ratio < 100) {', - \ ' ratio += 5;', - \ ' }', - \ ' document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;', - \ ' }', - \ '}' - \ ]) - endif - " insert javascript to get IDs from line numbers, and to open a fold before " jumping to any lines contained therein if s:settings.line_ids @@ -659,10 +639,9 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ endif if s:uses_script - " insert script tag; javascript is always needed for the line number - " normalization for URL hashes + " insert script tag if needed call append(style_start, [ - \ "<script type='text/javascript'>", + \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">", \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"]) endif @@ -673,11 +652,13 @@ func! tohtml#Diff2HTML(win_list, buf_list) "{{{ " is pretty useless for really long lines. {{{ if s:settings.use_css call append(style_start, - \ ['<style type="text/css">']+ + \ ['<style' . (s:html5 ? '' : 'type="text/css"') . '>']+ \ style+ \ [ s:settings.use_xhtml ? '' : '<!--', \ 'table { table-layout: fixed; }', \ 'html, body, table, tbody { width: 100%; margin: 0; padding: 0; }', + \ 'table, td, th { border: 1px solid; }', + \ 'td { vertical-align: top; }', \ 'th, td { width: '.printf("%.1f",100.0/len(a:win_list)).'%; }', \ 'td div { overflow: auto; }', \ s:settings.use_xhtml ? '' : '-->', @@ -720,21 +701,22 @@ func! tohtml#GetUserSettings() "{{{ endif " get current option settings with appropriate defaults {{{ - call tohtml#GetOption(user_settings, 'no_progress', !has("statusline") ) - call tohtml#GetOption(user_settings, 'diff_one_file', 0 ) - call tohtml#GetOption(user_settings, 'number_lines', &number ) - call tohtml#GetOption(user_settings, 'pre_wrap', &wrap ) - call tohtml#GetOption(user_settings, 'use_css', 1 ) - call tohtml#GetOption(user_settings, 'ignore_conceal', 0 ) - call tohtml#GetOption(user_settings, 'ignore_folding', 0 ) - call tohtml#GetOption(user_settings, 'dynamic_folds', 0 ) - call tohtml#GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding) - call tohtml#GetOption(user_settings, 'hover_unfold', 0 ) - call tohtml#GetOption(user_settings, 'no_pre', 0 ) - call tohtml#GetOption(user_settings, 'no_invalid', 0 ) - call tohtml#GetOption(user_settings, 'whole_filler', 0 ) - call tohtml#GetOption(user_settings, 'use_xhtml', 0 ) - call tohtml#GetOption(user_settings, 'line_ids', user_settings.number_lines ) + call tohtml#GetOption(user_settings, 'no_progress', !has("statusline") ) + call tohtml#GetOption(user_settings, 'diff_one_file', 0 ) + call tohtml#GetOption(user_settings, 'number_lines', &number ) + call tohtml#GetOption(user_settings, 'pre_wrap', &wrap ) + call tohtml#GetOption(user_settings, 'use_css', 1 ) + call tohtml#GetOption(user_settings, 'ignore_conceal', 0 ) + call tohtml#GetOption(user_settings, 'ignore_folding', 0 ) + call tohtml#GetOption(user_settings, 'dynamic_folds', 0 ) + call tohtml#GetOption(user_settings, 'no_foldcolumn', user_settings.ignore_folding) + call tohtml#GetOption(user_settings, 'hover_unfold', 0 ) + call tohtml#GetOption(user_settings, 'no_pre', 0 ) + call tohtml#GetOption(user_settings, 'no_invalid', 0 ) + call tohtml#GetOption(user_settings, 'whole_filler', 0 ) + call tohtml#GetOption(user_settings, 'use_xhtml', 0 ) + call tohtml#GetOption(user_settings, 'line_ids', user_settings.number_lines ) + call tohtml#GetOption(user_settings, 'use_input_for_pc', 'fallback') " }}} " override those settings that need it {{{ @@ -868,6 +850,16 @@ func! tohtml#GetUserSettings() "{{{ let user_settings.no_invalid = 0 endif + " enforce valid values for use_input_for_pc + if user_settings.use_input_for_pc !~# 'fallback\|none\|all' + let user_settings.use_input_for_pc = 'fallback' + echohl WarningMsg + echomsg '2html: "' . g:html_use_input_for_pc . '" is not valid for g:html_use_input_for_pc' + echomsg '2html: defaulting to "' . user_settings.use_input_for_pc . '"' + echohl None + sleep 3 + endif + if exists('g:html_id_expr') let user_settings.id_suffix = eval(g:html_id_expr) if user_settings.id_suffix !~ '^[-_:.A-Za-z0-9]*$' diff --git a/runtime/autoload/zip.vim b/runtime/autoload/zip.vim index ea086e0882..f6b876df05 100644 --- a/runtime/autoload/zip.vim +++ b/runtime/autoload/zip.vim @@ -1,10 +1,10 @@ " zip.vim: Handles browsing zipfiles " AUTOLOAD PORTION -" Date: Sep 13, 2016 -" Version: 28 -" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> +" Date: Jan 07, 2020 +" Version: 31 +" Maintainer: Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " License: Vim License (see vim's :help license) -" Copyright: Copyright (C) 2005-2013 Charles E. Campbell {{{1 +" Copyright: Copyright (C) 2005-2019 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, " with or without modifications, provided that this copyright " notice is copied with it. Like anything else that's free, @@ -20,7 +20,7 @@ if &cp || exists("g:loaded_zip") finish endif -let g:loaded_zip= "v28" +let g:loaded_zip= "v31" if v:version < 702 echohl WarningMsg echo "***warning*** this version of zip needs vim 7.2 or later" @@ -65,10 +65,10 @@ endif " zip#Browse: {{{2 fun! zip#Browse(zipfile) " call Dfunc("zip#Browse(zipfile<".a:zipfile.">)") - " sanity check: ensure that the zipfile has "PK" as its first two letters + " sanity check: insure that the zipfile has "PK" as its first two letters " (zipped files have a leading PK as a "magic cookie") if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK' - exe "noautocmd e ".fnameescape(a:zipfile) + exe "noswapfile noautocmd noswapfile e ".fnameescape(a:zipfile) " call Dret("zip#Browse : not a zipfile<".a:zipfile.">") return " else " Decho @@ -141,8 +141,11 @@ fun! zip#Browse(zipfile) " Maps associated with zip plugin setlocal noma nomod ro - noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr> - noremap <silent> <buffer> x :call zip#Extract()<cr> + noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr> + noremap <silent> <buffer> x :call zip#Extract()<cr> + if &mouse != "" + noremap <silent> <buffer> <leftmouse> <leftmouse>:call <SID>ZipBrowseSelect()<cr> + endif let &report= repkeep " call Dret("zip#Browse") @@ -175,17 +178,17 @@ fun! s:ZipBrowseSelect() " get zipfile to the new-window let zipfile = b:zipfile - let curfile= expand("%") + let curfile = expand("%") " call Decho("zipfile<".zipfile.">") " call Decho("curfile<".curfile.">") - new + noswapfile new if !exists("g:zip_nomax") || g:zip_nomax == 0 wincmd _ endif let s:zipfile_{winnr()}= curfile " call Decho("exe e ".fnameescape("zipfile:".zipfile.'::'.fname)) - exe "e ".fnameescape("zipfile:".zipfile.'::'.fname) + exe "noswapfile e ".fnameescape("zipfile:".zipfile.'::'.fname) filetype detect let &report= repkeep @@ -339,7 +342,7 @@ fun! zip#Write(fname) let binkeep= &binary let eikeep = &ei set binary ei=all - exe "e! ".fnameescape(zipfile) + exe "noswapfile e! ".fnameescape(zipfile) call netrw#NetWrite(netzipfile) let &ei = eikeep let &binary = binkeep diff --git a/runtime/colors/README.txt b/runtime/colors/README.txt index 4636979ef1..70aacb5384 100644 --- a/runtime/colors/README.txt +++ b/runtime/colors/README.txt @@ -67,7 +67,7 @@ You can use ":highlight" to find out the current colors. Exception: the ctermfg and ctermbg values are numbers, which are only valid for the current terminal. Use the color names instead. See ":help cterm-colors". -The default color settings can be found in the source file src/syntax.c. +The default color settings can be found in the source file src/highlight.c. Search for "highlight_init". If you think you have a color scheme that is good enough to be used by others, diff --git a/runtime/compiler/checkstyle.vim b/runtime/compiler/checkstyle.vim index ccab3c585d..4ebd9e15b5 100644 --- a/runtime/compiler/checkstyle.vim +++ b/runtime/compiler/checkstyle.vim @@ -1,7 +1,7 @@ " Vim compiler file " Compiler: Checkstyle " Maintainer: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2013 Jun 26 +" Last Change: 2020 Aug 2 if exists("current_compiler") finish @@ -12,8 +12,18 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal command -nargs=* CompilerSet setlocal <args> endif -CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain +let s:cpo_save = &cpo +set cpo&vim -" sample error: WebTable.java:282: '+=' is not preceded with whitespace. -" WebTable.java:201:1: '{' should be on the previous line. -CompilerSet errorformat=%f:%l:%v:\ %m,%f:%l:\ %m,%-G%.%# +" CompilerSet makeprg=java\ com.puppycrawl.tools.checkstyle.Main\ -f\ plain\ -c\ /sun_checks.xml +" CompilerSet makeprg=java\ -jar\ checkstyle-X.XX-all.jar\ -f\ plain\ -c\ /sun_checks.xml + +CompilerSet makeprg=checkstyle\ -f\ plain +CompilerSet errorformat=[%tRROR]\ %f:%l:%v:\ %m, + \[%tARN]\ %f:%l:%v:\ %m, + \[%tRROR]\ %f:%l:\ %m, + \[%tARN]\ %f:%l:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/cm3.vim b/runtime/compiler/cm3.vim new file mode 100644 index 0000000000..3de51282e6 --- /dev/null +++ b/runtime/compiler/cm3.vim @@ -0,0 +1,26 @@ +" Vim compiler file +" Compiler: Critical Mass Modula-3 Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "cm3" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" TODO: better handling of Quake errors +CompilerSet makeprg=cm3 +CompilerSet errorformat=%D---\ building\ in\ %f\ ---, + \%W\"%f\"\\,\ line\ %l:\ warning:\ %m, + \%E\"%f\"\\,\ line\ %l:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dart.vim b/runtime/compiler/dart.vim new file mode 100644 index 0000000000..f9ebfe1b27 --- /dev/null +++ b/runtime/compiler/dart.vim @@ -0,0 +1,26 @@ +" Vim compiler file +" Compiler: Dart VM +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dart" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dart +CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m, + \%CTry\ %.%#, + \%Z\ %#^%\\+, + \%C%.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dart2js.vim b/runtime/compiler/dart2js.vim new file mode 100644 index 0000000000..b6a4e4d530 --- /dev/null +++ b/runtime/compiler/dart2js.vim @@ -0,0 +1,28 @@ +" Vim compiler file +" Compiler: Dart to JavaScript Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dart2js" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dart2js +CompilerSet errorformat=%E%f:%l:%c:, + \%-GError:\ Compilation\ failed., + \%CError:\ %m, + \%Z\ %#^%\\+, + \%C%.%#, + \%trror:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dart2native.vim b/runtime/compiler/dart2native.vim new file mode 100644 index 0000000000..51bdab0cc3 --- /dev/null +++ b/runtime/compiler/dart2native.vim @@ -0,0 +1,28 @@ +" Vim compiler file +" Compiler: Dart to Native Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dart2native" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dart2native +CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m, + \%CTry\ %.%#, + \%Z\ %#^%\\+, + \%Z%$, + \%C%.%#, + \%E%f:\ %trror:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dartanalyser.vim b/runtime/compiler/dartanalyser.vim new file mode 100644 index 0000000000..e691d80b61 --- /dev/null +++ b/runtime/compiler/dartanalyser.vim @@ -0,0 +1,23 @@ +" Vim compiler file +" Compiler: Dart Analyzer +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dartanalyzer" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dartanalyzer\ --format\ machine +CompilerSet errorformat=%t%\\w%\\+\|%\\w%\\+\|%\\w%\\+\|%f\|%l\|%c\|%\\d%\\+\|%m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dartdevc.vim b/runtime/compiler/dartdevc.vim new file mode 100644 index 0000000000..e8d1988ed6 --- /dev/null +++ b/runtime/compiler/dartdevc.vim @@ -0,0 +1,28 @@ +" Vim compiler file +" Compiler: Dart Development Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dartdevc" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dartdevc +CompilerSet errorformat=%E%f:%l:%c:\ Error:\ %m, + \%CTry\ %.%#, + \%Z\ %#^%\\+, + \%Z%$, + \%C%.%#, + \%E%f:\ %trror:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dartdoc.vim b/runtime/compiler/dartdoc.vim new file mode 100644 index 0000000000..26b38d8dd4 --- /dev/null +++ b/runtime/compiler/dartdoc.vim @@ -0,0 +1,26 @@ +" Vim compiler file +" Compiler: Dart Documentation Generator +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dartdoc" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dartdoc +CompilerSet errorformat=\ \ %tarning:\ %m, + \\ \ %trror:\ %m, + \%+EGeneration\ failed:\ %m, + \%+ISuccess!\ Docs\ generated\ into\ %f, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/dartfmt.vim b/runtime/compiler/dartfmt.vim new file mode 100644 index 0000000000..2e4ab02ad3 --- /dev/null +++ b/runtime/compiler/dartfmt.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: Dart Formatter +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 May 08 + +if exists("current_compiler") + finish +endif +let current_compiler = "dartfmt" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=dartfmt +CompilerSet errorformat=%Eline\ %l\\,\ column\ %c\ of\ %f:\ %m, + \%Z\ %\\{3}│\ %\\+^%\\+, + \%C%.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/eslint.vim b/runtime/compiler/eslint.vim new file mode 100644 index 0000000000..7d57acbdf4 --- /dev/null +++ b/runtime/compiler/eslint.vim @@ -0,0 +1,16 @@ +" Vim compiler file +" Compiler: ESLint for JavaScript +" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> +" Last Change: 2020 August 20 + +if exists("current_compiler") + finish +endif +let current_compiler = "eslint" + +if exists(":CompilerSet") != 2 + command -nargs=* CompilerSet setlocal <args> +endif + +CompilerSet makeprg=npx\ eslint\ --format\ compact +CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%-G%.%# diff --git a/runtime/compiler/fbc.vim b/runtime/compiler/fbc.vim new file mode 100644 index 0000000000..1c29392da8 --- /dev/null +++ b/runtime/compiler/fbc.vim @@ -0,0 +1,27 @@ +" Vim compiler file +" Compiler: FreeBASIC Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2015 Jan 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "fbc" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=fbc +CompilerSet errorformat=%-G%.%#Too\ many\ errors\\,\ exiting, + \%f(%l)\ %tarning\ %n(%\\d%\\+):\ %m, + \%E%f(%l)\ error\ %n:\ %m, + \%-Z%p^, + \%-C%.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/gawk.vim b/runtime/compiler/gawk.vim new file mode 100644 index 0000000000..a109eb8642 --- /dev/null +++ b/runtime/compiler/gawk.vim @@ -0,0 +1,34 @@ +" Vim compiler file +" Compiler: GNU Awk +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Feb 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "gawk" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=gawk +CompilerSet errorformat=%Z%.awk:\ %f:%l:\ %p^\ %m, + \%Eg%\\=awk:\ %f:%l:\ fatal:\ %m, + \%Egawk:\ %f:%l:\ error:\ %m, + \%Wgawk:\ %f:%l:\ warning:\ %m, + \%Egawk:\ %f:%l:\ %.%#, + \gawk:\ %f:%l:\ %tatal:\ %m, + \gawk:\ %f:%l:\ %trror:\ %m, + \gawk:\ %f:%l:\ %tarning:\ %m, + \gawk:\ %tatal:\ %m, + \gawk:\ %trror:\ %m, + \gawk:\ %tarning:\ %m, + \%+C%.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/gjs.vim b/runtime/compiler/gjs.vim new file mode 100644 index 0000000000..e033764030 --- /dev/null +++ b/runtime/compiler/gjs.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: GJS (Gnome JavaScript Bindings) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 Jul 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "gjs" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=gjs +CompilerSet errorformat=%.%#JS\ %tRROR:\ %m\ @\ %f:%c, + \%E%.%#JS\ ERROR:\ %m, + \%Z@%f:%l:%c, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/javac.vim b/runtime/compiler/javac.vim index a50bdca8f2..8507efd67c 100644 --- a/runtime/compiler/javac.vim +++ b/runtime/compiler/javac.vim @@ -1,7 +1,7 @@ " Vim compiler file -" Compiler: javac +" Compiler: Java Development Kit Compiler " Maintainer: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2004 Nov 27 +" Last Change: 2019 Oct 21 if exists("current_compiler") finish @@ -12,6 +12,15 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal command -nargs=* CompilerSet setlocal <args> endif +let s:cpo_save = &cpo +set cpo&vim + CompilerSet makeprg=javac +CompilerSet errorformat=%E%f:%l:\ error:\ %m, + \%W%f:%l:\ warning:\ %m, + \%-Z%p^, + \%-C%.%#, + \%-G%.%# -CompilerSet errorformat=%E%f:%l:\ %m,%-Z%p^,%-C%.%#,%-G%.%# +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/jest.vim b/runtime/compiler/jest.vim new file mode 100644 index 0000000000..fee70b7c55 --- /dev/null +++ b/runtime/compiler/jest.vim @@ -0,0 +1,30 @@ +" Vim compiler file +" Compiler: Jest +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2018 May 15 + +if exists("current_compiler") + finish +endif +let current_compiler = "jest" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=npx\ jest\ --no-colors + +CompilerSet makeprg=jest\ --no-colors +CompilerSet errorformat=%E\ \ â—\ %m, + \%Z\ %\\{4}%.%#Error:\ %f:\ %m\ (%l:%c):%\\=, + \%Z\ %\\{6}at\ %\\S%#\ (%f:%l:%c), + \%+C\ %\\{4}%\\w%.%#, + \%+C\ %\\{4}%[-+]%.%#, + \%-C%.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/jjs.vim b/runtime/compiler/jjs.vim new file mode 100644 index 0000000000..09a973683a --- /dev/null +++ b/runtime/compiler/jjs.vim @@ -0,0 +1,24 @@ +" Vim compiler file +" Compiler: Nashorn Shell +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2018 Jan 9 + +if exists("current_compiler") + finish +endif +let current_compiler = "jjs" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=jjs +CompilerSet errorformat=%f:%l:%c\ %m, + \%f:%l\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/jshint.vim b/runtime/compiler/jshint.vim new file mode 100644 index 0000000000..865591cd2b --- /dev/null +++ b/runtime/compiler/jshint.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: JSHint +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 Jul 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "jshint" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=npx\ jshint\ --verbose + +CompilerSet makeprg=jshint\ --verbose +CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m\ (%t%n), + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/jsonlint.vim b/runtime/compiler/jsonlint.vim new file mode 100644 index 0000000000..5466dcc7f4 --- /dev/null +++ b/runtime/compiler/jsonlint.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: JSON Lint +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 Jul 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "jsonlint" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=npx\ jsonlint\ --compact\ --quiet + +CompilerSet makeprg=jsonlint\ --compact\ --quiet +CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ found:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/ocaml.vim b/runtime/compiler/ocaml.vim index 7f8a7eab67..faa8af1f5f 100644 --- a/runtime/compiler/ocaml.vim +++ b/runtime/compiler/ocaml.vim @@ -1,11 +1,11 @@ " Vim Compiler File " Compiler: ocaml " Maintainer: Markus Mottl <markus.mottl@gmail.com> -" URL: https://github.com/rgrinberg/vim-ocaml +" URL: https://github.com/ocaml/vim-ocaml " Last Change: +" 2020 Mar 28 - Improved error format (Thomas Leonard) " 2017 Nov 26 - Improved error format (Markus Mottl) " 2013 Aug 27 - Added a new OCaml error format (Markus Mottl) -" 2013 Jun 30 - Initial version (Marc Weber) " " Marc Weber's comments: " Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt, @@ -21,6 +21,7 @@ " " So having it here makes people opt-in + if exists("current_compiler") finish endif @@ -30,6 +31,7 @@ let s:cpo_save = &cpo set cpo&vim CompilerSet errorformat = + \%EFile\ \"%f\"\\,\ lines\ %*\\d-%l\\,\ characters\ %c-%*\\d:, \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:, \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d\ %.%#, \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m, diff --git a/runtime/compiler/powershell.vim b/runtime/compiler/powershell.vim new file mode 100644 index 0000000000..45d5ec2191 --- /dev/null +++ b/runtime/compiler/powershell.vim @@ -0,0 +1,84 @@ +" Vim compiler file +" Compiler: powershell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2020 Mar 30 + +if exists("current_compiler") + finish +endif +let current_compiler = "powershell" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo-=C + +if !exists("g:ps1_makeprg_cmd") + if executable('pwsh') + " pwsh is the future + let g:ps1_makeprg_cmd = 'pwsh' + elseif executable('pwsh.exe') + let g:ps1_makeprg_cmd = 'pwsh.exe' + elseif executable('powershell.exe') + let g:ps1_makeprg_cmd = 'powershell.exe' + else + let g:ps1_makeprg_cmd = '' + endif +endif + +if !executable(g:ps1_makeprg_cmd) + echoerr "To use the powershell compiler, please set g:ps1_makeprg_cmd to the powershell executable!" +endif + +" Show CategoryInfo, FullyQualifiedErrorId, etc? +let g:ps1_efm_show_error_categories = get(g:, 'ps1_efm_show_error_categories', 0) + +" Use absolute path because powershell requires explicit relative paths +" (./file.ps1 is okay, but # expands to file.ps1) +let &l:makeprg = g:ps1_makeprg_cmd .' %:p:S' + +" Parse file, line, char from callstacks: +" Write-Ouput : The term 'Write-Ouput' is not recognized as the name of a +" cmdlet, function, script file, or operable program. Check the spelling +" of the name, or if a path was included, verify that the path is correct +" and try again. +" At C:\script.ps1:11 char:5 +" + Write-Ouput $content +" + ~~~~~~~~~~~ +" + CategoryInfo : ObjectNotFound: (Write-Ouput:String) [], CommandNotFoundException +" + FullyQualifiedErrorId : CommandNotFoundException + +" Showing error in context with underlining. +CompilerSet errorformat=%+G+%m +" Error summary. +CompilerSet errorformat+=%E%*\\S\ :\ %m +" Error location. +CompilerSet errorformat+=%CAt\ %f:%l\ char:%c +" Errors that span multiple lines (may be wrapped to width of terminal). +CompilerSet errorformat+=%C%m +" Ignore blank/whitespace-only lines. +CompilerSet errorformat+=%Z\\s%# + +if g:ps1_efm_show_error_categories + CompilerSet errorformat^=%+G\ \ \ \ +\ %.%#\\s%#:\ %m +else + CompilerSet errorformat^=%-G\ \ \ \ +\ %.%#\\s%#:\ %m +endif + + +" Parse file, line, char from of parse errors: +" At C:\script.ps1:22 char:16 +" + Stop-Process -Name "invalidprocess +" + ~~~~~~~~~~~~~~~ +" The string is missing the terminator: ". +" + CategoryInfo : ParserError: (:) [], ParseException +" + FullyQualifiedErrorId : TerminatorExpectedAtEndOfString +CompilerSet errorformat+=At\ %f:%l\ char:%c + + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:set sw=2 sts=2: diff --git a/runtime/compiler/rhino.vim b/runtime/compiler/rhino.vim new file mode 100644 index 0000000000..30f3dd3252 --- /dev/null +++ b/runtime/compiler/rhino.vim @@ -0,0 +1,30 @@ +" Vim compiler file +" Compiler: Rhino Shell (JavaScript in Java) +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 Jul 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "rhino" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=java\ -jar\ lib/rhino-X.X.XX.jar\ -w\ -strict + +CompilerSet makeprg=rhino +CompilerSet errorformat=%-Gjs:\ %.%#Compilation\ produced%.%#, + \%Ejs:\ \"%f\"\\,\ line\ %l:\ %m, + \%Ejs:\ uncaught\ JavaScript\ runtime\ exception:\ %m, + \%Wjs:\ warning:\ \"%f\"\\,\ line\ %l:\ %m, + \%Zjs:\ %p^, + \%Cjs:\ %.%#, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/rubocop.vim b/runtime/compiler/rubocop.vim new file mode 100644 index 0000000000..7764b4ad20 --- /dev/null +++ b/runtime/compiler/rubocop.vim @@ -0,0 +1,23 @@ +" Vim compiler file +" Compiler: RuboCop +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2019 Jul 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "rubocop" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=rubocop\ --format\ emacs +CompilerSet errorformat=%f:%l:%c:\ %t:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/shellcheck.vim b/runtime/compiler/shellcheck.vim new file mode 100644 index 0000000000..7550439aa2 --- /dev/null +++ b/runtime/compiler/shellcheck.vim @@ -0,0 +1,25 @@ +" Vim compiler file +" Compiler: ShellCheck +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Sep 4 + +if exists("current_compiler") + finish +endif +let current_compiler = "shellcheck" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=shellcheck\ -f\ gcc +CompilerSet errorformat=%f:%l:%c:\ %trror:\ %m\ [SC%n], + \%f:%l:%c:\ %tarning:\ %m\ [SC%n], + \%f:%l:%c:\ %tote:\ %m\ [SC%n], + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/sml.vim b/runtime/compiler/sml.vim new file mode 100644 index 0000000000..c7e1b1bf16 --- /dev/null +++ b/runtime/compiler/sml.vim @@ -0,0 +1,28 @@ +" Vim compiler file +" Compiler: SML/NJ Compiler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Feb 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "sml" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +CompilerSet makeprg=sml +CompilerSet errorformat=%f:%l.%c-%\\d%\\+.%\\d%\\+\ %trror:\ %m, + \%f:%l.%c\ %trror:\ %m, + \%trror:\ %m + \%f:%l.%c-%\\d%\\+.%\\d%\\+\ %tarning:\ %m, + \%f:%l.%c\ %tarning:\ %m, + \%tarning:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/standard.vim b/runtime/compiler/standard.vim new file mode 100644 index 0000000000..50b7c97ca7 --- /dev/null +++ b/runtime/compiler/standard.vim @@ -0,0 +1,16 @@ +" Vim compiler file +" Compiler: Standard for JavaScript +" Maintainer: Romain Lafourcade <romainlafourcade@gmail.com> +" Last Change: 2020 August 20 + +if exists("current_compiler") + finish +endif +let current_compiler = "standard" + +if exists(":CompilerSet") != 2 + command -nargs=* CompilerSet setlocal <args> +endif + +CompilerSet makeprg=npx\ standard +CompilerSet errorformat=%f:%l:%c:\ %m,%-G%.%# diff --git a/runtime/compiler/stylelint.vim b/runtime/compiler/stylelint.vim new file mode 100644 index 0000000000..784a61d46a --- /dev/null +++ b/runtime/compiler/stylelint.vim @@ -0,0 +1,26 @@ +" Vim compiler file +" Compiler: Stylelint +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Jun 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "stylelint" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=npx\ stylelint\ --formatter\ compact + +CompilerSet makeprg=stylelint\ --formatter\ compact +CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %trror\ -\ %m, + \%f:\ line\ %l\\,\ col\ %c\\,\ %tarning\ -\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/tidy.vim b/runtime/compiler/tidy.vim index 75be8b83d9..3f8e68ebf2 100644 --- a/runtime/compiler/tidy.vim +++ b/runtime/compiler/tidy.vim @@ -1,7 +1,7 @@ " Vim compiler file " Compiler: HTML Tidy " Maintainer: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2016 Apr 21 +" Last Change: 2020 Sep 4 if exists("current_compiler") finish @@ -12,8 +12,15 @@ if exists(":CompilerSet") != 2 " older Vim always used :setlocal command -nargs=* CompilerSet setlocal <args> endif -CompilerSet makeprg=tidy\ -quiet\ -errors\ --gnu-emacs\ yes\ %:S +let s:cpo_save = &cpo +set cpo&vim -" foo.html:8:1: Warning: inserting missing 'foobar' element -" foo.html:9:2: Error: <foobar> is not recognized! -CompilerSet errorformat=%f:%l:%c:\ %trror:%m,%f:%l:%c:\ %tarning:%m,%-G%.%# +CompilerSet makeprg=tidy\ -quiet\ -errors\ --gnu-emacs\ yes +CompilerSet errorformat=%f:%l:%c:\ %trror:\ %m, + \%f:%l:%c:\ %tarning:\ %m, + \%f:%l:%c:\ %tnfo:\ %m, + \%f:%l:%c:\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/compiler/typedoc.vim b/runtime/compiler/typedoc.vim new file mode 100644 index 0000000000..3be06f3d4e --- /dev/null +++ b/runtime/compiler/typedoc.vim @@ -0,0 +1,28 @@ +" Vim compiler file +" Compiler: TypeDoc +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Feb 10 + +if exists("current_compiler") + finish +endif +let current_compiler = "typedoc" + +if exists(":CompilerSet") != 2 " older Vim always used :setlocal + command -nargs=* CompilerSet setlocal <args> +endif + +let s:cpo_save = &cpo +set cpo&vim + +" CompilerSet makeprg=npx\ typedoc + +CompilerSet makeprg=typedoc +CompilerSet errorformat=%EError:\ %f(%l), + \%WWarning:\ %f(%l), + \%+IDocumentation\ generated\ at\ %f, + \%Z\ %m, + \%-G%.%# + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/doc/arabic.txt b/runtime/doc/arabic.txt index a3d979e519..df91b8d065 100644 --- a/runtime/doc/arabic.txt +++ b/runtime/doc/arabic.txt @@ -72,7 +72,7 @@ Arabic requires ISO-8859-6 as well as Presentation Form-B fonts (without Form-B, Arabic will _NOT_ be usable). It is highly recommended that users search for so-called 'ISO-10646-1' fonts. Do an Internet search or check www.arabeyes.org for further -info on where to attain the necessary Arabic fonts. +info on where to obtain the necessary Arabic fonts. Font Installation @@ -118,7 +118,7 @@ o Setting the appropriate character Encoding > :set encoding=utf-8 < - to your vimrc file (entering the command manually into you VIM + to your vimrc file (entering the command manually into your Vim window is highly discouraged). In short, include ':set encoding=utf-8' to your vimrc file. diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index 01b21aa085..bf94383ec4 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -215,6 +215,8 @@ BufAdd Just after creating a new buffer which is added to the buffer list, or adding a buffer to the buffer list, a buffer in the buffer list was renamed. + Not triggered for the initial buffers created + during startup. Before |BufEnter|. NOTE: Current buffer "%" may be different from the buffer being created "<afile>". @@ -461,7 +463,7 @@ CompleteDone After Insert mode completion is done. Either *CursorHold* CursorHold When the user doesn't press a key for the time - specified with 'updatetime'. Not re-triggered + specified with 'updatetime'. Not triggered until the user has pressed a key (i.e. doesn't fire every 'updatetime' ms if you leave Vim to make some coffee. :) See |CursorHold-example| @@ -707,7 +709,7 @@ InsertEnter Just before starting Insert mode. Also for string. *InsertLeavePre* InsertLeavePre Just before leaving Insert mode. Also when - using CTRL-O |i_CTRL-O|. Be caseful not to + using CTRL-O |i_CTRL-O|. Be careful not to change mode or use `:normal`, it will likely cause trouble. *InsertLeave* @@ -1207,8 +1209,8 @@ name! :aug[roup]! {name} Delete the autocmd group {name}. Don't use this if there is still an autocommand using this group! You will get a warning if doing - it anyway. when the group is the current group - you will get error E936. + it anyway. When the group is the current + group you will get error E936. To enter autocommands for a specific group, use this method: 1. Select the group with ":augroup {name}". @@ -1267,9 +1269,18 @@ option will not cause any commands to be executed. *:doautoa* *:doautoall* :doautoa[ll] [<nomodeline>] [group] {event} [fname] Like ":doautocmd", but apply the autocommands to each - loaded buffer. Note that [fname] is used to select - the autocommands, not the buffers to which they are - applied. + loaded buffer. The current buffer is done last. + + Note that [fname] is used to select the autocommands, + not the buffers to which they are applied. Example: > + augroup mine + autocmd! + autocmd FileType * echo expand('<amatch>') + augroup END + doautoall mine FileType Loaded-Buffer +< Sourcing this script, you'll see as many + "Loaded-Buffer" echoed as there are loaded buffers. + Careful: Don't use this for autocommands that delete a buffer, change to another buffer or change the contents of a buffer; the result is unpredictable. diff --git a/runtime/doc/change.txt b/runtime/doc/change.txt index 310d244fbc..19a8be1102 100644 --- a/runtime/doc/change.txt +++ b/runtime/doc/change.txt @@ -141,7 +141,7 @@ commands, except "gJ", delete any leading white space on the next line. If the 'joinspaces' option is on, these commands insert two spaces after a '.', '!' or '?'. The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting -spaces before and after a multi-byte character |fo-table|. +spaces before and after a multibyte character |fo-table|. The '[ mark is set at the end of the first line that was joined, '] at the end of the resulting line. @@ -197,7 +197,7 @@ gR Enter Virtual Replace mode: Each character you type start insert (for {Visual} see |Visual-mode|). *v_r* -{Visual}["x]r{char} Replace all selected characters by {char}. +{Visual}r{char} Replace all selected characters by {char}. *v_C* {Visual}["x]C Delete the highlighted lines [into register x] and @@ -610,6 +610,8 @@ Directory for temporary files is created in the first suitable directory of: |cmdline-ranges|. See |:s_flags| for [flags]. + The delimiter doesn't need to be /, see + |pattern-delimiter|. :[range]s[ubstitute] [flags] [count] :[range]&[&][flags] [count] *:&* @@ -621,6 +623,8 @@ Directory for temporary files is created in the first suitable directory of: The space between `:substitute` and the 'c', 'g', 'i', 'I' and 'r' flags isn't required, but in scripts it's a good idea to keep it to avoid confusion. + Also see the two and three letter commands to repeat + :substitute below |:substitute-repeat|. :[range]~[&][flags] [count] *:~* Repeat last substitute with same substitute string @@ -744,7 +748,7 @@ This deletes "TESTING" from all lines, but only one per line. For compatibility with Vi these two exceptions are allowed: "\/{string}/" and "\?{string}?" do the same as "//{string}/r". "\&{string}&" does the same as "//{string}/". - *E146* + *pattern-delimiter* *E146* Instead of the '/' which surrounds the pattern and replacement string, you can use any other single-byte character, but not an alphanumeric character, '\', '"' or '|'. This is useful if you want to include a '/' in the search @@ -841,20 +845,26 @@ either the first or second pattern in parentheses did not match, so either *:sge* *:sgi* *:sgI* *:sgl* *:sgn* *:sgp* *:sgr* *:sI* *:si* *:sic* *:sIc* *:sie* *:sIe* *:sIg* *:sIl* *:sin* *:sIn* *:sIp* *:sip* *:sIr* *:sir* *:sr* *:src* *:srg* *:sri* *:srI* *:srl* - *:srn* *:srp* + *:srn* *:srp* *:substitute-repeat* 2-letter and 3-letter :substitute commands ~ +These commands repeat the previous `:substitute` command with the given flags. +The first letter is always "s", followed by one or two of the possible flag +characters. For example `:sce` works like `:s///ce`. The table lists the +possible combinations, not all flags are possible, because the command is +short for another command. + List of :substitute commands | c e g i I n p l r - | c :sc :sce :scg :sci :scI :scn :scp :scl --- + | c :sc :sce :scg :sci :scI :scn :scp :scl | e | g :sgc :sge :sg :sgi :sgI :sgn :sgp :sgl :sgr - | i :sic :sie --- :si :siI :sin :sip --- :sir + | i :sic :sie :si :siI :sin :sip :sir | I :sIc :sIe :sIg :sIi :sI :sIn :sIp :sIl :sIr | n | p | l - | r :src --- :srg :sri :srI :srn :srp :srl :sr + | r :src :srg :sri :srI :srn :srp :srl :sr Exceptions: :scr is `:scriptnames` @@ -959,9 +969,9 @@ inside of strings can change! Also see 'softtabstop' option. > 5. Copying and moving text *copy-move* *quote* -"{a-zA-Z0-9.%#:-"} Use register {a-zA-Z0-9.%#:-"} for next delete, yank - or put (use uppercase character to append with - delete and yank) ({.%#:} only work with put). +"{register} Use {register} for next delete, yank or put. Use + an uppercase character to append with delete and yank. + Registers ".", "%", "#" and ":" only work with put. *:reg* *:registers* :reg[isters] Display the type and contents of all numbered and @@ -1140,7 +1150,7 @@ Rationale: In Vi the "y" command followed by a backwards motion would With a linewise yank command the cursor is put in the first line, but the column is unmodified, thus it may not be on the first yanked character. -There are ten types of registers: *registers* *E354* +There are ten types of registers: *registers* *{register}* *E354* 1. The unnamed register "" 2. 10 numbered registers "0 to "9 3. The small delete register "- @@ -1400,7 +1410,7 @@ text. Put it in your autoload directory, e.g. ~/.vim/autoload/format.vim: > func! format#Format() " only reformat on explicit gq command if mode() != 'n' - " fall back to Vims internal reformatting + " fall back to Vim's internal reformatting return 1 endif let lines = getline(v:lnum, v:lnum + v:count - 1) @@ -1573,23 +1583,31 @@ can separate the option letters with commas for readability. letter meaning when present in 'formatoptions' ~ + *fo-t* t Auto-wrap text using textwidth + *fo-c* c Auto-wrap comments using textwidth, inserting the current comment leader automatically. + *fo-r* r Automatically insert the current comment leader after hitting <Enter> in Insert mode. + *fo-o* o Automatically insert the current comment leader after hitting 'o' or 'O' in Normal mode. + *fo-q* q Allow formatting of comments with "gq". Note that formatting will not change blank lines or lines containing only the comment leader. A new paragraph starts after such a line, or when the comment leader changes. + *fo-w* w Trailing white space indicates a paragraph continues in the next line. A line that ends in a non-white character ends a paragraph. + *fo-a* a Automatic formatting of paragraphs. Every time text is inserted or deleted the paragraph will be reformatted. See |auto-format|. When the 'c' flag is present this only happens for recognized comments. + *fo-n* n When formatting text, recognize numbered lists. This actually uses the 'formatlistpat' option, thus any kind of list can be used. The indent of the text after the number is used for the next line. The @@ -1600,6 +1618,7 @@ n When formatting text, recognize numbered lists. This actually uses 1. the first item wraps 2. the second item +< *fo-2* 2 When formatting text, use the indent of the second line of a paragraph for the rest of the paragraph, instead of the indent of the first line. This supports paragraphs in which the first line has a @@ -1609,36 +1628,46 @@ n When formatting text, recognize numbered lists. This actually uses second line of the same paragraph third line. < This also works inside comments, ignoring the comment leader. + *fo-v* v Vi-compatible auto-wrapping in insert mode: Only break a line at a blank that you have entered during the current insert command. (Note: this is not 100% Vi compatible. Vi has some "unexpected features" or bugs in this area. It uses the screen column instead of the line column.) + *fo-b* b Like 'v', but only auto-wrap if you enter a blank at or before the wrap margin. If the line was longer than 'textwidth' when you started the insert, or you do not enter a blank in the insert before reaching 'textwidth', Vim does not perform auto-wrapping. + *fo-l* l Long lines are not broken in insert mode: When a line was longer than 'textwidth' when the insert command started, Vim does not automatically format it. -m Also break at a multi-byte character above 255. This is useful for + *fo-m* +m Also break at a multibyte character above 255. This is useful for Asian text where every character is a word on its own. -M When joining lines, don't insert a space before or after a multi-byte + *fo-M* +M When joining lines, don't insert a space before or after a multibyte character. Overrules the 'B' flag. -B When joining lines, don't insert a space between two multi-byte + *fo-B* +B When joining lines, don't insert a space between two multibyte characters. Overruled by the 'M' flag. + *fo-1* 1 Don't break a line after a one-letter word. It's broken before it instead (if possible). + *fo-]* ] Respect textwidth rigorously. With this flag set, no line can be longer than textwidth, unless line-break-prohibition rules make this impossible. Mainly for CJK scripts and works only if 'encoding' is "utf-8". + *fo-j* j Where it makes sense, remove a comment leader when joining lines. For example, joining: int i; // the index ~ // in the list ~ Becomes: int i; // the index in the list ~ + *fo-p* p Don't break lines at single spaces that follow periods. This is intended to complement 'joinspaces' and |cpo-J|, for prose with sentences separated by two spaces. For example, with 'textwidth' set @@ -1696,7 +1725,7 @@ Some examples: Automatic formatting *auto-format* *autoformat* When the 'a' flag is present in 'formatoptions' text is formatted -automatically when inserting text or deleting text. This works nice for +automatically when inserting text or deleting text. This works nicely for editing text paragraphs. A few hints on how to use this: - You need to properly define paragraphs. The simplest is paragraphs that are @@ -1783,6 +1812,8 @@ found here: |sort()|, |uniq()|. When /{pattern}/ is specified and there is no [r] flag the text matched with {pattern} is skipped, so that you sort on what comes after the match. + 'ignorecase' applies to the pattern, but 'smartcase' + is not used. Instead of the slash any non-letter can be used. For example, to sort on the second comma-separated field: > diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt index 098245b5a8..ae43aeeb25 100644 --- a/runtime/doc/cmdline.txt +++ b/runtime/doc/cmdline.txt @@ -119,7 +119,7 @@ CTRL-K {char1} {char2} *c_CTRL-K* enter digraph (see |digraphs|). When {char1} is a special key, the code for that key is inserted in <> form. -CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>* +CTRL-R {register} *c_CTRL-R* *c_<C-R>* Insert the contents of a numbered or named register. Between typing CTRL-R and the second character '"' will be displayed to indicate that you are expected to enter the name of a @@ -178,8 +178,8 @@ CTRL-R CTRL-L *c_CTRL-R_CTRL-L* *c_<C-R>_<C-L>* *c_CTRL-R_CTRL-R* *c_<C-R>_<C-R>* *c_CTRL-R_CTRL-O* *c_<C-R>_<C-O>* -CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} -CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} +CTRL-R CTRL-R {register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} +CTRL-R CTRL-O {register CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L} Insert register or object under the cursor. Works like |c_CTRL-R| but inserts the text literally. For example, if register a contains "xy^Hz" (where ^H is a backspace), @@ -443,6 +443,10 @@ emulate it. For example, this mimics autolist=ambiguous: This will find the longest match with the first 'wildchar', then list all matching files with the next. + *complete-script-local-functions* +When completing user function names, prepend "s:" to find script-local +functions. + *suffixes* For file name completion you can use the 'suffixes' option to set a priority between files with almost the same name. If there are multiple matches, @@ -553,14 +557,17 @@ followed by another Vim command: :command :cscope :debug + :eval :folddoopen :folddoclosed :function :global :help + :helpgrep :lcscope :ldo :lfdo + :lhelpgrep :make :normal :perlfile @@ -572,6 +579,7 @@ followed by another Vim command: :read ! :scscope :sign + :terminal :vglobal :windo :write ! @@ -752,7 +760,7 @@ three lines: > < Visual Mode and Range *v_:* - + *:star-visual-range* {Visual}: Starts a command-line with the Visual selected lines as a range. The code `:'<,'>` is used for this range, which makes it possible to select a similar line from the command-line @@ -824,34 +832,37 @@ it, no matter how many backslashes. \\# \# Also see |`=|. - *:<cword>* *<cword>* *:<cWORD>* *<cWORD>* - *:<cexpr>* *<cexpr>* *:<cfile>* *<cfile>* - *:<afile>* *<afile>* *:<abuf>* *<abuf>* - *:<amatch>* *<amatch>* - *:<sfile>* *<sfile>* *:<slnum>* *<slnum>* - *:<sflnum>* *<sflnum>* *E499* *E500* + *E499* *E500* Note: these are typed literally, they are not special keys! + *:<cword>* *<cword>* <cword> is replaced with the word under the cursor (like |star|) + *:<cWORD>* *<cWORD>* <cWORD> is replaced with the WORD under the cursor (see |WORD|) + *:<cexpr>* *<cexpr>* <cexpr> is replaced with the word under the cursor, including more to form a C expression. E.g., when the cursor is on "arg" of "ptr->arg" then the result is "ptr->arg"; when the cursor is on "]" of "list[idx]" then the result is "list[idx]". This is used for |v:beval_text|. + *:<cfile>* *<cfile>* <cfile> is replaced with the path name under the cursor (like what |gf| uses) + *:<afile>* *<afile>* <afile> When executing autocommands, is replaced with the file name of the buffer being manipulated, or the file for a read or write. *E495* + *:<abuf>* *<abuf>* <abuf> When executing autocommands, is replaced with the currently effective buffer number (for ":r file" and ":so file" it is the current buffer, the file being read/sourced is not in a buffer). *E496* + *:<amatch>* *<amatch>* <amatch> When executing autocommands, is replaced with the match for which this autocommand was executed. *E497* It differs from <afile> only when the file name isn't used to match with (for FileType, Syntax and SpellFileMissing events). + *:<sfile>* *<sfile>* <sfile> When executing a ":source" command, is replaced with the file name of the sourced file. *E498* When executing a function, is replaced with: @@ -860,10 +871,12 @@ Note: these are typed literally, they are not special keys! "function {function-name1}[{lnum}]..{function-name2}[{lnum}]" Note that filename-modifiers are useless when <sfile> is used inside a function. + *:<slnum>* *<slnum>* <slnum> When executing a ":source" command, is replaced with the line number. *E842* When executing a function it's the line number relative to the start of the function. + *:<sflnum>* *<sflnum>* <sflnum> When executing a script, is replaced with the line number. It differs from <slnum> in that <sflnum> is replaced with the script line number in any situation. *E961* @@ -898,7 +911,7 @@ These modifiers can be given, in this order: separator is removed. Thus ":p:h" on a directory name results on the directory name itself (without trailing slash). When the file name is an absolute path (starts with "/" for - Unix; "x:\" for Windows), that part is not removed. + Unix; "x:\" for Win32), that part is not removed. When there is no head (path is relative to current directory) the result is empty. :t Tail of the file name (last component of the name). Must @@ -1074,7 +1087,8 @@ CTRL-C Continue in Command-line mode. The command-line under the in Normal mode. There is no redraw, thus the window will remain visible. :quit Discard the command line and go back to Normal mode. - ":close", ":exit", ":xit" and CTRL-\ CTRL-N also work. + ":close", CTRL-W c, ":exit", ":xit" and CTRL-\ CTRL-N also + work. :qall Quit Vim, unless there are changes in some buffer. :qall! Quit Vim, discarding changes to any buffer. diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 3544882ceb..a9e2a0d522 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -57,11 +57,12 @@ reset to the global value. The options can still be overruled from a modeline when re-editing the file. However, 'foldmethod' and 'wrap' won't be set from a modeline when 'diff' is set. +See `:diffoff` for an easy way to revert the options. The differences shown are actually the differences in the buffer. Thus if you make changes after loading a file, these will be included in the displayed diffs. You might have to do ":diffupdate" now and then, not all changes are -immediately taken into account. +immediately taken into account, especially when using an external diff command. In your vimrc file you could do something special when Vim was started in diff mode. You could use a construct like this: > diff --git a/runtime/doc/digraph.txt b/runtime/doc/digraph.txt index 271b8c2597..b7dc16341d 100644 --- a/runtime/doc/digraph.txt +++ b/runtime/doc/digraph.txt @@ -30,6 +30,8 @@ An alternative is using the 'keymap' option. it is the Unicode character, see |digraph-encoding|. Example: > :digr e: 235 a: 228 +< You can use `:exe` to enter a hex number: > + :exe 'digr += ' .. 0x2A72 < Avoid defining a digraph with '_' (underscore) as the first character, it has a special meaning in the future. diff --git a/runtime/doc/editing.txt b/runtime/doc/editing.txt index aa964a521f..4700af41b7 100644 --- a/runtime/doc/editing.txt +++ b/runtime/doc/editing.txt @@ -63,10 +63,14 @@ g CTRL-G Prints the current position of the cursor in five ways: Column, Line, Word, Character and Byte. If the number of Characters and Bytes is the same then the Character position is omitted. + If there are characters in the line that take more than one position on the screen (<Tab> or special - character), both the "real" column and the screen - column are shown, separated with a dash. + character), or characters using more than one byte per + column (characters above 0x7F when 'encoding' is + utf-8), both the byte column and the screen column are + shown, separated by a dash. + Also see the 'ruler' option and the |wordcount()| function. @@ -298,10 +302,13 @@ CTRL-^ Edit the alternate file. Mostly the alternate file is *gF* [count]gF Same as "gf", except if a number follows the file name, then the cursor is positioned on that line in - the file. The file name and the number must be - separated by a non-filename (see 'isfname') and - non-numeric character. White space between the - filename, the separator and the number are ignored. + the file. + The file name and the number must be separated by a + non-filename (see 'isfname') and non-numeric + character. " line " is also recognized, like it is + used in the output of `:verbose command UserCmd` + White space between the filename, the separator and + the number are ignored. Examples: eval.c:10 ~ eval.c @ 20 ~ @@ -439,6 +446,9 @@ This edits the same file again with 'fileformat' set to "unix". > :w ++enc=latin1 newfile This writes the current buffer to "newfile" in latin1 format. +The message given when writing a file will show "[converted]" when +'fileencoding' or the value specified with ++enc differs from 'encoding'. + There may be several ++opt arguments, separated by white space. They must all appear before any |+cmd| argument. @@ -508,15 +518,16 @@ If you start editing a new file and the 'fileformats' option is not empty (which is the default), Vim will try to detect whether the lines in the file are separated by the specified formats. When set to "unix,dos", Vim will check for lines with a single <NL> (as used on Unix) or by a <CR><NL> pair -(Windows). Only when ALL lines end in <CR><NL>, 'fileformat' is set to "dos", -otherwise it is set to "unix". When 'fileformats' includes "mac", and no <NL> -characters are found in the file, 'fileformat' is set to "mac". +(MS-Windows). Only when ALL lines end in <CR><NL>, 'fileformat' is +set to "dos", otherwise it is set to "unix". When 'fileformats' includes +"mac", and no <NL> characters are found in the file, 'fileformat' is set to +"mac". -If the 'fileformat' option is set to "dos" on non-Windows systems the message -"[dos format]" is shown to remind you that something unusual is happening. On -Windows systems you get the message "[unix format]" if 'fileformat' is set to -"unix". On all systems but the Macintosh you get the message "[mac format]" -if 'fileformat' is set to "mac". +If the 'fileformat' option is set to "dos" on non-MS-Windows systems the +message "[dos format]" is shown to remind you that something unusual is +happening. On MS-Windows systems you get the message "[unix format]" if +'fileformat' is set to "unix". On all systems but the Macintosh you get the +message "[mac format]" if 'fileformat' is set to "mac". If the 'fileformats' option is empty and DOS format is used, but while reading a file some lines did not end in <CR><NL>, "[CR missing]" will be included in @@ -607,7 +618,7 @@ list of the current window. :args ## x < This will add the "x" item and sort the new list. -:argd[elete] {pattern} .. *:argd* *:argdelete* *E480* +:argd[elete] {pattern} .. *:argd* *:argdelete* *E480* *E610* Delete files from the argument list that match the {pattern}s. {pattern} is used like a file pattern, see |file-pattern|. "%" can be used to delete the @@ -617,7 +628,7 @@ list of the current window. Example: > :argdel *.obj -:[range]argd[elete] Delete the {range} files from the argument list. +:[range]argd[elete] Delete the [range] files from the argument list. Example: > :10,$argdel < Deletes arguments 10 and further, keeping 1-9. > @@ -965,7 +976,7 @@ to write anyway add a '!' to the command. *write-permissions* When writing a new file the permissions are read-write. For unix the mask is -0666 with additionally umask applied. When writing a file that was read Vim +0o666 with additionally umask applied. When writing a file that was read Vim will preserve the permissions, but clear the s-bit. *write-readonly* @@ -984,7 +995,7 @@ original file fails, there will be an error message telling you that you lost the original file. *DOS-format-write* -If the 'fileformat' is "dos", <CR> <NL> is used for <EOL>. This is default +If the 'fileformat' is "dos", <CR><NL> is used for <EOL>. This is default for Windows. On other systems the message "[dos format]" is shown to remind you that an unusual <EOL> was used. *Unix-format-write* @@ -1018,11 +1029,11 @@ When the file name is actually a device name, Vim will not make a backup (that would be impossible). You need to use "!", since the device already exists. Example for Unix: > :w! /dev/lpt0 -and Windows: > +and MS-Windows: > :w! lpt0 For Unix a device is detected when the name doesn't refer to a normal file or a directory. A fifo or named pipe also looks like a device to Vim. -For Windows the device is detected by its name: +For MS-Windows the device is detected by its name: CON CLOCK$ NUL @@ -1036,9 +1047,9 @@ The names can be in upper- or lowercase. *:q* *:quit* :q[uit] Quit the current window. Quit Vim if this is the last - window. This fails when changes have been made and - Vim refuses to |abandon| the current buffer, and when - the last file in the argument list has not been + |edit-window|. This fails when changes have been made + and Vim refuses to |abandon| the current buffer, and + when the last file in the argument list has not been edited. If there are other tab pages and quitting the last window in the current tab page the current tab page is @@ -1063,18 +1074,22 @@ The names can be in upper- or lowercase. code. See |:cq|. *:wq* -:wq [++opt] Write the current file and quit. Writing fails when - the file is read-only or the buffer does not have a - name. Quitting fails when the last file in the - argument list has not been edited. - -:wq! [++opt] Write the current file and quit. Writing fails when - the current buffer does not have a name. - -:wq [++opt] {file} Write to {file} and quit. Quitting fails when the +:wq [++opt] Write the current file and close the window. If this + was the last |edit-window| Vim quits. + Writing fails when the file is read-only or the buffer + does not have a name. Quitting fails when the last + file in the argument list has not been edited. + +:wq! [++opt] Write the current file and close the window. If this + was the last |edit-window| Vim quits. Writing fails + when the current buffer does not have a name. + +:wq [++opt] {file} Write to {file} and close the window. If this was the + last |edit-window| Vim quits. Quitting fails when the last file in the argument list has not been edited. -:wq! [++opt] {file} Write to {file} and quit. +:wq! [++opt] {file} Write to {file} and close the current window. Quit + Vim if this was the last |edit-window|. :[range]wq[!] [++opt] [file] Same as above, but only write the lines in [range]. @@ -1091,10 +1106,10 @@ The names can be in upper- or lowercase. Same as :xit. *ZZ* -ZZ Write current file, if modified, and quit (same as - ":x"). (Note: If there are several windows for the - current file, the file is written if it was modified - and the window is closed). +ZZ Write current file, if modified, and close the current + window (same as ":x"). + If there are several windows for the current file, + only the current window is closed. *ZQ* ZQ Quit without checking for changes (same as ":q!"). @@ -1195,13 +1210,13 @@ For versions of Vim where browsing is not supported, the command is executed unmodified. *browsefilter* -For Windows you can modify the filters that are used in the browse dialog. By -setting the g:browsefilter or b:browsefilter variables, you can change the -filters globally or locally to the buffer. The variable is set to a string in -the format "{filter label}\t{pattern};{pattern}\n" where {filter label} is the -text that appears in the "Files of Type" comboBox, and {pattern} is the -pattern which filters the filenames. Several patterns can be given, separated -by ';'. +For MS-Windows you can modify the filters that are used in the browse +dialog. By setting the g:browsefilter or b:browsefilter variables, you can +change the filters globally or locally to the buffer. The variable is set to +a string in the format "{filter label}\t{pattern};{pattern}\n" where {filter +label} is the text that appears in the "Files of Type" comboBox, and {pattern} +is the pattern which filters the filenames. Several patterns can be given, +separated by ';'. For example, to have only Vim files in the dialog, you could use the following command: > @@ -1248,7 +1263,7 @@ exist, the next-higher scope in the hierarchy applies. Does not change the meaning of an already opened file, because its full path name is remembered. Files from the |arglist| may change though! - On Windows this also changes the active drive. + On MS-Windows this also changes the active drive. To change to the directory of the current file: > :cd %:h < @@ -1279,7 +1294,7 @@ exist, the next-higher scope in the hierarchy applies. *:lch* *:lchdir* :lch[dir][!] Same as |:lcd|. - *:lcd-* + *:lcd-* :lc[d][!] - Change to the previous current directory (before the previous ":lcd {path}" command). @@ -1323,7 +1338,7 @@ to 0, 'modeline' off, 'expandtab' off). Setting the 'binary' option has the same effect. Don't forget to do this before reading the file. There are a few things to remember when editing binary files: -- When editing executable files the number of characters must not change. +- When editing executable files the number of bytes must not change. Use only the "R" or "r" command to change text. Do not delete characters with "x" or by backspacing. - Set the 'textwidth' option to 0. Otherwise lines will unexpectedly be @@ -1335,8 +1350,8 @@ There are a few things to remember when editing binary files: It is also possible that you get an "out of memory" error when reading the file. - Make sure the 'binary' option is set BEFORE loading the - file. Otherwise both <CR> <NL> and <NL> are considered to end a line - and when the file is written the <NL> will be replaced with <CR> <NL>. + file. Otherwise both <CR><NL> and <NL> are considered to end a line + and when the file is written the <NL> will be replaced with <CR><NL>. - <Nul> characters are shown on the screen as ^@. You can enter them with "CTRL-V CTRL-@" or "CTRL-V 000". - To insert a <NL> character in the file split a line. When writing the @@ -1372,7 +1387,7 @@ focus. If you want to automatically reload a file when it has been changed outside of Vim, set the 'autoread' option. This doesn't work at the moment you write the file though, only when the file wasn't changed inside of Vim. - + *ignore-timestamp* If you do not want to be asked or automatically reload the file, you can use this: > set buftype=nofile diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index b8dcfd0ff4..b4630a97bb 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -17,7 +17,9 @@ Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|. *E712* There are six types of variables: -Number A 32 or 64 bit signed number. |expr-number| *Number* + *Number* *Integer* +Number A 32 or 64 bit signed number. |expr-number| + The number of bits is available in |v:numbersize|. Examples: -123 0x10 0177 0b1011 Float A floating point number. |floating-point-format| *Float* @@ -73,8 +75,9 @@ base, use |str2nr()|. *TRUE* *FALSE* *Boolean* For boolean operators Numbers are used. Zero is FALSE, non-zero is TRUE. -You can also use |v:false| and |v:true|. When TRUE is returned from a -function it is the Number one, FALSE is the number zero. +You can also use |v:false| and |v:true|. +When TRUE is returned from a function it is the Number one, FALSE is the +number zero. Note that in the command: > :if "foo" @@ -110,7 +113,7 @@ You will not get an error if you try to change the type of a variable. 1.2 Function references ~ - *Funcref* *E695* *E718* + *Funcref* *E695* *E718* A Funcref variable is obtained with the |function()| function, the |funcref()| function or created with the lambda expression |expr-lambda|. It can be used in an expression in the place of a function name, before the parenthesis @@ -536,6 +539,8 @@ adict. Weeding out entries from a Dictionary can be done with |filter()|: > :call filter(dict, 'v:val =~ "x"') This removes all entries from "dict" with a value not matching 'x'. +This can also be used to remove all entries: > + call filter(dict, 0) Dictionary function ~ @@ -688,7 +693,7 @@ Example: > All expressions within one level are parsed from left to right. -expr1 *expr1* *E109* +expr1 *expr1* *trinary* *E109* ----- expr2 ? expr1 : expr1 @@ -941,11 +946,14 @@ in any order. E.g., these are all possible: expr8[expr1] item of String or |List| *expr-[]* *E111* *subscript* - +In legacy Vim script: If expr8 is a Number or String this results in a String that contains the -expr1'th single byte from expr8. expr8 is used as a String, expr1 as a -Number. This doesn't recognize multi-byte encodings, see `byteidx()` for -an alternative, or use `split()` to turn the string into a list of characters. +expr1'th single byte from expr8. expr8 is used as a String (a number is +automatically converted to a String), expr1 as a Number. This doesn't +recognize multibyte encodings, see `byteidx()` for an alternative, or use +`split()` to turn the string into a list of characters. Example, to get the +byte under the cursor: > + :let c = getline(".")[col(".") - 1] Index zero gives the first byte. This is like it works in C. Careful: text column numbers start with one! Example, to get the byte under the @@ -968,10 +976,13 @@ error. expr8[expr1a : expr1b] substring or sublist *expr-[:]* -If expr8 is a Number or String this results in the substring with the bytes -from expr1a to and including expr1b. expr8 is used as a String, expr1a and -expr1b are used as a Number. This doesn't recognize multi-byte encodings, see -|byteidx()| for computing the indexes. +If expr8 is a String this results in the substring with the bytes or +characters from expr1a to and including expr1b. expr8 is used as a String, +expr1a and expr1b are used as a Number. + +In legacy Vim script the indexes are byte indexes. This doesn't recognize +multibyte encodings, see |byteidx()| for computing the indexes. If expr8 is +a Number it is first converted to a String. If expr1a is omitted zero is used. If expr1b is omitted the length of the string minus one is used. @@ -984,6 +995,7 @@ expr1b is smaller than expr1a the result is an empty string. Examples: > :let c = name[-1:] " last byte of a string + :let c = name[0:-1] " the whole string :let c = name[-2:-2] " last but one byte of a string :let s = line(".")[4:] " from the fifth byte to the end :let s = s[:-3] " remove last two bytes @@ -1237,7 +1249,7 @@ the following ways: The arguments are optional. Example: > :let F = {-> 'error function'} - :echo F() + :echo F('ignored') < error function *closure* Lambda expressions can access outer scope variables and arguments. This is @@ -1292,6 +1304,7 @@ An internal variable is explicitly destroyed with the ":unlet" command Using a name that is not an internal variable or refers to a variable that has been destroyed results in an error. + *variable-scope* There are several name spaces for variables. Which one is to be used is specified by what is prepended: @@ -1664,6 +1677,9 @@ v:fcs_choice What should happen after a |FileChangedShell| event was The default is empty. If another (invalid) value is used then Vim behaves like it is empty, there is no warning message. + *v:fname* *fname-variable* +v:fname The file name set by 'includeexpr'. Empty otherwise. + *v:fname_in* *fname_in-variable* v:fname_in The name of the input file. Valid while evaluating: option used for ~ @@ -1792,6 +1808,16 @@ v:null Special value used to put "null" in JSON and NIL in msgpack. operator) and to zero when used as a Number (e.g. in |expr5| or |expr7| when used with numeric operators). Read-only. + *v:numbermax* *numbermax-variable* +v:numbermax Maximum value of a number. + + *v:numbermin* *numbermin-variable* +v:numbermin Minimum value of a number (negative) + + *v:numbersize* *numbersize-variable* +v:numbersize Number of bits in a Number. This is normally 64, but on some + systems it may be 32. + *v:oldfiles* *oldfiles-variable* v:oldfiles List of file names that is loaded from the |shada| file on startup. These are the files that Vim remembers marks for. @@ -2189,12 +2215,14 @@ getjumplist([{winnr} [, {tabnr}]]) List list of jump list items getline({lnum}) String line {lnum} of current buffer getline({lnum}, {end}) List lines {lnum} to {end} of current buffer -getloclist({nr} [, {what}]) List list of location list items +getloclist({nr}) List list of location list items +getloclist({nr}, {what}) Dict get specific location list properties getmarklist([{expr}]) List list of global/local marks getmatches([{win}]) List list of current matches getpid() Number process ID of Vim getpos({expr}) List position of cursor, mark, etc. -getqflist([{what}]) List list of quickfix items +getqflist() List list of quickfix items +getqflist({what}) Dict get specific quickfix list properties getreg([{regname} [, 1 [, {list}]]]) String or List contents of register getregtype([{regname}]) String type of register @@ -2377,12 +2405,15 @@ setcmdpos({pos}) Number set cursor position in command-line setenv({name}, {val}) none set environment variable setfperm({fname}, {mode} Number set {fname} file permissions to {mode} setline({lnum}, {line}) Number set line {lnum} to {line} -setloclist({nr}, {list}[, {action}[, {what}]]) +setloclist({nr}, {list} [, {action}]) Number modify location list using {list} +setloclist({nr}, {list}, {action}, {what}) + Number modify specific location list props setmatches({list} [, {win}]) Number restore a list of matches setpos({expr}, {list}) Number set the {expr} position to {list} -setqflist({list}[, {action}[, {what}]] - Number modify quickfix list using {list} +setqflist({list} [, {action}]) Number modify quickfix list using {list} +setqflist({list}, {action}, {what}) + Number modify specific quickfix list props setreg({n}, {v}[, {opt}]) Number set register to value and type settabvar({nr}, {varname}, {val}) set {varname} in tab page {nr} to {val} settabwinvar({tabnr}, {winnr}, {varname}, {val}) set {varname} in window @@ -2506,9 +2537,10 @@ win_id2tabwin({expr}) List get tab and window nr from |window-ID| win_id2win({expr}) Number get window nr from |window-ID| win_screenpos({nr}) List get screen position of window {nr} win_splitmove({nr}, {target} [, {options}]) - none move window {nr} to split of {target} + Number move window {nr} to split of {target} winbufnr({nr}) Number buffer number of window {nr} wincol() Number window column of the cursor +windowsversion() String MS-Windows OS version winheight({nr}) Number height of window {nr} winlayout([{tabnr}]) List layout of windows in tab {tabnr} winline() Number window line of the cursor @@ -2585,6 +2617,9 @@ append({lnum}, {text}) *append()* appendbufline({expr}, {lnum}, {text}) *appendbufline()* Like |append()| but append the text in buffer {expr}. + This function works only for loaded buffers. First call + |bufload()| if needed. + For the use of {expr}, see |bufname()|. {lnum} is used like with |append()|. Note that using |line()| @@ -2626,7 +2661,7 @@ arglistid([{winnr} [, {tabnr}]]) {winnr} can be the window number or the |window-ID|. *argv()* -argv([{nr} [, {winid}]) +argv([{nr} [, {winid}]]) The result is the {nr}th file in the argument list. See |arglist|. "argv(0)" is the first one. Example: > :let i = 0 @@ -2641,123 +2676,6 @@ argv([{nr} [, {winid}]) The {winid} argument specifies the window ID, see |argc()|. For the Vim command line arguments see |v:argv|. -assert_beeps({cmd}) *assert_beeps()* - Run {cmd} and add an error message to |v:errors| if it does - NOT produce a beep or visual bell. - Also see |assert_fails()|, |assert_nobeep()| and - |assert-return|. - - *assert_equal()* -assert_equal({expected}, {actual}, [, {msg}]) - When {expected} and {actual} are not equal an error message is - added to |v:errors| and 1 is returned. Otherwise zero is - returned |assert-return|. - There is no automatic conversion, the String "4" is different - from the Number 4. And the number 4 is different from the - Float 4.0. The value of 'ignorecase' is not used here, case - always matters. - When {msg} is omitted an error in the form "Expected - {expected} but got {actual}" is produced. - Example: > - assert_equal('foo', 'bar') -< Will result in a string to be added to |v:errors|: - test.vim line 12: Expected 'foo' but got 'bar' ~ - - *assert_equalfile()* -assert_equalfile({fname-one}, {fname-two} [, {msg}]) - When the files {fname-one} and {fname-two} do not contain - exactly the same text an error message is added to |v:errors|. - Also see |assert-return|. - When {fname-one} or {fname-two} does not exist the error will - mention that. - -assert_exception({error} [, {msg}]) *assert_exception()* - When v:exception does not contain the string {error} an error - message is added to |v:errors|. Also see |assert-return|. - This can be used to assert that a command throws an exception. - Using the error number, followed by a colon, avoids problems - with translations: > - try - commandthatfails - call assert_false(1, 'command should have failed') - catch - call assert_exception('E492:') - endtry - -assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()* - Run {cmd} and add an error message to |v:errors| if it does - NOT produce an error. Also see |assert-return|. - When {error} is given it must match in |v:errmsg|. - Note that beeping is not considered an error, and some failing - commands only beep. Use |assert_beeps()| for those. - -assert_false({actual} [, {msg}]) *assert_false()* - When {actual} is not false an error message is added to - |v:errors|, like with |assert_equal()|. - Also see |assert-return|. - A value is false when it is zero or |v:false|. When "{actual}" - is not a number or |v:false| the assert fails. - When {msg} is omitted an error in the form - "Expected False but got {actual}" is produced. - -assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* - This asserts number and |Float| values. When {actual} is lower - than {lower} or higher than {upper} an error message is added - to |v:errors|. Also see |assert-return|. - When {msg} is omitted an error in the form - "Expected range {lower} - {upper}, but got {actual}" is - produced. - - *assert_match()* -assert_match({pattern}, {actual} [, {msg}]) - When {pattern} does not match {actual} an error message is - added to |v:errors|. Also see |assert-return|. - - {pattern} is used as with |=~|: The matching is always done - like 'magic' was set and 'cpoptions' is empty, no matter what - the actual value of 'magic' or 'cpoptions' is. - - {actual} is used as a string, automatic conversion applies. - Use "^" and "$" to match with the start and end of the text. - Use both to match the whole text. - - When {msg} is omitted an error in the form - "Pattern {pattern} does not match {actual}" is produced. - Example: > - assert_match('^f.*o$', 'foobar') -< Will result in a string to be added to |v:errors|: - test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ - -assert_nobeep({cmd}) *assert_nobeep()* - Run {cmd} and add an error message to |v:errors| if it - produces a beep or visual bell. - Also see |assert_beeps()|. - - *assert_notequal()* -assert_notequal({expected}, {actual} [, {msg}]) - The opposite of `assert_equal()`: add an error message to - |v:errors| when {expected} and {actual} are equal. - Also see |assert-return|. - - *assert_notmatch()* -assert_notmatch({pattern}, {actual} [, {msg}]) - The opposite of `assert_match()`: add an error message to - |v:errors| when {pattern} matches {actual}. - Also see |assert-return|. - -assert_report({msg}) *assert_report()* - Report a test failure directly, using {msg}. - Always returns one. - -assert_true({actual} [, {msg}]) *assert_true()* - When {actual} is not true an error message is added to - |v:errors|, like with |assert_equal()|. - Also see |assert-return|. - A value is |TRUE| when it is a non-zero number or |v:true|. - When {actual} is not a number or |v:true| the assert fails. - When {msg} is omitted an error in the form "Expected True but - got {actual}" is produced. - asin({expr}) *asin()* Return the arc sine of {expr} measured in radians, as a |Float| in the range of [-pi/2, pi/2]. @@ -2770,6 +2688,9 @@ asin({expr}) *asin()* < -0.523599 +assert_ functions are documented here: |assert-functions-details| + + atan({expr}) *atan()* Return the principal value of the arc tangent of {expr}, in the range [-pi/2, +pi/2] radians, as a |Float|. @@ -2901,7 +2822,7 @@ bufnr([{expr} [, {create}]]) the ":ls" command. For the use of {expr}, see |bufname()| above. If the buffer doesn't exist, -1 is returned. Or, if the - {create} argument is present and not zero, a new, unlisted, + {create} argument is present and TRUE, a new, unlisted, buffer is created and its number is returned. bufnr("$") is the last buffer: > :let last_buffer = bufnr("$") @@ -2945,8 +2866,8 @@ byteidx({expr}, {nr}) *byteidx()* Return byte index of the {nr}'th character in the string {expr}. Use zero for the first character, it then returns zero. - This function is only useful when there are multibyte - characters, otherwise the returned value is equal to {nr}. + If there are no multibyte characters the returned value is + equal to {nr}. Composing characters are not counted separately, their byte length is added to the preceding base character. See |byteidxcomp()| below for counting composing characters @@ -2973,6 +2894,8 @@ byteidxcomp({expr}, {nr}) *byteidxcomp()* < The first and third echo result in 3 ('e' plus composing character is 3 bytes), the second echo results in 1 ('e' is one byte). + Only works differently from byteidx() when 'encoding' is set to + a Unicode encoding. call({func}, {arglist} [, {dict}]) *call()* *E699* Call function {func} with the items in |List| {arglist} as @@ -3166,7 +3089,7 @@ complete_check() *complete_check()* *complete_info()* complete_info([{what}]) - Returns a Dictionary with information about Insert mode + Returns a |Dictionary| with information about Insert mode completion. See |ins-completion|. The items are: mode Current completion mode name string. @@ -3198,7 +3121,7 @@ complete_info([{what}]) "function" User defined completion |i_CTRL-X_CTRL-U| "omni" Omni completion |i_CTRL-X_CTRL-O| "spell" Spelling suggestions |i_CTRL-X_s| - "eval" |complete()| completion + "eval" |complete()| completion "unknown" Other internal modes If the optional {what} list argument is supplied, then only @@ -3237,7 +3160,7 @@ confirm({msg} [, {choices} [, {default} [, {type}]]]) not need to be the first letter: > confirm("file has been modified", "&Save\nSave &All") < For the console, the first letter of each choice is used as - the default shortcut key. + the default shortcut key. Case is ignored. The optional {default} argument is the number of the choice that is made if the user hits <CR>. Use 1 to make the first @@ -3418,6 +3341,7 @@ deepcopy({expr}[, {noref}]) *deepcopy()* *E698* copy, and vice versa. When an item is a |List|, a copy for it is made, recursively. Thus changing an item in the copy does not change the contents of the original |List|. + When {noref} is omitted or zero a contained |List| or |Dictionary| is only copied once. All references point to this single copy. With {noref} set to 1 every occurrence of a @@ -3442,14 +3366,18 @@ delete({fname} [, {flags}]) *delete()* Note: on MS-Windows it is not possible to delete a directory that is being used. - The result is a Number, which is 0 if the delete operation was - successful and -1 when the deletion failed or partly failed. + The result is a Number, which is 0/false if the delete + operation was successful and -1/true when the deletion failed + or partly failed. deletebufline({expr}, {first}[, {last}]) *deletebufline()* Delete lines {first} to {last} (inclusive) from buffer {expr}. If {last} is omitted then delete line {first} only. On success 0 is returned, on failure 1 is returned. + This function works only for loaded buffers. First call + |bufload()| if needed. + For the use of {expr}, see |bufname()| above. {first} and {last} are used like with |setline()|. Note that @@ -3533,6 +3461,12 @@ diff_hlID({lnum}, {col}) *diff_hlID()* The highlight ID can be used with |synIDattr()| to obtain syntax information about the highlighting. +empty({expr}) *empty()* + Return the Number 1 if {expr} is empty, zero otherwise. + A |List| or |Dictionary| is empty when it does not have any + items. A Number is empty when its value is zero. Special + variable is empty when it is |v:false| or |v:null|. + environ() *environ()* Return all of environment variables as dictionary. You can check if an environment variable exists like this: > @@ -3541,12 +3475,6 @@ environ() *environ()* use this: > :echo index(keys(environ()), 'HOME', 0, 1) != -1 -empty({expr}) *empty()* - Return the Number 1 if {expr} is empty, zero otherwise. - A |List| or |Dictionary| is empty when it does not have any - items. A Number is empty when its value is zero. Special - variable is empty when it is |v:false| or |v:null|. - escape({string}, {chars}) *escape()* Escape the characters in {chars} that occur in {string} with a backslash. Example: > @@ -3574,16 +3502,15 @@ executable({expr}) *executable()* arguments. executable() uses the value of $PATH and/or the normal searchpath for programs. *PATHEXT* - On Windows the ".exe", ".bat", etc. can - optionally be included. Then the extensions in $PATHEXT are - tried. Thus if "foo.exe" does not exist, "foo.exe.bat" can be - found. If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is - used. A dot by itself can be used in $PATHEXT to try using - the name without an extension. When 'shell' looks like a - Unix shell, then the name is also tried without adding an - extension. - On Windows it only checks if the file exists and - is not a directory, not if it's really executable. + On MS-Windows the ".exe", ".bat", etc. can optionally be + included. Then the extensions in $PATHEXT are tried. Thus if + "foo.exe" does not exist, "foo.exe.bat" can be found. If + $PATHEXT is not set then ".exe;.com;.bat;.cmd" is used. A dot + by itself can be used in $PATHEXT to try using the name + without an extension. When 'shell' looks like a Unix shell, + then the name is also tried without adding an extension. + On MS-Windows it only checks if the file exists and is not a + directory, not if it's really executable. On Windows an executable in the same directory as Vim is always found (it is added to $PATH at |startup|). The result is a Number: @@ -3810,8 +3737,8 @@ expandcmd({expr}) *expandcmd()* Expand special items in {expr} like what is done for an Ex command such as `:edit`. This expands special keywords, like with |expand()|, and environment variables, anywhere in - {expr}. Returns the expanded string. - Example: > + {expr}. "~user" and "~/path" are only expanded at the start. + Returns the expanded string. Example: > :echo expandcmd('make %<.o') < extend({expr1}, {expr2} [, {expr3}]) *extend()* @@ -3819,10 +3746,10 @@ extend({expr1}, {expr2} [, {expr3}]) *extend()* |Dictionaries|. If they are |Lists|: Append {expr2} to {expr1}. - If {expr3} is given insert the items of {expr2} before item - {expr3} in {expr1}. When {expr3} is zero insert before the - first item. When {expr3} is equal to len({expr1}) then - {expr2} is appended. + If {expr3} is given insert the items of {expr2} before the + item with index {expr3} in {expr1}. When {expr3} is zero + insert before the first item. When {expr3} is equal to + len({expr1}) then {expr2} is appended. Examples: > :echo sort(extend(mylist, [7, 5])) :call extend(mylist, [2, 3], 1) @@ -3987,7 +3914,7 @@ flatten({list} [, {maxdepth}]) *flatten()* a very large number. The {list} is changed in place, make a copy first if you do not want that. - *E964* + *E900* {maxdepth} means how deep in nested lists changes are made. {list} is not modified when {maxdepth} is 0. {maxdepth} must be positive number. @@ -4073,7 +4000,8 @@ fnamemodify({fname}, {mods}) *fnamemodify()* :echo fnamemodify("main.c", ":p:h") < results in: > /home/mool/vim/vim/src -< Note: Environment variables don't work in {fname}, use +< If {mods} is empty then {fname} is returned. + Note: Environment variables don't work in {fname}, use |expand()| first then. foldclosed({lnum}) *foldclosed()* @@ -4237,7 +4165,7 @@ getbufinfo([{dict}]) Without an argument information about all the buffers is returned. - When the argument is a Dictionary only the buffers matching + When the argument is a |Dictionary| only the buffers matching the specified criteria are returned. The following keys can be specified in {dict}: buflisted include only listed buffers. @@ -4251,28 +4179,36 @@ getbufinfo([{dict}]) Each returned List item is a dictionary with the following entries: - bufnr buffer number. + bufnr Buffer number. changed TRUE if the buffer is modified. - changedtick number of changes made to the buffer. + changedtick Number of changes made to the buffer. hidden TRUE if the buffer is hidden. - lastused timestamp in seconds, like + lastused Timestamp in seconds, like |localtime()|, when the buffer was last used. listed TRUE if the buffer is listed. - lnum current line number in buffer. - linecount number of lines in the buffer (only + lnum Line number used for the buffer when + opened in the current window. + Only valid if the buffer has been + displayed in the window in the past. + If you want the line number of the + last known cursor position in a given + window, use |line()|: > + :echo line('.', {winid}) +< + linecount Number of lines in the buffer (only valid when loaded) loaded TRUE if the buffer is loaded. - name full path to the file in the buffer. - signs list of signs placed in the buffer. + name Full path to the file in the buffer. + signs List of signs placed in the buffer. Each list item is a dictionary with the following fields: id sign identifier lnum line number name sign name - variables a reference to the dictionary with + variables A reference to the dictionary with buffer-local variables. - windows list of |window-ID|s that display this + windows List of |window-ID|s that display this buffer Examples: > @@ -4318,9 +4254,9 @@ getbufvar({expr}, {varname} [, {def}]) *getbufvar()* The result is the value of option or local buffer variable {varname} in buffer {expr}. Note that the name without "b:" must be used. - When {varname} is empty returns a dictionary with all the + When {varname} is empty returns a |Dictionary| with all the buffer-local variables. - When {varname} is equal to "&" returns a dictionary with all + When {varname} is equal to "&" returns a |Dictionary| with all the buffer-local options. Otherwise, when {varname} starts with "&" returns the value of a buffer-local option. @@ -4390,7 +4326,9 @@ getchar([expr]) *getchar()* endif < There is no prompt, you will somehow have to make clear to the - user that a character has to be typed. + user that a character has to be typed. The screen is not + redrawn, e.g. when resizing the window. + There is no mapping for the character. Key codes are replaced, thus when the user presses the <Del> key you get the code for the <Del> key, not the raw character @@ -4510,7 +4448,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* highlight highlight groups history :history suboptions locale locale names (as output of locale -a) - mapclear buffer argument + mapclear buffer argument mapping mapping name menu menus messages |:messages| suboptions @@ -4543,10 +4481,11 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()* *getcurpos()* getcurpos() Get the position of the cursor. This is like getpos('.'), but - includes an extra item in the list: - [bufnum, lnum, col, off, curswant] ~ - The "curswant" number is the preferred column when moving the + includes an extra "curswant" in the list: + [0, lnum, col, off, curswant] ~ + The "curswant" number is the preferred column when moving the cursor vertically. Also see |getpos()|. + The first "bufnum" item is always zero. This can be used to save and restore the cursor position: > let save_cursor = getcurpos() @@ -4683,7 +4622,7 @@ getline({lnum} [, {end}]) < To get lines from another buffer see |getbufline()| getloclist({nr},[, {what}]) *getloclist()* - Returns a list with all the entries in the location list for + Returns a |List| with all the entries in the location list for window {nr}. {nr} can be the window number or the |window-ID|. When {nr} is zero the current window is used. @@ -4699,7 +4638,16 @@ getloclist({nr},[, {what}]) *getloclist()* field is applicable only when called from a location list window. See |location-list-file-window| for more details. -getmarklist([{expr}] *getmarklist()* + Returns a |Dictionary| with default values if there is no + location list for the window {nr}. + Returns an empty Dictionary if window {nr} does not exist. + + Examples (See also |getqflist-examples|): > + :echo getloclist(3, {'all': 0}) + :echo getloclist(5, {'filewinid': 0}) + + +getmarklist([{expr}]) *getmarklist()* Without the {expr} argument returns a |List| with information about all the global marks. |mark| @@ -4707,7 +4655,7 @@ getmarklist([{expr}] *getmarklist()* local marks defined in buffer {expr}. For the use of {expr}, see |bufname()|. - Each item in the retuned List is a |Dict| with the following: + Each item in the returned List is a |Dict| with the following: name - name of the mark prefixed by "'" pos - a |List| with the position of the mark: [bufnum, lnum, col, off] @@ -4760,6 +4708,10 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr} Note that for '< and '> Visual mode matters: when it is "V" (visual line mode) the column of '< is zero and the column of '> is a large number. + The column number in the returned List is the byte position + within the line. + The column number can be very large, e.g. 2147483647, in which + case it means "after the end of the line". This can be used to save and restore the position of a mark: > let save_a_mark = getpos("'a") ... @@ -4768,7 +4720,7 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr} getqflist([{what}]) *getqflist()* - Returns a list with all the current quickfix errors. Each + Returns a |List| with all the current quickfix errors. Each list item is a dictionary with these entries: bufnr number of buffer that has the file name, use bufname() to get the name @@ -4890,12 +4842,12 @@ getregtype([{regname}]) *getregtype()* gettabinfo([{arg}]) *gettabinfo()* If {arg} is not specified, then information about all the tab - pages is returned as a List. Each List item is a Dictionary. + pages is returned as a |List|. Each List item is a |Dictionary|. Otherwise, {arg} specifies the tab page number and information about that one is returned. If the tab page does not exist an empty List is returned. - Each List item is a Dictionary with the following entries: + Each List item is a |Dictionary| with the following entries: tabnr tab page number. variables a reference to the dictionary with tabpage-local variables @@ -4917,7 +4869,7 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()* When {varname} is empty a dictionary with all window-local variables is returned. When {varname} is equal to "&" get the values of all - window-local options in a Dictionary. + window-local options in a |Dictionary|. Otherwise, when {varname} starts with "&" get the value of a window-local option. Note that {varname} must be the name without "w:". @@ -4966,17 +4918,17 @@ gettagstack([{nr}]) *gettagstack()* See |tagstack| for more information about the tag stack. getwininfo([{winid}]) *getwininfo()* - Returns information about windows as a List with Dictionaries. + Returns information about windows as a |List| with Dictionaries. If {winid} is given Information about the window with that ID - is returned. If the window does not exist the result is an - empty list. + is returned, as a |List| with one item. If the window does not + exist the result is an empty list. Without {winid} information about all the windows in all the tab pages is returned. - Each List item is a Dictionary with the following entries: - botline last displayed buffer line + Each List item is a |Dictionary| with the following entries: + botline last complete displayed buffer line bufnr number of buffer in the window height window height (excluding winbar) loclist 1 if showing a location list @@ -4989,13 +4941,15 @@ getwininfo([{winid}]) *getwininfo()* width window width winbar 1 if the window has a toolbar, 0 otherwise - wincol leftmost screen column of the window + wincol leftmost screen column of the window; + "col" from |win_screenpos()| winid |window-ID| winnr window number - winrow topmost screen column of the window + winrow topmost screen line of the window; + "row" from |win_screenpos()| getwinpos([{timeout}]) *getwinpos()* - The result is a list with two numbers, the result of + The result is a |List| with two numbers, the result of |getwinposx()| and |getwinposy()| combined: [x-pos, y-pos] {timeout} can be used to specify how long to wait in msec for @@ -5042,7 +4996,7 @@ glob({expr} [, {nosuf} [, {list} [, {alllinks}]]]) *glob()* 'suffixes' affect the ordering of matches. 'wildignorecase' always applies. - When {list} is present and it is |TRUE| the result is a List + When {list} is present and it is |TRUE| the result is a |List| with all matching files. The advantage of using a List is, you also get filenames containing newlines correctly. Otherwise the result is a String and when there are several @@ -5100,7 +5054,7 @@ globpath({path}, {expr} [, {nosuf} [, {list} [, {allinks}]]]) one of the patterns in 'wildignore' will be skipped and 'suffixes' affect the ordering of matches. - When {list} is present and it is |TRUE| the result is a List + When {list} is present and it is |TRUE| the result is a |List| with all matching files. The advantage of using a List is, you also get filenames containing newlines correctly. Otherwise the result is a String and when there are several matches, @@ -5121,6 +5075,16 @@ has({feature}) Returns 1 if {feature} is supported, 0 otherwise. The {feature} argument is a feature name like "nvim-0.2.1" or "win32", see below. See also |exists()|. + If the code has a syntax error, then Nvim may skip the rest + of the line and miss |:endif|. > + if has('feature') | let x = this->breaks->without->the->feature | endif +< + Put |:if| and |:endif| on separate lines to avoid the + syntax error. > + if has('feature') + let x = this->breaks->without->the->feature + endif +< Vim's compile-time feature-names (prefixed with "+") are not recognized because Nvim is always compiled with all possible features. |feature-compile| @@ -5166,8 +5130,8 @@ has({feature}) Returns 1 if {feature} is supported, 0 otherwise. The has_key({dict}, {key}) *has_key()* - The result is a Number, which is 1 if |Dictionary| {dict} has - an entry with key {key}. Zero otherwise. + The result is a Number, which is TRUE if |Dictionary| {dict} + has an entry with key {key}. FALSE otherwise. haslocaldir([{winnr}[, {tabnr}]]) *haslocaldir()* The result is a Number, which is 1 when the tabpage or window @@ -5185,16 +5149,16 @@ haslocaldir([{winnr}[, {tabnr}]]) *haslocaldir()* If {winnr} is -1 it is ignored, only the tab is resolved. hasmapto({what} [, {mode} [, {abbr}]]) *hasmapto()* - The result is a Number, which is 1 if there is a mapping that - contains {what} in somewhere in the rhs (what it is mapped to) - and this mapping exists in one of the modes indicated by - {mode}. + The result is a Number, which is TRUE if there is a mapping + that contains {what} in somewhere in the rhs (what it is + mapped to) and this mapping exists in one of the modes + indicated by {mode}. When {abbr} is there and it is |TRUE| use abbreviations instead of mappings. Don't forget to specify Insert and/or Command-line mode. Both the global mappings and the mappings local to the current buffer are checked for a match. - If no matching mapping is found 0 is returned. + If no matching mapping is found FALSE is returned. The following characters are recognized in {mode}: n Normal mode v Visual mode @@ -5225,8 +5189,8 @@ histadd({history}, {item}) *histadd()* character is sufficient. If {item} does already exist in the history, it will be shifted to become the newest entry. - The result is a Number: 1 if the operation was successful, - otherwise 0 is returned. + The result is a Number: TRUE if the operation was successful, + otherwise FALSE is returned. Example: > :call histadd("input", strftime("%Y %b %d")) @@ -5245,8 +5209,8 @@ histdel({history} [, {item}]) *histdel()* an index, see |:history-indexing|. The respective entry will be removed if it exists. - The result is a Number: 1 for a successful operation, - otherwise 0 is returned. + The result is TRUE for a successful operation, otherwise FALSE + is returned. Examples: Clear expression register history: > @@ -5289,7 +5253,7 @@ histnr({history}) *histnr()* :let inp_index = histnr("expr") < hlexists({name}) *hlexists()* - The result is a Number, which is non-zero if a highlight group + The result is a Number, which is TRUE if a highlight group called {name} exists. This is when the group has been defined in some way. Not necessarily when highlighting has been defined for it, it may also have been used for a syntax @@ -5464,10 +5428,11 @@ inputlist({textlist}) *inputlist()* displayed, one string per line. The user will be prompted to enter a number, which is returned. The user can also select an item by clicking on it with the - mouse. For the first string 0 is returned. When clicking - above the first item a negative number is returned. When - clicking on the prompt one more than the length of {textlist} - is returned. + mouse, if the mouse is enabled in the command line ('mouse' is + "a" or includes "c"). For the first string 0 is returned. + When clicking above the first item a negative number is + returned. When clicking on the prompt one more than the + length of {textlist} is returned. Make sure {textlist} has less than 'lines' entries, otherwise it won't work. It's a good idea to put the entry number at the start of the string. And put a prompt in the first item. @@ -5479,7 +5444,7 @@ inputrestore() *inputrestore()* Restore typeahead that was saved with a previous |inputsave()|. Should be called the same number of times inputsave() is called. Calling it more often is harmless though. - Returns 1 when there is nothing to restore, 0 otherwise. + Returns TRUE when there is nothing to restore, FALSE otherwise. inputsave() *inputsave()* Preserve typeahead (also from mappings) and clear it, so that @@ -5487,7 +5452,7 @@ inputsave() *inputsave()* followed by a matching inputrestore() after the prompt. Can be used several times, in which case there must be just as many inputrestore() calls. - Returns 1 when out of memory, 0 otherwise. + Returns TRUE when out of memory, FALSE otherwise. inputsecret({prompt} [, {text}]) *inputsecret()* This function acts much like the |input()| function with but @@ -6086,6 +6051,10 @@ match({expr}, {pat} [, {start} [, {count}]]) *match()* The 'ignorecase' option is used to set the ignore-caseness of the pattern. 'smartcase' is NOT used. The matching is always done like 'magic' is set and 'cpoptions' is empty. + Note that a match at the start is preferred, thus when the + pattern is using "*" (any number of matches) it tends to find + zero matches at the start instead of a number of matches + further down in the text. *matchadd()* *E798* *E799* *E801* *E957* matchadd({group}, {pattern}[, {priority}[, {id} [, {dict}]]]) @@ -6151,7 +6120,8 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) to be used when fast match additions and deletions are required, for example to highlight matching parentheses. *E5030* *E5031* - The list {pos} can contain one of these items: + {pos} is a list of positions. Each position can be one of + these: - A number. This whole line will be highlighted. The first line has number 1. - A list with one number, e.g., [23]. The whole line with this @@ -6168,7 +6138,7 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) ignored, as well as entries with negative column numbers and lengths. - The maximum number of positions is 8. + The maximum number of positions in {pos} is 8. Example: > :highlight MyGroup ctermbg=green guibg=green @@ -6177,8 +6147,7 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]]) :call matchdelete(m) < Matches added by |matchaddpos()| are returned by - |getmatches()| with an entry "pos1", "pos2", etc., with the - value a list like the {pos} item. + |getmatches()|. matcharg({nr}) *matcharg()* Selects the {nr} match item, as set with a |:match|, @@ -6262,9 +6231,9 @@ matchstrpos({expr}, {pat} [, {start} [, {count}]]) *matchstrpos()* *max()* max({expr}) Return the maximum value of all items in {expr}. - {expr} can be a list or a dictionary. For a dictionary, - it returns the maximum of all values in the dictionary. - If {expr} is neither a list nor a dictionary, or one of the + {expr} can be a |List| or a |Dictionary|. For a Dictionary, + it returns the maximum of all values in the Dictionary. + If {expr} is neither a List nor a Dictionary, or one of the items in {expr} cannot be used as a Number this results in an error. An empty |List| or |Dictionary| results in zero. @@ -6316,9 +6285,9 @@ menu_get({path}, {modes}) *menu_get()* *min()* min({expr}) Return the minimum value of all items in {expr}. - {expr} can be a list or a dictionary. For a dictionary, - it returns the minimum of all values in the dictionary. - If {expr} is neither a list nor a dictionary, or one of the + {expr} can be a |List| or a |Dictionary|. For a Dictionary, + it returns the minimum of all values in the Dictionary. + If {expr} is neither a List nor a Dictionary, or one of the items in {expr} cannot be used as a Number this results in an error. An empty |List| or |Dictionary| results in zero. @@ -6340,6 +6309,10 @@ mkdir({name} [, {path} [, {prot}]]) If you try to create an existing directory with {path} set to "p" mkdir() will silently exit. + The function result is a Number, which is TRUE if the call was + successful or FALSE if the directory creation failed or partly + failed. + *mode()* mode([expr]) Return a string that indicates the current mode. If [expr] is supplied and it evaluates to a non-zero Number or @@ -6800,15 +6773,15 @@ prompt_setprompt({buf}, {text}) *prompt_setprompt()* call prompt_setprompt(bufnr(''), 'command: ') pum_getpos() *pum_getpos()* - If the popup menu (see |ins-completion-menu|) is not visible, - returns an empty |Dictionary|, otherwise, returns a - |Dictionary| with the following keys: - height nr of items visible - width screen cells - row top screen row (0 first row) - col leftmost screen column (0 first col) - size total nr of items - scrollbar |TRUE| if visible + If the popup menu (see |ins-completion-menu|) is not visible, + returns an empty |Dictionary|, otherwise, returns a + |Dictionary| with the following keys: + height nr of items visible + width screen cells + row top screen row (0 first row) + col leftmost screen column (0 first col) + size total nr of items + scrollbar |TRUE| if scrollbar is visible The values are the same as in |v:event| during |CompleteChanged|. @@ -6931,10 +6904,10 @@ reg_recording() *reg_recording()* Returns an empty string string when not recording. See |q|. reltime([{start} [, {end}]]) *reltime()* - Return an item that represents a time value. The format of - the item depends on the system. It can be passed to - |reltimestr()| to convert it to a string or |reltimefloat()| - to convert to a float. + Return an item that represents a time value. The item is a + list with items that depend on the system. + The item can be passed to |reltimestr()| to convert it to a + string or |reltimefloat()| to convert to a Float. Without an argument it returns the current "relative time", an implementation-defined value meaningful only when used as an @@ -6944,6 +6917,7 @@ reltime([{start} [, {end}]]) *reltime()* specified in the argument. With two arguments it returns the time passed between {start} and {end}. + The {start} and {end} arguments must be values returned by reltime(). @@ -7065,7 +7039,7 @@ remove({list}, {idx} [, {end}]) *remove()* Without {end}: Remove the item at {idx} from |List| {list} and return the item. With {end}: Remove items from {idx} to {end} (inclusive) and - return a List with these items. When {idx} points to the same + return a |List| with these items. When {idx} points to the same item as {end} a list with one item is returned. When {end} points to an item before {idx} this is an error. See |list-index| for possible values of {idx} and {end}. @@ -7240,11 +7214,16 @@ search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()* 'ignorecase', 'smartcase' and 'magic' are used. - When the 'z' flag is not given, searching always starts in - column zero and then matches before the cursor are skipped. - When the 'c' flag is present in 'cpo' the next search starts - after the match. Without the 'c' flag the next search starts - one column further. + When the 'z' flag is not given, forward searching always + starts in column zero and then matches before the cursor are + skipped. When the 'c' flag is present in 'cpo' the next + search starts after the match. Without the 'c' flag the next + search starts one column further. This matters for + overlapping matches. + When searching backwards and the 'z' flag is given then the + search starts in column zero, thus no match in the current + line will be found (unless wrapping around the end of the + file). When the {stopline} argument is given then the search stops after searching this line. This is useful to restrict the @@ -7436,6 +7415,7 @@ server2client({clientid}, {string}) *server2client()* Send a reply string to {clientid}. The most recent {clientid} that sent a string can be retrieved with expand("<client>"). Note: + Returns zero for success, -1 for failure. This id has to be stored before the next command can be received. I.e. before returning from the received command and before calling any commands that waits for input. @@ -7484,13 +7464,24 @@ serverstop({address}) *serverstop()* address returned by |serverlist()|. setbufline({expr}, {lnum}, {text}) *setbufline()* - Set line {lnum} to {text} in buffer {expr}. To insert - lines use |append()|. + Set line {lnum} to {text} in buffer {expr}. This works like + |setline()| for the specified buffer. + + This function works only for loaded buffers. First call + |bufload()| if needed. + + To insert lines use |appendbufline()|. + Any text properties in {lnum} are cleared. + + {text} can be a string to set one line, or a list of strings + to set multiple lines. If the list extends below the last + line then those lines are added. For the use of {expr}, see |bufname()| above. {lnum} is used like with |setline()|. - This works like |setline()| for the specified buffer. + When {lnum} is just below the last line the {text} will be + added below the last line. On success 0 is returned, on failure 1 is returned. If {expr} is not a valid buffer or {lnum} is not valid, an @@ -7541,8 +7532,8 @@ setcmdpos({pos}) *setcmdpos()* before inserting the resulting text. When the number is too big the cursor is put at the end of the line. A number smaller than one has undefined results. - Returns 0 when successful, 1 when not editing the command - line. + Returns FALSE when successful, TRUE when not editing the + command line. setenv({name}, {val}) *setenv()* Set environment variable {name} to {val}. @@ -7573,10 +7564,10 @@ setline({lnum}, {text}) *setline()* {lnum} is used like with |getline()|. When {lnum} is just below the last line the {text} will be - added as a new line. + added below the last line. - If this succeeds, 0 is returned. If this fails (most likely - because {lnum} is invalid) 1 is returned. + If this succeeds, FALSE is returned. If this fails (most likely + because {lnum} is invalid) TRUE is returned. Example: > :call setline(5, strftime("%c")) @@ -7601,6 +7592,8 @@ setloclist({nr}, {list}[, {action}[, {what}]]) *setloclist()* Otherwise, same as |setqflist()|. Also see |location-list|. + For {action} see |setqflist-action|. + If the optional {what} dictionary argument is supplied, then only the items listed in {what} are set. Refer to |setqflist()| for the list of supported keys in {what}. @@ -7666,7 +7659,12 @@ setpos({expr}, {list}) setqflist({list} [, {action}[, {what}]]) *setqflist()* Create or replace or add to the quickfix list. - When {what} is not present, use the items in {list}. Each + If the optional {what} dictionary argument is supplied, then + only the items listed in {what} are set. The first {list} + argument is ignored. See below for the supported items in + {what}. + *setqflist-what* + When {what} is not present, the items in {list} are used. Each item must be a dictionary. Non-dictionary items in {list} are ignored. Each dictionary item can contain the following entries: @@ -7702,7 +7700,7 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()* Note that the list is not exactly the same as what |getqflist()| returns. - {action} values: *E927* + {action} values: *setqflist-action* *E927* 'a' The items from {list} are added to the existing quickfix list. If there is no existing list, then a new list is created. @@ -7721,10 +7719,7 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()* freed. To add a new quickfix list at the end of the stack, set "nr" in {what} to "$". - If the optional {what} dictionary argument is supplied, then - only the items listed in {what} are set. The first {list} - argument is ignored. The following items can be specified in - {what}: + The following items can be specified in dictionary {what}: context quickfix list context. See |quickfix-context| efm errorformat to use when parsing text from "lines". If this is not present, then the @@ -7768,10 +7763,12 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()* *setreg()* setreg({regname}, {value} [, {options}]) Set the register {regname} to {value}. + {value} may be any value returned by |getreg()|, including a |List|. If {options} contains "a" or {regname} is upper case, then the value is appended. + {options} can also contain a register type specification: "c" or "v" |charwise| mode "l" or "V" |linewise| mode @@ -7860,18 +7857,10 @@ settagstack({nr}, {dict} [, {action}]) *settagstack()* Returns zero for success, -1 for failure. - Examples: - Set current index of the tag stack to 4: > - call settagstack(1005, {'curidx' : 4}) - -< Empty the tag stack of window 3: > + Examples (for more examples see |tagstack-examples|): + Empty the tag stack of window 3: > call settagstack(3, {'items' : []}) -< Push a new item onto the tag stack: > - let pos = [bufnr('myfile.txt'), 10, 1, 0] - let newtag = [{'tagname' : 'mytag', 'from' : pos}] - call settagstack(2, {'items' : newtag}, 'a') - < Save and restore the tag stack: > let stack = gettagstack(1003) " do something else @@ -7938,362 +7927,17 @@ shiftwidth([{col}]) *shiftwidth()* 'vartabstop' feature. If no {col} argument is given, column 1 will be assumed. -sign_define({name} [, {dict}]) *sign_define()* -sign_define({list}) - Define a new sign named {name} or modify the attributes of an - existing sign. This is similar to the |:sign-define| command. - - Prefix {name} with a unique text to avoid name collisions. - There is no {group} like with placing signs. - - The {name} can be a String or a Number. The optional {dict} - argument specifies the sign attributes. The following values - are supported: - icon full path to the bitmap file for the sign. - linehl highlight group used for the whole line the - sign is placed in. - text text that is displayed when there is no icon - or the GUI is not being used. - texthl highlight group used for the text item - numhl highlight group used for 'number' column at the - associated line. Overrides |hl-LineNr|, - |hl-CursorLineNr|. - - If the sign named {name} already exists, then the attributes - of the sign are updated. - - The one argument {list} can be used to define a list of signs. - Each list item is a dictionary with the above items in {dict} - and a 'name' item for the sign name. - - Returns 0 on success and -1 on failure. When the one argument - {list} is used, then returns a List of values one for each - defined sign. - - Examples: > - call sign_define("mySign", { - \ "text" : "=>", - \ "texthl" : "Error", - \ "linehl" : "Search"}) - call sign_define([ - \ {'name' : 'sign1', - \ 'text' : '=>'}, - \ {'name' : 'sign2', - \ 'text' : '!!'} - \ ]) -< -sign_getdefined([{name}]) *sign_getdefined()* - Get a list of defined signs and their attributes. - This is similar to the |:sign-list| command. - - If the {name} is not supplied, then a list of all the defined - signs is returned. Otherwise the attribute of the specified - sign is returned. - - Each list item in the returned value is a dictionary with the - following entries: - icon full path to the bitmap file of the sign - linehl highlight group used for the whole line the - sign is placed in. - name name of the sign - text text that is displayed when there is no icon - or the GUI is not being used. - texthl highlight group used for the text item - numhl highlight group used for 'number' column at the - associated line. Overrides |hl-LineNr|, - |hl-CursorLineNr|. - - Returns an empty List if there are no signs and when {name} is - not found. - - Examples: > - " Get a list of all the defined signs - echo sign_getdefined() - - " Get the attribute of the sign named mySign - echo sign_getdefined("mySign") -< -sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()* - Return a list of signs placed in a buffer or all the buffers. - This is similar to the |:sign-place-list| command. - - If the optional buffer name {expr} is specified, then only the - list of signs placed in that buffer is returned. For the use - of {expr}, see |bufname()|. The optional {dict} can contain - the following entries: - group select only signs in this group - id select sign with this identifier - lnum select signs placed in this line. For the use - of {lnum}, see |line()|. - If {group} is '*', then signs in all the groups including the - global group are returned. If {group} is not supplied or is an - empty string, then only signs in the global group are - returned. If no arguments are supplied, then signs in the - global group placed in all the buffers are returned. - See |sign-group|. - - Each list item in the returned value is a dictionary with the - following entries: - bufnr number of the buffer with the sign - signs list of signs placed in {bufnr}. Each list - item is a dictionary with the below listed - entries - - The dictionary for each sign contains the following entries: - group sign group. Set to '' for the global group. - id identifier of the sign - lnum line number where the sign is placed - name name of the defined sign - priority sign priority - - The returned signs in a buffer are ordered by their line - number and priority. - - Returns an empty list on failure or if there are no placed - signs. - - Examples: > - " Get a List of signs placed in eval.c in the - " global group - echo sign_getplaced("eval.c") - - " Get a List of signs in group 'g1' placed in eval.c - echo sign_getplaced("eval.c", {'group' : 'g1'}) - - " Get a List of signs placed at line 10 in eval.c - echo sign_getplaced("eval.c", {'lnum' : 10}) - - " Get sign with identifier 10 placed in a.py - echo sign_getplaced("a.py", {'id' : 10}) - - " Get sign with id 20 in group 'g1' placed in a.py - echo sign_getplaced("a.py", {'group' : 'g1', - \ 'id' : 20}) - - " Get a List of all the placed signs - echo sign_getplaced() -< - *sign_jump()* -sign_jump({id}, {group}, {expr}) - Open the buffer {expr} or jump to the window that contains - {expr} and position the cursor at sign {id} in group {group}. - This is similar to the |:sign-jump| command. - - For the use of {expr}, see |bufname()|. - - Returns the line number of the sign. Returns -1 if the - arguments are invalid. - - Example: > - " Jump to sign 10 in the current buffer - call sign_jump(10, '', '') -< - *sign_place()* -sign_place({id}, {group}, {name}, {expr} [, {dict}]) - Place the sign defined as {name} at line {lnum} in file or - buffer {expr} and assign {id} and {group} to sign. This is - similar to the |:sign-place| command. - - If the sign identifier {id} is zero, then a new identifier is - allocated. Otherwise the specified number is used. {group} is - the sign group name. To use the global sign group, use an - empty string. {group} functions as a namespace for {id}, thus - two groups can use the same IDs. Refer to |sign-identifier| - and |sign-group| for more information. - - {name} refers to a defined sign. - {expr} refers to a buffer name or number. For the accepted - values, see |bufname()|. - - The optional {dict} argument supports the following entries: - lnum line number in the file or buffer - {expr} where the sign is to be placed. - For the accepted values, see |line()|. - priority priority of the sign. See - |sign-priority| for more information. - - If the optional {dict} is not specified, then it modifies the - placed sign {id} in group {group} to use the defined sign - {name}. - - Returns the sign identifier on success and -1 on failure. - - Examples: > - " Place a sign named sign1 with id 5 at line 20 in - " buffer json.c - call sign_place(5, '', 'sign1', 'json.c', - \ {'lnum' : 20}) - - " Updates sign 5 in buffer json.c to use sign2 - call sign_place(5, '', 'sign2', 'json.c') - - " Place a sign named sign3 at line 30 in - " buffer json.c with a new identifier - let id = sign_place(0, '', 'sign3', 'json.c', - \ {'lnum' : 30}) - - " Place a sign named sign4 with id 10 in group 'g3' - " at line 40 in buffer json.c with priority 90 - call sign_place(10, 'g3', 'sign4', 'json.c', - \ {'lnum' : 40, 'priority' : 90}) -< - *sign_placelist()* -sign_placelist({list}) - Place one or more signs. This is similar to the - |sign_place()| function. The {list} argument specifies the - List of signs to place. Each list item is a dict with the - following sign attributes: - buffer buffer name or number. For the accepted - values, see |bufname()|. - group sign group. {group} functions as a namespace - for {id}, thus two groups can use the same - IDs. If not specified or set to an empty - string, then the global group is used. See - |sign-group| for more information. - id sign identifier. If not specified or zero, - then a new unique identifier is allocated. - Otherwise the specified number is used. See - |sign-identifier| for more information. - lnum line number in the buffer {expr} where the - sign is to be placed. For the accepted values, - see |line()|. - name name of the sign to place. See |sign_define()| - for more information. - priority priority of the sign. When multiple signs are - placed on a line, the sign with the highest - priority is used. If not specified, the - default value of 10 is used. See - |sign-priority| for more information. - - If {id} refers to an existing sign, then the existing sign is - modified to use the specified {name} and/or {priority}. - - Returns a List of sign identifiers. If failed to place a - sign, the corresponding list item is set to -1. - - Examples: > - " Place sign s1 with id 5 at line 20 and id 10 at line - " 30 in buffer a.c - let [n1, n2] = sign_place([ - \ {'id' : 5, - \ 'name' : 's1', - \ 'buffer' : 'a.c', - \ 'lnum' : 20}, - \ {'id' : 10, - \ 'name' : 's1', - \ 'buffer' : 'a.c', - \ 'lnum' : 30} - \ ]) - - " Place sign s1 in buffer a.c at line 40 and 50 - " with auto-generated identifiers - let [n1, n2] = sign_place([ - \ {'name' : 's1', - \ 'buffer' : 'a.c', - \ 'lnum' : 40}, - \ {'name' : 's1', - \ 'buffer' : 'a.c', - \ 'lnum' : 50} - \ ]) -< -sign_undefine([{name}]) *sign_undefine()* -sign_undefine({list}) - Deletes a previously defined sign {name}. This is similar to - the |:sign-undefine| command. If {name} is not supplied, then - deletes all the defined signs. - - The one argument {list} can be used to undefine a list of - signs. Each list item is the name of a sign. - - Returns 0 on success and -1 on failure. For the one argument - {list} call, returns a list of values one for each undefined - sign. - - Examples: > - " Delete a sign named mySign - call sign_undefine("mySign") +sign_ functions are documented here: |sign-functions-details| - " Delete signs 'sign1' and 'sign2' - call sign_undefine(["sign1", "sign2"]) - - " Delete all the signs - call sign_undefine() -< -sign_unplace({group} [, {dict}]) *sign_unplace()* - Remove a previously placed sign in one or more buffers. This - is similar to the |:sign-unplace| command. - - {group} is the sign group name. To use the global sign group, - use an empty string. If {group} is set to '*', then all the - groups including the global group are used. - The signs in {group} are selected based on the entries in - {dict}. The following optional entries in {dict} are - supported: - buffer buffer name or number. See |bufname()|. - id sign identifier - If {dict} is not supplied, then all the signs in {group} are - removed. - - Returns 0 on success and -1 on failure. - - Examples: > - " Remove sign 10 from buffer a.vim - call sign_unplace('', {'buffer' : "a.vim", 'id' : 10}) - - " Remove sign 20 in group 'g1' from buffer 3 - call sign_unplace('g1', {'buffer' : 3, 'id' : 20}) - - " Remove all the signs in group 'g2' from buffer 10 - call sign_unplace('g2', {'buffer' : 10}) - - " Remove sign 30 in group 'g3' from all the buffers - call sign_unplace('g3', {'id' : 30}) - - " Remove all the signs placed in buffer 5 - call sign_unplace('*', {'buffer' : 5}) - - " Remove the signs in group 'g4' from all the buffers - call sign_unplace('g4') - - " Remove sign 40 from all the buffers - call sign_unplace('*', {'id' : 40}) - - " Remove all the placed signs from all the buffers - call sign_unplace('*') -< -sign_unplacelist({list}) *sign_unplacelist()* - Remove previously placed signs from one or more buffers. This - is similar to the |sign_unplace()| function. - - The {list} argument specifies the List of signs to remove. - Each list item is a dict with the following sign attributes: - buffer buffer name or number. For the accepted - values, see |bufname()|. If not specified, - then the specified sign is removed from all - the buffers. - group sign group name. If not specified or set to an - empty string, then the global sign group is - used. If set to '*', then all the groups - including the global group are used. - id sign identifier. If not specified, then all - the signs in the specified group are removed. - - Returns a List where an entry is set to 0 if the corresponding - sign was successfully removed or -1 on failure. - - Example: > - " Remove sign with id 10 from buffer a.vim and sign - " with id 20 from buffer b.vim - call sign_unplace([{'id' : 10, 'buffer' : "a.vim"}, - \ {'id' : 20, 'buffer' : 'b.vim'}]) -< simplify({filename}) *simplify()* Simplify the file name as much as possible without changing the meaning. Shortcuts (on MS-Windows) or symbolic links (on Unix) are not resolved. If the first path component in {filename} designates the current directory, this will be valid for the result as well. A trailing path separator is - not removed either. + not removed either. On Unix "//path" is unchanged, but + "///path" is simplified to "/path" (this follows the Posix + standard). Example: > simplify("./dir/.././/file/") == "./file/" < Note: The combination "dir/.." is only removed if "dir" is @@ -8359,7 +8003,7 @@ sort({list} [, {func} [, {dict}]]) *sort()* *E702* ignored. When {func} is given and it is 'n' then all items will be - sorted numerical (Implementation detail: This uses the + sorted numerical (Implementation detail: this uses the strtod() function to parse numbers, Strings, Lists, Dicts and Funcrefs will be considered as being 0). @@ -8552,7 +8196,7 @@ str2list({expr} [, {utf8}]) *str2list()* < |list2str()| does the opposite. When {utf8} is omitted or zero, the current 'encoding' is used. - With {utf8} set to 1, always treat the String as utf-8 + With {utf8} set to TRUE, always treat the String as utf-8 characters. With utf-8 composing characters are handled properly: > str2list("aÌ") returns [97, 769] @@ -8596,7 +8240,8 @@ strchars({expr} [, {skipcc}]) *strchars()* < strcharpart({src}, {start} [, {len}]) *strcharpart()* Like |strpart()| but using character index and length instead - of byte index and length. + of byte index and length. Composing characters are counted + separately. When a character index is used where a character does not exist it is assumed to be one character. For example: > strcharpart('abc', -1, 2) @@ -8860,7 +8505,7 @@ swapname({expr}) *swapname()* The result is the swap file path of the buffer {expr}. For the use of {expr}, see |bufname()| above. If buffer {expr} is the current buffer, the result is equal to - |:swapname| (unless no swap file). + |:swapname| (unless there is no swap file). If buffer {expr} has no swap file, returns an empty string. synID({lnum}, {col}, {trans}) *synID()* @@ -8929,7 +8574,7 @@ synIDtrans({synID}) *synIDtrans()* ":highlight link" are followed. synconcealed({lnum}, {col}) *synconcealed()* - The result is a List with currently three items: + The result is a |List| with currently three items: 1. The first item in the list is 0 if the character at the position {lnum} and {col} is not part of a concealable region, 1 if it is. @@ -9033,6 +8678,10 @@ systemlist({cmd} [, {input} [, {keepempty}]]) *systemlist()* unless {keepempty} is non-zero. Note that on MS-Windows you may get trailing CR characters. + To see the difference between "echo hello" and "echo -n hello" + use |system()| and |split()|: > + echo split(system('echo hello'), '\n', 1) +< Returns an empty string on error. @@ -9081,7 +8730,7 @@ tagfiles() Returns a |List| with the file names used to search for tags taglist({expr} [, {filename}]) *taglist()* - Returns a list of tags matching the regular expression {expr}. + Returns a |List| of tags matching the regular expression {expr}. If {filename} is passed it is used to prioritize the results in the same way that |:tselect| does. See |tag-priority|. @@ -9146,11 +8795,7 @@ termopen({cmd}[, {opts}]) *termopen()* See |terminal| for more information. -test_garbagecollect_now() *test_garbagecollect_now()* - Like |garbagecollect()|, but executed right away. This must - only be called directly to avoid any structure to exist - internally, and |v:testing| must have been set before calling - any function. +test_ functions are documented here: |test-functions-details| tan({expr}) *tan()* Return the tangent of {expr}, measured in radians, as a |Float| @@ -9182,7 +8827,7 @@ timer_info([{id}]) returned. When {id} is omitted information about all timers is returned. - For each timer the information is stored in a Dictionary with + For each timer the information is stored in a |Dictionary| with these items: "id" the timer ID "time" time the timer was started with @@ -9359,7 +9004,7 @@ undotree() *undotree()* undo blocks. The first item in the "entries" list is the oldest undo item. - Each List item is a Dictionary with these items: + Each List item is a |Dictionary| with these items: "seq" Undo sequence number. Same as what appears in |:undolist|. "time" Timestamp when the change happened. Use @@ -9479,7 +9124,7 @@ wildmenumode() *wildmenumode()* win_findbuf({bufnr}) *win_findbuf()* - Returns a list with |window-ID|s for windows that contain + Returns a |List| with |window-ID|s for windows that contain buffer {bufnr}. When there is none the list is empty. win_getid([{win} [, {tab}]]) *win_getid()* @@ -9512,7 +9157,7 @@ win_gettype([{nr}]) *win_gettype()* win_gotoid({expr}) *win_gotoid()* Go to window with ID {expr}. This may also change the current tabpage. - Return 1 if successful, 0 if the window cannot be found. + Return TRUE if successful, FALSE if the window cannot be found. win_id2tabwin({expr} *win_id2tabwin()* Return a list with the tab number and window number of window @@ -9527,21 +9172,23 @@ win_screenpos({nr}) *win_screenpos()* Return the screen position of window {nr} as a list with two numbers: [row, col]. The first window always has position [1, 1], unless there is a tabline, then it is [2, 1]. - {nr} can be the window number or the |window-ID|. + {nr} can be the window number or the |window-ID|. Use zero + for the current window. Return [0, 0] if the window cannot be found in the current tabpage. win_splitmove({nr}, {target} [, {options}]) *win_splitmove()* - Move the window {nr} to a new split of the window {target}. + Move the window {nr} to a new split of the window {target}. This is similar to moving to {target}, creating a new window using |:split| but having the same contents as window {nr}, and then closing {nr}. Both {nr} and {target} can be window numbers or |window-ID|s. + Both must be in the current tab page. Returns zero for success, non-zero for failure. - {options} is a Dictionary with the following optional entries: + {options} is a |Dictionary| with the following optional entries: "vertical" When TRUE, the split is created vertically, like with |:vsplit|. "rightbelow" When TRUE, the split is made below or to the @@ -9605,11 +9252,12 @@ winlayout([{tabnr}]) *winlayout()* " Two horizontally split windows :echo winlayout() ['col', [['leaf', 1000], ['leaf', 1001]]] - " Three horizontally split windows, with two - " vertically split windows in the middle window + " The second tab page, with three horizontally split + " windows, with two vertically split windows in the + " middle window :echo winlayout(2) - ['col', [['leaf', 1002], ['row', ['leaf', 1003], - ['leaf', 1001]]], ['leaf', 1000]] + ['col', [['leaf', 1002], ['row', [['leaf', 1003], + ['leaf', 1001]]], ['leaf', 1000]]] < *winline()* winline() The result is a Number, which is the screen line of the cursor @@ -9621,6 +9269,7 @@ winline() The result is a Number, which is the screen line of the cursor *winnr()* winnr([{arg}]) The result is a Number, which is the number of the current window. The top window has number 1. + Returns zero for a popup window. The optional argument {arg} supports the following values: $ the number of the last window (the window @@ -9690,7 +9339,8 @@ winsaveview() Returns a |Dictionary| that contains information to restore curswant column for vertical movement topline first line in the window topfill filler lines, only in diff mode - leftcol first column displayed + leftcol first column displayed; only used when + 'wrap' is off skipcol columns skipped Note that no option values are saved. @@ -9995,8 +9645,8 @@ It is allowed to define another function inside a function body. You can provide default values for positional named arguments. This makes them optional for function calls. When a positional argument is not specified at a call, the default expression is used to initialize it. -This only works for functions declared with |function|, not for lambda -expressions |expr-lambda|. +This only works for functions declared with |function|, not for +lambda expressions |expr-lambda|. Example: > function Something(key, value = 10) @@ -10025,9 +9675,10 @@ Example that does NOT work: > :function NoGood(first = a:second, second = 10) :endfunction < -When not using "...", the number of arguments in a function call must be equal -to the number of mandatory named arguments. When using "...", the number of -arguments may be larger. +When not using "...", the number of arguments in a function call must be at +least equal to the number of mandatory named arguments. When using "...", the +number of arguments may be larger than the total of mandatory and optional +arguments. *local-variables* Inside a function local variables can be used. These will disappear when the @@ -10179,8 +9830,9 @@ be used to pass settings to the autoload script before it's loaded: > Note that when you make a mistake and call a function that is supposed to be defined in an autoload script, but the script doesn't actually define the -function, the script will be sourced every time you try to call the function. -And you will get an error message every time. +function, you will get an error message for the missing function. If you fix +the autoload script it won't be automatically loaded again. Either restart +Vim or manually source the script. Also note that if you have two script files, and one calls a function in the other and vice versa, before the used function is defined, it won't work. @@ -10357,7 +10009,7 @@ This does NOT work: > Like above, but append/add/subtract the value for each |List| item. -:let [{name}, ..., ; {lastname}] = {expr1} +:let [{name}, ..., ; {lastname}] = {expr1} *E452* Like |:let-unpack| above, but the |List| may have more items than there are names. A list of the remaining items is assigned to {lastname}. If there are no @@ -10373,20 +10025,22 @@ This does NOT work: > *:let=<<* *:let-heredoc* *E990* *E991* *E172* *E221* -:let {var-name} =<< [trim] {marker} +:let {var-name} =<< [trim] {endmarker} text... text... -{marker} - Set internal variable {var-name} to a List containing - the lines of text bounded by the string {marker}. - {marker} cannot start with a lower case character. - The last line should end only with the {marker} string - without any other character. Watch out for white - space after {marker}! +{endmarker} + Set internal variable {var-name} to a |List| + containing the lines of text bounded by the string + {endmarker}. + {endmarker} cannot start with a lower case character. + The last line should end only with the {endmarker} + string without any other character. Watch out for + white space after {endmarker}! Without "trim" any white space characters in the lines of text are preserved. If "trim" is specified before - {marker}, then indentation is stripped so you can do: > + {endmarker}, then indentation is stripped so you can + do: > let text =<< trim END if ok echo 'done' @@ -10400,23 +10054,31 @@ text... non-empty text line is stripped from the input lines. All leading indentation exactly matching the leading indentation before `let` is stripped from the line - containing {marker}. Note that the difference between - space and tab matters here. + containing {endmarker}. Note that the difference + between space and tab matters here. If {var-name} didn't exist yet, it is created. Cannot be followed by another command, but can be followed by a comment. + To avoid line continuation to be applied, consider + adding 'C' to 'cpoptions': > + set cpo+=C + let var =<< END + \ leading backslash + END + set cpo-=C +< Examples: > let var1 =<< END - Sample text 1 - Sample text 2 - Sample text 3 - END + Sample text 1 + Sample text 2 + Sample text 3 + END let data =<< trim DATA - 1 2 3 4 - 5 6 7 8 + 1 2 3 4 + 5 6 7 8 DATA < *E121* @@ -10496,8 +10158,8 @@ text... it can no longer be changed (until it is unlocked). A locked variable can be deleted: > :lockvar v - :let v = 'asdf' " fails! - :unlet v + :let v = 'asdf' " fails! + :unlet v " works < *E741* *E940* If you try to change a locked variable you get an error message: "E741: Value is locked: {name}". @@ -10541,21 +10203,6 @@ text... Unlock the internal variable {name}. Does the opposite of |:lockvar|. - *:eval* -:eval {expr} Evaluate {expr} and discard the result. Example: > - :eval append(Filter(Getlist()), '$') - -< The expression is supposed to have a side effect, - since the resulting value is not used. In the example - the `append()` call appends the List with text to the - buffer. This is similar to `:call` but works with any - expression. - - The command can be shortened to `:ev` or `:eva`, but - these are hard to recognize and therefore not to be - used. - - :if {expr1} *:if* *:end* *:endif* *:en* *E171* *E579* *E580* :en[dif] Execute the commands until the next matching ":else" or ":endif" if {expr1} evaluates to non-zero. @@ -10673,11 +10320,11 @@ text... ":endtry" is reached thereafter, the next (dynamically) surrounding ":try" is checked for a corresponding ":finally" etc. Then the script - processing is terminated. (Whether a function - definition has an "abort" argument does not matter.) + processing is terminated. Whether a function + definition has an "abort" argument does not matter. Example: > - :try | edit too much | finally | echo "cleanup" | endtry - :echo "impossible" " not reached, script terminated above + try | call Unknown() | finally | echomsg "cleanup" | endtry + echomsg "not reached" < Moreover, an error or interrupt (dynamically) inside ":try" and ":endtry" is converted to an exception. It @@ -10694,8 +10341,8 @@ text... error exception is not caught, always beginning with the error number. Examples: > - :try | sleep 100 | catch /^Vim:Interrupt$/ | endtry - :try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry + try | sleep 100 | catch /^Vim:Interrupt$/ | endtry + try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry < *:cat* *:catch* *E603* *E604* *E605* :cat[ch] /{pattern}/ The following commands until the next |:catch|, @@ -10849,18 +10496,36 @@ text... And to get a beep: > :exe "normal \<Esc>" < + *:eval* +:eval {expr} Evaluate {expr} and discard the result. Example: > + :eval append(Filter(Getlist()), '$') + +< The expression is supposed to have a side effect, + since the resulting value is not used. In the example + the `append()` call appends the List with text to the + buffer. This is similar to `:call` but works with any + expression. + + The command can be shortened to `:ev` or `:eva`, but + these are hard to recognize and therefore not to be + used. + + The command cannot be followed by "|" and another + command, since "|" is seen as part of the expression. + + *:exe* *:execute* :exe[cute] {expr1} .. Executes the string that results from the evaluation of {expr1} as an Ex command. Multiple arguments are concatenated, with a space in - between. To avoid the extra space use the "." + between. To avoid the extra space use the ".." operator to concatenate strings into one argument. {expr1} is used as the processed command, command line editing keys are not recognized. Cannot be followed by a comment. Examples: > :execute "buffer" nextbuf - :execute "normal" count . "w" + :execute "normal" count .. "w" < ":execute" can be used to append a command to commands that don't accept a '|'. Example: > @@ -10876,8 +10541,8 @@ text... file names. The |fnameescape()| function can be used for Vim commands, |shellescape()| for |:!| commands. Examples: > - :execute "e " . fnameescape(filename) - :execute "!ls " . shellescape(filename, 1) + :execute "e " .. fnameescape(filename) + :execute "!ls " .. shellescape(filename, 1) < Note: The executed string may be any command-line, but starting or ending "if", "while" and "for" does not diff --git a/runtime/doc/filetype.txt b/runtime/doc/filetype.txt index 1fce37c594..36ed6bbac1 100644 --- a/runtime/doc/filetype.txt +++ b/runtime/doc/filetype.txt @@ -136,6 +136,7 @@ can be used to overrule the filetype used for certain extensions: *.w g:filetype_w |ft-cweb-syntax| *.i g:filetype_i |ft-progress-syntax| *.p g:filetype_p |ft-pascal-syntax| + *.pp g:filetype_pp |ft-pascal-syntax| *.sh g:bash_is_sh |ft-sh-syntax| *.tex g:tex_flavor |ft-tex-plugin| @@ -263,13 +264,13 @@ all loaded. For example, if this command: > produces this output: - runtimepath=/etc/vim,~/.config/nvim,/usr/local/share/vim/vim60 ~ + runtimepath=/etc/vim,~/.config/nvim,/usr/local/share/vim/vim82 ~ then Vim will load all plugins in these directories and below: /etc/vim/plugin/ ~ ~/.config/nvim/plugin/ ~ - /usr/local/share/vim/vim60/plugin/ ~ + /usr/local/share/vim/vim82/plugin/ ~ Note that the last one is the value of $VIMRUNTIME which has been expanded. @@ -353,6 +354,13 @@ ways to change this: 3. Docs for the default filetype plugins. *ftplugin-docs* +AWK *ft-awk-plugin* + +Support for features specific to GNU Awk, like @include, can be enabled by +setting: > + let g:awk_is_gawk = 1 + + CHANGELOG *ft-changelog-plugin* Allows for easy entrance of Changelog entries in Changelog files. There are @@ -568,6 +576,13 @@ So `groff`'s pre-formatting output will be the same as with `g:man_hardwrap=0` i To disable bold highlighting: > :highlight link manBold Normal + +MARKDOWN *ft-markdown-plugin* + +To enable folding use this: > + let g:markdown_folding = 1 +< + PDF *ft-pdf-plugin* Two maps, <C-]> and <C-T>, are provided to simulate a tag stack for navigating diff --git a/runtime/doc/ft_ps1.txt b/runtime/doc/ft_ps1.txt new file mode 100644 index 0000000000..df1480b929 --- /dev/null +++ b/runtime/doc/ft_ps1.txt @@ -0,0 +1,64 @@ +*ps1.txt* A Windows PowerShell syntax plugin for Vim + +Author: Peter Provost <https://www.github.com/PProvost> +License: Apache 2.0 +URL: https://github.com/PProvost/vim-ps1 + +INTRODUCTION *ps1-syntax* + +This plugin provides Vim syntax, indent and filetype detection for Windows +PowerShell scripts, modules, and XML configuration files. + + +ABOUT *ps1-about* + +Grab the latest version or report a bug on GitHub: + +https://github.com/PProvost/vim-ps1 + + +FOLDING *ps1-folding* + +The ps1 syntax file provides syntax folding (see |:syn-fold|) for script blocks +and digital signatures in scripts. + +When 'foldmethod' is set to "syntax" then function script blocks will be +folded unless you use the following in your .vimrc or before opening a script: > + + :let g:ps1_nofold_blocks = 1 +< +Digital signatures in scripts will also be folded unless you use: > + + :let g:ps1_nofold_sig = 1 +< +Note: syntax folding might slow down syntax highlighting significantly, +especially for large files. + + +COMPILER *ps1-compiler* + +The powershell `:compiler` script configures |:make| to execute the script in +PowerShell. + +It tries to pick a smart default PowerShell command: `pwsh` if available and +`powershell` otherwise, but you can customize the command: > + + :let g:ps1_makeprg_cmd = '/path/to/pwsh' +< +To configure whether to show the exception type information: > + + :let g:ps1_efm_show_error_categories = 1 +< + +KEYWORD LOOKUP *ps1-keyword* + +To look up keywords using PowerShell's Get-Help, press the |K| key. For more +convenient paging, the pager `less` should be installed, which is included in +many Linux distributions and in macOS. + +Many other distributions are available for Windows like +https://chocolatey.org/packages/less/. Make sure `less` is in a directory +listed in the `PATH` environment variable, which chocolatey above does. + +------------------------------------------------------------------------------ + vim:ft=help: diff --git a/runtime/doc/ft_raku.txt b/runtime/doc/ft_raku.txt new file mode 100644 index 0000000000..26ada8a140 --- /dev/null +++ b/runtime/doc/ft_raku.txt @@ -0,0 +1,126 @@ +*vim-raku.txt* The Raku programming language filetype + + *vim-raku* + +Vim-raku provides syntax highlighting, indentation, and other support for +editing Raku programs. + +1. Using Unicode in your Raku files |raku-unicode| + +============================================================================== +1. Using Unicode in your Raku files *raku-unicode* + +Defining new operators using Unicode symbols is a good way to make your +Raku program easy to read. See: +https://perl6advent.wordpress.com/2012/12/18/day-18-formulas-resistance-is-futile/ + +While Raku does define ASCII alternatives for some common operators (see +https://docs.raku.org/language/unicode_ascii), using the full range of +Unicode operators is highly desirable. Your operating system provides input +facilities, but using the features built in to Vim may be preferable. + +The natural way to produce these symbols in Vim is to use digraph shortcuts +(:help |digraphs-use|). Many of them are defined; type `:digraphs` to get +the list. A convenient way to read the list of digraphs is to save them in a +file. From the shell: > + vim +'redir >/tmp/vim-digraphs-listing.txt' +digraphs +'redir END' +q + +Some of them are available with standard Vim digraphs: + << « /0 ∅ !< ≮ ~ + >> » Ob ∘ !> ≯ ~ + ., … 00 ∞ (C ⊂ ~ + (U ∩ -: ÷ )C ⊃ ~ + )U ∪ (_ ⊆ >= ≥ ~ + ?= ≅ )_ ⊇ =< ≤ ~ + (- ∈ ?= ≅ != ≠~ + -) ∋ ?- ≃ ~ + +The Greek alphabet is available with '*' followed by a similar Latin symbol: + *p Ï€ ~ + *t Ï„ ~ + *X × ~ + +Numbers, subscripts and superscripts are available with 's' and 'S': + 0s â‚€ 0S â° ~ + 1s â‚ 1S ¹ ~ + 2s â‚‚ 9S â¹ ~ + +But some don´t come defined by default. Those are digraph definitions you can +add in your ~/.vimrc file. > + exec 'digraph \\ '.char2nr('∖') + exec 'digraph \< '.char2nr('≼') + exec 'digraph \> '.char2nr('≽') + exec 'digraph (L '.char2nr('⊈') + exec 'digraph )L '.char2nr('⊉') + exec 'digraph (/ '.char2nr('⊄') + exec 'digraph )/ '.char2nr('⊅') + exec 'digraph )/ '.char2nr('⊅') + exec 'digraph U+ '.char2nr('⊎') + exec 'digraph 0- '.char2nr('⊖') + " Euler's constant + exec 'digraph ne '.char2nr('ð‘’') + " Raku's atomic operations marker + exec 'digraph @@ '.char2nr('âš›') + +Alternatively, you can write Insert mode abbreviations that convert ASCII- +based operators into their single-character Unicode equivalent. > + iabbrev <buffer> !(<) ⊄ + iabbrev <buffer> !(<=) ⊈ + iabbrev <buffer> !(>) ⊅ + iabbrev <buffer> !(>=) ⊉ + iabbrev <buffer> !(cont) ∌ + iabbrev <buffer> !(elem) ∉ + iabbrev <buffer> != ≠+ iabbrev <buffer> (&) ∩ + iabbrev <buffer> (+) ⊎ + iabbrev <buffer> (-) ∖ + iabbrev <buffer> (.) ⊠+ iabbrev <buffer> (<) ⊂ + iabbrev <buffer> (<+) ≼ + iabbrev <buffer> (<=) ⊆ + iabbrev <buffer> (>) ⊃ + iabbrev <buffer> (>+) ≽ + iabbrev <buffer> (>=) ⊇ + iabbrev <buffer> (\|) ∪ + iabbrev <buffer> (^) ⊖ + iabbrev <buffer> (atomic) âš› + iabbrev <buffer> (cont) ∋ + iabbrev <buffer> (elem) ∈ + iabbrev <buffer> * × + iabbrev <buffer> **0 â° + iabbrev <buffer> **1 ¹ + iabbrev <buffer> **2 ² + iabbrev <buffer> **3 ³ + iabbrev <buffer> **4 â´ + iabbrev <buffer> **5 âµ + iabbrev <buffer> **6 â¶ + iabbrev <buffer> **7 â· + iabbrev <buffer> **8 ⸠+ iabbrev <buffer> **9 â¹ + iabbrev <buffer> ... … + iabbrev <buffer> / ÷ + iabbrev <buffer> << « + iabbrev <buffer> <<[=]<< «=« + iabbrev <buffer> <<[=]>> «=» + iabbrev <buffer> <= ≤ + iabbrev <buffer> =~= ≅ + iabbrev <buffer> >= ≥ + iabbrev <buffer> >> » + iabbrev <buffer> >>[=]<< »=« + iabbrev <buffer> >>[=]>> »=» + iabbrev <buffer> Inf ∞ + iabbrev <buffer> atomic-add-fetch âš›+= + iabbrev <buffer> atomic-assign âš›= + iabbrev <buffer> atomic-fetch âš› + iabbrev <buffer> atomic-dec-fetch --âš› + iabbrev <buffer> atomic-fetch-dec âš›-- + iabbrev <buffer> atomic-fetch-inc âš›++ + iabbrev <buffer> atomic-inc-fetch ++âš› + iabbrev <buffer> atomic-sub-fetch ⚛−= + iabbrev <buffer> e ð‘’ + iabbrev <buffer> o ∘ + iabbrev <buffer> pi Ï€ + iabbrev <buffer> set() ∅ + iabbrev <buffer> tau Ï„ +< + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/ft_sql.txt b/runtime/doc/ft_sql.txt index 324e2e44af..f38c8edbf3 100644 --- a/runtime/doc/ft_sql.txt +++ b/runtime/doc/ft_sql.txt @@ -308,7 +308,7 @@ can create any of the following: > ~/.config/nvim/indent/sqlite.vim No changes are necessary to the SQLSetType function. It will automatically -pickup the new SQL files and load them when you issue the SQLSetType command. +pick up the new SQL files and load them when you issue the SQLSetType command. ============================================================================== @@ -338,8 +338,8 @@ The defaults static maps are: > imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O> imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O> -The use of "<C-C>" can be user chosen by using the following in your -|init.vim| as it may not work properly on all platforms: > +The use of "<C-C>" can be user chosen by using the following in your |init.vim| +as it may not work properly on all platforms: > let g:ftplugin_sql_omni_key = '<C-C>' > The static maps (which are based on the syntax highlight groups) follow this @@ -515,10 +515,10 @@ beginning with those characters. > 4.3.2 Column Completion: *sql-completion-columns* The SQL completion plugin can also display a list of columns for particular -tables. The column completion is trigger via <C-C>c. +tables. The column completion is triggered via <C-C>c. NOTE: The following example uses <Right> to trigger a column list while - the popup window is active. + the popup window is active. Example of using column completion: - Press <C-C>t again to display the list of tables. @@ -723,7 +723,7 @@ your platform (often a case on *nix) you define the following variable in your |init.vim|: > let g:omni_sql_no_default_maps = 1 -Do no edit ftplugin/sql.vim directly! If you change this file your changes +Do not edit ftplugin/sql.vim directly! If you change this file your changes will be over written on future updates. Vim has a special directory structure which allows you to make customizations without changing the files that are included with the Vim distribution. If you wish to customize the maps diff --git a/runtime/doc/gui.txt b/runtime/doc/gui.txt index 0df776010b..0f1fa2b7a7 100644 --- a/runtime/doc/gui.txt +++ b/runtime/doc/gui.txt @@ -180,19 +180,12 @@ This does require the |+menu| feature enabled at compile time. Creating New Menus *creating-menus* *:me* *:menu* *:noreme* *:noremenu* - *:am* *:amenu* *:an* *:anoremenu* - *:nme* *:nmenu* *:nnoreme* *:nnoremenu* - *:ome* *:omenu* *:onoreme* *:onoremenu* - *:vme* *:vmenu* *:vnoreme* *:vnoremenu* - *:xme* *:xmenu* *:xnoreme* *:xnoremenu* - *:sme* *:smenu* *:snoreme* *:snoremenu* - *:ime* *:imenu* *:inoreme* *:inoremenu* - *:cme* *:cmenu* *:cnoreme* *:cnoremenu* *E330* *E327* *E331* *E336* *E333* *E328* *E329* *E337* *E792* To create a new menu item, use the ":menu" commands. They are mostly like -the ":map" set of commands but the first argument is a menu item name, given -as a path of menus and submenus with a '.' between them, e.g.: > +the ":map" set of commands (see |map-modes|), but the first argument is a menu +item name, given as a path of menus and submenus with a '.' between them, +e.g.: > :menu File.Save :w<CR> :inoremenu File.Save <C-O>:w<CR> @@ -221,6 +214,7 @@ With the shortcut "F" (while keeping the <Alt> key pressed), and then "O", this menu can be used. The second part is shown as "Open :e". The ":e" is right aligned, and the "O" is underlined, to indicate it is the shortcut. + *:am* *:amenu* *:an* *:anoremenu* The ":amenu" command can be used to define menu entries for all modes at once. To make the command work correctly, a character is automatically inserted for some modes: @@ -253,9 +247,38 @@ expression register: > :amenu Insert.foobar "='foobar'<CR>P +The special text <Cmd> begins a "command menu", it executes the command +directly without changing modes. Where you might use ":...<CR>" you can +instead use "<Cmd>...<CR>". See |<Cmd>| for more info. Example: > + anoremenu File.Next <Cmd>next<CR> + Note that <Esc> in Cmdline mode executes the command, like in a mapping. This is Vi compatible. Use CTRL-C to quit Cmdline mode. + *:nme* *:nmenu* *:nnoreme* *:nnoremenu* *:nunme* *:nunmenu* +Menu commands starting with "n" work in Normal mode. |mapmode-n| + + *:ome* *:omenu* *:onoreme* *:onoremenu* *:ounme* *:ounmenu* +Menu commands starting with "o" work in Operator-pending mode. |mapmode-o| + + *:vme* *:vmenu* *:vnoreme* *:vnoremenu* *:vunme* *:vunmenu* +Menu commands starting with "v" work in Visual mode. |mapmode-v| + + *:xme* *:xmenu* *:xnoreme* *:xnoremenu* *:xunme* *:xunmenu* +Menu commands starting with "x" work in Visual and Select mode. |mapmode-x| + + *:sme* *:smenu* *:snoreme* *:snoremenu* *:sunme* *:sunmenu* +Menu commands starting with "s" work in Select mode. |mapmode-s| + + *:ime* *:imenu* *:inoreme* *:inoremenu* *:iunme* *:iunmenu* +Menu commands starting with "i" work in Insert mode. |mapmode-i| + + *:cme* *:cmenu* *:cnoreme* *:cnoremenu* *:cunme* *:cunmenu* +Menu commands starting with "c" work in Cmdline mode. |mapmode-c| + + *:tlm* *:tlmenu* *:tln* *:tlnoremenu* *:tlu* *:tlunmenu* +Menu commands starting with "tl" work in Terminal mode. |mapmode-t| + *:menu-<silent>* *:menu-silent* To define a menu which will not be echoed on the command line, add "<silent>" as the first argument. Example: > @@ -431,6 +454,8 @@ Special characters in the list, just before the rhs: * The menu was defined with "nore" to disallow remapping. & The menu was defined with "<script>" to allow remapping script-local mappings only. +s The menu was defined with "<silent>" to avoid showing what it is + mapped to when triggered. - The menu was disabled. Note that hitting <Tab> while entering a menu name after a menu command may @@ -461,13 +486,6 @@ Deleting Menus *delete-menus* *:unme* *:unmenu* *:aun* *:aunmenu* - *:nunme* *:nunmenu* - *:ounme* *:ounmenu* - *:vunme* *:vunmenu* - *:xunme* *:xunmenu* - *:sunme* *:sunmenu* - *:iunme* *:iunmenu* - *:cunme* *:cunmenu* To delete a menu item or a whole submenu, use the unmenu commands, which are analogous to the unmap commands. Eg: > :unmenu! Edit.Paste diff --git a/runtime/doc/help.txt b/runtime/doc/help.txt index 203699435b..8b096ff28b 100644 --- a/runtime/doc/help.txt +++ b/runtime/doc/help.txt @@ -30,7 +30,7 @@ Get specific help: It is possible to go directly to whatever you want help help entries for "word". Or use ":helpgrep word". |:helpgrep| - Getting started: Do the Vim tutor, a 20 minute interactive training for the + Getting started: Do the Vim tutor, a 30-minute interactive course for the basic commands, see |vimtutor|. Read the user manual from start to end: |usr_01.txt| @@ -40,7 +40,7 @@ through the help of many others. See |credits|. *doc-file-list* *Q_ct* BASIC: |quickref| Overview of the most common commands you will use -|tutor| 20 minutes training course for beginners +|tutor| 30-minute interactive course for beginners |copying| About copyrights |iccf| Helping poor children in Uganda |sponsor| Sponsor Vim development, become a registered Vim user @@ -132,6 +132,7 @@ Advanced editing ~ |lua.txt| Lua API Special issues ~ +|testing.txt| testing Vim and Vim scripts |print.txt| printing |remote.txt| using Vim as a server or client @@ -147,7 +148,7 @@ Programming language support ~ Language support ~ |digraph.txt| list of available digraphs -|mbyte.txt| multi-byte text support +|mbyte.txt| multibyte text support |mlang.txt| non-English language support |rileft.txt| right-to-left editing mode |arabic.txt| Arabic language support and editing diff --git a/runtime/doc/helphelp.txt b/runtime/doc/helphelp.txt index ba6dd02a29..7643d84017 100644 --- a/runtime/doc/helphelp.txt +++ b/runtime/doc/helphelp.txt @@ -92,9 +92,9 @@ Help on help files *helphelp* :help k| only < Note that a space before the '|' is seen as part of the ":help" argument. - You can also use <LF> or <CR> to separate the help + You can also use <NL> or <CR> to separate the help command from a following command. You need to type - CTRL-V first to insert the <LF> or <CR>. Example: > + CTRL-V first to insert the <NL> or <CR>. Example: > :help so<C-V><CR>only < @@ -103,7 +103,11 @@ Help on help files *helphelp* current file. See |help-translated|. *:helpc* *:helpclose* -:helpc[lose] Close one help window, if there is one. +:helpc[lose] Close one help window, if there is one. + Vim will try to restore the window layout (including + cursor position) to the same layout it was before + opening the help window initially. This might cause + triggering several autocommands. *:helpg* *:helpgrep* :helpg[rep] {pattern}[@xx] @@ -155,9 +159,31 @@ When no argument is given to |:help| the file given with the 'helpfile' option will be opened. Otherwise the specified tag is searched for in all "doc/tags" files in the directories specified in the 'runtimepath' option. +If you would like to open the help in the current window, see this tip: +|help-curwin|. + The initial height of the help window can be set with the 'helpheight' option (default 20). +When the help buffer is created, several local options are set to make sure +the help text is displayed as it was intended: + 'iskeyword' nearly all ASCII chars except ' ', '*', '"' and '|' + 'foldmethod' "manual" + 'tabstop' 8 + 'arabic' off + 'binary' off + 'buflisted' off + 'cursorbind' off + 'diff' off + 'foldenable' off + 'list' off + 'modifiable' off + 'number' off + 'relativenumber' off + 'rightleft' off + 'scrollbind' off + 'spell' off + Jump to specific subjects by using tags. This can be done in two ways: - Use the "CTRL-]" command while standing on the name of a command or option. This only works when the tag is a keyword. "<C-Leftmouse>" and @@ -364,4 +390,17 @@ highlighting. So do these: You can find the details in $VIMRUNTIME/syntax/help.vim + *inclusion* +Vim is for everybody, no matter race, gender or anything. Some people make a +big deal about using "he" or "his" when referring to the user, thinking it +means we assume the user is male. That is not the case, it's just a habit of +writing help text, which quite often is many years old. Also, a lot of the +text is written by contributors for whom English is not their first language. +We do not make any assumptions about the gender of the user, no matter how the +text is phrased. Some people have suggested using "they", but that is not +regular English. We do not want to spend much time on this discussion. The +goal is that the reader understands how Vim works, the exact wording is +secondary. + + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt index f1d07ddb20..ddcf220844 100644 --- a/runtime/doc/if_perl.txt +++ b/runtime/doc/if_perl.txt @@ -22,14 +22,15 @@ See |provider-perl| for more information. :[range]perl << [endmarker] {script} {endmarker} - Execute perl script {script}. Useful for including - perl code in Vim scripts. Requires perl, see - |script-here|. + Execute perl script {script}. + The {endmarker} after {script} must NOT be preceded by + any white space. -The {endmarker} below the {script} must NOT be preceded by any white space. + If [endmarker] is omitted, it defaults to a dot '.' + like for the |:append| and |:insert| commands. -If [endmarker] is omitted from after the "<<", a dot '.' must be used after -{script}, like for the |:append| and |:insert| commands. + Useful for including perl code in Vim scripts. + Requires perl, see |script-here|. Example: > function! MyVimMethod() diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt index ed3bdcf277..dc46fa515a 100644 --- a/runtime/doc/if_pyth.txt +++ b/runtime/doc/if_pyth.txt @@ -189,20 +189,20 @@ vim.eval(str) *python-eval* # a number. vim.strwidth(str) *python-strwidth* - Like |strwidth()|: returns number of display cells str occupies, tab + Like |strwidth()|: returns number of display cells str occupies, tab is counted as one cell. vim.foreach_rtp(callable) *python-foreach_rtp* - Call the given callable for each path in 'runtimepath' until either - callable returns something but None, the exception is raised or there - are no longer paths. If stopped in case callable returned non-None, + Call the given callable for each path in 'runtimepath' until either + callable returns something but None, the exception is raised or there + are no longer paths. If stopped in case callable returned non-None, vim.foreach_rtp function returns the value returned by callable. vim.chdir(*args, **kwargs) *python-chdir* vim.fchdir(*args, **kwargs) *python-fchdir* Run os.chdir or os.fchdir, then all appropriate vim stuff. - Note: you should not use these functions directly, use os.chdir and - os.fchdir instead. Behavior of vim.fchdir is undefined in case + Note: you should not use these functions directly, use os.chdir and + os.fchdir instead. Behavior of vim.fchdir is undefined in case os.fchdir does not exist. Error object of the "vim" module @@ -237,15 +237,15 @@ vim.windows *python-windows* :py w in vim.windows # Membership test :py n = len(vim.windows) # Number of elements :py for w in vim.windows: # Sequential access -< Note: vim.windows object always accesses current tab page. - |python-tabpage|.windows objects are bound to parent |python-tabpage| - object and always use windows from that tab page (or throw vim.error - in case tab page was deleted). You can keep a reference to both - without keeping a reference to vim module object or |python-tabpage|, +< Note: vim.windows object always accesses current tab page. + |python-tabpage|.windows objects are bound to parent |python-tabpage| + object and always use windows from that tab page (or throw vim.error + in case tab page was deleted). You can keep a reference to both + without keeping a reference to vim module object or |python-tabpage|, they will not lose their properties in this case. vim.tabpages *python-tabpages* - A sequence object providing access to the list of vim tab pages. The + A sequence object providing access to the list of vim tab pages. The object supports the following operations: > :py t = vim.tabpages[i] # Indexing (read-only) :py t in vim.tabpages # Membership test @@ -266,12 +266,12 @@ vim.current *python-current* "current range". A range is a bit like a buffer, but with all access restricted to a subset of lines. See |python-range| for more details. - Note: When assigning to vim.current.{buffer,window,tabpage} it expects - valid |python-buffer|, |python-window| or |python-tabpage| objects - respectively. Assigning triggers normal (with |autocommand|s) - switching to given buffer, window or tab page. It is the only way to - switch UI objects in python: you can't assign to - |python-tabpage|.window attribute. To switch without triggering + Note: When assigning to vim.current.{buffer,window,tabpage} it expects + valid |python-buffer|, |python-window| or |python-tabpage| objects + respectively. Assigning triggers normal (with |autocommand|s) + switching to given buffer, window or tab page. It is the only way to + switch UI objects in python: you can't assign to + |python-tabpage|.window attribute. To switch without triggering autocommands use > py << EOF saved_eventignore = vim.options['eventignore'] @@ -284,11 +284,11 @@ vim.current *python-current* < vim.vars *python-vars* vim.vvars *python-vvars* - Dictionary-like objects holding dictionaries with global (|g:|) and + Dictionary-like objects holding dictionaries with global (|g:|) and vim (|v:|) variables respectively. vim.options *python-options* - Object partly supporting mapping protocol (supports setting and + Object partly supporting mapping protocol (supports setting and getting items) providing a read-write access to global options. Note: unlike |:set| this provides access only to global options. You cannot use this object to obtain or set local options' values or @@ -299,7 +299,7 @@ vim.options *python-options* buffer-local options and |python-window| objects to access to window-local options. - Type of this object is available via "Options" attribute of vim + Type of this object is available via "Options" attribute of vim module. Output from Python *python-output* @@ -320,10 +320,10 @@ Output from Python *python-output* *python2-directory* *python3-directory* *pythonx-directory* Python 'runtimepath' handling *python-special-path* -In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for -the list of paths found in 'runtimepath': with this directory in sys.path and -vim.path_hooks in sys.path_hooks python will try to load module from -{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for +In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for +the list of paths found in 'runtimepath': with this directory in sys.path and +vim.path_hooks in sys.path_hooks python will try to load module from +{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for each {rtp} found in 'runtimepath'. Implementation is similar to the following, but written in C: > @@ -351,8 +351,8 @@ Implementation is similar to the following, but written in C: > fmr = find_module(fullname, path) return load_module(fullname, *fmr) - # It uses vim module itself in place of VimPathFinder class: it does not - # matter for python which object has find_module function attached to as + # It uses vim module itself in place of VimPathFinder class: it does not + # matter for python which object has find_module function attached to as # an attribute. class VimPathFinder(object): @classmethod @@ -375,28 +375,28 @@ Implementation is similar to the following, but written in C: > sys.path_hooks.append(hook) vim.VIM_SPECIAL_PATH *python-VIM_SPECIAL_PATH* - String constant used in conjunction with vim path hook. If path hook - installed by vim is requested to handle anything but path equal to - vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other + String constant used in conjunction with vim path hook. If path hook + installed by vim is requested to handle anything but path equal to + vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other case it uses special loader. - Note: you must not use value of this constant directly, always use + Note: you must not use value of this constant directly, always use vim.VIM_SPECIAL_PATH object. vim.find_module(...) *python-find_module* vim.path_hook(path) *python-path_hook* - Methods or objects used to implement path loading as described above. - You should not be using any of these directly except for vim.path_hook - in case you need to do something with sys.meta_path. It is not - guaranteed that any of the objects will exist in the future vim + Methods or objects used to implement path loading as described above. + You should not be using any of these directly except for vim.path_hook + in case you need to do something with sys.meta_path. It is not + guaranteed that any of the objects will exist in the future vim versions. vim._get_paths *python-_get_paths* - Methods returning a list of paths which will be searched for by path - hook. You should not rely on this method being present in future + Methods returning a list of paths which will be searched for by path + hook. You should not rely on this method being present in future versions, but can use it for debugging. - It returns a list of {rtp}/python2 (or {rtp}/python3) and + It returns a list of {rtp}/python2 (or {rtp}/python3) and {rtp}/pythonx directories for each {rtp} in 'runtimepath'. ============================================================================== @@ -425,21 +425,21 @@ line numbers, which start from 1. This is particularly relevant when dealing with marks (see below) which use vim line numbers. The buffer object attributes are: - b.vars Dictionary-like object used to access + b.vars Dictionary-like object used to access |buffer-variable|s. - b.options Mapping object (supports item getting, setting and - deleting) that provides access to buffer-local options - and buffer-local values of |global-local| options. Use - |python-window|.options if option is window-local, - this object will raise KeyError. If option is - |global-local| and local value is missing getting it + b.options Mapping object (supports item getting, setting and + deleting) that provides access to buffer-local options + and buffer-local values of |global-local| options. Use + |python-window|.options if option is window-local, + this object will raise KeyError. If option is + |global-local| and local value is missing getting it will return None. b.name String, RW. Contains buffer name (full path). - Note: when assigning to b.name |BufFilePre| and + Note: when assigning to b.name |BufFilePre| and |BufFilePost| autocommands are launched. b.number Buffer number. Can be used as |python-buffers| key. Read-only. - b.valid True or False. Buffer object becomes invalid when + b.valid True or False. Buffer object becomes invalid when corresponding buffer is wiped out. The buffer object methods are: @@ -527,16 +527,16 @@ Window attributes are: This is a tuple, (row,col). height (read-write) The window height, in rows width (read-write) The window width, in columns - vars (read-only) The window |w:| variables. Attribute is - unassignable, but you can change window + vars (read-only) The window |w:| variables. Attribute is + unassignable, but you can change window variables this way - options (read-only) The window-local options. Attribute is - unassignable, but you can change window - options this way. Provides access only to - window-local options, for buffer-local use - |python-buffer| and for global ones use - |python-options|. If option is |global-local| - and local value is missing getting it will + options (read-only) The window-local options. Attribute is + unassignable, but you can change window + options this way. Provides access only to + window-local options, for buffer-local use + |python-buffer| and for global ones use + |python-options|. If option is |global-local| + and local value is missing getting it will return None. number (read-only) Window number. The first window has number 1. This is zero in case it cannot be determined @@ -545,7 +545,7 @@ Window attributes are: row, col (read-only) On-screen window position in display cells. First position is zero. tabpage (read-only) Window tab page. - valid (read-write) True or False. Window object becomes invalid + valid (read-write) True or False. Window object becomes invalid when corresponding window is closed. The height attribute is writable only if the screen is split horizontally. @@ -556,21 +556,21 @@ Window object type is available using "Window" attribute of vim module. ============================================================================== Tab page objects *python-tabpage* -Tab page objects represent vim tab pages. You can obtain them in a number of +Tab page objects represent vim tab pages. You can obtain them in a number of ways: - via vim.current.tabpage (|python-current|) - from indexing vim.tabpages (|python-tabpages|) -You can use this object to access tab page windows. They have no methods and +You can use this object to access tab page windows. They have no methods and no sequence or other interfaces. Tab page attributes are: - number The tab page number like the one returned by + number The tab page number like the one returned by |tabpagenr()|. windows Like |python-windows|, but for current tab page. vars The tab page |t:| variables. window Current tabpage window. - valid True or False. Tab page object becomes invalid when + valid True or False. Tab page object becomes invalid when corresponding tab page is closed. TabPage object type is available using "TabPage" attribute of vim module. @@ -578,7 +578,7 @@ TabPage object type is available using "TabPage" attribute of vim module. ============================================================================== pyeval() and py3eval() Vim functions *python-pyeval* -To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| +To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| functions to evaluate Python expressions and pass their values to Vim script. |pyxeval()| is also available. @@ -586,17 +586,28 @@ functions to evaluate Python expressions and pass their values to Vim script. Python 3 *python3* *:py3* *:python3* -The `:py3` and `:python3` commands work similar to `:python`. A simple check -if the `:py3` command is working: > - :py3 print("Hello") +:[range]py3 {stmt} +:[range]py3 << [endmarker] +{script} +{endmarker} -To see what version of Python you have: > - :py3 import sys - :py3 print(sys.version) +:[range]python3 {stmt} +:[range]python3 << [endmarker] +{script} +{endmarker} + The `:py3` and `:python3` commands work similar to `:python`. A + simple check if the `:py3` command is working: > + :py3 print("Hello") +< + To see what version of Python you have: > + :py3 import sys + :py3 print(sys.version) < *:py3file* -The `:py3file` command works similar to `:pyfile`. +:[range]py3f[ile] {file} + The `:py3file` command works similar to `:pyfile`. *:py3do* -The `:py3do` command works similar to `:pydo`. +:[range]py3do {body} + The `:py3do` command works similar to `:pydo`. *E880* Raising SystemExit exception in python isn't endorsed way to quit vim, use: > diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt index c8d2409549..02edd50ae8 100644 --- a/runtime/doc/if_ruby.txt +++ b/runtime/doc/if_ruby.txt @@ -19,14 +19,14 @@ downloading Ruby there. :rub[y] {cmd} Execute Ruby command {cmd}. A command to try it out: > :ruby print "Hello" -:rub[y] << [endpattern] +:rub[y] << [endmarker] {script} -{endpattern} +{endmarker} Execute Ruby script {script}. - The {endpattern} after {script} must NOT be preceded - by any white space. + The {endmarker} after {script} must NOT be preceded by + any white space. - If [endpattern] is omitted, it defaults to a dot '.' + If [endmarker] is omitted, it defaults to a dot '.' like for the |:append| and |:insert| commands. This form of the |:ruby| command is mainly useful for diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt index f2278f8453..dfd81d7170 100644 --- a/runtime/doc/indent.txt +++ b/runtime/doc/indent.txt @@ -410,11 +410,11 @@ The examples below assume a 'shiftwidth' of 4. < *cino-(* (N When in unclosed parentheses, indent N characters from the line - with the unclosed parentheses. Add a 'shiftwidth' for every + with the unclosed parenthesis. Add a 'shiftwidth' for every extra unclosed parentheses. When N is 0 or the unclosed - parentheses is the first non-white character in its line, line + parenthesis is the first non-white character in its line, line up with the next non-white character after the unclosed - parentheses. (default 'shiftwidth' * 2). + parenthesis. (default 'shiftwidth' * 2). cino= cino=(0 > if (c1 && (c2 || if (c1 && (c2 || @@ -435,7 +435,7 @@ The examples below assume a 'shiftwidth' of 4. < *cino-U* UN When N is non-zero, do not ignore the indenting specified by - ( or u in case that the unclosed parentheses is the first + ( or u in case that the unclosed parenthesis is the first non-white character in its line. (default 0). cino= or cino=(s cino=(s,U1 > @@ -448,8 +448,8 @@ The examples below assume a 'shiftwidth' of 4. *cino-w* wN When in unclosed parentheses and N is non-zero and either using "(0" or "u0", respectively, or using "U0" and the unclosed - parentheses is the first non-white character in its line, line - up with the character immediately after the unclosed parentheses + parenthesis is the first non-white character in its line, line + up with the character immediately after the unclosed parenthesis rather than the first non-white character. (default 0). cino=(0 cino=(0,w1 > @@ -460,11 +460,11 @@ The examples below assume a 'shiftwidth' of 4. < *cino-W* WN When in unclosed parentheses and N is non-zero and either - using "(0" or "u0", respectively and the unclosed parentheses is + using "(0" or "u0", respectively and the unclosed parenthesis is the last non-white character in its line and it is not the - closing parentheses, indent the following line N characters + closing parenthesis, indent the following line N characters relative to the outer context (i.e. start of the line or the - next unclosed parentheses). (default: 0). + next unclosed parenthesis). (default: 0). cino=(0 cino=(0,W4 > a_long_line( a_long_line( @@ -491,8 +491,8 @@ The examples below assume a 'shiftwidth' of 4. < *cino-m* mN When N is non-zero, line up a line starting with a closing - parentheses with the first character of the line with the - matching opening parentheses. (default 0). + parenthesis with the first character of the line with the + matching opening parenthesis. (default 0). cino=(s cino=(s,m1 > c = c1 && ( c = c1 && ( @@ -506,7 +506,7 @@ The examples below assume a 'shiftwidth' of 4. < *cino-M* MN When N is non-zero, line up a line starting with a closing - parentheses with the first character of the previous line. + parenthesis with the first character of the previous line. (default 0). cino= cino=M1 > @@ -528,7 +528,7 @@ The examples below assume a 'shiftwidth' of 4. < *javascript-cinoptions* *javascript-indenting* *cino-J* JN Indent JavaScript object declarations correctly by not confusing - them with labels. The value 'N' is currently unused but must be + them with labels. The value 'N' is currently unused but must be non-zero (e.g. 'J1'). If you enable this you probably also want to set |cino-j|. > @@ -537,7 +537,7 @@ The examples below assume a 'shiftwidth' of 4. that: this, some: ok, }, - "bar":{ + "bar":{ a : 2, b: "123abc", x: 4, @@ -565,7 +565,7 @@ The examples below assume a 'shiftwidth' of 4. recognize preprocessor lines; right-shifting lines that start with "#" does not work. - + *cino-P* PN When N is non-zero recognize C pragmas, and indent them like any other code; does not concern other preprocessor directives. When N is zero (default): don't recognize C pragmas, treating @@ -606,14 +606,14 @@ the use of square and curly brackets, and otherwise by community convention. These conventions are not universally followed, so the Clojure indent script offers a few configurable options, listed below. -If the current vim does not include |searchpairpos()|, the indent script falls +If the current vim does not include searchpairpos(), the indent script falls back to normal 'lisp' indenting, and the following options are ignored. *g:clojure_maxlines* -Set maximum scan distance of |searchpairpos()|. Larger values trade -performance for correctness when dealing with very long forms. A value of 0 -will scan without limits. +Set maximum scan distance of searchpairpos(). Larger values trade performance +for correctness when dealing with very long forms. A value of 0 will scan +without limits. > " Default let g:clojure_maxlines = 100 @@ -814,6 +814,16 @@ Detail: <!-- --> : -1 +MATLAB *ft-matlab-indent* *matlab-indent* *matlab-indenting* + +The setting Function indenting format in MATLAB Editor/Debugger Language +Preferences corresponds to: > + :let g:MATLAB_function_indent = {0, 1 or 2 (default)} + +Where 0 is for Classic, 1 for Indent nested functions and 2 for Indent all +functions. + + PHP *ft-php-indent* *php-indent* *php-indenting* NOTE: PHP files will be indented correctly only if PHP |syntax| is active. @@ -887,7 +897,7 @@ To automatically remove '\r' characters when the 'fileformat' is set to Unix: > *PHP_BracesAtCodeLevel* To indent braces at the same level than the code they contain: > :let g:PHP_BracesAtCodeLevel = 1 - + This will give the following result: > if ($foo) { @@ -951,10 +961,12 @@ Function call arguments will indent 1 extra level. For two-space indentation: > ------------- *PHP_IndentFunctionDeclarationParameters* -Extra indentation levels to add to arguments in multi-line function definitions. > +Extra indentation levels to add to arguments in multi-line function +definitions. > let g:PHP_IndentFunctionDeclarationParameters = 1 -Function arguments in declarations will indent 1 extra level. For two-space indentation: > +Function arguments in declarations will indent 1 extra level. For two-space +indentation: > function call_the_thing( $with_this, @@ -980,7 +992,7 @@ Indent after a nested paren: > Indent for a continuation line: > let g:pyindent_continue = 'shiftwidth() * 2' -The method uses |searchpair()| to look back for unclosed parenthesis. This +The method uses |searchpair()| to look back for unclosed parentheses. This can sometimes be slow, thus it timeouts after 150 msec. If you notice the indenting isn't correct, you can set a larger timeout in msec: > let g:pyindent_searchpair_timeout = 500 diff --git a/runtime/doc/index.txt b/runtime/doc/index.txt index c824a9f9f6..e7d891bc33 100644 --- a/runtime/doc/index.txt +++ b/runtime/doc/index.txt @@ -61,22 +61,26 @@ tag char action in Insert mode ~ the cursor |i_CTRL-Q| CTRL-Q same as CTRL-V, unless used for terminal control flow -|i_CTRL-R| CTRL-R {0-9a-z"%#*:=} +|i_CTRL-SHIFT-Q| CTRL-SHIFT-Q {char} + like CTRL-Q unless |modifyOtherKeys| is active +|i_CTRL-R| CTRL-R {register} insert the contents of a register -|i_CTRL-R_CTRL-R| CTRL-R CTRL-R {0-9a-z"%#*:=} +|i_CTRL-R_CTRL-R| CTRL-R CTRL-R {register} insert the contents of a register literally -|i_CTRL-R_CTRL-O| CTRL-R CTRL-O {0-9a-z"%#*:=} +|i_CTRL-R_CTRL-O| CTRL-R CTRL-O {register} insert the contents of a register literally and don't auto-indent -|i_CTRL-R_CTRL-P| CTRL-R CTRL-P {0-9a-z"%#*:=} +|i_CTRL-R_CTRL-P| CTRL-R CTRL-P {register} insert the contents of a register literally and fix indent. - CTRL-S (used for terminal control flow) + CTRL-S not used or used for terminal control flow |i_CTRL-T| CTRL-T insert one shiftwidth of indent in current line |i_CTRL-U| CTRL-U delete all entered characters in the current line |i_CTRL-V| CTRL-V {char} insert next non-digit literally +|i_CTRL-SHIFT-V| CTRL-SHIFT-V {char} + like CTRL-V unless |modifyOtherKeys| is active |i_CTRL-V_digit| CTRL-V {number} insert three digit decimal number as a single byte. |i_CTRL-W| CTRL-W delete word before the cursor @@ -203,9 +207,9 @@ tag char note action in Normal mode ~ |CTRL-N| CTRL-N 1 same as "j" |CTRL-O| CTRL-O 1 go to N older entry in jump list |CTRL-P| CTRL-P 1 same as "k" - CTRL-Q (used for terminal control flow) + CTRL-Q not used, or used for terminal control flow |CTRL-R| CTRL-R 2 redo changes which were undone with 'u' - CTRL-S (used for terminal control flow) + CTRL-S not used, or used for terminal control flow |CTRL-T| CTRL-T jump to N older Tag in tag list |CTRL-U| CTRL-U scroll N lines Upwards (default: half a screen) @@ -231,8 +235,7 @@ tag char note action in Normal mode ~ 2 filter Nmove text through the {filter} command |!!| !!{filter} 2 filter N lines through the {filter} command -|quote| "{a-zA-Z0-9.%#:-"} use register {a-zA-Z0-9.%#:-"} for next - delete, yank or put (uppercase to append) +|quote| "{register} use {register} for next delete, yank or put ({.%#:} only work with put) |#| # 1 search backward for the Nth occurrence of the ident under the cursor @@ -350,8 +353,8 @@ tag char note action in Normal mode ~ register x] |Y| ["x]Y yank N lines [into register x]; synonym for "yy" -|ZZ| ZZ store current file if modified, and exit -|ZQ| ZQ exit current file always +|ZZ| ZZ write if buffer changed and close window +|ZQ| ZQ close window without writing |[| [{char} square bracket command (see |[| below) \ not used |]| ]{char} square bracket command (see |]| below) @@ -768,10 +771,10 @@ tag char note action in Normal mode ~ lines down |gk| gk 1 like "k", but when 'wrap' on go N screen lines up -|gn| gn 1,2 find the next match with the last used - search pattern and Visually select it |gm| gm 1 go to character at middle of the screenline |gM| gM 1 go to character at middle of the text line +|gn| gn 1,2 find the next match with the last used + search pattern and Visually select it |go| go 1 cursor to byte N in the buffer |gp| ["x]gp 2 put the text [from register x] after the cursor N times, leave the cursor after it @@ -816,7 +819,7 @@ tag char note action in Normal mode ~ |zD| zD delete folds recursively |zE| zE eliminate all folds |zF| zF create a fold for N lines -|zG| zG mark word as good spelled word +|zG| zG temporarily mark word as correctly spelled |zH| zH when 'wrap' off scroll half a screenwidth to the right |zL| zL when 'wrap' off scroll half a screenwidth @@ -825,7 +828,7 @@ tag char note action in Normal mode ~ |zN| zN set 'foldenable' |zO| zO open folds recursively |zR| zR set 'foldlevel' to the deepest fold -|zW| zW mark word as wrong (bad) spelled word +|zW| zW temporarily mark word as incorrectly spelled |zX| zX re-apply 'foldlevel' |z^| z^ cursor on line N (default line above window), otherwise like "z-" @@ -837,7 +840,7 @@ tag char note action in Normal mode ~ position the cursor at the end (right side) of the screen |zf| zf{motion} create a fold for Nmove text -|zg| zg mark word as good spelled word +|zg| zg permanently mark word as correctly spelled |zh| zh when 'wrap' off scroll screen N characters to the right |zi| zi toggle 'foldenable' @@ -858,7 +861,7 @@ tag char note action in Normal mode ~ |zuW| zuW undo |zW| |zuG| zuG undo |zG| |zv| zv open enough folds to view the cursor line -|zw| zw mark word as wrong (bad) spelled word +|zw| zw permanently mark word as incorrectly spelled |zx| zx re-apply 'foldlevel' and do "zv" |zz| zz redraw, cursor line at center of window |z<Left>| z<Left> same as "zh" @@ -1044,7 +1047,7 @@ tag command action in Command-line editing mode ~ |c_CTRL-R_CTRL-O| CTRL-R CTRL-O {regname} insert the contents of a register or object under the cursor literally - CTRL-S (used for terminal control flow) + CTRL-S not used, or used for terminal control flow |c_CTRL-T| CTRL-T previous match when 'incsearch' is active |c_CTRL-U| CTRL-U remove all characters |c_CTRL-V| CTRL-V insert next non-digit literally, insert three @@ -1232,11 +1235,11 @@ tag command action ~ |:cunmenu| :cunme[nu] remove menu for Command-line mode |:cwindow| :cw[indow] open or close quickfix window |:delete| :d[elete] delete lines -|:delmarks| :delm[arks] delete marks |:debug| :deb[ug] run a command in debugging mode |:debuggreedy| :debugg[reedy] read debug mode commands from normal input |:delcommand| :delc[ommand] delete user-defined command |:delfunction| :delf[unction] delete a user function +|:delmarks| :delm[arks] delete marks |:diffupdate| :dif[fupdate] update 'diff' buffers |:diffget| :diffg[et] remove differences in current buffer |:diffoff| :diffo[ff] switch off diff mode @@ -1248,7 +1251,6 @@ tag command action ~ |:display| :di[splay] display registers |:djump| :dj[ump] jump to #define |:dl| :dl short for |:delete| with the 'l' flag -|:del| :del[ete]l short for |:delete| with the 'l' flag |:dlist| :dli[st] list #defines |:doautocmd| :do[autocmd] apply autocommands to current buffer |:doautoall| :doautoa[ll] apply autocommands for all loaded buffers @@ -1269,7 +1271,7 @@ tag command action ~ |:emenu| :em[enu] execute a menu by name |:endif| :en[dif] end previous :if |:endfor| :endfo[r] end previous :for -|:endfunction| :endf[unction] end of a user function +|:endfunction| :endf[unction] end of a user function started with :function |:endtry| :endt[ry] end previous :try |:endwhile| :endw[hile] end previous :while |:enew| :ene[w] edit a new, unnamed buffer @@ -1674,7 +1676,7 @@ tag command action ~ |:wqall| :wqa[ll] write all changed buffers and quit Vim |:wshada| :wsh[ada] write to ShaDa file |:wundo| :wu[ndo] write undo information to a file -|:xit| :x[it] write if buffer changed and quit window or Vim +|:xit| :x[it] write if buffer changed and close window |:xall| :xa[ll] same as ":wqall" |:xmapclear| :xmapc[lear] remove all mappings for Visual mode |:xmap| :xm[ap] like ":map" but for Visual mode diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 6902ed5fd4..c8a4168ab2 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -95,7 +95,7 @@ CTRL-K {char1} [char2] CTRL-N Find next keyword (see |i_CTRL-N|). CTRL-P Find previous keyword (see |i_CTRL-P|). -CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R* +CTRL-R {register} *i_CTRL-R* Insert the contents of a register. Between typing CTRL-R and the second character, '"' will be displayed to indicate that you are expected to enter the name of a register. @@ -132,7 +132,7 @@ CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R* sequence will be broken. See |registers| about registers. -CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R* +CTRL-R CTRL-R {register} *i_CTRL-R_CTRL-R* Insert the contents of a register. Works like using a single CTRL-R, but the text is inserted literally, not as if typed. This differs when the register contains characters like <BS>. @@ -143,8 +143,10 @@ CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R* you also want to avoid these, use CTRL-R CTRL-O, see below. The '.' register (last inserted text) is still inserted as typed. + After this command, the '.' register contains the text from + the register as if it was inserted by typing it. -CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O* +CTRL-R CTRL-O {register} *i_CTRL-R_CTRL-O* Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse |<MiddleMouse>|. When the register is linewise this will @@ -152,13 +154,19 @@ CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O* Does not replace characters! The '.' register (last inserted text) is still inserted as typed. + After this command, the '.' register contains the command + typed and not the text. I.e., the literals "^R^O" and not the + text from the register. -CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P* +CTRL-R CTRL-P {register} *i_CTRL-R_CTRL-P* Insert the contents of a register literally and fix the indent, like |[<MiddleMouse>|. Does not replace characters! The '.' register (last inserted text) is still inserted as typed. + After this command, the '.' register contains the command + typed and not the text. I.e., the literals "^R^P" and not the + text from the register. *i_CTRL-T* CTRL-T Insert one shiftwidth of indent at the start of the current @@ -284,6 +292,7 @@ If you enter a value of 10, it will end up in the file as a 0. The 10 is a the buffer to a file, the <NL> character is translated into <Nul>. The <NL> character is written at the end of each line. Thus if you want to insert a <NL> character in a file you will have to make a line break. +Also see 'fileformat'. *i_CTRL-X* *insert_expand* CTRL-X enters a sub-mode where several commands can be used. Most of these @@ -358,7 +367,7 @@ CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O* CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L* CTRL-G u break undo sequence, start new change *i_CTRL-G_u* CTRL-G U don't break undo with next left/right cursor *i_CTRL-G_U* - movement, if the cursor stays within + movement, if the cursor stays within the same the line ----------------------------------------------------------------------- @@ -1760,6 +1769,7 @@ a Append text after the cursor [count] times. If the *A* A Append text at the end of the line [count] times. + For using "A" in Visual block mode see |v_b_A|. <insert> or *i* *insert* *<Insert>* i Insert text before the cursor [count] times. @@ -1772,6 +1782,7 @@ I Insert text before the first non-blank in the line When the 'H' flag is present in 'cpoptions' and the line only contains blanks, insert start just before the last blank. + For using "I" in Visual block mode see |v_b_I|. *gI* gI Insert text in column 1 [count] times. @@ -1937,11 +1948,11 @@ If the 'fileformats' option is not empty Vim tries to recognize the type of changed, the detected format is only used while reading the file. A similar thing happens with 'fileencodings'. -On non-Windows systems the message "[dos format]" is shown if -a file is read in DOS format, to remind you that something unusual is done. -On Macintosh and Windows the message "[unix format]" is shown if -a file is read in Unix format. -On non-Macintosh systems, the message "[Mac format]" is shown if a file is +On non-Win32 systems the message "[dos format]" is shown if a file is read in +DOS format, to remind you that something unusual is done. +On Macintosh and Win32 the message "[unix format]" is shown if a file is read +in Unix format. +On non-Macintosh systems, the message "[mac format]" is shown if a file is read in Mac format. An example on how to use ":r !": > diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt index d858985e3f..925b3e5dbb 100644 --- a/runtime/doc/intro.txt +++ b/runtime/doc/intro.txt @@ -139,11 +139,11 @@ Vim would never have become what it is now, without the help of these people! Flemming Madsen X11 client-server, various features and patches Tony Mechelynck answers many user questions Paul Moore Python interface extensions, many patches - Katsuhito Nagano Work on multi-byte versions - Sung-Hyun Nam Work on multi-byte versions + Katsuhito Nagano Work on multibyte versions + Sung-Hyun Nam Work on multibyte versions Vince Negri Win32 GUI and generic console enhancements Steve Oualline Author of the first Vim book |frombook| - Dominique Pelle valgrind reports and many fixes + Dominique Pelle Valgrind reports and many fixes A.Politz Many bug reports and some fixes George V. Reilly Win32 port, Win32 GUI start-off Stephen Riehm bug collector @@ -324,7 +324,7 @@ notation meaning equivalent decimal value(s) ~ <CSI> command sequence intro ALT-Esc 155 *<CSI>* <xCSI> CSI when typed in the GUI *<xCSI>* -<EOL> end-of-line (can be <CR>, <LF> or <CR><LF>, +<EOL> end-of-line (can be <CR>, <NL> or <CR><NL>, depends on system and 'fileformat') *<EOL>* <Ignore> cancel wait-for-character *<Ignore>* <NOP> no-op: do nothing (useful in mappings) *<Nop>* diff --git a/runtime/doc/makehtml.awk b/runtime/doc/makehtml.awk index 6e93c01c54..50f5611fa7 100644 --- a/runtime/doc/makehtml.awk +++ b/runtime/doc/makehtml.awk @@ -65,7 +65,7 @@ substr($0,length($0),1) == "~" { print "<B><FONT COLOR=\"PURPLE\">" substr($0,1, # #ad hoc code # -/^"\|\& / {gsub(/\|/,"\\|"); } +/^"\|& / {gsub(/\|/,"\\|"); } / = b / {gsub(/ b /," \\b "); } # # one letter tag diff --git a/runtime/doc/map.txt b/runtime/doc/map.txt index 73ac3763d0..ee42edf154 100644 --- a/runtime/doc/map.txt +++ b/runtime/doc/map.txt @@ -176,6 +176,12 @@ whether to use the "," mapping or the longer one. To avoid this add the <nowait> argument. Then the mapping will be used when it matches, Vim does not wait for more characters to be typed. However, if the characters were already typed they are used. +Note that this works when the <nowait> mapping fully matches and is found +before any partial matches. This works when: +- There is only one matching buffer-local mapping, since these are always + found before global mappings. +- There is another buffer-local mapping that partly matches, but it is + defined earlier (last defined mapping is found first). *:map-<silent>* *:map-silent* To define a mapping which will not be echoed on the command line, add @@ -217,14 +223,23 @@ have a look at |maparg()|. If the first argument to one of these commands is "<expr>" and it is used to define a new mapping or abbreviation, the argument is an expression. The expression is evaluated to obtain the {rhs} that is used. Example: > - :inoremap <expr> . InsertDot() -The result of the InsertDot() function will be inserted. It could check the + :inoremap <expr> . <SID>InsertDot() +The result of the s:InsertDot() function will be inserted. It could check the text before the cursor and start omni completion when some condition is met. +Using a script-local function is preferred, to avoid polluting the global +namespace. Use <SID> in the RHS so that the script that the mapping was +defined in can be found. For abbreviations |v:char| is set to the character that was typed to trigger the abbreviation. You can use this to decide how to expand the {lhs}. You should not either insert or change the v:char. - + +In case you want the mapping to not do anything, you can have the expression +evaluate to an empty string. If something changed that requires Vim to +go through the main loop (e.g. to update the display), return "\<Ignore>". +This is similar to "nothing" but makes Vim return from the loop that waits for +input. + Also, keep in mind that the expression may be evaluated when looking for typeahead, before the previous command has been executed. For example: > func StoreColumn() @@ -233,8 +248,8 @@ typeahead, before the previous command has been executed. For example: > endfunc nnoremap <expr> x StoreColumn() nmap ! f!x -You will notice that g:column has the value from before executing "fx", -because "z" is evaluated before "fx" is executed. +You will notice that g:column has the value from before executing "f!", +because "x" is evaluated before "f!" is executed. This can be solved by inserting <Ignore> before the character that is expression-mapped: > nmap ! f!<Ignore>x @@ -277,15 +292,8 @@ Here is an example that inserts a list number that increases: > CTRL-L inserts the next number, CTRL-R resets the count. CTRL-R returns an empty string, so that nothing is inserted. -Note that there are some tricks to make special keys work and escape CSI bytes -in the text. The |:map| command also does this, thus you must avoid that it -is done twice. This does not work: > - :imap <expr> <F3> "<Char-0x611B>" -Because the <Char- sequence is escaped for being a |:imap| argument and then -again for using <expr>. This does work: > - :imap <expr> <F3> "\u611B" -Using 0x80 as a single byte before other text does not work, it will be seen -as a special key. +Note that using 0x80 as a single byte before other text does not work, it will +be seen as a special key. *<Cmd>* *:map-cmd* The <Cmd> pseudokey begins a "command mapping", which executes the command @@ -301,14 +309,17 @@ preserved, so tricks with |gv| are not needed. Commands can be invoked directly in cmdline-mode (which would otherwise require timer hacks). Unlike <expr> mappings, there are no special restrictions on the <Cmd> -command: it is executed as if an (unrestricted) |autocmd| was invoked or an -async event event was processed. +command: it is executed as if an (unrestricted) |autocommand| was invoked +or an async event event was processed. Note: - Because <Cmd> avoids mode-changes (unlike ":") it does not trigger |CmdlineEnter| and |CmdlineLeave| events. This helps performance. - For the same reason, |keycodes| like <C-R><C-W> are interpreted as plain, unmapped keys. +- The command is not echo'ed, no need for <silent>. +- In Visual mode you can use `line('v')` and `col('v')` to get one end of the + Visual area, the cursor is at the other end. - In select-mode, |:map| and |:vmap| command mappings are executed in visual-mode. Use |:smap| to handle select-mode. @@ -382,6 +393,8 @@ Some commands work both in Insert mode and Command-line mode, some not: :cmap :cnoremap :cunmap :cmapclear - yes - :lmap :lnoremap :lunmap :lmapclear yes* yes* yes* +* If 'iminsert' is 1, see |language-mapping| below. + The original Vi did not have separate mappings for Normal/Visual/Operator-pending mode and for Insert/Command-line mode. Therefore the ":map" and ":map!" commands enter and display mappings for @@ -599,7 +612,7 @@ construct can be used: <Char-033> character 27 <Char-0x7f> character 127 <S-Char-114> character 114 ('r') shifted ('R') -This is useful to specify a (multi-byte) character in a 'keymap' file. +This is useful to specify a (multibyte) character in a 'keymap' file. Upper and lowercase differences are ignored. *map-comments* @@ -788,7 +801,7 @@ otherwise it is interpreted as two key presses: 1.11 MAPPING AN OPERATOR *:map-operator* An operator is used before a {motion} command. To define your own operator -you must create mapping that first sets the 'operatorfunc' option and then +you must create a mapping that first sets the 'operatorfunc' option and then invoke the |g@| operator. After the user types the {motion} command the specified function will be called. @@ -806,35 +819,47 @@ g@{motion} Call the function set by the 'operatorfunc' option. Here is an example that counts the number of spaces with <F4>: > - nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@ - vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR> + nnoremap <expr> <F4> CountSpaces() + xnoremap <expr> <F4> CountSpaces() + " doubling <F4> works on a line + nnoremap <expr> <F4><F4> CountSpaces() .. '_' - function! CountSpaces(type, ...) - let sel_save = &selection - let &selection = "inclusive" - let reg_save = @@ - - if a:0 " Invoked from Visual mode, use gv command. - silent exe "normal! gvy" - elseif a:type == 'line' - silent exe "normal! '[V']y" - else - silent exe "normal! `[v`]y" + function CountSpaces(type = '') abort + if a:type == '' + set opfunc=CountSpaces + return 'g@' endif - echomsg strlen(substitute(@@, '[^ ]', '', 'g')) - - let &selection = sel_save - let @@ = reg_save + let sel_save = &selection + let reg_save = getreginfo('"') + let cb_save = &clipboard + let visual_marks_save = [getpos("'<"), getpos("'>")] + + try + set clipboard= selection=inclusive + let commands = #{line: "'[V']y", char: "`[v`]y", block: "`[\<c-v>`]y"} + silent exe 'noautocmd keepjumps normal! ' .. get(commands, a:type, '') + echom getreg('"')->count(' ') + finally + call setreg('"', reg_save) + call setpos("'<", visual_marks_save[0]) + call setpos("'>", visual_marks_save[1]) + let &clipboard = cb_save + let &selection = sel_save + endtry endfunction +An <expr> mapping is used to be able to fetch any prefixed count and register. +This also avoids using a command line, which would trigger CmdlineEnter and +CmdlineLeave autocommands. + Note that the 'selection' option is temporarily set to "inclusive" to be able to yank exactly the right text by using Visual mode from the '[ to the '] mark. -Also note that there is a separate mapping for Visual mode. It removes the -"'<,'>" range that ":" inserts in Visual mode and invokes the function with -visualmode() and an extra argument. +Also note that the 'clipboard' option is temporarily emptied to avoid +clobbering the `"*` or `"+` registers, if its value contains the item `unnamed` +or `unnamedplus`. ============================================================================== 2. Abbreviations *abbreviations* *Abbreviations* @@ -973,7 +998,8 @@ See |:verbose-cmd| for more information. See |:map-<buffer>| for the optional <buffer> argument. *:una* *:unabbreviate* -:una[bbreviate] {lhs} Remove abbreviation for {lhs} from the list. If none +:una[bbreviate] [<buffer>] {lhs} + Remove abbreviation for {lhs} from the list. If none is found, remove abbreviations in which {lhs} matches with the {rhs}. This is done so that you can even remove abbreviations after expansion. To avoid @@ -988,7 +1014,8 @@ See |:verbose-cmd| for more information. same as ":ab", but for Command-line mode only. *:cuna* *:cunabbrev* -:cuna[bbrev] {lhs} same as ":una", but for Command-line mode only. +:cuna[bbrev] [<buffer>] {lhs} + Same as ":una", but for Command-line mode only. *:cnorea* *:cnoreabbrev* :cnorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs] @@ -1000,7 +1027,8 @@ See |:verbose-cmd| for more information. same as ":ab", but for Insert mode only. *:iuna* *:iunabbrev* -:iuna[bbrev] {lhs} same as ":una", but for insert mode only. +:iuna[bbrev] [<buffer>] {lhs} + Same as ":una", but for insert mode only. *:inorea* *:inoreabbrev* :inorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs] @@ -1100,9 +1128,9 @@ Otherwise, using "<SID>" outside of a script context is an error. If you need to get the script number to use in a complicated script, you can use this function: > - function s:SID() - return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$') - endfun + func s:ScriptNumber() + return matchstr(expand('<SID>'), '<SNR>\zs\d\+\ze_') + endfunc The "<SNR>" will be shown when listing functions and mappings. This is useful to find out what they are defined to. @@ -1175,15 +1203,15 @@ last defined. Example: > See |:verbose-cmd| for more information. *E174* *E182* -:com[mand][!] [{attr}...] {cmd} {rep} +:com[mand][!] [{attr}...] {cmd} {repl} Define a user command. The name of the command is - {cmd} and its replacement text is {rep}. The command's - attributes (see below) are {attr}. If the command - already exists, an error is reported, unless a ! is - specified, in which case the command is redefined. - There is one exception: When sourcing a script again, - a command that was previously defined in that script - will be silently replaced. + {cmd} and its replacement text is {repl}. The + command's attributes (see below) are {attr}. If the + command already exists, an error is reported, unless a + ! is specified, in which case the command is + redefined. There is one exception: When sourcing a + script again, a command that was previously defined in + that script will be silently replaced. :delc[ommand] {cmd} *:delc* *:delcommand* *E184* @@ -1390,11 +1418,11 @@ feature. Use the full name for new scripts. Replacement text ~ -The replacement text for a user defined command is scanned for special escape -sequences, using <...> notation. Escape sequences are replaced with values -from the entered command line, and all other text is copied unchanged. The -resulting string is executed as an Ex command. To avoid the replacement use -<lt> in place of the initial <. Thus to include "<bang>" literally use +The replacement text {repl} for a user defined command is scanned for special +escape sequences, using <...> notation. Escape sequences are replaced with +values from the entered command line, and all other text is copied unchanged. +The resulting string is executed as an Ex command. To avoid the replacement +use <lt> in place of the initial <. Thus to include "<bang>" literally use "<lt>bang>". The valid escape sequences are @@ -1412,7 +1440,7 @@ The valid escape sequences are <bang> (See the '-bang' attribute) Expands to a ! if the command was executed with a ! modifier, otherwise expands to nothing. - *<mods>* + *<mods>* *<q-mods>* *:command-modifiers* <mods> The command modifiers, if specified. Otherwise, expands to nothing. Supported modifiers are |:aboveleft|, |:belowright|, |:botright|, |:browse|, |:confirm|, |:hide|, |:keepalt|, diff --git a/runtime/doc/mbyte.txt b/runtime/doc/mbyte.txt index a6410a09cb..a6c797a860 100644 --- a/runtime/doc/mbyte.txt +++ b/runtime/doc/mbyte.txt @@ -22,7 +22,7 @@ Getting started *mbyte-first* This is a summary of the multibyte features in Vim. If you are lucky it works as described and you can start using Vim without much trouble. If something doesn't work you will have to read the rest. Don't be surprised if it takes -quite a bit of work and experimenting to make Vim use all the multi-byte +quite a bit of work and experimenting to make Vim use all the multibyte features. Unfortunately, every system has its own way to deal with multibyte languages and it is quite complicated. @@ -85,12 +85,12 @@ You can also set 'guifont' alone, the Nvim GUI will try to find a matching INPUT -There are several ways to enter multi-byte characters: +There are several ways to enter multibyte characters: - For X11 XIM can be used. See |XIM|. - For MS-Windows IME can be used. See |IME|. - For all systems keymaps can be used. See |mbyte-keymap|. -The options 'iminsert', 'imsearch' and 'imcmdline' can be used to chose +The options 'iminsert', 'imsearch' and 'imcmdline' can be used to choose the different input methods or disable them temporarily. ============================================================================== @@ -103,8 +103,8 @@ in, or just use a certain locale inside Vim. WHAT IS A LOCALE? *locale* -There are many of languages in the world. And there are different cultures -and environments at least as much as the number of languages. A linguistic +There are many languages in the world. And there are different cultures and +environments at least as many as the number of languages. A linguistic environment corresponding to an area is called "locale". This includes information about the used language, the charset, collating order for sorting, date format, currency format and so on. For Vim only the language and charset @@ -198,11 +198,11 @@ encoded with one byte, we call this a single-byte encoding. The most often used one is called "latin1". This limits the number of characters to 256. Some of these are control characters, thus even fewer can be used for text. -When some characters use two or more bytes, we call this a multi-byte +When some characters use two or more bytes, we call this a multibyte encoding. This allows using much more than 256 characters, which is required for most East Asian languages. -Most multi-byte encodings use one byte for the first 127 characters. These +Most multibyte encodings use one byte for the first 127 characters. These are equal to ASCII, which makes it easy to exchange plain-ASCII text, no matter what language is used. Thus you might see the right text even when the encoding was set wrong. @@ -400,7 +400,7 @@ is suitable for complex input, such as CJK. of the two ways: FrontEnd system and BackEnd system. In the FrontEnd system, input events are snatched by the |IM-server| first, then |IM-server| give the application the result of input. On the other hand, the BackEnd - system works reverse order. MS Windows adopt BackEnd system. In X, most of + system works reverse order. MS-Windows adopt BackEnd system. In X, most of |IM-server|s adopt FrontEnd system. The demerit of BackEnd system is the large overhead in communication, but it provides safe synchronization with no restrictions on applications. @@ -512,7 +512,7 @@ input_server_name is your |IM-server| name (check your |IM-server| your_input_style is one of |OverTheSpot|, |OffTheSpot|, |Root|. See also |xim-input-style|. -*international may not necessary if you use X11R6. +*international may not be necessary if you use X11R6. *.inputMethod and *.preeditType are optional if you use X11R6. For example, when you are using kinput2 as |IM-server|, > @@ -921,7 +921,7 @@ not everybody is able to type a composing character. ============================================================================== Overview of options *mbyte-options* -These options are relevant for editing multi-byte files. +These options are relevant for editing multibyte files. 'fileencoding' Encoding of a file. When it's different from "utf-8" conversion is done when reading or writing the file. @@ -941,7 +941,7 @@ These options are relevant for editing multi-byte files. ============================================================================== -Contributions specifically for the multi-byte features by: +Contributions specifically for the multibyte features by: Chi-Deok Hwang <hwang@mizi.co.kr> SungHyun Nam <goweol@gmail.com> K.Nagano <nagano@atese.advantest.co.jp> diff --git a/runtime/doc/message.txt b/runtime/doc/message.txt index 745160da8a..6fbd9ec922 100644 --- a/runtime/doc/message.txt +++ b/runtime/doc/message.txt @@ -17,13 +17,14 @@ The ":messages" command can be used to view previously given messages. This is especially useful when messages have been overwritten or truncated. This depends on the 'shortmess' option. - :messages Show all messages. + :mes[sages] Show all messages. - :{count}messages Show the {count} most recent messages. + :{count}mes[sages] Show the {count} most recent messages. - :messages clear Clear all messages. + :mes[sages] clear Clear all messages. - :{count}messages clear Clear messages, keeping only the {count} most + :{count}mes[sages] clear + Clear messages, keeping only the {count} most recent ones. The number of remembered messages is fixed at 20 for the tiny version and 200 @@ -67,7 +68,7 @@ Or view a list of recent messages with: > See `:messages` above. LIST OF MESSAGES - *E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317* + *E222* *E228* *E232* *E293* *E298* *E304* *E317* *E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322* *E323* *E341* *E473* *E570* *E685* *E292* > Add to read buffer @@ -761,6 +762,9 @@ and the screen is about to be redrawn: -> Press <Enter> or <Space> to redraw the screen and continue, without that key being used otherwise. -> Press ':' or any other Normal mode command character to start that command. + Note that after an external command some special keys, such as the cursor + keys, may not work normally, because the terminal is still set to a state + for executing the external command. -> Press 'k', <Up>, 'u', 'b' or 'g' to scroll back in the messages. This works the same way as at the |more-prompt|. Only works when 'more' is on. -> Pressing 'j', 'f', 'd' or <Down> is ignored when messages scrolled off the diff --git a/runtime/doc/mlang.txt b/runtime/doc/mlang.txt index 5217b2c160..b57d2b592a 100644 --- a/runtime/doc/mlang.txt +++ b/runtime/doc/mlang.txt @@ -7,7 +7,7 @@ Multi-language features *multilang* *multi-lang* This is about using messages and menus in various languages. For editing -multi-byte text see |multibyte|. +multibyte text see |multibyte|. The basics are explained in the user manual: |usr_45.txt|. diff --git a/runtime/doc/motion.txt b/runtime/doc/motion.txt index a6c072e489..9f8acff88a 100644 --- a/runtime/doc/motion.txt +++ b/runtime/doc/motion.txt @@ -182,11 +182,14 @@ l or *l* *^* ^ To the first non-blank character of the line. - |exclusive| motion. + |exclusive| motion. Any count is ignored. *$* *<End>* *<kEnd>* $ or <End> To the end of the line. When a count is given also go - [count - 1] lines downward. |inclusive| motion. + [count - 1] lines downward, or as far is possible. + |inclusive| motion. If a count of 2 of larger is + given and the cursor is on the last line, that is an + error an the cursor doesn't move. In Visual mode the cursor goes to just after the last character in the line. When 'virtualedit' is active, "$" may move the cursor @@ -478,10 +481,11 @@ a set of section macros, specified by the pairs of characters in the 'sections' option. The default is "SHNHH HUnhsh", which defines a section to start at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh". -The "]" and "[" commands stop at the '{' or '}' in the first column. This is -useful to find the start or end of a function in a C program. Note that the -first character of the command determines the search direction and the -second character the type of brace found. +The "]]" and "[[" commands stop at the '{' in the first column. This is +useful to find the start of a function in a C program. To search for a '}' in +the first column, the end of a C function, use "][" (forward) or "[]" +(backward). Note that the first character of the command determines the +search direction. If your '{' or '}' are not in the first column, and you would like to use "[[" and "]]" anyway, try these mappings: > @@ -944,6 +948,7 @@ These commands are not marks themselves, but jump to a mark: - numbered marks '0 - '9 - last insert position '^ - last change position '. + - last affected text area '[ and '] - the Visual area '< and '> - line numbers in placed signs - line numbers in quickfix positions @@ -1024,11 +1029,11 @@ The maximum number of entries is fixed at 100. For example, after three jump commands you have this jump list: - jump line col file/text ~ - 3 1 0 some text ~ - 2 70 0 another line ~ - 1 1154 23 end. ~ - > ~ + jump line col file/text ~ + 3 1 0 some text ~ + 2 70 0 another line ~ + 1 1154 23 end. ~ + > ~ The "file/text" column shows the file name, or the text at the jump if it is in the current file (an indent is removed and a long line is truncated to fit @@ -1037,11 +1042,11 @@ in the window). You are currently in line 1167. If you then use the CTRL-O command, the cursor is put in line 1154. This results in: - jump line col file/text ~ - 2 1 0 some text ~ - 1 70 0 another line ~ - > 0 1154 23 end. ~ - 1 1167 0 foo bar ~ + jump line col file/text ~ + 2 1 0 some text ~ + 1 70 0 another line ~ + > 0 1154 23 end. ~ + 1 1167 0 foo bar ~ The pointer will be set at the last used jump position. The next CTRL-O command will use the entry above it, the next CTRL-I command will use the @@ -1068,12 +1073,12 @@ that calling setpos() does not do this. After the CTRL-O command that got you into line 1154 you could give another jump command (e.g., "G"). The jump list would then become: - jump line col file/text ~ - 4 1 0 some text ~ - 3 70 0 another line ~ - 2 1167 0 foo bar ~ - 1 1154 23 end. ~ - > ~ + jump line col file/text ~ + 4 1 0 some text ~ + 3 70 0 another line ~ + 2 1167 0 foo bar ~ + 1 1154 23 end. ~ + > ~ The line numbers will be adjusted for deleted and inserted lines. This fails if you stop editing a file without writing, like with ":n!". @@ -1168,13 +1173,13 @@ sequence of small changes in a line, for example "xxxxx", adds many positions to the change list. When 'textwidth' is zero 'wrapmargin' is used. When that also isn't set a fixed number of 79 is used. Detail: For the computations bytes are used, not characters, to avoid a speed penalty (this only matters -for multi-byte encodings). +for multibyte encodings). Note that when text has been inserted or deleted the cursor position might be a bit different from the position of the change. Especially when lines have been deleted. -When the |:keepjumps| command modifier is used the position of a change is not +When the `:keepjumps` command modifier is used the position of a change is not remembered. *:changes* @@ -1215,7 +1220,7 @@ remembered. #if, #ifdef, #else, #elif, #endif C preprocessor conditionals (when the cursor is on the # or no ([{ - following) + is following) For other items the matchit plugin can be used, see |matchit|. This plugin also helps to skip matches in comments. @@ -1244,19 +1249,19 @@ remembered. #if/#else/#endif makes the movement linewise. *[(* -[( go to [count] previous unmatched '('. +[( Go to [count] previous unmatched '('. |exclusive| motion. *[{* -[{ go to [count] previous unmatched '{'. +[{ Go to [count] previous unmatched '{'. |exclusive| motion. *])* -]) go to [count] next unmatched ')'. +]) Go to [count] next unmatched ')'. |exclusive| motion. *]}* -]} go to [count] next unmatched '}'. +]} Go to [count] next unmatched '}'. |exclusive| motion. The above four commands can be used to go to the start or end of the current @@ -1304,17 +1309,21 @@ file looks like this: > body_two(); } } + +[To try this out copy the text and put it in a new buffer, the help text above +confuses the jump commands] + Starting with the cursor on "body_two()", using "[m" will jump to the '{' at the start of "method_two()" (obviously this is much more useful when the method is long!). Using "2[m" will jump to the start of "method_one()". Using "3[m" will jump to the start of the class. *[#* -[# go to [count] previous unmatched "#if" or "#else". +[# Go to [count] previous unmatched "#if" or "#else". |exclusive| motion. *]#* -]# go to [count] next unmatched "#else" or "#endif". +]# Go to [count] next unmatched "#else" or "#endif". |exclusive| motion. These two commands work in C programs that contain #if/#else/#endif @@ -1322,11 +1331,11 @@ constructs. It brings you to the start or end of the #if/#else/#endif where the current line is included. You can then use "%" to go to the matching line. *[star* *[/* -[* or [/ go to [count] previous start of a C comment "/*". +[* or [/ Go to [count] previous start of a C comment "/*". |exclusive| motion. *]star* *]/* -]* or ]/ go to [count] next end of a C comment "*/". +]* or ]/ Go to [count] next end of a C comment "*/". |exclusive| motion. diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 63a9db9d0d..269080e750 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -144,11 +144,11 @@ the option value, use '\"' instead. This example sets the 'titlestring' option to 'hi "there"': > :set titlestring=hi\ \"there\" -For Windows backslashes in file names are mostly not removed. More -precise: For options that expect a file name (those where environment -variables are expanded) a backslash before a normal file name character is not -removed. But a backslash before a special character (space, backslash, comma, -etc.) is used like explained above. +For Win32 backslashes in file names are mostly not removed. More precise: For +options that expect a file name (those where environment variables are +expanded) a backslash before a normal file name character is not removed. But +a backslash before a special character (space, backslash, comma, etc.) is used +like explained above. There is one special situation, when the value starts with "\\": > :set dir=\\machine\path results in "\\machine\path" :set dir=\\\\machine\\path results in "\\machine\path" @@ -394,10 +394,11 @@ to set options automatically for one or more files: *modeline* *vim:* *vi:* *ex:* *E520* There are two forms of modelines. The first form: - [text]{white}{vi:|vim:|ex:}[white]{options} + [text{white}]{vi:|vim:|ex:}[white]{options} -[text] any text or empty -{white} at least one blank character (<Space> or <Tab>) +[text{white}] empty or any text followed by at least one blank + character (<Space> or <Tab>); "ex:" always requires at + least one blank character {vi:|vim:|ex:} the string "vi:", "vim:" or "ex:" [white] optional white space {options} a list of option settings, separated with white space @@ -410,10 +411,11 @@ Examples: The second form (this is compatible with some versions of Vi): - [text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text] + [text{white}]{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text] -[text] any text or empty -{white} at least one blank character (<Space> or <Tab>) +[text{white}] empty or any text followed by at least one blank + character (<Space> or <Tab>); "ex:" always requires at + least one blank character {vi:|vim:|Vim:|ex:} the string "vi:", "vim:", "Vim:" or "ex:" [white] optional white space se[t] the string "set " or "se " (note the space); When @@ -474,9 +476,9 @@ If an error is detected the rest of the line is skipped. If you want to include a ':' in a set command precede it with a '\'. The backslash in front of the ':' will be removed. Example: - /* vi:set dir=c\:\tmp: */ ~ -This sets the 'dir' option to "c:\tmp". Only a single backslash before the -':' is removed. Thus to include "\:" you have to specify "\\:". + /* vi:set fillchars=stl\:^,vert\:\|: */ ~ +This sets the 'fillchars' option to "stl:^,vert:\|". Only a single backslash +before the ':' is removed. Thus to include "\:" you have to specify "\\:". *E992* No other commands than "set" are supported, for security reasons (somebody might create a Trojan horse text file with modelines). And not all options @@ -589,9 +591,9 @@ A jump table for the options with a short description can be found at |Q_op|. (or Vim is run inside an xterm invoked with "-cjkwidth" option.), this option should be set to "double" to match the width perceived by Vim with the width of glyphs in the font. Perhaps it also has - to be set to "double" under CJK Windows XP when the system locale is - set to one of CJK locales. - See Unicode Standard Annex #11 (http://www.unicode.org/reports/tr11). + to be set to "double" under CJK MS-Windows when the system locale is + set to one of CJK locales. See Unicode Standard Annex #11 + (http://www.unicode.org/reports/tr11). Vim may set this option automatically at startup time when Vim is compiled with the |+termresponse| feature and if t_u7 is set to the @@ -836,9 +838,9 @@ A jump table for the options with a short description can be found at |Q_op|. impossible!). Writing may fail because of this. - A directory "." means to put the backup file in the same directory as the edited file. - - A directory starting with "./" (or ".\" for Windows) means to - put the backup file relative to where the edited file is. The - leading "." is replaced with the path name of the edited file. + - A directory starting with "./" (or ".\" for MS-Windows) means to put + the backup file relative to where the edited file is. The leading + "." is replaced with the path name of the edited file. ("." inside a directory name has no special meaning). - Spaces after the comma are ignored, other spaces are considered part of the directory name. To have a space at the start of a directory @@ -944,7 +946,7 @@ A jump table for the options with a short description can be found at |Q_op|. (mostly used in |Normal-mode| or |Cmdline-mode|). esc hitting <Esc> in |Normal-mode|. ex In |Visual-mode|, hitting |Q| results in an error. - hangul Error occurred when using hangul input. + hangul Ignored. insertmode Pressing <Esc> in 'insertmode'. lang Calling the beep module for Lua/Mzscheme/TCL. mess No output available for |g<|. @@ -1100,6 +1102,7 @@ A jump table for the options with a short description can be found at |Q_op|. This option is used together with 'bufhidden' and 'swapfile' to specify special kinds of buffers. See |special-buffers|. + Also see |win_gettype()|, which returns the type of the window. Be careful with changing this option, it can have many side effects! @@ -1392,7 +1395,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'completeslash'* *'csl'* 'completeslash' 'csl' string (default: "") local to buffer - {not in Vi} {only for MS-Windows} + {only for MS-Windows} When this option is set it overrules 'shellslash' for completion: - When this option is set to "slash", a forward slash is used for path completion in insert mode. This is useful when editing HTML tag, or @@ -1855,7 +1858,7 @@ A jump table for the options with a short description can be found at |Q_op|. "x" delete each combining character on its own. When it is off (the default) the character along with its combining characters are deleted. - Note: When 'delcombine' is set "xx" may work different from "2x"! + Note: When 'delcombine' is set "xx" may work differently from "2x"! This is useful for Arabic, Hebrew and many other languages where one may have combining characters overtop of base characters, and want @@ -2009,6 +2012,8 @@ A jump table for the options with a short description can be found at |Q_op|. 'directory' 'dir' string (default "$XDG_DATA_HOME/nvim/swap//") global List of directory names for the swap file, separated with commas. + + Possible items: - The swap file will be created in the first directory where this is possible. If it is not possible in any directory, but last directory listed in the option does not exist, it is created. @@ -2018,13 +2023,14 @@ A jump table for the options with a short description can be found at |Q_op|. the edited file. On Unix, a dot is prepended to the file name, so it doesn't show in a directory listing. On MS-Windows the "hidden" attribute is set and a dot prepended if possible. - - A directory starting with "./" (or ".\" for Windows) means to - put the swap file relative to where the edited file is. The leading - "." is replaced with the path name of the edited file. + - A directory starting with "./" (or ".\" for MS-Windows) means to put + the swap file relative to where the edited file is. The leading "." + is replaced with the path name of the edited file. - For Unix and Win32, if a directory ends in two path separators "//", the swap file name will be built from the complete path to the file - with all path separators substituted to percent '%' signs. This will - ensure file name uniqueness in the preserve directory. + with all path separators replaced by percent '%' signs (including + the colon following the drive letter on Win32). This will ensure + file name uniqueness in the preserve directory. On Win32, it is also possible to end with "\\". However, When a separating comma is following, you must use "//", since "\\" will include the comma in the file name. Therefore it is recommended to @@ -2044,9 +2050,10 @@ A jump table for the options with a short description can be found at |Q_op|. the same file twice will result in a warning. Using "/tmp" on Unix is discouraged: When the system crashes you lose the swap file. "/var/tmp" is often not cleared when rebooting, thus is a better - choice than "/tmp". But it can contain a lot of files, your swap - files get lost in the crowd. That is why a "tmp" directory in your - home directory is tried first. + choice than "/tmp". But others on the computer may be able to see the + files, and it can contain a lot of files, your swap files get lost in + the crowd. That is why a "tmp" directory in your home directory is + tried first. The use of |:set+=| and |:set-=| is preferred when adding or removing directories from the list. This avoids problems when a future version uses another default. @@ -2086,7 +2093,9 @@ A jump table for the options with a short description can be found at |Q_op|. 'emoji' 'emo' boolean (default: on) global When on all Unicode emoji characters are considered to be full width. - + This excludes "text emoji" characters, which are normally displayed as + single width. Unfortunately there is no good specification for this + and it has been determined on trial-and-error basis. *'encoding'* *'enc'* *E543* 'encoding' 'enc' @@ -2283,7 +2292,7 @@ A jump table for the options with a short description can be found at |Q_op|. local to buffer This gives the <EOL> of the current buffer, which is used for reading/writing the buffer from/to a file: - dos <CR> <NL> + dos <CR><NL> unix <NL> mac <CR> When "dos" is used, CTRL-Z at the end of a file is ignored. @@ -2970,7 +2979,7 @@ A jump table for the options with a short description can be found at |Q_op|. *'go-v'* 'v' Use a vertical button layout for dialogs. When not included, a horizontal layout is preferred, but when it doesn't fit a - vertical layout is used anyway. + vertical layout is used anyway. Not supported in GTK 3. *'go-p'* 'p' Use Pointer callbacks for X11 GUI. This is required for some window managers. If the cursor is not blinking or hollow at @@ -3013,7 +3022,7 @@ A jump table for the options with a short description can be found at |Q_op|. < *'helpfile'* *'hf'* -'helpfile' 'hf' string (default (MSDOS) "$VIMRUNTIME\doc\help.txt" +'helpfile' 'hf' string (default (MS-Windows) "$VIMRUNTIME\doc\help.txt" (others) "$VIMRUNTIME/doc/help.txt") global Name of the main help file. All distributed help files should be @@ -3420,7 +3429,8 @@ A jump table for the options with a short description can be found at |Q_op|. Keywords are used in searching and recognizing with many commands: "w", "*", "[i", etc. It is also used for "\k" in a |pattern|. See 'isfname' for a description of the format of this option. For '@' - characters above 255 check the "word" character class. + characters above 255 check the "word" character class (any character + that is not white space or punctuation). For C programs you could use "a-z,A-Z,48-57,_,.,-,>". For a help file it is set to all non-blank printable characters except '*', '"' and '|' (so that CTRL-] on a command finds the help for that @@ -3527,8 +3537,8 @@ A jump table for the options with a short description can be found at |Q_op|. be able to execute Normal mode commands. This is the opposite of the 'keymap' option, where characters are mapped in Insert mode. - Also consider resetting 'langremap' to avoid 'langmap' applies to - characters resulting from a mapping. + Also consider setting 'langremap' to off, to prevent 'langmap' from + applying to characters resulting from a mapping. This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. @@ -3545,7 +3555,7 @@ A jump table for the options with a short description can be found at |Q_op|. characters. Example: "abc;ABC" Example: "aA,fgh;FGH,cCdDeE" Special characters need to be preceded with a backslash. These are - ";", ',' and backslash itself. + ";", ',', '"', '|' and backslash itself. This will allow you to activate vim actions without having to switch back and forth between the languages. Your language characters will @@ -3719,8 +3729,10 @@ A jump table for the options with a short description can be found at |Q_op|. *lcs-lead* lead:c Character to show for leading spaces. When omitted, leading spaces are blank. Overrides the "space" - setting for leading spaces. - *lcs-trail* + setting for leading spaces. You can combine it with + "tab:", for example: > + :set listchars+=tab:>-,lead:. +< *lcs-trail* trail:c Character to show for trailing spaces. When omitted, trailing spaces are blank. Overrides the "space" setting for trailing spaces. @@ -3769,6 +3781,8 @@ A jump table for the options with a short description can be found at |Q_op|. Only switch it off when working with old Vi scripts. In any other situation write patterns that work when 'magic' is on. Include "\M" when you want to |/\M|. + In |Vim9| script the value of 'magic' is ignored, patterns behave like + it is always set. *'makeef'* *'mef'* 'makeef' 'mef' string (default: "") @@ -3827,7 +3841,7 @@ A jump table for the options with a short description can be found at |Q_op|. jump between two double quotes. The characters must be separated by a colon. The pairs must be separated by a comma. Example for including '<' and - '>' (HTML): > + '>' (for HTML): > :set mps+=<:> < A more exotic example, to jump between the '=' and ';' in an @@ -3994,7 +4008,7 @@ A jump table for the options with a short description can be found at |Q_op|. the |more-prompt|. When this option is off there are no pauses, the listing continues until finished. - *'mouse'* *E538* + *'mouse'* 'mouse' string (default "") global @@ -4205,6 +4219,15 @@ A jump table for the options with a short description can be found at |Q_op|. bin If included, numbers starting with "0b" or "0B" will be considered to be binary. Example: Using CTRL-X on "0b1000" subtracts one, resulting in "0b0111". + unsigned If included, numbers are recognized as unsigned. Thus a + leading dash or negative sign won't be considered as part of + the number. Examples: + Using CTRL-X on "2020" in "9-2020" results in "9-2019" + (without "unsigned" it would become "9-2021"). + Using CTRL-A on "2020" in "9-2020" results in "9-2021" + (without "unsigned" it would become "9-2019"). + Using CTRL-X on "0" or CTRL-A on "18446744073709551615" + (2^64 - 1) has no effect, overflow is prevented. Numbers which simply begin with a digit in the range 1-9 are always considered decimal. This also happens for numbers that are not recognized as octal or hex. @@ -4747,7 +4770,7 @@ A jump table for the options with a short description can be found at |Q_op|. screen. If the statusline is given by 'statusline' (i.e. not empty), this option takes precedence over 'ruler' and 'rulerformat' If the number of characters displayed is different from the number of - bytes in the text (e.g., for a TAB or a multi-byte character), both + bytes in the text (e.g., for a TAB or a multibyte character), both the text column (byte number) and the screen column are shown, separated with a dash. For an empty line "0-1" is shown. @@ -5166,8 +5189,7 @@ A jump table for the options with a short description can be found at |Q_op|. security reasons. *'shell'* *'sh'* *E91* -'shell' 'sh' string (default $SHELL or "sh", - Windows: "cmd.exe") +'shell' 'sh' string (default $SHELL or "sh", Win32: "cmd.exe") global Name of the shell to use for ! and :! commands. When changing the value also check these options: 'shellpipe', 'shellslash' @@ -5176,8 +5198,8 @@ A jump table for the options with a short description can be found at |Q_op|. See |option-backslash| about including spaces and backslashes. Environment variables are expanded |:set_env|. - If the name of the shell contains a space, you might need to enclose - it in quotes. Example: > + If the name of the shell contains a space, you need to enclose it in + quotes. Example with quotes: > :set shell=\"c:\program\ files\unix\sh.exe\"\ -f < Note the backslash before each quote (to avoid starting a comment) and each space (to avoid ending the option value), so better use |:let-&| @@ -5218,9 +5240,9 @@ A jump table for the options with a short description can be found at |Q_op|. 'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/s /c") global Flag passed to the shell to execute "!" and ":!" commands; e.g., - `bash.exe -c ls` or `cmd.exe /s /c "dir"`. For Windows - systems, the default is set according to the value of 'shell', to - reduce the need to set this option by the user. + `bash.exe -c ls` or `cmd.exe /s /c "dir"`. For MS-Windows, the + default is set according to the value of 'shell', to reduce the need + to set this option by the user. On Unix it can have more than one flag. Each white space separated part is passed as an argument to the shell command. See |option-backslash| about including spaces and backslashes. @@ -5230,7 +5252,8 @@ A jump table for the options with a short description can be found at |Q_op|. security reasons. *'shellpipe'* *'sp'* -'shellpipe' 'sp' string (default ">", "| tee", "|& tee" or "2>&1| tee") +'shellpipe' 'sp' string (default ">", ">%s 2>&1", "| tee", "|& tee" or + "2>&1| tee") global String to be used to put the output of the ":make" command in the error file. See also |:make_makeprg|. See |option-backslash| about @@ -5238,15 +5261,15 @@ A jump table for the options with a short description can be found at |Q_op|. The name of the temporary file can be represented by "%s" if necessary (the file name is appended automatically if no %s appears in the value of this option). - For Windows the default is ">". The output is directly saved in a file - and not echoed to the screen. - For Unix the default it "| tee". The stdout of the compiler is saved + For MS-Windows the default is ">%s 2>&1". The output is directly + saved in a file and not echoed to the screen. + For Unix the default is "| tee". The stdout of the compiler is saved in a file and echoed to the screen. If the 'shell' option is "csh" or "tcsh" after initializations, the default becomes "|& tee". If the - 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the - default becomes "2>&1| tee". This means that stderr is also included. - Before using the 'shell' option a path is removed, thus "/bin/sh" uses - "sh". + 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta", + "bash" or "fish" the default becomes "2>&1| tee". This means that + stderr is also included. Before using the 'shell' option a path is + removed, thus "/bin/sh" uses "sh". The initialization of this option is done after reading the vimrc and the other initializations, so that when the 'shell' option is set there, the 'shellpipe' option changes automatically, unless it was @@ -5286,13 +5309,13 @@ A jump table for the options with a short description can be found at |Q_op|. The name of the temporary file can be represented by "%s" if necessary (the file name is appended automatically if no %s appears in the value of this option). - The default is ">". For Unix, if the 'shell' option is "csh", "tcsh" - or "zsh" during initializations, the default becomes ">&". If the - 'shell' option is "sh", "ksh" or "bash" the default becomes - ">%s 2>&1". This means that stderr is also included. - For Win32, the Unix checks are done and additionally "cmd" is checked - for, which makes the default ">%s 2>&1". Also, the same names with - ".exe" appended are checked for. + The default is ">". For Unix, if the 'shell' option is "csh" or + "tcsh" during initializations, the default becomes ">&". If the + 'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh", "zsh-beta", + "bash" or "fish", the default becomes ">%s 2>&1". This means that + stderr is also included. For Win32, the Unix checks are done and + additionally "cmd" is checked for, which makes the default ">%s 2>&1". + Also, the same names with ".exe" appended are checked for. The initialization of this option is done after reading the vimrc and the other initializations, so that when the 'shell' option is set there, the 'shellredir' option changes automatically unless it was @@ -5305,11 +5328,11 @@ A jump table for the options with a short description can be found at |Q_op|. *'shellslash'* *'ssl'* *'noshellslash'* *'nossl'* 'shellslash' 'ssl' boolean (default off) global - {only for Windows} + {only for MS-Windows} When set, a forward slash is used when expanding file names. This is - useful when a Unix-like shell is used instead of command.com or - cmd.exe. Backward slashes can still be typed, but they are changed to - forward slashes by Vim. + useful when a Unix-like shell is used instead of cmd.exe. Backward + slashes can still be typed, but they are changed to forward slashes by + Vim. Note that setting or resetting this option has no effect for some existing file names, thus this option needs to be set before opening any file for best results. This might change in the future. @@ -5887,8 +5910,8 @@ A jump table for the options with a short description can be found at |Q_op|. N N Printer page number. (Only works in the 'printheader' option.) l N Line number. L N Number of lines in buffer. - c N Column number. - v N Virtual column number. + c N Column number (byte index). + v N Virtual column number (screen column). V N Virtual column number as -{num}. Not displayed if equal to 'c'. p N Percentage through file in lines as in |CTRL-G|. P S Percentage through file of displayed window. This is like the @@ -5897,7 +5920,9 @@ A jump table for the options with a short description can be found at |Q_op|. a S Argument list status as in default title. ({current} of {max}) Empty if the argument file count is zero or one. { NF Evaluate expression between '%{' and '}' and substitute result. - Note that there is no '%' before the closing '}'. + Note that there is no '%' before the closing '}'. The + expression cannot contain a '}' character, call a function to + work around that. See |stl-%{| below. ( - Start of item group. Can be used for setting the width and alignment of a section. Must be followed by %) somewhere. ) - End of item group. No width fields allowed. @@ -5960,13 +5985,13 @@ A jump table for the options with a short description can be found at |Q_op|. :set statusline=...%(\ [%M%R%H]%)... < Beware that an expression is evaluated each and every time the status line is displayed. - *g:actual_curbuf* *g:actual_curwin* - The current buffer and current window will be set temporarily to that - of the window (and buffer) whose statusline is currently being drawn. - The expression will evaluate in this context. The variable - "g:actual_curbuf" is set to the `bufnr()` number of the real current - buffer and "g:actual_curwin" to the |window-ID| of the real current - window. These values are strings. + *stl-%{* *g:actual_curbuf* *g:actual_curwin* + While evaluating %{} the current buffer and current window will be set + temporarily to that of the window (and buffer) whose statusline is + currently being drawn. The expression will evaluate in this context. + The variable "g:actual_curbuf" is set to the `bufnr()` number of the + real current buffer and "g:actual_curwin" to the |window-ID| of the + real current window. These values are strings. The 'statusline' option will be evaluated in the |sandbox| if set from a modeline, see |sandbox-option|. @@ -6504,8 +6529,8 @@ A jump table for the options with a short description can be found at |Q_op|. 'undolevels' 'ul' number (default 1000) global or local to buffer |global-local| Maximum number of changes that can be undone. Since undo information - is kept in memory, higher numbers will cause more memory to be used - (nevertheless, a single change can use an unlimited amount of memory). + is kept in memory, higher numbers will cause more memory to be used. + Nevertheless, a single change can already use a large amount of memory. Set to 0 for Vi compatibility: One level of undo and "u" undoes itself: > set ul=0 @@ -6608,7 +6633,7 @@ A jump table for the options with a short description can be found at |Q_op|. >= 14 Anything pending in a ":finally" clause. >= 15 Every executed Ex command from a script (truncated at 200 characters). - >= 16 Every executed Ex command + >= 16 Every executed Ex command. This option can also be set with the "-V" argument. See |-V|. This option is also set by the |:verbose| command. @@ -6713,8 +6738,8 @@ A jump table for the options with a short description can be found at |Q_op|. ":map <BS> X" to make backspace delete the character in front of the cursor. When 'l' is included and it is used after an operator at the end of a - line then it will not move to the next line. This makes "dl", "cl", - "yl" etc. work normally. + line (not an empty line) then it will not move to the next line. This + makes "dl", "cl", "yl" etc. work normally. *'wildchar'* *'wc'* 'wildchar' 'wc' number (Vim default: <Tab>, Vi default: CTRL-E) @@ -6808,23 +6833,31 @@ A jump table for the options with a short description can be found at |Q_op|. part specifies what to do for each consecutive use of 'wildchar'. The first part specifies the behavior for the first use of 'wildchar', The second part for the second use, etc. - These are the possible values for each part: + + Each part consists of a colon separated list consisting of the + following possible values: "" Complete only the first match. "full" Complete the next full match. After the last match, the original string is used and then the first match - again. + again. Will also start 'wildmenu' if it is enabled. "longest" Complete till longest common string. If this doesn't result in a longer string, use the next part. - "longest:full" Like "longest", but also start 'wildmenu' if it is - enabled. "list" When more than one match, list all matches. + "lastused" When completing buffer names and more than one buffer + matches, sort buffers by time last used (other than + the current buffer). + When there is only a single match, it is fully completed in all cases. + + Examples of useful colon-separated values: + "longest:full" Like "longest", but also start 'wildmenu' if it is + enabled. Will not complete to the next full match. "list:full" When more than one match, list all matches and complete first match. "list:longest" When more than one match, list all matches and complete till longest common string. - "list:lastused" When more than one buffer matches, sort buffers - by time last used (other than the current buffer). - When there is only a single match, it is fully completed in all cases. + "list:lastused" When more than one buffer matches, list all matches + and sort buffers by time last used (other than the + current buffer). Examples: > :set wildmode=full @@ -6882,15 +6915,15 @@ A jump table for the options with a short description can be found at |Q_op|. *'window'* *'wi'* 'window' 'wi' number (default screen height - 1) global - Window height. Do not confuse this with the height of the Vim window, - use 'lines' for that. - Used for |CTRL-F| and |CTRL-B| when there is only one window and the - value is smaller than 'lines' minus one. The screen will scroll - 'window' minus two lines, with a minimum of one. + Window height used for |CTRL-F| and |CTRL-B| when there is only one + window and the value is smaller than 'lines' minus one. The screen + will scroll 'window' minus two lines, with a minimum of one. When 'window' is equal to 'lines' minus one CTRL-F and CTRL-B scroll in a much smarter way, taking care of wrapping lines. When resizing the Vim window, the value is smaller than 1 or more than or equal to 'lines' it will be set to 'lines' minus 1. + Note: Do not confuse this with the height of the Vim window, use + 'lines' for that. *'winheight'* *'wh'* *E591* 'winheight' 'wh' number (default 1) @@ -7049,6 +7082,8 @@ A jump table for the options with a short description can be found at |Q_op|. fail (and make sure not to exit Vim until the write was successful). See |backup-table| for another explanation. When the 'backupskip' pattern matches, a backup is not made anyway. + Depending on 'backupcopy' the backup is a new file or the original + file renamed (and a new file is written). *'writedelay'* *'wd'* 'writedelay' 'wd' number (default 0) diff --git a/runtime/doc/pattern.txt b/runtime/doc/pattern.txt index 7129c6cd58..e74f3b72bf 100644 --- a/runtime/doc/pattern.txt +++ b/runtime/doc/pattern.txt @@ -219,7 +219,7 @@ This is like executing two search commands after each other, except that: *last-pattern* The last used pattern and offset are remembered. They can be used to repeat the search, possibly in another direction or with another count. Note that -two patterns are remembered: One for 'normal' search commands and one for the +two patterns are remembered: One for "normal" search commands and one for the substitute command ":s". Each time an empty pattern is given, the previously used pattern is used. However, if there is no previous search command, a previous substitute pattern is used, if possible. @@ -351,8 +351,8 @@ For starters, read chapter 27 of the user manual |usr_27.txt|. */atom* 5. An atom can be one of a long list of items. Many atoms match one character in the text. It is often an ordinary character or a character class. - Braces can be used to make a pattern into an atom. The "\z(\)" construct - is only for syntax highlighting. + Parentheses can be used to make a pattern into an atom. The "\z(\)" + construct is only for syntax highlighting. atom ::= ordinary-atom |/ordinary-atom| or \( pattern \) |/\(| @@ -384,15 +384,19 @@ the pattern will not match. This is only useful when debugging Vim. ============================================================================== 3. Magic */magic* -Some characters in the pattern are taken literally. They match with the same -character in the text. When preceded with a backslash however, these -characters get a special meaning. +Some characters in the pattern, such as letters, are taken literally. They +match exactly the same character in the text. When preceded with a backslash +however, these characters may get a special meaning. For example, "a" matches +the letter "a", while "\a" matches any alphabetic character. Other characters have a special meaning without a backslash. They need to be -preceded with a backslash to match literally. +preceded with a backslash to match literally. For example "." matches any +character while "\." matches a dot. If a character is taken literally or not depends on the 'magic' option and the -items mentioned next. +items in the pattern mentioned next. The 'magic' option should always be set, +but it can be switched off for Vi compatibility. We mention the effect of +'nomagic' here for completeness, but we recommend against using that. */\m* */\M* Use of "\m" makes the pattern after it be interpreted as if 'magic' is set, ignoring the actual value of the 'magic' option. @@ -401,30 +405,28 @@ Use of "\M" makes the pattern after it be interpreted as if 'nomagic' is used. Use of "\v" means that after it, all ASCII characters except '0'-'9', 'a'-'z', 'A'-'Z' and '_' have special meaning: "very magic" -Use of "\V" means that after it, only a backslash and terminating character -(usually / or ?) have special meaning: "very nomagic" +Use of "\V" means that after it, only a backslash and the terminating +character (usually / or ?) have special meaning: "very nomagic" Examples: after: \v \m \M \V matches ~ 'magic' 'nomagic' - $ $ $ \$ matches end-of-line - . . \. \. matches any character + a a a a literal 'a' + \a \a \a \a any alphabetic character + . . \. \. any character + \. \. . . literal dot + $ $ $ \$ end-of-line * * \* \* any number of the previous atom ~ ~ \~ \~ latest substitute string - () \(\) \(\) \(\) grouping into an atom - | \| \| \| separating alternatives - \a \a \a \a alphabetic character + () \(\) \(\) \(\) group as an atom + | \| \| \| nothing: separates alternatives \\ \\ \\ \\ literal backslash - \. \. . . literal dot - \{ { { { literal '{' - a a a a literal 'a' + \{ { { { literal curly brace {only Vim supports \m, \M, \v and \V} -It is recommended to always keep the 'magic' option at the default setting, -which is 'magic'. This avoids portability problems. To make a pattern immune -to the 'magic' option being set or not, put "\m" or "\M" at the start of the -pattern. +If you want to you can make a pattern immune to the 'magic' option being set +or not by putting "\m" or "\M" at the start of the pattern. ============================================================================== 4. Overview of pattern items *pattern-overview* @@ -666,7 +668,7 @@ overview. Note that using "\&" works the same as using "\@=": "foo\&.." is the same as "\(foo\)\@=..". But using "\&" is easier, you don't need the - braces. + parentheses. */\@!* @@ -787,11 +789,12 @@ An ordinary atom can be: ^beep( the start of the C function "beep" (probably). */\^* -\^ Matches literal '^'. Can be used at any position in the pattern. +\^ Matches literal '^'. Can be used at any position in the pattern, but + not inside []. */\_^* \_^ Matches start-of-line. |/zero-width| Can be used at any position in - the pattern. + the pattern, but not inside []. Example matches ~ \_s*\_^foo white space and blank lines and then "foo" at start-of-line @@ -802,12 +805,13 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on): |/zero-width| */\$* -\$ Matches literal '$'. Can be used at any position in the pattern. +\$ Matches literal '$'. Can be used at any position in the pattern, but + not inside []. */\_$* \_$ Matches end-of-line. |/zero-width| Can be used at any position in the - pattern. Note that "a\_$b" never matches, since "b" cannot match an - end-of-line. Use "a\nb" instead |/\n|. + pattern, but not inside []. Note that "a\_$b" never matches, since + "b" cannot match an end-of-line. Use "a\nb" instead |/\n|. Example matches ~ foo\_$\_s* "foo" at end-of-line and following white space and blank lines @@ -830,8 +834,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on): |/zero-width| */\zs* -\zs Matches at any position, and sets the start of the match there: The - next char is the first char of the whole match. |/zero-width| +\zs Matches at any position, but not inside [], and sets the start of the + match there: The next char is the first char of the whole match. + |/zero-width| Example: > /^\s*\zsif < matches an "if" at the start of a line, ignoring white space. @@ -842,8 +847,9 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on): This cannot be followed by a multi. *E888* */\ze* -\ze Matches at any position, and sets the end of the match there: The - previous char is the last char of the whole match. |/zero-width| +\ze Matches at any position, but not inside [], and sets the end of the + match there: The previous char is the last char of the whole match. + |/zero-width| Can be used multiple times, the last one encountered in a matching branch is used. Example: "end\ze\(if\|for\)" matches the "end" in "endif" and @@ -928,7 +934,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on): These three can be used to match specific columns in a buffer or string. The "23" can be any column number. The first column is 1. Actually, the column is the byte number (thus it's not exactly right - for multi-byte characters). + for multibyte characters). WARNING: When inserting or deleting text Vim does not automatically update the matches. This means Syntax highlighting quickly becomes wrong. @@ -983,7 +989,7 @@ Character classes: \p printable character (see 'isprint' option) */\p* \P like "\p", but excluding digits */\P* -NOTE: the above also work for multi-byte characters. The ones below only +NOTE: the above also work for multibyte characters. The ones below only match ASCII characters, as indicated by the range. *whitespace* *white-space* @@ -1054,8 +1060,8 @@ x A single character, with no special meaning, matches itself [] (with 'nomagic': \[]) */[]* */\[]* */\_[]* */collection* \_[] - A collection. This is a sequence of characters enclosed in brackets. - It matches any single character in the collection. + A collection. This is a sequence of characters enclosed in square + brackets. It matches any single character in the collection. Example matches ~ [xyz] any 'x', 'y' or 'z' [a-zA-Z]$ any alphabetic character at the end of a line @@ -1114,15 +1120,16 @@ x A single character, with no special meaning, matches itself *[:ident:]* [:ident:] identifier character (same as "\i") *[:keyword:]* [:keyword:] keyword character (same as "\k") *[:fname:]* [:fname:] file name character (same as "\f") - The brackets in character class expressions are additional to the - brackets delimiting a collection. For example, the following is a - plausible pattern for a Unix filename: "[-./[:alnum:]_~]\+" That is, - a list of at least one character, each of which is either '-', '.', - '/', alphabetic, numeric, '_' or '~'. + The square brackets in character class expressions are additional to + the square brackets delimiting a collection. For example, the + following is a plausible pattern for a UNIX filename: + "[-./[:alnum:]_~]\+". That is, a list of at least one character, + each of which is either '-', '.', '/', alphabetic, numeric, '_' or + '~'. These items only work for 8-bit characters, except [:lower:] and - [:upper:] also work for multi-byte characters when using the new + [:upper:] also work for multibyte characters when using the new regexp engine. See |two-engines|. In the future these items may - work for multi-byte characters. For now, to get all "alpha" + work for multibyte characters. For now, to get all "alpha" characters you can use: [[:lower:][:upper:]]. The "Func" column shows what library function is used. The @@ -1161,7 +1168,7 @@ x A single character, with no special meaning, matches itself \b <BS> \n line break, see above |/[\n]| \d123 decimal number of character - \o40 octal number of character up to 0377 + \o40 octal number of character up to 0o377 \x20 hexadecimal number of character up to 0xff \u20AC hex. number of multibyte character up to 0xffff \U1234 hex. number of multibyte character up to 0xffffffff @@ -1198,7 +1205,8 @@ x A single character, with no special meaning, matches itself \%d123 Matches the character specified with a decimal number. Must be followed by a non-digit. \%o40 Matches the character specified with an octal number up to 0377. - Numbers below 040 must be followed by a non-octal digit or a non-digit. + Numbers below 0o40 must be followed by a non-octal digit or a + non-digit. \%x2a Matches the character specified with up to two hexadecimal characters. \%u20AC Matches the character specified with up to four hexadecimal characters. @@ -1245,8 +1253,8 @@ When working with expression evaluation, a <NL> character in the pattern matches a <NL> in the string. The use of "\n" (backslash n) to match a <NL> doesn't work there, it only works to match text in the buffer. - *pattern-multi-byte* -Patterns will also work with multi-byte characters, mostly as you would + *pattern-multi-byte* *pattern-multibyte* +Patterns will also work with multibyte characters, mostly as you would expect. But invalid bytes may cause trouble, a pattern with an invalid byte will probably never match. @@ -1267,7 +1275,7 @@ not match in "caÌ€t" (where the a has the composing character 0x0300), but 0xe1, it does not have a compositing character). It does match "cat" (where the a is just an a). -When a composing character appears at the start of the pattern of after an +When a composing character appears at the start of the pattern or after an item that doesn't include the composing character, a match is found at any character that includes this composing character. diff --git a/runtime/doc/pi_netrw.txt b/runtime/doc/pi_netrw.txt index 7312ab721b..5adafd7877 100644 --- a/runtime/doc/pi_netrw.txt +++ b/runtime/doc/pi_netrw.txt @@ -437,9 +437,13 @@ settings are described below, in |netrw-browser-options|, and in *g:netrw_silent* =0 : transfers done normally =1 : transfers done silently - *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one + *g:netrw_use_errorwindow* =2: messages from netrw will use a popup window + Move the mouse and pause to remove the popup window. + (default value if popup windows are availble) + =1 : messages from netrw will use a separate one line window. This window provides reliable - delivery of messages. (default) + delivery of messages. + (default value if popup windows are not availble) =0 : messages from netrw will use echoerr ; messages don't always seem to show up this way, but one doesn't have to quit the window. @@ -725,6 +729,8 @@ just as easily as if they were local files! > See |netrw-activate| for more on how to encourage your vim to use plugins such as netrw. +For password-free use of scp:, see |netrw-ssh-hack|. + ============================================================================== 7. Ex Commands *netrw-ex* {{{1 @@ -1063,7 +1069,7 @@ QUICK HELP *netrw-quickhelp* {{{2 Reverse sorting order.........................|netrw-r| - *netrw-quickmap* *netrw-quickmaps* + *netrw-quickmap* *netrw-quickmaps* QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2 > --- ----------------- ---- @@ -1080,7 +1086,7 @@ QUICK REFERENCE: MAPS *netrw-browse-maps* {{{2 a Cycles between normal display, |netrw-a| hiding (suppress display of files matching g:netrw_list_hide) and showing (display only files which match g:netrw_list_hide) - c Make browsing directory the current directory |netrw-c| + cd Make browsing directory the current directory |netrw-cd| C Setting the editing window |netrw-C| d Make a directory |netrw-d| D Attempt to remove the file(s)/directory(ies) |netrw-D| @@ -2098,7 +2104,7 @@ the two directories the same, use the "cd" map (type cd). That map will set Vim's notion of the current directory to netrw's current browsing directory. -*netrw-c* : This map's name has been changed from "c" to cd (see |netrw-cd|). +|netrw-cd|: This map's name was changed from "c" to cd (see |netrw-cd|). This change was done to allow for |netrw-cb| and |netrw-cB| maps. Associated setting variable: |g:netrw_keepdir| @@ -2752,7 +2758,7 @@ your browsing preferences. (see also: |netrw-settings|) =0 keep the current directory the same as the browsing directory. The current browsing directory is contained in - b:netrw_curdir (also see |netrw-c|) + b:netrw_curdir (also see |netrw-cd|) *g:netrw_keepj* ="keepj" (default) netrw attempts to keep the |:jumps| table unaffected. @@ -3053,7 +3059,7 @@ your browsing preferences. (see also: |netrw-settings|) (see |netrw-c-tab|). *g:netrw_xstrlen* Controls how netrw computes string lengths, - including multibyte characters' string + including multi-byte characters' string length. (thanks to N Weibull, T Mechelynck) =0: uses Vim's built-in strlen() =1: number of codepoints (Latin a + combining @@ -3123,7 +3129,8 @@ a file using the local browser (by putting the cursor on it) and pressing Related topics: * To see what the current directory is, use |:pwd| - * To make the currently browsed directory the current directory, see |netrw-c| + * To make the currently browsed directory the current directory, see + |netrw-cd| * To automatically make the currently browsed directory the current directory, see |g:netrw_keepdir|. @@ -3798,9 +3805,15 @@ netrw: or http://vim.sourceforge.net/scripts/script.php?script_id=120 - Decho.vim is provided as a "vimball"; see |vimball-intro|. + Decho.vim is provided as a "vimball"; see |vimball-intro|. You + should edit the Decho.vba.gz file and source it in: > - 2. Edit the <netrw.vim> file by typing: > + vim Decho.vba.gz + :so % + :q +< + 2. To turn on debug tracing in netrw, then edit the <netrw.vim> + file by typing: > vim netrw.vim :DechoOn @@ -3822,14 +3835,34 @@ netrw: read/write your file over the network in a separate tab or server vim window. - To save the file, use > + Change the netrw.vimrc file to include the Decho plugin: > + + set nocp + so $HOME/.vim/plugin/Decho.vim + so $HOME/.vim/plugin/netrwPlugin.vim +< + You should continue to run vim with > + + vim -u netrw.vimrc --noplugins -i NONE [some path here] +< + to avoid entanglements with options and other plugins. + + To save the file: under linux, the output will be in a separate + remote server window; in it, just save the file with > + + :w! DBG + +< Under a vim that doesn't support clientserver, your debugging + output will appear in another tab: > :tabnext :set bt= :w! DBG +< + Furthermore, it'd be helpful if you would type > -< Furthermore, it'd be helpful if you would type > :Dsep <command> + < where <command> is the command you're about to type next, thereby making it easier to associate which part of the debugging trace is due to which command. @@ -3837,17 +3870,34 @@ netrw: Please send that information to <netrw.vim>'s maintainer along with the o/s you're using and the vim version that you're using (see |:version|) (remove the embedded NOSPAM first) > + NcampObell@SdrPchip.AorgM-NOSPAM < ============================================================================== 12. History *netrw-history* {{{1 + v170: Mar 11, 2020 * (reported by Reiner Herrmann) netrw+tree + would not hide with the ^\..* pattern + correctly. + * (Marcin Szamotulski) NetrwOptionRestore + did not restore options correctly that + had a single quote in the option string. + Apr 13, 2020 * implemented error handling via popup + windows (see |popup_beval()|) + Apr 30, 2020 * (reported by Manatsu Takahashi) while + using Lexplore, a modified file could + be overwritten. Sol'n: will not overwrite, + but will emit an |E37| (although one cannot + add an ! to override) + Jun 07, 2020 * (reported by Jo Totland) repeatedly invoking + :Lexplore and quitting it left unused + hidden buffers. Netrw will now set netrw + buffers created by :Lexplore to |bh|=wipe. v169: Dec 20, 2019 * (reported by amkarthik) that netrw's x (|netrw-x|) would throw an error when attempting to open a local directory. v168: Dec 12, 2019 * scp timeout error message not reported, hopefully now fixed (Shane Xb Qian) - v167: Nov 29, 2019 * netrw does a save&restore on @* and @+. That causes problems with the clipboard. Now restores occurs only if @* or @+ have @@ -4305,4 +4355,4 @@ netrw: ============================================================================== Modelines: {{{1 - vim:tw=78:ts=8:noet:ft=help:norl:fdm=marker +vim:tw=78:ts=8:ft=help:noet:norl:fdm=marker diff --git a/runtime/doc/pi_zip.txt b/runtime/doc/pi_zip.txt index 7a5e7166ba..c715644847 100644 --- a/runtime/doc/pi_zip.txt +++ b/runtime/doc/pi_zip.txt @@ -4,7 +4,7 @@ | Zip File Interface | +====================+ -Author: Charles E. Campbell <NdrOchip@ScampbellPfamily.AbizM> +Author: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> (remove NOSPAM from Campbell's email first) Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* The VIM LICENSE (see |copyright|) applies to the files in this @@ -33,10 +33,11 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* also write to the file. Currently, one may not make a new file in zip archives via the plugin. + COMMANDS~ *zip-x* - x : may extract a listed file when the cursor is atop it + x : extract a listed file when the cursor is atop it - OPTIONS + OPTIONS~ *g:zip_nomax* @@ -101,6 +102,10 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* ============================================================================== 4. History *zip-history* {{{1 + v29 Apr 02, 2017 * (Klartext) reported that an encrypted zip file could + opened but the swapfile held unencrypted contents. + The solution is to edit the contents of a zip file + using the |:noswapfile| modifier. v28 Oct 08, 2014 * changed the sanity checks for executables to reflect the command actually to be attempted in zip#Read() and zip#Write() @@ -149,4 +154,4 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright* v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing ============================================================================== -vim:tw=78:ts=8:noet:ft=help:fdm=marker +vim:tw=78:ts=8:ft=help:noet:norl:fdm=marker diff --git a/runtime/doc/print.txt b/runtime/doc/print.txt index d744735b96..e7de5b9ee3 100644 --- a/runtime/doc/print.txt +++ b/runtime/doc/print.txt @@ -101,7 +101,7 @@ If 'printencoding' is empty or Vim cannot find the file then it will use encoding file. If Vim is unable to find a character encoding file then it will use the "latin1" print character encoding file. -When 'encoding' is set to a multi-byte encoding, Vim will try to convert +When 'encoding' is set to a multibyte encoding, Vim will try to convert characters to the printing encoding for printing (if 'printencoding' is empty then the conversion will be to latin1). Conversion to a printing encoding other than latin1 will require Vim to be compiled with the |+iconv| feature. @@ -251,7 +251,7 @@ Japanese text you would do the following; > :set printmbcharset=JIS_X_1983 If 'printmbcharset' is not one of the above values then it is assumed to -specify a custom multi-byte character set and no check will be made that it is +specify a custom multibyte character set and no check will be made that it is compatible with the value for 'printencoding'. Vim will look for a file defining the character set in the "print" directory in 'runtimepath'. @@ -286,7 +286,7 @@ printing of characters in the ASCII code range. a:yes Use ASCII character set for codes in the ASCII a:no (default) code range. -The following is an example of specifying two multi-byte fonts, one for normal +The following is an example of specifying two multibyte fonts, one for normal and italic printing and one for bold and bold-italic printing, and using Courier to print codes in the ASCII code range but using the national character set: > @@ -402,10 +402,10 @@ There are currently a number of limitations with PostScript printing: possible to get all the characters in an encoding to print by installing a new version of the Courier font family. -- Multi-byte support - Currently Vim will try to convert multi-byte characters +- Multi-byte support - Currently Vim will try to convert multibyte characters to the 8-bit encoding specified by 'printencoding' (or latin1 if it is empty). Any characters that are not successfully converted are shown as - unknown characters. Printing will fail if Vim cannot convert the multi-byte + unknown characters. Printing will fail if Vim cannot convert the multibyte to the 8-bit encoding. ============================================================================== @@ -490,7 +490,7 @@ print ASCII text using the national character set you may see some unexpected characters. If you want true ASCII code printing then you need to configure Vim to output ASCII characters for the ASCII code range with 'printmbfont'. -It is possible to define your own multi-byte character set although this +It is possible to define your own multibyte character set although this should not be attempted lightly. A discussion on the process if beyond the scope of these help files. You can find details on CMap (character map) files in the document 'Adobe CMap and CIDFont Files Specification, Version 1.0', @@ -597,22 +597,15 @@ X11 http://www.cs.wisc.edu/~ghost/gv/ -Windows +MS-Windows - GSview. Obtainable from: http://www.cs.wisc.edu/~ghost/gsview/ -DOS - -- ps_view. Obtainable from: - - ftp://ftp.pg.gda.pl/pub/TeX/support/ps_view/ - ftp://ftp.dante.de/tex-archive/support/ps_view/ - Linux -- GSview. Linux version of the popular Windows previewer. +- GSview. Linux version of the popular MS-Windows previewer. Obtainable from: http://www.cs.wisc.edu/~ghost/gsview/ diff --git a/runtime/doc/quickfix.txt b/runtime/doc/quickfix.txt index fab3b11430..db6b759af6 100644 --- a/runtime/doc/quickfix.txt +++ b/runtime/doc/quickfix.txt @@ -225,8 +225,7 @@ processing a quickfix or location list command, it will be aborted. e.g., a compiler will not compile the same file again, `git commit` will abort the committing process, `fc` (built-in for shells like bash and zsh) will not - execute the command, etc. will not compile the same - file again. + execute the command, etc. {N} can also be zero, in which case Vim exits normally. WARNING: All changes in files are lost. It works like @@ -311,7 +310,7 @@ processing a quickfix or location list command, it will be aborted. *:cex* *:cexpr* *E777* :cex[pr][!] {expr} Create a quickfix list using the result of {expr} and jump to the first error. - If {expr} is a String, then each new-line terminated + If {expr} is a String, then each newline terminated line in the String is processed using the global value of 'errorformat' and the result is added to the quickfix list. @@ -484,7 +483,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST: etc. < When the current file can't be |abandon|ed and the [!] is not present, the command fails. - When an error is detected execution stops. + When going to the next entry fails execution stops. The last buffer (or where an error occurred) becomes the current buffer. {cmd} can contain '|' to concatenate several commands. @@ -926,11 +925,11 @@ or simpler > "$*" can be given multiple times, for example: > :set makeprg=gcc\ -o\ $*\ $* -The 'shellpipe' option defaults to ">" on Windows. This means that the output -of the compiler is saved in a file and not shown on the screen directly. For -Unix "| tee" is used. The compiler output is shown on the screen and saved in -a file the same time. Depending on the shell used "|& tee" or "2>&1| tee" is -the default, so stderr output will be included. +The 'shellpipe' option defaults to ">%s 2>&1" for Win32. +This means that the output of the compiler is saved in a file and not shown on +the screen directly. For Unix "| tee" is used. The compiler output is shown +on the screen and saved in a file the same time. Depending on the shell used +"|& tee" or "2>&1| tee" is the default, so stderr output will be included. If 'shellpipe' is empty, the {errorfile} part will be omitted. This is useful for compilers that write to an errorfile themselves. @@ -995,8 +994,6 @@ commands can be combined to create a NewGrep command: > the error list to the matches. Files matching 'wildignore' are ignored; files in 'suffixes' are searched last. - Without the 'g' flag each line is added only once. - With 'g' every match is added. {pattern} is a Vim search pattern. Instead of enclosing it in / any non-ID character (see @@ -1007,6 +1004,28 @@ commands can be combined to create a NewGrep command: > 'smartcase' is not used. If {pattern} is empty (e.g. // is specified), the last used search pattern is used. |last-pattern| + + Flags: + 'g' Without the 'g' flag each line is added only + once. With 'g' every match is added. + + 'j' Without the 'j' flag Vim jumps to the first + match. With 'j' only the quickfix list is + updated. With the [!] any changes in the current + buffer are abandoned. + + 'f' When the 'f' flag is specified, fuzzy string + matching is used to find matching lines. In this + case, {pattern} is treated as a literal string + instead of a regular expression. See + |matchfuzzy()| for more info about fuzzy + matching. + + |QuickFixCmdPre| and |QuickFixCmdPost| are triggered. + A file that is opened for matching may use a buffer + number, but it is reused if possible to avoid + consuming buffer numbers. + :{count}vim[grep] ... When a number is put before the command this is used as the maximum number of matches to find. Use @@ -1014,11 +1033,6 @@ commands can be combined to create a NewGrep command: > Useful if you only want to check if there is a match and quit quickly when it's found. - Without the 'j' flag Vim jumps to the first match. - With 'j' only the quickfix list is updated. - With the [!] any changes in the current buffer are - abandoned. - Every second or so the searched file name is displayed to give you an idea of the progress made. Examples: > @@ -1090,7 +1104,7 @@ id-utils) in a similar way to its compiler integration (see |:make| above). allowed with |:bufdo|. An example that uses the argument list and avoids errors for files without matches: > - :silent argdo try + :silent argdo try \ | grepadd! something % \ | catch /E480:/ \ | endtry" @@ -1266,7 +1280,7 @@ You can force the compiler to ignore makefiles by defining b:tex_ignore_makefile or g:tex_ignore_makefile variable (they are checked for existence only). -If the compiler chose not to use make, it need to choose a right program for +If the compiler chose not to use make, it needs to choose a right program for processing your input. If b:tex_flavor or g:tex_flavor (in this precedence) variable exists, it defines TeX flavor for :make (actually, this is the name of executed command), and if both variables do not exist, it defaults to @@ -1658,7 +1672,7 @@ special problem here is that it doesn't print information on leaving the directory and that it doesn't print the absolute path. To solve the problem with relative paths and missing "leave directory" -messages Vim uses following algorithm: +messages Vim uses the following algorithm: 1) Check if the given directory is a subdirectory of the current directory. If this is true, store it as the current directory. diff --git a/runtime/doc/quickref.txt b/runtime/doc/quickref.txt index 4a47fd4b57..fb20a583c9 100644 --- a/runtime/doc/quickref.txt +++ b/runtime/doc/quickref.txt @@ -292,7 +292,7 @@ moving around: |i_CTRL-A| CTRL-A insert previously inserted text |i_CTRL-@| CTRL-@ insert previously inserted text and stop Insert mode -|i_CTRL-R| CTRL-R {0-9a-z%#:.-="} insert the contents of a register +|i_CTRL-R| CTRL-R {register} insert the contents of a register |i_CTRL-N| CTRL-N insert next match of identifier before the cursor @@ -621,7 +621,7 @@ Short explanation of each option: *option-list* 'binary' 'bin' read/write/edit file in binary mode 'bomb' prepend a Byte Order Mark to the file 'breakat' 'brk' characters that may cause a line break -'breakindent' 'bri' wrapped line repeats indent +'breakindent' 'bri' wrapped line repeats indent 'breakindentopt' 'briopt' settings for 'breakindent' 'browsedir' 'bsdir' which directory to start browsing in 'bufhidden' 'bh' what to do when buffer is no longer in window @@ -680,7 +680,7 @@ Short explanation of each option: *option-list* 'eventignore' 'ei' autocommand events that are ignored 'expandtab' 'et' use spaces when <Tab> is inserted 'exrc' 'ex' read .nvimrc and .exrc in the current directory -'fileencoding' 'fenc' file encoding for multi-byte text +'fileencoding' 'fenc' file encoding for multibyte text 'fileencodings' 'fencs' automatically detected character encodings 'fileformat' 'ff' file format used for file I/O 'fileformats' 'ffs' automatically detected values for 'fileformat' @@ -869,6 +869,7 @@ Short explanation of each option: *option-list* 'spellcapcheck' 'spc' pattern to locate end of a sentence 'spellfile' 'spf' files where |zg| and |zw| store words 'spelllang' 'spl' language(s) to do spell checking for +'spelloptions' 'spo' options for spell checking 'spellsuggest' 'sps' method(s) used to suggest spelling corrections 'splitbelow' 'sb' new window from split is below the current one 'splitright' 'spr' new window is put right of the current one @@ -1014,8 +1015,7 @@ Short explanation of each option: *option-list* three digits) |c_CTRL-K| CTRL-K {char1} {char2} enter digraph (See |Q_di|) -|c_CTRL-R| CTRL-R {0-9a-z"%#:-=} - insert the contents of a register +|c_CTRL-R| CTRL-R {register} insert the contents of a register |c_<Left>| <Left>/<Right> cursor left/right |c_<S-Left>| <S-Left>/<S-Right> cursor one word left/right diff --git a/runtime/doc/recover.txt b/runtime/doc/recover.txt index 7789d4bdbc..9ef5a37452 100644 --- a/runtime/doc/recover.txt +++ b/runtime/doc/recover.txt @@ -56,13 +56,13 @@ Disadvantages: directories (although Vim tries to avoid that by comparing the path name). This will result in bogus ATTENTION warning messages. - When you use your home directory, and somebody else tries to edit the same - file, he will not see your swap file and will not get the ATTENTION warning - message. + file, that user will not see your swap file and will not get the ATTENTION + warning message. If you want to put swap files in a fixed place, put a command resembling the following ones in your vimrc: :set dir=~/tmp (for Unix) - :set dir=c:\\tmp (for Windows) + :set dir=c:\\tmp (for Win32) This is also very handy when editing files on floppy. Of course you will have to create that "tmp" directory for this to work! @@ -106,8 +106,9 @@ If you want to make sure that your changes are in the swap file use this command: *:pre* *:preserve* *E313* *E314* -:pre[serve] Write all text for all buffers into swap file. The - original file is no longer needed for recovery. +:pre[serve] Write all text for the current buffer into its swap + file. The original file is no longer needed for + recovery. This sets a flag in the current buffer. A Vim swap file can be recognized by the first six characters: "b0VIM ". After that comes the version number, e.g., "3.0". diff --git a/runtime/doc/repeat.txt b/runtime/doc/repeat.txt index 3a7337d2e8..b237d70760 100644 --- a/runtime/doc/repeat.txt +++ b/runtime/doc/repeat.txt @@ -70,7 +70,7 @@ The default for [range] is the whole buffer (1,$). Use "CTRL-C" to interrupt the command. If an error message is given for a line, the command for that line is aborted and the global command continues with the next marked or unmarked line. - *E147* + *E147* When the command is used recursively, it only works on one line. Giving a range is then not allowed. This is useful to find all lines that match a pattern and do not match another pattern: > @@ -117,6 +117,11 @@ q{0-9a-zA-Z"} Record typed characters into register {0-9a-zA-Z"} recorded macro and the yank will overwrite the recorded macro. + Note: The recording happens while you type, replaying + the register happens as if the keys come from a + mapping. This matters, for example, for undo, which + only syncs when commands were typed. + q Stops recording. Implementation note: The 'q' that stops recording is not stored in the register, unless it was the result @@ -129,7 +134,7 @@ q Stops recording. used. The register is executed like a mapping, that means that the difference between 'wildchar' and 'wildcharm' - applies. + applies, and undo might not be synced in the same way. For "@=" you are prompted to enter an expression. The result of the expression is then executed. See also |@:|. @@ -153,7 +158,7 @@ q Stops recording. [addr] (default is current line). :[addr]@ *:@@* -:[addr]@@ Repeat the previous :@{0-9a-z"}. First set cursor at +:[addr]@@ Repeat the previous :@{register}. First set cursor at line [addr] (default is current line). ============================================================================== @@ -206,10 +211,10 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. When {file} contains wildcards it is expanded to all matching files. Example: > - :runtime! plugin/*.vim + :runtime! plugin/**/*.vim < This is what Vim uses to load the plugin files when starting up. This similar command: > - :runtime plugin/*.vim + :runtime plugin/**/*.vim < would source the first file only. When 'verbose' is one or higher, there is a message @@ -248,6 +253,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|. directories are added to 'runtimepath'. This is useful in your .vimrc. The plugins will then be loaded during initialization, see |load-plugins|. + Note that for ftdetect scripts to be loaded + you will need to write `filetype plugin indent on` + AFTER all `packadd!` commands. Also see |pack-add|. @@ -366,7 +374,7 @@ nested as deep as the number of files that can be opened at one time (about You can use the "<sfile>" string (literally, this is not a special key) inside of the sourced file, in places where a file name is expected. It will be replaced by the file name of the sourced file. For example, if you have a -"other.vimrc" file in the same directory as your |init.vim| file, you can +"other.vimrc" file in the same directory as your |init.vim| file, you can source it from your |init.vim| file with this command: > :source <sfile>:h/other.vimrc @@ -388,7 +396,7 @@ because the <CR> from the first lines will be lost. On other systems, Vim expects ":source"ed files to end in a <NL>. These always work. If you are using a file with <CR><NL> <EOL>s (for example, a -file made on Windows), all lines will have a trailing <CR>. This may cause +file made on MS-Windows), all lines will have a trailing <CR>. This may cause problems for some commands (e.g., mappings). There is no automatic <EOL> detection, because it's common to start with a line that defines a mapping that ends in a <CR>, which will confuse the automaton. @@ -505,7 +513,7 @@ When Vim starts up, after processing your .vimrc, it scans all directories in directories are added to 'runtimepath'. Then all the plugins are loaded. See |packload-two-steps| for how these two steps can be useful. -In the example Vim will find "pack/foo/start/foobar/plugin/foo.vim" and adds +In the example Vim will find "pack/foo/start/foobar/plugin/foo.vim" and adds "~/.local/share/nvim/site/pack/foo/start/foobar" to 'runtimepath'. If the "foobar" plugin kicks in and sets the 'filetype' to "some", Vim will @@ -591,8 +599,8 @@ Creating Vim packages *package-create* This assumes you write one or more plugins that you distribute as a package. If you have two unrelated plugins you would use two packages, so that Vim -users can chose what they include or not. Or you can decide to use one -package with optional plugins, and tell the user to add the ones he wants with +users can choose what they include or not. Or you can decide to use one +package with optional plugins, and tell the user to add the preferred ones with `:packadd`. Decide how you want to distribute the package. You can create an archive or @@ -613,9 +621,9 @@ Your directory layout would be like this: opt/fooextra/doc/tags " help tags This allows for the user to do: > - mkdir ~/.local/share/nvim/site/pack/myfoobar - cd ~/.local/share/nvim/site/pack/myfoobar - git clone https://github.com/you/foobar.git + mkdir ~/.local/share/nvim/site/pack + cd ~/.local/share/nvim/site/pack + git clone https://github.com/you/foobar.git myfoobar Here "myfoobar" is a name that the user can choose, the only condition is that it differs from other packages. @@ -628,7 +636,7 @@ You could add this packadd command in one of your plugins, to be executed when the optional plugin is needed. Run the `:helptags` command to generate the doc/tags file. Including this -generated file in the package means that the user can drop the package in his +generated file in the package means that the user can drop the package in the pack directory and the help command works right away. Don't forget to re-run the command after changing the plugin help: > :helptags path/start/foobar/doc @@ -815,7 +823,7 @@ DEFINING BREAKPOINTS valid in the script where it has been defined and if that script is called from several other scripts, this will stop whenever that particular variable will become visible or - unaccessible again. + inaccessible again. The [lnum] is the line number of the breakpoint. Vim will stop at or after this line. When omitted line 1 is used. diff --git a/runtime/doc/rileft.txt b/runtime/doc/rileft.txt index 550a696de0..d45a2dce7e 100644 --- a/runtime/doc/rileft.txt +++ b/runtime/doc/rileft.txt @@ -64,7 +64,7 @@ o Invocations + 'rightleft' ('rl') sets window orientation to right-to-left. + 'delcombine' ('deco'), boolean, if editing UTF-8 encoded languages, allows one to remove a composing character which gets superimposed - on those that proceeded them (some languages require this). + on those that preceded them (some languages require this). + 'rightleftcmd' ('rlc') sets the command-line within certain modes (such as search) to be utilized in right-to-left orientation as well. diff --git a/runtime/doc/sign.txt b/runtime/doc/sign.txt index e3ba4ba181..e8ed29c1a4 100644 --- a/runtime/doc/sign.txt +++ b/runtime/doc/sign.txt @@ -42,8 +42,8 @@ When signs are defined for a file, Vim will automatically add a column of two characters to display them in. When the last sign is unplaced the column disappears again. This behavior can be changed with the 'signcolumn' option. -The color of the column is set with the SignColumn group |hl-SignColumn|. -Example to set the color: > +The color of the column is set with the SignColumn highlight group +|hl-SignColumn|. Example to set the color: > :highlight SignColumn guibg=darkgrey < @@ -68,9 +68,13 @@ other plugins using signs. *sign-priority* Each placed sign is assigned a priority value. When multiple signs are placed on the same line, the attributes of the sign with the highest priority is used -independent of the sign group. The default priority for a sign is 10. The +independently of the sign group. The default priority for a sign is 10. The priority is assigned at the time of placing a sign. +When two signs with the same priority are present, and one has an icon or text +in the signcolumn while the other has line highlighting, then both are +displayed. + When the line on which the sign is placed is deleted, the sign is moved to the next line (or the last line of the buffer, if there is no next line). When the delete is undone the sign does not move back. @@ -127,6 +131,9 @@ See |sign_define()| for the equivalent Vim script function. texthl={group} Highlighting group used for the text item. + Example: > + :sign define MySign text=>> texthl=Search linehl=DiffText +< DELETING A SIGN *:sign-undefine* *E155* @@ -136,7 +143,9 @@ See |sign_undefine()| for the equivalent Vim script function. Deletes a previously defined sign. If signs with this {name} are still placed this will cause trouble. - + Example: > + :sign undefine MySign +< LISTING SIGNS *:sign-list* *E156* @@ -190,6 +199,10 @@ See |sign_place()| for the equivalent Vim script function. Same, but use buffer {nr}. If the buffer argument is not given, place the sign in the current buffer. + Example: > + :sign place 10 line=99 name=sign3 + :sign place 10 line=99 name=sign3 buffer=3 +< *E885* :sign place {id} name={name} file={fname} Change the placed sign {id} in file {fname} to use the defined @@ -202,10 +215,17 @@ See |sign_place()| for the equivalent Vim script function. "priority={prio}" attribute can be used to change the priority of an existing sign. + Example: > + :sign place 23 name=sign1 file=/path/to/edit.py +< :sign place {id} name={name} [buffer={nr}] Same, but use buffer {nr}. If the buffer argument is not given, use the current buffer. + Example: > + :sign place 23 name=sign1 + :sign place 23 name=sign1 buffer=7 +< REMOVING SIGNS *:sign-unplace* *E159* @@ -337,4 +357,363 @@ See |sign_jump()| for the equivalent Vim script function. Same but jump to the sign in group {group} +============================================================================== +3. Functions *sign-functions-details* + +sign_define({name} [, {dict}]) *sign_define()* +sign_define({list}) + Define a new sign named {name} or modify the attributes of an + existing sign. This is similar to the |:sign-define| command. + + Prefix {name} with a unique text to avoid name collisions. + There is no {group} like with placing signs. + + The {name} can be a String or a Number. The optional {dict} + argument specifies the sign attributes. The following values + are supported: + icon full path to the bitmap file for the sign. + linehl highlight group used for the whole line the + sign is placed in. + text text that is displayed when there is no icon + or the GUI is not being used. + texthl highlight group used for the text item + numhl highlight group used for 'number' column at the + associated line. Overrides |hl-LineNr|, + |hl-CursorLineNr|. + + If the sign named {name} already exists, then the attributes + of the sign are updated. + + The one argument {list} can be used to define a list of signs. + Each list item is a dictionary with the above items in {dict} + and a "name" item for the sign name. + + Returns 0 on success and -1 on failure. When the one argument + {list} is used, then returns a List of values one for each + defined sign. + + Examples: > + call sign_define("mySign", { + \ "text" : "=>", + \ "texthl" : "Error", + \ "linehl" : "Search"}) + call sign_define([ + \ {'name' : 'sign1', + \ 'text' : '=>'}, + \ {'name' : 'sign2', + \ 'text' : '!!'} + \ ]) +< +sign_getdefined([{name}]) *sign_getdefined()* + Get a list of defined signs and their attributes. + This is similar to the |:sign-list| command. + + If the {name} is not supplied, then a list of all the defined + signs is returned. Otherwise the attribute of the specified + sign is returned. + + Each list item in the returned value is a dictionary with the + following entries: + icon full path to the bitmap file of the sign + linehl highlight group used for the whole line the + sign is placed in. + name name of the sign + text text that is displayed when there is no icon + or the GUI is not being used. + texthl highlight group used for the text item + numhl highlight group used for 'number' column at the + associated line. Overrides |hl-LineNr|, + |hl-CursorLineNr|. + + Returns an empty List if there are no signs and when {name} is + not found. + + Examples: > + " Get a list of all the defined signs + echo sign_getdefined() + + " Get the attribute of the sign named mySign + echo sign_getdefined("mySign") +< +sign_getplaced([{expr} [, {dict}]]) *sign_getplaced()* + Return a list of signs placed in a buffer or all the buffers. + This is similar to the |:sign-place-list| command. + + If the optional buffer name {expr} is specified, then only the + list of signs placed in that buffer is returned. For the use + of {expr}, see |bufname()|. The optional {dict} can contain + the following entries: + group select only signs in this group + id select sign with this identifier + lnum select signs placed in this line. For the use + of {lnum}, see |line()|. + If {group} is '*', then signs in all the groups including the + global group are returned. If {group} is not supplied or is an + empty string, then only signs in the global group are + returned. If no arguments are supplied, then signs in the + global group placed in all the buffers are returned. + See |sign-group|. + + Each list item in the returned value is a dictionary with the + following entries: + bufnr number of the buffer with the sign + signs list of signs placed in {bufnr}. Each list + item is a dictionary with the below listed + entries + + The dictionary for each sign contains the following entries: + group sign group. Set to '' for the global group. + id identifier of the sign + lnum line number where the sign is placed + name name of the defined sign + priority sign priority + + The returned signs in a buffer are ordered by their line + number and priority. + + Returns an empty list on failure or if there are no placed + signs. + + Examples: > + " Get a List of signs placed in eval.c in the + " global group + echo sign_getplaced("eval.c") + + " Get a List of signs in group 'g1' placed in eval.c + echo sign_getplaced("eval.c", {'group' : 'g1'}) + + " Get a List of signs placed at line 10 in eval.c + echo sign_getplaced("eval.c", {'lnum' : 10}) + + " Get sign with identifier 10 placed in a.py + echo sign_getplaced("a.py", {'id' : 10}) + + " Get sign with id 20 in group 'g1' placed in a.py + echo sign_getplaced("a.py", {'group' : 'g1', + \ 'id' : 20}) + + " Get a List of all the placed signs + echo sign_getplaced() +< + *sign_jump()* +sign_jump({id}, {group}, {expr}) + Open the buffer {expr} or jump to the window that contains + {expr} and position the cursor at sign {id} in group {group}. + This is similar to the |:sign-jump| command. + + For the use of {expr}, see |bufname()|. + + Returns the line number of the sign. Returns -1 if the + arguments are invalid. + + Example: > + " Jump to sign 10 in the current buffer + call sign_jump(10, '', '') +< + + *sign_place()* +sign_place({id}, {group}, {name}, {expr} [, {dict}]) + Place the sign defined as {name} at line {lnum} in file or + buffer {expr} and assign {id} and {group} to sign. This is + similar to the |:sign-place| command. + + If the sign identifier {id} is zero, then a new identifier is + allocated. Otherwise the specified number is used. {group} is + the sign group name. To use the global sign group, use an + empty string. {group} functions as a namespace for {id}, thus + two groups can use the same IDs. Refer to |sign-identifier| + and |sign-group| for more information. + + {name} refers to a defined sign. + {expr} refers to a buffer name or number. For the accepted + values, see |bufname()|. + + The optional {dict} argument supports the following entries: + lnum line number in the file or buffer + {expr} where the sign is to be placed. + For the accepted values, see |line()|. + priority priority of the sign. See + |sign-priority| for more information. + + If the optional {dict} is not specified, then it modifies the + placed sign {id} in group {group} to use the defined sign + {name}. + + Returns the sign identifier on success and -1 on failure. + + Examples: > + " Place a sign named sign1 with id 5 at line 20 in + " buffer json.c + call sign_place(5, '', 'sign1', 'json.c', + \ {'lnum' : 20}) + + " Updates sign 5 in buffer json.c to use sign2 + call sign_place(5, '', 'sign2', 'json.c') + + " Place a sign named sign3 at line 30 in + " buffer json.c with a new identifier + let id = sign_place(0, '', 'sign3', 'json.c', + \ {'lnum' : 30}) + + " Place a sign named sign4 with id 10 in group 'g3' + " at line 40 in buffer json.c with priority 90 + call sign_place(10, 'g3', 'sign4', 'json.c', + \ {'lnum' : 40, 'priority' : 90}) +< + + *sign_placelist()* +sign_placelist({list}) + Place one or more signs. This is similar to the + |sign_place()| function. The {list} argument specifies the + List of signs to place. Each list item is a dict with the + following sign attributes: + buffer buffer name or number. For the accepted + values, see |bufname()|. + group sign group. {group} functions as a namespace + for {id}, thus two groups can use the same + IDs. If not specified or set to an empty + string, then the global group is used. See + |sign-group| for more information. + id sign identifier. If not specified or zero, + then a new unique identifier is allocated. + Otherwise the specified number is used. See + |sign-identifier| for more information. + lnum line number in the buffer {expr} where the + sign is to be placed. For the accepted values, + see |line()|. + name name of the sign to place. See |sign_define()| + for more information. + priority priority of the sign. When multiple signs are + placed on a line, the sign with the highest + priority is used. If not specified, the + default value of 10 is used. See + |sign-priority| for more information. + + If {id} refers to an existing sign, then the existing sign is + modified to use the specified {name} and/or {priority}. + + Returns a List of sign identifiers. If failed to place a + sign, the corresponding list item is set to -1. + + Examples: > + " Place sign s1 with id 5 at line 20 and id 10 at line + " 30 in buffer a.c + let [n1, n2] = sign_placelist([ + \ {'id' : 5, + \ 'name' : 's1', + \ 'buffer' : 'a.c', + \ 'lnum' : 20}, + \ {'id' : 10, + \ 'name' : 's1', + \ 'buffer' : 'a.c', + \ 'lnum' : 30} + \ ]) + + " Place sign s1 in buffer a.c at line 40 and 50 + " with auto-generated identifiers + let [n1, n2] = sign_placelist([ + \ {'name' : 's1', + \ 'buffer' : 'a.c', + \ 'lnum' : 40}, + \ {'name' : 's1', + \ 'buffer' : 'a.c', + \ 'lnum' : 50} + \ ]) +< + +sign_undefine([{name}]) *sign_undefine()* +sign_undefine({list}) + Deletes a previously defined sign {name}. This is similar to + the |:sign-undefine| command. If {name} is not supplied, then + deletes all the defined signs. + + The one argument {list} can be used to undefine a list of + signs. Each list item is the name of a sign. + + Returns 0 on success and -1 on failure. For the one argument + {list} call, returns a list of values one for each undefined + sign. + + Examples: > + " Delete a sign named mySign + call sign_undefine("mySign") + + " Delete signs 'sign1' and 'sign2' + call sign_undefine(["sign1", "sign2"]) + + " Delete all the signs + call sign_undefine() +< + +sign_unplace({group} [, {dict}]) *sign_unplace()* + Remove a previously placed sign in one or more buffers. This + is similar to the |:sign-unplace| command. + + {group} is the sign group name. To use the global sign group, + use an empty string. If {group} is set to '*', then all the + groups including the global group are used. + The signs in {group} are selected based on the entries in + {dict}. The following optional entries in {dict} are + supported: + buffer buffer name or number. See |bufname()|. + id sign identifier + If {dict} is not supplied, then all the signs in {group} are + removed. + + Returns 0 on success and -1 on failure. + + Examples: > + " Remove sign 10 from buffer a.vim + call sign_unplace('', {'buffer' : "a.vim", 'id' : 10}) + + " Remove sign 20 in group 'g1' from buffer 3 + call sign_unplace('g1', {'buffer' : 3, 'id' : 20}) + + " Remove all the signs in group 'g2' from buffer 10 + call sign_unplace('g2', {'buffer' : 10}) + + " Remove sign 30 in group 'g3' from all the buffers + call sign_unplace('g3', {'id' : 30}) + + " Remove all the signs placed in buffer 5 + call sign_unplace('*', {'buffer' : 5}) + + " Remove the signs in group 'g4' from all the buffers + call sign_unplace('g4') + + " Remove sign 40 from all the buffers + call sign_unplace('*', {'id' : 40}) + + " Remove all the placed signs from all the buffers + call sign_unplace('*') +< +sign_unplacelist({list}) *sign_unplacelist()* + Remove previously placed signs from one or more buffers. This + is similar to the |sign_unplace()| function. + + The {list} argument specifies the List of signs to remove. + Each list item is a dict with the following sign attributes: + buffer buffer name or number. For the accepted + values, see |bufname()|. If not specified, + then the specified sign is removed from all + the buffers. + group sign group name. If not specified or set to an + empty string, then the global sign group is + used. If set to '*', then all the groups + including the global group are used. + id sign identifier. If not specified, then all + the signs in the specified group are removed. + + Returns a List where an entry is set to 0 if the corresponding + sign was successfully removed or -1 on failure. + + Example: > + " Remove sign with id 10 from buffer a.vim and sign + " with id 20 from buffer b.vim + call sign_unplacelist([ + \ {'id' : 10, 'buffer' : "a.vim"}, + \ {'id' : 20, 'buffer' : 'b.vim'}, + \ ]) +< + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/spell.txt b/runtime/doc/spell.txt index 0eef976819..f722747ce9 100644 --- a/runtime/doc/spell.txt +++ b/runtime/doc/spell.txt @@ -854,7 +854,7 @@ time ":mkspell" is used. Vim will then convert everything to 'encoding' and generate a spell file for 'encoding'. If some of the used characters to not fit in 'encoding' you will get an error message. *spell-affix-mbyte* -When using a multi-byte encoding it's possible to use more different affix +When using a multibyte encoding it's possible to use more different affix flags. But Myspell doesn't support that, thus you may not want to use it anyway. For compatibility use an 8-bit encoding. @@ -1411,7 +1411,7 @@ are spelling mistakes this may not be quite right. Common words can be specified with the COMMON item. This will give better suggestions when editing a short file. Example: - COMMON the of to and a in is it you that he was for on are ~ + COMMON the of to and a in is it you that he she was for on are ~ The words must be separated by white space, up to 25 per line. When multiple regions are specified in a ":mkspell" command the common words diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt index d3647246fa..ae9022c56c 100644 --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -42,9 +42,12 @@ filename One or more file names. The first one will be the current In most cases (except -s, -es, |--embed|, --headless) if stdin is not a TTY then it is read as text, so "-" is implied: > echo text | nvim file -< The buffer will be marked modified, because it contains text - that needs to be saved (except for readonly |-R| mode). - +< The buffer will be marked as modified, because it contains + text that needs to be saved (except for readonly |-R| mode). + If you don't like that, put these lines in your init.vim: > + " Don't set 'modified' when reading from stdin + au StdinReadPost * set nomodified +< To read stdin as Normal commands use |-s| with "-": > echo "ifoo" | nvim -s - < To read stdin as Ex commands use |-es| or |-e|: > @@ -390,7 +393,7 @@ accordingly. Vim proceeds in this order: 1. Set the 'shell' option *SHELL* *COMSPEC* The environment variable SHELL, if it exists, is used to set the - 'shell' option. On Windows, the COMSPEC variable is used + 'shell' option. On Win32, the COMSPEC variable is used if SHELL is not set. 2. Process the arguments @@ -518,7 +521,8 @@ accordingly. Vim proceeds in this order: displayed yet). When switching screens, it happens now. Redrawing starts. If the "-q" flag was given to Vim, the first error is jumped to. - Buffers for all windows will be loaded. + Buffers for all windows will be loaded, without triggering |BufAdd| + autocommands. 14. Execute startup commands If a "-t" flag was given to Vim, the tag is jumped to. @@ -621,7 +625,7 @@ Nvim will try to get the value for $VIMRUNTIME in this order: 1. Environment variable $VIMRUNTIME, if it is set. 2. Directory path "$VIM/vim{version}", if it exists, where {version} is the - Vim version number without '-' or '.'. For example: "$VIM/vim54". + Vim version number without '-' or '.'. For example: "$VIM/vim82". 3. Directory path "$VIM/runtime", if it exists. 4. Value of $VIM environment variable. This is for backwards compatibility with older Vim versions. @@ -766,7 +770,11 @@ resulting file, when executed with a ":source" command: "options". Script-local mappings will not be written. 2. Restores global variables that start with an uppercase letter and contain at least one lowercase letter, if 'sessionoptions' contains "globals". -3. Unloads all currently loaded buffers. +3. Closes all windows in the current tab page, except the current one; closes + all tab pages except the current one (this results in currently loaded + buffers to be unloaded, some may become hidden if 'hidden' is set or + otherwise specified); wipes out the current buffer, if it is empty + and unnamed. 4. Restores the current directory if 'sessionoptions' contains "curdir", or sets the current directory to where the Session file is if 'sessionoptions' contains "sesdir". @@ -938,8 +946,8 @@ about to abandon with ":bdel", use ":wsh". The '[' and ']' marks are not stored, but the '"' mark is. The '"' mark is very useful for jumping to the cursor position when the file was last exited. No marks are saved for files that start with any string given with the "r" flag in 'shada'. This can be -used to avoid saving marks for files on removable media (for Windows you would -use "ra:,rb:". +used to avoid saving marks for files on removable media (for MS-Windows you +would use "ra:,rb:"). The |v:oldfiles| variable is filled with the file names that the ShaDa file has marks for. diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt index aeee02a1e0..95e00720b1 100644 --- a/runtime/doc/syntax.txt +++ b/runtime/doc/syntax.txt @@ -37,14 +37,14 @@ If the VIM environment variable is not set, Vim will try to find the path in another way (see |$VIMRUNTIME|). Usually this works just fine. If it doesn't, try setting the VIM environment variable to the directory where the Vim stuff is located. For example, if your syntax files -are in the "/usr/vim/vim50/syntax" directory, set $VIMRUNTIME to -"/usr/vim/vim50". You must do this in the shell, before starting Vim. +are in the "/usr/vim/vim82/syntax" directory, set $VIMRUNTIME to +"/usr/vim/vim82". You must do this in the shell, before starting Vim. This command also sources the |menu.vim| script when the GUI is running or will start soon. See |'go-M'| about avoiding that. *:syn-on* *:syntax-on* -The `:syntax enable` command will keep your current color settings. This -allows using `:highlight` commands to set your preferred colors before or +The `:syntax enable` command will keep most of your current color settings. +This allows using `:highlight` commands to set your preferred colors before or after using this command. If you want Vim to overrule your settings with the defaults, use: > :syntax on @@ -56,10 +56,10 @@ with: > For a color terminal see |:hi-normal-cterm|. For setting up your own colors syntax highlighting see |syncolor|. -NOTE: The syntax files on Windows have lines that end in <CR><NL>. The files -for Unix end in <NL>. This means you should use the right type of file for -your system. Although on Windows the right format is automatically selected -if the 'fileformats' option is not empty. +NOTE: The syntax files on MS-Windows have lines that end in <CR><NL>. +The files for Unix end in <NL>. This means you should use the right type of +file for your system. Although on MS-Windows the right format is +automatically selected if the 'fileformats' option is not empty. NOTE: When using reverse video ("gvim -fg white -bg black"), the default value of 'background' will not be set until the GUI window is opened, which is after @@ -194,7 +194,7 @@ The name for a highlight or syntax group must consist of ASCII letters, digits and the underscore. As a regexp: "[a-zA-Z0-9_]*". However, Vim does not give an error when using other characters. -To be able to allow each user to pick his favorite set of colors, there must +To be able to allow each user to pick their favorite set of colors, there must be preferred names for highlight groups that are common for many languages. These are the suggested group names (if syntax highlighting works properly you can see the actual color, except for "Ignore"): @@ -453,6 +453,16 @@ conversion. See |-E| and |-s-ex| for details. It is probably best to create a script to replace all the -c commands and use it with the -u flag instead of specifying each command separately. + *hl-TOhtmlProgress* *TOhtml-progress-color* +When displayed, the progress bar will show colored boxes along the statusline +as the HTML conversion proceeds. By default, the background color as the +current "DiffDelete" highlight group is used. If "DiffDelete" and "StatusLine" +have the same background color, TOhtml will automatically adjust the color to +differ. If you do not like the automatically selected colors, you can define +your own highlight colors for the progress bar. Example: > + + hi TOhtmlProgress guifg=#c0ffee ctermbg=7 +< *g:html_number_lines* Default: current 'number' setting. When 0, buffer text is displayed in the generated HTML without line numbering. @@ -484,8 +494,8 @@ For example: > < *g:html_use_css* Default: 1. -When 1, generate valid HTML 4.01 markup with CSS1 styling, supported in all -modern browsers and most old browsers. +When 1, generate valid HTML 5 markup with CSS styling, supported in all modern +browsers and many old browsers. When 0, generate <font> tags and similar outdated markup. This is not recommended but it may work better in really old browsers, email clients, forum posts, and similar situations where basic CSS support is unavailable. @@ -557,23 +567,43 @@ affected in this way as follows: Example, to make the fold column and line numbers uncopyable: > :let g:html_prevent_copy = "fn" < -This feature is currently implemented by inserting read-only <input> elements -into the markup to contain the uncopyable areas. This does not work well in -all cases. When pasting to some applications which understand HTML, the -<input> elements also get pasted. But plain-text paste destinations should -always work. +The method used to prevent copying in the generated page depends on the value +of |g:html_use_input_for_pc|. + + *g:html_use_input_for_pc* +Default: "fallback" +If |g:html_prevent_copy| is non-empty, then: + +When "all", read-only <input> elements are used in place of normal text for +uncopyable regions. In some browsers, especially older browsers, after +selecting an entire page and copying the selection, the <input> tags are not +pasted with the page text. If |g:html_no_invalid| is 0, the <input> tags have +invalid type; this works in more browsers, but the page will not validate. +Note: this method does NOT work in recent versions of Chrome and equivalent +browsers; the <input> tags get pasted with the text. + +When "fallback" (default value), the same <input> elements are generated for +older browsers, but newer browsers (detected by CSS feature query) hide the +<input> elements and instead use generated content in an ::before pseudoelement +to display the uncopyable text. This method should work with the largest +number of browsers, both old and new. + +When "none", the <input> elements are not generated at all. Only the +generated-content method is used. This means that old browsers, notably +Internet Explorer, will either copy the text intended not to be copyable, or +the non-copyable text may not appear at all. However, this is the most +standards-based method, and there will be much less markup. *g:html_no_invalid* Default: 0. -When 0, if |g:html_prevent_copy| is non-empty, an invalid attribute is -intentionally inserted into the <input> element for the uncopyable areas. This -increases the number of applications you can paste to without also pasting the -<input> elements. Specifically, Microsoft Word will not paste the <input> -elements if they contain this invalid attribute. -When 1, no invalid markup is ever intentionally inserted, and the generated -page should validate. However, be careful pasting into Microsoft Word when -|g:html_prevent_copy| is non-empty; it can be hard to get rid of the <input> -elements which get pasted. +When 0, if |g:html_prevent_copy| is non-empty and |g:html_use_input_for_pc| is +not "none", an invalid attribute is intentionally inserted into the <input> +element for the uncopyable areas. This prevents pasting the <input> elements +in some applications. Specifically, some versions of Microsoft Word will not +paste the <input> elements if they contain this invalid attribute. When 1, no +invalid markup is inserted, and the generated page should validate. However, +<input> elements may be pasted into some applications and can be difficult to +remove afterward. *g:html_hover_unfold* Default: 0. @@ -895,7 +925,7 @@ SELECTEMPTY, ... The indentation preceding the begin/end keywords has to match (spaces are not considered equal to a tab). > let baan_fold_sql=1 Note: Block folding can result in many small folds. It is suggested to |:set| -the options 'foldminlines' and 'foldnestmax' in |init.vim| or use |:setlocal| +the options 'foldminlines' and 'foldnestmax' in |init.vim| or use |:setlocal| in .../after/syntax/baan.vim (see |after-directory|). Eg: > set foldminlines=5 set foldnestmax=6 @@ -913,10 +943,12 @@ Basic. C *c.vim* *ft-c-syntax* A few things in C highlighting are optional. To enable them assign any value -to the respective variable. Example: > +(including zero) to the respective variable. Example: > :let c_comment_strings = 1 -To disable them use ":unlet". Example: > + :let c_no_bracket_error = 0 +To disable them use `:unlet`. Example: > :unlet c_comment_strings +Setting the value to zero doesn't work! An alternative is to switch to the C++ highlighting: > :set filetype=cpp @@ -932,8 +964,8 @@ Variable Highlight ~ except { and } in first column Default is to highlight them, otherwise you can't spot a missing ")". -*c_curly_error* highlight a missing }; this forces syncing from the - start of the file, can be slow +*c_curly_error* highlight a missing } by finding all pairs; this + forces syncing from the start of the file, can be slow *c_no_ansi* don't do standard ANSI types and constants *c_ansi_typedefs* ... but do standard ANSI types *c_ansi_constants* ... but do standard ANSI constants @@ -1135,15 +1167,37 @@ startup vimrc: > :let filetype_w = "cweb" +DART *dart.vim* *ft-dart-syntax* + +Dart is an object-oriented, typed, class defined, garbage collected language +used for developing mobile, desktop, web, and back-end applications. Dart uses +a C-like syntax derived from C, Java, and JavaScript, with features adopted +from Smalltalk, Python, Ruby, and others. + +More information about the language and its development environment at the +official Dart language website at https://dart.dev + +dart.vim syntax detects and highlights Dart statements, reserved words, +type declarations, storage classes, conditionals, loops, interpolated values, +and comments. There is no support idioms from Flutter or any other Dart +framework. + +Changes, fixes? Submit an issue or pull request via: + +https://github.com/pr3d4t0r/dart-vim-syntax/ + + DESKTOP *desktop.vim* *ft-desktop-syntax* Primary goal of this syntax file is to highlight .desktop and .directory files according to freedesktop.org standard: -http://standards.freedesktop.org/desktop-entry-spec/latest/ -But actually almost none implements this standard fully. Thus it will -highlight all Unix ini files. But you can force strict highlighting according -to standard by placing this in your vimrc file: > - :let enforce_freedesktop_standard = 1 +https://specifications.freedesktop.org/desktop-entry-spec/latest/ +To highlight nonstandard extensions that does not begin with X-, set > + let g:desktop_enable_nonstd = 1 +Note that this may cause wrong highlight. +To highlight KDE-reserved features, set > + let g:desktop_enable_kde = 1 +g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied DIFF *diff.vim* @@ -1326,26 +1380,26 @@ to your startup file. EUPHORIA *euphoria3.vim* *euphoria4.vim* *ft-euphoria-syntax* -Two syntax highlighting files exists for Euphoria. One for Euphoria -version 3.1.1, which is the default syntax highlighting file, and one for +Two syntax highlighting files exist for Euphoria. One for Euphoria +version 3.1.1, which is the default syntax highlighting file, and one for Euphoria version 4.0.5 or later. -Euphoria version 3.1.1 (http://www.rapideuphoria.com/) is still necessary -for developing applications for the DOS platform, which Euphoria version 4 +Euphoria version 3.1.1 (http://www.rapideuphoria.com/) is still necessary +for developing applications for the DOS platform, which Euphoria version 4 (http://www.openeuphoria.org/) does not support. -The following file extensions are auto-detected as Euphoria file type: - +The following file extensions are auto-detected as Euphoria file type: + *.e, *.eu, *.ew, *.ex, *.exu, *.exw *.E, *.EU, *.EW, *.EX, *.EXU, *.EXW -To select syntax highlighting file for Euphoria, as well as for +To select syntax highlighting file for Euphoria, as well as for auto-detecting the *.e and *.E file extensions as Euphoria file type, add the following line to your startup file: > :let filetype_euphoria="euphoria3" - or + or :let filetype_euphoria="euphoria4" @@ -1656,8 +1710,8 @@ The coloring scheme for tags in the HTML file works as follows. The <> of opening tags are colored differently than the </> of a closing tag. This is on purpose! For opening tags the 'Function' color is used, while for -closing tags the 'Type' color is used (See syntax.vim to check how those are -defined for you) +closing tags the 'Identifier' color is used (See syntax.vim to check how those +are defined for you) Known tag names are colored the same way as statements in C. Unknown tag names are colored with the same color as the <> or </> respectively which @@ -1852,7 +1906,7 @@ new highlightings for the following groups.: Debug, DebugSpecial, DebugString, DebugBoolean, DebugType which are used for the statement itself, special characters used in debug strings, strings, boolean constants and types (this, super) respectively. I -have opted to chose another background for those statements. +have opted to choose another background for those statements. Javadoc is a program that takes special comments out of Java program files and creates HTML pages. The standard configuration will highlight this HTML code @@ -1892,6 +1946,16 @@ displayed line. The default value is 10. The disadvantage of using a larger number is that redrawing can become slow. +JSON *json.vim* *ft-json-syntax* + +The json syntax file provides syntax highlighting with conceal support by +default. To disable concealment: > + let g:vim_json_conceal = 0 + +To disable syntax highlighting of errors: > + let g:vim_json_warnings = 0 + + LACE *lace.vim* *ft-lace-syntax* Lace (Language for Assembly of Classes in Eiffel) is case insensitive, but the @@ -2141,9 +2205,10 @@ can use them. For example, Linux and BSD distributions use groff as their default text processing package. In order to activate the extra syntax highlighting -features for groff, add the following option to your start-up files: > +features for groff, arrange for files to be recognized as groff (see +|ft-groff-syntax|) or add the following option to your start-up files: > - :let b:nroff_is_groff = 1 + :let nroff_is_groff = 1 Groff is different from the old AT&T n/troff that you may still find in Solaris. Groff macro and request names can be longer than 2 characters and @@ -2221,7 +2286,7 @@ contain very long structures that Vim does not synchronize anymore. PAPP *papp.vim* *ft-papp-syntax* -The PApp syntax file handles .papp files and, to a lesser extend, .pxml +The PApp syntax file handles .papp files and, to a lesser extent, .pxml and .pxsl files which are all a mixture of perl/xml/html/other using xml as the top-level file format. By default everything inside phtml or pxml sections is treated as a string with embedded preprocessor commands. If @@ -2239,11 +2304,12 @@ http://papp.plan9.de. PASCAL *pascal.vim* *ft-pascal-syntax* -Files matching "*.p" could be Progress or Pascal. If the automatic detection -doesn't work for you, or you don't edit Progress at all, use this in your -startup vimrc: > +Files matching "*.p" could be Progress or Pascal and those matching "*.pp" +could be Puppet or Pascal. If the automatic detection doesn't work for you, +or you only edit Pascal files, use this in your startup vimrc: > - :let filetype_p = "pascal" + :let filetype_p = "pascal" + :let filetype_pp = "pascal" The Pascal syntax file has been extended to take into account some extensions provided by Turbo Pascal, Free Pascal Compiler and GNU Pascal Compiler. @@ -2593,12 +2659,12 @@ Note: only existence of these options matter, not their value. You can replace QUAKE *quake.vim* *ft-quake-syntax* -The Quake syntax definition should work for most any FPS (First Person -Shooter) based on one of the Quake engines. However, the command names vary -a bit between the three games (Quake, Quake 2, and Quake 3 Arena) so the -syntax definition checks for the existence of three global variables to allow -users to specify what commands are legal in their files. The three variables -can be set for the following effects: +The Quake syntax definition should work for most FPS (First Person Shooter) +based on one of the Quake engines. However, the command names vary a bit +between the three games (Quake, Quake 2, and Quake 3 Arena) so the syntax +definition checks for the existence of three global variables to allow users +to specify what commands are legal in their files. The three variables can +be set for the following effects: set to highlight commands only available in Quake: > :let quake_is_quake1 = 1 @@ -2667,6 +2733,13 @@ This will add highlighting for the commands that BASH (version 2.05a and later, and part earlier) adds. +REGO *rego.vim* *ft-rego-syntax* + +Rego is a query language developed by Styra. It is mostly used as a policy +language for kubernetes, but can be applied to almost anything. Files with +the following extensions are recognized as rego files: .rego. + + RESTRUCTURED TEXT *rst.vim* *ft-rst-syntax* Syntax highlighting is enabled for code blocks within the document for a @@ -2679,10 +2752,10 @@ To set a user-defined list of code block syntax highlighting: > To assign multiple code block types to a single syntax, define `rst_syntax_code_list` as a mapping: > let rst_syntax_code_list = { - \ 'cpp' = ['cpp', 'c++'], - \ 'bash' = ['bash', 'sh'], + \ 'cpp': ['cpp', 'c++'], + \ 'bash': ['bash', 'sh'], ... - } + \ } To use color highlighting for emphasis text: > let rst_use_emphasis_colors = 1 @@ -2903,7 +2976,7 @@ vimrc file: > (Adapted from the html.vim help text by Claudio Fleiner <claudio@fleiner.com>) - *ft-posix-synax* *ft-dash-syntax* + *ft-posix-syntax* *ft-dash-syntax* SH *sh.vim* *ft-sh-syntax* *ft-bash-syntax* *ft-ksh-syntax* This covers syntax highlighting for the older Unix (Bourne) sh, and newer @@ -2927,7 +3000,7 @@ variables in your vimrc: ksh: > let g:is_kornshell = 1 -< posix: (using this is the nearly the same as setting g:is_kornshell to 1) > +< posix: (using this is nearly the same as setting g:is_kornshell to 1) > let g:is_posix = 1 < bash: > let g:is_bash = 1 @@ -3080,6 +3153,7 @@ redrawing can become slow. TEX *tex.vim* *ft-tex-syntax* *latex-syntax* + *syntax-tex* *syntax-latex* Tex Contents~ Tex: Want Syntax Folding? |tex-folding| @@ -3096,6 +3170,7 @@ TEX *tex.vim* *ft-tex-syntax* *latex-syntax* Tex: Selective Conceal Mode |g:tex_conceal| Tex: Controlling iskeyword |g:tex_isk| Tex: Fine Subscript and Superscript Control |tex-supersub| + Tex: Match Check Control |tex-matchcheck| *tex-folding* *g:tex_fold_enabled* Tex: Want Syntax Folding? ~ @@ -3316,9 +3391,25 @@ syntax highlighting script handles this with the following logic: For example, I use Luxi Mono Bold; it doesn't support subscript characters for "hklmnpst", so I put > let g:tex_subscripts= "[0-9aeijoruvx,+-/().]" -< in ~/.config/nvim/ftplugin/tex/tex.vim in order to avoid having +< in ~/.config/nvim/ftplugin/tex/tex.vim in order to avoid having inscrutable utf-8 glyphs appear. + *tex-matchcheck* *g:tex_matchcheck* + Tex: Match Check Control~ + + Sometimes one actually wants mismatched parentheses, square braces, + and or curly braces; for example, \text{(1,10] is a range from but + not including 1 to and including 10}. This wish, of course, conflicts + with the desire to provide delimiter mismatch detection. To + accommodate these conflicting goals, syntax/tex.vim provides > + g:tex_matchcheck = '[({[]' +< which is shown along with its default setting. So, if one doesn't + want [] and () to be checked for mismatches, try using > + let g:tex_matchcheck= '[{}]' +< If you don't want matching to occur inside bold and italicized + regions, > + let g:tex_excludematcher= 1 +< will prevent the texMatcher group from being included in those regions. TF *tf.vim* *ft-tf-syntax* @@ -3430,26 +3521,26 @@ It will look much better with a font in a quadratic cell size, e.g. for X: > YAML *yaml.vim* *ft-yaml-syntax* *g:yaml_schema* *b:yaml_schema* -A YAML schema is a combination of a set of tags and a mechanism for resolving -non-specific tags. For user this means that YAML parser may, depending on -plain scalar contents, treat plain scalar (which can actually be only string -and nothing else) as a value of the other type: null, boolean, floating-point, -integer. `g:yaml_schema` option determines according to which schema values +A YAML schema is a combination of a set of tags and a mechanism for resolving +non-specific tags. For user this means that YAML parser may, depending on +plain scalar contents, treat plain scalar (which can actually be only string +and nothing else) as a value of the other type: null, boolean, floating-point, +integer. `g:yaml_schema` option determines according to which schema values will be highlighted specially. Supported schemas are Schema Description ~ failsafe No additional highlighting. json Supports JSON-style numbers, booleans and null. core Supports more number, boolean and null styles. -pyyaml In addition to core schema supports highlighting timestamps, - but there are some differences in what is recognized as - numbers and many additional boolean values not present in core +pyyaml In addition to core schema supports highlighting timestamps, + but there are some differences in what is recognized as + numbers and many additional boolean values not present in core schema. Default schema is `core`. -Note that schemas are not actually limited to plain scalars, but this is the -only difference between schemas defined in YAML specification and the only +Note that schemas are not actually limited to plain scalars, but this is the +only difference between schemas defined in YAML specification and the only difference defined in the syntax file. @@ -3532,7 +3623,7 @@ DEFINING FOLDLEVEL *:syn-foldlevel* start: Use level of item containing start of line. minimum: Use lowest local-minimum level of items on line. - The default is 'start'. Use 'minimum' to search a line horizontally + The default is "start". Use "minimum" to search a line horizontally for the lowest level contained on the line that is followed by a higher level. This produces more natural folds when syntax items may close and open horizontally within a line. @@ -3569,7 +3660,7 @@ SYNTAX ISKEYWORD SETTING *:syn-iskeyword* clear: Syntax specific iskeyword setting is disabled and the buffer-local 'iskeyword' setting is used. - {option} Set the syntax 'iskeyword' option to a new value. + {option} Set the syntax 'iskeyword' option to a new value. Example: > :syntax iskeyword @,48-57,192-255,$,_ @@ -3677,9 +3768,9 @@ DEFINING REGIONS *:syn-region* *:syn-start* *:syn-skip* *:syn-end* [keepend] [extend] [excludenl] - start={start_pattern} .. - [skip={skip_pattern}] - end={end_pattern} .. + start={start-pattern} .. + [skip={skip-pattern}] + end={end-pattern} .. [{options}] This defines one region. It may span several lines. @@ -3701,12 +3792,12 @@ DEFINING REGIONS *:syn-region* *:syn-start* *:syn-skip* *:syn-end* extend a containing match or item. Only useful for end patterns. Must be given before the patterns it applies to. |:syn-excludenl| - start={start_pattern} The search pattern that defines the start of + start={start-pattern} The search pattern that defines the start of the region. See |:syn-pattern| below. - skip={skip_pattern} The search pattern that defines text inside + skip={skip-pattern} The search pattern that defines text inside the region where not to look for the end pattern. See |:syn-pattern| below. - end={end_pattern} The search pattern that defines the end of + end={end-pattern} The search pattern that defines the end of the region. See |:syn-pattern| below. Example: > @@ -4229,7 +4320,7 @@ Notes: - A negative offset for an end pattern may not always work, because the end pattern may be detected when the highlighting should already have stopped. - Before Vim 7.2 the offsets were counted in bytes instead of characters. - This didn't work well for multi-byte characters, so it was changed with the + This didn't work well for multibyte characters, so it was changed with the Vim 7.2 release. - The start of a match cannot be in a line other than where the pattern matched. This doesn't work: "a\nb"ms=e. You can make the highlighting @@ -4417,8 +4508,8 @@ two different ways: (e.g., "syntax/pod.vim") the file is searched for in 'runtimepath'. All matching files are loaded. Using a relative path is recommended, because it allows a user to replace the included file - with his own version, without replacing the file that does the ":syn - include". + with their own version, without replacing the file that does the + ":syn include". *E847* The maximum number of includes is 999. @@ -4538,7 +4629,7 @@ matches, nextgroup, etc. But there are a few differences: - A line continuation pattern can be given. It is used to decide which group of lines need to be searched like they were one line. This means that the search for a match with the specified items starts in the first of the - consecutive that contain the continuation pattern. + consecutive lines that contain the continuation pattern. - When using "nextgroup" or "contains", this only works within one line (or group of continued lines). - When using a region, it must start and end in the same line (or group of @@ -4850,8 +4941,8 @@ ctermbg={color-nr} *highlight-ctermbg* *E419* *E420* When Vim knows the normal foreground and background colors, "fg" and "bg" can be used as color names. This only works after setting the - colors for the Normal group and for the Windows console. Example, for - reverse video: > + colors for the Normal group and for the MS-Windows console. Example, + for reverse video: > :highlight Visual ctermfg=bg ctermbg=fg < Note that the colors are used that are valid at the moment this command are given. If the Normal group colors are changed later, the @@ -5002,9 +5093,9 @@ MsgSeparator Separator for scrolled messages, `msgsep` flag of 'display' *hl-MoreMsg* MoreMsg |more-prompt| *hl-NonText* -NonText '@' at the end of the window, characters from 'showbreak' - and other characters that do not really exist in the text - (e.g., ">" displayed when a double-wide character doesn't +NonText '@' at the end of the window, characters from 'showbreak' + and other characters that do not really exist in the text + (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line). See also |hl-EndOfBuffer|. *hl-Normal* Normal normal text @@ -5131,6 +5222,12 @@ If you like Question highlighting for C comments, put this in your vimrc file: > Without the "default" in the C syntax file, the highlighting would be overruled when the syntax file is loaded. +To have a link survive `:highlight clear`, which is useful if you have +highlighting for a specific filetype and you want to keep it when selecting +another color scheme, put a command like this in the +"after/syntax/{filetype}.vim" file: > + highlight! default link cComment Question + ============================================================================== 15. Cleaning up *:syn-clear* *E391* @@ -5191,7 +5288,7 @@ script file to set these colors. Put this file in a directory in the default colors. This way these colors will be used after the ":syntax reset" command. -For Unix you can use the file ~/.config/nvim/after/syntax/syncolor.vim. +For Unix you can use the file ~/.config/nvim/after/syntax/syncolor.vim. Example: > if &background == "light" diff --git a/runtime/doc/tabpage.txt b/runtime/doc/tabpage.txt index 1407fdd968..7f91fda9f4 100644 --- a/runtime/doc/tabpage.txt +++ b/runtime/doc/tabpage.txt @@ -129,7 +129,7 @@ something else. :+tabclose " close the next tab page :1tabclose " close the first tab page :$tabclose " close the last tab page - :tabclose -2 " close the two previous tab page + :tabclose -2 " close the 2nd previous tab page :tabclose + " close the next tab page :tabclose 3 " close the third tab page :tabclose $ " close the last tab page diff --git a/runtime/doc/tagsrch.txt b/runtime/doc/tagsrch.txt index 7d09ca86ac..2c1b927e5a 100644 --- a/runtime/doc/tagsrch.txt +++ b/runtime/doc/tagsrch.txt @@ -179,6 +179,29 @@ commands explained above the tag stack will look like this: The |gettagstack()| function returns the tag stack of a specified window. The |settagstack()| function modifies the tag stack of a window. + *tagstack-examples* +Write to the tag stack just like `:tag` but with a user-defined +jumper#jump_to_tag function: > + " Store where we're jumping from before we jump. + let tag = expand('<cword>') + let pos = [bufnr()] + getcurpos()[1:] + let item = {'bufnr': pos[0], 'from': pos, 'tagname': tag} + if jumper#jump_to_tag(tag) + " Jump was successful, write previous location to tag stack. + let winid = win_getid() + let stack = gettagstack(winid) + let stack['items'] = [item] + call settagstack(winid, stack, 't') + endif +< +Set current index of the tag stack to 4: > + call settagstack(1005, {'curidx' : 4}) +< +Push a new item onto the tag stack: > + let pos = [bufnr('myfile.txt'), 10, 1, 0] + let newtag = [{'tagname' : 'mytag', 'from' : pos}] + call settagstack(2, {'items' : newtag}, 'a') +< *E73* When you try to use the tag stack while it doesn't contain anything you will get an error message. @@ -204,14 +227,14 @@ the same entry. Example output: > - nr pri kind tag file + # pri kind tag file 1 F f mch_delay os_amiga.c mch_delay(msec, ignoreinput) > 2 F f mch_delay os_msdos.c mch_delay(msec, ignoreinput) 3 F f mch_delay os_unix.c mch_delay(msec, ignoreinput) - Enter nr of choice (<CR> to abort): + Type number and <Enter> (empty cancels): < See |tag-priority| for the "pri" column. Note that this depends on the current file, thus using @@ -488,10 +511,13 @@ a tag for each "#defined" macro, typedefs, enums, etc. Some programs that generate tags files: ctags As found on most Unix systems. Only supports C. Only does the basic work. +universal ctags A maintained version of ctags based on exuberant + ctags. See https://ctags.io. *Exuberant_ctags* exuberant ctags This is a very good one. It works for C, C++, Java, Fortran, Eiffel and others. It can generate tags for many items. See http://ctags.sourceforge.net. + No new version since 2009. JTags For Java, in Java. It can be found at http://www.fleiner.com/jtags/. ptags.py For Python, in Python. Found in your Python source @@ -513,7 +539,7 @@ The first format is a normal tag, which is completely compatible with Vi. It is the only format produced by traditional ctags implementations. This is often used for functions that are global, also referenced in other files. -The lines in the tags file can end in <LF> or <CR><LF>. On the Macintosh <CR> +The lines in the tags file can end in <NL> or <CR><NL>. On the Macintosh <CR> also works. The <CR> and <NL> characters can never appear inside a line. The second format is new. It includes additional information in optional @@ -893,8 +919,8 @@ The following is a hypothetical example of a function used for 'tagfunc'. It uses the output of |taglist()| to generate the result: a list of tags in the inverse order of file names. > - function! TagFunc(pattern, flags, info) - function! CompareFilenames(item1, item2) + function TagFunc(pattern, flags, info) + function CompareFilenames(item1, item2) let f1 = a:item1['filename'] let f2 = a:item2['filename'] return f1 >=# f2 ? diff --git a/runtime/doc/term.txt b/runtime/doc/term.txt index 6a271c08d3..935d958729 100644 --- a/runtime/doc/term.txt +++ b/runtime/doc/term.txt @@ -289,7 +289,7 @@ border, the text is scrolled. A selection can be started by pressing the left mouse button on the first character, moving the mouse to the last character, then releasing the mouse button. You will not always see the selection until you release the button, -only in some versions (GUI, Windows) will the dragging be shown immediately. +only in some versions (GUI, Win32) will the dragging be shown immediately. Note that you can make the text scroll by moving the mouse at least one character in the first/last line in the window when 'scrolloff' is non-zero. @@ -306,7 +306,7 @@ alt key is pressed (it may move the window). *double-click* Double, triple and quadruple clicks are supported when the GUI is active, for -Windows and for an xterm. For selecting text, extra clicks extend the +Win32 and for an xterm. For selecting text, extra clicks extend the selection: click select ~ double word or % match *<2-LeftMouse>* @@ -318,9 +318,8 @@ A double click on a word selects that word. 'iskeyword' is used to specify which characters are included in a word. A double click on a character that has a match selects until that match (like using "v%"). If the match is an #if/#else/#endif block, the selection becomes linewise. -For MS-DOS and xterm the time for double clicking can be set with the -'mousetime' option. For the other systems this time is defined outside of -Vim. +For MS-Windows and xterm the time for double clicking can be set with the +'mousetime' option. For the other systems this time is defined outside of Vim. An example, for using a double click to jump to the tag under the cursor: > :map <2-LeftMouse> :exe "tag ". expand("<cword>")<CR> diff --git a/runtime/doc/testing.txt b/runtime/doc/testing.txt new file mode 100644 index 0000000000..b2ce6d670d --- /dev/null +++ b/runtime/doc/testing.txt @@ -0,0 +1,169 @@ +*testing.txt* Nvim + + + VIM REFERENCE MANUAL by Bram Moolenaar + + +Testing Vim and Vim script *testing-support* + +Expression evaluation is explained in |eval.txt|. This file goes into details +about writing tests in Vim script. This can be used for testing Vim itself +and for testing plugins. + +1. Testing Vim |testing| +2. Test functions |test-functions-details| +3. Assert funtions |assert-functions-details| + +============================================================================== +1. Testing Vim *testing* + +Vim can be tested after building it, usually with "make test". +The tests are located in the directory "src/testdir". + +There are several types of tests added over time: + test33.in oldest, don't add any of these + test_something.in old style tests + test_something.vim new style tests + + *new-style-testing* +New tests should be added as new style tests. These use functions such as +|assert_equal()| to keep the test commands and the expected result in one +place. + *old-style-testing* +In some cases an old style test needs to be used. E.g. when testing Vim +without the |+eval| feature. + +Find more information in the file src/testdir/README.txt. + +============================================================================== +2. Test functions *test-functions-details* + +test_garbagecollect_now() *test_garbagecollect_now()* + Like garbagecollect(), but executed right away. This must + only be called directly to avoid any structure to exist + internally, and |v:testing| must have been set before calling + any function. + +============================================================================== +3. Assert functions *assert-functions-details* + + +assert_beeps({cmd}) *assert_beeps()* + Run {cmd} and add an error message to |v:errors| if it does + NOT produce a beep or visual bell. + Also see |assert_fails()|, |assert_nobeep()| and + |assert-return|. + + *assert_equal()* +assert_equal({expected}, {actual} [, {msg}]) + When {expected} and {actual} are not equal an error message is + added to |v:errors| and 1 is returned. Otherwise zero is + returned |assert-return|. + There is no automatic conversion, the String "4" is different + from the Number 4. And the number 4 is different from the + Float 4.0. The value of 'ignorecase' is not used here, case + always matters. + When {msg} is omitted an error in the form "Expected + {expected} but got {actual}" is produced. + Example: > + assert_equal('foo', 'bar') +< Will result in a string to be added to |v:errors|: + test.vim line 12: Expected 'foo' but got 'bar' ~ + + *assert_equalfile()* +assert_equalfile({fname-one}, {fname-two}) + When the files {fname-one} and {fname-two} do not contain + exactly the same text an error message is added to |v:errors|. + Also see |assert-return|. + When {fname-one} or {fname-two} does not exist the error will + mention that. + +assert_exception({error} [, {msg}]) *assert_exception()* + When v:exception does not contain the string {error} an error + message is added to |v:errors|. Also see |assert-return|. + This can be used to assert that a command throws an exception. + Using the error number, followed by a colon, avoids problems + with translations: > + try + commandthatfails + call assert_false(1, 'command should have failed') + catch + call assert_exception('E492:') + endtry + +assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()* + Run {cmd} and add an error message to |v:errors| if it does + NOT produce an error. Also see |assert-return|. + When {error} is given it must match in |v:errmsg|. + Note that beeping is not considered an error, and some failing + commands only beep. Use |assert_beeps()| for those. + +assert_false({actual} [, {msg}]) *assert_false()* + When {actual} is not false an error message is added to + |v:errors|, like with |assert_equal()|. + Also see |assert-return|. + A value is false when it is zero. When {actual} is not a + number the assert fails. + When {msg} is omitted an error in the form + "Expected False but got {actual}" is produced. + +assert_inrange({lower}, {upper}, {actual} [, {msg}]) *assert_inrange()* + This asserts number and |Float| values. When {actual} is lower + than {lower} or higher than {upper} an error message is added + to |v:errors|. Also see |assert-return|. + When {msg} is omitted an error in the form + "Expected range {lower} - {upper}, but got {actual}" is + produced. + + *assert_match()* +assert_match({pattern}, {actual} [, {msg}]) + When {pattern} does not match {actual} an error message is + added to |v:errors|. Also see |assert-return|. + + {pattern} is used as with |=~|: The matching is always done + like 'magic' was set and 'cpoptions' is empty, no matter what + the actual value of 'magic' or 'cpoptions' is. + + {actual} is used as a string, automatic conversion applies. + Use "^" and "$" to match with the start and end of the text. + Use both to match the whole text. + + When {msg} is omitted an error in the form + "Pattern {pattern} does not match {actual}" is produced. + Example: > + assert_match('^f.*o$', 'foobar') +< Will result in a string to be added to |v:errors|: + test.vim line 12: Pattern '^f.*o$' does not match 'foobar' ~ + +assert_nobeep({cmd}) *assert_nobeep()* + Run {cmd} and add an error message to |v:errors| if it + produces a beep or visual bell. + Also see |assert_beeps()|. + + *assert_notequal()* +assert_notequal({expected}, {actual} [, {msg}]) + The opposite of `assert_equal()`: add an error message to + |v:errors| when {expected} and {actual} are equal. + Also see |assert-return|. + + *assert_notmatch()* +assert_notmatch({pattern}, {actual} [, {msg}]) + The opposite of `assert_match()`: add an error message to + |v:errors| when {pattern} matches {actual}. + Also see |assert-return|. + +assert_report({msg}) *assert_report()* + Report a test failure directly, using {msg}. + Always returns one. + +assert_true({actual} [, {msg}]) *assert_true()* + When {actual} is not true an error message is added to + |v:errors|, like with |assert_equal()|. + Also see |assert-return|. + A value is |TRUE| when it is a non-zero number or |v:true|. + When {actual} is not a number or |v:true| the assert fails. + When {msg} is omitted an error in the form "Expected True but + got {actual}" is produced. + + + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/tips.txt b/runtime/doc/tips.txt index 1362b730b7..bcb2e48cbf 100644 --- a/runtime/doc/tips.txt +++ b/runtime/doc/tips.txt @@ -446,4 +446,28 @@ A slightly more advanced version is used in the |matchparen| plugin. autocmd InsertEnter * match none < +============================================================================== +Opening help in the current window *help-curwin* + +By default, help is displayed in a split window. If you prefer it opens in +the current window, try this custom `:HelpCurwin` command: +> + command -bar -nargs=? -complete=help HelpCurwin execute s:HelpCurwin(<q-args>) + let s:did_open_help = v:false + + function s:HelpCurwin(subject) abort + let mods = 'silent noautocmd keepalt' + if !s:did_open_help + execute mods .. ' help' + execute mods .. ' helpclose' + let s:did_open_help = v:true + endif + if !getcompletion(a:subject, 'help')->empty() + execute mods .. ' edit ' .. &helpfile + endif + return 'help ' .. a:subject + endfunction +< + + vim:tw=78:ts=8:noet:ft=help:norl: diff --git a/runtime/doc/uganda.txt b/runtime/doc/uganda.txt index 97a67befb9..79519da51e 100644 --- a/runtime/doc/uganda.txt +++ b/runtime/doc/uganda.txt @@ -212,7 +212,7 @@ Check the ICCF web site for the latest information! See |iccf| for the URL. USA: The methods mentioned below can be used. Sending a check to the Nehemiah Group Outreach Society (NGOS) is no longer possible, unfortunately. We are looking for - another way to get you an IRS tax receipt. + another way to get you an IRS tax receipt. For sponsoring a child contact KCF in Canada (see below). US checks can be sent to them to lower banking costs. diff --git a/runtime/doc/undo.txt b/runtime/doc/undo.txt index a500e87e35..b11d7581ed 100644 --- a/runtime/doc/undo.txt +++ b/runtime/doc/undo.txt @@ -60,9 +60,9 @@ with the redo command. If you make a new change after the undo command, the redo will not be possible anymore. 'u' included, the Vi-compatible way: -The undo command undoes the previous change, and also the previous undo command. -The redo command repeats the previous undo command. It does NOT repeat a -change command, use "." for that. +The undo command undoes the previous change, and also the previous undo +command. The redo command repeats the previous undo command. It does NOT +repeat a change command, use "." for that. Examples Vim way Vi-compatible way ~ "uu" two times undo no-op @@ -98,7 +98,7 @@ change again. But you can do something like this: > :undojoin | delete -After this an "u" command will undo the delete command and the previous +After this a "u" command will undo the delete command and the previous change. To do the opposite, break a change into two undo blocks, in Insert mode use @@ -257,7 +257,7 @@ respectively: (the magic number at the start of the file is wrong), then this fails, unless the ! was added. If it exists and does look like an undo file it is - overwritten. If there is no undo-history, nothing will be + overwritten. If there is no undo-history, nothing will be written. Implementation detail: Overwriting happens by first deleting the existing file and then creating a new file with the same @@ -371,7 +371,7 @@ back the text of three deletes ago with '"3P'. *redo-register* If you want to get back more than one part of deleted text, you can use a special feature of the repeat command ".". It will increase the number of the -register used. So if you first do ""1P", the following "." will result in a +register used. So if you first do '"1P', the following "." will result in a '"2P'. Repeating this will result in all numbered registers being inserted. Example: If you deleted text with 'dd....' it can be restored with diff --git a/runtime/doc/usr_01.txt b/runtime/doc/usr_01.txt index 3deaf181e5..52fbf06ec4 100644 --- a/runtime/doc/usr_01.txt +++ b/runtime/doc/usr_01.txt @@ -41,11 +41,11 @@ the commands and options used for it. Use these two commands: Press CTRL-O to jump back (repeat to go further back). Many links are in vertical bars, like this: |bars|. The bars themselves may -be hidden or invisible, see below. An option name, like 'number', a command +be hidden or invisible; see below. An option name, like 'number', a command in double quotes like ":write" and any other word can also be used as a link. Try it out: Move the cursor to CTRL-] and press CTRL-] on it. -Other subjects can be found with the ":help" command, see |help.txt|. +Other subjects can be found with the ":help" command; see |help.txt|. The bars and stars are usually hidden with the |conceal| feature. They also use |hl-Ignore|, using the same color for the text as the background. You can @@ -69,7 +69,7 @@ For more info see |vimrc|. *01.3* Using the Vim tutor *tutor* *vimtutor* Instead of reading the text (boring!) you can use :Tutor to learn your first -Vim commands. This is a 30 minute tutorial that teaches the most basic Vim +Vim commands. This is a 30-minute tutorial that teaches the most basic Vim functionality hands-on. To start the tutorial, execute > diff --git a/runtime/doc/usr_02.txt b/runtime/doc/usr_02.txt index c8fd7c3e35..f822e7d4b8 100644 --- a/runtime/doc/usr_02.txt +++ b/runtime/doc/usr_02.txt @@ -29,8 +29,8 @@ To start Vim, enter this command: > gvim file.txt -On Unix you can type this at any command prompt. If you are running Windows, -open a command prompt window and enter the command. In either case, Vim +On Unix you can type this at any command prompt. If you are running Microsoft +Windows, open a Command Prompt and enter the command. In either case, Vim starts editing a file called file.txt. Because this is a new file, you get a blank window. This is what your screen will look like: @@ -42,7 +42,7 @@ blank window. This is what your screen will look like: |~ | |"file.txt" [New file] | +---------------------------------------+ - ('#" is the cursor position.) + ('#' is the cursor position.) The tilde (~) lines indicate lines not in the file. In other words, when Vim runs out of file to display, it displays tilde lines. At the bottom of the @@ -253,11 +253,11 @@ restores the character. g intelligent turtle ~ -The next u command restores the next-to-last character deleted: +The next "u" command restores the next-to-last character deleted: ng intelligent turtle ~ -The next u command gives you the u, and so on: +The next "u" command gives you the u, and so on: ung intelligent turtle ~ oung intelligent turtle ~ @@ -364,7 +364,7 @@ To exit, use the "ZZ" command. This command writes the file and exits. Unlike many other editors, Vim does not automatically make a backup file. If you type "ZZ", your changes are committed and there's no turning back. You can configure the Vim editor to produce backup - files, see |07.4|. + files; see |07.4|. DISCARDING CHANGES @@ -387,7 +387,7 @@ message and refuse to exit: E37: No write since last change (use ! to override) ~ By specifying the override, you are in effect telling Vim, "I know that what -I'm doing looks stupid, but I'm a big boy and really want to do this." +I'm doing looks stupid, but I really want to do this." If you want to continue editing with Vim: The ":e!" command reloads the original version of the file. @@ -499,14 +499,14 @@ Summary: *help-summary* > 1) Use Ctrl-D after typing a topic and let Vim show all available topics. Or press Tab to complete: > - :help some<Tab> + :help some<Tab> < More information on how to use the help: > :help helphelp 2) Follow the links in bars to related help. You can go from the detailed help to the user documentation, which describes certain commands more from a user perspective and less detailed. E.g. after: > - :help pattern.txt + :help pattern.txt < You can see the user guide topics |03.9| and |usr_27.txt| in the introduction. @@ -518,29 +518,29 @@ Summary: *help-summary* > < to open the help page which describes all option handling and then search using regular expressions, e.g. textwidth. Certain options have their own namespace, e.g.: > - :help cpo-<letter> + :help cpo-<letter> < for the corresponding flag of the 'cpoptions' settings, substitute <letter> by a specific flag, e.g.: > - :help cpo-; -< And for the guioption flags: > - :help go-<letter> + :help cpo-; +< And for the 'guioptions' flags: > + :help go-<letter> 4) Normal mode commands do not have a prefix. To go to the help page for the "gt" command: > - :help gt + :help gt 5) Insert mode commands start with i_. Help for deleting a word: > - :help i_CTRL-W + :help i_CTRL-W 6) Visual mode commands start with v_. Help for jumping to the other side of the Visual area: > - :help v_o + :help v_o 7) Command line editing and arguments start with c_. Help for using the command argument %: > - :help c_% + :help c_% -8) Ex-commands always start with ":", so to go to the :s command help: > +8) Ex-commands always start with ":", so to go to the ":s" command help: > :help :s 9) Commands specifically for debugging start with ">". To go to the help @@ -549,55 +549,56 @@ Summary: *help-summary* > 10) Key combinations. They usually start with a single letter indicating the mode for which they can be used. E.g.: > - :help i_CTRL-X -< takes you to the family of Ctrl-X commands for insert mode which can be - used to auto complete different things. Note, that certain keys will + :help i_CTRL-X +< takes you to the family of CTRL-X commands for insert mode which can be + used to auto-complete different things. Note, that certain keys will always be written the same, e.g. Control will always be CTRL. For normal mode commands there is no prefix and the topic is available at :h CTRL-<Letter>. E.g. > - :help CTRL-W + :help CTRL-W < In contrast > :help c_CTRL-R -< will describe what the Ctrl-R does when entering commands in the Command +< will describe what the CTRL-R does when entering commands in the Command line and > - :help v_Ctrl-A + :help v_CTRL-A < talks about incrementing numbers in visual mode and > :help g_CTRL-A -< talks about the g<C-A> command (e.g. you have to press "g" then <Ctrl-A>). - Here the "g" stand for the normal command "g" which always expects a second - key before doing something similar to the commands starting with "z" +< talks about the "g<C-A>" command (e.g. you have to press "g" then + <CTRL-A>). Here the "g" stands for the normal command "g" which always + expects a second key before doing something similar to the commands + starting with "z". 11) Regexp items always start with /. So to get help for the "\+" quantifier in Vim regexes: > - :help /\+ + :help /\+ < If you need to know everything about regular expressions, start reading at: > - :help pattern.txt + :help pattern.txt 12) Registers always start with "quote". To find out about the special ":" register: > - :help quote: + :help quote: 13) Vim Script is available at > :help eval.txt < Certain aspects of the language are available at :h expr-X where "X" is a single letter. E.g. > - :help expr-! -< will take you to the topic describing the "!" (Not) operator for - VimScript. + :help expr-! +< will take you to the topic describing the "!" (Not) operator for Vim + Script. Also important is > - :help function-list + :help function-list < to find a short description of all functions available. Help topics for Vim script functions always include the "()", so: > - :help append() + :help append() < talks about the append Vim script function rather than how to append text in the current buffer. 14) Mappings are talked about in the help page :h |map.txt|. Use > - :help mapmode-i + :help mapmode-i < to find out about the |:imap| command. Also use :map-topic to find out about certain subtopics particular for mappings. e.g: > - :help :map-local + :help :map-local < for buffer-local mappings or > :help map-bar < for how the '|' is handled in mappings. @@ -608,7 +609,7 @@ Summary: *help-summary* > 16) Window management commands always start with CTRL-W, so you find the corresponding help at :h CTRL-W_letter. E.g. > - :help CTRL-W_p + :help CTRL-W_p < for moving the previous accessed window. You can also access > :help windows.txt < and read your way through if you are looking for window handling @@ -617,57 +618,58 @@ Summary: *help-summary* > 17) Use |:helpgrep| to search in all help pages (and also of any installed plugins). See |:helpgrep| for how to use it. To search for a topic: > - :helpgrep topic + :helpgrep topic < This takes you to the first match. To go to the next one: > :cnext < All matches are available in the quickfix window which can be opened with: > - :copen + :copen < Move around to the match you like and press Enter to jump to that help. 18) The user manual. This describes help topics for beginners in a rather friendly way. Start at |usr_toc.txt| to find the table of content (as you might have guessed): > - :help usr_toc.txt + :help usr_toc.txt < Skim over the contents to find interesting topics. The "Digraphs" and "Entering special characters" items are in chapter 24, so to go to that particular help page: > - :help usr_24.txt + :help usr_24.txt < Also if you want to access a certain chapter in the help, the chapter number can be accessed directly like this: > - :help 10.1 -< goes to chapter 10.1 in |usr_10.txt| and talks about recording macros. + :help 10.1 +< which goes to chapter 10.1 in |usr_10.txt| and talks about recording + macros. 19) Highlighting groups. Always start with hl-groupname. E.g. > - :help hl-WarningMsg + :help hl-WarningMsg < talks about the WarningMsg highlighting group. -20) Syntax highlighting is namespaced to :syn-topic e.g. > +20) Syntax highlighting is namespaced to :syn-topic. E.g. > :help :syn-conceal -< talks about the conceal argument for the :syn command. +< talks about the conceal argument for the ":syn" command. 21) Quickfix commands usually start with :c while location list commands usually start with :l 22) Autocommand events can be found by their name: > - :help BufWinLeave + :help BufWinLeave < To see all possible events: > :help events 23) Command-line switches always start with "-". So for the help of the -f command switch of Vim use: > - :help -f + :help -f 24) Optional features always start with "+". To find out about the conceal feature use: > - :help +conceal + :help +conceal 25) Documentation for included filetype specific functionality is usually available in the form ft-<filetype>-<functionality>. So > - :help ft-c-syntax + :help ft-c-syntax < talks about the C syntax file and the option it provides. Sometimes, additional sections for omni completion > - :help ft-php-omni + :help ft-php-omni < or filetype plugins > :help ft-tex-plugin < are available. @@ -677,9 +679,9 @@ Summary: *help-summary* > < takes you exactly to the description of the swap error message and > :help W10 < talks about the warning "Changing a readonly file". - Sometimes however, those error codes are not described, but rather are + Sometimes, however, those error codes are not described, but rather are listed at the Vim command that usually causes this. So: > - :help E128 + :help E128 < takes you to the |:function| command diff --git a/runtime/doc/usr_03.txt b/runtime/doc/usr_03.txt index 2649534900..74674fdb42 100644 --- a/runtime/doc/usr_03.txt +++ b/runtime/doc/usr_03.txt @@ -30,10 +30,11 @@ Table of contents: |usr_toc.txt| To move the cursor forward one word, use the "w" command. Like most Vim commands, you can use a numeric prefix to move past multiple words. For -example, "3w" moves three words. This figure shows how it works: +example, "3w" moves three words. This figure shows how it works (starting at +the position marked with "x"): This is a line with example text ~ - --->-->->-----------------> + x-->-->->-----------------> w w w 3w Notice that "w" moves to the start of the next word if it already is at the @@ -41,15 +42,15 @@ start of a word. The "b" command moves backward to the start of the previous word: This is a line with example text ~ - <----<--<-<---------<--- + <----<--<-<---------<--x b b b 2b b There is also the "e" command that moves to the next end of a word and "ge", which moves to the previous end of a word: This is a line with example text ~ - <- <--- -----> ----> - ge ge e e + <----<----x---->------------> + 2ge ge e 2e If you are at the last word of a line, the "w" command will take you to the first word in the next line. Thus you can use this to move through a @@ -81,13 +82,13 @@ The "$" command moves the cursor to the end of a line. If your keyboard has an <End> key it will do the same thing. The "^" command moves to the first non-blank character of the line. The "0" -command (zero) moves to the very first character of the line. The <Home> key -does the same thing. In a picture: +command (zero) moves to the very first character of the line, and the <Home> +key does the same thing. In a picture ("." indicates a space): ^ - <------------ + <-----------x .....This is a line with example text ~ - <----------------- ---------------> + <----------------x x--------------> 0 $ (the "....." indicates blanks here) @@ -222,7 +223,8 @@ you can see? This figure shows the three commands you can use: L --> | text sample text | +---------------------------+ -Hints: "H" stands for Home, "M" for Middle and "L" for Last. +Hints: "H" stands for Home, "M" for Middle and "L" for Last. Alternatively, +"H" for high, "M" for Middle and "L" for low. ============================================================================== *03.6* Telling where you are @@ -299,22 +301,22 @@ To scroll one line at a time use CTRL-E (scroll up) and CTRL-Y (scroll down). Think of CTRL-E to give you one line Extra. (If you use MS-Windows compatible key mappings CTRL-Y will redo a change instead of scroll.) -To scroll forward by a whole screen (except for two lines) use CTRL-F. The -other way is backward, CTRL-B is the command to use. Fortunately CTRL-F is -Forward and CTRL-B is Backward, that's easy to remember. +To scroll forward by a whole screen (except for two lines) use CTRL-F. To +scroll backwards, use CTRL-B. These should be easy to remember: F for +Forwards and B for Backwards. A common issue is that after moving down many lines with "j" your cursor is at the bottom of the screen. You would like to see the context of the line with the cursor. That's done with the "zz" command. +------------------+ +------------------+ - | some text | | some text | - | some text | | some text | - | some text | | some text | - | some text | zz --> | line with cursor | - | some text | | some text | - | some text | | some text | - | line with cursor | | some text | + | earlier text | | earlier text | + | earlier text | | earlier text | + | earlier text | | earlier text | + | earlier text | zz --> | line with cursor | + | earlier text | | later text | + | earlier text | | later text | + | line with cursor | | later text | +------------------+ +------------------+ The "zt" command puts the cursor line at the top, "zb" at the bottom. There @@ -346,7 +348,8 @@ to find the first #include after the cursor: > And then type "n" several times. You will move to each #include in the text. You can also use a count if you know which match you want. Thus "3n" finds -the third match. Using a count with "/" doesn't work. +the third match. You can also use a count with "/": "4/the" goes to the +fourth match of "the". The "?" command works like "/" but searches backwards: > @@ -354,7 +357,7 @@ The "?" command works like "/" but searches backwards: > The "N" command repeats the last search the opposite direction. Thus using "N" after a "/" command searches backwards, using "N" after "?" searches -forward. +forwards. IGNORING CASE @@ -458,8 +461,8 @@ essential ones: :set nowrapscan This stops the search at the end of the file. Or, when you are searching -backwards, at the start of the file. The 'wrapscan' option is on by default, -thus searching wraps around the end of the file. +backwards, it stops the search at the start of the file. The 'wrapscan' +option is on by default, thus searching wraps around the end of the file. > :set noincsearch @@ -481,7 +484,8 @@ Vim. Example: > Go:set hlsearch<Esc> "G" moves to the end of the file. "o" starts a new line, where you type the -":set" command. You end insert mode with <Esc>. Then write the file: > +":set" command. You end insert mode with <Esc>. Then write and close the +file: > ZZ @@ -495,8 +499,8 @@ Regular expressions are an extremely powerful and compact way to specify a search pattern. Unfortunately, this power comes at a price, because regular expressions are a bit tricky to specify. In this section we mention only a few essential ones. More about search -patterns and commands in chapter 27 |usr_27.txt|. You can find the full -explanation here: |pattern|. +patterns and commands can be found in chapter 27 |usr_27.txt|. You can find +the full explanation here: |pattern|. BEGINNING AND END OF A LINE @@ -522,9 +526,9 @@ And with "/^the" we find this one: the solder holding one of the chips melted and the ~ xxx -You can try searching with "/^the$", it will only match a single line -consisting of "the". White space does matter here, thus if a line contains a -space after the word, like "the ", the pattern will not match. +You can try searching with "/^the$"; it will only match a single line +consisting entirely of "the". White space does matter here, thus if a line +contains a space after the word, like "the ", the pattern will not match. MATCHING ANY SINGLE CHARACTER @@ -559,20 +563,20 @@ where you came from, use this command: > This ` is a backtick or open single-quote character. If you use the same command a second time you will jump back again. That's -because the ` command is a jump itself, and the position from before this jump -is remembered. +because the "`" command is a jump itself, and the position from before this +jump is remembered. Generally, every time you do a command that can move the cursor further than within the same line, this is called a jump. This includes the search commands "/" and "n" (it doesn't matter how far away the match is). But not the character searches with "fx" and "tx" or the word movements "w" and "e". - Also, "j" and "k" are not considered to be a jump. Even when you use a + Also, "j" and "k" are not considered to be a jump, even when you use a count to make them move the cursor quite a long way away. -The `` command jumps back and forth, between two points. The CTRL-O command +The "``" command jumps back and forth, between two points. The CTRL-O command jumps to older positions (Hint: O for older). CTRL-I then jumps back to newer -positions (Hint: I is just next to O on the keyboard). Consider this sequence -of commands: > +positions (Hint: for many common keyboard layouts, I is just next to O). +Consider this sequence of commands: > 33G /^The @@ -610,9 +614,9 @@ Thus to move to the a mark: > `a -The command 'mark (single quotation mark, or apostrophe) moves you to the -beginning of the line containing the mark. This differs from the `mark -command, which moves you to marked column. +The command "'mark" (single quotation mark, or apostrophe) moves you to the +beginning of the line containing the mark. This differs from the "`mark" +command, which also moves you to the marked column. The marks can be very useful when working on two related parts in a file. Suppose you have some text near the start of the file you need to look at, diff --git a/runtime/doc/usr_04.txt b/runtime/doc/usr_04.txt index a327a09a71..b2dd617542 100644 --- a/runtime/doc/usr_04.txt +++ b/runtime/doc/usr_04.txt @@ -33,7 +33,7 @@ using a count: "4x" deletes four characters. move word command. In fact, the "d" command may be followed by any motion command, and it deletes from the current location to the place where the cursor winds up. - The "4w" command, for example, moves the cursor over four words. The d4w + The "4w" command, for example, moves the cursor over four words. The "d4w" command deletes four words. To err is human. To really foul up you need a computer. ~ @@ -91,14 +91,14 @@ This "c2wbe<Esc>" contains these bits: be insert this text <Esc> back to Normal mode -If you have paid attention, you will have noticed something strange: The space -before "human" isn't deleted. There is a saying that for every problem there -is an answer that is simple, clear, and wrong. That is the case with the -example used here for the "cw" command. The c operator works just like the -d operator, with one exception: "cw". It actually works like "ce", change to -end of word. Thus the space after the word isn't included. This is an -exception that dates back to the old Vi. Since many people are used to it -now, the inconsistency has remained in Vim. +You will have noticed something strange: The space before "human" isn't +deleted. There is a saying that for every problem there is an answer that is +simple, clear, and wrong. That is the case with the example used here for the +"cw" command. The c operator works just like the d operator, with one +exception: "cw". It actually works like "ce", change to end of word. Thus +the space after the word isn't included. This is an exception that dates back +to the old Vi. Since many people are used to it now, the inconsistency has +remained in Vim. MORE CHANGES @@ -114,7 +114,7 @@ Insert mode and append new text. SHORTCUTS Some operator-motion commands are used so often that they have been given a -single letter command: +single-letter command: x stands for dl (delete character under the cursor) X stands for dh (delete character left of the cursor) @@ -138,6 +138,7 @@ REPLACING WITH ONE CHARACTER The "r" command is not an operator. It waits for you to type a character, and will replace the character under the cursor with it. You could do the same with "cl" or with the "s" command, but with "r" you don't have to press <Esc> +to get back out of insert mode. there is somerhing grong here ~ rT rt rw @@ -160,11 +161,11 @@ line break. ============================================================================== *04.3* Repeating a change -The "." command is one of the most simple yet powerful commands in Vim. It +The "." command is one of the simplest yet powerful commands in Vim. It repeats the last change. For instance, suppose you are editing an HTML file and want to delete all the <B> tags. You position the cursor on the first < and delete the <B> with the command "df>". You then go to the < of the next -</B> and kill it using the "." command. The "." command executes the last +</B> and delete it using the "." command. The "." command executes the last change command (in this case, "df>"). To delete another tag, position the cursor on the < and use the "." command. @@ -176,8 +177,8 @@ cursor on the < and use the "." command. f< find next < -------------> . repeat df> --> -The "." command works for all changes you make, except for the "u" (undo), -CTRL-R (redo) and commands that start with a colon (:). +The "." command works for all changes you make, except for "u" (undo), CTRL-R +(redo) and commands that start with a colon (:). Another example: You want to change the word "four" to "five". It appears several times in your text. You can do this quickly with this sequence of @@ -269,8 +270,8 @@ where they open a new line below or above the cursor. ============================================================================== *04.5* Moving text -When you delete something with the "d", "x", or another command, the text is -saved. You can paste it back by using the p command. (The Vim name for +When you delete something with "d", "x", or another command, the text is +saved. You can paste it back by using the "p" command. (The Vim name for this is put). Take a look at how this works. First you will delete an entire line, by putting the cursor on the line you want to delete and typing "dd". Now you @@ -362,11 +363,11 @@ Use "y$" to yank to the end of the line. If you are using the GUI version of Vim (gvim), you can find the "Copy" item in the "Edit" menu. First select some text with Visual mode, then use the -Edit/Copy menu. The selected text is now copied to the clipboard. You can -paste the text in other programs. In Vim itself too. +Edit/Copy menu item. The selected text is now copied to the clipboard. You +can paste the text in other programs. In Vim itself too. If you have copied text to the clipboard in another application, you can paste -it in Vim with the Edit/Paste menu. This works in Normal mode and Insert +it in Vim with the Edit/Paste menu item. This works in Normal mode and Insert mode. In Visual mode the selected text is replaced with the pasted text. The "Cut" menu item deletes the text before it's put on the clipboard. The @@ -385,7 +386,7 @@ To put text from the clipboard back into the text: > "*p This only works on versions of Vim that include clipboard support. More about -the clipboard in section |09.3| and here: |clipboard|. +the clipboard can be found in section |09.3| and here: |clipboard|. ============================================================================== *04.8* Text objects @@ -401,8 +402,8 @@ to do this: "daw". The "d" of "daw" is the delete operator. "aw" is a text object. Hint: "aw" stands for "A Word". Thus "daw" is "Delete A Word". To be precise, the white -space after the word is also deleted (the white space before the word at the -end of the line). +space after the word is also deleted (or the white space before the word if at +the end of the line). Using text objects is the third way to make changes in Vim. We already had operator-motion and Visual mode. Now we add operator-text object. @@ -429,11 +430,11 @@ sentence "Another line.": some text. ~ "cis" consists of the "c" (change) operator and the "is" text object. This -stands for "Inner Sentence". There is also the "as" (a sentence) object. The -difference is that "as" includes the white space after the sentence and "is" -doesn't. If you would delete a sentence, you want to delete the white space -at the same time, thus use "das". If you want to type new text the white -space can remain, thus you use "cis". +stands for "Inner Sentence". There is also the "as" ("A Sentence") object. +The difference is that "as" includes the white space after the sentence and +"is" doesn't. If you would delete a sentence, you want to delete the white +space at the same time, thus use "das". If you want to type new text the +white space can remain, thus you use "cis". You can also use text objects in Visual mode. It will include the text object in the Visual selection. Visual mode continues, thus you can do this several @@ -462,21 +463,21 @@ of characters to replace. It will not continue on the next line. You can switch between Insert mode and Replace mode with the <Insert> key. -When you use <BS> (backspace) to make correction, you will notice that the -old text is put back. Thus it works like an undo command for the last typed -character. +When you use <BS> (backspace) to make a correction, you will notice that the +old text is put back. Thus it works like an undo command for the previously +typed character. ============================================================================== *04.10* Conclusion The operators, movement commands and text objects give you the possibility to -make lots of combinations. Now that you know how it works, you can use N +make lots of combinations. Now that you know how they work, you can use N operators with M movement commands to make N * M commands! -You can find a list of operators here: |operator| +You can find a list of operators here: |operator|. For example, there are many other ways to delete pieces of text. Here are a -few often used ones: +few common ones: x delete character under the cursor (short for "dl") X delete character before the cursor (short for "dh") @@ -492,14 +493,14 @@ If you use "c" instead of "d" they become change commands. And with "y" you yank the text. And so forth. -There are a few often used commands to make changes that didn't fit somewhere +There are a few common commands to make changes that didn't fit somewhere else: - ~ change case of the character under the cursor, and move the + ~ Change case of the character under the cursor, and move the cursor to the next character. This is not an operator (unless 'tildeop' is set), thus you can't use it with a motion - command. It does work in Visual mode and changes case for - all the selected text then. + command. It does work in Visual mode, where it changes case + for all the selected text. I Start Insert mode after moving the cursor to the first non-blank in the line. diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt index 70a0ad97c1..d8634ac6ed 100644 --- a/runtime/doc/usr_05.txt +++ b/runtime/doc/usr_05.txt @@ -45,8 +45,8 @@ This file is always used and is recommended: ~/AppData/Local/nvim/init.vim (Windows) ~ The vimrc file can contain all the commands that you type after a colon. The -most simple ones are for setting options. For example, if you want Vim to -always start with the 'ignorecase' option on, add this line your vimrc file: > +simplest ones are for setting options. For example, if you want Vim to always +start with the 'incsearch' option on, add this line your vimrc file: > set ignorecase diff --git a/runtime/doc/usr_07.txt b/runtime/doc/usr_07.txt index c44a54d76c..649be8d7ce 100644 --- a/runtime/doc/usr_07.txt +++ b/runtime/doc/usr_07.txt @@ -227,8 +227,8 @@ the file. FILE MARKS -In chapter 4 was explained how you can place a mark in a file with "mx" and -jump to that position with "`x". That works within one file. If you edit +In section |03.10| was explained how you can place a mark in a file with "mx" +and jump to that position with "`x". That works within one file. If you edit another file and place marks there, these are specific for that file. Thus each file has its own set of marks, they are local to the file. So far we were using marks with a lowercase letter. There are also marks diff --git a/runtime/doc/usr_08.txt b/runtime/doc/usr_08.txt index 559ca6f1ef..8e69307a94 100644 --- a/runtime/doc/usr_08.txt +++ b/runtime/doc/usr_08.txt @@ -401,7 +401,7 @@ Another way to start in diff mode can be done from inside Vim. Edit the "main.c" file, then make a split and show the differences: > :edit main.c - :vertical diffsplit main.c~ + :vertical diffsplit main.c~ The ":vertical" command is used to make the window split vertically. If you omit this, you will get a horizontal split. diff --git a/runtime/doc/usr_10.txt b/runtime/doc/usr_10.txt index 3646786052..5365f90314 100644 --- a/runtime/doc/usr_10.txt +++ b/runtime/doc/usr_10.txt @@ -370,7 +370,8 @@ into "barfoo". was specified in this example. This is different from ":substitute", which works on one line without a range. The command isn't perfect, since it also matches lines where "//" appears -halfway in a line, and the substitution will also take place before the "//". +halfway through a line, and the substitution will also take place before the +"//". Just like with ":substitute", any pattern can be used. When you learn more complicated patterns later, you can use them here. @@ -634,9 +635,9 @@ using it. To check the current value of 'textwidth': > :set textwidth Now lines will be broken to take only up to 78 characters. However, when you -insert text halfway through a line or delete a few words, the line will get -too long or too short as Vim won't automatically reformat the text. To tell -Vim to format the current paragraph: +insert text halfway through a line, or when you delete a few words, the lines +will get too long or too short. Vim doesn't automatically reformat the text. +To tell Vim to format the current paragraph: > gqap @@ -686,7 +687,7 @@ with any motion command, with text objects and in Visual mode. lowercase. This can be shortened to "guu". "gUgU" is shortened to "gUU" and "g~g~" to "g~~". Example: > - g~~ + g~~ < Some GIRLS have Fun ----> sOME girls HAVE fUN ~ ============================================================================== diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt index c26f1e8f09..361fe51caa 100644 --- a/runtime/doc/usr_11.txt +++ b/runtime/doc/usr_11.txt @@ -211,8 +211,11 @@ will automatically delete it: - The flag that the file was modified is not set. - The process is not running. +You can programmatically deal with this situation with the |FileChangedShell| +autocommand event. -UNREADABLE SWAP FILE + +UNREADABLE SWAP FILE ~ Sometimes the line @@ -253,7 +256,7 @@ O Open the file readonly. Use this when you just want to view the file and E Edit the file anyway. Use this with caution! If the file is being edited in another Vim, you might end up with two versions of the file. Vim will - try to warn you when this happens, but better be safe then sorry. + try to warn you when this happens, but better be safe than sorry. R Recover the file from the swap file. Use this if you know that the swap file contains changes that you want to recover. @@ -290,7 +293,7 @@ machines. Therefore, don't rely on Vim always warning you. If you really don't want to see this message, you can add the 'A' flag to the 'shortmess' option. But it's very unusual that you need this. -For programatic access to the swap file, see |swapinfo()|. +For programmatic access to the swap file, see |swapinfo()|. ============================================================================== *11.4* Further reading diff --git a/runtime/doc/usr_12.txt b/runtime/doc/usr_12.txt index 21efa36a25..51a25b1593 100644 --- a/runtime/doc/usr_12.txt +++ b/runtime/doc/usr_12.txt @@ -180,14 +180,14 @@ after it. That way you don't have this problem again. The |:global| command can be combined with the |:move| command to move all the lines before the first line, resulting in a reversed file. The command is: > - :global/^/m 0 + :global/^/move 0 Abbreviated: > :g/^/m 0 The "^" regular expression matches the beginning of the line (even if the line -is blank). The |:move| command moves the matching line to after the mythical +is blank). The |:move| command moves the matching line to after the imaginary zeroth line, so the current matching line becomes the first line of the file. As the |:global| command is not confused by the changing line numbering, |:global| proceeds to match all remaining lines of the file and puts each as diff --git a/runtime/doc/usr_20.txt b/runtime/doc/usr_20.txt index 8eee7aedb7..29252705d6 100644 --- a/runtime/doc/usr_20.txt +++ b/runtime/doc/usr_20.txt @@ -327,10 +327,10 @@ for next. ============================================================================== *20.5* Command line window -Typing the text in the command line works different from typing text in Insert -mode. It doesn't allow many commands to change the text. For most commands -that's OK, but sometimes you have to type a complicated command. That's where -the command line window is useful. +Typing the text in the command line works differently from typing text in +Insert mode. It doesn't allow many commands to change the text. For most +commands that's OK, but sometimes you have to type a complicated command. +That's where the command line window is useful. Open the command line window with this command: > diff --git a/runtime/doc/usr_22.txt b/runtime/doc/usr_22.txt index 96fc02aaa5..56fe5ada2b 100644 --- a/runtime/doc/usr_22.txt +++ b/runtime/doc/usr_22.txt @@ -74,9 +74,9 @@ higher. Pressing "-" does the same thing, without the need to move to the You can press <F1> to get help on the things you can do in the netrw file browser. This is what you get: > - 9. Directory Browsing netrw-browse netrw-dir netrw-list netrw-help + 9. Directory Browsing netrw-browse netrw-dir netrw-list netrw-help - MAPS netrw-maps + MAPS netrw-maps <F1>.............Help.......................................|netrw-help| <cr>.............Browsing...................................|netrw-cr| <del>............Deleting Files or Directories..............|netrw-delete| @@ -84,7 +84,7 @@ browser. This is what you get: > a................Hiding Files or Directories................|netrw-a| mb...............Bookmarking a Directory....................|netrw-mb| gb...............Changing to a Bookmarked Directory.........|netrw-gb| - c................Make Browsing Directory The Current Dir....|netrw-c| + cd...............Make Browsing Directory The Current Dir....|netrw-c| d................Make A New Directory.......................|netrw-d| D................Deleting Files or Directories..............|netrw-D| <c-h>............Edit File/Directory Hiding List............|netrw-ctrl-h| @@ -121,7 +121,7 @@ The following normal-mode commands may be used to control the browser display: As a sampling of extra normal-mode commands: - c Change Vim's notion of the current directory to be + cd Change Vim's notion of the current directory to be the same as the browser directory. (see |g:netrw_keepdir| to control this, too) R Rename the file or directory under the cursor; a diff --git a/runtime/doc/usr_23.txt b/runtime/doc/usr_23.txt index 810da05ff8..2f88793db2 100644 --- a/runtime/doc/usr_23.txt +++ b/runtime/doc/usr_23.txt @@ -26,9 +26,9 @@ start a new line. One to move the carriage back to the first position (carriage return, <CR>), another to move the paper up (line feed, <LF>). When computers came out, storage was expensive. Some people decided that they did not need two characters for end-of-line. The Unix people decided -they could use <Line Feed> only for end-of-line. The Apple people -standardized on <CR>. The MS-DOS (and Microsoft Windows) folks decided to -keep the old <CR><LF>. +they could use <New Line> or <NL> only for end-of-line. The Apple people +standardized on <CR>. The Microsoft Windows folks decided to keep the old +<CR><NL> (we use <NL> for line feed in the help text). This means that if you try to move a file from one system to another, you have line-break problems. The Vim editor automatically recognizes the different file formats and handles things properly behind your back. @@ -53,20 +53,20 @@ which format you have, execute the following command: > The three names that Vim uses are: - unix <LF> - dos <CR><LF> + unix <NL> + dos <CR><NL> mac <CR> USING THE MAC FORMAT -On Unix, <LF> is used to break a line. It's not unusual to have a <CR> +On Unix, <NL> is used to break a line. It's not unusual to have a <CR> character halfway in a line. Incidentally, this happens quite often in Vi (and Vim) scripts. On the Macintosh, where <CR> is the line break character, it's possible to -have a <LF> character halfway in a line. +have a <NL> character halfway in a line. The result is that it's not possible to be 100% sure whether a file -containing both <CR> and <LF> characters is a Mac or a Unix file. Therefore, +containing both <CR> and <NL> characters is a Mac or a Unix file. Therefore, Vim assumes that on Unix you probably won't edit a Mac file, and doesn't check for this type of file. To check for this format anyway, add "mac" to 'fileformats': > diff --git a/runtime/doc/usr_24.txt b/runtime/doc/usr_24.txt index 3c4ff6f55e..efda2bc33d 100644 --- a/runtime/doc/usr_24.txt +++ b/runtime/doc/usr_24.txt @@ -563,9 +563,9 @@ that combination. Thus CTRL-K dP also works. Since there is no digraph for "dP" Vim will also search for a "Pd" digraph. Note: - The digraphs depend on the character set that Vim assumes you - are using. Always use ":digraphs" to find out which digraphs are - currently available. + The digraphs depend on the character set that Vim assumes you are + using. Always use ":digraphs" to find out which digraphs are currently + available. You can define your own digraphs. Example: > diff --git a/runtime/doc/usr_27.txt b/runtime/doc/usr_27.txt index 637523b9ee..230603de70 100644 --- a/runtime/doc/usr_27.txt +++ b/runtime/doc/usr_27.txt @@ -83,7 +83,7 @@ matter if 'ignorecase' or 'smartcase' was changed. Note: If your search takes much longer than you expected, you can interrupt - it with CTRL-C on Unix and CTRL-Break on Windows. + it with CTRL-C on Unix and CTRL-Break on MS-Windows. ============================================================================== *27.2* Wrapping around the file end @@ -434,7 +434,7 @@ redefined without changing the search pattern. /\f\+ -The "\f" items stands for file name characters. Thus this matches a sequence +The "\f" item stands for file name characters. Thus this matches a sequence of characters that can be a file name. Which characters can be part of a file name depends on the system you are using. On MS-Windows, the backslash is included, on Unix it is not. This is diff --git a/runtime/doc/usr_30.txt b/runtime/doc/usr_30.txt index b729c7a263..98d1780cc4 100644 --- a/runtime/doc/usr_30.txt +++ b/runtime/doc/usr_30.txt @@ -336,7 +336,7 @@ How to do that is explained here: |indent-expression|. ============================================================================== *30.4* Other indenting -The most simple form of automatic indenting is with the 'autoindent' option. +The simplest form of automatic indenting is with the 'autoindent' option. It uses the indent from the previous line. A bit smarter is the 'smartindent' option. This is useful for languages where no indent file is available. 'smartindent' is not as smart as 'cindent', but smarter than 'autoindent'. diff --git a/runtime/doc/usr_31.txt b/runtime/doc/usr_31.txt index 74de3f1042..a35f392324 100644 --- a/runtime/doc/usr_31.txt +++ b/runtime/doc/usr_31.txt @@ -198,9 +198,9 @@ is not possible in most terminals. You can start the X-Windows version of gvim with an argument to specify the size and position of the window: > - gvim -geometry {width}x{height}+{x_offset}+{y_offset} + gvim -geometry {width}x{height}+{x-offset}+{y-offset} -{width} and {height} are in characters, {x_offset} and {y_offset} are in +{width} and {height} are in characters, {x-offset} and {y-offset} are in pixels. Example: > gvim -geometry 80x25+100+300 diff --git a/runtime/doc/usr_40.txt b/runtime/doc/usr_40.txt index 9a1fe50f31..5b1254e2ae 100644 --- a/runtime/doc/usr_40.txt +++ b/runtime/doc/usr_40.txt @@ -453,12 +453,12 @@ matching BufWritePre autocommands and executes them, and then it performs the ":write". The general form of the :autocmd command is as follows: > - :autocmd [group] {events} {file_pattern} [++nested] {command} + :autocmd [group] {events} {file-pattern} [++nested] {command} The [group] name is optional. It is used in managing and calling the commands (more on this later). The {events} parameter is a list of events (comma separated) that trigger the command. - {file_pattern} is a filename, usually with wildcards. For example, using + {file-pattern} is a filename, usually with wildcards. For example, using "*.txt" makes the autocommand be used for all files whose name end in ".txt". The optional [++nested] flag allows for nesting of autocommands (see below), and finally, {command} is the command to be executed. @@ -489,7 +489,7 @@ See |autocmd-events| for a complete list of events. PATTERNS -The {file_pattern} argument can actually be a comma-separated list of file +The {file-pattern} argument can actually be a comma-separated list of file patterns. For example: "*.c,*.h" matches files ending in ".c" and ".h". The usual file wildcards can be used. Here is a summary of the most often used ones: diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 41948f577e..4cba5a33d0 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -41,6 +41,12 @@ prefer. And you can use any colon command in it (commands that start with a specific file type. A complicated macro can be defined by a separate Vim script file. You can think of other uses yourself. + If you are familiar with Python, you can find a comparison between + Python and Vim script here, with pointers to other documents: + https://gist.github.com/yegappan/16d964a37ead0979b05e655aa036cad0 + And if you are familiar with JavaScript: + https://w0rp.com/blog/post/vim-script-for-the-javascripter/ + Let's start with a simple example: > :let i = 1 @@ -93,6 +99,8 @@ and the value of the variable i. Since i is one, this will print: Then there is the ":let i += 1" command. This does the same thing as ":let i = i + 1". This adds one to the variable i and assigns the new value to the same variable. +Note: this is how it works in legacy Vim script, which is what we discuss in +this file. The example was given to explain the commands, but would you really want to make such a loop, it can be written much more compact: > @@ -107,21 +115,29 @@ if you are impatient. FOUR KINDS OF NUMBERS -Numbers can be decimal, hexadecimal, octal or binary. A hexadecimal number -starts with "0x" or "0X". For example "0x1f" is decimal 31. An octal number -starts with a zero. "017" is decimal 15. A binary number starts with "0b" or -"0B". For example "0b101" is decimal 5. Careful: don't put a zero before a -decimal number, it will be interpreted as an octal number! - The ":echo" command always prints decimal numbers. Example: > +Numbers can be decimal, hexadecimal, octal or binary. + +A hexadecimal number starts with "0x" or "0X". For example "0x1f" is decimal +31. + +An octal number starts with "0o", "0O" or a zero and another digit. "0o17" is +decimal 15. Using just a zero prefix is not supported in Vim9 script. + +A binary number starts with "0b" or "0B". For example "0b101" is decimal 5. + +A decimal number is just digits. Careful: don't put a zero before a decimal +number, it will be interpreted as an octal number in legacy script! + +The ":echo" command always prints decimal numbers. Example: > - :echo 0x7f 036 + :echo 0x7f 0o36 < 127 30 ~ A number is made negative with a minus sign. This also works for hexadecimal, octal and binary numbers. A minus sign is also used for subtraction. Compare this with the previous example: > - :echo 0x7f -036 + :echo 0x7f -0o36 < 97 ~ White space in an expression is ignored. However, it's recommended to use it @@ -129,7 +145,7 @@ for separating items, to make the expression easier to read. For example, to avoid the confusion with a negative number above, put a space between the minus sign and the following number: > - :echo 0x7f - 036 + :echo 0x7f - 0o36 ============================================================================== *41.2* Variables @@ -319,9 +335,9 @@ Grouping is done with parentheses. No surprises here. Example: > :echo (10 + 5) * 2 < 30 ~ -Strings can be concatenated with ".". Example: > +Strings can be concatenated with ".." (see |expr6|). Example: > - :echo "foo" . "bar" + :echo "foo" .. "bar" < foobar ~ When the ":echo" command gets multiple arguments, it separates them with a @@ -488,9 +504,9 @@ So far the commands in the script were executed by Vim directly. The very powerful way to build commands and execute them. An example is to jump to a tag, which is contained in a variable: > - :execute "tag " . tag_name + :execute "tag " .. tag_name -The "." is used to concatenate the string "tag " with the value of variable +The ".." is used to concatenate the string "tag " with the value of variable "tag_name". Suppose "tag_name" has the value "get_cmd", then the command that will be executed is: > @@ -506,7 +522,7 @@ This jumps to the first line and formats all lines with the "=" operator. To make ":normal" work with an expression, combine ":execute" with it. Example: > - :execute "normal " . normal_commands + :execute "normal " .. normal_commands The variable "normal_commands" must contain the Normal mode commands. Make sure that the argument for ":normal" is a complete command. Otherwise @@ -523,12 +539,12 @@ If you don't want to execute a string but evaluate it to get its expression value, you can use the eval() function: > :let optname = "path" - :let optval = eval('&' . optname) + :let optval = eval('&' .. optname) A "&" character is prepended to "path", thus the argument to eval() is "&path". The result will then be the value of the 'path' option. The same thing can be done with: > - :exe 'let optval = &' . optname + :exe 'let optval = &' .. optname ============================================================================== *41.6* Using functions @@ -848,6 +864,7 @@ Insert mode completion: *completion-functions* complete_check() check if completion should be aborted complete_info() get current completion information pumvisible() check if the popup menu is displayed + pum_getpos() position and size of popup menu if visible Folding: *folding-functions* foldclosed() check for a closed fold at a specific line @@ -1127,7 +1144,7 @@ Example: > : let n = n + len(split(getline(lnum))) : let lnum = lnum + 1 : endwhile - : echo "found " . n . " words" + : echo "found " .. n .. " words" :endfunction You can call this function with: > @@ -1140,7 +1157,7 @@ It will be executed once and echo the number of words. range, with the cursor in that line. Example: > :function Number() - : echo "line " . line(".") . " contains: " . getline(".") + : echo "line " .. line(".") .. " contains: " .. getline(".") :endfunction If you call this function with: > @@ -1164,11 +1181,11 @@ so on. The variable "a:0" contains the number of extra arguments. :function Show(start, ...) : echohl Title - : echo "start is " . a:start + : echo "start is " .. a:start : echohl None : let index = 1 : while index <= a:0 - : echo " Arg " . index . " is " . a:{index} + : echo " Arg " .. index .. " is " .. a:{index} : let index = index + 1 : endwhile : echo "" @@ -1576,10 +1593,10 @@ Another useful mechanism is the ":finally" command: > :let tmp = tempname() :try - : exe ".,$write " . tmp - : exe "!filter " . tmp + : exe ".,$write " .. tmp + : exe "!filter " .. tmp : .,$delete - : exe "$read " . tmp + : exe "$read " .. tmp :finally : call delete(tmp) :endtry @@ -1600,7 +1617,7 @@ Here is a summary of items that apply to Vim scripts. They are also mentioned elsewhere, but form a nice checklist. The end-of-line character depends on the system. For Unix a single <NL> -character is used. For Windows <CR><LF> is used. This is important when +character is used. For Windows <CR><NL> is used. This is important when using mappings that end in a <CR>. See |:source_crnl|. @@ -1887,9 +1904,9 @@ for this mapping, but the user might already use it for something else. To allow the user to define which keys a mapping in a plugin uses, the <Leader> item can be used: > - 22 map <unique> <Leader>a <Plug>TypecorrAdd + 22 map <unique> <Leader>a <Plug>TypecorrAdd; -The "<Plug>TypecorrAdd" thing will do the work, more about that further on. +The "<Plug>TypecorrAdd;" thing will do the work, more about that further on. The user can set the "mapleader" variable to the key sequence that he wants this mapping to start with. Thus if the user has done: > @@ -1905,15 +1922,15 @@ already happened to exist. |:map-<unique>| But what if the user wants to define his own key sequence? We can allow that with this mechanism: > - 21 if !hasmapto('<Plug>TypecorrAdd') - 22 map <unique> <Leader>a <Plug>TypecorrAdd + 21 if !hasmapto('<Plug>TypecorrAdd;') + 22 map <unique> <Leader>a <Plug>TypecorrAdd; 23 endif -This checks if a mapping to "<Plug>TypecorrAdd" already exists, and only +This checks if a mapping to "<Plug>TypecorrAdd;" already exists, and only defines the mapping from "<Leader>a" if it doesn't. The user then has a chance of putting this in his vimrc file: > - map ,c <Plug>TypecorrAdd + map ,c <Plug>TypecorrAdd; Then the mapped key sequence will be ",c" instead of "_a" or "\a". @@ -1930,8 +1947,8 @@ prepending it with "s:". We will define a function that adds a new typing correction: > 30 function s:Add(from, correct) - 31 let to = input("type the correction for " . a:from . ": ") - 32 exe ":iabbrev " . a:from . " " . to + 31 let to = input("type the correction for " .. a:from .. ": ") + 32 exe ":iabbrev " .. a:from .. " " .. to .. 36 endfunction @@ -1943,15 +1960,15 @@ function (without the "s:"), which is again another function. <SID> can be used with mappings. It generates a script ID, which identifies the current script. In our typing correction plugin we use it like this: > - 24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add + 24 noremap <unique> <script> <Plug>TypecorrAdd; <SID>Add .. 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR> Thus when a user types "\a", this sequence is invoked: > - \a -> <Plug>TypecorrAdd -> <SID>Add -> :call <SID>Add() + \a -> <Plug>TypecorrAdd; -> <SID>Add -> :call <SID>Add() -If another script would also map <SID>Add, it would get another script ID and +If another script also maps <SID>Add, it will get another script ID and thus define another mapping. Note that instead of s:Add() we use <SID>Add() here. That is because the @@ -1992,9 +2009,9 @@ difference between using <SID> and <Plug>: To make it very unlikely that other plugins use the same sequence of characters, use this structure: <Plug> scriptname mapname In our example the scriptname is "Typecorr" and the mapname is "Add". - This results in "<Plug>TypecorrAdd". Only the first character of - scriptname and mapname is uppercase, so that we can see where mapname - starts. + We add a semicolon as the terminator. This results in + "<Plug>TypecorrAdd;". Only the first character of scriptname and + mapname is uppercase, so that we can see where mapname starts. <SID> is the script ID, a unique identifier for a script. Internally Vim translates <SID> to "<SNR>123_", where "123" can be any @@ -2036,7 +2053,7 @@ a few lines to count the number of corrections: > 30 function s:Add(from, correct) .. 34 let s:count = s:count + 1 - 35 echo s:count . " corrections now" + 35 echo s:count .. " corrections now" 36 endfunction First s:count is initialized to 4 in the script itself. When later the @@ -2069,21 +2086,21 @@ Here is the resulting complete example: > 18 \ synchronization 19 let s:count = 4 20 - 21 if !hasmapto('<Plug>TypecorrAdd') - 22 map <unique> <Leader>a <Plug>TypecorrAdd + 21 if !hasmapto('<Plug>TypecorrAdd;') + 22 map <unique> <Leader>a <Plug>TypecorrAdd; 23 endif - 24 noremap <unique> <script> <Plug>TypecorrAdd <SID>Add + 24 noremap <unique> <script> <Plug>TypecorrAdd; <SID>Add 25 26 noremenu <script> Plugin.Add\ Correction <SID>Add 27 28 noremap <SID>Add :call <SID>Add(expand("<cword>"), 1)<CR> 29 30 function s:Add(from, correct) - 31 let to = input("type the correction for " . a:from . ": ") - 32 exe ":iabbrev " . a:from . " " . to + 31 let to = input("type the correction for " .. a:from .. ": ") + 32 exe ":iabbrev " .. a:from .. " " .. to 33 if a:correct | exe "normal viws\<C-R>\" \b\e" | endif 34 let s:count = s:count + 1 - 35 echo s:count . " corrections now" + 35 echo s:count .. " corrections now" 36 endfunction 37 38 if !exists(":Correct") @@ -2122,7 +2139,7 @@ Here is a simple example for a plugin help file, called "typecorr.txt": > 6 There are currently only a few corrections. Add your own if you like. 7 8 Mappings: - 9 <Leader>a or <Plug>TypecorrAdd + 9 <Leader>a or <Plug>TypecorrAdd; 10 Add a correction for the word under the cursor. 11 12 Commands: @@ -2260,13 +2277,13 @@ To make sure mappings will only work in the current buffer use the > command. This needs to be combined with the two-step mapping explained above. An example of how to define functionality in a filetype plugin: > - if !hasmapto('<Plug>JavaImport') - map <buffer> <unique> <LocalLeader>i <Plug>JavaImport + if !hasmapto('<Plug>JavaImport;') + map <buffer> <unique> <LocalLeader>i <Plug>JavaImport; endif - noremap <buffer> <unique> <Plug>JavaImport oimport ""<Left><Esc> + noremap <buffer> <unique> <Plug>JavaImport; oimport ""<Left><Esc> |hasmapto()| is used to check if the user has already defined a map to -<Plug>JavaImport. If not, then the filetype plugin defines the default +<Plug>JavaImport;. If not, then the filetype plugin defines the default mapping. This starts with |<LocalLeader>|, which allows the user to select the key(s) he wants filetype plugin mappings to start with. The default is a backslash. @@ -2283,12 +2300,12 @@ plugin for the mail filetype: > " Add mappings, unless the user didn't want this. if !exists("no_plugin_maps") && !exists("no_mail_maps") " Quote text by inserting "> " - if !hasmapto('<Plug>MailQuote') - vmap <buffer> <LocalLeader>q <Plug>MailQuote - nmap <buffer> <LocalLeader>q <Plug>MailQuote + if !hasmapto('<Plug>MailQuote;') + vmap <buffer> <LocalLeader>q <Plug>MailQuote; + nmap <buffer> <LocalLeader>q <Plug>MailQuote; endif - vnoremap <buffer> <Plug>MailQuote :s/^/> /<CR> - nnoremap <buffer> <Plug>MailQuote :.,$s/^/> /<CR> + vnoremap <buffer> <Plug>MailQuote; :s/^/> /<CR> + nnoremap <buffer> <Plug>MailQuote; :.,$s/^/> /<CR> endif Two global variables are used: @@ -2331,7 +2348,7 @@ should be undone. Set the b:undo_ftplugin variable to the commands that will undo the settings in your filetype plugin. Example: > let b:undo_ftplugin = "setlocal fo< com< tw< commentstring<" - \ . "| unlet b:match_ignorecase b:match_words b:match_skip" + \ .. "| unlet b:match_ignorecase b:match_words b:match_skip" Using ":setlocal" with "<" after the option name resets the option to its global value. That is mostly the best way to reset the option value. @@ -2452,17 +2469,17 @@ The following example shows how it's done: > map <F19> :call BufNetWrite('something')<CR> let s:did_load = 1 - exe 'au FuncUndefined BufNet* source ' . expand('<sfile>') + exe 'au FuncUndefined BufNet* source ' .. expand('<sfile>') finish endif function BufNetRead(...) - echo 'BufNetRead(' . string(a:000) . ')' + echo 'BufNetRead(' .. string(a:000) .. ')' " read functionality here endfunction function BufNetWrite(...) - echo 'BufNetWrite(' . string(a:000) . ')' + echo 'BufNetWrite(' .. string(a:000) .. ')' " write functionality here endfunction diff --git a/runtime/doc/usr_42.txt b/runtime/doc/usr_42.txt index 501f02e745..99da1359c2 100644 --- a/runtime/doc/usr_42.txt +++ b/runtime/doc/usr_42.txt @@ -209,8 +209,8 @@ argument: > :amenu <silent> Mine.Next\ File :call <SID>NextFile()<CR> Don't use "<silent>" too often. It is not needed for short commands. If you -make a menu for someone else, being able the see the executed command will -give him a hint about what he could have typed, instead of using the mouse. +make a menu for someone else, being able to see the executed command will give +him a hint about what he could have typed, instead of using the mouse. LISTING MENUS diff --git a/runtime/doc/usr_44.txt b/runtime/doc/usr_44.txt index 722c3de26c..5c04c26434 100644 --- a/runtime/doc/usr_44.txt +++ b/runtime/doc/usr_44.txt @@ -673,21 +673,10 @@ syntax file, earlier in 'runtimepath' was already loaded: > finish endif -To be compatible with Vim 5.8 use: > - - if version < 600 - syntax clear - elseif exists("b:current_syntax") - finish - endif - Set "b:current_syntax" to the name of the syntax at the end. Don't forget that included files do this too, you might have to reset "b:current_syntax" if you include two files. -If you want your syntax file to work with Vim 5.x, add a check for v:version. -Find an syntax file in the Vim 7.2 distribution for an example. - Do not include anything that is a user preference. Don't set 'tabstop', 'expandtab', etc. These belong in a filetype plugin. diff --git a/runtime/doc/usr_45.txt b/runtime/doc/usr_45.txt index 1ce6969d37..bc95f3405e 100644 --- a/runtime/doc/usr_45.txt +++ b/runtime/doc/usr_45.txt @@ -2,7 +2,7 @@ VIM USER MANUAL - by Bram Moolenaar - Select your language + Select your language (locale) The messages in Vim can be given in several languages. This chapter explains diff --git a/runtime/doc/usr_toc.txt b/runtime/doc/usr_toc.txt index 69846f1bcf..f466a8ece9 100644 --- a/runtime/doc/usr_toc.txt +++ b/runtime/doc/usr_toc.txt @@ -42,7 +42,7 @@ Tuning Vim |usr_42.txt| Add new menus |usr_43.txt| Using filetypes |usr_44.txt| Your own syntax highlighted -|usr_45.txt| Select your language +|usr_45.txt| Select your language (locale) Reference manual @@ -327,7 +327,7 @@ Make Vim work as you like it. |44.11| Installing a syntax file |44.12| Portable syntax file layout -|usr_45.txt| Select your language +|usr_45.txt| Select your language (locale) |45.1| Language for Messages |45.2| Language for Menus |45.3| Using another encoding diff --git a/runtime/doc/various.txt b/runtime/doc/various.txt index 5fb7c4ce50..d5c07d9622 100644 --- a/runtime/doc/various.txt +++ b/runtime/doc/various.txt @@ -92,7 +92,7 @@ g8 Print the hex values of the bytes used in the encoding because it contains illegal bytes. Does not wrap around the end of the file. Note that when the cursor is on an illegal byte or the - cursor is halfway through a multi-byte character the + cursor is halfway through a multibyte character the command won't move the cursor. *:p* *:pr* *:print* *E749* @@ -134,19 +134,21 @@ g8 Print the hex values of the bytes used in the quit < *:z* *E144* -:{range}z[+-^.=]{count} Display several lines of text surrounding the line - specified with {range}, or around the current line - if there is no {range}. If there is a {count}, that's - how many lines you'll see; if there is only one window - then twice the value of the 'scroll' option is used, +:[range]z[+-^.=][count] Display several lines of text surrounding the line + specified with [range], or around the current line + if there is no [range]. + + If there is a [count], that's how many lines you'll + see; if there is no [count] and only one window then + twice the value of the 'scroll' option is used, otherwise the current window height minus 3 is used. + This is the value of "scr" in the table below. - If there is a {count} the 'window' option is set to + If there is a [count] the 'window' option is set to its value. :z can be used either alone or followed by any of - several punctuation marks. These have the following - effect: + several marks. These have the following effect: mark first line last line new cursor line ~ ---- ---------- --------- ------------ @@ -160,7 +162,7 @@ g8 Print the hex values of the bytes used in the If the mark is "=", a line of dashes is printed around the current line. -:{range}z#[+-^.=]{count} *:z#* +:[range]z#[+-^.=][count] *:z#* Like ":z", but number the lines. {not in all versions of Vi, not with these arguments} @@ -260,6 +262,7 @@ g8 Print the hex values of the bytes used in the use it to append a Vim command. See |:bar|. Any "%" in {cmd} is expanded to the current file name. + Any "#" in {cmd} is expanded to the alternate file name. Special characters are not escaped, use quotes or |shellescape()|: > :!ls "%" @@ -338,7 +341,7 @@ g8 Print the hex values of the bytes used in the locked or the variable type is changed, then further command output messages will cause errors. To get the output of one command the |execute()| - function can be used. + function can be used instead of redirection. :redi[r] =>> {var} Append messages to an existing variable. Only string variables can be used. @@ -358,7 +361,7 @@ g8 Print the hex values of the bytes used in the it in / any non-ID character (see |'isident'|) can be used, so long as it does not appear in {pat}. Without the enclosing character the pattern cannot include the - bar character. + bar character. 'ignorecase' is not used. The pattern is matched against the relevant part of the output, not necessarily the whole line. Only some @@ -502,6 +505,9 @@ gO Show a filetype-specific, navigable "outline" of the if at a visible position. Queued messages are processed during the sleep. + *:sl!* *:sleep!* +:[N]sl[eep]! [N] [m] Same as above, but hide the cursor. + ============================================================================== 2. Using Vim like less or more *less* @@ -514,7 +520,7 @@ up mappings to simulate the commands that less supports. Otherwise, you can still use the Vim commands. This isn't perfect. For example, when viewing a short file Vim will still use -the whole screen. But it works good enough for most uses, and you get syntax +the whole screen. But it works well enough for most uses, and you get syntax highlighting. The "h" key will give you a short overview of the available commands. diff --git a/runtime/doc/vi_diff.txt b/runtime/doc/vi_diff.txt index beecca2480..cef2859eb5 100644 --- a/runtime/doc/vi_diff.txt +++ b/runtime/doc/vi_diff.txt @@ -11,9 +11,10 @@ Differences between Vim and Vi *vi-differences* ============================================================================== 1. Limits *limits* -Vim has only a few limits for the files that can be edited. +Vim has only a few limits for the files that can be edited {Vi: can not handle +<Nul> characters and characters above 128, has limited line length, many other +limits}. - *E340* Maximum line length 2147483647 characters Maximum number of lines 2147483647 lines Maximum file size 2147483647 bytes (2 Gbyte) when a long integer is @@ -358,7 +359,7 @@ Editing binary files. |edit-binary| last line in the file. Multi-language support. |multi-lang| - Files in double-byte or multi-byte encodings can be edited. There is + Files in double-byte or multibyte encodings can be edited. There is UTF-8 support to be able to edit various languages at the same time, without switching fonts. |UTF-8| Messages and menus are available in different languages. diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt index eadc1c04a0..2c39fdb53c 100644 --- a/runtime/doc/vim_diff.txt +++ b/runtime/doc/vim_diff.txt @@ -498,13 +498,23 @@ Test functions: test_alloc_fail() test_autochdir() test_disable_char_avail() + test_feedinput() + test_garbagecollect_soon + test_getvalue() + test_ignore_error() + test_null_blob() test_null_channel() test_null_dict() + test_null_function() test_null_job() test_null_list() test_null_partial() test_null_string() + test_option_not_set() test_override() + test_refcount() + test_scrollbar() + test_setmouse() test_settime() TUI: diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt index fd3d93ed98..f7828f0289 100644 --- a/runtime/doc/visual.txt +++ b/runtime/doc/visual.txt @@ -103,6 +103,7 @@ gn Search forward for the last used search pattern, like E.g., "dgn" deletes the text of the next match. If Visual mode is active, extends the selection until the end of the next match. + 'wrapscan' applies Note: Unlike `n` the search direction does not depend on the previous search command. @@ -111,7 +112,7 @@ gN Like |gn| but searches backward, like with `N`. *<LeftMouse>* <LeftMouse> Set the current cursor position. If Visual mode is - active it is stopped. Only when 'mouse' option is + active it is stopped. Only when 'mouse' option contains 'n' or 'a'. If the position is within 'so' lines from the last line on the screen the text is scrolled up. If the position is within 'so' lines from @@ -122,7 +123,7 @@ gN Like |gn| but searches backward, like with `N`. <RightMouse> Start Visual mode if it is not active. The text from the cursor position to the position of the click is highlighted. If Visual mode was already active move - the start or end of the highlighted text, which ever + the start or end of the highlighted text, whichever is closest, to the position of the click. Only when 'mouse' option contains 'n' or 'a'. @@ -225,7 +226,7 @@ The objects that can be used are: is inner sentence |v_is| ap a paragraph (with white space) |v_ap| ip inner paragraph |v_ip| - ab a () block (with parenthesis) |v_ab| + ab a () block (with parentheses) |v_ab| ib inner () block |v_ib| aB a {} block (with braces) |v_aB| iB inner {} block |v_iB| @@ -336,7 +337,7 @@ Visual-block Shift *v_b_>* The block is shifted by 'shiftwidth'. The RHS of the block is irrelevant. The LHS of the block determines the point from which to apply a right shift, and padding includes TABs optimally according to 'ts' and 'et'. The LHS of the -block determines the point upto which to shift left. +block determines the point up to which to shift left. See |v_b_>_example|. See |v_b_<_example|. diff --git a/runtime/doc/windows.txt b/runtime/doc/windows.txt index 35efb1bbce..3a58cc08d9 100644 --- a/runtime/doc/windows.txt +++ b/runtime/doc/windows.txt @@ -115,6 +115,12 @@ status line, the '^' character is used for the current window, and '=' for other windows. If 'mouse' is enabled, a status line can be dragged to resize windows. + *filler-lines* +The lines after the last buffer line in a window are called filler lines. +These lines start with a tilde (~) character. By default, these are +highlighted as NonText (|hl-NonText|). The EndOfBuffer highlight group +(|hl-EndOfBuffer|) can be used to change the highlighting of filler lines. + ============================================================================== 3. Opening and closing a window *opening-window* *E36* @@ -177,15 +183,12 @@ CTRL-W CTRL_N *CTRL-W_CTRL-N* This behaves like a ":split" first, and then an ":enew" command. -:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew* - Like |:new|, but split vertically. If 'equalalways' is set - and 'eadirection' isn't "ver" the windows will be spread out - horizontally, unless a width was specified. - :[N]new [++opt] [+cmd] {file} :[N]sp[lit] [++opt] [+cmd] {file} *:split_f* Create a new window and start editing file {file} in it. This - behaves like a ":split" first, and then an ":e" command. + behaves almost like a ":split" first, and then an ":edit" + command, but the alternate file name in the original window is + set to {file}. If [+cmd] is given, execute the command when the file has been loaded |+cmd|. Also see |++opt|. @@ -193,7 +196,12 @@ CTRL-W CTRL_N *CTRL-W_CTRL-N* height). Reduces the current window height to create room (and others, if the 'equalalways' option is set). -:[N]sv[iew] [++opt] [+cmd] {file} *:sv* *:sview* *splitview* +:[N]vne[w] [++opt] [+cmd] [file] *:vne* *:vnew* + Like |:new|, but split vertically. If 'equalalways' is set + and 'eadirection' isn't "ver" the windows will be spread out + horizontally, unless a width was specified. + +:[N]sv[iew] [++opt] [+cmd] [file] *:sv* *:sview* *splitview* Same as ":split", but set 'readonly' option for this buffer. :[N]sf[ind] [++opt] [+cmd] {file} *:sf* *:sfi* *:sfind* *splitfind* @@ -269,8 +277,9 @@ CTRL-W CTRL-Q *CTRL-W_CTRL-Q* Without {count}: Quit the current window. If {count} is given quit the {count} window - When quitting the last window (not counting a help window), - exit Vim. + *edit-window* + When quitting the last edit window (not counting help or + preview windows), exit Vim. When 'hidden' is set, and there is only one window for the current buffer, it becomes hidden. When 'hidden' is not set, @@ -287,6 +296,10 @@ CTRL-W CTRL-Q *CTRL-W_CTRL-Q* :+quit " quit the next window :+2quit " quit the second next window < + When closing a help window, and this is not the only window, + Vim will try to restore the previous window layout, see + |:helpclose|. + :q[uit]! :{count}q[uit]! Without {count}: Quit the current window. If {count} is @@ -306,9 +319,9 @@ CTRL-W c *CTRL-W_c* *:clo* *:close* [!] is used, the buffer becomes hidden (unless there is another window editing it). - When there is only one window in the current tab page and - there is another tab page, this closes the current tab page. - |tab-page|. + When there is only one |edit-window| in the current tab page + and there is another tab page, this closes the current tab + page. |tab-page|. This command fails when: *E444* - There is only one window on the screen. @@ -480,14 +493,14 @@ CTRL-W J Move the current window to be at the very bottom, using the CTRL-W H Move the current window to be at the far left, using the full height of the screen. This works like closing the current window and then creating another one with - ":vert topleft split", except that the current window contents + `:vert topleft split`, except that the current window contents is used for the new window. *CTRL-W_L* CTRL-W L Move the current window to be at the far right, using the full height of the screen. This works like closing the current window and then creating another one with - ":vert botright split", except that the current window + `:vert botright split`, except that the current window contents is used for the new window. *CTRL-W_T* @@ -518,6 +531,10 @@ CTRL-W + Increase current window height by N (default 1). CTRL-W CTRL-_ *CTRL-W_CTRL-_* *CTRL-W__* CTRL-W _ Set current window height to N (default: highest possible). +:{winnr}res[ize] [+-]N + Like `:resize` above, but apply the size to window {winnr} + instead of the current window. + z{nr}<CR> Set current window height to {nr}. *CTRL-W_<* @@ -526,7 +543,7 @@ CTRL-W < Decrease current window width by N (default 1). *CTRL-W_>* CTRL-W > Increase current window width by N (default 1). -:vertical res[ize] [N] *:vertical-resize* *CTRL-W_bar* +:vert[ical] res[ize] [N] *:vertical-resize* *CTRL-W_bar* CTRL-W | Set current window width to N (default: widest possible). You can also resize a window by dragging a status line up or down with the @@ -743,7 +760,7 @@ can also get to them with the buffer list commands, like ":bnext". Examples: > - :windo set nolist nofoldcolumn | normal zn + :windo set nolist foldcolumn=0 | normal! zn This resets the 'list' option and disables folding in all windows. > @@ -751,7 +768,7 @@ This resets the 'list' option and disables folding in all windows. > This resets the 'fileencoding' in each buffer and writes it if this changed the buffer. The result is that all buffers will use the 'encoding' encoding -(if conversion works properly). +(if conversion succeeds). ============================================================================== 9. Tag or file name under the cursor *window-tag* @@ -1034,7 +1051,9 @@ list of buffers. |unlisted-buffer| < *:bad* *:badd* :bad[d] [+lnum] {fname} - Add file name {fname} to the buffer list, without loading it. + Add file name {fname} to the buffer list, without loading it, + if it wasn't listed yet. If the buffer was previously + deleted, not wiped, it will be made listed again. If "lnum" is specified, the cursor will be positioned at that line when the buffer is first entered. Note that other commands after the + will be ignored. diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 724a96cb01..f0d2b36a84 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2021 Apr 05 +" Last Change: 2021 Apr 17 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -392,8 +392,8 @@ au BufNewFile,BufRead configure.in,configure.ac setf config " CUDA Cumpute Unified Device Architecture au BufNewFile,BufRead *.cu,*.cuh setf cuda -" Dockerfile -au BufNewFile,BufRead Dockerfile,*.Dockerfile setf dockerfile +" Dockerfilb; Podman uses the same syntax with name Containerfile +au BufNewFile,BufRead Containerfile,Dockerfile,*.Dockerfile setf dockerfile " WildPackets EtherPeek Decoder au BufNewFile,BufRead *.dcd setf dcd @@ -791,11 +791,11 @@ au BufNewFile,BufRead *.inf,*.INF setf inform au BufNewFile,BufRead */etc/initng/*/*.i,*.ii setf initng " Innovation Data Processing -au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c setf upstreamdat -au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c setf upstreamlog +au BufRead,BufNewFile upstream.dat\c,upstream.*.dat\c,*.upstream.dat\c setf upstreamdat +au BufRead,BufNewFile fdrupstream.log,upstream.log\c,upstream.*.log\c,*.upstream.log\c,UPSTREAM-*.log\c setf upstreamlog au BufRead,BufNewFile upstreaminstall.log\c,upstreaminstall.*.log\c,*.upstreaminstall.log\c setf upstreaminstalllog -au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c setf usserverlog -au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c setf usw2kagtlog +au BufRead,BufNewFile usserver.log\c,usserver.*.log\c,*.usserver.log\c setf usserverlog +au BufRead,BufNewFile usw2kagt.log\c,usw2kagt.*.log\c,*.usw2kagt.log\c setf usw2kagtlog " Ipfilter au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules setf ipfilter @@ -1094,7 +1094,7 @@ au BufNewFile,BufRead Mutt{ng,}rc setf muttrc au BufRead,BufNewfile *.n1ql,*.nql setf n1ql " Nano -au BufNewFile,BufRead */etc/nanorc,*.nanorc setf nanorc +au BufNewFile,BufRead */etc/nanorc,*.nanorc setf nanorc " Nastran input/DMAP "au BufNewFile,BufRead *.dat setf nastran @@ -1191,11 +1191,14 @@ au BufNewFile,BufRead *.pp call dist#ft#FTpp() " Delphi or Lazarus program file au BufNewFile,BufRead *.dpr,*.lpr setf pascal +" Free Pascal makefile definition file +au BufNewFile,BufRead *.fpc setf fpcmake + " PDF au BufNewFile,BufRead *.pdf setf pdf " PCMK - HAE - crm configure edit -au BufNewFile,BufRead *.pcmk setf pcmk +au BufNewFile,BufRead *.pcmk setf pcmk " Perl if has("fname_case") @@ -1204,8 +1207,6 @@ else au BufNewFile,BufRead *.pl call dist#ft#FTpl() endif au BufNewFile,BufRead *.plx,*.al,*.psgi setf perl -au BufNewFile,BufRead *.p6,*.pm6,*.pl6 setf perl6 -au BufNewFile,BufRead *.raku,*.rakumod setf perl6 " Perl, XPM or XPM2 au BufNewFile,BufRead *.pm @@ -1219,7 +1220,6 @@ au BufNewFile,BufRead *.pm " Perl POD au BufNewFile,BufRead *.pod setf pod -au BufNewFile,BufRead *.pod6 setf pod6 " Php, php3, php4, etc. " Also Phtml (was used for PHP 2 in the past) @@ -1227,7 +1227,7 @@ au BufNewFile,BufRead *.pod6 setf pod6 au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp setf php " PHP config -au BufNewFile,BufRead php.ini,php.ini-* setf dosini +au BufNewFile,BufRead php.ini-* setf dosini " Pike and Cmod au BufNewFile,BufRead *.pike,*.pmod setf pike @@ -1362,6 +1362,9 @@ au BufNewFile,BufRead *.ptl,*.pyi,SConstruct setf python " Radiance au BufNewFile,BufRead *.rad,*.mat setf radiance +" Raku (formelly Perl6) +au BufNewFile,BufRead *.pm6,*.p6,*.t6,*.pod6,*.raku,*.rakumod,*.rakudoc,*.rakutest setf raku + " Ratpoison config/command files au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc setf ratpoison @@ -1384,13 +1387,6 @@ au BufNewFile,BufRead *.rego setf rego " Rexx au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit setf rexx -" R (Splus) -if has("fname_case") - au BufNewFile,BufRead *.s,*.S setf r -else - au BufNewFile,BufRead *.s setf r -endif - " R Help file if has("fname_case") au BufNewFile,BufRead *.rd,*.Rd setf rhelp @@ -1564,7 +1560,8 @@ au BufNewFile,BufRead *.decl,*.dcl,*.dec au BufNewFile,BufRead catalog setf catalog " Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc. -" Gentoo ebuilds and Arch Linux PKGBUILDs are actually bash scripts +" Gentoo ebuilds, Arch Linux PKGBUILDs and Alpine Linux APKBUILDs are actually +" bash scripts. " NOTE: Patterns ending in a star are further down, these have lower priority. au BufNewFile,BufRead .bashrc,bashrc,bash.bashrc,.bash[_-]profile,.bash[_-]logout,.bash[_-]aliases,bash-fc[-.],*.ebuild,*.bash,*.eclass,PKGBUILD,APKBUILD call dist#ft#SetFileTypeSH("bash") au BufNewFile,BufRead .kshrc,*.ksh call dist#ft#SetFileTypeSH("ksh") @@ -1720,10 +1717,10 @@ au BufNewFile,BufRead *.cm setf voscm " Swift au BufNewFile,BufRead *.swift setf swift -au BufNewFile,BufRead *.swift.gyb setf swiftgyb +au BufNewFile,BufRead *.swift.gyb setf swiftgyb " Swift Intermediate Language -au BufNewFile,BufRead *.sil setf sil +au BufNewFile,BufRead *.sil setf sil " Sysctl au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf setf sysctl @@ -2159,7 +2156,7 @@ au BufNewFile,BufRead *fvwm2rc* au BufNewFile,BufRead */tmp/lltmp* call s:StarSetf('gedcom') " Git -au BufNewFile,BufRead */.gitconfig.d/*,/etc/gitconfig.d/* call s:StarSetf('gitconfig') +au BufNewFile,BufRead */.gitconfig.d/*,/etc/gitconfig.d/* call s:StarSetf('gitconfig') " Gitolite au BufNewFile,BufRead */gitolite-admin/conf/* call s:StarSetf('gitolite') diff --git a/runtime/ftplugin/ada.vim b/runtime/ftplugin/ada.vim index 1f2d690b95..688d912126 100644 --- a/runtime/ftplugin/ada.vim +++ b/runtime/ftplugin/ada.vim @@ -155,40 +155,41 @@ if exists("g:ada_abbrev") endif " Section: Commands, Mapping, Menus {{{1 -" -call ada#Map_Popup ( - \ 'Tag.List', - \ 'l', - \ 'call ada#List_Tag ()') -call ada#Map_Popup ( - \'Tag.Jump', - \'j', - \'call ada#Jump_Tag ()') -call ada#Map_Menu ( - \'Tag.Create File', - \':AdaTagFile', - \'call ada#Create_Tags (''file'')') -call ada#Map_Menu ( - \'Tag.Create Dir', - \':AdaTagDir', - \'call ada#Create_Tags (''dir'')') - -call ada#Map_Menu ( - \'Highlight.Toggle Space Errors', - \ ':AdaSpaces', - \'call ada#Switch_Syntax_Option (''space_errors'')') -call ada#Map_Menu ( - \'Highlight.Toggle Lines Errors', - \ ':AdaLines', - \'call ada#Switch_Syntax_Option (''line_errors'')') -call ada#Map_Menu ( - \'Highlight.Toggle Rainbow Color', - \ ':AdaRainbow', - \'call ada#Switch_Syntax_Option (''rainbow_color'')') -call ada#Map_Menu ( - \'Highlight.Toggle Standard Types', - \ ':AdaTypes', - \'call ada#Switch_Syntax_Option (''standard_types'')') +if !exists(':AdaTagFile') + call ada#Map_Popup ( + \ 'Tag.List', + \ 'l', + \ 'call ada#List_Tag ()') + call ada#Map_Popup ( + \'Tag.Jump', + \'j', + \'call ada#Jump_Tag ()') + call ada#Map_Menu ( + \'Tag.Create File', + \':AdaTagFile', + \'call ada#Create_Tags (''file'')') + call ada#Map_Menu ( + \'Tag.Create Dir', + \':AdaTagDir', + \'call ada#Create_Tags (''dir'')') + + call ada#Map_Menu ( + \'Highlight.Toggle Space Errors', + \ ':AdaSpaces', + \'call ada#Switch_Syntax_Option (''space_errors'')') + call ada#Map_Menu ( + \'Highlight.Toggle Lines Errors', + \ ':AdaLines', + \'call ada#Switch_Syntax_Option (''line_errors'')') + call ada#Map_Menu ( + \'Highlight.Toggle Rainbow Color', + \ ':AdaRainbow', + \'call ada#Switch_Syntax_Option (''rainbow_color'')') + call ada#Map_Menu ( + \'Highlight.Toggle Standard Types', + \ ':AdaTypes', + \'call ada#Switch_Syntax_Option (''standard_types'')') +endif " 1}}} " Reset cpoptions diff --git a/runtime/ftplugin/asm.vim b/runtime/ftplugin/asm.vim new file mode 100644 index 0000000000..0914bf634a --- /dev/null +++ b/runtime/ftplugin/asm.vim @@ -0,0 +1,11 @@ +" Vim filetype plugin file +" Language: asm +" Maintainer: Colin Caine <cmcaine at the common googlemail domain> +" Last Changed: 23 May 2020 + +if exists("b:did_ftplugin") | finish | endif + +setl comments=:;,s1:/*,mb:*,ex:*/,:// +setl commentstring=;%s + +let b:did_ftplugin = 1 diff --git a/runtime/ftplugin/awk.vim b/runtime/ftplugin/awk.vim index dcefc85ec3..1bca3ad3cf 100644 --- a/runtime/ftplugin/awk.vim +++ b/runtime/ftplugin/awk.vim @@ -1,9 +1,11 @@ " Vim filetype plugin -" Language: awk, nawk, gawk, mawk -" Maintainer: Antonio Colombo <azc100@gmail.com> -" Last Change: 2017 Feb 17 +" Language: awk, nawk, gawk, mawk +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Antonio Colombo <azc100@gmail.com> +" Last Change: 2020 Sep 28 " This plugin was prepared by Mark Sikora +" This plugin was updated as proposed by Doug Kearns " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -13,6 +15,42 @@ endif " Don't load another plugin for this buffer let b:did_ftplugin = 1 -let b:undo_ftplugin = "setl commentstring<" +let s:cpo_save = &cpo +set cpo&vim +setlocal comments=:# setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +setlocal define=function +setlocal suffixesadd+=.awk + +let b:undo_ftplugin = "setl fo< com< cms< def< sua<" . + \ " | unlet! b:browsefilter" + +" TODO: set this in scripts.vim? +if exists("g:awk_is_gawk") + setlocal include=@include + setlocal suffixesadd+=.gawk + if has("unix") || has("win32unix") + setlocal formatprg=gawk\ -f-\ -o/dev/stdout + let b:undo_ftplugin .= " | setl fp<" + endif + + let path = system("gawk 'BEGIN { printf ENVIRON[\"AWKPATH\"] }'") + let path = substitute(path, '^\.\=:\|:\.\=$\|:\.\=:', ',,', 'g') " POSIX cwd + let path = substitute(path, ':', ',', 'g') + + let &l:path = path + let b:undo_ftplugin .= " | setl inc< path<" +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Awk Source Files (*.awk,*.gawk)\t*.awk;*.gawk\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 diff --git a/runtime/ftplugin/bash.vim b/runtime/ftplugin/bash.vim index a3d01fc2ad..7bd9787b6c 100644 --- a/runtime/ftplugin/bash.vim +++ b/runtime/ftplugin/bash.vim @@ -11,21 +11,10 @@ if exists("b:did_ftplugin") finish endif +unlet! b:is_sh +unlet! b:is_kornshell let b:is_bash = 1 -if exists("b:is_sh") - unlet b:is_sh -endif -if exists("b:is_kornshell") - unlet b:is_kornshell -endif -" Setting 'filetype' here directly won't work, since we are being invoked -" through an autocommand. Do it later, on the BufWinEnter event. -augroup bash_filetype - au BufWinEnter * call SetBashFt() -augroup END +runtime! ftplugin/sh.vim ftplugin/sh_*.vim ftplugin/sh/*.vim -func SetBashFt() - au! bash_filetype - set ft=sh -endfunc +" vim: ts=8 diff --git a/runtime/ftplugin/basic.vim b/runtime/ftplugin/basic.vim new file mode 100644 index 0000000000..c6ec254dfc --- /dev/null +++ b/runtime/ftplugin/basic.vim @@ -0,0 +1,27 @@ +" Vim filetype plugin file +" Language: BASIC +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2015 Jan 10 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=:REM,:' +setlocal commentstring='\ %s +setlocal formatoptions-=t formatoptions+=croql + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "BASIC Source Files (*.bas)\t*.bas\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< com< cms< sua<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/bzl.vim b/runtime/ftplugin/bzl.vim index 0296b0c0b8..8ab876e9d6 100644 --- a/runtime/ftplugin/bzl.vim +++ b/runtime/ftplugin/bzl.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: Bazel (http://bazel.io) " Maintainer: David Barnett (https://github.com/google/vim-ft-bzl) -" Last Change: 2015 Aug 11 +" Last Change: 2021 Jan 19 "" " @section Introduction, intro @@ -51,6 +51,8 @@ if get(g:, 'ft_bzl_fold', 0) endif if exists('*BzlFoldText') + let &cpo = s:save_cpo + unlet s:save_cpo finish endif diff --git a/runtime/ftplugin/c.vim b/runtime/ftplugin/c.vim index 6047f9f863..00937c2383 100644 --- a/runtime/ftplugin/c.vim +++ b/runtime/ftplugin/c.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: C " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2017 Sep 28 +" Last Change: 2020 Feb 01 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -15,12 +15,16 @@ let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo-=C -let b:undo_ftplugin = "setl fo< com< ofu<" +let b:undo_ftplugin = "setl fo< com< ofu< cms< def< inc<" " Set 'formatoptions' to break comment lines but not other lines, " and insert the comment leader when hitting <CR> or using "o". setlocal fo-=t fo+=croql +" These options have the right value as default, but the user may have +" overruled that. +setlocal commentstring& define& include& + " Set completion with CTRL-X CTRL-O to autoloaded function. if exists('&ofu') setlocal ofu=ccomplete#Complete diff --git a/runtime/ftplugin/clojure.vim b/runtime/ftplugin/clojure.vim index 217711f26e..cb75506dbb 100644 --- a/runtime/ftplugin/clojure.vim +++ b/runtime/ftplugin/clojure.vim @@ -1,11 +1,11 @@ " Vim filetype plugin file -" Language: Clojure -" Author: Meikel Brandmeyer <mb@kotka.de> -" -" Maintainer: Sung Pae <self@sungpae.com> -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 18 July 2016 +" Language: Clojure +" Maintainer: Alex Vear <av@axvr.io> +" Former Maintainers: Sung Pae <self@sungpae.com> +" Meikel Brandmeyer <mb@kotka.de> +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2021-02-13 if exists("b:did_ftplugin") finish @@ -43,7 +43,7 @@ setlocal commentstring=;\ %s " specially and hence are not indented specially. " " -*- LISPWORDS -*- -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj +" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj setlocal lispwords=as->,binding,bound-fn,case,catch,cond->,cond->>,condp,def,definline,definterface,defmacro,defmethod,defmulti,defn,defn-,defonce,defprotocol,defrecord,defstruct,deftest,deftest-,deftype,doseq,dotimes,doto,extend,extend-protocol,extend-type,fn,for,if,if-let,if-not,if-some,let,letfn,locking,loop,ns,proxy,reify,set-test,testing,when,when-first,when-let,when-not,when-some,while,with-bindings,with-in-str,with-local-vars,with-open,with-precision,with-redefs,with-redefs-fn,with-test " Provide insert mode completions for special forms and clojure.core. As @@ -57,21 +57,6 @@ for s:setting in ['omnifunc', 'completefunc'] endif endfor -" Take all directories of the CLOJURE_SOURCE_DIRS environment variable -" and add them to the path option. -" -" This is a legacy option for VimClojure users. -if exists('$CLOJURE_SOURCE_DIRS') - for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':') - let s:dir = fnameescape(s:dir) - " Whitespace escaping for Windows - let s:dir = substitute(s:dir, '\', '\\\\', 'g') - let s:dir = substitute(s:dir, '\ ', '\\ ', 'g') - execute "setlocal path+=" . s:dir . "/**" - endfor - let b:undo_ftplugin .= ' | setlocal path<' -endif - " Skip brackets in ignored syntax regions when using the % command if exists('loaded_matchit') let b:match_words = &matchpairs diff --git a/runtime/ftplugin/cobol.vim b/runtime/ftplugin/cobol.vim index d96a1bf281..ec1e95456d 100644 --- a/runtime/ftplugin/cobol.vim +++ b/runtime/ftplugin/cobol.vim @@ -2,7 +2,7 @@ " Language: cobol " Maintainer: Ankit Jain <ajatkj@yahoo.co.in> " (formerly Tim Pope <vimNOSPAM@tpope.info>) -" Last Update: By Ankit Jain (changed maintainer) on 22.03.2019 +" Last Update: By Ankit Jain (add gtk support) on 15.08.2020 " Insert mode mappings: <C-T> <C-D> <Tab> " Normal mode mappings: < > << >> [[ ]] [] ][ @@ -37,7 +37,8 @@ if exists("loaded_matchit") \ '-\@<!\<\%(delete\|rewrite\|start\|write\|read\)\>\%(.*\(\%$\|\%(\n\%(\%(\s*\|.\{6\}\)[*/].*\n\)*\)\=\s*\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>\)\)\@=:\%(\<not\s\+\)\@<!\<\%(not\s\+\)\=\%(invalid\s\+key\|at\s\+end\|no\s\+data\|at\s\+end-of-page\)\>:\<end-\%(delete\|rewrite\|start\|write\|read\)\>' .s:ordot endif -if has("gui_win32") && !exists("b:browsefilter") +" add gtk support +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "COBOL Source Files (*.cbl, *.cob)\t*.cbl;*.cob;*.lib\n". \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/cpp.vim b/runtime/ftplugin/cpp.vim index 8c3f211da8..f9d31cbec3 100644 --- a/runtime/ftplugin/cpp.vim +++ b/runtime/ftplugin/cpp.vim @@ -1,12 +1,17 @@ " Vim filetype plugin file " Language: C++ " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2001 Jan 15 +" Last Change: 2020 Jul 26 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") finish endif -" Behaves just like C +" Behaves mostly just like C runtime! ftplugin/c.vim ftplugin/c_*.vim ftplugin/c/*.vim + +" C++ uses templates with <things> +" Disabled, because it gives an error for typing an unmatched ">". +" set matchpairs+=<:> +" let b:undo_ftplugin ..= ' | setl matchpairs<' diff --git a/runtime/ftplugin/css.vim b/runtime/ftplugin/css.vim index ea4424418c..ece2def4ee 100644 --- a/runtime/ftplugin/css.vim +++ b/runtime/ftplugin/css.vim @@ -1,7 +1,8 @@ " Vim filetype plugin file -" Language: CSS -" Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2008-07-09 +" Language: CSS +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Last Change: 2020 Dec 21 if exists("b:did_ftplugin") finish @@ -11,11 +12,12 @@ let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -let b:undo_ftplugin = "setl com< cms< inc< fo< ofu<" +let b:undo_ftplugin = "setl com< cms< inc< fo< ofu< isk<" setlocal comments=s1:/*,mb:*,ex:*/ commentstring& setlocal formatoptions-=t formatoptions+=croql setlocal omnifunc=csscomplete#CompleteCSS +setlocal iskeyword+=- let &l:include = '^\s*@import\s\+\%(url(\)\=' diff --git a/runtime/ftplugin/diff.vim b/runtime/ftplugin/diff.vim index 3fe1b84a04..0464290475 100644 --- a/runtime/ftplugin/diff.vim +++ b/runtime/ftplugin/diff.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: Diff " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2005 Jul 27 +" Last Change: 2020 Jul 18 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -13,3 +13,6 @@ let b:undo_ftplugin = "setl modeline<" " Don't use modelines in a diff, they apply to the diffed file setlocal nomodeline + +" If there are comments they start with # +let &commentstring = "# %s" diff --git a/runtime/ftplugin/dosbatch.vim b/runtime/ftplugin/dosbatch.vim index 070bdc4ba2..0c5cde2503 100644 --- a/runtime/ftplugin/dosbatch.vim +++ b/runtime/ftplugin/dosbatch.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: MS-DOS .bat files " Maintainer: Mike Williams <mrw@eandem.co.uk> -" Last Change: 14th April 2019 +" Last Change: 7th May 2020 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -19,12 +19,21 @@ setlocal comments=b:rem,b:@rem,b:REM,b:@REM,::: setlocal commentstring=::\ %s setlocal formatoptions-=t formatoptions+=rol +" Lookup DOS keywords using Windows command help. +if executable('help.exe') + if has('terminal') + setlocal keywordprg=:term\ help.exe + else + setlocal keywordprg=help.exe + endif +endif + " Define patterns for the browse file filter if has("gui_win32") && !exists("b:browsefilter") let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n" endif -let b:undo_ftplugin = "setlocal comments< formatoptions<" +let b:undo_ftplugin = "setlocal comments< formatoptions< keywordprg<" \ . "| unlet! b:browsefiler" let &cpo = s:cpo_save diff --git a/runtime/ftplugin/dune.vim b/runtime/ftplugin/dune.vim index 8b1f8b4125..86c99c097f 100644 --- a/runtime/ftplugin/dune.vim +++ b/runtime/ftplugin/dune.vim @@ -1,7 +1,7 @@ " Language: Dune buildsystem " Maintainer: Markus Mottl <markus.mottl@gmail.com> " Anton Kochkov <anton.kochkov@gmail.com> -" URL: https://github.com/rgrinberg/vim-ocaml +" URL: https://github.com/ocaml/vim-ocaml " Last Change: " 2018 Nov 3 - Added commentstring (Markus Mottl) " 2017 Sep 6 - Initial version (Etienne Millon) diff --git a/runtime/ftplugin/erlang.vim b/runtime/ftplugin/erlang.vim index 2bbc345b43..c775247f51 100644 --- a/runtime/ftplugin/erlang.vim +++ b/runtime/ftplugin/erlang.vim @@ -1,87 +1,83 @@ " Vim ftplugin file -" Language: Erlang -" Author: Oscar Hellström <oscar@oscarh.net> -" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> +" Language: Erlang (http://www.erlang.org) +" Maintainer: Csaba Hoch <csaba.hoch@gmail.com> +" Author: Oscar Hellström <oscar@oscarh.net> +" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com> " Eduardo Lopez (http://github.com/tapichu) +" Arvid Bjurklint (http://github.com/slarwise) +" Last Update: 2021-Jan-08 " License: Vim license -" Version: 2012/01/25 +" URL: https://github.com/vim-erlang/vim-erlang-runtime if exists('b:did_ftplugin') - finish -else - let b:did_ftplugin = 1 -endif - -if exists('s:did_function_definitions') - call s:SetErlangOptions() - finish -else - let s:did_function_definitions = 1 + finish endif +let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -if !exists('g:erlang_keywordprg') - let g:erlang_keywordprg = 'erl -man' -endif +let &l:keywordprg = get(g:, 'erlang_keywordprg', 'erl -man') -if !exists('g:erlang_folding') - let g:erlang_folding = 0 +if get(g:, 'erlang_folding', 0) + setlocal foldmethod=expr + setlocal foldexpr=GetErlangFold(v:lnum) + setlocal foldtext=ErlangFoldText() endif -let s:erlang_fun_begin = '^\a\w*(.*$' -let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$' - -function s:SetErlangOptions() - if g:erlang_folding - setlocal foldmethod=expr - setlocal foldexpr=GetErlangFold(v:lnum) - setlocal foldtext=ErlangFoldText() - endif +setlocal comments=:%%%,:%%,:% +setlocal commentstring=%%s - setlocal comments=:%%%,:%%,:% - setlocal commentstring=%%s +setlocal formatoptions+=ro - setlocal formatoptions+=ro - let &l:keywordprg = g:erlang_keywordprg -endfunction +setlocal suffixesadd=.erl,.hrl -function GetErlangFold(lnum) - let lnum = a:lnum - let line = getline(lnum) +let &l:include = '^\s*-\%(include\|include_lib\)\s*("\zs\f*\ze")' +let &l:define = '^\s*-\%(define\|record\|type\|opaque\)' - if line =~ s:erlang_fun_end - return '<1' - endif +let s:erlang_fun_begin = '^\a\w*(.*$' +let s:erlang_fun_end = '^[^%]*\.\s*\(%.*\)\?$' - if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1 - return '1' - endif +if !exists('*GetErlangFold') + function GetErlangFold(lnum) + let lnum = a:lnum + let line = getline(lnum) - if line =~ s:erlang_fun_begin - return '>1' - endif + if line =~ s:erlang_fun_end + return '<1' + endif - return '=' -endfunction + if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1 + return '1' + endif -function ErlangFoldText() - let line = getline(v:foldstart) - let foldlen = v:foldend - v:foldstart + 1 - let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '') - if foldlen < 10 - let lines = ' ' . lines - endif - let retval = '+' . v:folddashes . lines + if line =~ s:erlang_fun_begin + return '>1' + endif - return retval -endfunction + return '=' + endfunction +endif -call s:SetErlangOptions() +if !exists('*ErlangFoldText') + function ErlangFoldText() + let line = getline(v:foldstart) + let foldlen = v:foldend - v:foldstart + 1 + let lines = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '') + if foldlen < 10 + let lines = ' ' . lines + endif + let retval = '+' . v:folddashes . lines + + return retval + endfunction +endif -let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<" - \ . " comments< commentstring< formatoptions<" +let b:undo_ftplugin = "setlocal keywordprg< foldmethod< foldexpr< foldtext<" + \ . " comments< commentstring< formatoptions< suffixesadd< include<" + \ . " define<" let &cpo = s:cpo_save unlet s:cpo_save + +" vim: sw=2 et diff --git a/runtime/ftplugin/falcon.vim b/runtime/ftplugin/falcon.vim index 4fc135b4a1..affca38481 100644 --- a/runtime/ftplugin/falcon.vim +++ b/runtime/ftplugin/falcon.vim @@ -3,6 +3,7 @@ " Author: Steven Oliver <oliver.steven@gmail.com> " Copyright: Copyright (c) 2009-2013 Steven Oliver " License: You may redistribute this under the same terms as Vim itself +" Last Update: 2020 Oct 10 " -------------------------------------------------------------------------- " Only do this when not done yet for this buffer @@ -14,7 +15,7 @@ let b:did_ftplugin = 1 let s:cpo_save = &cpo set cpo&vim -setlocal softtabstop=4 shiftwidth=4 fileencoding=utf-8 +setlocal softtabstop=4 shiftwidth=4 setlocal suffixesadd=.fal,.ftd " Matchit support diff --git a/runtime/ftplugin/fortran.vim b/runtime/ftplugin/fortran.vim index 5d42409fd4..26dc90a184 100644 --- a/runtime/ftplugin/fortran.vim +++ b/runtime/ftplugin/fortran.vim @@ -1,12 +1,13 @@ " Vim settings file " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66) -" Version: 0.50 -" Last Change: 2015 Nov. 30 +" Version: (v53) 2021 April 06 " Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/> " Usage: For instructions, do :help fortran-plugin from Vim " Credits: -" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, Ben -" Fritz, and David Barnett. +" Version 0.1 was created in September 2000 by Ajit Thakkar. +" Since then, useful suggestions and contributions have been made, in order, by: +" Stefano Zacchiroli, Hendrik Merx, Ben Fritz, David Barnett, Eisuke Kawashima, +" Doug Kearns, and Fritz Reese. " Only do these settings when not done yet for this buffer if exists("b:did_ftplugin") @@ -31,10 +32,10 @@ if !exists("b:fortran_fixed_source") elseif exists("fortran_fixed_source") " User guarantees fixed source form let b:fortran_fixed_source = 1 - elseif expand("%:e") ==? "f\<90\|95\|03\|08\>" + elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$' " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers let b:fortran_fixed_source = 0 - elseif expand("%:e") ==? "f\|f77\|for" + elseif expand("%:e") =~? '^\%(f\|f77\|for\)$' " Fixed-form file extension defaults let b:fortran_fixed_source = 1 else @@ -65,12 +66,19 @@ endif " Set comments and textwidth according to source type if (b:fortran_fixed_source == 1) setlocal comments=:!,:*,:C - " Fixed format requires a textwidth of 72 for code - setlocal tw=72 + " Fixed format requires a textwidth of 72 for code, + " but some vendor extensions allow longer lines + if exists("fortran_extended_line_length") + setlocal tw=132 + elseif exists("fortran_cardimage_line_length") + setlocal tw=80 + else + setlocal tw=72 " If you need to add "&" on continued lines so that the code is " compatible with both free and fixed format, then you should do so " in column 73 and uncomment the next line " setlocal tw=73 + endif else setlocal comments=:! " Free format allows a textwidth of 132 @@ -118,7 +126,7 @@ if !exists("b:match_words") endif " File filters for :browse e -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "Fortran Files (*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn)\t*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn\n" . \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/fpcmake.vim b/runtime/ftplugin/fpcmake.vim new file mode 100644 index 0000000000..8d950838c7 --- /dev/null +++ b/runtime/ftplugin/fpcmake.vim @@ -0,0 +1,25 @@ +" Vim filetype plugin file +" Language: Free Pascal Makefile Generator +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 23 + +if exists("b:did_ftplugin") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/make.vim + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Free Pascal Makefile Definition Files (*.fpc)\t*.fpc\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = b:undo_ftplugin .. " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/framescript.vim b/runtime/ftplugin/framescript.vim index 48fe0ace7c..66802cad0d 100644 --- a/runtime/ftplugin/framescript.vim +++ b/runtime/ftplugin/framescript.vim @@ -3,14 +3,14 @@ " Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Latest Revision: 2008-07-19 -let s:cpo_save = &cpo -set cpo&vim - if exists("b:did_ftplugin") finish endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + let b:undo_ftplugin = "setl com< cms< fo< inc< | unlet! b:matchwords" setlocal comments=s1:/*,mb:*,ex:*/,:// commentstring=/*\ %s\ */ diff --git a/runtime/ftplugin/freebasic.vim b/runtime/ftplugin/freebasic.vim new file mode 100644 index 0000000000..a2bb459f20 --- /dev/null +++ b/runtime/ftplugin/freebasic.vim @@ -0,0 +1,13 @@ +" Vim filetype plugin file +" Language: FreeBasic +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2015 Jan 10 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +runtime! ftplugin/basic.vim + +" vim: ts=8 diff --git a/runtime/ftplugin/fstab.vim b/runtime/ftplugin/fstab.vim new file mode 100644 index 0000000000..99805322cd --- /dev/null +++ b/runtime/ftplugin/fstab.vim @@ -0,0 +1,19 @@ +" Vim ftplugin file +" Language: fstab file +" Maintainer: Radu Dineiu <radu.dineiu@gmail.com> +" URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim +" Last Change: 2021 Jan 02 +" Version: 1.0 +" +" Credits: +" Subhaditya Nath <sn03.general@gmail.com> + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +setlocal commentstring=#%s +let b:undo_ftplugin = "setlocal commentstring<" + +" vim: ts=8 ft=vim diff --git a/runtime/ftplugin/git.vim b/runtime/ftplugin/git.vim index b3d5cff804..75b20f021e 100644 --- a/runtime/ftplugin/git.vim +++ b/runtime/ftplugin/git.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: generic git output " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2016 Aug 29 +" Last Change: 2019 Dec 05 " Only do this when not done yet for this buffer if (exists("b:did_ftplugin")) @@ -10,7 +10,7 @@ endif let b:did_ftplugin = 1 if !exists('b:git_dir') - if expand('%:p') =~# '[\/]\.git[\/]modules[\/]' + if expand('%:p') =~# '[\/]\.git[\/]modules[\/]\|:[\/][\/]\|^\a\a\+:' " Stay out of the way elseif expand('%:p') =~# '[\/]\.git[\/]worktrees' let b:git_dir = matchstr(expand('%:p'),'.*\.git[\/]worktrees[\/][^\/]\+\>') diff --git a/runtime/ftplugin/gprof.vim b/runtime/ftplugin/gprof.vim index 750751c372..d4547ae9a6 100644 --- a/runtime/ftplugin/gprof.vim +++ b/runtime/ftplugin/gprof.vim @@ -1,6 +1,6 @@ " Language: gprof " Maintainer: Dominique Pelle <dominique.pelle@gmail.com> -" Last Change: 2013 Jun 09 +" Last Change: 2021 Apr 08 " When cursor is on one line of the gprof call graph, " calling this function jumps to this function in the call graph. @@ -16,7 +16,7 @@ fun! <SID>GprofJumpToFunctionIndex() norm! $y% call search('^' . escape(@", '[]'), 'sw') norm! zz - elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+' + elseif l:line =~ '^\(\s*[0-9\.]\+\)\{3}\s\+' " We're in line in the flat profile. norm! 55|eby$ call search('^\[\d\+\].*\d\s\+' . escape(@", '[]*.') . '\>', 'sW') diff --git a/runtime/ftplugin/haml.vim b/runtime/ftplugin/haml.vim index e74530b556..6f30169958 100644 --- a/runtime/ftplugin/haml.vim +++ b/runtime/ftplugin/haml.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Haml " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2016 Aug 29 +" Last Change: 2019 Dec 05 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -37,6 +37,8 @@ endif runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim let b:did_ftplugin = 1 +let &l:define .= empty(&l:define ? '' : '\|') . '^\s*\%(%\w*\)\=\%(\.[[:alnum:]_-]\+\)*#' + " Combine the new set of values with those previously included. if exists("b:undo_ftplugin") let s:undo_ftplugin = b:undo_ftplugin . " | " . s:undo_ftplugin @@ -60,7 +62,7 @@ endif setlocal comments= commentstring=-#\ %s -let b:undo_ftplugin = "setl cms< com< " +let b:undo_ftplugin = "setl def< cms< com< " \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin let &cpo = s:save_cpo diff --git a/runtime/ftplugin/hamster.vim b/runtime/ftplugin/hamster.vim index 6c0630fe04..5446e72286 100644 --- a/runtime/ftplugin/hamster.vim +++ b/runtime/ftplugin/hamster.vim @@ -2,7 +2,7 @@ " Language: Hamster Script " Version: 2.0.6.0 " Maintainer: David Fishburn <dfishburn dot vim at gmail dot com> -" Last Change: 2017 Mar 18 +" Last Change: 2021 Jan 19 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -57,6 +57,9 @@ if exists("loaded_matchit") endif setlocal ignorecase + let &cpo = s:cpo_save unlet s:cpo_save -setlocal cpo+=M " makes \%( match \) + +" Disabled, 'cpo' is a global option. +" setlocal cpo+=M " makes \%( match \) diff --git a/runtime/ftplugin/j.vim b/runtime/ftplugin/j.vim index 9dc1692534..3cd0cb8e2b 100644 --- a/runtime/ftplugin/j.vim +++ b/runtime/ftplugin/j.vim @@ -1,8 +1,8 @@ " Vim filetype plugin " Language: J -" Maintainer: David Bürgin <676c7473@gmail.com> -" URL: https://github.com/glts/vim-j -" Last Change: 2015-09-27 +" Maintainer: David Bürgin <dbuergin@gluet.ch> +" URL: https://gitlab.com/glts/vim-j +" Last Change: 2015-10-27 if exists('b:did_ftplugin') finish @@ -25,7 +25,7 @@ setlocal include=\\v^\\s*(load\|require)\\s*'\\zs\\f+\\ze' setlocal includeexpr=substitute(substitute(tr(v:fname,'\\','/'),'\\v^[^~][^/.]*(/[^/.]+)$','&\\1',''),'\\v^\\~[^/]+/','','') setlocal suffixesadd=.ijs -let b:undo_ftplugin = 'setlocal matchpairs< formatoptions< commentstring< comments< iskeyword< path< include< includeexpr< suffixesadd<' +let b:undo_ftplugin = 'setlocal suffixesadd< includeexpr< include< path< matchpairs< formatoptions< commentstring< comments< iskeyword<' " Section movement with ]] ][ [[ []. The start/end patterns below are amended " inside the function in order to avoid matching on the current cursor line. diff --git a/runtime/ftplugin/jproperties.vim b/runtime/ftplugin/jproperties.vim index 5bdd8a7cf3..c0e7800058 100644 --- a/runtime/ftplugin/jproperties.vim +++ b/runtime/ftplugin/jproperties.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Java properties file -" Maintainer: David Bürgin <676c7473@gmail.com> -" Last Change: 2013-11-19 +" Maintainer: None +" Last Change: 2019 Dec 01 if exists("b:did_ftplugin") finish diff --git a/runtime/ftplugin/lisp.vim b/runtime/ftplugin/lisp.vim index 130f30b146..db3ac96631 100644 --- a/runtime/ftplugin/lisp.vim +++ b/runtime/ftplugin/lisp.vim @@ -4,7 +4,7 @@ " URL: http://sites.google.com/site/khorser/opensource/vim " Original author: Dorai Sitaram <ds26@gte.com> " Original URL: http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html -" Last Change: Oct 23, 2013 +" Last Change: Mar 10, 2021 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -14,13 +14,11 @@ endif " Don't load another plugin for this buffer let b:did_ftplugin = 1 -setl comments=:; +setl comments=:;;;;,:;;;,:;;,:;,sr:#\|,mb:\|,ex:\|# setl define=^\\s*(def\\k* setl formatoptions-=t setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94 setl lisp setl commentstring=;%s -setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|# - let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp< commentstring<" diff --git a/runtime/ftplugin/m3build.vim b/runtime/ftplugin/m3build.vim new file mode 100644 index 0000000000..9e1e169d38 --- /dev/null +++ b/runtime/ftplugin/m3build.vim @@ -0,0 +1,24 @@ +" Vim filetype plugin file +" Language: Modula-3 Makefile +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 April 15 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +runtime! ftplugin/m3quake.vim + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-3 Makefile (m3makefile m3overrides)\tm3makefile;m3overrides\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/m3quake.vim b/runtime/ftplugin/m3quake.vim new file mode 100644 index 0000000000..627aabdc3e --- /dev/null +++ b/runtime/ftplugin/m3quake.vim @@ -0,0 +1,33 @@ +" Vim filetype plugin file +" Language: Modula-3 Quake +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 April 15 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s1:/*,mb:*,ex:*/,:% +setlocal commentstring=%\ %s +setlocal formatoptions-=t formatoptions+=croql + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<\%(proc\|if\|foreach\)\>:\<else\>:\<end\>' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-3 Quake Source Files (*.quake)\t*.quake\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< com< cms< " .. + \ "| unlet! b:browsefilter b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/make.vim b/runtime/ftplugin/make.vim index bfa8703082..168bc38eb3 100644 --- a/runtime/ftplugin/make.vim +++ b/runtime/ftplugin/make.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: Make " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2019 Apr 02 +" Last Change: 2020 Oct 16 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -9,10 +9,10 @@ if exists("b:did_ftplugin") endif let b:did_ftplugin = 1 -let b:undo_ftplugin = "setl et< sts< fo< com< cms< inc<" +let b:undo_ftplugin = "setl et< sts< sw< fo< com< cms< inc<" " Make sure a hard tab is used, required for most make programs -setlocal noexpandtab softtabstop=0 +setlocal noexpandtab softtabstop=0 shiftwidth=0 " Set 'formatoptions' to break comment lines but not other lines, " and insert the comment leader when hitting <CR> or using "o". diff --git a/runtime/ftplugin/masm.vim b/runtime/ftplugin/masm.vim new file mode 100644 index 0000000000..235469ac32 --- /dev/null +++ b/runtime/ftplugin/masm.vim @@ -0,0 +1,19 @@ +" Vim filetype plugin file +" Language: Microsoft Macro Assembler (80x86) +" Maintainer: Wu Yongwei <wuyongwei@gmail.com> +" Last Change: 2020-05-09 23:02:05 +0800 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +let b:undo_ftplugin = "setl iskeyword<" + +setlocal iskeyword=@,48-57,_,36,60,62,63,@-@ + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/matlab.vim b/runtime/ftplugin/matlab.vim index 205111c3c2..a1a282f19e 100644 --- a/runtime/ftplugin/matlab.vim +++ b/runtime/ftplugin/matlab.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: matlab " Maintainer: Jake Wasserman <jwasserman at gmail dot com> -" Last Changed: 2014 Dec 30 +" Last Change: 2019 Sep 27 " Contributors: " Charles Campbell @@ -24,8 +24,9 @@ endif setlocal suffixesadd=.m setlocal suffixes+=.asv +setlocal commentstring=%\ %s -let b:undo_ftplugin = "setlocal suffixesadd< suffixes< " +let b:undo_ftplugin = "setlocal suffixesadd< suffixes< commentstring< " \ . "| unlet! b:match_words" let &cpo = s:save_cpo diff --git a/runtime/ftplugin/meson.vim b/runtime/ftplugin/meson.vim new file mode 100644 index 0000000000..e432ebf196 --- /dev/null +++ b/runtime/ftplugin/meson.vim @@ -0,0 +1,19 @@ +" Vim filetype plugin file +" Language: meson +" License: VIM License +" Original Author: Laurent Pinchart <laurent.pinchart@ideasonboard.com> +" Last Change: 2018 Nov 27 + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 +let s:keepcpo= &cpo +set cpo&vim + +setlocal commentstring=#\ %s +setlocal comments=:# + +setlocal shiftwidth=2 +setlocal softtabstop=2 + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/runtime/ftplugin/modula2.vim b/runtime/ftplugin/modula2.vim new file mode 100644 index 0000000000..1d0e81ee70 --- /dev/null +++ b/runtime/ftplugin/modula2.vim @@ -0,0 +1,39 @@ +" Vim filetype plugin file +" Language: Modula-2 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 08 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s0:(*,mb:\ ,ex:*) +setlocal commentstring=(*%s*) +setlocal formatoptions-=t formatoptions+=croql + +if exists("loaded_matchit") && !exists("b:match_words") + " The second branch of the middle pattern is intended to match CASE labels + let b:match_words = '\<REPEAT\>:\<UNTIL\>,' .. + \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOOP\|WHILE\|WITH\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\)\>\|\%(^\s*\)\@<=\w\+\%(\s*\,\s*\w\+\)\=\s*\:=\@!' .. + \ ':' .. + \ '\<END\>' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-2 Source Files (*.def *.mod)\t*.def;*.mod\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl com< cms< fo< " .. + \ "| unlet! b:browsefilter b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/modula3.vim b/runtime/ftplugin/modula3.vim new file mode 100644 index 0000000000..fc9eb57949 --- /dev/null +++ b/runtime/ftplugin/modula3.vim @@ -0,0 +1,38 @@ +" Vim filetype plugin file +" Language: Modula-3 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 08 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=s0:(*,mb:\ ,ex:*) +setlocal commentstring=(*%s*) +setlocal formatoptions-=t formatoptions+=croql + +if exists("loaded_matchit") && !exists("b:match_words") + let b:match_words = '\<REPEAT\>:\<UNTIL\>,' .. + \ '\<\%(BEGIN\|CASE\|FOR\|IF\|LOCK\|LOOP\|TRY\|TYPECASE\|WHILE\|WITH\)\>' .. + \ ':' .. + \ '\<\%(ELSIF\|ELSE\|EXCEPT\|FINALLY\)\>\|\%(^\s*\)\@<=\S.*=>' .. + \ ':' .. + \ '\<END\>' +endif + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Modula-3 Source Files (*.m3)\t*.m3\n" .. + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl com< cms< fo< " .. + \ "| unlet! b:browsefilter b:match_words" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/nroff.vim b/runtime/ftplugin/nroff.vim index 069c02e59a..cf62d02daa 100644 --- a/runtime/ftplugin/nroff.vim +++ b/runtime/ftplugin/nroff.vim @@ -1,7 +1,9 @@ " Vim filetype plugin " Language: roff(7) -" Maintainer: Chris Spiegel <cspiegel@gmail.com> -" Last Change: 2019 Apr 24 +" Maintainer: Aman Verma +" Homepage: https://github.com/a-vrma/vim-nroff-ftplugin +" Previous Maintainer: Chris Spiegel <cspiegel@gmail.com> +" Last Change: 2020 Nov 21 if exists("b:did_ftplugin") finish @@ -9,3 +11,7 @@ endif let b:did_ftplugin = 1 setlocal commentstring=.\\\"%s +setlocal comments=:.\\\" +setlocal sections+=Sh + +let b:undo_ftplugin = 'setlocal commentstring< comments< sections<' diff --git a/runtime/ftplugin/ocaml.vim b/runtime/ftplugin/ocaml.vim index d9336421cf..8a628604fa 100644 --- a/runtime/ftplugin/ocaml.vim +++ b/runtime/ftplugin/ocaml.vim @@ -5,7 +5,7 @@ " Pierre Vittet <pierre-vittet@pvittet.com> " Stefano Zacchiroli <zack@bononia.it> " Vincent Aravantinos <firstname.name@imag.fr> -" URL: https://github.com/rgrinberg/vim-ocaml +" URL: https://github.com/ocaml/vim-ocaml " Last Change: " 2013 Oct 27 - Added commentstring (MM) " 2013 Jul 26 - load default compiler settings (MM) @@ -38,7 +38,8 @@ let s:cposet=&cpoptions set cpo&vim " Comment string -setlocal comments= +setlocal comments=sr:(*\ ,mb:\ ,ex:*) +setlocal comments^=sr:(**,mb:\ \ ,ex:*) setlocal commentstring=(*%s*) " Add mappings, unless the user didn't want this. @@ -158,6 +159,8 @@ let b:undo_ftplugin = "setlocal efm< foldmethod< foldexpr<" " - Only definitions below, executed once ------------------------------------- if exists("*OMLetFoldLevel") + let &cpoptions = s:cposet + unlet s:cposet finish endif @@ -391,8 +394,8 @@ endfunction endif endfun - " This variable contain a dictionnary of list. Each element of the dictionnary - " represent an annotation system. An annotation system is a list with: + " This variable contains a dictionary of lists. Each element of the dictionary + " represents an annotation system. An annotation system is a list with: " - annotation file name as its key " - annotation file path as first element of the contained list " - build path as second element of the contained list @@ -521,7 +524,7 @@ endfunction "c. link this stuff with what the user wants " ie. get the expression selected/under the cursor - let s:ocaml_word_char = '\w|[À-ÿ]|''' + let s:ocaml_word_char = '\w|[\xc0-\xff]|''' "In: the current mode (eg. "visual", "normal", etc.) "Out: the borders of the expression we are looking for the type @@ -634,7 +637,7 @@ endfunction nnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("normal")<CR> xnoremap <silent> <Plug>OCamlPrintType :<C-U>call Ocaml_print_type("visual")<CR>`< -let &cpoptions=s:cposet +let &cpoptions = s:cposet unlet s:cposet " vim:sw=2 fdm=indent diff --git a/runtime/ftplugin/pascal.vim b/runtime/ftplugin/pascal.vim index 5ff18b9601..2de92563ae 100644 --- a/runtime/ftplugin/pascal.vim +++ b/runtime/ftplugin/pascal.vim @@ -1,20 +1,50 @@ " Vim filetype plugin file -" Language: pascal -" Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net> -" Last Changed: 11 Apr 2011 -" URL: http://dwsharp.users.sourceforge.net/vim/ftplugin +" Language: Pascal +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Dan Sharp <dwsharp at users dot sourceforge dot net> +" Last Change: 2021 Apr 23 if exists("b:did_ftplugin") | finish | endif let b:did_ftplugin = 1 +let s:cpo_save = &cpo +set cpo&vim + +set comments=s:(*,m:\ ,e:*),s:{,m:\ ,e:} +set commentstring={%s} + +if exists("pascal_delphi") + set comments+=:/// +endif + +if !exists("pascal_traditional") + set commentstring=//\ %s + set comments+=:// +endif + +setlocal formatoptions-=t formatoptions+=croql + if exists("loaded_matchit") - let b:match_ignorecase = 1 " (pascal is case-insensitive) + let b:match_ignorecase = 1 " (Pascal is case-insensitive) + + let b:match_words = '\<\%(asm\|begin\|case\|\%(\%(=\|packed\)\s*\)\@<=\%(class\|object\)\|\%(=\s*\)\@<=interface\|record\|try\)\>' + let b:match_words .= ':\%(^\s*\)\@<=\%(except\|finally\|else\|otherwise\)\>' + let b:match_words .= ':\<end\>\.\@!' + + let b:match_words .= ',\<repeat\>:\<until\>' + " let b:match_words .= ',\<if\>:\<else\>' " FIXME - else clashing with middle else. It seems like a debatable use anyway. + let b:match_words .= ',\<unit\>:\<\%(\%(^\s*\)\@<=interface\|implementation\|initialization\|finalization\)\>:\<end\.' +endif - let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>' - let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>' - let b:match_words .= ',\<repeat\>:\<until\>' - let b:match_words .= ',\<if\>:\<else\>' +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Pascal Source Files (*.pas *.pp *.inc)\t*.pas;*.pp;*.inc\n" . + \ "All Files (*.*)\t*.*\n" endif -" Undo the stuff we changed. -let b:undo_ftplugin = "unlet! b:match_words" +let b:undo_ftplugin = "setl fo< cms< com< " .. + \ "| unlet! b:browsefilter b:match_words b:match_ignorecase" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/ftplugin/pbtxt.vim b/runtime/ftplugin/pbtxt.vim new file mode 100644 index 0000000000..e3c1bf7650 --- /dev/null +++ b/runtime/ftplugin/pbtxt.vim @@ -0,0 +1,21 @@ +" Vim filetype plugin file +" Language: Protobuf Text Format +" Maintainer: Lakshay Garg <lakshayg@outlook.in> +" Last Change: 2020 Nov 17 +" Homepage: https://github.com/lakshayg/vim-pbtxt + +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal commentstring=#\ %s + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/runtime/ftplugin/perl.vim b/runtime/ftplugin/perl.vim index e7acf654f3..603ba49502 100644 --- a/runtime/ftplugin/perl.vim +++ b/runtime/ftplugin/perl.vim @@ -1,9 +1,9 @@ " Vim filetype plugin file " Language: Perl " Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2015-02-09 +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" Last Change: 2020 Apr 15 if exists("b:did_ftplugin") | finish | endif let b:did_ftplugin = 1 diff --git a/runtime/ftplugin/perl6.vim b/runtime/ftplugin/perl6.vim deleted file mode 100644 index 5318df63bc..0000000000 --- a/runtime/ftplugin/perl6.vim +++ /dev/null @@ -1,77 +0,0 @@ -" Vim filetype plugin file -" Language: Perl 6 -" Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2013-07-21 -" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> -" -" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com> - -if exists("b:did_ftplugin") | finish | endif -let b:did_ftplugin = 1 - -" Make sure the continuation lines below do not cause problems in -" compatibility mode. -let s:save_cpo = &cpo -set cpo-=C - -setlocal formatoptions-=t -setlocal formatoptions+=crqol -setlocal keywordprg=p6doc - -setlocal comments=:# -setlocal commentstring=#%s - -" Change the browse dialog on Win32 to show mainly Perl-related files -if has("gui_win32") - let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" . - \ "Perl Modules (*.pm)\t*.pm\n" . - \ "Perl Documentation Files (*.pod)\t*.pod\n" . - \ "All Files (*.*)\t*.*\n" -endif - -" Provided by Ned Konz <ned at bike-nomad dot com> -"--------------------------------------------- -setlocal include=\\<\\(use\\\|require\\)\\> -setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','') -setlocal define=[^A-Za-z_] - -" The following line changes a global variable but is necessary to make -" gf and similar commands work. Thanks to Andrew Pimlott for pointing out -" the problem. If this causes a " problem for you, add an -" after/ftplugin/perl6.vim file that contains -" set isfname-=: -set isfname+=: -setlocal iskeyword=48-57,_,A-Z,a-z,:,- - -" Set this once, globally. -if !exists("perlpath") - if executable("perl6") - try - if &shellxquote != '"' - let perlpath = system('perl6 -e "@*INC.join(q/,/).say"') - else - let perlpath = system("perl6 -e '@*INC.join(q/,/).say'") - endif - let perlpath = substitute(perlpath,',.$',',,','') - catch /E145:/ - let perlpath = ".,," - endtry - else - " If we can't call perl to get its path, just default to using the - " current directory and the directory of the current file. - let perlpath = ".,," - endif -endif - -let &l:path=perlpath -"--------------------------------------------- - -" Undo the stuff we changed. -let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" . - \ " | unlet! b:browsefilter" - -" Restore the saved compatibility options. -let &cpo = s:save_cpo -unlet s:save_cpo diff --git a/runtime/ftplugin/poke.vim b/runtime/ftplugin/poke.vim new file mode 100644 index 0000000000..2be86695c8 --- /dev/null +++ b/runtime/ftplugin/poke.vim @@ -0,0 +1,32 @@ +" Vim filetype plugin file +" Language: GNU Poke +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 March 11 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,:// +setlocal commentstring=//\ %s +setlocal formatoptions-=t formatoptions+=croql + +setlocal include=load +setlocal suffixesadd=.pk + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "Poke Files (*.pk)\t*.pk\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< com< cms< inc< sua<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 diff --git a/runtime/ftplugin/ps1.vim b/runtime/ftplugin/ps1.vim new file mode 100644 index 0000000000..aac3bc9903 --- /dev/null +++ b/runtime/ftplugin/ps1.vim @@ -0,0 +1,59 @@ +" Vim filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2021 Apr 02 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro +" Enable autocompletion of hyphenated PowerShell commands, +" e.g. Get-Content or Get-ADUser +setlocal iskeyword+=- + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") + let b:browsefilter = + \ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . + \ "PowerShell Script Files (*.ps1)\t*.ps1\n" . + \ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . + \ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . + \ "All Files (*.*)\t*.*\n" +endif + +" Look up keywords by Get-Help: +" check for PowerShell Core in Windows, Linux or MacOS +if executable('pwsh') | let s:pwsh_cmd = 'pwsh' + " on Windows Subsystem for Linux, check for PowerShell Core in Windows +elseif exists('$WSLENV') && executable('pwsh.exe') | let s:pwsh_cmd = 'pwsh.exe' + " check for PowerShell <= 5.1 in Windows +elseif executable('powershell.exe') | let s:pwsh_cmd = 'powershell.exe' +endif + +if exists('s:pwsh_cmd') + if !has('gui_running') && executable('less') && + \ !(exists('$ConEmuBuild') && &term =~? '^xterm') + " For exclusion of ConEmu, see https://github.com/Maximus5/ConEmu/issues/2048 + command! -buffer -nargs=1 GetHelp silent exe '!' . s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full "<args>" | ' . (has('unix') ? 'LESS= less' : 'less') | redraw! + elseif has('terminal') + command! -buffer -nargs=1 GetHelp silent exe 'term ' . s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full "<args>"' . (executable('less') ? ' | less' : '') + else + command! -buffer -nargs=1 GetHelp echo system(s:pwsh_cmd . ' -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -Command Get-Help -Full <args>') + endif +endif +setlocal keywordprg=:GetHelp + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo< iskeyword< keywordprg<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/ps1xml.vim b/runtime/ftplugin/ps1xml.vim new file mode 100644 index 0000000000..837a3309b4 --- /dev/null +++ b/runtime/ftplugin/ps1xml.vim @@ -0,0 +1,34 @@ +" Vim filetype plugin file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2021 Apr 02 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") + let b:browsefilter = + \ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . + \ "PowerShell Script Files (*.ps1)\t*.ps1\n" . + \ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . + \ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . + \ "All Files (*.*)\t*.*\n" +endif + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save diff --git a/runtime/ftplugin/python.vim b/runtime/ftplugin/python.vim index 64c1a87a69..000ddf52a3 100644 --- a/runtime/ftplugin/python.vim +++ b/runtime/ftplugin/python.vim @@ -3,7 +3,7 @@ " Maintainer: Tom Picton <tom@tompicton.co.uk> " Previous Maintainer: James Sully <sullyj3@gmail.com> " Previous Maintainer: Johannes Zellner <johannes@zellner.org> -" Last Change: Sun 17 Mar 2019 +" Last Change: Mon, 5 October 2020 " https://github.com/tpict/vim-ftplugin-python if exists("b:did_ftplugin") | finish | endif @@ -14,6 +14,7 @@ set cpo&vim setlocal cinkeys-=0# setlocal indentkeys-=0# setlocal include=^\\s*\\(from\\\|import\\) +setlocal define=^\\s*\\(def\\\|class\\) " For imports with leading .., append / and replace additional .s with ../ let b:grandparent_match = '^\(.\.\)\(\.*\)' @@ -38,7 +39,7 @@ setlocal comments=b:#,fb:- setlocal commentstring=#\ %s if has('python3') - setlocal omnifunc=python3complete#Complete + setlocal omnifunc=python3complete#Complete elseif has('python') setlocal omnifunc=pythoncomplete#Complete endif @@ -115,35 +116,18 @@ endif if !exists("g:python_recommended_style") || g:python_recommended_style != 0 " As suggested by PEP8. - setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8 + setlocal expandtab tabstop=4 softtabstop=4 shiftwidth=4 endif -" First time: try finding "pydoc". -if !exists('g:pydoc_executable') - if executable('pydoc') - let g:pydoc_executable = 1 - else - let g:pydoc_executable = 0 - endif -endif - -" Windows-specific pydoc setup -if has('win32') || has('win64') - if executable('python') - " available as Tools\scripts\pydoc.py - let g:pydoc_executable = 1 - else - let g:pydoc_executable = 0 - endif -endif - -" If "pydoc" was found use it for keywordprg. -if g:pydoc_executable - if has('win32') || has('win64') - setlocal keywordprg=python\ -m\ pydoc\ - else - setlocal keywordprg=pydoc - endif +" Use pydoc for keywordprg. +" Unix users preferentially get pydoc3, then pydoc2. +" Windows doesn't have a standalone pydoc executable in $PATH by default, nor +" does it have separate python2/3 executables, so Windows users just get +" whichever version corresponds to their installed Python version. +if executable('python3') + setlocal keywordprg=python3\ -m\ pydoc +elseif executable('python') + setlocal keywordprg=python\ -m\ pydoc endif " Script for filetype switching to undo the local stuff we may have changed diff --git a/runtime/ftplugin/r.vim b/runtime/ftplugin/r.vim index 4ea3073922..a78afa2e7e 100644 --- a/runtime/ftplugin/r.vim +++ b/runtime/ftplugin/r.vim @@ -2,7 +2,7 @@ " Language: R " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Tue Apr 07, 2015 04:38PM +" Last Change: Sat Aug 15, 2020 11:37AM " Only do this when not yet done for this buffer if exists("b:did_ftplugin") @@ -20,7 +20,7 @@ setlocal formatoptions-=t setlocal commentstring=#\ %s setlocal comments=:#',:###,:##,:# -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "R Source Files (*.R)\t*.R\n" . \ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst)\t*.Rnw;*.Rd;*.Rmd;*.Rrst\n" . \ "All Files (*.*)\t*.*\n" diff --git a/runtime/ftplugin/raku.vim b/runtime/ftplugin/raku.vim new file mode 100644 index 0000000000..941222bd38 --- /dev/null +++ b/runtime/ftplugin/raku.vim @@ -0,0 +1,127 @@ +" Vim filetype plugin file +" Language: Raku +" Maintainer: vim-perl <vim-perl@googlegroups.com> +" Homepage: https://github.com/Raku/vim-raku +" Bugs/requests: https://github.com/Raku/vim-raku/issues +" Last Change: 2021-04-16 +" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> +" +" Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com> + +if exists("b:did_ftplugin") | finish | endif +let b:did_ftplugin = 1 + +" Make sure the continuation lines below do not cause problems in +" compatibility mode. +let s:save_cpo = &cpo +set cpo-=C + +setlocal formatoptions-=t +setlocal formatoptions+=crqol +setlocal keywordprg=p6doc + +setlocal comments=:#\|,:#=,:# +setlocal commentstring=#%s + +" Provided by Ned Konz <ned at bike-nomad dot com> +"--------------------------------------------- +setlocal include=\\<\\(use\\\|require\\)\\> +setlocal includeexpr=substitute(v:fname,'::','/','g') +setlocal suffixesadd=.rakumod,.rakudoc,.pm6,.pm +setlocal define=[^A-Za-z_] + +" The following line changes a global variable but is necessary to make +" gf and similar commands work. Thanks to Andrew Pimlott for pointing out +" the problem. If this causes a problem for you, add an +" after/ftplugin/raku.vim file that contains +" set isfname-=: +set isfname+=: +setlocal iskeyword=@,48-57,_,192-255,- + +" Raku exposes its CompUnits through $*REPO, but mapping module names to +" compunit paths is nontrivial. Probably it's more convenient to rely on +" people using zef, which has a handy store of sources for modules it has +" installed. +func s:compareReverseFtime(a, b) + let atime = getftime(a:a) + let btime = getftime(a:b) + return atime > btime ? -1 : atime == btime ? 0 : 1 +endfunc + +let &l:path = "lib,." +if exists('$RAKULIB') + let &l:path = &l:path . "," . $RAKULIB +endif +let &l:path = &l:path . "," . join( + \ sort(glob("~/.zef/store/*/*/lib", 0, 1), "s:compareReverseFtime"), + \ ',') + +" Convert ascii-based ops into their single-character unicode equivalent +if get(g:, 'raku_unicode_abbrevs', 0) + iabbrev <buffer> !(<) ⊄ + iabbrev <buffer> !(<=) ⊈ + iabbrev <buffer> !(>) ⊅ + iabbrev <buffer> !(>=) ⊉ + iabbrev <buffer> !(cont) ∌ + iabbrev <buffer> !(elem) ∉ + iabbrev <buffer> != ≠+ iabbrev <buffer> (&) ∩ + iabbrev <buffer> (+) ⊎ + iabbrev <buffer> (-) ∖ + iabbrev <buffer> (.) ⊠+ iabbrev <buffer> (<) ⊂ + iabbrev <buffer> (<+) ≼ + iabbrev <buffer> (<=) ⊆ + iabbrev <buffer> (>) ⊃ + iabbrev <buffer> (>+) ≽ + iabbrev <buffer> (>=) ⊇ + iabbrev <buffer> (\|) ∪ + iabbrev <buffer> (^) ⊖ + iabbrev <buffer> (atomic) âš› + iabbrev <buffer> (cont) ∋ + iabbrev <buffer> (elem) ∈ + iabbrev <buffer> * × + iabbrev <buffer> **0 â° + iabbrev <buffer> **1 ¹ + iabbrev <buffer> **2 ² + iabbrev <buffer> **3 ³ + iabbrev <buffer> **4 â´ + iabbrev <buffer> **5 âµ + iabbrev <buffer> **6 â¶ + iabbrev <buffer> **7 â· + iabbrev <buffer> **8 ⸠+ iabbrev <buffer> **9 â¹ + iabbrev <buffer> ... … + iabbrev <buffer> / ÷ + iabbrev <buffer> << « + iabbrev <buffer> <<[=]<< «=« + iabbrev <buffer> <<[=]>> «=» + iabbrev <buffer> <= ≤ + iabbrev <buffer> =~= ≅ + iabbrev <buffer> >= ≥ + iabbrev <buffer> >> » + iabbrev <buffer> >>[=]<< »=« + iabbrev <buffer> >>[=]>> »=» + iabbrev <buffer> Inf ∞ + iabbrev <buffer> atomic-add-fetch âš›+= + iabbrev <buffer> atomic-assign âš›= + iabbrev <buffer> atomic-fetch âš› + iabbrev <buffer> atomic-dec-fetch --âš› + iabbrev <buffer> atomic-fetch-dec âš›-- + iabbrev <buffer> atomic-fetch-inc âš›++ + iabbrev <buffer> atomic-inc-fetch ++âš› + iabbrev <buffer> atomic-sub-fetch ⚛−= + iabbrev <buffer> e ð‘’ + iabbrev <buffer> o ∘ + iabbrev <buffer> pi Ï€ + iabbrev <buffer> set() ∅ + iabbrev <buffer> tau Ï„ +endif + +" Undo the stuff we changed. +let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< isk< kp< path<" . + \ " | unlet! b:browsefilter" + +" Restore the saved compatibility options. +let &cpo = s:save_cpo +unlet s:save_cpo diff --git a/runtime/ftplugin/rhelp.vim b/runtime/ftplugin/rhelp.vim index fdac38f3e9..d0b546d62d 100644 --- a/runtime/ftplugin/rhelp.vim +++ b/runtime/ftplugin/rhelp.vim @@ -2,7 +2,7 @@ " Language: R help file " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Tue Apr 07, 2015 04:37PM +" Last Change: Sat Aug 15, 2020 12:01PM " Only do this when not yet done for this buffer if exists("b:did_ftplugin") @@ -17,7 +17,7 @@ set cpo&vim setlocal iskeyword=@,48-57,_,. -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" . \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/rmd.vim b/runtime/ftplugin/rmd.vim index 7b0db8dbb5..2ee72ffc6c 100644 --- a/runtime/ftplugin/rmd.vim +++ b/runtime/ftplugin/rmd.vim @@ -2,7 +2,7 @@ " Language: R Markdown file " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Sun Jul 22, 2018 06:51PM +" Last Change: Sat Aug 15, 2020 12:03PM " Original work by Alex Zvoleff (adjusted from R help for rmd by Michel Kuhlmann) " Only do this when not yet done for this buffer @@ -46,7 +46,7 @@ runtime ftplugin/pandoc.vim " Don't load another plugin for this buffer let b:did_ftplugin = 1 -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" . \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/rnoweb.vim b/runtime/ftplugin/rnoweb.vim index e184399dcb..dc5f1b5e06 100644 --- a/runtime/ftplugin/rnoweb.vim +++ b/runtime/ftplugin/rnoweb.vim @@ -2,7 +2,7 @@ " Language: Rnoweb " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Tue Apr 07, 2015 04:37PM +" Last Change: Sat Aug 15, 2020 12:02PM " Only do this when not yet done for this buffer if exists("b:did_ftplugin") @@ -24,7 +24,7 @@ setlocal iskeyword=@,48-57,_,. setlocal suffixesadd=.bib,.tex setlocal comments=b:%,b:#,b:##,b:###,b:#' -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" . \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/rpl.vim b/runtime/ftplugin/rpl.vim index 909e141cc6..8b4d5b0d48 100644 --- a/runtime/ftplugin/rpl.vim +++ b/runtime/ftplugin/rpl.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: RPL/2 -" Maintainer: Joël BERTRAND <rpl2@free.fr> +" Maintainer: Joël BERTRAND <rpl2@free.fr> " Last Change: 2012 Mar 07 " Version: 0.1 diff --git a/runtime/ftplugin/rrst.vim b/runtime/ftplugin/rrst.vim index 3e82847d35..a56fd6478e 100644 --- a/runtime/ftplugin/rrst.vim +++ b/runtime/ftplugin/rrst.vim @@ -2,7 +2,7 @@ " Language: reStructuredText documentation format with R code " Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Wed Nov 01, 2017 10:47PM +" Last Change: Sat Aug 15, 2020 12:02PM " Original work by Alex Zvoleff " Only do this when not yet done for this buffer @@ -37,7 +37,7 @@ if !exists("g:rrst_dynamic_comments") || (exists("g:rrst_dynamic_comments") && g setlocal formatexpr=FormatRrst() endif -if has("gui_win32") && !exists("b:browsefilter") +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" . \ "All Files (*.*)\t*.*\n" endif diff --git a/runtime/ftplugin/rst.vim b/runtime/ftplugin/rst.vim index f0646e9f36..ff7a402d10 100644 --- a/runtime/ftplugin/rst.vim +++ b/runtime/ftplugin/rst.vim @@ -3,7 +3,7 @@ " Maintainer: Marshall Ward <marshall.ward@gmail.com> " Original Maintainer: Nikolai Weibull <now@bitwi.se> " Website: https://github.com/marshallward/vim-restructuredtext -" Latest Revision: 2018-12-29 +" Latest Revision: 2020-03-31 if exists("b:did_ftplugin") finish @@ -34,7 +34,7 @@ if exists("g:rst_style") && g:rst_style != 0 setlocal expandtab shiftwidth=3 softtabstop=3 tabstop=8 endif -if has('patch-7.3.867') " Introduced the TextChanged event. +if g:rst_fold_enabled != 0 && has('patch-7.3.867') " Introduced the TextChanged event. setlocal foldmethod=expr setlocal foldexpr=RstFold#GetRstFold() setlocal foldtext=RstFold#GetRstFoldText() diff --git a/runtime/ftplugin/ruby.vim b/runtime/ftplugin/ruby.vim index 054c35e5fa..b4a8eaa0d8 100644 --- a/runtime/ftplugin/ruby.vim +++ b/runtime/ftplugin/ruby.vim @@ -3,7 +3,7 @@ " Maintainer: Tim Pope <vimNOSPAM@tpope.org> " URL: https://github.com/vim-ruby/vim-ruby " Release Coordinator: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2019 Jan 06 +" Last Change: 2019 Nov 06 if (exists("b:did_ftplugin")) finish @@ -24,20 +24,20 @@ if exists("loaded_matchit") && !exists("b:match_words") let b:match_ignorecase = 0 let b:match_words = - \ '\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|def\|begin\)\>=\@!' . + \ '{\|\<\%(if\|unless\|case\|while\|until\|for\|do\|class\|module\|def\|=\@<!begin\)\>=\@!' . \ ':' . \ '\<\%(else\|elsif\|ensure\|when\|rescue\|break\|redo\|next\|retry\)\>' . \ ':' . - \ '\%(^\|[^.\:@$]\)\@<=\<end\:\@!\>' . - \ ',{:},\[:\],(:)' + \ '}\|\%(^\|[^.\:@$=]\)\@<=\<end\:\@!\>' . + \ ',^=begin\>:^=end\>,' . + \ ',\[:\],(:)' let b:match_skip = \ "synIDattr(synID(line('.'),col('.'),0),'name') =~ '" . - \ "\\<ruby\\%(String\\|StringDelimiter\\|ASCIICode\\|Escape\\|" . - \ "Regexp\\|RegexpDelimiter\\|" . - \ "Interpolation\\|NoInterpolation\\|Comment\\|Documentation\\|" . - \ "ConditionalModifier\\|RepeatModifier\\|OptionalDo\\|" . - \ "Function\\|BlockArgument\\|KeywordAsMethod\\|ClassVariable\\|" . + \ "\\<ruby\\%(String\\|.\+Delimiter\\|Character\\|.\+Escape\\|" . + \ "Regexp\\|Interpolation\\|Comment\\|Documentation\\|" . + \ "ConditionalModifier\\|RepeatModifier\\|RescueModifier\\|OptionalDo\\|" . + \ "MethodName\\|BlockArgument\\|KeywordAsMethod\\|ClassVariable\\|" . \ "InstanceVariable\\|GlobalVariable\\|Symbol\\)\\>'" endif @@ -87,7 +87,7 @@ endfunction function! s:build_path(path) abort let path = join(map(copy(a:path), 'v:val ==# "." ? "" : v:val'), ',') - if &g:path !~# '\v^\.%(,/%(usr|emx)/include)=,,$' + if &g:path !~# '\v^%(\.,)=%(/%(usr|emx)/include,)=,$' let path = substitute(&g:path,',,$',',','') . ',' . path endif return path @@ -152,7 +152,7 @@ endif function! s:map(mode, flags, map) abort let from = matchstr(a:map, '\S\+') if empty(mapcheck(from, a:mode)) - exe a:mode.'map' '<buffer>' a:map + exe a:mode.'map' '<buffer>' a:flags a:map let b:undo_ftplugin .= '|sil! '.a:mode.'unmap <buffer> '.from endif endfunction @@ -311,13 +311,16 @@ function! s:synid() abort endfunction function! s:wrap_i(back,forward) abort - execute 'norm k'.a:forward + execute 'norm! k' + execute 'norm '.a:forward let line = line('.') execute 'norm '.a:back if line('.') == line - 1 return s:wrap_a(a:back,a:forward) endif - execute 'norm jV'.a:forward.'k' + execute 'norm! jV' + execute 'norm '.a:forward + execute 'norm! k' endfunction function! s:wrap_a(back,forward) abort @@ -330,11 +333,15 @@ function! s:wrap_a(back,forward) abort - endwhile if exists('after') - execute 'norm V'.a:forward.'j' + execute 'norm! V' + execute 'norm '.a:forward + execute 'norm! j' elseif line('.') > 1 && getline(line('.')-1) =~# '^\s*$' - execute 'norm kV'.a:forward + execute 'norm! kV' + execute 'norm '.a:forward else - execute 'norm V'.a:forward + execute 'norm! V' + execute 'norm '.a:forward endif endfunction @@ -366,7 +373,6 @@ function! RubyCursorFile() abort endtry let pre = matchstr(strpart(getline('.'), 0, col('.')-1), '.*\f\@<!') let post = matchstr(strpart(getline('.'), col('.')), '\f\@!.*') - let ext = getline('.') =~# '^\s*\%(require\%(_relative\)\=\|autoload\)\>' && cfile !~# '\.rb$' ? '.rb' : '' if s:synid() ==# hlID('rubyConstant') let cfile = substitute(cfile,'\.\w\+[?!=]\=$','','') let cfile = substitute(cfile,'^::','','') @@ -375,12 +381,15 @@ function! RubyCursorFile() abort let cfile = substitute(cfile,'\(\l\|\d\)\(\u\)','\1_\2', 'g') return tolower(cfile) . '.rb' elseif getline('.') =~# '^\s*require_relative\s*\(["'']\).*\1\s*$' - let cfile = expand('%:p:h') . '/' . matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1') . ext + let cfile = expand('%:p:h') . '/' . matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1') + let cfile .= cfile !~# '\.rb$' ? '.rb' : '' elseif getline('.') =~# '^\s*\%(require[( ]\|load[( ]\|autoload[( ]:\w\+,\)\s*\%(::\)\=File\.expand_path(\(["'']\)\.\./.*\1,\s*__FILE__)\s*$' let target = matchstr(getline('.'),'\(["'']\)\.\.\zs/.\{-\}\ze\1') - let cfile = expand('%:p:h') . target . ext + let cfile = expand('%:p:h') . target + let cfile .= cfile !~# '\.rb$' ? '.rb' : '' elseif getline('.') =~# '^\s*\%(require \|load \|autoload :\w\+,\)\s*\(["'']\).*\1\s*$' - let cfile = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1') . ext + let cfile = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1') + let cfile .= cfile !~# '\.rb$' ? '.rb' : '' elseif pre.post =~# '\<File.expand_path[( ].*[''"]\{2\}, *__FILE__\>' && cfile =~# '^\.\.' let cfile = expand('%:p:h') . strpart(cfile, 2) else diff --git a/runtime/ftplugin/sass.vim b/runtime/ftplugin/sass.vim index d6909e7ad5..9ce446137a 100644 --- a/runtime/ftplugin/sass.vim +++ b/runtime/ftplugin/sass.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Sass " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2016 Aug 29 +" Last Change: 2019 Dec 05 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -13,11 +13,25 @@ let b:undo_ftplugin = "setl com< cms< def< inc< inex< ofu< sua<" setlocal comments=:// setlocal commentstring=//\ %s -setlocal define=^\\s*\\%(@mixin\\\|=\\) -setlocal includeexpr=substitute(v:fname,'\\%(.*/\\\|^\\)\\zs','_','') +setlocal includeexpr=SassIncludeExpr(v:fname) setlocal omnifunc=csscomplete#CompleteCSS setlocal suffixesadd=.sass,.scss,.css +if &filetype =~# '\<s[ac]ss]\>' + setlocal iskeyword+=- + setlocal iskeyword+=$ + setlocal iskeyword+=% + let b:undo_ftplugin .= ' isk<' +endif +let &l:define = '^\C\v\s*%(\@function|\@mixin|\=)|^\s*%(\$[[:alnum:]-]+:|[%.][:alnum:]-]+\s*%(\{|$))@=' let &l:include = '^\s*@import\s\+\%(url(\)\=["'']\=' +function! SassIncludeExpr(file) abort + let partial = substitute(a:file, '\%(.*/\|^\)\zs', '_', '') + if !empty(findfile(partial)) + return partial + endif + return a:file +endfunction + " vim:set sw=2: diff --git a/runtime/ftplugin/scheme.vim b/runtime/ftplugin/scheme.vim index 62fd327e07..5778594c41 100644 --- a/runtime/ftplugin/scheme.vim +++ b/runtime/ftplugin/scheme.vim @@ -1,6 +1,6 @@ " Vim filetype plugin file " Language: Scheme (R7RS) -" Last Change: 2018-03-05 +" Last Change: 2019 Nov 18 " Author: Evan Hanson <evhan@foldling.org> " Maintainer: Evan Hanson <evhan@foldling.org> " Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com> @@ -21,7 +21,7 @@ setl iskeyword=33,35-39,42-43,45-58,60-90,94,95,97-122,126 let b:undo_ftplugin = 'setl lisp< comments< commentstring< define< iskeyword<' -setl lispwords=case +setl lispwords+=case setl lispwords+=define setl lispwords+=define-record-type setl lispwords+=define-syntax diff --git a/runtime/ftplugin/sexplib.vim b/runtime/ftplugin/sexplib.vim new file mode 100644 index 0000000000..27e1b28370 --- /dev/null +++ b/runtime/ftplugin/sexplib.vim @@ -0,0 +1,15 @@ +" Vim filetype plugin file +" Language: Sexplib +" Maintainer: Markus Mottl <markus.mottl@gmail.com> +" URL: https://github.com/ocaml/vim-ocaml +" Last Change: +" 2017 Apr 12 - First version (MM) + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin=1 + +" Comment string +setl commentstring=;\ %s +setl comments=:; diff --git a/runtime/ftplugin/spec.vim b/runtime/ftplugin/spec.vim index 2a961f8244..ce00021a69 100644 --- a/runtime/ftplugin/spec.vim +++ b/runtime/ftplugin/spec.vim @@ -73,23 +73,23 @@ if !exists("*s:SpecChangelog") let chgline = -1 while (line <= line("$")) let linestr = getline(line) - if (name == "" && linestr =~? '^Name:') + if name == "" && linestr =~? '^Name:' let nameline = line let name = substitute(strpart(linestr,5), '^[ ]*\([^ ]\+\)[ ]*$','\1','') - elseif (ver == "" && linestr =~? '^Version:') + elseif ver == "" && linestr =~? '^Version:' let verline = line let ver = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') - elseif (rel == "" && linestr =~? '^Release:') + elseif rel == "" && linestr =~? '^Release:' let relline = line let rel = substitute(strpart(linestr,8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') - elseif (linestr =~? '^%changelog') + elseif linestr =~? '^%changelog' let chgline = line execute line break endif let line = line+1 endwhile - if (nameline != -1 && verline != -1 && relline != -1) + if nameline != -1 && verline != -1 && relline != -1 let include_release_info = exists("g:spec_chglog_release_info") let name = s:ParseRpmVars(name, nameline) let ver = s:ParseRpmVars(ver, verline) @@ -100,20 +100,20 @@ if !exists("*s:SpecChangelog") call s:GetRelVer() - if (chgline == -1) + if chgline == -1 let option = confirm("Can't find %changelog. Create one? ","&End of file\n&Here\n&Cancel",3) - if (option == 1) + if option == 1 call append(line("$"),"") call append(line("$"),"%changelog") execute line("$") let chgline = line(".") - elseif (option == 2) + elseif option == 2 call append(line("."),"%changelog") normal j - chgline = line(".") + let chgline = line(".") endif endif - if (chgline != -1) + if chgline != -1 let tmptime = v:lc_time language time C let parsed_format = "* ".strftime(format)." - ".ver."-".rel @@ -122,16 +122,16 @@ if !exists("*s:SpecChangelog") let wrong_format = 0 let wrong_release = 0 let insert_line = 0 - if (getline(chgline+1) != parsed_format) + if getline(chgline+1) != parsed_format let wrong_format = 1 endif - if (include_release_info && getline(chgline+2) != release_info) + if include_release_info && getline(chgline+2) != release_info let wrong_release = 1 endif - if (wrong_format || wrong_release) - if (include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release")) + if wrong_format || wrong_release + if include_release_info && !wrong_release && !exists("g:spec_chglog_never_increase_release") let option = confirm("Increase release? ","&Yes\n&No",1) - if (option == 1) + if option == 1 execute relline normal let rel = substitute(strpart(getline(relline),8), '^[ ]*\([^ ]\+\)[ ]*$','\1','') @@ -171,24 +171,22 @@ if !exists("*s:ParseRpmVars") let ret = "" while (1) let start = match(a:str, "\%{", end+1) - if (start == -1) + if start == -1 let ret = ret . strpart(a:str, end+1) break endif let ret = ret . strpart(a:str, end+1, start-(end+1)) let end = match(a:str, "}", start) - if (end == -1) + if end == -1 let ret = ret . strpart(a:str, start) break endif let varname = strpart(a:str, start+2, end-(start+2)) execute a:strline - let definestr = "^[ \t]*%(?:global|define)[ \t]\\+" . varname . "[ \t]\\+\\(.*\\)$" + let definestr = "^[ \t]*%\\(define\\|global\\)[ \t]\\+".varname."[ \t]\\+\\(.*\\)$" let linenum = search(definestr, "bW") - if (linenum != -1) - let ret = ret . substitute(getline(linenum), definestr, "\\1", "") - else - let ret = ret . strpart(str, start, end+1-start) + if linenum != 0 + let ret = ret . substitute(getline(linenum), definestr, "\\2", "") endif endwhile return ret diff --git a/runtime/ftplugin/swift.vim b/runtime/ftplugin/swift.vim new file mode 100644 index 0000000000..a86b782c22 --- /dev/null +++ b/runtime/ftplugin/swift.vim @@ -0,0 +1,23 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim maintainer: Emir SARI <bitigchi@me.com> +" Last Change: 2021 Jan 08 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") + finish +endif + +let b:did_ftplugin = 1 +let b:undo_ftplugin = "setlocal comments< expandtab< tabstop< shiftwidth< smartindent<" + +setlocal comments=s1:/*,mb:*,ex:*/,:///,:// +setlocal expandtab +setlocal sw=4 sts=4 +setlocal smartindent diff --git a/runtime/ftplugin/swiftgyb.vim b/runtime/ftplugin/swiftgyb.vim new file mode 100644 index 0000000000..8e8fc2b791 --- /dev/null +++ b/runtime/ftplugin/swiftgyb.vim @@ -0,0 +1,11 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim maintainer: Emir SARI <bitigchi@me.com> + +runtime! ftplugin/swift.vim diff --git a/runtime/ftplugin/systemd.vim b/runtime/ftplugin/systemd.vim index 60b3fd996d..4c5c9a1dc1 100644 --- a/runtime/ftplugin/systemd.vim +++ b/runtime/ftplugin/systemd.vim @@ -1,7 +1,41 @@ " Vim filetype plugin file -" Language: systemd.unit(5) +" Language: systemd.unit(5) +" Keyword Lookup Support: Enno Nagel <enno.nagel+vim@gmail.com> if !exists('b:did_ftplugin') " Looks a lot like dosini files. runtime! ftplugin/dosini.vim endif + +if !has('unix') + finish +endif + +if !has('gui_running') + command! -buffer -nargs=1 Sman silent exe '!' . KeywordLookup_systemd(<q-args>) | redraw! +elseif has('terminal') + command! -buffer -nargs=1 Sman silent exe 'term ' . KeywordLookup_systemd(<q-args>) +else + finish +endif + +if !exists('*KeywordLookup_systemd') + function KeywordLookup_systemd(keyword) abort + let matches = matchlist(getline(search('\v^\s*\[\s*.+\s*\]\s*$', 'nbWz')), '\v^\s*\[\s*(\k+).*\]\s*$') + if len(matches) > 1 + let section = matches[1] + return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd.' . section + else + return 'LESS= MANPAGER="less --pattern=''(^|,)\s+' . a:keyword . '=$'' --hilite-search" man ' . 'systemd' + endif + endfunction +endif + +setlocal iskeyword+=- +setlocal keywordprg=:Sman + +if !exists('b:undo_ftplugin') || empty(b:undo_ftplugin) + let b:undo_ftplugin = 'setlocal keywordprg< iskeyword<' +else + let b:undo_ftplugin .= '| setlocal keywordprg< iskeyword<' +endif diff --git a/runtime/ftplugin/tidy.vim b/runtime/ftplugin/tidy.vim new file mode 100644 index 0000000000..470548d83a --- /dev/null +++ b/runtime/ftplugin/tidy.vim @@ -0,0 +1,32 @@ +" Vim filetype plugin file +" Language: HMTL Tidy Configuration +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2020 Sep 4 + +if exists("b:did_ftplugin") + finish +endif +let b:did_ftplugin = 1 + +let s:cpo_save = &cpo +set cpo&vim + +setlocal comments=:#,:// +setlocal commentstring=#\ %s +setlocal formatoptions-=t formatoptions+=croql + +if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") + let b:browsefilter = "HTML Tidy Files (tidyrc, .tidyrc, tidy.conf)\ttidyrc;.tidyrc;tidy.conf\n" . + \ "HTML Files (*.html, *.htm)\t*.html;*.htm\n" . + \ "XHTML Files (*.xhtml, *.xhtm)\t*.xhtml;*.xhtm\n" . + \ "XML Files (*.xml)\t*.xml\n" . + \ "All Files (*.*)\t*.*\n" +endif + +let b:undo_ftplugin = "setl fo< com< cms<" . + \ " | unlet! b:browsefilter" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 diff --git a/runtime/ftplugin/vim.vim b/runtime/ftplugin/vim.vim index 34f5eb6db1..64b64b45e3 100644 --- a/runtime/ftplugin/vim.vim +++ b/runtime/ftplugin/vim.vim @@ -1,7 +1,7 @@ " Vim filetype plugin " Language: Vim " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 Aug 07 +" Last Change: 2021 Apr 11 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -12,7 +12,7 @@ endif let b:did_ftplugin = 1 let s:cpo_save = &cpo -set cpo-=C +set cpo&vim if !exists('*VimFtpluginUndo') func VimFtpluginUndo() @@ -48,17 +48,24 @@ setlocal isk+=# " Use :help to lookup the keyword under the cursor with K. setlocal keywordprg=:help -" Set 'comments' to format dashed lists in comments -setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" +" if "\n" .. getline(1, 10)->join("\n") =~# '\n\s*vim9\%[script]\>' +if "\n" .. join(getline(1, 10), "\n") =~# '\n\s*vim9\%[script]\>' + " Set 'comments' to format dashed lists in comments + setlocal com=sO:#\ -,mO:#\ \ ,eO:##,:# + " Comments starts with # in Vim9 script + setlocal commentstring=#%s +else + setlocal com=sO:\"\ -,mO:\"\ \ ,eO:\"\",:\" + " Comments starts with a double quote in legacy script + setlocal commentstring=\"%s +endif + " Format comments to be up to 78 characters long if &tw == 0 setlocal tw=78 endif -" Comments start with a double quote -setlocal commentstring=\"%s - " Prefer Vim help instead of manpages. setlocal keywordprg=:help @@ -66,14 +73,14 @@ if !exists("no_plugin_maps") && !exists("no_vim_maps") let b:did_add_maps = 1 " Move around functions. - nnoremap <silent><buffer> [[ m':call search('^\s*fu\%[nction]\>', "bW")<CR> - vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "bW")<CR> - nnoremap <silent><buffer> ]] m':call search('^\s*fu\%[nction]\>', "W")<CR> - vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*fu\%[nction]\>', "W")<CR> - nnoremap <silent><buffer> [] m':call search('^\s*endf\%[unction]\>', "bW")<CR> - vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "bW")<CR> - nnoremap <silent><buffer> ][ m':call search('^\s*endf\%[unction]\>', "W")<CR> - vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*endf\%[unction]\>', "W")<CR> + nnoremap <silent><buffer> [[ m':call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR> + vnoremap <silent><buffer> [[ m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "bW")<CR> + nnoremap <silent><buffer> ]] m':call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR> + vnoremap <silent><buffer> ]] m':<C-U>exe "normal! gv"<Bar>call search('^\s*\(fu\%[nction]\\|def\)\>', "W")<CR> + nnoremap <silent><buffer> [] m':call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR> + vnoremap <silent><buffer> [] m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "bW")<CR> + nnoremap <silent><buffer> ][ m':call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR> + vnoremap <silent><buffer> ][ m':<C-U>exe "normal! gv"<Bar>call search('^\s*end\(f\%[unction]\\|def\)\>', "W")<CR> " Move around comments nnoremap <silent><buffer> ]" :call search('^\(\s*".*\n\)\@<!\(\s*"\)', "W")<CR> @@ -85,11 +92,17 @@ endif " Let the matchit plugin know what items can be matched. if exists("loaded_matchit") let b:match_ignorecase = 0 + " "func" can also be used as a type: + " var Ref: func + " or to list functions: + " func name + " require a parenthesis following, then there can be an "endfunc". let b:match_words = - \ '\<fu\%[nction]\>:\<retu\%[rn]\>:\<endf\%[unction]\>,' . - \ '\<\(wh\%[ile]\|for\)\>:\<brea\%[k]\>:\<con\%[tinue]\>:\<end\(w\%[hile]\|fo\%[r]\)\>,' . - \ '\<if\>:\<el\%[seif]\>:\<en\%[dif]\>,' . - \ '\<try\>:\<cat\%[ch]\>:\<fina\%[lly]\>:\<endt\%[ry]\>,' . + \ '\<\%(fu\%[nction]\|def\)!\=\s\+\S\+(:\%(\%(^\||\)\s*\)\@<=\<retu\%[rn]\>:\%(\%(^\||\)\s*\)\@<=\<\%(endf\%[unction]\|enddef\)\>,' . + \ '\<\(wh\%[ile]\|for\)\>:\%(\%(^\||\)\s*\)\@<=\<brea\%[k]\>:\%(\%(^\||\)\s*\)\@<=\<con\%[tinue]\>:\%(\%(^\||\)\s*\)\@<=\<end\(w\%[hile]\|fo\%[r]\)\>,' . + \ '\<if\>:\%(\%(^\||\)\s*\)\@<=\<el\%[seif]\>:\%(\%(^\||\)\s*\)\@<=\<en\%[dif]\>,' . + \ '{:},' . + \ '\<try\>:\%(\%(^\||\)\s*\)\@<=\<cat\%[ch]\>:\%(\%(^\||\)\s*\)\@<=\<fina\%[lly]\>:\%(\%(^\||\)\s*\)\@<=\<endt\%[ry]\>,' . \ '\<aug\%[roup]\s\+\%(END\>\)\@!\S:\<aug\%[roup]\s\+END\>,' " Ignore syntax region commands and settings, any 'en*' would clobber " if-endif. diff --git a/runtime/ftplugin/yaml.vim b/runtime/ftplugin/yaml.vim index ceff36f7e4..db7cbd7ddb 100644 --- a/runtime/ftplugin/yaml.vim +++ b/runtime/ftplugin/yaml.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: YAML (YAML Ain't Markup Language) -" Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2008-07-09 +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> (inactive) +" Last Change: 2020 Mar 02 if exists("b:did_ftplugin") finish @@ -16,5 +16,10 @@ let b:undo_ftplugin = "setl com< cms< et< fo<" setlocal comments=:# commentstring=#\ %s expandtab setlocal formatoptions-=t formatoptions+=croql +if !exists("g:yaml_recommended_style") || g:yaml_recommended_style != 0 + let b:undo_ftplugin ..= " sw< sts<" + setlocal shiftwidth=2 softtabstop=2 +endif + let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/indent/Makefile b/runtime/indent/Makefile index d192605527..f6c44736d2 100644 --- a/runtime/indent/Makefile +++ b/runtime/indent/Makefile @@ -10,5 +10,5 @@ test: VIMRUNTIME=$(VIMRUNTIME) $(VIM) --clean --not-a-term -u testdir/runtest.vim -clean: +clean testclean: rm -f testdir/*.fail testdir/*.out diff --git a/runtime/indent/bash.vim b/runtime/indent/bash.vim new file mode 100644 index 0000000000..b91640687c --- /dev/null +++ b/runtime/indent/bash.vim @@ -0,0 +1,18 @@ +" Vim indent file +" Language: bash +" Maintainer: Bram +" Last Change: 2019 Sep 27 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif + +" The actual indenting is in sh.vim and controlled by buffer-local variables. +unlet! b:is_sh +unlet! b:is_kornshell +let b:is_bash = 1 + +runtime! indent/sh.vim + +" vim: ts=8 diff --git a/runtime/indent/cdl.vim b/runtime/indent/cdl.vim index 5fae7b9046..4f9b7a8967 100644 --- a/runtime/indent/cdl.vim +++ b/runtime/indent/cdl.vim @@ -62,10 +62,14 @@ fun! CdlGetIndent(lnum) " PREVIOUS LINE let ind = indent(lnum) let line = getline(lnum) - let f = -1 " wether a '=' is a conditional or a asignment, -1 means we don't know yet - " one 'closing' element at the beginning of the line has already reduced the - " indent, but 'else', 'elseif' & 'then' increment it for the next line - " '=' at the beginning has already de right indent (increased for asignments) + + " Whether a '=' is a conditional or an assignment. -1 means we don't know + " yet. + " One 'closing' element at the beginning of the line has already reduced the + " indent, but 'else', 'elseif' & 'then' increment it for the next line. + " '=' at the beginning already has the right indent (increased for + " asignments). + let f = -1 let inicio = matchend(line, '^\c\s*\(else\a*\|then\|endif\|/[*/]\|[);={]\)') if inicio > 0 let c = line[inicio-1] diff --git a/runtime/indent/clojure.vim b/runtime/indent/clojure.vim index 7c4186e29b..30a0b478e2 100644 --- a/runtime/indent/clojure.vim +++ b/runtime/indent/clojure.vim @@ -1,12 +1,11 @@ " Vim indent file -" Language: Clojure -" Author: Meikel Brandmeyer <mb@kotka.de> -" URL: http://kotka.de/projects/clojure/vimclojure.html -" -" Maintainer: Sung Pae <self@sungpae.com> -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 18 July 2016 +" Language: Clojure +" Maintainer: Alex Vear <av@axvr.io> +" Former Maintainers: Sung Pae <self@sungpae.com> +" Meikel Brandmeyer <mb@kotka.de> +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2021-02-13 if exists("b:did_indent") finish @@ -87,7 +86,7 @@ if exists("*searchpairpos") function! s:match_pairs(open, close, stopat) " Stop only on vector and map [ resp. {. Ignore the ones in strings and " comments. - if a:stopat == 0 + if a:stopat == 0 && g:clojure_maxlines > 0 let stopat = max([line(".") - g:clojure_maxlines, 0]) else let stopat = a:stopat @@ -121,7 +120,7 @@ if exists("*searchpairpos") if s:syn_id_name() !~? "string" return -1 endif - if s:current_char() != '\\' + if s:current_char() != '\' return -1 endif call cursor(0, col("$") - 1) @@ -170,7 +169,35 @@ if exists("*searchpairpos") call search('\S', 'W') let w = s:strip_namespace_and_macro_chars(s:current_word()) + if g:clojure_special_indent_words =~# '\V\<' . w . '\>' + + " `letfn` is a special-special-case. + if w ==# 'letfn' + " Earlier code left the cursor at: + " (letfn [...] ...) + " ^ + + " Search and get coordinates of first `[` + " (letfn [...] ...) + " ^ + call search('\[', 'W') + let pos = getcurpos() + let letfn_bracket = [pos[1], pos[2]] + + " Move cursor to start of the form this function was + " initially called on. Grab the coordinates of the + " closest outer `[`. + call cursor(a:position) + let outer_bracket = s:match_pairs('\[', '\]', 0) + + " If the located square brackets are not the same, + " don't use special-case formatting. + if outer_bracket != letfn_bracket + return 0 + endif + endif + return 1 endif @@ -190,11 +217,7 @@ if exists("*searchpairpos") " Check if form is a reader conditional, that is, it is prefixed by #? " or @#? function! s:is_reader_conditional_special_case(position) - if getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?" - return 1 - endif - - return 0 + return getline(a:position[0])[a:position[1] - 3 : a:position[1] - 2] == "#?" endfunction " Returns 1 for opening brackets, -1 for _anything else_. @@ -261,7 +284,7 @@ if exists("*searchpairpos") call cursor(paren) if s:is_method_special_case(paren) - return [paren[0], paren[1] + shiftwidth() - 1] + return [paren[0], paren[1] + &shiftwidth - 1] endif if s:is_reader_conditional_special_case(paren) @@ -292,6 +315,19 @@ if exists("*searchpairpos") return paren endif + " If the keyword begins with #, check if it is an anonymous + " function or set, in which case we indent by the shiftwidth + " (minus one if g:clojure_align_subforms = 1), or if it is + " ignored, in which case we use the ( position for indent. + if w[0] == "#" + " TODO: Handle #=() and other rare reader invocations? + if w[1] == '(' || w[1] == '{' + return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)] + elseif w[1] == '_' + return paren + endif + endif + " Test words without namespace qualifiers and leading reader macro " metacharacters. " @@ -299,19 +335,19 @@ if exists("*searchpairpos") let ww = s:strip_namespace_and_macro_chars(w) if &lispwords =~# '\V\<' . ww . '\>' - return [paren[0], paren[1] + shiftwidth() - 1] + return [paren[0], paren[1] + &shiftwidth - 1] endif if g:clojure_fuzzy_indent \ && !s:match_one(g:clojure_fuzzy_indent_blacklist, ww) \ && s:match_one(g:clojure_fuzzy_indent_patterns, ww) - return [paren[0], paren[1] + shiftwidth() - 1] + return [paren[0], paren[1] + &shiftwidth - 1] endif call search('\v\_s', 'cW') call search('\v\S', 'W') if paren[0] < line(".") - return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : shiftwidth() - 1)] + return [paren[0], paren[1] + (g:clojure_align_subforms ? 0 : &shiftwidth - 1)] endif call search('\v\S', 'bW') diff --git a/runtime/indent/dune.vim b/runtime/indent/dune.vim new file mode 100644 index 0000000000..0590d66d13 --- /dev/null +++ b/runtime/indent/dune.vim @@ -0,0 +1,13 @@ +" Vim indent file +" Language: dune +" Maintainers: Markus Mottl <markus.mottl@gmail.com> +" URL: https://github.com/ocaml/vim-ocaml +" Last Change: 2021 Jan 01 + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +" dune format-dune-file uses 1 space to indent +setlocal softtabstop=1 shiftwidth=1 expandtab diff --git a/runtime/indent/erlang.vim b/runtime/indent/erlang.vim index 9228f18683..625cfde0c1 100644 --- a/runtime/indent/erlang.vim +++ b/runtime/indent/erlang.vim @@ -4,9 +4,9 @@ " Contributors: Edwin Fine <efine145_nospam01 at usa dot net> " Pawel 'kTT' Salata <rockplayer.pl@gmail.com> " Ricardo Catalinas Jiménez <jimenezrick@gmail.com> -" Last Update: 2013-Jul-21 +" Last Update: 2020-Jun-11 " License: Vim license -" URL: https://github.com/hcs42/vim-erlang +" URL: https://github.com/vim-erlang/vim-erlang-runtime " Note About Usage: " This indentation script works best with the Erlang syntax file created by @@ -56,7 +56,8 @@ endfunction " Line tokenizer library {{{1 " ====================== -" Indtokens are "indentation tokens". +" Indtokens are "indentation tokens". See their exact format in the +" documentaiton of the s:GetTokensFromLine function. " Purpose: " Calculate the new virtual column after the given segment of a line. @@ -119,9 +120,10 @@ endfunction " Returns: " indtokens = [indtoken] " indtoken = [token, vcol, col] -" token = string (examples: 'begin', '<variable>', '}') -" vcol = integer (the virtual column of the first character of the token) -" col = integer +" token = string (examples: 'begin', '<quoted_atom>', '}') +" vcol = integer (the virtual column of the first character of the token; +" counting starts from 0) +" col = integer (counting starts from 0) function! s:GetTokensFromLine(line, string_continuation, atom_continuation, \tabstop) @@ -386,9 +388,12 @@ endfunction " lnum: integer " direction: 'up' | 'down' " Returns: -" result: [] -- the result is an empty list if we hit the beginning or end -" of the file -" | indtoken +" result: [[], 0, 0] +" -- the result is an empty list if we hit the beginning or end of +" the file +" | [indtoken, lnum, i] +" -- the content, lnum and token index of the next (or previous) +" indtoken function! s:FindIndToken(lnum, dir) let lnum = a:lnum while 1 @@ -396,9 +401,12 @@ function! s:FindIndToken(lnum, dir) let [lnum, indtokens] = s:TokenizeLine(lnum, a:dir) if lnum ==# 0 " We hit the beginning or end of the file - return [] + return [[], 0, 0] elseif !empty(indtokens) - return indtokens[a:dir ==# 'up' ? -1 : 0] + " We found a non-empty line. If we were moving up, we return the last + " token of this line. Otherwise we return the first token if this line. + let i = (a:dir ==# 'up' ? len(indtokens) - 1 : 0) + return [indtokens[i], lnum, i] endif endwhile endfunction @@ -417,7 +425,7 @@ function! s:PrevIndToken(lnum, i) " If the current line has a previous token, return that if a:i > 0 - return s:all_tokens[a:lnum][a:i - 1] + return [s:all_tokens[a:lnum][a:i - 1], a:lnum, a:i - 1] else return s:FindIndToken(a:lnum, 'up') endif @@ -437,7 +445,7 @@ function! s:NextIndToken(lnum, i) " If the current line has a next token, return that if len(s:all_tokens[a:lnum]) > a:i + 1 - return s:all_tokens[a:lnum][a:i + 1] + return [s:all_tokens[a:lnum][a:i + 1], a:lnum, a:i + 1] else return s:FindIndToken(a:lnum, 'down') endif @@ -518,7 +526,9 @@ endfunction " ok. % IsLineAtomContinuation = false function! s:IsLineAtomContinuation(lnum) if has('syntax_items') - return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom' + let syn_name = synIDattr(synID(a:lnum, 1, 0), 'name') + return syn_name =~# '^erlangQuotedAtom' || + \ syn_name =~# '^erlangQuotedRecord' else return 0 endif @@ -535,7 +545,7 @@ endfunction " is_standalone: bool function! s:IsCatchStandalone(lnum, i) call s:Log(' IsCatchStandalone called: lnum=' . a:lnum . ', i=' . a:i) - let prev_indtoken = s:PrevIndToken(a:lnum, a:i) + let [prev_indtoken, _, _] = s:PrevIndToken(a:lnum, a:i) " If we hit the beginning of the file, it is not a catch in a try block if prev_indtoken == [] @@ -544,7 +554,7 @@ function! s:IsCatchStandalone(lnum, i) let prev_token = prev_indtoken[0] - if prev_token =~# '[A-Z_@0-9]' + if prev_token =~# '^[A-Z_@0-9]' let is_standalone = 0 elseif prev_token =~# '[a-z]' if index(['after', 'and', 'andalso', 'band', 'begin', 'bnot', 'bor', 'bsl', @@ -659,11 +669,14 @@ endfunction " stack: [token] " token: string " stored_vcol: integer +" lnum: the line number of the "end of clause" mark (or 0 if we hit the +" beginning of the file) +" i: the index of the "end of clause" token within its own line " Returns: " result: [should_return, indent] " should_return: bool -- if true, the caller should return `indent` to Vim " indent -- integer -function! s:BeginningOfClauseFound(stack, token, stored_vcol) +function! s:BeginningOfClauseFound(stack, token, stored_vcol, lnum, i) if !empty(a:stack) && a:stack[0] ==# 'when' call s:Log(' BeginningOfClauseFound: "when" found in stack') call s:Pop(a:stack) @@ -681,13 +694,45 @@ function! s:BeginningOfClauseFound(stack, token, stored_vcol) return [1, a:stored_vcol + shiftwidth()] elseif a:stack[0] ==# ';' call s:Pop(a:stack) - if empty(a:stack) - call s:Log(' Stack is ["->", ";"], so LTI is in a function head ' . - \'-> return') - return [0, a:stored_vcol] - else + + if !empty(a:stack) return [1, s:UnexpectedToken(a:token, a:stack)] endif + + if a:lnum ==# 0 + " Set lnum and i to be NextIndToken-friendly + let lnum = 1 + let i = -1 + else + let lnum = a:lnum + let i = a:i + endif + + " Are we after a "-spec func() ...;" clause? + let [next1_indtoken, next1_lnum, next1_i] = s:NextIndToken(lnum, i) + if !empty(next1_indtoken) && next1_indtoken[0] =~# '-' + let [next2_indtoken, next2_lnum, next2_i] = + \s:NextIndToken(next1_lnum, next1_i) + if !empty(next2_indtoken) && next2_indtoken[0] =~# 'spec' + let [next3_indtoken, next3_lnum, next3_i] = + \s:NextIndToken(next2_lnum, next2_i) + if !empty(next3_indtoken) + let [next4_indtoken, next4_lnum, next4_i] = + \s:NextIndToken(next3_lnum, next3_i) + if !empty(next4_indtoken) + " Yes, we are. + call s:Log(' Stack is ["->", ";"], so LTI is in a "-spec" ' . + \'attribute -> return') + return [1, next4_indtoken[1]] + endif + endif + endif + endif + + call s:Log(' Stack is ["->", ";"], so LTI is in a function head ' . + \'-> return') + return [1, a:stored_vcol] + else return [1, s:UnexpectedToken(a:token, a:stack)] endif @@ -714,7 +759,7 @@ function! s:SearchEndPair(lnum, curr_col) return s:SearchPair( \ a:lnum, a:curr_col, \ '\C\<\%(case\|try\|begin\|receive\|if\)\>\|' . - \ '\<fun\>\%(\s\|\n\|%.*$\)*(', + \ '\<fun\>\%(\s\|\n\|%.*$\|[A-Z_@][a-zA-Z_@]*\)*(', \ '', \ '\<end\>') endfunction @@ -756,7 +801,7 @@ function! s:ErlangCalcIndent2(lnum, stack) " Hit the start of the file if lnum ==# 0 let [ret, res] = s:BeginningOfClauseFound(stack, 'beginning_of_file', - \stored_vcol) + \stored_vcol, 0, 0) if ret | return res | endif return 0 @@ -775,7 +820,8 @@ function! s:ErlangCalcIndent2(lnum, stack) endif if token ==# '<end_of_clause>' - let [ret, res] = s:BeginningOfClauseFound(stack, token, stored_vcol) + let [ret, res] = s:BeginningOfClauseFound(stack, token, stored_vcol, + \lnum, i) if ret | return res | endif if stored_vcol ==# -1 @@ -787,7 +833,7 @@ function! s:ErlangCalcIndent2(lnum, stack) endif elseif stack == ['prev_term_plus'] - if token =~# '[a-zA-Z_@]' || + if token =~# '[a-zA-Z_@#]' || \ token ==# '<string>' || token ==# '<string_start>' || \ token ==# '<quoted_atom>' || token ==# '<quoted_atom_start>' call s:Log(' previous token found: curr_vcol + plus = ' . @@ -917,9 +963,18 @@ function! s:ErlangCalcIndent2(lnum, stack) if ret | return res | endif elseif token ==# 'fun' - let next_indtoken = s:NextIndToken(lnum, i) + let [next_indtoken, next_lnum, next_i] = s:NextIndToken(lnum, i) call s:Log(' Next indtoken = ' . string(next_indtoken)) + if !empty(next_indtoken) && next_indtoken[0] =~# '^[A-Z_@]' + " The "fun" is followed by a variable, so we might have a named fun: + " "fun Fun() -> ok end". Thus we take the next token to decide + " whether this is a function definition ("fun()") or just a function + " reference ("fun Mod:Fun"). + let [next_indtoken, _, _] = s:NextIndToken(next_lnum, next_i) + call s:Log(' Next indtoken = ' . string(next_indtoken)) + endif + if !empty(next_indtoken) && next_indtoken[0] ==# '(' " We have an anonymous function definition " (e.g. "fun () -> ok end") @@ -1327,6 +1382,26 @@ function! ErlangIndent() return -1 endif + " If the line starts with the comment, and so is the previous non-blank line + if currline =~# '^\s*%' + let lnum = prevnonblank(v:lnum - 1) + if lnum ==# 0 + call s:Log('First non-empty line of the file -> return 0.') + return 0 + else + let ml = matchlist(getline(lnum), '^\(\s*\)%') + " If the previous line also starts with a comment, then return the same + " indentation that line has. Otherwise exit from this special "if" and + " don't care that the current line is a comment. + if !empty(ml) + let new_col = s:CalcVCol(ml[1], 0, len(ml[1]) - 1, 0, &tabstop) + call s:Log('Comment line after another comment line -> ' . + \'use same indent: ' . new_col) + return new_col + endif + endif + endif + let ml = matchlist(currline, \'^\(\s*\)\(\%(end\|of\|catch\|after\)\>\|[)\]}]\|>>\)') @@ -1381,6 +1456,24 @@ function! ErlangIndent() endfunction +" ErlangShowTokensInLine functions {{{1 +" ================================ + +" These functions are useful during development. + +function! ErlangShowTokensInLine(line) + echo "Line: " . a:line + let indtokens = s:GetTokensFromLine(a:line, 0, 0, &tabstop) + echo "Tokens:" + for it in indtokens + echo it + endfor +endfunction + +function! ErlangShowTokensInCurrentLine() + return ErlangShowTokensInLine(getline('.')) +endfunction + " Cleanup {{{1 " ======= diff --git a/runtime/indent/fortran.vim b/runtime/indent/fortran.vim index 2ba69e86df..26ed33a54d 100644 --- a/runtime/indent/fortran.vim +++ b/runtime/indent/fortran.vim @@ -1,12 +1,13 @@ " Vim indent file " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77) -" Version: 47 -" Last Change: 2016 Oct. 29 +" Version: (v48) 2020 October 07 " Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/> " Usage: For instructions, do :help fortran-indent from Vim " Credits: -" Useful suggestions were made, in chronological order, by: -" Albert Oliver Serra, Takuya Fujiwara and Philipp Edelmann. +" Version 0.1 was created in September 2000 by Ajit Thakkar. +" Since then, useful suggestions and contributions have been made, in order, by: +" Albert Oliver Serra, Takuya Fujiwara, Philipp Edelmann, Eisuke Kawashima, +" and Louis Cochen. " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -39,10 +40,10 @@ if !exists("b:fortran_fixed_source") elseif exists("fortran_fixed_source") " User guarantees fixed source form let b:fortran_fixed_source = 1 - elseif expand("%:e") ==? "f\<90\|95\|03\|08\>" + elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$' " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers let b:fortran_fixed_source = 0 - elseif expand("%:e") ==? "f\|f77\|for" + elseif expand("%:e") =~? '^\%(f\|f77\|for\)$' " Fixed-form file extension defaults let b:fortran_fixed_source = 1 else @@ -73,11 +74,15 @@ endif if (b:fortran_fixed_source == 1) setlocal indentexpr=FortranGetFixedIndent() if exists("*FortranGetFixedIndent") + let &cpoptions = s:cposet + unlet s:cposet finish endif else setlocal indentexpr=FortranGetFreeIndent() if exists("*FortranGetFreeIndent") + let &cpoptions = s:cposet + unlet s:cposet finish endif endif @@ -145,7 +150,7 @@ function FortranGetIndent(lnum) \. 'type\|forall\|associate\|enum\|block\)\)\>' let ind = ind - shiftwidth() " Fix indent for case statement immediately after select - if prevstat =~? '\<select\s\+\(case\|type\)\>' + if prevstat =~? '\<select\s*\(case\|type\)\>' let ind = ind + shiftwidth() endif endif @@ -212,7 +217,7 @@ function FortranGetFixedIndent() return ind endfunction -let &cpoptions=s:cposet +let &cpoptions = s:cposet unlet s:cposet " vim:sw=2 tw=130 diff --git a/runtime/indent/haml.vim b/runtime/indent/haml.vim index e6416e6f53..baca1d49d9 100644 --- a/runtime/indent/haml.vim +++ b/runtime/indent/haml.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Haml " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2017 Jun 13 +" Last Change: 2019 Dec 05 if exists("b:did_indent") finish @@ -10,7 +10,7 @@ runtime! indent/ruby.vim unlet! b:did_indent let b:did_indent = 1 -setlocal autoindent sw=2 et +setlocal autoindent setlocal indentexpr=GetHamlIndent() setlocal indentkeys=o,O,*<Return>,},],0),!^F,=end,=else,=elsif,=rescue,=ensure,=when diff --git a/runtime/indent/html.vim b/runtime/indent/html.vim index 1d2043ae9e..7019bd4a82 100644 --- a/runtime/indent/html.vim +++ b/runtime/indent/html.vim @@ -1,9 +1,8 @@ " Vim indent script for HTML -" Header: "{{{ " Maintainer: Bram Moolenaar " Original Author: Andy Wokula <anwoku@yahoo.de> -" Last Change: 2019 Mar 20 -" Version: 1.0 +" Last Change: 2021 Jan 26 +" Version: 1.0 "{{{ " Description: HTML indent script with cached state for faster indenting on a " range of lines. " Supports template systems through hooks. @@ -223,7 +222,7 @@ endfunc "}}} call s:AddITags(s:indent_tags, [ \ 'a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big', \ 'blockquote', 'body', 'button', 'caption', 'center', 'cite', 'code', - \ 'colgroup', 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', + \ 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font', \ 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'html', \ 'i', 'iframe', 'ins', 'kbd', 'label', 'legend', 'li', \ 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', @@ -587,7 +586,7 @@ func! s:Alien3() return eval(b:hi_js1indent) endif if b:hi_indent.scripttype == "javascript" - return GetJavascriptIndent() + return eval(b:hi_js1indent) + GetJavascriptIndent() else return -1 endif @@ -816,7 +815,7 @@ func! s:Alien5() let idx = match(prevtext, '^\s*\zs<!--') if idx >= 0 " just below comment start, add a shiftwidth - return idx + shiftwidth() + return indent(prevlnum) + shiftwidth() endif " Some files add 4 spaces just below a TODO line. It's difficult to detect @@ -942,11 +941,11 @@ func! s:InsideTag(foundHtmlString) let idx = match(text, '<' . s:tagname . '\s\+\zs\w') endif if idx == -1 - " after just "<tag" indent one level more + " after just "<tag" indent two levels more let idx = match(text, '<' . s:tagname . '$') if idx >= 0 - call cursor(lnum, idx) - return virtcol('.') + shiftwidth() + call cursor(lnum, idx + 1) + return virtcol('.') - 1 + shiftwidth() * 2 endif endif if idx > 0 diff --git a/runtime/indent/j.vim b/runtime/indent/j.vim index ea3d50936b..c308512ecc 100644 --- a/runtime/indent/j.vim +++ b/runtime/indent/j.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: J -" Maintainer: David Bürgin <676c7473@gmail.com> -" URL: https://github.com/glts/vim-j +" Maintainer: David Bürgin <dbuergin@gluet.ch> +" URL: https://gitlab.com/glts/vim-j " Last Change: 2015-01-11 if exists('b:did_indent') diff --git a/runtime/indent/json.vim b/runtime/indent/json.vim index b66a03d81b..c649e37013 100644 --- a/runtime/indent/json.vim +++ b/runtime/indent/json.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: JSON " Mantainer: Eli Parra <eli@elzr.com> https://github.com/elzr/vim-json -" Last Change: 2017 Jun 13 +" Last Change: 2020 Aug 30 " https://github.com/jakar/vim-json/commit/20b650e22aa750c4ab6a66aa646bdd95d7cd548a#diff-e81fc111b2052e306d126bd9989f7b7c " Original Author: Rogerz Zhang <rogerz.zhang at gmail.com> http://github.com/rogerz/vim-json " Acknowledgement: Based off of vim-javascript maintained by Darrick Wiebe @@ -19,7 +19,7 @@ let b:did_indent = 1 setlocal nosmartindent " Now, set up our indentation expression and keys that trigger it. -setlocal indentexpr=GetJSONIndent() +setlocal indentexpr=GetJSONIndent(v:lnum) setlocal indentkeys=0{,0},0),0[,0],!^F,o,O,e " Only define the function once. @@ -86,26 +86,28 @@ endfunction " 3. GetJSONIndent Function {{{1 " ========================= -function GetJSONIndent() +function GetJSONIndent(...) " 3.1. Setup {{{2 " ---------- + " For the current line, use the first argument if given, else v:lnum + let clnum = a:0 ? a:1 : v:lnum - " Set up variables for restoring position in file. Could use v:lnum here. + " Set up variables for restoring position in file. Could use clnum here. let vcol = col('.') " 3.2. Work on the current line {{{2 " ----------------------------- " Get the current line. - let line = getline(v:lnum) + let line = getline(clnum) let ind = -1 " If we got a closing bracket on an empty line, find its match and indent " according to it. let col = matchend(line, '^\s*[]}]') - if col > 0 && !s:IsInString(v:lnum, col) - call cursor(v:lnum, col) + if col > 0 && !s:IsInString(clnum, col) + call cursor(clnum, col) let bs = strpart('{}[]', stridx('}]', line[col - 1]) * 2, 2) let pairstart = escape(bs[0], '[') @@ -122,14 +124,14 @@ function GetJSONIndent() endif " If we are in a multi-line string, don't do anything to it. - if s:IsInString(v:lnum, matchend(line, '^\s*') + 1) + if s:IsInString(clnum, matchend(line, '^\s*') + 1) return indent('.') endif " 3.3. Work on the previous line. {{{2 " ------------------------------- - let lnum = prevnonblank(v:lnum - 1) + let lnum = prevnonblank(clnum - 1) if lnum == 0 return 0 @@ -151,7 +153,7 @@ function GetJSONIndent() if counts[0] == '1' || counts[1] == '1' || counts[2] == '1' return ind + shiftwidth() else - call cursor(v:lnum, vcol) + call cursor(clnum, vcol) end endif diff --git a/runtime/indent/make.vim b/runtime/indent/make.vim index 66a8a40173..4483efdbd8 100644 --- a/runtime/indent/make.vim +++ b/runtime/indent/make.vim @@ -20,8 +20,8 @@ let s:comment_rx = '^\s*#' let s:rule_rx = '^[^ \t#:][^#:]*:\{1,2}\%([^=:]\|$\)' let s:continued_rule_rx = '^[^#:]*:\{1,2}\%([^=:]\|$\)' let s:continuation_rx = '\\$' -let s:assignment_rx = '^\s*\h\w*\s*[+?]\==\s*\zs.*\\$' -let s:folded_assignment_rx = '^\s*\h\w*\s*[+?]\==' +let s:assignment_rx = '^\s*\h\w*\s*[+:?]\==\s*\zs.*\\$' +let s:folded_assignment_rx = '^\s*\h\w*\s*[+:?]\==' " TODO: This needs to be a lot more restrictive in what it matches. let s:just_inserted_rule_rx = '^\s*[^#:]\+:\{1,2}$' let s:conditional_directive_rx = '^ *\%(ifn\=\%(eq\|def\)\|else\)\>' diff --git a/runtime/indent/matlab.vim b/runtime/indent/matlab.vim index d2818a18ea..6390445c60 100644 --- a/runtime/indent/matlab.vim +++ b/runtime/indent/matlab.vim @@ -29,7 +29,7 @@ if exists("*GetMatlabIndent") | finish | endif let s:keepcpo = &cpo set cpo&vim -let s:end = '\<end\>\%([^(]*)\)\@!' " Array indexing heuristic +let s:end = '\<end\>\%([^({]*[)}]\)\@!' " Array indexing heuristic let s:open_pat = 'for\|if\|parfor\|spmd\|switch\|try\|while\|classdef\|properties\|methods\|events\|enumeration' let s:dedent_pat = '\C^\s*\zs\<\%(end\|else\|elseif\|catch\|\(case\|otherwise\|function\)\)\>' let s:start_pat = '\C\<\%(function\|' . s:open_pat . '\)\>' @@ -38,7 +38,7 @@ let s:zflag = has('patch-7.4.984') ? 'z' : '' " Returns whether a comment or string envelops the specified column. function! s:IsCommentOrString(lnum, col) - return synIDattr(synID(a:lnum, a:col, 1), "name") =~# 'matlabComment\|matlabMultilineComment\|matlabString' + return synIDattr(synID(a:lnum, a:col, 1), "name") =~# 'matlabComment\|matlabMultilineComment\|matlabCellComment\|matlabString' endfunction " Returns whether the specified line continues on the next line. @@ -105,7 +105,7 @@ function! GetMatlabIndent() else " Count how many blocks the previous line opens/closes " Line continuations/brackets indent once per statement - let result = indent(prevlnum) + shiftwidth() * (open - close + let result = (prevlnum > 0) * indent(prevlnum) + shiftwidth() * (open - close \ + (b:MATLAB_bracketlevel ? -!curbracketlevel : !!curbracketlevel) \ + (curbracketlevel <= 0) * (above_lc - b:MATLAB_waslc)) endif diff --git a/runtime/indent/meson.vim b/runtime/indent/meson.vim new file mode 100644 index 0000000000..f116781f74 --- /dev/null +++ b/runtime/indent/meson.vim @@ -0,0 +1,180 @@ +" Vim indent file +" Language: Meson +" License: VIM License +" Maintainer: Nirbheek Chauhan <nirbheek.chauhan@gmail.com> +" Original Authors: David Bustos <bustos@caltech.edu> +" Bram Moolenaar <Bram@vim.org> +" Last Change: 2019 Oct 18 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +" Some preliminary settings +setlocal nolisp " Make sure lisp indenting doesn't supersede us +setlocal autoindent " indentexpr isn't much help otherwise + +setlocal indentexpr=GetMesonIndent(v:lnum) +setlocal indentkeys+==elif,=else,=endforeach,=endif,0) + +" Only define the function once. +if exists("*GetMesonIndent") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Come here when loading the script the first time. + +let s:maxoff = 50 " maximum number of lines to look backwards for () + +function GetMesonIndent(lnum) + echom getline(line(".")) + + " If this line is explicitly joined: If the previous line was also joined, + " line it up with that one, otherwise add two 'shiftwidth' + if getline(a:lnum - 1) =~ '\\$' + if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$' + return indent(a:lnum - 1) + endif + return indent(a:lnum - 1) + (exists("g:mesonindent_continue") ? eval(g:mesonindent_continue) : (shiftwidth() * 2)) + endif + + " If the start of the line is in a string don't change the indent. + if has('syntax_items') + \ && synIDattr(synID(a:lnum, 1, 1), "name") =~ "String$" + return -1 + endif + + " Search backwards for the previous non-empty line. + let plnum = prevnonblank(v:lnum - 1) + + if plnum == 0 + " This is the first non-empty line, use zero indent. + return 0 + endif + + " If the previous line is inside parenthesis, use the indent of the starting + " line. + " Trick: use the non-existing "dummy" variable to break out of the loop when + " going too far back. + call cursor(plnum, 1) + let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW', + \ "line('.') < " . (plnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'") + if parlnum > 0 + let plindent = indent(parlnum) + let plnumstart = parlnum + else + let plindent = indent(plnum) + let plnumstart = plnum + endif + + + " When inside parenthesis: If at the first line below the parenthesis add + " a 'shiftwidth', otherwise same as previous line. + " i = (a + " + b + " + c) + call cursor(a:lnum, 1) + let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', + \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'") + if p > 0 + if p == plnum + " When the start is inside parenthesis, only indent one 'shiftwidth'. + let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW', + \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :" + \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')" + \ . " =~ '\\(Comment\\|Todo\\|String\\)$'") + if pp > 0 + return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth()) + endif + return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : shiftwidth()) + endif + if plnumstart == p + return indent(plnum) + endif + return plindent + endif + + + " Get the line and remove a trailing comment. + " Use syntax highlighting attributes when possible. + let pline = getline(plnum) + let pline_len = strlen(pline) + if has('syntax_items') + " If the last character in the line is a comment, do a binary search for + " the start of the comment. synID() is slow, a linear search would take + " too long on a long line. + if synIDattr(synID(plnum, pline_len, 1), "name") =~ "\\(Comment\\|Todo\\)$" + let min = 1 + let max = pline_len + while min < max + let col = (min + max) / 2 + if synIDattr(synID(plnum, col, 1), "name") =~ "\\(Comment\\|Todo\\)$" + let max = col + else + let min = col + 1 + endif + endwhile + let pline = strpart(pline, 0, min - 1) + endif + else + let col = 0 + while col < pline_len + if pline[col] == '#' + let pline = strpart(pline, 0, col) + break + endif + let col = col + 1 + endwhile + endif + + " If the previous line ended the conditional/loop + if getline(plnum) =~ '^\s*\(endif\|endforeach\)\>\s*' + " Maintain indent + return -1 + endif + + " If the previous line ended with a builtin, indent this line + if pline =~ '^\s*\(foreach\|if\|else\|elif\)\>\s*' + return plindent + shiftwidth() + endif + + " If the current line begins with a header keyword, deindent + if getline(a:lnum) =~ '^\s*\(else\|elif\|endif\|endforeach\)' + + " Unless the previous line was a one-liner + if getline(plnumstart) =~ '^\s*\(foreach\|if\)\>\s*' + return plindent + endif + + " Or the user has already dedented + if indent(a:lnum) <= plindent - shiftwidth() + return -1 + endif + + return plindent - shiftwidth() + endif + + " When after a () construct we probably want to go back to the start line. + " a = (b + " + c) + " here + if parlnum > 0 + return plindent + endif + + return -1 + +endfunction + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:sw=2 diff --git a/runtime/indent/ocaml.vim b/runtime/indent/ocaml.vim index 8fe9de3d61..19c81f49c4 100644 --- a/runtime/indent/ocaml.vim +++ b/runtime/indent/ocaml.vim @@ -3,7 +3,7 @@ " Maintainers: Jean-Francois Yuen <jfyuen@happycoders.org> " Mike Leary <leary@nwlink.com> " Markus Mottl <markus.mottl@gmail.com> -" URL: http://www.ocaml.info/vim/indent/ocaml.vim +" URL: https://github.com/ocaml/vim-ocaml " Last Change: 2017 Jun 13 " 2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working " 2005 May 09 - Added an option to not indent OCaml-indents specially (MM) @@ -30,7 +30,8 @@ setlocal nosmartindent " Comment formatting if !exists("no_ocaml_comments") if (has("comments")) - setlocal comments=sr:(*,mb:*,ex:*) + setlocal comments=sr:(*\ ,mb:\ ,ex:*) + setlocal comments^=sr:(**,mb:\ \ ,ex:*) setlocal fo=cqort endif endif diff --git a/runtime/indent/perl.vim b/runtime/indent/perl.vim index 094d1d37ea..5fc8b7008a 100644 --- a/runtime/indent/perl.vim +++ b/runtime/indent/perl.vim @@ -1,9 +1,9 @@ " Vim indent file " Language: Perl 5 " Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2017-01-04 +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" Last Change: 2020 Apr 15 " Suggestions and improvements by : " Aaron J. Sherman (use syntax for hints) diff --git a/runtime/indent/php.vim b/runtime/indent/php.vim index 67a1327dc9..0e623689d5 100644 --- a/runtime/indent/php.vim +++ b/runtime/indent/php.vim @@ -3,7 +3,7 @@ " Author: John Wellesz <John.wellesz (AT) gmail (DOT) com> " URL: https://www.2072productions.com/vim/indent/php.vim " Home: https://github.com/2072/PHP-Indenting-for-VIm -" Last Change: 2019 Jully 21st +" Last Change: 2020 Mar 05 " Version: 1.70 " " diff --git a/runtime/indent/ps1.vim b/runtime/indent/ps1.vim new file mode 100644 index 0000000000..0f794db83b --- /dev/null +++ b/runtime/indent/ps1.vim @@ -0,0 +1,17 @@ +" Vim indent file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2017 Oct 19 + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +" smartindent is good enough for powershell +setlocal smartindent +" disable the indent removal for # marks +inoremap <buffer> # X# + +let b:undo_indent = "setl si<" diff --git a/runtime/indent/python.vim b/runtime/indent/python.vim index e53987a0de..f9236e63c7 100644 --- a/runtime/indent/python.vim +++ b/runtime/indent/python.vim @@ -28,6 +28,11 @@ set cpo&vim let s:maxoff = 50 " maximum number of lines to look backwards for () +" See if the specified line is already user-dedented from the expected value. +function s:Dedented(lnum, expected) + return indent(a:lnum) <= a:expected - shiftwidth() +endfunction + function GetPythonIndent(lnum) " If this line is explicitly joined: If the previous line was also joined, @@ -158,12 +163,12 @@ function GetPythonIndent(lnum) " If the previous line was a stop-execution statement... if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>' " See if the user has already dedented - if indent(a:lnum) > indent(plnum) - shiftwidth() - " If not, recommend one dedent - return indent(plnum) - shiftwidth() + if s:Dedented(a:lnum, indent(plnum)) + " If so, trust the user + return -1 endif - " Otherwise, trust the user - return -1 + " If not, recommend one dedent + return indent(plnum) - shiftwidth() endif " If the current line begins with a keyword that lines up with "try" @@ -191,7 +196,7 @@ function GetPythonIndent(lnum) endif " Or the user has already dedented - if indent(a:lnum) <= plindent - shiftwidth() + if s:Dedented(a:lnum, plindent) return -1 endif @@ -203,7 +208,12 @@ function GetPythonIndent(lnum) " + c) " here if parlnum > 0 - return plindent + " ...unless the user has already dedented + if s:Dedented(a:lnum, plindent) + return -1 + else + return plindent + endif endif return -1 diff --git a/runtime/indent/perl6.vim b/runtime/indent/raku.vim index 8561c8c58c..3f9b49ec77 100644 --- a/runtime/indent/perl6.vim +++ b/runtime/indent/raku.vim @@ -1,9 +1,9 @@ " Vim indent file " Language: Perl 6 " Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2017 Jun 13 +" Homepage: https://github.com/vim-perl/vim-perl +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" Last Change: 2020 Apr 15 " Contributors: Andy Lester <andy@petdance.com> " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> " @@ -36,7 +36,7 @@ let b:did_indent = 1 " Is syntax highlighting active ? let b:indent_use_syntax = has("syntax") -setlocal indentexpr=GetPerl6Indent() +setlocal indentexpr=GetRakuIndent() " we reset it first because the Perl 5 indent file might have been loaded due " to a .pl/pm file extension, and indent files don't clean up afterwards @@ -50,7 +50,7 @@ endif let s:cpo_save = &cpo set cpo-=C -function! GetPerl6Indent() +function! GetRakuIndent() " Get the line to be indented let cline = getline(v:lnum) @@ -60,11 +60,6 @@ function! GetPerl6Indent() return 0 endif - " Don't reindent coments on first column - if cline =~ '^#' - return 0 - endif - " Get current syntax item at the line's first char let csynid = '' if b:indent_use_syntax @@ -72,7 +67,7 @@ function! GetPerl6Indent() endif " Don't reindent POD and heredocs - if csynid =~ "^p6Pod" + if csynid =~ "^rakuPod" return indent(v:lnum) endif @@ -92,7 +87,7 @@ function! GetPerl6Indent() let skippin = 2 while skippin let synid = synIDattr(synID(lnum,1,0),"name") - if (synid =~ "^p6Pod" || synid =~ "p6Comment") + if (synid =~ "^rakuPod" || synid =~ "rakuComment") let lnum = prevnonblank(lnum - 1) if lnum == 0 return 0 @@ -107,19 +102,19 @@ function! GetPerl6Indent() endif if line =~ '[<«\[{(]\s*\(#[^)}\]»>]*\)\=$' - let ind = ind + shiftwidth() + let ind = ind + &sw endif if cline =~ '^\s*[)}\]»>]' - let ind = ind - shiftwidth() + let ind = ind - &sw endif " Indent lines that begin with 'or' or 'and' if cline =~ '^\s*\(or\|and\)\>' if line !~ '^\s*\(or\|and\)\>' - let ind = ind + shiftwidth() + let ind = ind + &sw endif elseif line =~ '^\s*\(or\|and\)\>' - let ind = ind - shiftwidth() + let ind = ind - &sw endif return ind diff --git a/runtime/indent/rmd.vim b/runtime/indent/rmd.vim index 83fe4e4fed..8fd57257fa 100644 --- a/runtime/indent/rmd.vim +++ b/runtime/indent/rmd.vim @@ -2,7 +2,7 @@ " Language: Rmd " Author: Jakson Alves de Aquino <jalvesaq@gmail.com> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Sun Aug 19, 2018 09:14PM +" Last Change: Sun Mar 28, 2021 08:05PM " Only load this indent file when no other was loaded. @@ -13,7 +13,7 @@ runtime indent/r.vim let s:RIndent = function(substitute(&indentexpr, "()", "", "")) let b:did_indent = 1 -setlocal indentkeys=0{,0},:,!^F,o,O,e +setlocal indentkeys=0{,0},<:>,!^F,o,O,e setlocal indentexpr=GetRmdIndent() if exists("*GetRmdIndent") @@ -23,6 +23,21 @@ endif let s:cpo_save = &cpo set cpo&vim +" Simple Python indentation algorithm +function s:GetPyIndent() + let plnum = prevnonblank(v:lnum - 1) + let pline = getline(plnum) + let cline = getline(v:lnum) + if pline =~ '^s```\s*{\s*python ' + return 0 + elseif pline =~ ':$' + return indent(plnum) + &shiftwidth + elseif cline =~ 'else:$' + return indent(plnum) - &shiftwidth + endif + return indent(plnum) +endfunction + function s:GetMdIndent() let pline = getline(v:lnum - 1) let cline = getline(v:lnum) @@ -37,13 +52,14 @@ function s:GetMdIndent() endfunction function s:GetYamlIndent() - let pline = getline(v:lnum - 1) + let plnum = prevnonblank(v:lnum - 1) + let pline = getline(plnum) if pline =~ ':\s*$' - return indent(v:lnum) + shiftwidth() + return indent(plnum) + shiftwidth() elseif pline =~ '^\s*- ' return indent(v:lnum) + 2 endif - return indent(prevnonblank(v:lnum - 1)) + return indent(plnum) endfunction function GetRmdIndent() @@ -52,9 +68,11 @@ function GetRmdIndent() endif if search('^[ \t]*```{r', "bncW") > search('^[ \t]*```$', "bncW") return s:RIndent() - elseif v:lnum > 1 && search('^---$', "bnW") == 1 && - \ (search('^---$', "nW") > v:lnum || search('^...$', "nW") > v:lnum) + elseif v:lnum > 1 && (search('^---$', "bnW") == 1 && + \ (search('^---$', "nW") > v:lnum || search('^\.\.\.$', "nW") > v:lnum)) return s:GetYamlIndent() + elseif search('^[ \t]*```{python', "bncW") > search('^[ \t]*```$', "bncW") + return s:GetPyIndent() else return s:GetMdIndent() endif diff --git a/runtime/indent/rpl.vim b/runtime/indent/rpl.vim index fab258ed2b..8577c4d274 100644 --- a/runtime/indent/rpl.vim +++ b/runtime/indent/rpl.vim @@ -2,7 +2,7 @@ " Language: RPL/2 " Version: 0.2 " Last Change: 2017 Jun 13 -" Maintainer: BERTRAND Joël <rpl2@free.fr> +" Maintainer: BERTRAND Joël <rpl2@free.fr> " Only load this indent file when no other was loaded. if exists("b:did_indent") diff --git a/runtime/indent/rst.vim b/runtime/indent/rst.vim index c1ef8c9957..a31ad8e080 100644 --- a/runtime/indent/rst.vim +++ b/runtime/indent/rst.vim @@ -1,7 +1,9 @@ " Vim indent file -" Language: reStructuredText Documentation Format -" Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2011-08-03 +" Vim reST indent file +" Language: reStructuredText Documentation Format +" Maintainer: Marshall Ward <marshall.ward@gmail.com> +" Previous Maintainer: Nikolai Weibull <now@bitwi.se> +" Latest Revision: 2020-03-31 if exists("b:did_indent") finish @@ -18,6 +20,12 @@ endif let s:itemization_pattern = '^\s*[-*+]\s' let s:enumeration_pattern = '^\s*\%(\d\+\|#\)\.\s\+' +let s:note_pattern = '^\.\. ' + +function! s:get_paragraph_start() + let paragraph_mark_start = getpos("'{")[1] + return getline(paragraph_mark_start) =~ '\S' ? paragraph_mark_start : paragraph_mark_start + 1 +endfunction function GetRSTIndent() let lnum = prevnonblank(v:lnum - 1) @@ -28,6 +36,13 @@ function GetRSTIndent() let ind = indent(lnum) let line = getline(lnum) + let psnum = s:get_paragraph_start() + if psnum != 0 + if getline(psnum) =~ s:note_pattern + let ind = 3 + endif + endif + if line =~ s:itemization_pattern let ind += 2 elseif line =~ s:enumeration_pattern diff --git a/runtime/indent/ruby.vim b/runtime/indent/ruby.vim index 5c420d7543..657aa763b1 100644 --- a/runtime/indent/ruby.vim +++ b/runtime/indent/ruby.vim @@ -4,7 +4,6 @@ " Previous Maintainer: Nikolai Weibull <now at bitwi.se> " URL: https://github.com/vim-ruby/vim-ruby " Release Coordinator: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2019 Jan 06 " 0. Initialization {{{1 " ================= @@ -27,7 +26,12 @@ endif if !exists('g:ruby_indent_block_style') " Possible values: "expression", "do" - let g:ruby_indent_block_style = 'expression' + let g:ruby_indent_block_style = 'do' +endif + +if !exists('g:ruby_indent_hanging_elements') + " Non-zero means hanging indents are enabled, zero means disabled + let g:ruby_indent_hanging_elements = 1 endif setlocal nosmartindent @@ -51,15 +55,27 @@ set cpo&vim " Syntax group names that are strings. let s:syng_string = - \ ['String', 'Interpolation', 'InterpolationDelimiter', 'NoInterpolation', 'StringEscape'] + \ ['String', 'Interpolation', 'InterpolationDelimiter', 'StringEscape'] " Syntax group names that are strings or documentation. let s:syng_stringdoc = s:syng_string + ['Documentation'] " Syntax group names that are or delimit strings/symbols/regexes or are comments. -let s:syng_strcom = s:syng_stringdoc + - \ ['Regexp', 'RegexpDelimiter', 'RegexpEscape', - \ 'Symbol', 'StringDelimiter', 'ASCIICode', 'Comment'] +let s:syng_strcom = s:syng_stringdoc + [ + \ 'Character', + \ 'Comment', + \ 'HeredocDelimiter', + \ 'PercentRegexpDelimiter', + \ 'PercentStringDelimiter', + \ 'PercentSymbolDelimiter', + \ 'Regexp', + \ 'RegexpCharClass', + \ 'RegexpDelimiter', + \ 'RegexpEscape', + \ 'StringDelimiter', + \ 'Symbol', + \ 'SymbolDelimiter', + \ ] " Expression used to check whether we should skip a match with searchpair(). let s:skip_expr = @@ -69,7 +85,7 @@ let s:skip_expr = let s:ruby_indent_keywords = \ '^\s*\zs\<\%(module\|class\|if\|for' . \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue' . - \ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' . + \ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' . \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' . \ '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>' @@ -83,7 +99,7 @@ let s:ruby_deindent_keywords = let s:end_start_regex = \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' . \ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' . - \ '\|\%(\K\k*[!?]\?\)\=\s*def\):\@!\>' . + \ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' . \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>' " Regex that defines the middle-match for the 'end' keyword. @@ -146,7 +162,7 @@ let s:block_regex = let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex " Regex that describes a leading operator (only a method call's dot for now) -let s:leading_operator_regex = '^\s*[.]' +let s:leading_operator_regex = '^\s*\%(&\=\.\)' " 2. GetRubyIndent Function {{{1 " ========================= @@ -310,7 +326,11 @@ function! s:ClosingBracketOnEmptyLine(cline_info) abort if searchpair(escape(bracket_pair[0], '\['), '', bracket_pair[1], 'bW', s:skip_expr) > 0 if closing_bracket == ')' && col('.') != col('$') - 1 - let ind = virtcol('.') - 1 + if g:ruby_indent_hanging_elements + let ind = virtcol('.') - 1 + else + let ind = indent(line('.')) + end elseif g:ruby_indent_block_style == 'do' let ind = indent(line('.')) else " g:ruby_indent_block_style == 'expression' @@ -535,7 +555,9 @@ function! s:AfterUnbalancedBracket(pline_info) abort let [opening, closing] = s:ExtraBrackets(info.plnum) if opening.pos != -1 - if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 + if !g:ruby_indent_hanging_elements + return indent(info.plnum) + info.sw + elseif opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0 if col('.') + 1 == col('$') return indent(info.plnum) + info.sw else @@ -620,8 +642,7 @@ function! s:PreviousNotMSL(msl_info) abort " TODO (2016-10-07) Wrong/unused? How could it be "1"? return indent(info.plnum) - 1 " If previous line is a continuation return its indent. - " TODO: the || s:IsInString() thing worries me a bit. - elseif s:Match(info.plnum, s:non_bracket_continuation_regex) || s:IsInString(info.plnum, strlen(line)) + elseif s:Match(info.plnum, s:non_bracket_continuation_regex) return indent(info.plnum) endif endif @@ -695,7 +716,10 @@ endfunction " Check if the character at lnum:col is inside a string delimiter function! s:IsInStringDelimiter(lnum, col) abort - return s:IsInRubyGroup(['StringDelimiter'], a:lnum, a:col) + return s:IsInRubyGroup( + \ ['HeredocDelimiter', 'PercentStringDelimiter', 'StringDelimiter'], + \ a:lnum, a:col + \ ) endfunction function! s:IsAssignment(str, pos) abort diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim index 3df6abbf97..d2fb1ba452 100644 --- a/runtime/indent/sh.vim +++ b/runtime/indent/sh.vim @@ -3,7 +3,7 @@ " Maintainer: Christian Brabandt <cb@256bit.org> " Original Author: Nikolai Weibull <now@bitwi.se> " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org> -" Latest Revision: 2019-07-26 +" Latest Revision: 2019-10-24 " License: Vim (see :h license) " Repository: https://github.com/chrisbra/vim-sh-indent " Changelog: @@ -134,7 +134,7 @@ function! GetShIndent() " TODO: should we do the same for other "end" lines? if curline =~ '^\s*\%(fi\);\?\s*\%(#.*\)\=$' let ind = indent(v:lnum) - let previous_line = searchpair('\<if\>', '', '\<fi\>\zs', 'bnW', 'synIDattr(synID(line("."),col("."), 1),"name") =~? "comment"') + let previous_line = searchpair('\<if\>', '', '\<fi\>\zs', 'bnW', 'synIDattr(synID(line("."),col("."), 1),"name") =~? "comment\\|quote"') if previous_line > 0 let ind = indent(previous_line) endif @@ -195,7 +195,7 @@ endfunction function! s:is_function_definition(line) return a:line =~ '^\s*\<\k\+\>\s*()\s*{' || \ a:line =~ '^\s*{' || - \ a:line =~ '^\s*function\s*\w\S\+\s*\%(()\)\?\s*{' + \ a:line =~ '^\s*function\s*\k\+\s*\%(()\)\?\s*{' endfunction function! s:is_array(line) diff --git a/runtime/indent/sqlanywhere.vim b/runtime/indent/sqlanywhere.vim index ba35d76715..601c567adc 100644 --- a/runtime/indent/sqlanywhere.vim +++ b/runtime/indent/sqlanywhere.vim @@ -1,7 +1,8 @@ " Vim indent file " Language: SQL " Maintainer: David Fishburn <dfishburn dot vim at gmail dot com> -" Last Change: 2017 Jun 13 +" Last Change By Maintainer: 2017 Jun 13 +" Last Change: by Stephen Wall, #5578, 2020 Jun 07 " Version: 3.0 " Download: http://vim.sourceforge.net/script.php?script_id=495 @@ -67,68 +68,73 @@ set cpo&vim " IS is excluded, since it is difficult to determine when the " ending block is (especially for procedures/functions). let s:SQLBlockStart = '^\s*\%('. - \ 'if\|else\|elseif\|elsif\|'. - \ 'while\|loop\|do\|for\|'. - \ 'begin\|'. + \ 'if\>.*\<then\|'. + \ 'then\|else\>\|'. + \ 'elseif\>.*\<then\|'. + \ 'elsif\>.(\<then\|'. + \ 'while\>.*\<loop\|'. + \ 'for\>.*\<loop\|'. + \ 'foreach\>.*\<loop\|'. + \ 'loop\|do\|declare\|begin\|'. \ 'case\|when\|merge\|exception'. \ '\)\>' let s:SQLBlockEnd = '^\s*\(end\)\>' -" The indent level is also based on unmatched paranethesis +" The indent level is also based on unmatched parentheses " If a line has an extra "(" increase the indent " If a line has an extra ")" decrease the indent -function! s:CountUnbalancedParan( line, paran_to_check ) +function! s:CountUnbalancedParen( line, paren_to_check ) let l = a:line let lp = substitute(l, '[^(]', '', 'g') let l = a:line let rp = substitute(l, '[^)]', '', 'g') - if a:paran_to_check =~ ')' - " echom 'CountUnbalancedParan ) returning: ' . + if a:paren_to_check =~ ')' + " echom 'CountUnbalancedParen ) returning: ' . " \ (strlen(rp) - strlen(lp)) return (strlen(rp) - strlen(lp)) - elseif a:paran_to_check =~ '(' - " echom 'CountUnbalancedParan ( returning: ' . + elseif a:paren_to_check =~ '(' + " echom 'CountUnbalancedParen ( returning: ' . " \ (strlen(lp) - strlen(rp)) return (strlen(lp) - strlen(rp)) else - " echom 'CountUnbalancedParan unknown paran to check: ' . - " \ a:paran_to_check + " echom 'CountUnbalancedParen unknown paren to check: ' . + " \ a:paren_to_check return 0 endif endfunction " Unindent commands based on previous indent level -function! s:CheckToIgnoreRightParan( prev_lnum, num_levels ) +function! s:CheckToIgnoreRightParen( prev_lnum, num_levels ) let lnum = a:prev_lnum let line = getline(lnum) let ends = 0 - let num_right_paran = a:num_levels - let ignore_paran = 0 + let num_right_paren = a:num_levels + let ignore_paren = 0 let vircol = 1 - while num_right_paran > 0 + while num_right_paren > 0 silent! exec 'norm! '.lnum."G\<bar>".vircol."\<bar>" - let right_paran = search( ')', 'W' ) - if right_paran != lnum + let right_paren = search( ')', 'W' ) + if right_paren != lnum " This should not happen since there should be at least - " num_right_paran matches for this line + " num_right_paren matches for this line break endif let vircol = virtcol(".") " if getline(".") =~ '^)' - let matching_paran = searchpair('(', '', ')', 'bW', + let matching_paren = searchpair('(', '', ')', 'bW', \ 's:IsColComment(line("."), col("."))') - if matching_paran < 1 + if matching_paren < 1 " No match found " echom 'CTIRP - no match found, ignoring' break endif - if matching_paran == lnum - " This was not an unmatched parantenses, start the search again + if matching_paren == lnum + " This was not an unmatched parentheses, start the search again " again after this column " echom 'CTIRP - same line match, ignoring' continue @@ -136,23 +142,23 @@ function! s:CheckToIgnoreRightParan( prev_lnum, num_levels ) " echom 'CTIRP - match: ' . line(".") . ' ' . getline(".") - if getline(matching_paran) =~? '\(if\|while\)\>' + if getline(matching_paren) =~? '\(if\|while\)\>' " echom 'CTIRP - if/while ignored: ' . line(".") . ' ' . getline(".") - let ignore_paran = ignore_paran + 1 + let ignore_paren = ignore_paren + 1 endif " One match found, decrease and check for further matches - let num_right_paran = num_right_paran - 1 + let num_right_paren = num_right_paren - 1 endwhile " Fallback - just move back one " return a:prev_indent - shiftwidth() - return ignore_paran + return ignore_paren endfunction " Based on the keyword provided, loop through previous non empty -" non comment lines to find the statement that initated the keyword. +" non comment lines to find the statement that initiated the keyword. " Return its indent level " CASE .. " WHEN ... @@ -295,26 +301,26 @@ function! GetSQLIndent() " echom 'prevl - SQLBlockStart - indent ' . ind . ' line: ' . prevline elseif prevline =~ '[()]' if prevline =~ '(' - let num_unmatched_left = s:CountUnbalancedParan( prevline, '(' ) + let num_unmatched_left = s:CountUnbalancedParen( prevline, '(' ) else let num_unmatched_left = 0 endif if prevline =~ ')' - let num_unmatched_right = s:CountUnbalancedParan( prevline, ')' ) + let num_unmatched_right = s:CountUnbalancedParen( prevline, ')' ) else let num_unmatched_right = 0 - " let num_unmatched_right = s:CountUnbalancedParan( prevline, ')' ) + " let num_unmatched_right = s:CountUnbalancedParen( prevline, ')' ) endif if num_unmatched_left > 0 - " There is a open left paranethesis + " There is a open left parenthesis " increase indent let ind = ind + ( shiftwidth() * num_unmatched_left ) elseif num_unmatched_right > 0 - " if it is an unbalanced paranethesis only unindent if + " if it is an unbalanced parenthesis only unindent if " it was part of a command (ie create table(..) ) " instead of part of an if (ie if (....) then) which should " maintain the indent level - let ignore = s:CheckToIgnoreRightParan( prevlnum, num_unmatched_right ) + let ignore = s:CheckToIgnoreRightParen( prevlnum, num_unmatched_right ) " echom 'prevl - ) unbalanced - CTIRP - ignore: ' . ignore if prevline =~ '^\s*)' @@ -357,8 +363,8 @@ function! GetSQLIndent() " elseif line =~ '^\s*)\s*;\?\s*$' " elseif line =~ '^\s*)' elseif line =~ '^\s*)' - let num_unmatched_right = s:CountUnbalancedParan( line, ')' ) - let ignore = s:CheckToIgnoreRightParan( v:lnum, num_unmatched_right ) + let num_unmatched_right = s:CountUnbalancedParen( line, ')' ) + let ignore = s:CheckToIgnoreRightParen( v:lnum, num_unmatched_right ) " If the line ends in a ), then reduce the indent " This catches items like: " CREATE TABLE T1( @@ -368,7 +374,7 @@ function! GetSQLIndent() " But we do not want to unindent a line like: " IF ( c1 = 1 " AND c2 = 3 ) THEN - " let num_unmatched_right = s:CountUnbalancedParan( line, ')' ) + " let num_unmatched_right = s:CountUnbalancedParen( line, ')' ) " if num_unmatched_right > 0 " elseif strpart( line, strlen(line)-1, 1 ) =~ ')' " let ind = ind - shiftwidth() diff --git a/runtime/indent/sshconfig.vim b/runtime/indent/sshconfig.vim new file mode 100644 index 0000000000..b456a9e3aa --- /dev/null +++ b/runtime/indent/sshconfig.vim @@ -0,0 +1,34 @@ +" Vim indent file +" Language: ssh config file +" Maintainer: JasonKim <git@jasonk.me> +" Last Change: 2020 May 16 + +if exists("b:did_indent") + finish +endif +let b:did_indent = 1 + +setlocal autoindent +setlocal indentexpr=GetSshconfigIndent(v:lnum) +setlocal indentkeys=o,O,*<Return>,0=~host\ ,0=~match\ ,0#,!^F + +let b:undo_indent = "setlocal autoindent< indentexpr< indentkeys<" + +if exists("*GetSshconfigIndent") + finish +endif + +function GetSshconfigIndent(lnum) + let sw = shiftwidth() + let prev_lnum = prevnonblank(a:lnum - 1) + let curr_lnum = a:lnum + let prev_line = getline(prev_lnum) + let curr_line = getline(curr_lnum) + if curr_line =~? '^\s*\(host\|match\)\s' + return 0 + elseif prev_line =~? '^\s*\(host\|match\)\s' + return sw + else + return indent(prev_lnum) + endif +endfunction diff --git a/runtime/indent/systemverilog.vim b/runtime/indent/systemverilog.vim index 91fba4c3b6..590fd4d998 100644 --- a/runtime/indent/systemverilog.vim +++ b/runtime/indent/systemverilog.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: SystemVerilog " Maintainer: kocha <kocha.lsifrontend@gmail.com> -" Last Change: 12-Aug-2013. +" Last Change: 05-Feb-2017 by Bilal Wasim " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -74,7 +74,7 @@ function SystemVerilogIndent() " Indent after if/else/for/case/always/initial/specify/fork blocks elseif last_line =~ '`\@<!\<\(if\|else\)\>' || - \ last_line =~ '^\s*\<\(for\|case\%[[zx]]\|do\|foreach\|randcase\)\>' || + \ last_line =~ '^\s*\<\(for\|case\%[[zx]]\|do\|foreach\|forever\|randcase\)\>' || \ last_line =~ '^\s*\<\(always\|always_comb\|always_ff\|always_latch\)\>' || \ last_line =~ '^\s*\<\(initial\|specify\|fork\|final\)\>' if last_line !~ '\(;\|\<end\>\)\s*' . sv_comment . '*$' || @@ -129,9 +129,9 @@ function SystemVerilogIndent() " De-indent for the end of one-line block elseif ( last_line !~ '\<begin\>' || \ last_line =~ '\(//\|/\*\).*\<begin\>' ) && - \ last_line2 =~ '\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>.*' . + \ last_line2 =~ '\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|forever\|final\)\>.*' . \ sv_comment . '*$' && - \ last_line2 !~ '\(//\|/\*\).*\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|final\)\>' && + \ last_line2 !~ '\(//\|/\*\).*\<\(`\@<!if\|`\@<!else\|for\|always\|initial\|do\|foreach\|forever\|final\)\>' && \ last_line2 !~ sv_openstat . '\s*' . sv_comment . '*$' && \ ( last_line2 !~ '\<begin\>' || \ last_line2 =~ '\(//\|/\*\).*\<begin\>' ) @@ -194,7 +194,7 @@ function SystemVerilogIndent() \ last_line !~ '^\s*\<\(property\|checker\|program\)\>' && \ last_line !~ '^\s*\()*\s*;\|)\+\)\s*' . sv_comment . '*$' && \ ( last_line =~ - \ '\<\(`\@<!if\|`\@<!else\|for\|case\%[[zx]]\|always\|initial\|do\|foreach\|randcase\|final\)\>' || + \ '\<\(`\@<!if\|`\@<!else\|for\|case\%[[zx]]\|always\|initial\|do\|foreach\|forever\|randcase\|final\)\>' || \ last_line =~ ')\s*' . sv_comment . '*$' || \ last_line =~ sv_openstat . '\s*' . sv_comment . '*$' ) let ind = ind - offset diff --git a/runtime/indent/testdir/html.in b/runtime/indent/testdir/html.in index 9c776d61c6..1acf8c0402 100644 --- a/runtime/indent/testdir/html.in +++ b/runtime/indent/testdir/html.in @@ -2,6 +2,16 @@ " START_INDENT +<html> + <body> +<style> +div#d1 { color: red; } +div#d2 { color: green; } +</style> + <script> + var v1 = "v1"; +var v2 = "v2"; + </script> <div> <div> text @@ -23,4 +33,34 @@ bar"> text </div> +<dl> +<dd> +dd text +</dd> +<dt> +dt text +</dt> +</dl> + + </body> +</html> + " END_INDENT + +% START_INDENT +% INDENT_EXE let g:html_indent_style1 = "inc" +% INDENT_EXE let g:html_indent_script1 = "zero" +% INDENT_EXE call HtmlIndent_CheckUserSettings() +<html> + <body> +<style> +div#d1 { color: red; } +div#d2 { color: green; } +</style> + <script> + var v1 = "v1"; +var v2 = "v2"; + </script> +</body> +</html> +% END_INDENT diff --git a/runtime/indent/testdir/html.ok b/runtime/indent/testdir/html.ok index ad819333cc..c0dfc9dc72 100644 --- a/runtime/indent/testdir/html.ok +++ b/runtime/indent/testdir/html.ok @@ -2,25 +2,65 @@ " START_INDENT -<div> - <div> - text - </div> -</div> - -<div - class="foo bar"> - text -</div> - -<div class="foo bar" - data="something"> - text -</div> - -<div class="foo - bar"> - text -</div> +<html> + <body> + <style> +div#d1 { color: red; } +div#d2 { color: green; } + </style> + <script> + var v1 = "v1"; + var v2 = "v2"; + </script> + <div> + <div> + text + </div> + </div> + + <div + class="foo bar"> + text + </div> + + <div class="foo bar" + data="something"> + text + </div> + + <div class="foo + bar"> + text + </div> + + <dl> + <dd> + dd text + </dd> + <dt> + dt text + </dt> + </dl> + + </body> +</html> " END_INDENT + +% START_INDENT +% INDENT_EXE let g:html_indent_style1 = "inc" +% INDENT_EXE let g:html_indent_script1 = "zero" +% INDENT_EXE call HtmlIndent_CheckUserSettings() +<html> + <body> + <style> + div#d1 { color: red; } + div#d2 { color: green; } + </style> + <script> +var v1 = "v1"; +var v2 = "v2"; + </script> + </body> +</html> +% END_INDENT diff --git a/runtime/indent/testdir/matlab.in b/runtime/indent/testdir/matlab.in index 5bba1a56dd..b997ec8d57 100644 --- a/runtime/indent/testdir/matlab.in +++ b/runtime/indent/testdir/matlab.in @@ -37,6 +37,7 @@ end % START_INDENT if true A(1:end - 1) +C{1:end - 1} disp foo end % END_INDENT @@ -50,6 +51,14 @@ disp bar % END_INDENT % START_INDENT +if true +% end +%% end +disp foo +end +% END_INDENT + +% START_INDENT % INDENT_EXE let b:MATLAB_function_indent = 0 function foo disp foo diff --git a/runtime/indent/testdir/matlab.ok b/runtime/indent/testdir/matlab.ok index b1112263b2..df4e7b2e33 100644 --- a/runtime/indent/testdir/matlab.ok +++ b/runtime/indent/testdir/matlab.ok @@ -37,6 +37,7 @@ end % START_INDENT if true A(1:end - 1) + C{1:end - 1} disp foo end % END_INDENT @@ -50,6 +51,14 @@ disp bar % END_INDENT % START_INDENT +if true + % end + %% end + disp foo +end +% END_INDENT + +% START_INDENT % INDENT_EXE let b:MATLAB_function_indent = 0 function foo disp foo diff --git a/runtime/indent/testdir/runtest.vim b/runtime/indent/testdir/runtest.vim index 945c2753e9..6bbd33cacd 100644 --- a/runtime/indent/testdir/runtest.vim +++ b/runtime/indent/testdir/runtest.vim @@ -117,6 +117,7 @@ for fname in glob('testdir/*.in', 1, 1) echoerr 'Test ' . fname . ' FAILED!' else exe 'write ' . root . '.out' + echo "Test " . fname . " OK\n" endif quit! " close the indented file diff --git a/runtime/indent/testdir/sshconfig.in b/runtime/indent/testdir/sshconfig.in new file mode 100644 index 0000000000..87b998e465 --- /dev/null +++ b/runtime/indent/testdir/sshconfig.in @@ -0,0 +1,53 @@ +# vim: set filetype=sshconfig shiftwidth=4 expandtab : + +# START_INDENT +Host myhost +User myuser +PasswordAuthentication no +# END_INDENT + +# START_INDENT +Host aaa +User bbb +Host ccc +Host ddd +# END_INDENT + +# START_INDENT +host aaa +HOST bbb +hoSt ccc +match ddd +MATCH eee +MatCH fff +# END_INDENT + +# START_INDENT +Host aaa +User host +PasswordAuthentication no +Host * +User user +PasswordAuthentication no +Host match +User bbb +# END_INDENT + +# START_INDENT +Host tab +User myuser +# END_INDENT + +# START_INDENT +Host mix +User myuser +# END_INDENT + +# START_INDENT +Host aaa +User bbb +Match ccc +User ddd +HostKeyAlgorithms ssh-ed25519 +Match eee +# END_INDENT diff --git a/runtime/indent/testdir/sshconfig.ok b/runtime/indent/testdir/sshconfig.ok new file mode 100644 index 0000000000..b24b7cf4e1 --- /dev/null +++ b/runtime/indent/testdir/sshconfig.ok @@ -0,0 +1,53 @@ +# vim: set filetype=sshconfig shiftwidth=4 expandtab : + +# START_INDENT +Host myhost + User myuser + PasswordAuthentication no +# END_INDENT + +# START_INDENT +Host aaa + User bbb +Host ccc +Host ddd +# END_INDENT + +# START_INDENT +host aaa +HOST bbb +hoSt ccc +match ddd +MATCH eee +MatCH fff +# END_INDENT + +# START_INDENT +Host aaa + User host + PasswordAuthentication no +Host * + User user + PasswordAuthentication no +Host match + User bbb +# END_INDENT + +# START_INDENT +Host tab + User myuser +# END_INDENT + +# START_INDENT +Host mix + User myuser +# END_INDENT + +# START_INDENT +Host aaa + User bbb +Match ccc + User ddd + HostKeyAlgorithms ssh-ed25519 +Match eee +# END_INDENT diff --git a/runtime/indent/testdir/vim.in b/runtime/indent/testdir/vim.in index ca105f6eda..699e4c243d 100644 --- a/runtime/indent/testdir/vim.in +++ b/runtime/indent/testdir/vim.in @@ -10,6 +10,26 @@ let cmd = \ 'some ' \ 'string' +if 1 +let x = [ +\ ] +endif + +" TODO: add searchpair() to find matching { +"for x in [ +"{ +"key: 'value' +"}, +"] +"eval 0 +"endfor + +for x in [ +{key: 'value'}, +] +eval 0 +endfor + " END_INDENT " START_INDENT @@ -22,7 +42,26 @@ let cmd = " END_INDENT " START_INDENT +" INDENT_EXE let g:vim_indent_cont = 5 + +let list = [ +\ 'one', +\ 'two'] + +" END_INDENT + +" START_INDENT " INDENT_EXE unlet g:vim_indent_cont + +let list = [ +'one', +'two', +] +echo + +" END_INDENT + +" START_INDENT " INDENT_AT this-line func Some() let f = x " this-line @@ -44,3 +83,18 @@ let f = x " prev-line endfunc " END_INDENT + +" START_INDENT +let a =<< END +nothing +END +" END_INDENT + +" START_INDENT +" INDENT_AT this-line +let a=<< trim END + blah + blah + blah this-line +END +" END_INDENT diff --git a/runtime/indent/testdir/vim.ok b/runtime/indent/testdir/vim.ok index 542861ec9c..f597d97e80 100644 --- a/runtime/indent/testdir/vim.ok +++ b/runtime/indent/testdir/vim.ok @@ -10,6 +10,26 @@ let cmd = \ 'some ' \ 'string' +if 1 + let x = [ + \ ] +endif + +" TODO: add searchpair() to find matching { +"for x in [ +"{ +"key: 'value' +"}, +"] +"eval 0 +"endfor + +for x in [ + {key: 'value'}, + ] + eval 0 +endfor + " END_INDENT " START_INDENT @@ -22,7 +42,26 @@ let cmd = " END_INDENT " START_INDENT +" INDENT_EXE let g:vim_indent_cont = 5 + +let list = [ + \ 'one', + \ 'two'] + +" END_INDENT + +" START_INDENT " INDENT_EXE unlet g:vim_indent_cont + +let list = [ + 'one', + 'two', + ] +echo + +" END_INDENT + +" START_INDENT " INDENT_AT this-line func Some() let f = x " this-line @@ -44,3 +83,18 @@ func Some() " prev-line endfunc " END_INDENT + +" START_INDENT +let a =<< END + nothing +END +" END_INDENT + +" START_INDENT +" INDENT_AT this-line +let a=<< trim END + blah + blah + blah this-line +END +" END_INDENT diff --git a/runtime/indent/testdir/yaml.in b/runtime/indent/testdir/yaml.in new file mode 100644 index 0000000000..8515e1752c --- /dev/null +++ b/runtime/indent/testdir/yaml.in @@ -0,0 +1,19 @@ +# vim: set ft=yaml sw=2 et : + +# START_INDENT +map1: +sub1: +- list item +map2: +- another list +# END_INDENT + +# START_INDENT +map: &anchor +map: val +# END_INDENT + +# START_INDENT +map: multiline +value +# END_INDENT diff --git a/runtime/indent/testdir/yaml.ok b/runtime/indent/testdir/yaml.ok new file mode 100644 index 0000000000..5ca2871fc9 --- /dev/null +++ b/runtime/indent/testdir/yaml.ok @@ -0,0 +1,19 @@ +# vim: set ft=yaml sw=2 et : + +# START_INDENT +map1: + sub1: + - list item +map2: + - another list +# END_INDENT + +# START_INDENT +map: &anchor +map: val +# END_INDENT + +# START_INDENT +map: multiline + value +# END_INDENT diff --git a/runtime/indent/tilde.vim b/runtime/indent/tilde.vim index 13082c8692..e722a0994c 100644 --- a/runtime/indent/tilde.vim +++ b/runtime/indent/tilde.vim @@ -1,5 +1,5 @@ "Description: Indent scheme for the tilde weblanguage -"Author: Tobias Rundström <tobi@tobi.nu> +"Author: Tobias Rundström <tobi@tobi.nu> "URL: http://tilde.tildesoftware.net "Last Change: May 8 09:15:09 CEST 2002 diff --git a/runtime/indent/vim.vim b/runtime/indent/vim.vim index cd735c3a3c..ee3d39490d 100644 --- a/runtime/indent/vim.vim +++ b/runtime/indent/vim.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Vim script " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2016 Jun 27 +" Last Change: 2021 Apr 18 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -10,7 +10,8 @@ endif let b:did_indent = 1 setlocal indentexpr=GetVimIndent() -setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\,0=\"\\\ +setlocal indentkeys+==end,=},=else,=cat,=finall,=END,0\\,0=\"\\\ +setlocal indentkeys-=0# let b:undo_indent = "setl indentkeys< indentexpr<" @@ -37,6 +38,9 @@ function GetVimIndentIntern() " Find a non-blank line above the current line. let lnum = prevnonblank(v:lnum - 1) + " The previous line, ignoring line continuation + let prev_text_end = lnum > 0 ? getline(lnum) : '' + " If the current line doesn't start with '\' or '"\ ' and below a line that " starts with '\' or '"\ ', use the indent of the line above it. let cur_text = getline(v:lnum) @@ -50,13 +54,43 @@ function GetVimIndentIntern() if lnum == 0 return 0 endif + + " the start of the previous line, skipping over line continuation let prev_text = getline(lnum) + let found_cont = 0 " Add a 'shiftwidth' after :if, :while, :try, :catch, :finally, :function " and :else. Add it three times for a line that starts with '\' or '"\ ' " after a line that doesn't (or g:vim_indent_cont if it exists). let ind = indent(lnum) + + " In heredoc indenting works completely differently. + if has('syntax_items') + let syn_here = synIDattr(synID(v:lnum, 1, 1), "name") + if syn_here =~ 'vimLetHereDocStop' + " End of heredoc: use indent of matching start line + let lnum = v:lnum - 1 + while lnum > 0 + let attr = synIDattr(synID(lnum, 1, 1), "name") + if attr != '' && attr !~ 'vimLetHereDoc' + return indent(lnum) + endif + let lnum -= 1 + endwhile + return 0 + endif + if syn_here =~ 'vimLetHereDoc' + if synIDattr(synID(lnum, 1, 1), "name") !~ 'vimLetHereDoc' + " First line in heredoc: increase indent + return ind + shiftwidth() + endif + " Heredoc continues: no change in indent + return ind + endif + endif + if cur_text =~ s:lineContPat && v:lnum > 1 && prev_text !~ s:lineContPat + let found_cont = 1 if exists("g:vim_indent_cont") let ind = ind + g:vim_indent_cont else @@ -66,8 +100,10 @@ function GetVimIndentIntern() let ind = ind + shiftwidth() else " A line starting with :au does not increment/decrement indent. - if prev_text !~ '^\s*au\%[tocmd]' - let i = match(prev_text, '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>') + " A { may start a block or a dict. Assume that when a } follows it's a + " terminated dict. + if prev_text !~ '^\s*au\%[tocmd]' && prev_text !~ '^\s*{.*}' + let i = match(prev_text, '\(^\||\)\s*\(export\s\+\)\?\({\|\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\|finall\%[y]\|fu\%[nction]\|def\|el\%[seif]\)\>\)') if i >= 0 let ind += shiftwidth() if strpart(prev_text, i, 1) == '|' && has('syntax_items') @@ -88,10 +124,54 @@ function GetVimIndentIntern() endif endif + " For a line starting with "}" find the matching "{". If it is at the start + " of the line align with it, probably end of a block. + " Use the mapped "%" from matchit to find the match, otherwise we may match + " a { inside a comment or string. + if cur_text =~ '^\s*}' + if maparg('%') != '' + exe v:lnum + silent! normal % + if line('.') < v:lnum && getline('.') =~ '^\s*{' + let ind = indent('.') + endif + else + " todo: use searchpair() to find a match + endif + endif + + " Below a line starting with "}" find the matching "{". If it is at the + " end of the line we must be below the end of a dictionary. + if prev_text =~ '^\s*}' + if maparg('%') != '' + exe lnum + silent! normal % + if line('.') == lnum || getline('.') !~ '^\s*{' + let ind = ind - shiftwidth() + endif + else + " todo: use searchpair() to find a match + endif + endif + + " Below a line starting with "]" we must be below the end of a list. + " Include a "}" and "},} in case a dictionary ends too. + if prev_text_end =~ '^\s*\(},\=\s*\)\=]' + let ind = ind - shiftwidth() + endif + + let ends_in_comment = has('syntax_items') + \ && synIDattr(synID(lnum, len(getline(lnum)), 1), "name") =~ '\(Comment\|String\)$' + + " A line ending in "{" or "[" is most likely the start of a dict/list literal, + " indent the next line more. Not for a continuation line or {{{. + if !ends_in_comment && prev_text_end =~ '\s[{[]\s*$' && !found_cont + let ind = ind + shiftwidth() + endif " Subtract a 'shiftwidth' on a :endif, :endwhile, :catch, :finally, :endtry, " :endfun, :else and :augroup END. - if cur_text =~ '^\s*\(ene\@!\|cat\|fina\|el\|aug\%[roup]\s\+[eE][nN][dD]\)' + if cur_text =~ '^\s*\(ene\@!\|cat\|finall\|el\|aug\%[roup]\s\+[eE][nN][dD]\)' let ind = ind - shiftwidth() endif diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index 413a3ddb53..da65417939 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -2,8 +2,9 @@ " Maintainer: Christian Brabandt <cb@256bit.org> " Repository: https://github.com/chrisbra/vim-xml-ftplugin " Previous Maintainer: Johannes Zellner <johannes@zellner.org> -" Last Changed: 2019 Dec 02 +" Last Changed: 2020 Nov 4th " Last Change: +" 20200529 - Handle empty closing tags correctly " 20191202 - Handle docbk filetype " 20190726 - Correctly handle non-tagged data " 20190204 - correctly handle wrap tags @@ -45,7 +46,7 @@ if !exists('b:xml_indent_open') endif if !exists('b:xml_indent_close') - let b:xml_indent_close = '.\{-}</' + let b:xml_indent_close = '.\{-}</\|/>.\{-}' " end pre tag, e.g. </address> " let b:xml_indent_close = '.\{-}</\(address\)\@!' endif @@ -81,7 +82,7 @@ endfun " [-- return the sum of indents of a:lnum --] fun! <SID>XmlIndentSum(line, style, add) - if <SID>IsXMLContinuation(a:line) && a:style == 0 + if <SID>IsXMLContinuation(a:line) && a:style == 0 && !<SID>IsXMLEmptyClosingTag(a:line) " no complete tag, add one additional indent level " but only for the current line return a:add + shiftwidth() @@ -131,13 +132,25 @@ fun! XmlIndentGet(lnum, use_syntax_check) endif let syn_name_end = synIDattr(synID(a:lnum, strlen(curline) - 1, 1), 'name') let syn_name_start = synIDattr(synID(a:lnum, match(curline, '\S') + 1, 1), 'name') + let prev_syn_name_end = synIDattr(synID(ptag, strlen(pline) - 1, 1), 'name') + " not needed (yet?) + " let prev_syn_name_start = synIDattr(synID(ptag, match(pline, '\S') + 1, 1), 'name') endif if syn_name_end =~ 'Comment' && syn_name_start =~ 'Comment' return <SID>XmlIndentComment(a:lnum) elseif empty(syn_name_start) && empty(syn_name_end) && a:use_syntax_check " non-xml tag content: use indent from 'autoindent' - return pind + shiftwidth() + if pline =~ b:xml_indent_close + return pind + elseif !empty(prev_syn_name_end) + " only indent by an extra shiftwidth, if the previous line ends + " with an XML like tag + return pind + shiftwidth() + else + " no extra indent, looks like a text continuation line + return pind + endif endif " Get indent from previous tag line @@ -157,15 +170,28 @@ func! <SID>HasNoTagEnd(line) return a:line !~ '>\s*$' endfunc +func! <SID>IsXMLEmptyClosingTag(line) + " Checks whether the line ends with an empty closing tag such as <lb/> + return a:line =~? '<[^>]*/>\s*$' +endfunc + " return indent for a commented line, " the middle part might be indented one additional level func! <SID>XmlIndentComment(lnum) - let ptagopen = search(b:xml_indent_open, 'bnW') + let ptagopen = search('.\{-}<[:A-Z_a-z]\_[^/]\{-}>.\{-}', 'bnW') let ptagclose = search(b:xml_indent_close, 'bnW') if getline(a:lnum) =~ '<!--' " if previous tag was a closing tag, do not add " one additional level of indent if ptagclose > ptagopen && a:lnum > ptagclose + " If the previous tag was closed on the same line as it was + " declared, we should indent with its indent level. + if !<SID>IsXMLContinuation(getline(ptagclose)) + return indent(ptagclose) + else + return indent(ptagclose) - shiftwidth() + endif + elseif ptagclose == ptagopen return indent(ptagclose) else " start of comment, add one indentation level diff --git a/runtime/indent/yaml.vim b/runtime/indent/yaml.vim index 3eb16f845d..8dca5cd763 100644 --- a/runtime/indent/yaml.vim +++ b/runtime/indent/yaml.vim @@ -1,16 +1,14 @@ " Vim indent file -" Language: YAML -" Maintainer: Nikolai Pavlov <zyx.vim@gmail.com> -" Last Change: 2017 Jun 13 +" Language: YAML +" Maintainer: Nikolai Pavlov <zyx.vim@gmail.com> +" Last Update: Lukas Reineke +" Last Change: 2021 Jan 19 " Only load this indent file when no other was loaded. if exists('b:did_indent') finish endif -let s:save_cpo = &cpo -set cpo&vim - let b:did_indent = 1 setlocal indentexpr=GetYAMLIndent(v:lnum) @@ -24,12 +22,15 @@ if exists('*GetYAMLIndent') finish endif +let s:save_cpo = &cpo +set cpo&vim + function s:FindPrevLessIndentedLine(lnum, ...) let prevlnum = prevnonblank(a:lnum-1) let curindent = a:0 ? a:1 : indent(a:lnum) while prevlnum \&& indent(prevlnum) >= curindent - \&& getline(prevlnum) =~# '^\s*#' + \&& getline(prevlnum) !~# '^\s*#' let prevlnum = prevnonblank(prevlnum-1) endwhile return prevlnum @@ -53,7 +54,7 @@ let s:c_ns_anchor_name = s:c_ns_anchor_char.'+' let s:c_ns_anchor_property = '\v\&'.s:c_ns_anchor_name let s:ns_word_char = '\v[[:alnum:]_\-]' -let s:ns_tag_char = '\v%(%\x\x|'.s:ns_word_char.'|[#/;?:@&=+$.~*''()])' +let s:ns_tag_char = '\v%('.s:ns_word_char.'|[#/;?:@&=+$.~*''()])' let s:c_named_tag_handle = '\v\!'.s:ns_word_char.'+\!' let s:c_secondary_tag_handle = '\v\!\!' let s:c_primary_tag_handle = '\v\!' @@ -62,7 +63,7 @@ let s:c_tag_handle = '\v%('.s:c_named_tag_handle. \ '|'.s:c_primary_tag_handle.')' let s:c_ns_shorthand_tag = '\v'.s:c_tag_handle . s:ns_tag_char.'+' let s:c_non_specific_tag = '\v\!' -let s:ns_uri_char = '\v%(%\x\x|'.s:ns_word_char.'\v|[#/;?:@&=+$,.!~*''()[\]])' +let s:ns_uri_char = '\v%('.s:ns_word_char.'\v|[#/;?:@&=+$,.!~*''()[\]])' let s:c_verbatim_tag = '\v\!\<'.s:ns_uri_char.'+\>' let s:c_ns_tag_property = '\v'.s:c_verbatim_tag. \ '\v|'.s:c_ns_shorthand_tag. diff --git a/runtime/keymap/french-azerty.vim b/runtime/keymap/french-azerty.vim new file mode 100644 index 0000000000..b0fd758e97 --- /dev/null +++ b/runtime/keymap/french-azerty.vim @@ -0,0 +1,81 @@ +" Vim Keymap file for French standard keyboard layout (without AltGr keys as +" they don't work reliably in all version of vim) + +" Maintainer: Yerlan Sergaziyev <yerlaser@outlook.com> +" Last Changed: 2020-07-18 + +scriptencoding utf-8 + +let b:keymap_name = "fr" + +loadkeymap +1 & ASCII AMPERSAND +2 é LATIN SMALL LETTER E WITH ACUTE +3 " ASCII DOUBLE QUOTES +4 ' ASCII SINGLE QUOTE +5 ( ASCII LEFT PARENTHESIS +6 - ASCII MINUS +7 è LATIN SMALL LETTER E WITH GRAVE +8 _ ASCII UNDERSCORE +9 ç LATIN SMALL LETTER C WITH CEDILLA +0 à LATIN SMALL LETTER A WITH GRAVE +- ) ASCII RIGHT PARENTHESIS +! 1 ASCII DIGIT 1 +@ 2 ASCII DIGIT 2 +# 3 ASCII DIGIT 3 +$ 4 ASCII DIGIT 4 +% 5 ASCII DIGIT 5 +^ 6 ASCII DIGIT 6 +& 7 ASCII DIGIT 7 +* 8 ASCII DIGIT 8 +( 9 ASCII DIGIT 9 +) 0 ASCII DIGIT 0 +_ ° DEGREE SIGN +q a LATIN SMALL LETTER A +a q LATIN SMALL LETTER Q +z w LATIN SMALL LETTER W +w z LATIN SMALL LETTER Z +Q A LATIN CAPITAL LETTER A +A Q LATIN CAPITAL LETTER Q +Z W LATIN CAPITAL LETTER W +W Z LATIN CAPITAL LETTER Z +[[ ^ ASCII CIRCUMFLEX +[q â LATIN SMALL LETTER A WITH CIRCUMFLEX +[e ê LATIN SMALL LETTER E WITH CIRCUMFLEX +[u û LATIN SMALL LETTER U WITH CIRCUMFLEX +[i î LATIN SMALL LETTER I WITH CIRCUMFLEX +[o ô LATIN SMALL LETTER O WITH CIRCUMFLEX +[Q  LATIN CAPITAL LETTER A WITH CIRCUMFLEX +[E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX +[U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX +[I ÃŽ LATIN CAPITAL LETTER I WITH CIRCUMFLEX +[O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX +{{ ¨ UMLAUT +{q ä LATIN SMALL LETTER A WITH UMLAUT +{e ë LATIN SMALL LETTER E WITH UMLAUT +{y ÿ LATIN SMALL LETTER Y WITH UMLAUT +{u ü LATIN SMALL LETTER U WITH UMLAUT +{i ï LATIN SMALL LETTER I WITH UMLAUT +{o ö LATIN SMALL LETTER O WITH UMLAUT +{Q Ä LATIN CAPITAL LETTER A WITH UMLAUT +{E Ë LATIN CAPITAL LETTER E WITH UMLAUT +{Y Ÿ LATIN CAPITAL LETTER Y WITH UMLAUT +{U Ü LATIN CAPITAL LETTER U WITH UMLAUT +{I à LATIN CAPITAL LETTER I WITH UMLAUT +{O Ö LATIN CAPITAL LETTER O WITH UMLAUT +] $ ASCII GRAVE +} £ POUND SIGN +; m LATIN SMALL LETTER M +: M LATIN CAPITAL LETTER M +' ù LATIN SMALL LETTER U WITH GRAVE +\" % ASCII PERCENT +\\ * ASCII ASTERISK +| µ GREEK LETTER MU +m , ASCII COMMA +M ? ASCII QUESTION MARK +, ; ASCII SEMICOLON +< . ASCII DOT +. : ASCII COLON +> / ASCII SLASH +/ ! ASCII EXCLAMATION MARK +? § SECTION SIGN diff --git a/runtime/keymap/german-qwertz.vim b/runtime/keymap/german-qwertz.vim new file mode 100644 index 0000000000..c2ccb1bfe2 --- /dev/null +++ b/runtime/keymap/german-qwertz.vim @@ -0,0 +1,76 @@ +" Vim Keymap file for German standard keyboard layout (without AltGr keys as +" they don't work reliably in all version of vim) + +" Maintainer: Yerlan Sergaziyev <yerlaser@outlook.com> +" Last Changed: 2020-07-18 + +scriptencoding utf-8 + +let b:keymap_name = "de" + +loadkeymap +`` ^ ASCII CIRCUMFLEX +`e ê LATIN SMALL LETTER E WITH CIRCUMFLEX +`u û LATIN SMALL LETTER U WITH CIRCUMFLEX +`i î LATIN SMALL LETTER I WITH CIRCUMFLEX +`o ô LATIN SMALL LETTER O WITH CIRCUMFLEX +`a â LATIN SMALL LETTER A WITH CIRCUMFLEX +`E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX +`U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX +`I ÃŽ LATIN CAPITAL LETTER I WITH CIRCUMFLEX +`O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX +`A  LATIN CAPITAL LETTER A WITH CIRCUMFLEX +- ß LATIN SMALL LETTER SZ +== ´ ASCII ACUTE ACCENT +=e é LATIN SMALL LETTER E WITH ACUTE +=u ú LATIN SMALL LETTER U WITH ACUTE +=i à LATIN SMALL LETTER I WITH ACUTE +=o ó LATIN SMALL LETTER O WITH ACUTE +=a á LATIN SMALL LETTER A WITH ACUTE +=z ý LATIN SMALL LETTER Y WITH ACUTE +=E É LATIN CAPITAL LETTER E WITH ACUTE +=U Ú LATIN CAPITAL LETTER U WITH ACUTE +=I à LATIN CAPITAL LETTER I WITH ACUTE +=O Ó LATIN CAPITAL LETTER O WITH ACUTE +=A à LATIN CAPITAL LETTER A WITH ACUTE +=Z à LATIN CAPITAL LETTER Y WITH ACUTE +=S ẞ LATIN CAPITAL LETTER SZ +++ ` ASCII GRAVE ++e è LATIN SMALL LETTER E WITH GRAVE ++u ù LATIN SMALL LETTER U WITH GRAVE ++i ì LATIN SMALL LETTER I WITH GRAVE ++o ò LATIN SMALL LETTER O WITH GRAVE ++a à LATIN SMALL LETTER A WITH GRAVE ++E È LATIN CAPITAL LETTER E WITH GRAVE ++U Ù LATIN CAPITAL LETTER U WITH GRAVE ++I ÃŒ LATIN CAPITAL LETTER I WITH GRAVE ++O Ã’ LATIN CAPITAL LETTER O WITH GRAVE ++A À LATIN CAPITAL LETTER A WITH GRAVE +y z LATIN SMALL LETTER Z +[ ü LATIN SMALL LETTER U WITH UMLAUT +] + ASCII PLUS +\\ # ASCII NUMBER SIGN +; ö LATIN SMALL LETTER O WITH UMLAUT +' ä LATIN SMALL LETTER A WITH UMLAUT +z y LATIN SMALL LETTER Y +/ - ASCII MINUS +~ ° DEGREE SIGN +@ " ASCII DOUBLE QUOTES +# § SECTION SIGN +^ & ASCII AMPERSAND +& / ASCII SLASH +* ( ASCII LEFT PARENTHESIS +( ) ASCII RIGHT PARENTHESIS +) = ASCII EQUAL SIGN +_ ? ASCII QUESTION MARK ++ ` ASCII GRAVE +Y Z LATIN CAPITAL LETTER Z +{ Ü LATIN CAPITAL LETTER U WITH UMLAUT +} * ASCII ASTERISK +| ' ASCII SINGLE QUOTE +: Ö LATIN CAPITAL LETTER O WITH UMLAUT +\" Ä LATIN CAPITAL LETTER A WITH UMLAUT +Z Y LATIN CAPITAL LETTER Y +< ; ASCII SEMICOLON +> : ASCII COLON +? _ ASCII UNDERSCORE diff --git a/runtime/keymap/korean-dubeolsik_utf-8.vim b/runtime/keymap/korean-dubeolsik_utf-8.vim new file mode 100644 index 0000000000..a6b5f2a24c --- /dev/null +++ b/runtime/keymap/korean-dubeolsik_utf-8.vim @@ -0,0 +1,11237 @@ +" Maintainer: Jang Whemoon <palindrom615@gmail.com> +" Last Change: Nov 24, 2020 +" +" +" +" Unlike Japanese or Chinese, modern Korean texts do not depends on conversion +" to Hanja (Chinese character). Thus, general Korean text totally can be +" covered without help of IME but this keymap. +" +" BUT, simply mapping each letter of Hangul with sequence of alphabet 1 by 1 +" can fail to combine Hangul jamo (conconants and vowels) right. +" For example, sequentially pressing `ㅅㅓㅇㅜㄹㄷã…ã…Žã…ㄱㅛ` can not only be +" combined as `서울대학êµ`, but alse `성ㅜㄹ댛ã…ㄱêµ`, which is totally +" nonsense. +" Though combining Hangul is deterministic with law that each letter must be +" one of (consonant + vowel) or (consonant + vowel + consonant), there is no +" way to apply such law without implementing input engine. +" +" Thus, user of this keymap should wait until previous hangul letter is +" completed before typing next one. To reduce such inconvenience, I suggest to +" set `timeoutlen` as their own value. (default value is 1000ms) +scriptencoding utf-8 + +let b:keymap_name = "ko" + +loadkeymap + +" Hangul jamo of 40 letters + +q ã…‚ +w ã…ˆ +e ã„· +r ㄱ +t ã…… +y ã…› +u ã…• +i ã…‘ +o ã… +p ã…” +a ã… +s ã„´ +d ã…‡ +f ㄹ +g ã…Ž +h ã…— +j ã…“ +k ã… +l ã…£ +z ã…‹ +x ã…Œ +c ã…Š +v ã… +b ã… +n ã…œ +m ã…¡ +Q ã…ƒ +W ã…‰ +E ㄸ +R ㄲ +T ã…† +O ã…’ +P ã…– + +" Hangul syllables of 11172 letters + +rk ê°€ +ro ê°œ +ri ê°¸ +rO ê±” +rj ê±° +rp 게 +ru 겨 +rP 계 +rh ê³ +rhk ê³¼ +rho ê´˜ +rhl ê´´ +ry êµ +rn 구 +rnj 궈 +rnp 궤 +rnl ê·€ +rb ê·œ +rm ê·¸ +rml 긔 +rl 기 +Rk 까 +Ro 깨 +Ri 꺄 +RO êº +Rj 꺼 +Rp 께 +Ru ê»´ +RP ê¼ +Rh 꼬 +Rhk 꽈 +Rho 꽤 +Rhl ê¾€ +Ry 꾜 +Rn 꾸 +Rnj ê¿” +Rnp ê¿° +Rnl 뀌 +Rb 뀨 +Rm ë„ +Rml ë +Rl ë¼ +sk 나 +so ë‚´ +si ëƒ +sO 냬 +sj 너 +sp 네 +su ë…€ +sP ë…œ +sh ë…¸ +shk 놔 +sho 놰 +shl 뇌 +sy 뇨 +sn 누 +snj ëˆ +snp 눼 +snl 뉘 +sb 뉴 +sm ëŠ +sml 늬 +sl 니 +ek 다 +eo 대 +ei 댜 +eO 댸 +ej ë” +ep ë° +eu 뎌 +eP 뎨 +eh ë„ +ehk ë +eho ë¼ +ehl ë˜ +ey ë´ +en ë‘ +enj 둬 +enp ë’ˆ +enl ë’¤ +eb ë“€ +em 드 +eml 듸 +el ë”” +Ek ë”° +Eo 때 +Ei 땨 +EO ë–„ +Ej ë– +Ep ë–¼ +Eu ë—˜ +EP ë—´ +Eh ë˜ +Ehk 똬 +Eho 뙈 +Ehl 뙤 +Ey 뚀 +En ëšœ +Enj 뚸 +Enp ë›” +Enl ë›° +Eb 뜌 +Em 뜨 +Eml ë„ +El ë +fk ë¼ +fo 래 +fi ëž´ +fO ëŸ +fj 러 +fp ë ˆ +fu ë ¤ +fP ë¡€ +fh 로 +fhk 롸 +fho 뢔 +fhl 뢰 +fy 료 +fn 루 +fnj 뤄 +fnp ë¤ +fnl 뤼 +fb 류 +fm 르 +fml ë¦ +fl 리 +ak 마 +ao 매 +ai 먀 +aO 먜 +aj 머 +ap ë©” +au ë©° +aP 몌 +ah 모 +ahk ë«„ +aho ë« +ahl 뫼 +ay 묘 +an 무 +anj ë +anp ë¬ +anl 뮈 +ab 뮤 +am 므 +aml 믜 +al 미 +qk ë°” +qo ë°° +qi 뱌 +qO 뱨 +qj 버 +qp ë² +qu ë²¼ +qP 볘 +qh ë³´ +qhk ë´ +qho ë´¬ +qhl 뵈 +qy 뵤 +qn ë¶€ +qnj ë¶œ +qnp 붸 +qnl ë·” +qb ë·° +qm 브 +qml 븨 +ql 비 +Qk ë¹ +Qo ë¹¼ +Qi 뺘 +QO 뺴 +Qj ë» +Qp 뻬 +Qu 뼈 +QP 뼤 +Qh ë½€ +Qhk 뽜 +Qho 뽸 +Qhl ë¾” +Qy ë¾° +Qn 뿌 +Qnj 뿨 +Qnp 쀄 +Qnl ì€ +Qb 쀼 +Qm ì˜ +Qml ì´ +Ql ì‚ +tk 사 +to 새 +ti 샤 +tO ì„€ +tj 서 +tp 세 +tu ì…” +tP ì…° +th 소 +thk 솨 +tho 쇄 +thl ì‡ +ty 쇼 +tn 수 +tnj 숴 +tnp ì‰ +tnl 쉬 +tb 슈 +tm 스 +tml ì‹€ +tl 시 +Tk 싸 +To 쌔 +Ti 쌰 +TO ìŒ +Tj ì¨ +Tp 쎄 +Tu ìŽ +TP 쎼 +Th ì˜ +Thk ì´ +Tho ì +Thl ì¬ +Ty 쑈 +Tn 쑤 +Tnj ì’€ +Tnp ì’œ +Tnl ì’¸ +Tb ì“” +Tm ì“° +Tml 씌 +Tl 씨 +dk ì•„ +do ì• +di 야 +dO ì–˜ +dj ì–´ +dp ì— +du ì—¬ +dP 예 +dh 오 +dhk 와 +dho 왜 +dhl 외 +dy ìš” +dn ìš° +dnj 워 +dnp 웨 +dnl 위 +db ìœ +dm 으 +dml ì˜ +dl ì´ +wk ìž +wo 재 +wi 쟈 +wO 쟤 +wj ì € +wp ì œ +wu ì ¸ +wP ì¡” +wh ì¡° +whk 좌 +who 좨 +whl 죄 +wy ì£ +wn 주 +wnj 줘 +wnp 줴 +wnl ì¥ +wb 쥬 +wm 즈 +wml 즤 +wl ì§€ +Wk ì§œ +Wo 째 +Wi 쨔 +WO 쨰 +Wj 쩌 +Wp 쩨 +Wu 쪄 +WP ìª +Wh 쪼 +Whk 쫘 +Who ì«´ +Whl ì¬ +Wy 쬬 +Wn ìˆ +Wnj ì¤ +Wnp 쮀 +Wnl 쮜 +Wb 쮸 +Wm 쯔 +Wml 쯰 +Wl ì°Œ +ck ì°¨ +co 채 +ci ì± +cO ì±¼ +cj 처 +cp ì²´ +cu ì³ +cP 쳬 +ch ì´ˆ +chk ì´¤ +cho ìµ€ +chl 최 +cy 쵸 +cn ì¶” +cnj ì¶° +cnp ì·Œ +cnl ì·¨ +cb 츄 +cm ì¸ +cml 츼 +cl 치 +zk ì¹´ +zo ìº +zi 캬 +zO 컈 +zj 커 +zp ì¼€ +zu 켜 +zP 켸 +zh ì½” +zhk ì½° +zho 쾌 +zhl 쾨 +zy ì¿„ +zn ì¿ +znj 쿼 +znp 퀘 +znl 퀴 +zb í +zm í¬ +zml 킈 +zl 키 +xk 타 +xo 태 +xi 탸 +xO í„” +xj í„° +xp í…Œ +xu í…¨ +xP 톄 +xh í† +xhk 톼 +xho 퇘 +xhl 퇴 +xy íˆ +xn 투 +xnj 퉈 +xnp 퉤 +xnl 튀 +xb 튜 +xm 트 +xml í‹” +xl í‹° +vk 파 +vo 패 +vi í„ +vO í +vj í¼ +vp 페 +vu 펴 +vP í +vh í¬ +vhk íˆ +vho í¤ +vhl í‘€ +vy 표 +vn 푸 +vnj í’” +vnp í’° +vnl 퓌 +vb 퓨 +vm 프 +vml í” +vl 피 +gk 하 +go í•´ +gi í– +gO í–¬ +gj í—ˆ +gp í—¤ +gu 혀 +gP 혜 +gh 호 +ghk í™” +gho í™° +ghl 회 +gy 효 +gn 후 +gnj í› +gnp 훼 +gnl 휘 +gb 휴 +gm í +gml í¬ +gl 히 +rkr ê° +rkR ê°‚ +rkrt ê°ƒ +rks ê°„ +rksw ê°… +rksg ê°† +rke ê°‡ +rkf ê°ˆ +rkfr ê°‰ +rkfa ê°Š +rkfq ê°‹ +rkft ê°Œ +rkfx ê° +rkfv ê°Ž +rkfg ê° +rka ê° +rkq ê°‘ +rkqt ê°’ +rkt ê°“ +rkT ê°” +rkd ê°• +rkw ê°– +rkc ê°— +rkz ê°˜ +rkx ê°™ +rkv ê°š +rkg ê°› +ror ê° +roR ê°ž +rort ê°Ÿ +ros ê° +rosw ê°¡ +rosg ê°¢ +roe ê°£ +rof ê°¤ +rofr ê°¥ +rofa ê°¦ +rofq ê°§ +roft ê°¨ +rofx ê°© +rofv ê°ª +rofg ê°« +roa ê°¬ +roq ê° +roqt ê°® +rot ê°¯ +roT ê°° +rod ê°± +row ê°² +roc ê°³ +roz ê°´ +rox ê°µ +rov ê°¶ +rog ê°· +rir ê°¹ +riR ê°º +rirt ê°» +ris ê°¼ +risw ê°½ +risg ê°¾ +rie ê°¿ +rif ê±€ +rifr ê± +rifa 걂 +rifq 걃 +rift 걄 +rifx ê±… +rifv 걆 +rifg 걇 +ria 걈 +riq 걉 +riqt 걊 +rit 걋 +riT 걌 +rid ê± +riw 걎 +ric ê± +riz ê± +rix 걑 +riv ê±’ +rig 걓 +rOr 걕 +rOR ê±– +rOrt ê±— +rOs 걘 +rOsw ê±™ +rOsg 걚 +rOe ê±› +rOf 걜 +rOfr ê± +rOfa 걞 +rOfq 걟 +rOft ê± +rOfx 걡 +rOfv ê±¢ +rOfg ê±£ +rOa 걤 +rOq ê±¥ +rOqt 걦 +rOt ê±§ +rOT 걨 +rOd 걩 +rOw 걪 +rOc 걫 +rOz 걬 +rOx ê± +rOv ê±® +rOg 걯 +rjr ê±± +rjR ê±² +rjrt ê±³ +rjs ê±´ +rjsw ê±µ +rjsg ê±¶ +rje ê±· +rjf 걸 +rjfr ê±¹ +rjfa 걺 +rjfq ê±» +rjft ê±¼ +rjfx ê±½ +rjfv ê±¾ +rjfg 걿 +rja ê²€ +rjq ê² +rjqt 겂 +rjt 것 +rjT 겄 +rjd ê²… +rjw 겆 +rjc 겇 +rjz 겈 +rjx 겉 +rjv 겊 +rjg 겋 +rpr ê² +rpR 겎 +rprt ê² +rps ê² +rpsw 겑 +rpsg ê²’ +rpe 겓 +rpf ê²” +rpfr 겕 +rpfa ê²– +rpfq ê²— +rpft 겘 +rpfx ê²™ +rpfv 겚 +rpfg ê²› +rpa 겜 +rpq ê² +rpqt 겞 +rpt 겟 +rpT ê² +rpd 겡 +rpw ê²¢ +rpc ê²£ +rpz 겤 +rpx ê²¥ +rpv 겦 +rpg ê²§ +rur 격 +ruR 겪 +rurt 겫 +rus 견 +rusw ê² +rusg ê²® +rue 겯 +ruf ê²° +rufr ê²± +rufa ê²² +rufq ê²³ +ruft ê²´ +rufx ê²µ +rufv ê²¶ +rufg ê²· +rua 겸 +ruq ê²¹ +ruqt 겺 +rut ê²» +ruT ê²¼ +rud ê²½ +ruw ê²¾ +ruc 겿 +ruz ê³€ +rux ê³ +ruv 곂 +rug 곃 +rPr ê³… +rPR 곆 +rPrt 곇 +rPs 곈 +rPsw 곉 +rPsg 곊 +rPe 곋 +rPf 곌 +rPfr ê³ +rPfa 곎 +rPfq ê³ +rPft ê³ +rPfx 곑 +rPfv ê³’ +rPfg 곓 +rPa ê³” +rPq 곕 +rPqt ê³– +rPt ê³— +rPT 곘 +rPd ê³™ +rPw 곚 +rPc ê³› +rPz 곜 +rPx ê³ +rPv 곞 +rPg 곟 +rhr 곡 +rhR ê³¢ +rhrt ê³£ +rhs 곤 +rhsw ê³¥ +rhsg 곦 +rhe ê³§ +rhf 골 +rhfr 곩 +rhfa 곪 +rhfq 곫 +rhft 곬 +rhfx ê³ +rhfv ê³® +rhfg 곯 +rha ê³° +rhq ê³± +rhqt ê³² +rht ê³³ +rhT ê³´ +rhd ê³µ +rhw ê³¶ +rhc ê³· +rhz 곸 +rhx ê³¹ +rhv 곺 +rhg ê³» +rhkr ê³½ +rhkR ê³¾ +rhkrt 곿 +rhks ê´€ +rhksw ê´ +rhksg ê´‚ +rhke ê´ƒ +rhkf ê´„ +rhkfr ê´… +rhkfa ê´† +rhkfq ê´‡ +rhkft ê´ˆ +rhkfx ê´‰ +rhkfv ê´Š +rhkfg ê´‹ +rhka ê´Œ +rhkq ê´ +rhkqt ê´Ž +rhkt ê´ +rhkT ê´ +rhkd ê´‘ +rhkw ê´’ +rhkc ê´“ +rhkz ê´” +rhkx ê´• +rhkv ê´– +rhkg ê´— +rhor ê´™ +rhoR ê´š +rhort ê´› +rhos ê´œ +rhosw ê´ +rhosg ê´ž +rhoe ê´Ÿ +rhof ê´ +rhofr ê´¡ +rhofa ê´¢ +rhofq ê´£ +rhoft ê´¤ +rhofx ê´¥ +rhofv ê´¦ +rhofg ê´§ +rhoa ê´¨ +rhoq ê´© +rhoqt ê´ª +rhot ê´« +rhoT ê´¬ +rhod ê´ +rhow ê´® +rhoc ê´¯ +rhoz ê´° +rhox ê´± +rhov ê´² +rhog ê´³ +rhlr ê´µ +rhlR ê´¶ +rhlrt ê´· +rhls ê´¸ +rhlsw ê´¹ +rhlsg ê´º +rhle ê´» +rhlf ê´¼ +rhlfr ê´½ +rhlfa ê´¾ +rhlfq ê´¿ +rhlft êµ€ +rhlfx êµ +rhlfv 굂 +rhlfg 굃 +rhla 굄 +rhlq êµ… +rhlqt 굆 +rhlt 굇 +rhlT 굈 +rhld 굉 +rhlw 굊 +rhlc 굋 +rhlz 굌 +rhlx êµ +rhlv 굎 +rhlg êµ +ryr 굑 +ryR êµ’ +ryrt 굓 +rys êµ” +rysw 굕 +rysg êµ– +rye êµ— +ryf 굘 +ryfr êµ™ +ryfa 굚 +ryfq êµ› +ryft 굜 +ryfx êµ +ryfv 굞 +ryfg 굟 +rya êµ +ryq 굡 +ryqt êµ¢ +ryt êµ£ +ryT 굤 +ryd êµ¥ +ryw 굦 +ryc êµ§ +ryz 굨 +ryx 굩 +ryv 굪 +ryg 굫 +rnr êµ +rnR êµ® +rnrt 굯 +rns êµ° +rnsw êµ± +rnsg êµ² +rne êµ³ +rnf êµ´ +rnfr êµµ +rnfa êµ¶ +rnfq êµ· +rnft 굸 +rnfx êµ¹ +rnfv 굺 +rnfg êµ» +rna êµ¼ +rnq êµ½ +rnqt êµ¾ +rnt 굿 +rnT ê¶€ +rnd ê¶ +rnw ê¶‚ +rnc 궃 +rnz ê¶„ +rnx ê¶… +rnv 궆 +rng 궇 +rnjr 궉 +rnjR ê¶Š +rnjrt ê¶‹ +rnjs ê¶Œ +rnjsw ê¶ +rnjsg ê¶Ž +rnje ê¶ +rnjf ê¶ +rnjfr ê¶‘ +rnjfa ê¶’ +rnjfq ê¶“ +rnjft ê¶” +rnjfx ê¶• +rnjfv ê¶– +rnjfg ê¶— +rnja 궘 +rnjq ê¶™ +rnjqt ê¶š +rnjt ê¶› +rnjT ê¶œ +rnjd ê¶ +rnjw ê¶ž +rnjc ê¶Ÿ +rnjz ê¶ +rnjx ê¶¡ +rnjv ê¶¢ +rnjg ê¶£ +rnpr ê¶¥ +rnpR 궦 +rnprt ê¶§ +rnps 궨 +rnpsw ê¶© +rnpsg 궪 +rnpe ê¶« +rnpf 궬 +rnpfr ê¶ +rnpfa ê¶® +rnpfq 궯 +rnpft ê¶° +rnpfx ê¶± +rnpfv ê¶² +rnpfg ê¶³ +rnpa ê¶´ +rnpq ê¶µ +rnpqt ê¶¶ +rnpt ê¶· +rnpT 궸 +rnpd ê¶¹ +rnpw 궺 +rnpc ê¶» +rnpz ê¶¼ +rnpx ê¶½ +rnpv ê¶¾ +rnpg ê¶¿ +rnlr ê· +rnlR ê·‚ +rnlrt ê·ƒ +rnls ê·„ +rnlsw ê·… +rnlsg ê·† +rnle ê·‡ +rnlf ê·ˆ +rnlfr ê·‰ +rnlfa ê·Š +rnlfq ê·‹ +rnlft ê·Œ +rnlfx ê· +rnlfv ê·Ž +rnlfg ê· +rnla ê· +rnlq ê·‘ +rnlqt ê·’ +rnlt ê·“ +rnlT ê·” +rnld ê·• +rnlw ê·– +rnlc ê·— +rnlz ê·˜ +rnlx ê·™ +rnlv ê·š +rnlg ê·› +rbr ê· +rbR ê·ž +rbrt ê·Ÿ +rbs ê· +rbsw ê·¡ +rbsg ê·¢ +rbe ê·£ +rbf ê·¤ +rbfr ê·¥ +rbfa ê·¦ +rbfq ê·§ +rbft ê·¨ +rbfx ê·© +rbfv ê·ª +rbfg ê·« +rba ê·¬ +rbq ê· +rbqt ê·® +rbt ê·¯ +rbT ê·° +rbd ê·± +rbw ê·² +rbc ê·³ +rbz ê·´ +rbx ê·µ +rbv ê·¶ +rbg ê·· +rmr ê·¹ +rmR ê·º +rmrt ê·» +rms ê·¼ +rmsw ê·½ +rmsg ê·¾ +rme ê·¿ +rmf 글 +rmfr ê¸ +rmfa 긂 +rmfq 긃 +rmft 긄 +rmfx 긅 +rmfv 긆 +rmfg 긇 +rma 금 +rmq 급 +rmqt 긊 +rmt 긋 +rmT 긌 +rmd ê¸ +rmw 긎 +rmc ê¸ +rmz ê¸ +rmx 긑 +rmv 긒 +rmg 긓 +rmlr 긕 +rmlR 긖 +rmlrt 긗 +rmls 긘 +rmlsw 긙 +rmlsg 긚 +rmle 긛 +rmlf 긜 +rmlfr ê¸ +rmlfa 긞 +rmlfq 긟 +rmlft ê¸ +rmlfx 긡 +rmlfv 긢 +rmlfg 긣 +rmla 긤 +rmlq 긥 +rmlqt 긦 +rmlt 긧 +rmlT 긨 +rmld 긩 +rmlw 긪 +rmlc 긫 +rmlz 긬 +rmlx ê¸ +rmlv 긮 +rmlg 긯 +rlr 긱 +rlR 긲 +rlrt 긳 +rls 긴 +rlsw 긵 +rlsg 긶 +rle 긷 +rlf 길 +rlfr 긹 +rlfa 긺 +rlfq 긻 +rlft 긼 +rlfx 긽 +rlfv 긾 +rlfg 긿 +rla ê¹€ +rlq ê¹ +rlqt 깂 +rlt 깃 +rlT 깄 +rld ê¹… +rlw 깆 +rlc 깇 +rlz 깈 +rlx 깉 +rlv 깊 +rlg 깋 +Rkr ê¹ +RkR 깎 +Rkrt ê¹ +Rks ê¹ +Rksw 깑 +Rksg ê¹’ +Rke 깓 +Rkf ê¹” +Rkfr 깕 +Rkfa ê¹– +Rkfq ê¹— +Rkft 깘 +Rkfx ê¹™ +Rkfv 깚 +Rkfg ê¹› +Rka 깜 +Rkq ê¹ +Rkqt 깞 +Rkt 깟 +RkT ê¹ +Rkd 깡 +Rkw ê¹¢ +Rkc ê¹£ +Rkz 깤 +Rkx ê¹¥ +Rkv 깦 +Rkg ê¹§ +Ror 깩 +RoR 깪 +Rort 깫 +Ros 깬 +Rosw ê¹ +Rosg ê¹® +Roe 깯 +Rof ê¹° +Rofr ê¹± +Rofa ê¹² +Rofq ê¹³ +Roft ê¹´ +Rofx ê¹µ +Rofv ê¹¶ +Rofg ê¹· +Roa 깸 +Roq ê¹¹ +Roqt 깺 +Rot ê¹» +RoT ê¹¼ +Rod ê¹½ +Row ê¹¾ +Roc 깿 +Roz 꺀 +Rox êº +Rov 꺂 +Rog 꺃 +Rir 꺅 +RiR 꺆 +Rirt 꺇 +Ris 꺈 +Risw 꺉 +Risg 꺊 +Rie 꺋 +Rif 꺌 +Rifr êº +Rifa 꺎 +Rifq êº +Rift êº +Rifx 꺑 +Rifv 꺒 +Rifg 꺓 +Ria 꺔 +Riq 꺕 +Riqt 꺖 +Rit 꺗 +RiT 꺘 +Rid 꺙 +Riw 꺚 +Ric 꺛 +Riz 꺜 +Rix êº +Riv 꺞 +Rig 꺟 +ROr 꺡 +ROR 꺢 +ROrt 꺣 +ROs 꺤 +ROsw 꺥 +ROsg 꺦 +ROe 꺧 +ROf 꺨 +ROfr 꺩 +ROfa 꺪 +ROfq 꺫 +ROft 꺬 +ROfx êº +ROfv 꺮 +ROfg 꺯 +ROa 꺰 +ROq 꺱 +ROqt 꺲 +ROt 꺳 +ROT 꺴 +ROd 꺵 +ROw 꺶 +ROc 꺷 +ROz 꺸 +ROx 꺹 +ROv 꺺 +ROg 꺻 +Rjr 꺽 +RjR 꺾 +Rjrt 꺿 +Rjs 껀 +Rjsw ê» +Rjsg 껂 +Rje 껃 +Rjf 껄 +Rjfr ê»… +Rjfa 껆 +Rjfq 껇 +Rjft 껈 +Rjfx 껉 +Rjfv 껊 +Rjfg 껋 +Rja 껌 +Rjq ê» +Rjqt 껎 +Rjt ê» +RjT ê» +Rjd 껑 +Rjw ê»’ +Rjc 껓 +Rjz ê»” +Rjx 껕 +Rjv ê»– +Rjg ê»— +Rpr ê»™ +RpR 껚 +Rprt ê»› +Rps 껜 +Rpsw ê» +Rpsg 껞 +Rpe 껟 +Rpf ê» +Rpfr 껡 +Rpfa 껢 +Rpfq 껣 +Rpft 껤 +Rpfx 껥 +Rpfv 껦 +Rpfg ê»§ +Rpa 껨 +Rpq 껩 +Rpqt 껪 +Rpt 껫 +RpT 껬 +Rpd ê» +Rpw ê»® +Rpc 껯 +Rpz ê»° +Rpx ê»± +Rpv 껲 +Rpg 껳 +Rur 껵 +RuR ê»¶ +Rurt ê»· +Rus 껸 +Rusw 껹 +Rusg 껺 +Rue ê»» +Ruf 껼 +Rufr 껽 +Rufa 껾 +Rufq 껿 +Ruft ê¼€ +Rufx ê¼ +Rufv 꼂 +Rufg 꼃 +Rua 꼄 +Ruq ê¼… +Ruqt 꼆 +Rut 꼇 +RuT 꼈 +Rud 꼉 +Ruw 꼊 +Ruc 꼋 +Ruz 꼌 +Rux ê¼ +Ruv 꼎 +Rug ê¼ +RPr 꼑 +RPR ê¼’ +RPrt 꼓 +RPs ê¼” +RPsw 꼕 +RPsg ê¼– +RPe ê¼— +RPf 꼘 +RPfr ê¼™ +RPfa 꼚 +RPfq ê¼› +RPft 꼜 +RPfx ê¼ +RPfv 꼞 +RPfg 꼟 +RPa ê¼ +RPq 꼡 +RPqt ê¼¢ +RPt ê¼£ +RPT 꼤 +RPd ê¼¥ +RPw 꼦 +RPc ê¼§ +RPz 꼨 +RPx 꼩 +RPv 꼪 +RPg 꼫 +Rhr ê¼ +RhR ê¼® +Rhrt 꼯 +Rhs ê¼° +Rhsw ê¼± +Rhsg ê¼² +Rhe ê¼³ +Rhf ê¼´ +Rhfr ê¼µ +Rhfa ê¼¶ +Rhfq ê¼· +Rhft 꼸 +Rhfx ê¼¹ +Rhfv 꼺 +Rhfg ê¼» +Rha ê¼¼ +Rhq ê¼½ +Rhqt ê¼¾ +Rht 꼿 +RhT ê½€ +Rhd ê½ +Rhw 꽂 +Rhc 꽃 +Rhz 꽄 +Rhx ê½… +Rhv 꽆 +Rhg 꽇 +Rhkr 꽉 +RhkR 꽊 +Rhkrt 꽋 +Rhks 꽌 +Rhksw ê½ +Rhksg 꽎 +Rhke ê½ +Rhkf ê½ +Rhkfr 꽑 +Rhkfa ê½’ +Rhkfq 꽓 +Rhkft ê½” +Rhkfx 꽕 +Rhkfv ê½– +Rhkfg ê½— +Rhka 꽘 +Rhkq ê½™ +Rhkqt 꽚 +Rhkt ê½› +RhkT 꽜 +Rhkd ê½ +Rhkw 꽞 +Rhkc 꽟 +Rhkz ê½ +Rhkx 꽡 +Rhkv ê½¢ +Rhkg ê½£ +Rhor ê½¥ +RhoR 꽦 +Rhort ê½§ +Rhos 꽨 +Rhosw 꽩 +Rhosg 꽪 +Rhoe 꽫 +Rhof 꽬 +Rhofr ê½ +Rhofa ê½® +Rhofq 꽯 +Rhoft ê½° +Rhofx ê½± +Rhofv ê½² +Rhofg ê½³ +Rhoa ê½´ +Rhoq ê½µ +Rhoqt ê½¶ +Rhot ê½· +RhoT 꽸 +Rhod ê½¹ +Rhow 꽺 +Rhoc ê½» +Rhoz ê½¼ +Rhox ê½½ +Rhov ê½¾ +Rhog 꽿 +Rhlr ê¾ +RhlR 꾂 +Rhlrt 꾃 +Rhls 꾄 +Rhlsw ê¾… +Rhlsg 꾆 +Rhle 꾇 +Rhlf 꾈 +Rhlfr 꾉 +Rhlfa 꾊 +Rhlfq 꾋 +Rhlft 꾌 +Rhlfx ê¾ +Rhlfv 꾎 +Rhlfg ê¾ +Rhla ê¾ +Rhlq 꾑 +Rhlqt ê¾’ +Rhlt 꾓 +RhlT ê¾” +Rhld 꾕 +Rhlw ê¾– +Rhlc ê¾— +Rhlz 꾘 +Rhlx ê¾™ +Rhlv 꾚 +Rhlg ê¾› +Ryr ê¾ +RyR 꾞 +Ryrt 꾟 +Rys ê¾ +Rysw 꾡 +Rysg ê¾¢ +Rye ê¾£ +Ryf 꾤 +Ryfr ê¾¥ +Ryfa 꾦 +Ryfq ê¾§ +Ryft 꾨 +Ryfx 꾩 +Ryfv 꾪 +Ryfg 꾫 +Rya 꾬 +Ryq ê¾ +Ryqt ê¾® +Ryt 꾯 +RyT ê¾° +Ryd ê¾± +Ryw ê¾² +Ryc ê¾³ +Ryz ê¾´ +Ryx ê¾µ +Ryv ê¾¶ +Ryg ê¾· +Rnr ê¾¹ +RnR 꾺 +Rnrt ê¾» +Rns ê¾¼ +Rnsw ê¾½ +Rnsg ê¾¾ +Rne 꾿 +Rnf ê¿€ +Rnfr ê¿ +Rnfa ê¿‚ +Rnfq 꿃 +Rnft ê¿„ +Rnfx ê¿… +Rnfv 꿆 +Rnfg 꿇 +Rna 꿈 +Rnq 꿉 +Rnqt 꿊 +Rnt ê¿‹ +RnT 꿌 +Rnd ê¿ +Rnw 꿎 +Rnc ê¿ +Rnz ê¿ +Rnx ê¿‘ +Rnv ê¿’ +Rng ê¿“ +Rnjr ê¿• +RnjR ê¿– +Rnjrt ê¿— +Rnjs 꿘 +Rnjsw ê¿™ +Rnjsg 꿚 +Rnje ê¿› +Rnjf 꿜 +Rnjfr ê¿ +Rnjfa 꿞 +Rnjfq 꿟 +Rnjft ê¿ +Rnjfx ê¿¡ +Rnjfv ê¿¢ +Rnjfg ê¿£ +Rnja 꿤 +Rnjq ê¿¥ +Rnjqt 꿦 +Rnjt ê¿§ +RnjT 꿨 +Rnjd ê¿© +Rnjw 꿪 +Rnjc ê¿« +Rnjz 꿬 +Rnjx ê¿ +Rnjv ê¿® +Rnjg 꿯 +Rnpr 꿱 +RnpR 꿲 +Rnprt 꿳 +Rnps ê¿´ +Rnpsw 꿵 +Rnpsg ê¿¶ +Rnpe ê¿· +Rnpf 꿸 +Rnpfr 꿹 +Rnpfa 꿺 +Rnpfq ê¿» +Rnpft 꿼 +Rnpfx 꿽 +Rnpfv 꿾 +Rnpfg ê¿¿ +Rnpa 뀀 +Rnpq ë€ +Rnpqt 뀂 +Rnpt 뀃 +RnpT 뀄 +Rnpd 뀅 +Rnpw 뀆 +Rnpc 뀇 +Rnpz 뀈 +Rnpx 뀉 +Rnpv 뀊 +Rnpg 뀋 +Rnlr ë€ +RnlR 뀎 +Rnlrt ë€ +Rnls ë€ +Rnlsw 뀑 +Rnlsg 뀒 +Rnle 뀓 +Rnlf 뀔 +Rnlfr 뀕 +Rnlfa 뀖 +Rnlfq 뀗 +Rnlft 뀘 +Rnlfx 뀙 +Rnlfv 뀚 +Rnlfg 뀛 +Rnla 뀜 +Rnlq ë€ +Rnlqt 뀞 +Rnlt 뀟 +RnlT ë€ +Rnld 뀡 +Rnlw 뀢 +Rnlc 뀣 +Rnlz 뀤 +Rnlx 뀥 +Rnlv 뀦 +Rnlg 뀧 +Rbr 뀩 +RbR 뀪 +Rbrt 뀫 +Rbs 뀬 +Rbsw ë€ +Rbsg 뀮 +Rbe 뀯 +Rbf 뀰 +Rbfr 뀱 +Rbfa 뀲 +Rbfq 뀳 +Rbft 뀴 +Rbfx 뀵 +Rbfv 뀶 +Rbfg 뀷 +Rba 뀸 +Rbq 뀹 +Rbqt 뀺 +Rbt 뀻 +RbT 뀼 +Rbd 뀽 +Rbw 뀾 +Rbc 뀿 +Rbz ë€ +Rbx ë +Rbv ë‚ +Rbg ëƒ +Rmr ë… +RmR ë† +Rmrt ë‡ +Rms ëˆ +Rmsw ë‰ +Rmsg ëŠ +Rme ë‹ +Rmf ëŒ +Rmfr ë +Rmfa ëŽ +Rmfq ë +Rmft ë +Rmfx ë‘ +Rmfv ë’ +Rmfg ë“ +Rma ë” +Rmq ë• +Rmqt ë– +Rmt ë— +RmT ë˜ +Rmd ë™ +Rmw ëš +Rmc ë› +Rmz ëœ +Rmx ë +Rmv ëž +Rmg ëŸ +Rmlr ë¡ +RmlR ë¢ +Rmlrt ë£ +Rmls ë¤ +Rmlsw ë¥ +Rmlsg ë¦ +Rmle ë§ +Rmlf ë¨ +Rmlfr ë© +Rmlfa ëª +Rmlfq ë« +Rmlft ë¬ +Rmlfx ë +Rmlfv ë® +Rmlfg ë¯ +Rmla ë° +Rmlq ë± +Rmlqt ë² +Rmlt ë³ +RmlT ë´ +Rmld ëµ +Rmlw ë¶ +Rmlc ë· +Rmlz ë¸ +Rmlx ë¹ +Rmlv ëº +Rmlg ë» +Rlr ë½ +RlR ë¾ +Rlrt ë¿ +Rls ë‚€ +Rlsw ë‚ +Rlsg ë‚‚ +Rle 낃 +Rlf ë‚„ +Rlfr ë‚… +Rlfa 낆 +Rlfq 낇 +Rlft 낈 +Rlfx 낉 +Rlfv 낊 +Rlfg ë‚‹ +Rla 낌 +Rlq ë‚ +Rlqt 낎 +Rlt ë‚ +RlT ë‚ +Rld ë‚‘ +Rlw ë‚’ +Rlc ë‚“ +Rlz ë‚” +Rlx ë‚• +Rlv ë‚– +Rlg ë‚— +skr ë‚™ +skR 낚 +skrt ë‚› +sks 난 +sksw ë‚ +sksg 낞 +ske 낟 +skf ë‚ +skfr ë‚¡ +skfa ë‚¢ +skfq ë‚£ +skft 낤 +skfx ë‚¥ +skfv 낦 +skfg ë‚§ +ska 남 +skq ë‚© +skqt 낪 +skt ë‚« +skT 났 +skd ë‚ +skw ë‚® +skc 낯 +skz ë‚° +skx 낱 +skv 낲 +skg 낳 +sor 낵 +soR ë‚¶ +sort ë‚· +sos 낸 +sosw 낹 +sosg 낺 +soe ë‚» +sof 낼 +sofr 낽 +sofa 낾 +sofq ë‚¿ +soft 냀 +sofx ëƒ +sofv 냂 +sofg 냃 +soa 냄 +soq 냅 +soqt 냆 +sot 냇 +soT 냈 +sod 냉 +sow 냊 +soc 냋 +soz 냌 +sox ëƒ +sov 냎 +sog ëƒ +sir 냑 +siR 냒 +sirt 냓 +sis 냔 +sisw 냕 +sisg 냖 +sie 냗 +sif 냘 +sifr 냙 +sifa 냚 +sifq 냛 +sift 냜 +sifx ëƒ +sifv 냞 +sifg 냟 +sia ëƒ +siq 냡 +siqt 냢 +sit 냣 +siT 냤 +sid 냥 +siw 냦 +sic 냧 +siz 냨 +six 냩 +siv 냪 +sig 냫 +sOr ëƒ +sOR 냮 +sOrt 냯 +sOs 냰 +sOsw 냱 +sOsg 냲 +sOe 냳 +sOf 냴 +sOfr 냵 +sOfa 냶 +sOfq 냷 +sOft 냸 +sOfx 냹 +sOfv 냺 +sOfg 냻 +sOa 냼 +sOq 냽 +sOqt 냾 +sOt 냿 +sOT ë„€ +sOd ë„ +sOw ë„‚ +sOc 넃 +sOz ë„„ +sOx ë„… +sOv 넆 +sOg 넇 +sjr 넉 +sjR 넊 +sjrt ë„‹ +sjs 넌 +sjsw ë„ +sjsg 넎 +sje ë„ +sjf ë„ +sjfr ë„‘ +sjfa ë„’ +sjfq ë„“ +sjft ë„” +sjfx ë„• +sjfv ë„– +sjfg ë„— +sja 넘 +sjq ë„™ +sjqt 넚 +sjt ë„› +sjT 넜 +sjd ë„ +sjw 넞 +sjc 넟 +sjz ë„ +sjx ë„¡ +sjv ë„¢ +sjg ë„£ +spr ë„¥ +spR 넦 +sprt ë„§ +sps 넨 +spsw ë„© +spsg 넪 +spe ë„« +spf 넬 +spfr ë„ +spfa ë„® +spfq 넯 +spft ë„° +spfx 넱 +spfv 넲 +spfg 넳 +spa ë„´ +spq 넵 +spqt ë„¶ +spt ë„· +spT 넸 +spd 넹 +spw 넺 +spc ë„» +spz 넼 +spx 넽 +spv 넾 +spg ë„¿ +sur ë… +suR ë…‚ +surt ë…ƒ +sus ë…„ +susw ë…… +susg ë…† +sue ë…‡ +suf ë…ˆ +sufr ë…‰ +sufa ë…Š +sufq ë…‹ +suft ë…Œ +sufx ë… +sufv ë…Ž +sufg ë… +sua ë… +suq ë…‘ +suqt ë…’ +sut ë…“ +suT ë…” +sud ë…• +suw ë…– +suc ë…— +suz ë…˜ +sux ë…™ +suv ë…š +sug ë…› +sPr ë… +sPR ë…ž +sPrt ë…Ÿ +sPs ë… +sPsw ë…¡ +sPsg ë…¢ +sPe ë…£ +sPf ë…¤ +sPfr ë…¥ +sPfa ë…¦ +sPfq ë…§ +sPft ë…¨ +sPfx ë…© +sPfv ë…ª +sPfg ë…« +sPa ë…¬ +sPq ë… +sPqt ë…® +sPt ë…¯ +sPT ë…° +sPd ë…± +sPw ë…² +sPc ë…³ +sPz ë…´ +sPx ë…µ +sPv ë…¶ +sPg ë…· +shr ë…¹ +shR ë…º +shrt ë…» +shs ë…¼ +shsw ë…½ +shsg ë…¾ +she ë…¿ +shf 놀 +shfr ë† +shfa 놂 +shfq 놃 +shft 놄 +shfx 놅 +shfv 놆 +shfg 놇 +sha 놈 +shq 놉 +shqt 놊 +sht 놋 +shT 놌 +shd ë† +shw 놎 +shc ë† +shz ë† +shx 놑 +shv 높 +shg 놓 +shkr 놕 +shkR 놖 +shkrt 놗 +shks 놘 +shksw 놙 +shksg 놚 +shke 놛 +shkf 놜 +shkfr ë† +shkfa 놞 +shkfq 놟 +shkft ë† +shkfx 놡 +shkfv 놢 +shkfg 놣 +shka 놤 +shkq 놥 +shkqt 놦 +shkt 놧 +shkT 놨 +shkd 놩 +shkw 놪 +shkc 놫 +shkz 놬 +shkx ë† +shkv 놮 +shkg 놯 +shor 놱 +shoR 놲 +short 놳 +shos 놴 +shosw 놵 +shosg 놶 +shoe 놷 +shof 놸 +shofr 놹 +shofa 놺 +shofq 놻 +shoft 놼 +shofx 놽 +shofv 놾 +shofg 놿 +shoa 뇀 +shoq ë‡ +shoqt 뇂 +shot 뇃 +shoT 뇄 +shod 뇅 +show 뇆 +shoc 뇇 +shoz 뇈 +shox 뇉 +shov 뇊 +shog 뇋 +shlr ë‡ +shlR 뇎 +shlrt ë‡ +shls ë‡ +shlsw 뇑 +shlsg 뇒 +shle 뇓 +shlf 뇔 +shlfr 뇕 +shlfa 뇖 +shlfq 뇗 +shlft 뇘 +shlfx 뇙 +shlfv 뇚 +shlfg 뇛 +shla 뇜 +shlq ë‡ +shlqt 뇞 +shlt 뇟 +shlT ë‡ +shld 뇡 +shlw 뇢 +shlc 뇣 +shlz 뇤 +shlx 뇥 +shlv 뇦 +shlg 뇧 +syr 뇩 +syR 뇪 +syrt 뇫 +sys 뇬 +sysw ë‡ +sysg 뇮 +sye 뇯 +syf 뇰 +syfr 뇱 +syfa 뇲 +syfq 뇳 +syft 뇴 +syfx 뇵 +syfv 뇶 +syfg 뇷 +sya 뇸 +syq 뇹 +syqt 뇺 +syt 뇻 +syT 뇼 +syd 뇽 +syw 뇾 +syc 뇿 +syz 눀 +syx ëˆ +syv 눂 +syg 눃 +snr 눅 +snR 눆 +snrt 눇 +sns 눈 +snsw 눉 +snsg 눊 +sne 눋 +snf 눌 +snfr ëˆ +snfa 눎 +snfq ëˆ +snft ëˆ +snfx 눑 +snfv 눒 +snfg 눓 +sna 눔 +snq 눕 +snqt 눖 +snt 눗 +snT 눘 +snd 눙 +snw 눚 +snc 눛 +snz 눜 +snx ëˆ +snv 눞 +sng 눟 +snjr 눡 +snjR 눢 +snjrt 눣 +snjs 눤 +snjsw 눥 +snjsg 눦 +snje 눧 +snjf 눨 +snjfr 눩 +snjfa 눪 +snjfq 눫 +snjft 눬 +snjfx ëˆ +snjfv 눮 +snjfg 눯 +snja 눰 +snjq 눱 +snjqt 눲 +snjt 눳 +snjT 눴 +snjd 눵 +snjw 눶 +snjc 눷 +snjz 눸 +snjx 눹 +snjv 눺 +snjg 눻 +snpr 눽 +snpR 눾 +snprt 눿 +snps 뉀 +snpsw ë‰ +snpsg 뉂 +snpe 뉃 +snpf 뉄 +snpfr 뉅 +snpfa 뉆 +snpfq 뉇 +snpft 뉈 +snpfx 뉉 +snpfv 뉊 +snpfg 뉋 +snpa 뉌 +snpq ë‰ +snpqt 뉎 +snpt ë‰ +snpT ë‰ +snpd 뉑 +snpw 뉒 +snpc 뉓 +snpz 뉔 +snpx 뉕 +snpv 뉖 +snpg 뉗 +snlr 뉙 +snlR 뉚 +snlrt 뉛 +snls 뉜 +snlsw ë‰ +snlsg 뉞 +snle 뉟 +snlf ë‰ +snlfr 뉡 +snlfa 뉢 +snlfq 뉣 +snlft 뉤 +snlfx 뉥 +snlfv 뉦 +snlfg 뉧 +snla 뉨 +snlq 뉩 +snlqt 뉪 +snlt 뉫 +snlT 뉬 +snld ë‰ +snlw 뉮 +snlc 뉯 +snlz 뉰 +snlx 뉱 +snlv 뉲 +snlg 뉳 +sbr 뉵 +sbR 뉶 +sbrt 뉷 +sbs 뉸 +sbsw 뉹 +sbsg 뉺 +sbe 뉻 +sbf 뉼 +sbfr 뉽 +sbfa 뉾 +sbfq 뉿 +sbft 늀 +sbfx ëŠ +sbfv 늂 +sbfg 늃 +sba 늄 +sbq 늅 +sbqt 늆 +sbt 늇 +sbT 늈 +sbd 늉 +sbw 늊 +sbc 늋 +sbz 늌 +sbx ëŠ +sbv 늎 +sbg ëŠ +smr 늑 +smR 늒 +smrt 늓 +sms 는 +smsw 늕 +smsg 늖 +sme 늗 +smf 늘 +smfr 늙 +smfa 늚 +smfq 늛 +smft 늜 +smfx ëŠ +smfv 늞 +smfg 늟 +sma ëŠ +smq 늡 +smqt 늢 +smt 늣 +smT 늤 +smd 능 +smw 늦 +smc 늧 +smz 늨 +smx 늩 +smv 늪 +smg 늫 +smlr ëŠ +smlR 늮 +smlrt 늯 +smls 늰 +smlsw 늱 +smlsg 늲 +smle 늳 +smlf 늴 +smlfr 늵 +smlfa 늶 +smlfq 늷 +smlft 늸 +smlfx 늹 +smlfv 늺 +smlfg 늻 +smla 늼 +smlq 늽 +smlqt 늾 +smlt 늿 +smlT ë‹€ +smld ë‹ +smlw ë‹‚ +smlc 닃 +smlz ë‹„ +smlx ë‹… +smlv 닆 +smlg 닇 +slr 닉 +slR 닊 +slrt ë‹‹ +sls 닌 +slsw ë‹ +slsg 닎 +sle ë‹ +slf ë‹ +slfr ë‹‘ +slfa ë‹’ +slfq ë‹“ +slft ë‹” +slfx ë‹• +slfv ë‹– +slfg ë‹— +sla 님 +slq ë‹™ +slqt 닚 +slt ë‹› +slT 닜 +sld ë‹ +slw 닞 +slc 닟 +slz ë‹ +slx ë‹¡ +slv ë‹¢ +slg ë‹£ +ekr ë‹¥ +ekR 닦 +ekrt ë‹§ +eks 단 +eksw ë‹© +eksg 닪 +eke ë‹« +ekf 달 +ekfr ë‹ +ekfa ë‹® +ekfq 닯 +ekft ë‹° +ekfx 닱 +ekfv 닲 +ekfg 닳 +eka ë‹´ +ekq 답 +ekqt ë‹¶ +ekt ë‹· +ekT 닸 +ekd 당 +ekw 닺 +ekc ë‹» +ekz 닼 +ekx 닽 +ekv 닾 +ekg ë‹¿ +eor ëŒ +eoR 댂 +eort 댃 +eos 댄 +eosw 댅 +eosg 댆 +eoe 댇 +eof 댈 +eofr 댉 +eofa 댊 +eofq 댋 +eoft 댌 +eofx ëŒ +eofv 댎 +eofg ëŒ +eoa ëŒ +eoq 댑 +eoqt 댒 +eot 댓 +eoT 댔 +eod 댕 +eow 댖 +eoc 댗 +eoz 댘 +eox 댙 +eov 댚 +eog 댛 +eir ëŒ +eiR 댞 +eirt 댟 +eis ëŒ +eisw 댡 +eisg 댢 +eie 댣 +eif 댤 +eifr 댥 +eifa 댦 +eifq 댧 +eift 댨 +eifx 댩 +eifv 댪 +eifg 댫 +eia 댬 +eiq ëŒ +eiqt 댮 +eit 댯 +eiT 댰 +eid 댱 +eiw 댲 +eic 댳 +eiz 댴 +eix 댵 +eiv 댶 +eig 댷 +eOr 댹 +eOR 댺 +eOrt 댻 +eOs 댼 +eOsw 댽 +eOsg 댾 +eOe 댿 +eOf ë€ +eOfr ë +eOfa ë‚ +eOfq ëƒ +eOft ë„ +eOfx ë… +eOfv ë† +eOfg ë‡ +eOa ëˆ +eOq ë‰ +eOqt ëŠ +eOt ë‹ +eOT ëŒ +eOd ë +eOw ëŽ +eOc ë +eOz ë +eOx ë‘ +eOv ë’ +eOg ë“ +ejr ë• +ejR ë– +ejrt ë— +ejs ë˜ +ejsw ë™ +ejsg ëš +eje ë› +ejf ëœ +ejfr ë +ejfa ëž +ejfq ëŸ +ejft ë +ejfx ë¡ +ejfv ë¢ +ejfg ë£ +eja ë¤ +ejq ë¥ +ejqt ë¦ +ejt ë§ +ejT ë¨ +ejd ë© +ejw ëª +ejc ë« +ejz ë¬ +ejx ë +ejv ë® +ejg ë¯ +epr ë± +epR ë² +eprt ë³ +eps ë´ +epsw ëµ +epsg ë¶ +epe ë· +epf ë¸ +epfr ë¹ +epfa ëº +epfq ë» +epft ë¼ +epfx ë½ +epfv ë¾ +epfg ë¿ +epa 뎀 +epq ëŽ +epqt 뎂 +ept 뎃 +epT 뎄 +epd 뎅 +epw 뎆 +epc 뎇 +epz 뎈 +epx 뎉 +epv 뎊 +epg 뎋 +eur ëŽ +euR 뎎 +eurt ëŽ +eus ëŽ +eusw 뎑 +eusg 뎒 +eue 뎓 +euf 뎔 +eufr 뎕 +eufa 뎖 +eufq 뎗 +euft 뎘 +eufx 뎙 +eufv 뎚 +eufg 뎛 +eua 뎜 +euq ëŽ +euqt 뎞 +eut 뎟 +euT ëŽ +eud 뎡 +euw 뎢 +euc 뎣 +euz 뎤 +eux 뎥 +euv 뎦 +eug 뎧 +ePr 뎩 +ePR 뎪 +ePrt 뎫 +ePs 뎬 +ePsw ëŽ +ePsg 뎮 +ePe 뎯 +ePf 뎰 +ePfr 뎱 +ePfa 뎲 +ePfq 뎳 +ePft 뎴 +ePfx 뎵 +ePfv 뎶 +ePfg 뎷 +ePa 뎸 +ePq 뎹 +ePqt 뎺 +ePt 뎻 +ePT 뎼 +ePd 뎽 +ePw 뎾 +ePc 뎿 +ePz ë€ +ePx ë +ePv ë‚ +ePg ëƒ +ehr ë… +ehR ë† +ehrt ë‡ +ehs ëˆ +ehsw ë‰ +ehsg ëŠ +ehe ë‹ +ehf ëŒ +ehfr ë +ehfa ëŽ +ehfq ë +ehft ë +ehfx ë‘ +ehfv ë’ +ehfg ë“ +eha ë” +ehq ë• +ehqt ë– +eht ë— +ehT ë˜ +ehd ë™ +ehw ëš +ehc ë› +ehz ëœ +ehx ë +ehv ëž +ehg ëŸ +ehkr ë¡ +ehkR ë¢ +ehkrt ë£ +ehks ë¤ +ehksw ë¥ +ehksg ë¦ +ehke ë§ +ehkf ë¨ +ehkfr ë© +ehkfa ëª +ehkfq ë« +ehkft ë¬ +ehkfx ë +ehkfv ë® +ehkfg ë¯ +ehka ë° +ehkq ë± +ehkqt ë² +ehkt ë³ +ehkT ë´ +ehkd ëµ +ehkw ë¶ +ehkc ë· +ehkz ë¸ +ehkx ë¹ +ehkv ëº +ehkg ë» +ehor ë½ +ehoR ë¾ +ehort ë¿ +ehos ë€ +ehosw ë +ehosg ë‚ +ehoe ëƒ +ehof ë„ +ehofr ë… +ehofa ë† +ehofq ë‡ +ehoft ëˆ +ehofx ë‰ +ehofv ëŠ +ehofg ë‹ +ehoa ëŒ +ehoq ë +ehoqt ëŽ +ehot ë +ehoT ë +ehod ë‘ +ehow ë’ +ehoc ë“ +ehoz ë” +ehox ë• +ehov ë– +ehog ë— +ehlr ë™ +ehlR ëš +ehlrt ë› +ehls ëœ +ehlsw ë +ehlsg ëž +ehle ëŸ +ehlf ë +ehlfr ë¡ +ehlfa ë¢ +ehlfq ë£ +ehlft ë¤ +ehlfx ë¥ +ehlfv ë¦ +ehlfg ë§ +ehla ë¨ +ehlq ë© +ehlqt ëª +ehlt ë« +ehlT ë¬ +ehld ë +ehlw ë® +ehlc ë¯ +ehlz ë° +ehlx ë± +ehlv ë² +ehlg ë³ +eyr ëµ +eyR ë¶ +eyrt ë· +eys ë¸ +eysw ë¹ +eysg ëº +eye ë» +eyf ë¼ +eyfr ë½ +eyfa ë¾ +eyfq ë¿ +eyft ë‘€ +eyfx ë‘ +eyfv ë‘‚ +eyfg 둃 +eya ë‘„ +eyq ë‘… +eyqt 둆 +eyt 둇 +eyT 둈 +eyd 둉 +eyw 둊 +eyc ë‘‹ +eyz 둌 +eyx ë‘ +eyv 둎 +eyg ë‘ +enr ë‘‘ +enR ë‘’ +enrt ë‘“ +ens ë‘” +ensw ë‘• +ensg ë‘– +ene ë‘— +enf 둘 +enfr ë‘™ +enfa 둚 +enfq ë‘› +enft 둜 +enfx ë‘ +enfv 둞 +enfg 둟 +ena ë‘ +enq ë‘¡ +enqt ë‘¢ +ent ë‘£ +enT 둤 +end ë‘¥ +enw 둦 +enc ë‘§ +enz 둨 +enx ë‘© +env 둪 +eng ë‘« +enjr ë‘ +enjR ë‘® +enjrt 둯 +enjs ë‘° +enjsw 둱 +enjsg 둲 +enje 둳 +enjf ë‘´ +enjfr 둵 +enjfa ë‘¶ +enjfq ë‘· +enjft 둸 +enjfx 둹 +enjfv 둺 +enjfg ë‘» +enja 둼 +enjq 둽 +enjqt 둾 +enjt ë‘¿ +enjT ë’€ +enjd ë’ +enjw ë’‚ +enjc ë’ƒ +enjz ë’„ +enjx ë’… +enjv ë’† +enjg ë’‡ +enpr ë’‰ +enpR ë’Š +enprt ë’‹ +enps ë’Œ +enpsw ë’ +enpsg ë’Ž +enpe ë’ +enpf ë’ +enpfr ë’‘ +enpfa ë’’ +enpfq ë’“ +enpft ë’” +enpfx ë’• +enpfv ë’– +enpfg ë’— +enpa ë’˜ +enpq ë’™ +enpqt ë’š +enpt ë’› +enpT ë’œ +enpd ë’ +enpw ë’ž +enpc ë’Ÿ +enpz ë’ +enpx ë’¡ +enpv ë’¢ +enpg ë’£ +enlr ë’¥ +enlR ë’¦ +enlrt ë’§ +enls ë’¨ +enlsw ë’© +enlsg ë’ª +enle ë’« +enlf ë’¬ +enlfr ë’ +enlfa ë’® +enlfq ë’¯ +enlft ë’° +enlfx ë’± +enlfv ë’² +enlfg ë’³ +enla ë’´ +enlq ë’µ +enlqt ë’¶ +enlt ë’· +enlT ë’¸ +enld ë’¹ +enlw ë’º +enlc ë’» +enlz ë’¼ +enlx ë’½ +enlv ë’¾ +enlg ë’¿ +ebr ë“ +ebR ë“‚ +ebrt 듃 +ebs ë“„ +ebsw ë“… +ebsg 듆 +ebe 듇 +ebf 듈 +ebfr 듉 +ebfa 듊 +ebfq ë“‹ +ebft 듌 +ebfx ë“ +ebfv 듎 +ebfg ë“ +eba ë“ +ebq ë“‘ +ebqt ë“’ +ebt ë““ +ebT ë“” +ebd ë“• +ebw ë“– +ebc ë“— +ebz 듘 +ebx ë“™ +ebv 듚 +ebg ë“› +emr ë“ +emR 듞 +emrt 듟 +ems ë“ +emsw ë“¡ +emsg ë“¢ +eme ë“£ +emf 들 +emfr ë“¥ +emfa 듦 +emfq ë“§ +emft 듨 +emfx ë“© +emfv 듪 +emfg ë“« +ema 듬 +emq ë“ +emqt ë“® +emt 듯 +emT ë“° +emd 등 +emw 듲 +emc 듳 +emz ë“´ +emx 듵 +emv ë“¶ +emg ë“· +emlr 듹 +emlR 듺 +emlrt ë“» +emls 듼 +emlsw 듽 +emlsg 듾 +emle ë“¿ +emlf 딀 +emlfr ë” +emlfa 딂 +emlfq 딃 +emlft 딄 +emlfx ë”… +emlfv 딆 +emlfg 딇 +emla 딈 +emlq 딉 +emlqt 딊 +emlt 딋 +emlT 딌 +emld ë” +emlw 딎 +emlc ë” +emlz ë” +emlx 딑 +emlv ë”’ +emlg 딓 +elr 딕 +elR ë”– +elrt ë”— +els 딘 +elsw ë”™ +elsg 딚 +ele ë”› +elf 딜 +elfr ë” +elfa 딞 +elfq 딟 +elft ë” +elfx 딡 +elfv 딢 +elfg 딣 +ela 딤 +elq 딥 +elqt 딦 +elt ë”§ +elT 딨 +eld 딩 +elw 딪 +elc 딫 +elz 딬 +elx ë” +elv ë”® +elg 딯 +Ekr ë”± +EkR 딲 +Ekrt 딳 +Eks ë”´ +Eksw 딵 +Eksg ë”¶ +Eke ë”· +Ekf 딸 +Ekfr 딹 +Ekfa 딺 +Ekfq ë”» +Ekft 딼 +Ekfx 딽 +Ekfv 딾 +Ekfg 딿 +Eka ë•€ +Ekq ë• +Ekqt ë•‚ +Ekt 땃 +EkT ë•„ +Ekd ë•… +Ekw 땆 +Ekc 땇 +Ekz 땈 +Ekx 땉 +Ekv 땊 +Ekg ë•‹ +Eor ë• +EoR 땎 +Eort ë• +Eos ë• +Eosw ë•‘ +Eosg ë•’ +Eoe ë•“ +Eof ë•” +Eofr ë•• +Eofa ë•– +Eofq ë•— +Eoft 땘 +Eofx ë•™ +Eofv 땚 +Eofg ë•› +Eoa 땜 +Eoq ë• +Eoqt 땞 +Eot 땟 +EoT ë• +Eod ë•¡ +Eow ë•¢ +Eoc ë•£ +Eoz 땤 +Eox ë•¥ +Eov 땦 +Eog ë•§ +Eir ë•© +EiR 땪 +Eirt ë•« +Eis 땬 +Eisw ë• +Eisg ë•® +Eie 땯 +Eif ë•° +Eifr 땱 +Eifa 땲 +Eifq 땳 +Eift ë•´ +Eifx 땵 +Eifv ë•¶ +Eifg ë•· +Eia 땸 +Eiq 땹 +Eiqt 땺 +Eit ë•» +EiT 땼 +Eid 땽 +Eiw 땾 +Eic ë•¿ +Eiz ë–€ +Eix ë– +Eiv ë–‚ +Eig ë–ƒ +EOr ë–… +EOR ë–† +EOrt ë–‡ +EOs ë–ˆ +EOsw ë–‰ +EOsg ë–Š +EOe ë–‹ +EOf ë–Œ +EOfr ë– +EOfa ë–Ž +EOfq ë– +EOft ë– +EOfx ë–‘ +EOfv ë–’ +EOfg ë–“ +EOa ë–” +EOq ë–• +EOqt ë–– +EOt ë–— +EOT ë–˜ +EOd ë–™ +EOw ë–š +EOc ë–› +EOz ë–œ +EOx ë– +EOv ë–ž +EOg ë–Ÿ +Ejr ë–¡ +EjR ë–¢ +Ejrt ë–£ +Ejs ë–¤ +Ejsw ë–¥ +Ejsg ë–¦ +Eje ë–§ +Ejf ë–¨ +Ejfr ë–© +Ejfa ë–ª +Ejfq ë–« +Ejft ë–¬ +Ejfx ë– +Ejfv ë–® +Ejfg ë–¯ +Eja ë–° +Ejq ë–± +Ejqt ë–² +Ejt ë–³ +EjT ë–´ +Ejd ë–µ +Ejw ë–¶ +Ejc ë–· +Ejz ë–¸ +Ejx ë–¹ +Ejv ë–º +Ejg ë–» +Epr ë–½ +EpR ë–¾ +Eprt ë–¿ +Eps ë—€ +Epsw ë— +Epsg ë—‚ +Epe ë—ƒ +Epf ë—„ +Epfr ë—… +Epfa ë—† +Epfq ë—‡ +Epft ë—ˆ +Epfx ë—‰ +Epfv ë—Š +Epfg ë—‹ +Epa ë—Œ +Epq ë— +Epqt ë—Ž +Ept ë— +EpT ë— +Epd ë—‘ +Epw ë—’ +Epc ë—“ +Epz ë—” +Epx ë—• +Epv ë—– +Epg ë—— +Eur ë—™ +EuR ë—š +Eurt ë—› +Eus ë—œ +Eusw ë— +Eusg ë—ž +Eue ë—Ÿ +Euf ë— +Eufr ë—¡ +Eufa ë—¢ +Eufq ë—£ +Euft ë—¤ +Eufx ë—¥ +Eufv ë—¦ +Eufg ë—§ +Eua ë—¨ +Euq ë—© +Euqt ë—ª +Eut ë—« +EuT ë—¬ +Eud ë— +Euw ë—® +Euc ë—¯ +Euz ë—° +Eux ë—± +Euv ë—² +Eug ë—³ +EPr ë—µ +EPR ë—¶ +EPrt ë—· +EPs ë—¸ +EPsw ë—¹ +EPsg ë—º +EPe ë—» +EPf ë—¼ +EPfr ë—½ +EPfa ë—¾ +EPfq ë—¿ +EPft 똀 +EPfx ë˜ +EPfv 똂 +EPfg 똃 +EPa 똄 +EPq 똅 +EPqt 똆 +EPt 똇 +EPT 똈 +EPd 똉 +EPw 똊 +EPc 똋 +EPz 똌 +EPx ë˜ +EPv 똎 +EPg ë˜ +Ehr 똑 +EhR 똒 +Ehrt 똓 +Ehs 똔 +Ehsw 똕 +Ehsg 똖 +Ehe 똗 +Ehf 똘 +Ehfr 똙 +Ehfa 똚 +Ehfq 똛 +Ehft 똜 +Ehfx ë˜ +Ehfv 똞 +Ehfg 똟 +Eha ë˜ +Ehq 똡 +Ehqt 똢 +Eht 똣 +EhT 똤 +Ehd 똥 +Ehw 똦 +Ehc 똧 +Ehz 똨 +Ehx 똩 +Ehv 똪 +Ehg 똫 +Ehkr ë˜ +EhkR 똮 +Ehkrt 똯 +Ehks 똰 +Ehksw 똱 +Ehksg 똲 +Ehke 똳 +Ehkf 똴 +Ehkfr 똵 +Ehkfa 똶 +Ehkfq 똷 +Ehkft 똸 +Ehkfx 똹 +Ehkfv 똺 +Ehkfg 똻 +Ehka 똼 +Ehkq 똽 +Ehkqt 똾 +Ehkt 똿 +EhkT 뙀 +Ehkd ë™ +Ehkw 뙂 +Ehkc 뙃 +Ehkz 뙄 +Ehkx ë™… +Ehkv 뙆 +Ehkg 뙇 +Ehor 뙉 +EhoR 뙊 +Ehort 뙋 +Ehos 뙌 +Ehosw ë™ +Ehosg 뙎 +Ehoe ë™ +Ehof ë™ +Ehofr 뙑 +Ehofa ë™’ +Ehofq 뙓 +Ehoft ë™” +Ehofx 뙕 +Ehofv ë™– +Ehofg ë™— +Ehoa 뙘 +Ehoq ë™™ +Ehoqt 뙚 +Ehot ë™› +EhoT 뙜 +Ehod ë™ +Ehow 뙞 +Ehoc 뙟 +Ehoz ë™ +Ehox 뙡 +Ehov 뙢 +Ehog 뙣 +Ehlr 뙥 +EhlR 뙦 +Ehlrt ë™§ +Ehls 뙨 +Ehlsw 뙩 +Ehlsg 뙪 +Ehle 뙫 +Ehlf 뙬 +Ehlfr ë™ +Ehlfa ë™® +Ehlfq 뙯 +Ehlft ë™° +Ehlfx ë™± +Ehlfv 뙲 +Ehlfg 뙳 +Ehla ë™´ +Ehlq 뙵 +Ehlqt ë™¶ +Ehlt ë™· +EhlT 뙸 +Ehld 뙹 +Ehlw 뙺 +Ehlc ë™» +Ehlz 뙼 +Ehlx 뙽 +Ehlv 뙾 +Ehlg 뙿 +Eyr ëš +EyR ëš‚ +Eyrt 뚃 +Eys ëš„ +Eysw ëš… +Eysg 뚆 +Eye 뚇 +Eyf 뚈 +Eyfr 뚉 +Eyfa 뚊 +Eyfq ëš‹ +Eyft 뚌 +Eyfx ëš +Eyfv 뚎 +Eyfg ëš +Eya ëš +Eyq ëš‘ +Eyqt ëš’ +Eyt ëš“ +EyT ëš” +Eyd ëš• +Eyw ëš– +Eyc ëš— +Eyz 뚘 +Eyx ëš™ +Eyv ëšš +Eyg ëš› +Enr ëš +EnR ëšž +Enrt 뚟 +Ens ëš +Ensw ëš¡ +Ensg 뚢 +Ene 뚣 +Enf 뚤 +Enfr 뚥 +Enfa 뚦 +Enfq ëš§ +Enft 뚨 +Enfx ëš© +Enfv 뚪 +Enfg ëš« +Ena 뚬 +Enq ëš +Enqt ëš® +Ent 뚯 +EnT ëš° +End ëš± +Enw ëš² +Enc ëš³ +Enz ëš´ +Enx ëšµ +Env ëš¶ +Eng ëš· +Enjr ëš¹ +EnjR 뚺 +Enjrt ëš» +Enjs ëš¼ +Enjsw ëš½ +Enjsg ëš¾ +Enje ëš¿ +Enjf 뛀 +Enjfr ë› +Enjfa 뛂 +Enjfq 뛃 +Enjft 뛄 +Enjfx ë›… +Enjfv 뛆 +Enjfg 뛇 +Enja 뛈 +Enjq 뛉 +Enjqt 뛊 +Enjt 뛋 +EnjT 뛌 +Enjd ë› +Enjw 뛎 +Enjc ë› +Enjz ë› +Enjx 뛑 +Enjv ë›’ +Enjg 뛓 +Enpr 뛕 +EnpR ë›– +Enprt ë›— +Enps 뛘 +Enpsw ë›™ +Enpsg 뛚 +Enpe ë›› +Enpf 뛜 +Enpfr ë› +Enpfa 뛞 +Enpfq 뛟 +Enpft ë› +Enpfx 뛡 +Enpfv 뛢 +Enpfg 뛣 +Enpa 뛤 +Enpq 뛥 +Enpqt 뛦 +Enpt ë›§ +EnpT 뛨 +Enpd 뛩 +Enpw 뛪 +Enpc 뛫 +Enpz 뛬 +Enpx ë› +Enpv ë›® +Enpg 뛯 +Enlr ë›± +EnlR 뛲 +Enlrt 뛳 +Enls ë›´ +Enlsw 뛵 +Enlsg ë›¶ +Enle ë›· +Enlf 뛸 +Enlfr 뛹 +Enlfa 뛺 +Enlfq ë›» +Enlft 뛼 +Enlfx 뛽 +Enlfv 뛾 +Enlfg 뛿 +Enla 뜀 +Enlq ëœ +Enlqt 뜂 +Enlt 뜃 +EnlT 뜄 +Enld 뜅 +Enlw 뜆 +Enlc 뜇 +Enlz 뜈 +Enlx 뜉 +Enlv 뜊 +Enlg 뜋 +Ebr ëœ +EbR 뜎 +Ebrt ëœ +Ebs ëœ +Ebsw 뜑 +Ebsg 뜒 +Ebe 뜓 +Ebf 뜔 +Ebfr 뜕 +Ebfa 뜖 +Ebfq 뜗 +Ebft 뜘 +Ebfx 뜙 +Ebfv 뜚 +Ebfg 뜛 +Eba 뜜 +Ebq ëœ +Ebqt 뜞 +Ebt 뜟 +EbT ëœ +Ebd 뜡 +Ebw 뜢 +Ebc 뜣 +Ebz 뜤 +Ebx 뜥 +Ebv 뜦 +Ebg 뜧 +Emr 뜩 +EmR 뜪 +Emrt 뜫 +Ems 뜬 +Emsw ëœ +Emsg 뜮 +Eme 뜯 +Emf 뜰 +Emfr 뜱 +Emfa 뜲 +Emfq 뜳 +Emft 뜴 +Emfx 뜵 +Emfv 뜶 +Emfg 뜷 +Ema 뜸 +Emq 뜹 +Emqt 뜺 +Emt 뜻 +EmT 뜼 +Emd 뜽 +Emw 뜾 +Emc 뜿 +Emz ë€ +Emx ë +Emv ë‚ +Emg ëƒ +Emlr ë… +EmlR ë† +Emlrt ë‡ +Emls ëˆ +Emlsw ë‰ +Emlsg ëŠ +Emle ë‹ +Emlf ëŒ +Emlfr ë +Emlfa ëŽ +Emlfq ë +Emlft ë +Emlfx ë‘ +Emlfv ë’ +Emlfg ë“ +Emla ë” +Emlq ë• +Emlqt ë– +Emlt ë— +EmlT ë˜ +Emld ë™ +Emlw ëš +Emlc ë› +Emlz ëœ +Emlx ë +Emlv ëž +Emlg ëŸ +Elr ë¡ +ElR ë¢ +Elrt ë£ +Els ë¤ +Elsw ë¥ +Elsg ë¦ +Ele ë§ +Elf ë¨ +Elfr ë© +Elfa ëª +Elfq ë« +Elft ë¬ +Elfx ë +Elfv ë® +Elfg ë¯ +Ela ë° +Elq ë± +Elqt ë² +Elt ë³ +ElT ë´ +Eld ëµ +Elw ë¶ +Elc ë· +Elz ë¸ +Elx ë¹ +Elv ëº +Elg ë» +fkr ë½ +fkR ë¾ +fkrt ë¿ +fks 란 +fksw ëž +fksg ëž‚ +fke 랃 +fkf ëž„ +fkfr ëž… +fkfa 랆 +fkfq 랇 +fkft 랈 +fkfx 랉 +fkfv 랊 +fkfg ëž‹ +fka 람 +fkq ëž +fkqt 랎 +fkt ëž +fkT ëž +fkd ëž‘ +fkw ëž’ +fkc ëž“ +fkz ëž” +fkx ëž• +fkv ëž– +fkg ëž— +for ëž™ +foR ëžš +fort ëž› +fos ëžœ +fosw ëž +fosg ëžž +foe 랟 +fof ëž +fofr ëž¡ +fofa 랢 +fofq 랣 +foft 랤 +fofx 랥 +fofv 랦 +fofg ëž§ +foa 램 +foq ëž© +foqt 랪 +fot ëž« +foT 랬 +fod ëž +fow ëž® +foc 랯 +foz ëž° +fox ëž± +fov ëž² +fog ëž³ +fir ëžµ +fiR ëž¶ +firt ëž· +fis 랸 +fisw ëž¹ +fisg 랺 +fie ëž» +fif ëž¼ +fifr ëž½ +fifa ëž¾ +fifq ëž¿ +fift 럀 +fifx ëŸ +fifv 럂 +fifg 럃 +fia 럄 +fiq 럅 +fiqt 럆 +fit 럇 +fiT 럈 +fid 량 +fiw 럊 +fic 럋 +fiz 럌 +fix ëŸ +fiv 럎 +fig ëŸ +fOr 럑 +fOR 럒 +fOrt 럓 +fOs 럔 +fOsw 럕 +fOsg 럖 +fOe 럗 +fOf 럘 +fOfr 럙 +fOfa 럚 +fOfq 럛 +fOft 럜 +fOfx ëŸ +fOfv 럞 +fOfg 럟 +fOa ëŸ +fOq 럡 +fOqt 럢 +fOt 럣 +fOT 럤 +fOd 럥 +fOw 럦 +fOc 럧 +fOz 럨 +fOx 럩 +fOv 럪 +fOg 럫 +fjr ëŸ +fjR 럮 +fjrt 럯 +fjs 런 +fjsw 럱 +fjsg 럲 +fje 럳 +fjf 럴 +fjfr 럵 +fjfa 럶 +fjfq 럷 +fjft 럸 +fjfx 럹 +fjfv 럺 +fjfg 럻 +fja 럼 +fjq 럽 +fjqt 럾 +fjt 럿 +fjT ë € +fjd ë +fjw ë ‚ +fjc ë ƒ +fjz ë „ +fjx ë … +fjv ë † +fjg ë ‡ +fpr ë ‰ +fpR ë Š +fprt ë ‹ +fps ë Œ +fpsw ë +fpsg ë Ž +fpe ë +fpf ë +fpfr ë ‘ +fpfa ë ’ +fpfq ë “ +fpft ë ” +fpfx ë • +fpfv ë – +fpfg ë — +fpa ë ˜ +fpq ë ™ +fpqt ë š +fpt ë › +fpT ë œ +fpd ë +fpw ë ž +fpc ë Ÿ +fpz ë +fpx ë ¡ +fpv ë ¢ +fpg ë £ +fur ë ¥ +fuR ë ¦ +furt ë § +fus ë ¨ +fusw ë © +fusg ë ª +fue ë « +fuf ë ¬ +fufr ë +fufa ë ® +fufq ë ¯ +fuft ë ° +fufx ë ± +fufv ë ² +fufg ë ³ +fua ë ´ +fuq ë µ +fuqt ë ¶ +fut ë · +fuT ë ¸ +fud ë ¹ +fuw ë º +fuc ë » +fuz ë ¼ +fux ë ½ +fuv ë ¾ +fug ë ¿ +fPr ë¡ +fPR ë¡‚ +fPrt 롃 +fPs ë¡„ +fPsw ë¡… +fPsg 롆 +fPe 롇 +fPf 롈 +fPfr 롉 +fPfa 롊 +fPfq ë¡‹ +fPft 롌 +fPfx ë¡ +fPfv 롎 +fPfg ë¡ +fPa ë¡ +fPq ë¡‘ +fPqt ë¡’ +fPt ë¡“ +fPT ë¡” +fPd ë¡• +fPw ë¡– +fPc ë¡— +fPz 롘 +fPx ë¡™ +fPv 롚 +fPg ë¡› +fhr ë¡ +fhR 롞 +fhrt 롟 +fhs ë¡ +fhsw ë¡¡ +fhsg ë¡¢ +fhe ë¡£ +fhf 롤 +fhfr ë¡¥ +fhfa 롦 +fhfq ë¡§ +fhft 롨 +fhfx ë¡© +fhfv 롪 +fhfg ë¡« +fha 롬 +fhq ë¡ +fhqt ë¡® +fht 롯 +fhT ë¡° +fhd 롱 +fhw 롲 +fhc 롳 +fhz ë¡´ +fhx 롵 +fhv ë¡¶ +fhg ë¡· +fhkr 롹 +fhkR 롺 +fhkrt ë¡» +fhks 롼 +fhksw 롽 +fhksg 롾 +fhke ë¡¿ +fhkf 뢀 +fhkfr ë¢ +fhkfa 뢂 +fhkfq 뢃 +fhkft 뢄 +fhkfx 뢅 +fhkfv 뢆 +fhkfg 뢇 +fhka 뢈 +fhkq 뢉 +fhkqt 뢊 +fhkt 뢋 +fhkT 뢌 +fhkd ë¢ +fhkw 뢎 +fhkc ë¢ +fhkz ë¢ +fhkx 뢑 +fhkv 뢒 +fhkg 뢓 +fhor 뢕 +fhoR 뢖 +fhort 뢗 +fhos 뢘 +fhosw 뢙 +fhosg 뢚 +fhoe 뢛 +fhof 뢜 +fhofr ë¢ +fhofa 뢞 +fhofq 뢟 +fhoft ë¢ +fhofx 뢡 +fhofv 뢢 +fhofg 뢣 +fhoa 뢤 +fhoq 뢥 +fhoqt 뢦 +fhot 뢧 +fhoT 뢨 +fhod 뢩 +fhow 뢪 +fhoc 뢫 +fhoz 뢬 +fhox ë¢ +fhov 뢮 +fhog 뢯 +fhlr 뢱 +fhlR 뢲 +fhlrt 뢳 +fhls 뢴 +fhlsw 뢵 +fhlsg 뢶 +fhle 뢷 +fhlf 뢸 +fhlfr 뢹 +fhlfa 뢺 +fhlfq 뢻 +fhlft 뢼 +fhlfx 뢽 +fhlfv 뢾 +fhlfg 뢿 +fhla 룀 +fhlq ë£ +fhlqt 룂 +fhlt 룃 +fhlT 룄 +fhld 룅 +fhlw 룆 +fhlc 룇 +fhlz 룈 +fhlx 룉 +fhlv 룊 +fhlg 룋 +fyr ë£ +fyR 룎 +fyrt ë£ +fys ë£ +fysw 룑 +fysg 룒 +fye 룓 +fyf 룔 +fyfr 룕 +fyfa 룖 +fyfq 룗 +fyft 룘 +fyfx 룙 +fyfv 룚 +fyfg 룛 +fya 룜 +fyq ë£ +fyqt 룞 +fyt 룟 +fyT ë£ +fyd 룡 +fyw 룢 +fyc 룣 +fyz 룤 +fyx 룥 +fyv 룦 +fyg 룧 +fnr 룩 +fnR 룪 +fnrt 룫 +fns 룬 +fnsw ë£ +fnsg 룮 +fne 룯 +fnf 룰 +fnfr 룱 +fnfa 룲 +fnfq 룳 +fnft 룴 +fnfx 룵 +fnfv 룶 +fnfg 룷 +fna 룸 +fnq 룹 +fnqt 룺 +fnt 룻 +fnT 룼 +fnd 룽 +fnw 룾 +fnc 룿 +fnz 뤀 +fnx ë¤ +fnv 뤂 +fng 뤃 +fnjr 뤅 +fnjR 뤆 +fnjrt 뤇 +fnjs 뤈 +fnjsw 뤉 +fnjsg 뤊 +fnje 뤋 +fnjf 뤌 +fnjfr ë¤ +fnjfa 뤎 +fnjfq ë¤ +fnjft ë¤ +fnjfx 뤑 +fnjfv 뤒 +fnjfg 뤓 +fnja 뤔 +fnjq 뤕 +fnjqt 뤖 +fnjt 뤗 +fnjT 뤘 +fnjd 뤙 +fnjw 뤚 +fnjc 뤛 +fnjz 뤜 +fnjx ë¤ +fnjv 뤞 +fnjg 뤟 +fnpr 뤡 +fnpR 뤢 +fnprt 뤣 +fnps 뤤 +fnpsw 뤥 +fnpsg 뤦 +fnpe 뤧 +fnpf 뤨 +fnpfr 뤩 +fnpfa 뤪 +fnpfq 뤫 +fnpft 뤬 +fnpfx ë¤ +fnpfv 뤮 +fnpfg 뤯 +fnpa 뤰 +fnpq 뤱 +fnpqt 뤲 +fnpt 뤳 +fnpT 뤴 +fnpd 뤵 +fnpw 뤶 +fnpc 뤷 +fnpz 뤸 +fnpx 뤹 +fnpv 뤺 +fnpg 뤻 +fnlr 뤽 +fnlR 뤾 +fnlrt 뤿 +fnls 륀 +fnlsw ë¥ +fnlsg 륂 +fnle 륃 +fnlf 륄 +fnlfr 륅 +fnlfa 륆 +fnlfq 륇 +fnlft 륈 +fnlfx 륉 +fnlfv 륊 +fnlfg 륋 +fnla 륌 +fnlq ë¥ +fnlqt 륎 +fnlt ë¥ +fnlT ë¥ +fnld 륑 +fnlw 륒 +fnlc 륓 +fnlz 륔 +fnlx 륕 +fnlv 륖 +fnlg 륗 +fbr 륙 +fbR 륚 +fbrt 륛 +fbs 륜 +fbsw ë¥ +fbsg 륞 +fbe 륟 +fbf ë¥ +fbfr 륡 +fbfa 륢 +fbfq 륣 +fbft 륤 +fbfx 륥 +fbfv 륦 +fbfg 륧 +fba 륨 +fbq 륩 +fbqt 륪 +fbt 륫 +fbT 륬 +fbd ë¥ +fbw 륮 +fbc 륯 +fbz 륰 +fbx 륱 +fbv 륲 +fbg 륳 +fmr 륵 +fmR 륶 +fmrt 륷 +fms 른 +fmsw 륹 +fmsg 륺 +fme 륻 +fmf 를 +fmfr 륽 +fmfa 륾 +fmfq 륿 +fmft 릀 +fmfx ë¦ +fmfv 릂 +fmfg 릃 +fma 름 +fmq 릅 +fmqt 릆 +fmt 릇 +fmT 릈 +fmd 릉 +fmw 릊 +fmc 릋 +fmz 릌 +fmx ë¦ +fmv 릎 +fmg ë¦ +fmlr 릑 +fmlR 릒 +fmlrt 릓 +fmls 릔 +fmlsw 릕 +fmlsg 릖 +fmle 릗 +fmlf 릘 +fmlfr 릙 +fmlfa 릚 +fmlfq 릛 +fmlft 릜 +fmlfx ë¦ +fmlfv 릞 +fmlfg 릟 +fmla ë¦ +fmlq 릡 +fmlqt 릢 +fmlt 릣 +fmlT 릤 +fmld 릥 +fmlw 릦 +fmlc 릧 +fmlz 릨 +fmlx 릩 +fmlv 릪 +fmlg 릫 +flr ë¦ +flR 릮 +flrt 릯 +fls 린 +flsw 릱 +flsg 릲 +fle 릳 +flf 릴 +flfr 릵 +flfa 릶 +flfq 릷 +flft 릸 +flfx 릹 +flfv 릺 +flfg 릻 +fla 림 +flq 립 +flqt 릾 +flt 릿 +flT ë§€ +fld ë§ +flw ë§‚ +flc 맃 +flz ë§„ +flx ë§… +flv 맆 +flg 맇 +akr 막 +akR ë§Š +akrt ë§‹ +aks ë§Œ +aksw ë§ +aksg ë§Ž +ake ë§ +akf ë§ +akfr ë§‘ +akfa ë§’ +akfq ë§“ +akft ë§” +akfx ë§• +akfv ë§– +akfg ë§— +aka 맘 +akq ë§™ +akqt ë§š +akt ë§› +akT ë§œ +akd ë§ +akw ë§ž +akc ë§Ÿ +akz ë§ +akx ë§¡ +akv ë§¢ +akg ë§£ +aor ë§¥ +aoR 맦 +aort ë§§ +aos 맨 +aosw ë§© +aosg 맪 +aoe ë§« +aof 맬 +aofr ë§ +aofa ë§® +aofq 맯 +aoft ë§° +aofx ë§± +aofv ë§² +aofg ë§³ +aoa ë§´ +aoq ë§µ +aoqt ë§¶ +aot ë§· +aoT 맸 +aod ë§¹ +aow 맺 +aoc ë§» +aoz ë§¼ +aox ë§½ +aov ë§¾ +aog ë§¿ +air ë¨ +aiR 먂 +airt 먃 +ais 먄 +aisw 먅 +aisg 먆 +aie 먇 +aif 먈 +aifr 먉 +aifa 먊 +aifq 먋 +aift 먌 +aifx ë¨ +aifv 먎 +aifg ë¨ +aia ë¨ +aiq 먑 +aiqt 먒 +ait 먓 +aiT 먔 +aid 먕 +aiw 먖 +aic 먗 +aiz 먘 +aix 먙 +aiv 먚 +aig 먛 +aOr ë¨ +aOR 먞 +aOrt 먟 +aOs ë¨ +aOsw 먡 +aOsg 먢 +aOe 먣 +aOf 먤 +aOfr 먥 +aOfa 먦 +aOfq 먧 +aOft 먨 +aOfx 먩 +aOfv 먪 +aOfg 먫 +aOa 먬 +aOq ë¨ +aOqt 먮 +aOt 먯 +aOT 먰 +aOd 먱 +aOw 먲 +aOc 먳 +aOz 먴 +aOx 먵 +aOv 먶 +aOg 먷 +ajr 먹 +ajR 먺 +ajrt 먻 +ajs 먼 +ajsw 먽 +ajsg 먾 +aje 먿 +ajf ë©€ +ajfr ë© +ajfa ë©‚ +ajfq 멃 +ajft ë©„ +ajfx ë©… +ajfv 멆 +ajfg 멇 +aja 멈 +ajq 멉 +ajqt 멊 +ajt ë©‹ +ajT 멌 +ajd ë© +ajw 멎 +ajc ë© +ajz ë© +ajx ë©‘ +ajv ë©’ +ajg ë©“ +apr ë©• +apR ë©– +aprt ë©— +aps 멘 +apsw ë©™ +apsg 멚 +ape ë©› +apf 멜 +apfr ë© +apfa 멞 +apfq 멟 +apft ë© +apfx ë©¡ +apfv ë©¢ +apfg ë©£ +apa 멤 +apq ë©¥ +apqt 멦 +apt ë©§ +apT 멨 +apd ë©© +apw 멪 +apc ë©« +apz 멬 +apx ë© +apv ë©® +apg 멯 +aur 멱 +auR 멲 +aurt 멳 +aus ë©´ +ausw 멵 +ausg ë©¶ +aue ë©· +auf 멸 +aufr 멹 +aufa 멺 +aufq ë©» +auft 멼 +aufx 멽 +aufv 멾 +aufg ë©¿ +aua 몀 +auq ëª +auqt 몂 +aut 몃 +auT 몄 +aud 명 +auw 몆 +auc 몇 +auz 몈 +aux 몉 +auv 몊 +aug 몋 +aPr ëª +aPR 몎 +aPrt ëª +aPs ëª +aPsw 몑 +aPsg 몒 +aPe 몓 +aPf 몔 +aPfr 몕 +aPfa 몖 +aPfq 몗 +aPft 몘 +aPfx 몙 +aPfv 몚 +aPfg 몛 +aPa 몜 +aPq ëª +aPqt 몞 +aPt 몟 +aPT ëª +aPd 몡 +aPw 몢 +aPc 몣 +aPz 몤 +aPx 몥 +aPv 몦 +aPg 몧 +ahr 목 +ahR 몪 +ahrt 몫 +ahs 몬 +ahsw ëª +ahsg 몮 +ahe 몯 +ahf 몰 +ahfr 몱 +ahfa 몲 +ahfq 몳 +ahft 몴 +ahfx 몵 +ahfv 몶 +ahfg 몷 +aha 몸 +ahq 몹 +ahqt 몺 +aht 못 +ahT 몼 +ahd 몽 +ahw 몾 +ahc 몿 +ahz ë«€ +ahx ë« +ahv ë«‚ +ahg 뫃 +ahkr ë«… +ahkR 뫆 +ahkrt 뫇 +ahks 뫈 +ahksw 뫉 +ahksg 뫊 +ahke ë«‹ +ahkf 뫌 +ahkfr ë« +ahkfa 뫎 +ahkfq ë« +ahkft ë« +ahkfx ë«‘ +ahkfv ë«’ +ahkfg ë«“ +ahka ë«” +ahkq ë«• +ahkqt ë«– +ahkt ë«— +ahkT 뫘 +ahkd ë«™ +ahkw 뫚 +ahkc ë«› +ahkz 뫜 +ahkx ë« +ahkv 뫞 +ahkg 뫟 +ahor ë«¡ +ahoR ë«¢ +ahort ë«£ +ahos 뫤 +ahosw ë«¥ +ahosg 뫦 +ahoe ë«§ +ahof 뫨 +ahofr ë«© +ahofa 뫪 +ahofq ë«« +ahoft 뫬 +ahofx ë« +ahofv ë«® +ahofg 뫯 +ahoa ë«° +ahoq 뫱 +ahoqt 뫲 +ahot 뫳 +ahoT ë«´ +ahod 뫵 +ahow ë«¶ +ahoc ë«· +ahoz 뫸 +ahox 뫹 +ahov 뫺 +ahog ë«» +ahlr 뫽 +ahlR 뫾 +ahlrt ë«¿ +ahls 묀 +ahlsw ë¬ +ahlsg 묂 +ahle 묃 +ahlf 묄 +ahlfr 묅 +ahlfa 묆 +ahlfq 묇 +ahlft 묈 +ahlfx 묉 +ahlfv 묊 +ahlfg 묋 +ahla 묌 +ahlq ë¬ +ahlqt 묎 +ahlt ë¬ +ahlT ë¬ +ahld 묑 +ahlw 묒 +ahlc 묓 +ahlz 묔 +ahlx 묕 +ahlv 묖 +ahlg 묗 +ayr 묙 +ayR 묚 +ayrt 묛 +ays 묜 +aysw ë¬ +aysg 묞 +aye 묟 +ayf ë¬ +ayfr 묡 +ayfa 묢 +ayfq 묣 +ayft 묤 +ayfx 묥 +ayfv 묦 +ayfg 묧 +aya 묨 +ayq 묩 +ayqt 묪 +ayt 묫 +ayT 묬 +ayd ë¬ +ayw 묮 +ayc 묯 +ayz 묰 +ayx 묱 +ayv 묲 +ayg 묳 +anr 묵 +anR 묶 +anrt 묷 +ans 문 +answ 묹 +ansg 묺 +ane 묻 +anf 물 +anfr 묽 +anfa 묾 +anfq 묿 +anft ë€ +anfx ë +anfv ë‚ +anfg ëƒ +ana ë„ +anq ë… +anqt ë† +ant ë‡ +anT ëˆ +and ë‰ +anw ëŠ +anc ë‹ +anz ëŒ +anx ë +anv ëŽ +ang ë +anjr ë‘ +anjR ë’ +anjrt ë“ +anjs ë” +anjsw ë• +anjsg ë– +anje ë— +anjf ë˜ +anjfr ë™ +anjfa ëš +anjfq ë› +anjft ëœ +anjfx ë +anjfv ëž +anjfg ëŸ +anja ë +anjq ë¡ +anjqt ë¢ +anjt ë£ +anjT ë¤ +anjd ë¥ +anjw ë¦ +anjc ë§ +anjz ë¨ +anjx ë© +anjv ëª +anjg ë« +anpr ë +anpR ë® +anprt ë¯ +anps ë° +anpsw ë± +anpsg ë² +anpe ë³ +anpf ë´ +anpfr ëµ +anpfa ë¶ +anpfq ë· +anpft ë¸ +anpfx ë¹ +anpfv ëº +anpfg ë» +anpa ë¼ +anpq ë½ +anpqt ë¾ +anpt ë¿ +anpT 뮀 +anpd ë® +anpw 뮂 +anpc 뮃 +anpz 뮄 +anpx ë®… +anpv 뮆 +anpg 뮇 +anlr 뮉 +anlR 뮊 +anlrt 뮋 +anls 뮌 +anlsw ë® +anlsg 뮎 +anle ë® +anlf ë® +anlfr 뮑 +anlfa ë®’ +anlfq 뮓 +anlft ë®” +anlfx 뮕 +anlfv ë®– +anlfg ë®— +anla 뮘 +anlq ë®™ +anlqt 뮚 +anlt ë®› +anlT 뮜 +anld ë® +anlw 뮞 +anlc 뮟 +anlz ë® +anlx 뮡 +anlv 뮢 +anlg 뮣 +abr 뮥 +abR 뮦 +abrt ë®§ +abs 뮨 +absw 뮩 +absg 뮪 +abe 뮫 +abf 뮬 +abfr ë® +abfa ë®® +abfq 뮯 +abft ë®° +abfx ë®± +abfv 뮲 +abfg 뮳 +aba ë®´ +abq 뮵 +abqt ë®¶ +abt ë®· +abT 뮸 +abd 뮹 +abw 뮺 +abc ë®» +abz 뮼 +abx 뮽 +abv 뮾 +abg 뮿 +amr ë¯ +amR 믂 +amrt 믃 +ams 믄 +amsw 믅 +amsg 믆 +ame 믇 +amf 믈 +amfr 믉 +amfa 믊 +amfq 믋 +amft 믌 +amfx ë¯ +amfv 믎 +amfg ë¯ +ama ë¯ +amq 믑 +amqt 믒 +amt 믓 +amT 믔 +amd 믕 +amw 믖 +amc 믗 +amz 믘 +amx 믙 +amv 믚 +amg 믛 +amlr ë¯ +amlR 믞 +amlrt 믟 +amls ë¯ +amlsw 믡 +amlsg 믢 +amle 믣 +amlf 믤 +amlfr 믥 +amlfa 믦 +amlfq 믧 +amlft 믨 +amlfx 믩 +amlfv 믪 +amlfg 믫 +amla 믬 +amlq ë¯ +amlqt 믮 +amlt 믯 +amlT 믰 +amld 믱 +amlw 믲 +amlc 믳 +amlz 믴 +amlx 믵 +amlv 믶 +amlg 믷 +alr 믹 +alR 믺 +alrt 믻 +als 민 +alsw 믽 +alsg 믾 +ale 믿 +alf ë°€ +alfr ë° +alfa ë°‚ +alfq ë°ƒ +alft ë°„ +alfx ë°… +alfv ë°† +alfg ë°‡ +ala ë°ˆ +alq ë°‰ +alqt ë°Š +alt ë°‹ +alT ë°Œ +ald ë° +alw ë°Ž +alc ë° +alz ë° +alx ë°‘ +alv ë°’ +alg ë°“ +qkr ë°• +qkR ë°– +qkrt ë°— +qks ë°˜ +qksw ë°™ +qksg ë°š +qke ë°› +qkf ë°œ +qkfr ë° +qkfa ë°ž +qkfq ë°Ÿ +qkft ë° +qkfx ë°¡ +qkfv ë°¢ +qkfg ë°£ +qka ë°¤ +qkq ë°¥ +qkqt ë°¦ +qkt ë°§ +qkT ë°¨ +qkd ë°© +qkw ë°ª +qkc ë°« +qkz ë°¬ +qkx ë° +qkv ë°® +qkg ë°¯ +qor ë°± +qoR ë°² +qort ë°³ +qos ë°´ +qosw ë°µ +qosg ë°¶ +qoe ë°· +qof ë°¸ +qofr ë°¹ +qofa ë°º +qofq ë°» +qoft ë°¼ +qofx ë°½ +qofv ë°¾ +qofg ë°¿ +qoa ë±€ +qoq ë± +qoqt 뱂 +qot 뱃 +qoT 뱄 +qod ë±… +qow 뱆 +qoc 뱇 +qoz 뱈 +qox 뱉 +qov 뱊 +qog 뱋 +qir ë± +qiR 뱎 +qirt ë± +qis ë± +qisw 뱑 +qisg ë±’ +qie 뱓 +qif ë±” +qifr 뱕 +qifa ë±– +qifq ë±— +qift 뱘 +qifx ë±™ +qifv 뱚 +qifg ë±› +qia 뱜 +qiq ë± +qiqt 뱞 +qit 뱟 +qiT ë± +qid 뱡 +qiw ë±¢ +qic ë±£ +qiz 뱤 +qix ë±¥ +qiv 뱦 +qig ë±§ +qOr 뱩 +qOR 뱪 +qOrt 뱫 +qOs 뱬 +qOsw ë± +qOsg ë±® +qOe 뱯 +qOf ë±° +qOfr ë±± +qOfa ë±² +qOfq ë±³ +qOft ë±´ +qOfx ë±µ +qOfv ë±¶ +qOfg ë±· +qOa 뱸 +qOq ë±¹ +qOqt 뱺 +qOt ë±» +qOT ë±¼ +qOd ë±½ +qOw ë±¾ +qOc 뱿 +qOz ë²€ +qOx ë² +qOv 벂 +qOg 벃 +qjr ë²… +qjR 벆 +qjrt 벇 +qjs 번 +qjsw 벉 +qjsg 벊 +qje 벋 +qjf 벌 +qjfr ë² +qjfa 벎 +qjfq ë² +qjft ë² +qjfx 벑 +qjfv ë²’ +qjfg 벓 +qja ë²” +qjq 법 +qjqt ë²– +qjt ë²— +qjT 벘 +qjd ë²™ +qjw 벚 +qjc ë²› +qjz 벜 +qjx ë² +qjv 벞 +qjg 벟 +qpr 벡 +qpR ë²¢ +qprt ë²£ +qps 벤 +qpsw ë²¥ +qpsg 벦 +qpe ë²§ +qpf 벨 +qpfr 벩 +qpfa 벪 +qpfq 벫 +qpft 벬 +qpfx ë² +qpfv ë²® +qpfg 벯 +qpa ë²° +qpq ë²± +qpqt ë²² +qpt ë²³ +qpT ë²´ +qpd ë²µ +qpw ë²¶ +qpc ë²· +qpz 벸 +qpx ë²¹ +qpv 벺 +qpg ë²» +qur ë²½ +quR ë²¾ +qurt 벿 +qus ë³€ +qusw ë³ +qusg 볂 +que 볃 +quf 별 +qufr ë³… +qufa 볆 +qufq 볇 +quft 볈 +qufx 볉 +qufv 볊 +qufg 볋 +qua 볌 +quq ë³ +quqt 볎 +qut ë³ +quT ë³ +qud 병 +quw ë³’ +quc 볓 +quz ë³” +qux 볕 +quv ë³– +qug ë³— +qPr ë³™ +qPR 볚 +qPrt ë³› +qPs 볜 +qPsw ë³ +qPsg 볞 +qPe 볟 +qPf ë³ +qPfr 볡 +qPfa ë³¢ +qPfq ë³£ +qPft 볤 +qPfx ë³¥ +qPfv 볦 +qPfg ë³§ +qPa 볨 +qPq 볩 +qPqt 볪 +qPt 볫 +qPT 볬 +qPd ë³ +qPw ë³® +qPc 볯 +qPz ë³° +qPx ë³± +qPv ë³² +qPg ë³³ +qhr ë³µ +qhR ë³¶ +qhrt ë³· +qhs 본 +qhsw ë³¹ +qhsg 볺 +qhe ë³» +qhf ë³¼ +qhfr ë³½ +qhfa ë³¾ +qhfq 볿 +qhft ë´€ +qhfx ë´ +qhfv ë´‚ +qhfg ë´ƒ +qha ë´„ +qhq ë´… +qhqt ë´† +qht ë´‡ +qhT ë´ˆ +qhd ë´‰ +qhw ë´Š +qhc ë´‹ +qhz ë´Œ +qhx ë´ +qhv ë´Ž +qhg ë´ +qhkr ë´‘ +qhkR ë´’ +qhkrt ë´“ +qhks ë´” +qhksw ë´• +qhksg ë´– +qhke ë´— +qhkf ë´˜ +qhkfr ë´™ +qhkfa ë´š +qhkfq ë´› +qhkft ë´œ +qhkfx ë´ +qhkfv ë´ž +qhkfg ë´Ÿ +qhka ë´ +qhkq ë´¡ +qhkqt ë´¢ +qhkt ë´£ +qhkT ë´¤ +qhkd ë´¥ +qhkw ë´¦ +qhkc ë´§ +qhkz ë´¨ +qhkx ë´© +qhkv ë´ª +qhkg ë´« +qhor ë´ +qhoR ë´® +qhort ë´¯ +qhos ë´° +qhosw ë´± +qhosg ë´² +qhoe ë´³ +qhof ë´´ +qhofr ë´µ +qhofa ë´¶ +qhofq ë´· +qhoft ë´¸ +qhofx ë´¹ +qhofv ë´º +qhofg ë´» +qhoa ë´¼ +qhoq ë´½ +qhoqt ë´¾ +qhot ë´¿ +qhoT ëµ€ +qhod ëµ +qhow 뵂 +qhoc 뵃 +qhoz 뵄 +qhox ëµ… +qhov 뵆 +qhog 뵇 +qhlr 뵉 +qhlR 뵊 +qhlrt 뵋 +qhls 뵌 +qhlsw ëµ +qhlsg 뵎 +qhle ëµ +qhlf ëµ +qhlfr 뵑 +qhlfa ëµ’ +qhlfq 뵓 +qhlft ëµ” +qhlfx 뵕 +qhlfv ëµ– +qhlfg ëµ— +qhla 뵘 +qhlq ëµ™ +qhlqt 뵚 +qhlt ëµ› +qhlT 뵜 +qhld ëµ +qhlw 뵞 +qhlc 뵟 +qhlz ëµ +qhlx 뵡 +qhlv ëµ¢ +qhlg ëµ£ +qyr ëµ¥ +qyR 뵦 +qyrt ëµ§ +qys 뵨 +qysw 뵩 +qysg 뵪 +qye 뵫 +qyf 뵬 +qyfr ëµ +qyfa ëµ® +qyfq 뵯 +qyft ëµ° +qyfx ëµ± +qyfv ëµ² +qyfg ëµ³ +qya ëµ´ +qyq ëµµ +qyqt ëµ¶ +qyt ëµ· +qyT 뵸 +qyd ëµ¹ +qyw 뵺 +qyc ëµ» +qyz ëµ¼ +qyx ëµ½ +qyv ëµ¾ +qyg 뵿 +qnr ë¶ +qnR ë¶‚ +qnrt 붃 +qns ë¶„ +qnsw ë¶… +qnsg 붆 +qne 붇 +qnf 불 +qnfr 붉 +qnfa ë¶Š +qnfq ë¶‹ +qnft ë¶Œ +qnfx ë¶ +qnfv ë¶Ž +qnfg ë¶ +qna ë¶ +qnq ë¶‘ +qnqt ë¶’ +qnt ë¶“ +qnT ë¶” +qnd ë¶• +qnw ë¶– +qnc ë¶— +qnz 붘 +qnx ë¶™ +qnv ë¶š +qng ë¶› +qnjr ë¶ +qnjR ë¶ž +qnjrt ë¶Ÿ +qnjs ë¶ +qnjsw ë¶¡ +qnjsg ë¶¢ +qnje ë¶£ +qnjf 붤 +qnjfr ë¶¥ +qnjfa 붦 +qnjfq ë¶§ +qnjft 붨 +qnjfx ë¶© +qnjfv 붪 +qnjfg ë¶« +qnja 붬 +qnjq ë¶ +qnjqt ë¶® +qnjt 붯 +qnjT ë¶° +qnjd ë¶± +qnjw ë¶² +qnjc ë¶³ +qnjz ë¶´ +qnjx ë¶µ +qnjv ë¶¶ +qnjg ë¶· +qnpr ë¶¹ +qnpR 붺 +qnprt ë¶» +qnps ë¶¼ +qnpsw ë¶½ +qnpsg ë¶¾ +qnpe ë¶¿ +qnpf ë·€ +qnpfr ë· +qnpfa ë·‚ +qnpfq ë·ƒ +qnpft ë·„ +qnpfx ë·… +qnpfv ë·† +qnpfg ë·‡ +qnpa ë·ˆ +qnpq ë·‰ +qnpqt ë·Š +qnpt ë·‹ +qnpT ë·Œ +qnpd ë· +qnpw ë·Ž +qnpc ë· +qnpz ë· +qnpx ë·‘ +qnpv ë·’ +qnpg ë·“ +qnlr ë·• +qnlR ë·– +qnlrt ë·— +qnls ë·˜ +qnlsw ë·™ +qnlsg ë·š +qnle ë·› +qnlf ë·œ +qnlfr ë· +qnlfa ë·ž +qnlfq ë·Ÿ +qnlft ë· +qnlfx ë·¡ +qnlfv ë·¢ +qnlfg ë·£ +qnla ë·¤ +qnlq ë·¥ +qnlqt ë·¦ +qnlt ë·§ +qnlT ë·¨ +qnld ë·© +qnlw ë·ª +qnlc ë·« +qnlz ë·¬ +qnlx ë· +qnlv ë·® +qnlg ë·¯ +qbr ë·± +qbR ë·² +qbrt ë·³ +qbs ë·´ +qbsw ë·µ +qbsg ë·¶ +qbe ë·· +qbf ë·¸ +qbfr ë·¹ +qbfa ë·º +qbfq ë·» +qbft ë·¼ +qbfx ë·½ +qbfv ë·¾ +qbfg ë·¿ +qba 븀 +qbq ë¸ +qbqt 븂 +qbt 븃 +qbT 븄 +qbd 븅 +qbw 븆 +qbc 븇 +qbz 븈 +qbx 븉 +qbv 븊 +qbg 븋 +qmr ë¸ +qmR 븎 +qmrt ë¸ +qms ë¸ +qmsw 븑 +qmsg 븒 +qme 븓 +qmf 블 +qmfr 븕 +qmfa 븖 +qmfq 븗 +qmft 븘 +qmfx 븙 +qmfv 븚 +qmfg 븛 +qma 븜 +qmq ë¸ +qmqt 븞 +qmt 븟 +qmT ë¸ +qmd 븡 +qmw 븢 +qmc 븣 +qmz 븤 +qmx 븥 +qmv 븦 +qmg 븧 +qmlr 븩 +qmlR 븪 +qmlrt 븫 +qmls 븬 +qmlsw ë¸ +qmlsg 븮 +qmle 븯 +qmlf 븰 +qmlfr 븱 +qmlfa 븲 +qmlfq 븳 +qmlft 븴 +qmlfx 븵 +qmlfv 븶 +qmlfg 븷 +qmla 븸 +qmlq 븹 +qmlqt 븺 +qmlt 븻 +qmlT 븼 +qmld 븽 +qmlw 븾 +qmlc 븿 +qmlz ë¹€ +qmlx ë¹ +qmlv 빂 +qmlg 빃 +qlr ë¹… +qlR 빆 +qlrt 빇 +qls 빈 +qlsw 빉 +qlsg 빊 +qle 빋 +qlf 빌 +qlfr ë¹ +qlfa 빎 +qlfq ë¹ +qlft ë¹ +qlfx 빑 +qlfv ë¹’ +qlfg 빓 +qla ë¹” +qlq 빕 +qlqt ë¹– +qlt ë¹— +qlT 빘 +qld ë¹™ +qlw 빚 +qlc ë¹› +qlz 빜 +qlx ë¹ +qlv 빞 +qlg 빟 +Qkr 빡 +QkR ë¹¢ +Qkrt ë¹£ +Qks 빤 +Qksw ë¹¥ +Qksg 빦 +Qke ë¹§ +Qkf 빨 +Qkfr 빩 +Qkfa 빪 +Qkfq 빫 +Qkft 빬 +Qkfx ë¹ +Qkfv ë¹® +Qkfg 빯 +Qka ë¹° +Qkq ë¹± +Qkqt ë¹² +Qkt ë¹³ +QkT ë¹´ +Qkd ë¹µ +Qkw ë¹¶ +Qkc ë¹· +Qkz 빸 +Qkx ë¹¹ +Qkv 빺 +Qkg ë¹» +Qor ë¹½ +QoR ë¹¾ +Qort 빿 +Qos 뺀 +Qosw ëº +Qosg 뺂 +Qoe 뺃 +Qof 뺄 +Qofr 뺅 +Qofa 뺆 +Qofq 뺇 +Qoft 뺈 +Qofx 뺉 +Qofv 뺊 +Qofg 뺋 +Qoa 뺌 +Qoq ëº +Qoqt 뺎 +Qot ëº +QoT ëº +Qod 뺑 +Qow 뺒 +Qoc 뺓 +Qoz 뺔 +Qox 뺕 +Qov 뺖 +Qog 뺗 +Qir 뺙 +QiR 뺚 +Qirt 뺛 +Qis 뺜 +Qisw ëº +Qisg 뺞 +Qie 뺟 +Qif ëº +Qifr 뺡 +Qifa 뺢 +Qifq 뺣 +Qift 뺤 +Qifx 뺥 +Qifv 뺦 +Qifg 뺧 +Qia 뺨 +Qiq 뺩 +Qiqt 뺪 +Qit 뺫 +QiT 뺬 +Qid ëº +Qiw 뺮 +Qic 뺯 +Qiz 뺰 +Qix 뺱 +Qiv 뺲 +Qig 뺳 +QOr 뺵 +QOR 뺶 +QOrt 뺷 +QOs 뺸 +QOsw 뺹 +QOsg 뺺 +QOe 뺻 +QOf 뺼 +QOfr 뺽 +QOfa 뺾 +QOfq 뺿 +QOft 뻀 +QOfx ë» +QOfv 뻂 +QOfg 뻃 +QOa 뻄 +QOq ë»… +QOqt 뻆 +QOt 뻇 +QOT 뻈 +QOd 뻉 +QOw 뻊 +QOc 뻋 +QOz 뻌 +QOx ë» +QOv 뻎 +QOg ë» +Qjr 뻑 +QjR ë»’ +Qjrt 뻓 +Qjs ë»” +Qjsw 뻕 +Qjsg ë»– +Qje ë»— +Qjf 뻘 +Qjfr ë»™ +Qjfa 뻚 +Qjfq ë»› +Qjft 뻜 +Qjfx ë» +Qjfv 뻞 +Qjfg 뻟 +Qja ë» +Qjq 뻡 +Qjqt 뻢 +Qjt 뻣 +QjT 뻤 +Qjd 뻥 +Qjw 뻦 +Qjc ë»§ +Qjz 뻨 +Qjx 뻩 +Qjv 뻪 +Qjg 뻫 +Qpr ë» +QpR ë»® +Qprt 뻯 +Qps ë»° +Qpsw ë»± +Qpsg 뻲 +Qpe 뻳 +Qpf ë»´ +Qpfr 뻵 +Qpfa ë»¶ +Qpfq ë»· +Qpft 뻸 +Qpfx 뻹 +Qpfv 뻺 +Qpfg ë»» +Qpa 뻼 +Qpq 뻽 +Qpqt 뻾 +Qpt 뻿 +QpT ë¼€ +Qpd ë¼ +Qpw 뼂 +Qpc 뼃 +Qpz 뼄 +Qpx ë¼… +Qpv 뼆 +Qpg 뼇 +Qur 뼉 +QuR 뼊 +Qurt 뼋 +Qus 뼌 +Qusw ë¼ +Qusg 뼎 +Que ë¼ +Quf ë¼ +Qufr 뼑 +Qufa ë¼’ +Qufq 뼓 +Quft ë¼” +Qufx 뼕 +Qufv ë¼– +Qufg ë¼— +Qua 뼘 +Quq ë¼™ +Quqt 뼚 +Qut ë¼› +QuT 뼜 +Qud ë¼ +Quw 뼞 +Quc 뼟 +Quz ë¼ +Qux 뼡 +Quv ë¼¢ +Qug ë¼£ +QPr ë¼¥ +QPR 뼦 +QPrt ë¼§ +QPs 뼨 +QPsw 뼩 +QPsg 뼪 +QPe 뼫 +QPf 뼬 +QPfr ë¼ +QPfa ë¼® +QPfq 뼯 +QPft ë¼° +QPfx ë¼± +QPfv ë¼² +QPfg ë¼³ +QPa ë¼´ +QPq ë¼µ +QPqt ë¼¶ +QPt ë¼· +QPT 뼸 +QPd ë¼¹ +QPw 뼺 +QPc ë¼» +QPz ë¼¼ +QPx ë¼½ +QPv ë¼¾ +QPg 뼿 +Qhr ë½ +QhR 뽂 +Qhrt 뽃 +Qhs 뽄 +Qhsw ë½… +Qhsg 뽆 +Qhe 뽇 +Qhf 뽈 +Qhfr 뽉 +Qhfa 뽊 +Qhfq 뽋 +Qhft 뽌 +Qhfx ë½ +Qhfv 뽎 +Qhfg ë½ +Qha ë½ +Qhq 뽑 +Qhqt ë½’ +Qht 뽓 +QhT ë½” +Qhd 뽕 +Qhw ë½– +Qhc ë½— +Qhz 뽘 +Qhx ë½™ +Qhv 뽚 +Qhg ë½› +Qhkr ë½ +QhkR 뽞 +Qhkrt 뽟 +Qhks ë½ +Qhksw 뽡 +Qhksg ë½¢ +Qhke ë½£ +Qhkf 뽤 +Qhkfr ë½¥ +Qhkfa 뽦 +Qhkfq ë½§ +Qhkft 뽨 +Qhkfx 뽩 +Qhkfv 뽪 +Qhkfg 뽫 +Qhka 뽬 +Qhkq ë½ +Qhkqt ë½® +Qhkt 뽯 +QhkT ë½° +Qhkd ë½± +Qhkw ë½² +Qhkc ë½³ +Qhkz ë½´ +Qhkx ë½µ +Qhkv ë½¶ +Qhkg ë½· +Qhor ë½¹ +QhoR 뽺 +Qhort ë½» +Qhos ë½¼ +Qhosw ë½½ +Qhosg ë½¾ +Qhoe 뽿 +Qhof ë¾€ +Qhofr ë¾ +Qhofa 뾂 +Qhofq 뾃 +Qhoft 뾄 +Qhofx ë¾… +Qhofv 뾆 +Qhofg 뾇 +Qhoa 뾈 +Qhoq 뾉 +Qhoqt 뾊 +Qhot 뾋 +QhoT 뾌 +Qhod ë¾ +Qhow 뾎 +Qhoc ë¾ +Qhoz ë¾ +Qhox 뾑 +Qhov ë¾’ +Qhog 뾓 +Qhlr 뾕 +QhlR ë¾– +Qhlrt ë¾— +Qhls 뾘 +Qhlsw ë¾™ +Qhlsg 뾚 +Qhle ë¾› +Qhlf 뾜 +Qhlfr ë¾ +Qhlfa 뾞 +Qhlfq 뾟 +Qhlft ë¾ +Qhlfx 뾡 +Qhlfv ë¾¢ +Qhlfg ë¾£ +Qhla 뾤 +Qhlq ë¾¥ +Qhlqt 뾦 +Qhlt ë¾§ +QhlT 뾨 +Qhld 뾩 +Qhlw 뾪 +Qhlc 뾫 +Qhlz 뾬 +Qhlx ë¾ +Qhlv ë¾® +Qhlg 뾯 +Qyr ë¾± +QyR ë¾² +Qyrt ë¾³ +Qys ë¾´ +Qysw ë¾µ +Qysg ë¾¶ +Qye ë¾· +Qyf 뾸 +Qyfr ë¾¹ +Qyfa 뾺 +Qyfq ë¾» +Qyft ë¾¼ +Qyfx ë¾½ +Qyfv ë¾¾ +Qyfg 뾿 +Qya ë¿€ +Qyq ë¿ +Qyqt ë¿‚ +Qyt 뿃 +QyT ë¿„ +Qyd ë¿… +Qyw 뿆 +Qyc 뿇 +Qyz 뿈 +Qyx 뿉 +Qyv 뿊 +Qyg ë¿‹ +Qnr ë¿ +QnR 뿎 +Qnrt ë¿ +Qns ë¿ +Qnsw ë¿‘ +Qnsg ë¿’ +Qne ë¿“ +Qnf ë¿” +Qnfr ë¿• +Qnfa ë¿– +Qnfq ë¿— +Qnft 뿘 +Qnfx ë¿™ +Qnfv 뿚 +Qnfg ë¿› +Qna 뿜 +Qnq ë¿ +Qnqt 뿞 +Qnt 뿟 +QnT ë¿ +Qnd ë¿¡ +Qnw ë¿¢ +Qnc ë¿£ +Qnz 뿤 +Qnx ë¿¥ +Qnv 뿦 +Qng ë¿§ +Qnjr ë¿© +QnjR 뿪 +Qnjrt ë¿« +Qnjs 뿬 +Qnjsw ë¿ +Qnjsg ë¿® +Qnje 뿯 +Qnjf ë¿° +Qnjfr 뿱 +Qnjfa 뿲 +Qnjfq 뿳 +Qnjft ë¿´ +Qnjfx 뿵 +Qnjfv ë¿¶ +Qnjfg ë¿· +Qnja 뿸 +Qnjq 뿹 +Qnjqt 뿺 +Qnjt ë¿» +QnjT 뿼 +Qnjd 뿽 +Qnjw 뿾 +Qnjc ë¿¿ +Qnjz 쀀 +Qnjx ì€ +Qnjv 쀂 +Qnjg 쀃 +Qnpr 쀅 +QnpR 쀆 +Qnprt 쀇 +Qnps 쀈 +Qnpsw 쀉 +Qnpsg 쀊 +Qnpe 쀋 +Qnpf 쀌 +Qnpfr ì€ +Qnpfa 쀎 +Qnpfq ì€ +Qnpft ì€ +Qnpfx 쀑 +Qnpfv 쀒 +Qnpfg 쀓 +Qnpa 쀔 +Qnpq 쀕 +Qnpqt 쀖 +Qnpt 쀗 +QnpT 쀘 +Qnpd 쀙 +Qnpw 쀚 +Qnpc 쀛 +Qnpz 쀜 +Qnpx ì€ +Qnpv 쀞 +Qnpg 쀟 +Qnlr 쀡 +QnlR 쀢 +Qnlrt 쀣 +Qnls 쀤 +Qnlsw 쀥 +Qnlsg 쀦 +Qnle 쀧 +Qnlf 쀨 +Qnlfr 쀩 +Qnlfa 쀪 +Qnlfq 쀫 +Qnlft 쀬 +Qnlfx ì€ +Qnlfv 쀮 +Qnlfg 쀯 +Qnla 쀰 +Qnlq 쀱 +Qnlqt 쀲 +Qnlt 쀳 +QnlT 쀴 +Qnld 쀵 +Qnlw 쀶 +Qnlc 쀷 +Qnlz 쀸 +Qnlx 쀹 +Qnlv 쀺 +Qnlg 쀻 +Qbr 쀽 +QbR 쀾 +Qbrt 쀿 +Qbs ì€ +Qbsw ì +Qbsg ì‚ +Qbe ìƒ +Qbf ì„ +Qbfr ì… +Qbfa ì† +Qbfq ì‡ +Qbft ìˆ +Qbfx ì‰ +Qbfv ìŠ +Qbfg ì‹ +Qba ìŒ +Qbq ì +Qbqt ìŽ +Qbt ì +QbT ì +Qbd ì‘ +Qbw ì’ +Qbc ì“ +Qbz ì” +Qbx ì• +Qbv ì– +Qbg ì— +Qmr ì™ +QmR ìš +Qmrt ì› +Qms ìœ +Qmsw ì +Qmsg ìž +Qme ìŸ +Qmf ì +Qmfr ì¡ +Qmfa ì¢ +Qmfq ì£ +Qmft ì¤ +Qmfx ì¥ +Qmfv ì¦ +Qmfg ì§ +Qma ì¨ +Qmq ì© +Qmqt ìª +Qmt ì« +QmT ì¬ +Qmd ì +Qmw ì® +Qmc ì¯ +Qmz ì° +Qmx ì± +Qmv ì² +Qmg ì³ +Qmlr ìµ +QmlR ì¶ +Qmlrt ì· +Qmls ì¸ +Qmlsw ì¹ +Qmlsg ìº +Qmle ì» +Qmlf ì¼ +Qmlfr ì½ +Qmlfa ì¾ +Qmlfq ì¿ +Qmlft ì‚€ +Qmlfx ì‚ +Qmlfv ì‚‚ +Qmlfg 삃 +Qmla ì‚„ +Qmlq ì‚… +Qmlqt 삆 +Qmlt 삇 +QmlT 삈 +Qmld 삉 +Qmlw 삊 +Qmlc ì‚‹ +Qmlz 삌 +Qmlx ì‚ +Qmlv 삎 +Qmlg ì‚ +Qlr ì‚‘ +QlR ì‚’ +Qlrt ì‚“ +Qls ì‚” +Qlsw ì‚• +Qlsg ì‚– +Qle ì‚— +Qlf 삘 +Qlfr ì‚™ +Qlfa 삚 +Qlfq ì‚› +Qlft 삜 +Qlfx ì‚ +Qlfv 삞 +Qlfg 삟 +Qla ì‚ +Qlq ì‚¡ +Qlqt ì‚¢ +Qlt ì‚£ +QlT 삤 +Qld ì‚¥ +Qlw 삦 +Qlc ì‚§ +Qlz 삨 +Qlx ì‚© +Qlv 삪 +Qlg ì‚« +tkr ì‚ +tkR ì‚® +tkrt 삯 +tks ì‚° +tksw 삱 +tksg 삲 +tke 삳 +tkf ì‚´ +tkfr 삵 +tkfa ì‚¶ +tkfq ì‚· +tkft 삸 +tkfx 삹 +tkfv 삺 +tkfg ì‚» +tka 삼 +tkq 삽 +tkqt 삾 +tkt ì‚¿ +tkT 샀 +tkd ìƒ +tkw 샂 +tkc 샃 +tkz 샄 +tkx 샅 +tkv 샆 +tkg 샇 +tor 색 +toR 샊 +tort 샋 +tos 샌 +tosw ìƒ +tosg 샎 +toe ìƒ +tof ìƒ +tofr 샑 +tofa 샒 +tofq 샓 +toft 샔 +tofx 샕 +tofv 샖 +tofg 샗 +toa 샘 +toq 샙 +toqt 샚 +tot 샛 +toT 샜 +tod ìƒ +tow 샞 +toc 샟 +toz ìƒ +tox 샡 +tov 샢 +tog 샣 +tir 샥 +tiR 샦 +tirt 샧 +tis 샨 +tisw 샩 +tisg 샪 +tie 샫 +tif 샬 +tifr ìƒ +tifa 샮 +tifq 샯 +tift 샰 +tifx 샱 +tifv 샲 +tifg 샳 +tia 샴 +tiq 샵 +tiqt 샶 +tit 샷 +tiT 샸 +tid 샹 +tiw 샺 +tic 샻 +tiz 샼 +tix 샽 +tiv 샾 +tig 샿 +tOr ì„ +tOR ì„‚ +tOrt 섃 +tOs ì„„ +tOsw ì„… +tOsg 섆 +tOe 섇 +tOf 섈 +tOfr 섉 +tOfa 섊 +tOfq ì„‹ +tOft 섌 +tOfx ì„ +tOfv 섎 +tOfg ì„ +tOa ì„ +tOq ì„‘ +tOqt ì„’ +tOt ì„“ +tOT ì„” +tOd ì„• +tOw ì„– +tOc ì„— +tOz 섘 +tOx ì„™ +tOv 섚 +tOg ì„› +tjr ì„ +tjR 섞 +tjrt 섟 +tjs ì„ +tjsw ì„¡ +tjsg ì„¢ +tje ì„£ +tjf 설 +tjfr ì„¥ +tjfa 섦 +tjfq ì„§ +tjft 섨 +tjfx ì„© +tjfv 섪 +tjfg ì„« +tja 섬 +tjq ì„ +tjqt ì„® +tjt 섯 +tjT ì„° +tjd 성 +tjw 섲 +tjc 섳 +tjz ì„´ +tjx 섵 +tjv ì„¶ +tjg ì„· +tpr 섹 +tpR 섺 +tprt ì„» +tps 센 +tpsw 섽 +tpsg 섾 +tpe ì„¿ +tpf ì…€ +tpfr ì… +tpfa ì…‚ +tpfq ì…ƒ +tpft ì…„ +tpfx ì…… +tpfv ì…† +tpfg ì…‡ +tpa ì…ˆ +tpq ì…‰ +tpqt ì…Š +tpt ì…‹ +tpT ì…Œ +tpd ì… +tpw ì…Ž +tpc ì… +tpz ì… +tpx ì…‘ +tpv ì…’ +tpg ì…“ +tur ì…• +tuR ì…– +turt ì…— +tus ì…˜ +tusw ì…™ +tusg ì…š +tue ì…› +tuf ì…œ +tufr ì… +tufa ì…ž +tufq ì…Ÿ +tuft ì… +tufx ì…¡ +tufv ì…¢ +tufg ì…£ +tua ì…¤ +tuq ì…¥ +tuqt ì…¦ +tut ì…§ +tuT ì…¨ +tud ì…© +tuw ì…ª +tuc ì…« +tuz ì…¬ +tux ì… +tuv ì…® +tug ì…¯ +tPr ì…± +tPR ì…² +tPrt ì…³ +tPs ì…´ +tPsw ì…µ +tPsg ì…¶ +tPe ì…· +tPf ì…¸ +tPfr ì…¹ +tPfa ì…º +tPfq ì…» +tPft ì…¼ +tPfx ì…½ +tPfv ì…¾ +tPfg ì…¿ +tPa 솀 +tPq ì† +tPqt 솂 +tPt 솃 +tPT 솄 +tPd 솅 +tPw 솆 +tPc 솇 +tPz 솈 +tPx 솉 +tPv 솊 +tPg 솋 +thr ì† +thR 솎 +thrt ì† +ths ì† +thsw 솑 +thsg 솒 +the 솓 +thf 솔 +thfr 솕 +thfa 솖 +thfq 솗 +thft 솘 +thfx 솙 +thfv 솚 +thfg 솛 +tha 솜 +thq ì† +thqt 솞 +tht 솟 +thT ì† +thd 송 +thw 솢 +thc 솣 +thz 솤 +thx 솥 +thv 솦 +thg 솧 +thkr 솩 +thkR 솪 +thkrt 솫 +thks 솬 +thksw ì† +thksg 솮 +thke 솯 +thkf 솰 +thkfr 솱 +thkfa 솲 +thkfq 솳 +thkft 솴 +thkfx 솵 +thkfv 솶 +thkfg 솷 +thka 솸 +thkq 솹 +thkqt 솺 +thkt 솻 +thkT 솼 +thkd 솽 +thkw 솾 +thkc 솿 +thkz 쇀 +thkx ì‡ +thkv 쇂 +thkg 쇃 +thor 쇅 +thoR 쇆 +thort 쇇 +thos 쇈 +thosw 쇉 +thosg 쇊 +thoe 쇋 +thof 쇌 +thofr ì‡ +thofa 쇎 +thofq ì‡ +thoft ì‡ +thofx 쇑 +thofv 쇒 +thofg 쇓 +thoa 쇔 +thoq 쇕 +thoqt 쇖 +thot 쇗 +thoT 쇘 +thod 쇙 +thow 쇚 +thoc 쇛 +thoz 쇜 +thox ì‡ +thov 쇞 +thog 쇟 +thlr 쇡 +thlR 쇢 +thlrt 쇣 +thls 쇤 +thlsw 쇥 +thlsg 쇦 +thle 쇧 +thlf 쇨 +thlfr 쇩 +thlfa 쇪 +thlfq 쇫 +thlft 쇬 +thlfx ì‡ +thlfv 쇮 +thlfg 쇯 +thla 쇰 +thlq 쇱 +thlqt 쇲 +thlt 쇳 +thlT 쇴 +thld 쇵 +thlw 쇶 +thlc 쇷 +thlz 쇸 +thlx 쇹 +thlv 쇺 +thlg 쇻 +tyr 쇽 +tyR 쇾 +tyrt 쇿 +tys 숀 +tysw ìˆ +tysg 숂 +tye 숃 +tyf 숄 +tyfr 숅 +tyfa 숆 +tyfq 숇 +tyft 숈 +tyfx 숉 +tyfv 숊 +tyfg 숋 +tya 숌 +tyq ìˆ +tyqt 숎 +tyt ìˆ +tyT ìˆ +tyd 숑 +tyw 숒 +tyc 숓 +tyz 숔 +tyx 숕 +tyv 숖 +tyg 숗 +tnr 숙 +tnR 숚 +tnrt 숛 +tns 순 +tnsw ìˆ +tnsg 숞 +tne 숟 +tnf ìˆ +tnfr 숡 +tnfa 숢 +tnfq 숣 +tnft 숤 +tnfx 숥 +tnfv 숦 +tnfg 숧 +tna 숨 +tnq 숩 +tnqt 숪 +tnt 숫 +tnT 숬 +tnd ìˆ +tnw 숮 +tnc 숯 +tnz 숰 +tnx 숱 +tnv 숲 +tng 숳 +tnjr 숵 +tnjR 숶 +tnjrt 숷 +tnjs 숸 +tnjsw 숹 +tnjsg 숺 +tnje 숻 +tnjf 숼 +tnjfr 숽 +tnjfa 숾 +tnjfq 숿 +tnjft 쉀 +tnjfx ì‰ +tnjfv 쉂 +tnjfg 쉃 +tnja 쉄 +tnjq 쉅 +tnjqt 쉆 +tnjt 쉇 +tnjT 쉈 +tnjd 쉉 +tnjw 쉊 +tnjc 쉋 +tnjz 쉌 +tnjx ì‰ +tnjv 쉎 +tnjg ì‰ +tnpr 쉑 +tnpR 쉒 +tnprt 쉓 +tnps 쉔 +tnpsw 쉕 +tnpsg 쉖 +tnpe 쉗 +tnpf 쉘 +tnpfr 쉙 +tnpfa 쉚 +tnpfq 쉛 +tnpft 쉜 +tnpfx ì‰ +tnpfv 쉞 +tnpfg 쉟 +tnpa ì‰ +tnpq 쉡 +tnpqt 쉢 +tnpt 쉣 +tnpT 쉤 +tnpd 쉥 +tnpw 쉦 +tnpc 쉧 +tnpz 쉨 +tnpx 쉩 +tnpv 쉪 +tnpg 쉫 +tnlr ì‰ +tnlR 쉮 +tnlrt 쉯 +tnls 쉰 +tnlsw 쉱 +tnlsg 쉲 +tnle 쉳 +tnlf 쉴 +tnlfr 쉵 +tnlfa 쉶 +tnlfq 쉷 +tnlft 쉸 +tnlfx 쉹 +tnlfv 쉺 +tnlfg 쉻 +tnla 쉼 +tnlq 쉽 +tnlqt 쉾 +tnlt 쉿 +tnlT 슀 +tnld ìŠ +tnlw 슂 +tnlc 슃 +tnlz 슄 +tnlx 슅 +tnlv 슆 +tnlg 슇 +tbr 슉 +tbR 슊 +tbrt 슋 +tbs 슌 +tbsw ìŠ +tbsg 슎 +tbe ìŠ +tbf ìŠ +tbfr 슑 +tbfa 슒 +tbfq 슓 +tbft 슔 +tbfx 슕 +tbfv 슖 +tbfg 슗 +tba 슘 +tbq 슙 +tbqt 슚 +tbt 슛 +tbT 슜 +tbd ìŠ +tbw 슞 +tbc 슟 +tbz ìŠ +tbx 슡 +tbv 슢 +tbg 슣 +tmr 슥 +tmR 슦 +tmrt 슧 +tms 슨 +tmsw 슩 +tmsg 슪 +tme 슫 +tmf 슬 +tmfr ìŠ +tmfa 슮 +tmfq 슯 +tmft 슰 +tmfx 슱 +tmfv 슲 +tmfg 슳 +tma 슴 +tmq 습 +tmqt 슶 +tmt 슷 +tmT 슸 +tmd 승 +tmw 슺 +tmc 슻 +tmz 슼 +tmx 슽 +tmv 슾 +tmg 슿 +tmlr ì‹ +tmlR ì‹‚ +tmlrt 싃 +tmls ì‹„ +tmlsw ì‹… +tmlsg 싆 +tmle 싇 +tmlf 싈 +tmlfr 싉 +tmlfa 싊 +tmlfq ì‹‹ +tmlft 싌 +tmlfx ì‹ +tmlfv 싎 +tmlfg ì‹ +tmla ì‹ +tmlq ì‹‘ +tmlqt ì‹’ +tmlt ì‹“ +tmlT ì‹” +tmld ì‹• +tmlw ì‹– +tmlc ì‹— +tmlz 싘 +tmlx ì‹™ +tmlv 싚 +tmlg ì‹› +tlr ì‹ +tlR 싞 +tlrt 싟 +tls ì‹ +tlsw ì‹¡ +tlsg ì‹¢ +tle ì‹£ +tlf 실 +tlfr ì‹¥ +tlfa 싦 +tlfq ì‹§ +tlft 싨 +tlfx ì‹© +tlfv 싪 +tlfg ì‹« +tla 심 +tlq ì‹ +tlqt ì‹® +tlt 싯 +tlT ì‹° +tld 싱 +tlw 싲 +tlc 싳 +tlz ì‹´ +tlx 싵 +tlv ì‹¶ +tlg ì‹· +Tkr 싹 +TkR 싺 +Tkrt ì‹» +Tks 싼 +Tksw 싽 +Tksg 싾 +Tke ì‹¿ +Tkf 쌀 +Tkfr ìŒ +Tkfa 쌂 +Tkfq 쌃 +Tkft 쌄 +Tkfx 쌅 +Tkfv 쌆 +Tkfg 쌇 +Tka 쌈 +Tkq 쌉 +Tkqt 쌊 +Tkt 쌋 +TkT 쌌 +Tkd ìŒ +Tkw 쌎 +Tkc ìŒ +Tkz ìŒ +Tkx 쌑 +Tkv 쌒 +Tkg 쌓 +Tor 쌕 +ToR 쌖 +Tort 쌗 +Tos 쌘 +Tosw 쌙 +Tosg 쌚 +Toe 쌛 +Tof 쌜 +Tofr ìŒ +Tofa 쌞 +Tofq 쌟 +Toft ìŒ +Tofx 쌡 +Tofv 쌢 +Tofg 쌣 +Toa 쌤 +Toq 쌥 +Toqt 쌦 +Tot 쌧 +ToT 쌨 +Tod 쌩 +Tow 쌪 +Toc 쌫 +Toz 쌬 +Tox ìŒ +Tov 쌮 +Tog 쌯 +Tir 쌱 +TiR 쌲 +Tirt 쌳 +Tis 쌴 +Tisw 쌵 +Tisg 쌶 +Tie 쌷 +Tif 쌸 +Tifr 쌹 +Tifa 쌺 +Tifq 쌻 +Tift 쌼 +Tifx 쌽 +Tifv 쌾 +Tifg 쌿 +Tia ì€ +Tiq ì +Tiqt ì‚ +Tit ìƒ +TiT ì„ +Tid ì… +Tiw ì† +Tic ì‡ +Tiz ìˆ +Tix ì‰ +Tiv ìŠ +Tig ì‹ +TOr ì +TOR ìŽ +TOrt ì +TOs ì +TOsw ì‘ +TOsg ì’ +TOe ì“ +TOf ì” +TOfr ì• +TOfa ì– +TOfq ì— +TOft ì˜ +TOfx ì™ +TOfv ìš +TOfg ì› +TOa ìœ +TOq ì +TOqt ìž +TOt ìŸ +TOT ì +TOd ì¡ +TOw ì¢ +TOc ì£ +TOz ì¤ +TOx ì¥ +TOv ì¦ +TOg ì§ +Tjr ì© +TjR ìª +Tjrt ì« +Tjs ì¬ +Tjsw ì +Tjsg ì® +Tje ì¯ +Tjf ì° +Tjfr ì± +Tjfa ì² +Tjfq ì³ +Tjft ì´ +Tjfx ìµ +Tjfv ì¶ +Tjfg ì· +Tja ì¸ +Tjq ì¹ +Tjqt ìº +Tjt ì» +TjT ì¼ +Tjd ì½ +Tjw ì¾ +Tjc ì¿ +Tjz 쎀 +Tjx ìŽ +Tjv 쎂 +Tjg 쎃 +Tpr 쎅 +TpR 쎆 +Tprt 쎇 +Tps 쎈 +Tpsw 쎉 +Tpsg 쎊 +Tpe 쎋 +Tpf 쎌 +Tpfr ìŽ +Tpfa 쎎 +Tpfq ìŽ +Tpft ìŽ +Tpfx 쎑 +Tpfv 쎒 +Tpfg 쎓 +Tpa 쎔 +Tpq 쎕 +Tpqt 쎖 +Tpt 쎗 +TpT 쎘 +Tpd 쎙 +Tpw 쎚 +Tpc 쎛 +Tpz 쎜 +Tpx ìŽ +Tpv 쎞 +Tpg 쎟 +Tur 쎡 +TuR 쎢 +Turt 쎣 +Tus 쎤 +Tusw 쎥 +Tusg 쎦 +Tue 쎧 +Tuf 쎨 +Tufr 쎩 +Tufa 쎪 +Tufq 쎫 +Tuft 쎬 +Tufx ìŽ +Tufv 쎮 +Tufg 쎯 +Tua 쎰 +Tuq 쎱 +Tuqt 쎲 +Tut 쎳 +TuT 쎴 +Tud 쎵 +Tuw 쎶 +Tuc 쎷 +Tuz 쎸 +Tux 쎹 +Tuv 쎺 +Tug 쎻 +TPr 쎽 +TPR 쎾 +TPrt 쎿 +TPs ì€ +TPsw ì +TPsg ì‚ +TPe ìƒ +TPf ì„ +TPfr ì… +TPfa ì† +TPfq ì‡ +TPft ìˆ +TPfx ì‰ +TPfv ìŠ +TPfg ì‹ +TPa ìŒ +TPq ì +TPqt ìŽ +TPt ì +TPT ì +TPd ì‘ +TPw ì’ +TPc ì“ +TPz ì” +TPx ì• +TPv ì– +TPg ì— +Thr ì™ +ThR ìš +Thrt ì› +Ths ìœ +Thsw ì +Thsg ìž +The ìŸ +Thf ì +Thfr ì¡ +Thfa ì¢ +Thfq ì£ +Thft ì¤ +Thfx ì¥ +Thfv ì¦ +Thfg ì§ +Tha ì¨ +Thq ì© +Thqt ìª +Tht ì« +ThT ì¬ +Thd ì +Thw ì® +Thc ì¯ +Thz ì° +Thx ì± +Thv ì² +Thg ì³ +Thkr ìµ +ThkR ì¶ +Thkrt ì· +Thks ì¸ +Thksw ì¹ +Thksg ìº +Thke ì» +Thkf ì¼ +Thkfr ì½ +Thkfa ì¾ +Thkfq ì¿ +Thkft ì€ +Thkfx ì +Thkfv ì‚ +Thkfg ìƒ +Thka ì„ +Thkq ì… +Thkqt ì† +Thkt ì‡ +ThkT ìˆ +Thkd ì‰ +Thkw ìŠ +Thkc ì‹ +Thkz ìŒ +Thkx ì +Thkv ìŽ +Thkg ì +Thor ì‘ +ThoR ì’ +Thort ì“ +Thos ì” +Thosw ì• +Thosg ì– +Thoe ì— +Thof ì˜ +Thofr ì™ +Thofa ìš +Thofq ì› +Thoft ìœ +Thofx ì +Thofv ìž +Thofg ìŸ +Thoa ì +Thoq ì¡ +Thoqt ì¢ +Thot ì£ +ThoT ì¤ +Thod ì¥ +Thow ì¦ +Thoc ì§ +Thoz ì¨ +Thox ì© +Thov ìª +Thog ì« +Thlr ì +ThlR ì® +Thlrt ì¯ +Thls ì° +Thlsw ì± +Thlsg ì² +Thle ì³ +Thlf ì´ +Thlfr ìµ +Thlfa ì¶ +Thlfq ì· +Thlft ì¸ +Thlfx ì¹ +Thlfv ìº +Thlfg ì» +Thla ì¼ +Thlq ì½ +Thlqt ì¾ +Thlt ì¿ +ThlT ì‘€ +Thld ì‘ +Thlw ì‘‚ +Thlc 쑃 +Thlz ì‘„ +Thlx ì‘… +Thlv 쑆 +Thlg 쑇 +Tyr 쑉 +TyR 쑊 +Tyrt ì‘‹ +Tys 쑌 +Tysw ì‘ +Tysg 쑎 +Tye ì‘ +Tyf ì‘ +Tyfr ì‘‘ +Tyfa ì‘’ +Tyfq ì‘“ +Tyft ì‘” +Tyfx ì‘• +Tyfv ì‘– +Tyfg ì‘— +Tya 쑘 +Tyq ì‘™ +Tyqt 쑚 +Tyt ì‘› +TyT 쑜 +Tyd ì‘ +Tyw 쑞 +Tyc 쑟 +Tyz ì‘ +Tyx ì‘¡ +Tyv ì‘¢ +Tyg ì‘£ +Tnr ì‘¥ +TnR 쑦 +Tnrt ì‘§ +Tns 쑨 +Tnsw ì‘© +Tnsg 쑪 +Tne ì‘« +Tnf 쑬 +Tnfr ì‘ +Tnfa ì‘® +Tnfq 쑯 +Tnft ì‘° +Tnfx 쑱 +Tnfv 쑲 +Tnfg 쑳 +Tna ì‘´ +Tnq 쑵 +Tnqt ì‘¶ +Tnt ì‘· +TnT 쑸 +Tnd 쑹 +Tnw 쑺 +Tnc ì‘» +Tnz 쑼 +Tnx 쑽 +Tnv 쑾 +Tng ì‘¿ +Tnjr ì’ +TnjR ì’‚ +Tnjrt ì’ƒ +Tnjs ì’„ +Tnjsw ì’… +Tnjsg ì’† +Tnje ì’‡ +Tnjf ì’ˆ +Tnjfr ì’‰ +Tnjfa ì’Š +Tnjfq ì’‹ +Tnjft ì’Œ +Tnjfx ì’ +Tnjfv ì’Ž +Tnjfg ì’ +Tnja ì’ +Tnjq ì’‘ +Tnjqt ì’’ +Tnjt ì’“ +TnjT ì’” +Tnjd ì’• +Tnjw ì’– +Tnjc ì’— +Tnjz ì’˜ +Tnjx ì’™ +Tnjv ì’š +Tnjg ì’› +Tnpr ì’ +TnpR ì’ž +Tnprt ì’Ÿ +Tnps ì’ +Tnpsw ì’¡ +Tnpsg ì’¢ +Tnpe ì’£ +Tnpf ì’¤ +Tnpfr ì’¥ +Tnpfa ì’¦ +Tnpfq ì’§ +Tnpft ì’¨ +Tnpfx ì’© +Tnpfv ì’ª +Tnpfg ì’« +Tnpa ì’¬ +Tnpq ì’ +Tnpqt ì’® +Tnpt ì’¯ +TnpT ì’° +Tnpd ì’± +Tnpw ì’² +Tnpc ì’³ +Tnpz ì’´ +Tnpx ì’µ +Tnpv ì’¶ +Tnpg ì’· +Tnlr ì’¹ +TnlR ì’º +Tnlrt ì’» +Tnls ì’¼ +Tnlsw ì’½ +Tnlsg ì’¾ +Tnle ì’¿ +Tnlf ì“€ +Tnlfr ì“ +Tnlfa ì“‚ +Tnlfq 쓃 +Tnlft ì“„ +Tnlfx ì“… +Tnlfv 쓆 +Tnlfg 쓇 +Tnla 쓈 +Tnlq 쓉 +Tnlqt 쓊 +Tnlt ì“‹ +TnlT 쓌 +Tnld ì“ +Tnlw 쓎 +Tnlc ì“ +Tnlz ì“ +Tnlx ì“‘ +Tnlv ì“’ +Tnlg ì““ +Tbr ì“• +TbR ì“– +Tbrt ì“— +Tbs 쓘 +Tbsw ì“™ +Tbsg 쓚 +Tbe ì“› +Tbf 쓜 +Tbfr ì“ +Tbfa 쓞 +Tbfq 쓟 +Tbft ì“ +Tbfx ì“¡ +Tbfv ì“¢ +Tbfg ì“£ +Tba 쓤 +Tbq ì“¥ +Tbqt 쓦 +Tbt ì“§ +TbT 쓨 +Tbd ì“© +Tbw 쓪 +Tbc ì“« +Tbz 쓬 +Tbx ì“ +Tbv ì“® +Tbg 쓯 +Tmr 쓱 +TmR 쓲 +Tmrt 쓳 +Tms ì“´ +Tmsw 쓵 +Tmsg ì“¶ +Tme ì“· +Tmf 쓸 +Tmfr 쓹 +Tmfa 쓺 +Tmfq ì“» +Tmft 쓼 +Tmfx 쓽 +Tmfv 쓾 +Tmfg ì“¿ +Tma 씀 +Tmq ì” +Tmqt 씂 +Tmt 씃 +TmT 씄 +Tmd ì”… +Tmw 씆 +Tmc 씇 +Tmz 씈 +Tmx 씉 +Tmv 씊 +Tmg 씋 +Tmlr ì” +TmlR 씎 +Tmlrt ì” +Tmls ì” +Tmlsw 씑 +Tmlsg ì”’ +Tmle 씓 +Tmlf ì”” +Tmlfr 씕 +Tmlfa ì”– +Tmlfq ì”— +Tmlft 씘 +Tmlfx ì”™ +Tmlfv 씚 +Tmlfg ì”› +Tmla 씜 +Tmlq ì” +Tmlqt 씞 +Tmlt 씟 +TmlT ì” +Tmld 씡 +Tmlw 씢 +Tmlc 씣 +Tmlz 씤 +Tmlx 씥 +Tmlv 씦 +Tmlg ì”§ +Tlr 씩 +TlR 씪 +Tlrt 씫 +Tls 씬 +Tlsw ì” +Tlsg ì”® +Tle 씯 +Tlf ì”° +Tlfr ì”± +Tlfa 씲 +Tlfq 씳 +Tlft ì”´ +Tlfx 씵 +Tlfv ì”¶ +Tlfg ì”· +Tla 씸 +Tlq 씹 +Tlqt 씺 +Tlt ì”» +TlT 씼 +Tld 씽 +Tlw 씾 +Tlc 씿 +Tlz ì•€ +Tlx ì• +Tlv ì•‚ +Tlg 앃 +dkr ì•… +dkR 앆 +dkrt 앇 +dks 안 +dksw 앉 +dksg 않 +dke ì•‹ +dkf 알 +dkfr ì• +dkfa 앎 +dkfq ì• +dkft ì• +dkfx ì•‘ +dkfv ì•’ +dkfg ì•“ +dka ì•” +dkq ì•• +dkqt ì•– +dkt ì•— +dkT 았 +dkd ì•™ +dkw 앚 +dkc ì•› +dkz 앜 +dkx ì• +dkv 앞 +dkg 앟 +dor ì•¡ +doR ì•¢ +dort ì•£ +dos 앤 +dosw ì•¥ +dosg 앦 +doe ì•§ +dof 앨 +dofr ì•© +dofa 앪 +dofq ì•« +doft 앬 +dofx ì• +dofv ì•® +dofg 앯 +doa ì•° +doq 앱 +doqt 앲 +dot 앳 +doT ì•´ +dod 앵 +dow ì•¶ +doc ì•· +doz 앸 +dox 앹 +dov 앺 +dog ì•» +dir 약 +diR 앾 +dirt ì•¿ +dis ì–€ +disw ì– +disg ì–‚ +die ì–ƒ +dif ì–„ +difr ì–… +difa ì–† +difq ì–‡ +dift ì–ˆ +difx ì–‰ +difv ì–Š +difg ì–‹ +dia ì–Œ +diq ì– +diqt ì–Ž +dit ì– +diT ì– +did ì–‘ +diw ì–’ +dic ì–“ +diz ì–” +dix ì–• +div ì–– +dig ì–— +dOr ì–™ +dOR ì–š +dOrt ì–› +dOs ì–œ +dOsw ì– +dOsg ì–ž +dOe ì–Ÿ +dOf ì– +dOfr ì–¡ +dOfa ì–¢ +dOfq ì–£ +dOft ì–¤ +dOfx ì–¥ +dOfv ì–¦ +dOfg ì–§ +dOa ì–¨ +dOq ì–© +dOqt ì–ª +dOt ì–« +dOT ì–¬ +dOd ì– +dOw ì–® +dOc ì–¯ +dOz ì–° +dOx ì–± +dOv ì–² +dOg ì–³ +djr ì–µ +djR ì–¶ +djrt ì–· +djs ì–¸ +djsw ì–¹ +djsg ì–º +dje ì–» +djf ì–¼ +djfr ì–½ +djfa ì–¾ +djfq ì–¿ +djft ì—€ +djfx ì— +djfv ì—‚ +djfg ì—ƒ +dja ì—„ +djq ì—… +djqt ì—† +djt ì—‡ +djT ì—ˆ +djd ì—‰ +djw ì—Š +djc ì—‹ +djz ì—Œ +djx ì— +djv ì—Ž +djg ì— +dpr ì—‘ +dpR ì—’ +dprt ì—“ +dps ì—” +dpsw ì—• +dpsg ì—– +dpe ì—— +dpf ì—˜ +dpfr ì—™ +dpfa ì—š +dpfq ì—› +dpft ì—œ +dpfx ì— +dpfv ì—ž +dpfg ì—Ÿ +dpa ì— +dpq ì—¡ +dpqt ì—¢ +dpt ì—£ +dpT ì—¤ +dpd ì—¥ +dpw ì—¦ +dpc ì—§ +dpz ì—¨ +dpx ì—© +dpv ì—ª +dpg ì—« +dur ì— +duR ì—® +durt ì—¯ +dus ì—° +dusw ì—± +dusg ì—² +due ì—³ +duf ì—´ +dufr ì—µ +dufa ì—¶ +dufq ì—· +duft ì—¸ +dufx ì—¹ +dufv ì—º +dufg ì—» +dua ì—¼ +duq ì—½ +duqt ì—¾ +dut ì—¿ +duT 였 +dud ì˜ +duw 옂 +duc 옃 +duz 옄 +dux 옅 +duv 옆 +dug 옇 +dPr 옉 +dPR 옊 +dPrt 옋 +dPs 옌 +dPsw ì˜ +dPsg 옎 +dPe ì˜ +dPf ì˜ +dPfr 옑 +dPfa 옒 +dPfq 옓 +dPft 옔 +dPfx 옕 +dPfv 옖 +dPfg 옗 +dPa 옘 +dPq 옙 +dPqt 옚 +dPt 옛 +dPT 옜 +dPd ì˜ +dPw 옞 +dPc 옟 +dPz ì˜ +dPx 옡 +dPv 옢 +dPg 옣 +dhr 옥 +dhR 옦 +dhrt 옧 +dhs 온 +dhsw 옩 +dhsg 옪 +dhe 옫 +dhf 올 +dhfr ì˜ +dhfa 옮 +dhfq 옯 +dhft 옰 +dhfx 옱 +dhfv 옲 +dhfg 옳 +dha 옴 +dhq 옵 +dhqt 옶 +dht 옷 +dhT 옸 +dhd 옹 +dhw 옺 +dhc 옻 +dhz 옼 +dhx 옽 +dhv 옾 +dhg 옿 +dhkr ì™ +dhkR 왂 +dhkrt 왃 +dhks 완 +dhksw ì™… +dhksg 왆 +dhke 왇 +dhkf 왈 +dhkfr 왉 +dhkfa 왊 +dhkfq 왋 +dhkft 왌 +dhkfx ì™ +dhkfv 왎 +dhkfg ì™ +dhka ì™ +dhkq 왑 +dhkqt ì™’ +dhkt 왓 +dhkT ì™” +dhkd 왕 +dhkw ì™– +dhkc ì™— +dhkz 왘 +dhkx ì™™ +dhkv 왚 +dhkg ì™› +dhor ì™ +dhoR 왞 +dhort 왟 +dhos ì™ +dhosw 왡 +dhosg 왢 +dhoe 왣 +dhof 왤 +dhofr 왥 +dhofa 왦 +dhofq ì™§ +dhoft 왨 +dhofx 왩 +dhofv 왪 +dhofg 왫 +dhoa 왬 +dhoq ì™ +dhoqt ì™® +dhot 왯 +dhoT ì™° +dhod ì™± +dhow 왲 +dhoc 왳 +dhoz ì™´ +dhox 왵 +dhov ì™¶ +dhog ì™· +dhlr 왹 +dhlR 왺 +dhlrt ì™» +dhls 왼 +dhlsw 왽 +dhlsg 왾 +dhle 왿 +dhlf 욀 +dhlfr ìš +dhlfa ìš‚ +dhlfq 욃 +dhlft ìš„ +dhlfx ìš… +dhlfv 욆 +dhlfg 욇 +dhla 욈 +dhlq 욉 +dhlqt 욊 +dhlt ìš‹ +dhlT 욌 +dhld ìš +dhlw 욎 +dhlc ìš +dhlz ìš +dhlx ìš‘ +dhlv ìš’ +dhlg ìš“ +dyr ìš• +dyR ìš– +dyrt ìš— +dys 욘 +dysw ìš™ +dysg ìšš +dye ìš› +dyf ìšœ +dyfr ìš +dyfa ìšž +dyfq 욟 +dyft ìš +dyfx ìš¡ +dyfv 욢 +dyfg 욣 +dya 욤 +dyq 욥 +dyqt 욦 +dyt ìš§ +dyT 욨 +dyd ìš© +dyw 욪 +dyc ìš« +dyz 욬 +dyx ìš +dyv ìš® +dyg 욯 +dnr ìš± +dnR ìš² +dnrt ìš³ +dns ìš´ +dnsw ìšµ +dnsg ìš¶ +dne ìš· +dnf 울 +dnfr ìš¹ +dnfa 욺 +dnfq ìš» +dnft ìš¼ +dnfx ìš½ +dnfv ìš¾ +dnfg ìš¿ +dna 움 +dnq ì› +dnqt 웂 +dnt 웃 +dnT 웄 +dnd ì›… +dnw 웆 +dnc 웇 +dnz 웈 +dnx 웉 +dnv 웊 +dng 웋 +dnjr ì› +dnjR 웎 +dnjrt ì› +dnjs ì› +dnjsw 웑 +dnjsg ì›’ +dnje 웓 +dnjf ì›” +dnjfr 웕 +dnjfa ì›– +dnjfq ì›— +dnjft 웘 +dnjfx ì›™ +dnjfv 웚 +dnjfg ì›› +dnja 웜 +dnjq ì› +dnjqt 웞 +dnjt 웟 +dnjT ì› +dnjd 웡 +dnjw 웢 +dnjc 웣 +dnjz 웤 +dnjx 웥 +dnjv 웦 +dnjg ì›§ +dnpr 웩 +dnpR 웪 +dnprt 웫 +dnps 웬 +dnpsw ì› +dnpsg ì›® +dnpe 웯 +dnpf ì›° +dnpfr ì›± +dnpfa 웲 +dnpfq 웳 +dnpft ì›´ +dnpfx 웵 +dnpfv ì›¶ +dnpfg ì›· +dnpa 웸 +dnpq 웹 +dnpqt 웺 +dnpt ì›» +dnpT 웼 +dnpd 웽 +dnpw 웾 +dnpc 웿 +dnpz 윀 +dnpx ìœ +dnpv 윂 +dnpg 윃 +dnlr 윅 +dnlR 윆 +dnlrt 윇 +dnls 윈 +dnlsw 윉 +dnlsg 윊 +dnle 윋 +dnlf 윌 +dnlfr ìœ +dnlfa 윎 +dnlfq ìœ +dnlft ìœ +dnlfx 윑 +dnlfv 윒 +dnlfg 윓 +dnla 윔 +dnlq 윕 +dnlqt 윖 +dnlt 윗 +dnlT 윘 +dnld 윙 +dnlw 윚 +dnlc 윛 +dnlz 윜 +dnlx ìœ +dnlv 윞 +dnlg 윟 +dbr 육 +dbR 윢 +dbrt 윣 +dbs 윤 +dbsw 윥 +dbsg 윦 +dbe 윧 +dbf 율 +dbfr 윩 +dbfa 윪 +dbfq 윫 +dbft 윬 +dbfx ìœ +dbfv 윮 +dbfg 윯 +dba 윰 +dbq 윱 +dbqt 윲 +dbt 윳 +dbT 윴 +dbd 융 +dbw 윶 +dbc 윷 +dbz 윸 +dbx 윹 +dbv 윺 +dbg 윻 +dmr 윽 +dmR 윾 +dmrt 윿 +dms ì€ +dmsw ì +dmsg ì‚ +dme ìƒ +dmf ì„ +dmfr ì… +dmfa ì† +dmfq ì‡ +dmft ìˆ +dmfx ì‰ +dmfv ìŠ +dmfg ì‹ +dma ìŒ +dmq ì +dmqt ìŽ +dmt ì +dmT ì +dmd ì‘ +dmw ì’ +dmc ì“ +dmz ì” +dmx ì• +dmv ì– +dmg ì— +dmlr ì™ +dmlR ìš +dmlrt ì› +dmls ìœ +dmlsw ì +dmlsg ìž +dmle ìŸ +dmlf ì +dmlfr ì¡ +dmlfa ì¢ +dmlfq ì£ +dmlft ì¤ +dmlfx ì¥ +dmlfv ì¦ +dmlfg ì§ +dmla ì¨ +dmlq ì© +dmlqt ìª +dmlt ì« +dmlT ì¬ +dmld ì +dmlw ì® +dmlc ì¯ +dmlz ì° +dmlx ì± +dmlv ì² +dmlg ì³ +dlr ìµ +dlR ì¶ +dlrt ì· +dls ì¸ +dlsw ì¹ +dlsg ìº +dle ì» +dlf ì¼ +dlfr ì½ +dlfa ì¾ +dlfq ì¿ +dlft 잀 +dlfx ìž +dlfv ìž‚ +dlfg 잃 +dla ìž„ +dlq ìž… +dlqt 잆 +dlt 잇 +dlT 있 +dld 잉 +dlw 잊 +dlc ìž‹ +dlz 잌 +dlx ìž +dlv 잎 +dlg ìž +wkr ìž‘ +wkR ìž’ +wkrt ìž“ +wks ìž” +wksw ìž• +wksg ìž– +wke ìž— +wkf 잘 +wkfr ìž™ +wkfa ìžš +wkfq ìž› +wkft ìžœ +wkfx ìž +wkfv ìžž +wkfg 잟 +wka ìž +wkq ìž¡ +wkqt 잢 +wkt 잣 +wkT 잤 +wkd 장 +wkw 잦 +wkc ìž§ +wkz 잨 +wkx ìž© +wkv 잪 +wkg ìž« +wor ìž +woR ìž® +wort 잯 +wos ìž° +wosw ìž± +wosg ìž² +woe ìž³ +wof ìž´ +wofr ìžµ +wofa ìž¶ +wofq ìž· +woft 잸 +wofx ìž¹ +wofv 잺 +wofg ìž» +woa ìž¼ +woq ìž½ +woqt ìž¾ +wot ìž¿ +woT 쟀 +wod ìŸ +wow 쟂 +woc 쟃 +woz 쟄 +wox 쟅 +wov 쟆 +wog 쟇 +wir 쟉 +wiR 쟊 +wirt 쟋 +wis 쟌 +wisw ìŸ +wisg 쟎 +wie ìŸ +wif ìŸ +wifr 쟑 +wifa 쟒 +wifq 쟓 +wift 쟔 +wifx 쟕 +wifv 쟖 +wifg 쟗 +wia 쟘 +wiq 쟙 +wiqt 쟚 +wit 쟛 +wiT 쟜 +wid ìŸ +wiw 쟞 +wic 쟟 +wiz ìŸ +wix 쟡 +wiv 쟢 +wig 쟣 +wOr 쟥 +wOR 쟦 +wOrt 쟧 +wOs 쟨 +wOsw 쟩 +wOsg 쟪 +wOe 쟫 +wOf 쟬 +wOfr ìŸ +wOfa 쟮 +wOfq 쟯 +wOft 쟰 +wOfx 쟱 +wOfv 쟲 +wOfg 쟳 +wOa 쟴 +wOq 쟵 +wOqt 쟶 +wOt 쟷 +wOT 쟸 +wOd 쟹 +wOw 쟺 +wOc 쟻 +wOz 쟼 +wOx 쟽 +wOv 쟾 +wOg 쟿 +wjr ì +wjR ì ‚ +wjrt ì ƒ +wjs ì „ +wjsw ì … +wjsg ì † +wje ì ‡ +wjf ì ˆ +wjfr ì ‰ +wjfa ì Š +wjfq ì ‹ +wjft ì Œ +wjfx ì +wjfv ì Ž +wjfg ì +wja ì +wjq ì ‘ +wjqt ì ’ +wjt ì “ +wjT ì ” +wjd ì • +wjw ì – +wjc ì — +wjz ì ˜ +wjx ì ™ +wjv ì š +wjg ì › +wpr ì +wpR ì ž +wprt ì Ÿ +wps ì +wpsw ì ¡ +wpsg ì ¢ +wpe ì £ +wpf ì ¤ +wpfr ì ¥ +wpfa ì ¦ +wpfq ì § +wpft ì ¨ +wpfx ì © +wpfv ì ª +wpfg ì « +wpa ì ¬ +wpq ì +wpqt ì ® +wpt ì ¯ +wpT ì ° +wpd ì ± +wpw ì ² +wpc ì ³ +wpz ì ´ +wpx ì µ +wpv ì ¶ +wpg ì · +wur ì ¹ +wuR ì º +wurt ì » +wus ì ¼ +wusw ì ½ +wusg ì ¾ +wue ì ¿ +wuf ì¡€ +wufr ì¡ +wufa ì¡‚ +wufq 졃 +wuft ì¡„ +wufx ì¡… +wufv 졆 +wufg 졇 +wua 졈 +wuq 졉 +wuqt 졊 +wut ì¡‹ +wuT 졌 +wud ì¡ +wuw 졎 +wuc ì¡ +wuz ì¡ +wux ì¡‘ +wuv ì¡’ +wug ì¡“ +wPr ì¡• +wPR ì¡– +wPrt ì¡— +wPs 졘 +wPsw ì¡™ +wPsg 졚 +wPe ì¡› +wPf 졜 +wPfr ì¡ +wPfa 졞 +wPfq 졟 +wPft ì¡ +wPfx ì¡¡ +wPfv ì¡¢ +wPfg ì¡£ +wPa 졤 +wPq ì¡¥ +wPqt 졦 +wPt ì¡§ +wPT 졨 +wPd ì¡© +wPw 졪 +wPc ì¡« +wPz 졬 +wPx ì¡ +wPv ì¡® +wPg 졯 +whr 족 +whR 졲 +whrt 졳 +whs ì¡´ +whsw 졵 +whsg ì¡¶ +whe ì¡· +whf 졸 +whfr 졹 +whfa 졺 +whfq ì¡» +whft 졼 +whfx 졽 +whfv 졾 +whfg ì¡¿ +wha 좀 +whq ì¢ +whqt 좂 +wht 좃 +whT 좄 +whd 종 +whw 좆 +whc 좇 +whz 좈 +whx 좉 +whv 좊 +whg 좋 +whkr ì¢ +whkR 좎 +whkrt ì¢ +whks ì¢ +whksw 좑 +whksg 좒 +whke 좓 +whkf 좔 +whkfr 좕 +whkfa 좖 +whkfq 좗 +whkft 좘 +whkfx 좙 +whkfv 좚 +whkfg 좛 +whka 좜 +whkq ì¢ +whkqt 좞 +whkt 좟 +whkT ì¢ +whkd 좡 +whkw 좢 +whkc 좣 +whkz 좤 +whkx 좥 +whkv 좦 +whkg 좧 +whor 좩 +whoR 좪 +whort 좫 +whos 좬 +whosw ì¢ +whosg 좮 +whoe 좯 +whof 좰 +whofr 좱 +whofa 좲 +whofq 좳 +whoft 좴 +whofx 좵 +whofv 좶 +whofg 좷 +whoa 좸 +whoq 좹 +whoqt 좺 +whot 좻 +whoT 좼 +whod 좽 +whow 좾 +whoc 좿 +whoz 죀 +whox ì£ +whov 죂 +whog 죃 +whlr 죅 +whlR 죆 +whlrt 죇 +whls 죈 +whlsw 죉 +whlsg 죊 +whle 죋 +whlf 죌 +whlfr ì£ +whlfa 죎 +whlfq ì£ +whlft ì£ +whlfx 죑 +whlfv 죒 +whlfg 죓 +whla 죔 +whlq 죕 +whlqt 죖 +whlt 죗 +whlT 죘 +whld 죙 +whlw 죚 +whlc 죛 +whlz 죜 +whlx ì£ +whlv 죞 +whlg 죟 +wyr 죡 +wyR 죢 +wyrt 죣 +wys 죤 +wysw 죥 +wysg 죦 +wye 죧 +wyf 죨 +wyfr 죩 +wyfa 죪 +wyfq 죫 +wyft 죬 +wyfx ì£ +wyfv 죮 +wyfg 죯 +wya 죰 +wyq 죱 +wyqt 죲 +wyt 죳 +wyT 죴 +wyd 죵 +wyw 죶 +wyc 죷 +wyz 죸 +wyx 죹 +wyv 죺 +wyg 죻 +wnr 죽 +wnR 죾 +wnrt 죿 +wns 준 +wnsw ì¤ +wnsg 줂 +wne 줃 +wnf 줄 +wnfr 줅 +wnfa 줆 +wnfq 줇 +wnft 줈 +wnfx 줉 +wnfv 줊 +wnfg 줋 +wna 줌 +wnq ì¤ +wnqt 줎 +wnt ì¤ +wnT ì¤ +wnd 중 +wnw 줒 +wnc 줓 +wnz 줔 +wnx 줕 +wnv 줖 +wng 줗 +wnjr 줙 +wnjR 줚 +wnjrt 줛 +wnjs 줜 +wnjsw ì¤ +wnjsg 줞 +wnje 줟 +wnjf ì¤ +wnjfr 줡 +wnjfa 줢 +wnjfq 줣 +wnjft 줤 +wnjfx 줥 +wnjfv 줦 +wnjfg 줧 +wnja 줨 +wnjq 줩 +wnjqt 줪 +wnjt 줫 +wnjT 줬 +wnjd ì¤ +wnjw 줮 +wnjc 줯 +wnjz 줰 +wnjx 줱 +wnjv 줲 +wnjg 줳 +wnpr 줵 +wnpR 줶 +wnprt 줷 +wnps 줸 +wnpsw 줹 +wnpsg 줺 +wnpe 줻 +wnpf 줼 +wnpfr 줽 +wnpfa 줾 +wnpfq 줿 +wnpft 쥀 +wnpfx ì¥ +wnpfv 쥂 +wnpfg 쥃 +wnpa 쥄 +wnpq 쥅 +wnpqt 쥆 +wnpt 쥇 +wnpT 쥈 +wnpd 쥉 +wnpw 쥊 +wnpc 쥋 +wnpz 쥌 +wnpx ì¥ +wnpv 쥎 +wnpg ì¥ +wnlr 쥑 +wnlR 쥒 +wnlrt 쥓 +wnls 쥔 +wnlsw 쥕 +wnlsg 쥖 +wnle 쥗 +wnlf 쥘 +wnlfr 쥙 +wnlfa 쥚 +wnlfq 쥛 +wnlft 쥜 +wnlfx ì¥ +wnlfv 쥞 +wnlfg 쥟 +wnla ì¥ +wnlq 쥡 +wnlqt 쥢 +wnlt 쥣 +wnlT 쥤 +wnld 쥥 +wnlw 쥦 +wnlc 쥧 +wnlz 쥨 +wnlx 쥩 +wnlv 쥪 +wnlg 쥫 +wbr ì¥ +wbR 쥮 +wbrt 쥯 +wbs 쥰 +wbsw 쥱 +wbsg 쥲 +wbe 쥳 +wbf 쥴 +wbfr 쥵 +wbfa 쥶 +wbfq 쥷 +wbft 쥸 +wbfx 쥹 +wbfv 쥺 +wbfg 쥻 +wba 쥼 +wbq 쥽 +wbqt 쥾 +wbt 쥿 +wbT 즀 +wbd ì¦ +wbw 즂 +wbc 즃 +wbz 즄 +wbx 즅 +wbv 즆 +wbg 즇 +wmr 즉 +wmR 즊 +wmrt 즋 +wms 즌 +wmsw ì¦ +wmsg 즎 +wme ì¦ +wmf ì¦ +wmfr 즑 +wmfa 즒 +wmfq 즓 +wmft 즔 +wmfx 즕 +wmfv 즖 +wmfg 즗 +wma 즘 +wmq 즙 +wmqt 즚 +wmt 즛 +wmT 즜 +wmd ì¦ +wmw 즞 +wmc 즟 +wmz ì¦ +wmx 즡 +wmv 즢 +wmg 즣 +wmlr 즥 +wmlR 즦 +wmlrt 즧 +wmls 즨 +wmlsw 즩 +wmlsg 즪 +wmle 즫 +wmlf 즬 +wmlfr ì¦ +wmlfa 즮 +wmlfq 즯 +wmlft 즰 +wmlfx 즱 +wmlfv 즲 +wmlfg 즳 +wmla 즴 +wmlq 즵 +wmlqt 즶 +wmlt 즷 +wmlT 즸 +wmld 즹 +wmlw 즺 +wmlc 즻 +wmlz 즼 +wmlx 즽 +wmlv 즾 +wmlg 즿 +wlr ì§ +wlR ì§‚ +wlrt 짃 +wls ì§„ +wlsw ì§… +wlsg 짆 +wle 짇 +wlf 질 +wlfr 짉 +wlfa ì§Š +wlfq ì§‹ +wlft ì§Œ +wlfx ì§ +wlfv ì§Ž +wlfg ì§ +wla ì§ +wlq ì§‘ +wlqt ì§’ +wlt ì§“ +wlT ì§” +wld ì§• +wlw ì§– +wlc ì§— +wlz 짘 +wlx ì§™ +wlv ì§š +wlg ì§› +Wkr ì§ +WkR ì§ž +Wkrt ì§Ÿ +Wks ì§ +Wksw ì§¡ +Wksg ì§¢ +Wke ì§£ +Wkf 짤 +Wkfr ì§¥ +Wkfa 짦 +Wkfq ì§§ +Wkft 짨 +Wkfx ì§© +Wkfv 짪 +Wkfg ì§« +Wka 짬 +Wkq ì§ +Wkqt ì§® +Wkt 짯 +WkT ì§° +Wkd ì§± +Wkw ì§² +Wkc ì§³ +Wkz ì§´ +Wkx ì§µ +Wkv ì§¶ +Wkg ì§· +Wor ì§¹ +WoR 짺 +Wort ì§» +Wos ì§¼ +Wosw ì§½ +Wosg ì§¾ +Woe ì§¿ +Wof 쨀 +Wofr ì¨ +Wofa 쨂 +Wofq 쨃 +Woft 쨄 +Wofx 쨅 +Wofv 쨆 +Wofg 쨇 +Woa 쨈 +Woq 쨉 +Woqt 쨊 +Wot 쨋 +WoT 쨌 +Wod ì¨ +Wow 쨎 +Woc ì¨ +Woz ì¨ +Wox 쨑 +Wov 쨒 +Wog 쨓 +Wir 쨕 +WiR 쨖 +Wirt 쨗 +Wis 쨘 +Wisw 쨙 +Wisg 쨚 +Wie 쨛 +Wif 쨜 +Wifr ì¨ +Wifa 쨞 +Wifq 쨟 +Wift ì¨ +Wifx 쨡 +Wifv 쨢 +Wifg 쨣 +Wia 쨤 +Wiq 쨥 +Wiqt 쨦 +Wit 쨧 +WiT 쨨 +Wid 쨩 +Wiw 쨪 +Wic 쨫 +Wiz 쨬 +Wix ì¨ +Wiv 쨮 +Wig 쨯 +WOr 쨱 +WOR 쨲 +WOrt 쨳 +WOs 쨴 +WOsw 쨵 +WOsg 쨶 +WOe 쨷 +WOf 쨸 +WOfr 쨹 +WOfa 쨺 +WOfq 쨻 +WOft 쨼 +WOfx 쨽 +WOfv 쨾 +WOfg 쨿 +WOa ì©€ +WOq ì© +WOqt ì©‚ +WOt 쩃 +WOT ì©„ +WOd ì©… +WOw 쩆 +WOc 쩇 +WOz 쩈 +WOx 쩉 +WOv 쩊 +WOg ì©‹ +Wjr ì© +WjR 쩎 +Wjrt ì© +Wjs ì© +Wjsw ì©‘ +Wjsg ì©’ +Wje ì©“ +Wjf ì©” +Wjfr ì©• +Wjfa ì©– +Wjfq ì©— +Wjft 쩘 +Wjfx ì©™ +Wjfv 쩚 +Wjfg ì©› +Wja 쩜 +Wjq ì© +Wjqt 쩞 +Wjt 쩟 +WjT ì© +Wjd ì©¡ +Wjw ì©¢ +Wjc ì©£ +Wjz 쩤 +Wjx ì©¥ +Wjv 쩦 +Wjg ì©§ +Wpr ì©© +WpR 쩪 +Wprt ì©« +Wps 쩬 +Wpsw ì© +Wpsg ì©® +Wpe 쩯 +Wpf ì©° +Wpfr 쩱 +Wpfa 쩲 +Wpfq 쩳 +Wpft ì©´ +Wpfx 쩵 +Wpfv ì©¶ +Wpfg ì©· +Wpa 쩸 +Wpq 쩹 +Wpqt 쩺 +Wpt ì©» +WpT 쩼 +Wpd 쩽 +Wpw 쩾 +Wpc ì©¿ +Wpz 쪀 +Wpx ìª +Wpv 쪂 +Wpg 쪃 +Wur 쪅 +WuR 쪆 +Wurt 쪇 +Wus 쪈 +Wusw 쪉 +Wusg 쪊 +Wue 쪋 +Wuf 쪌 +Wufr ìª +Wufa 쪎 +Wufq ìª +Wuft ìª +Wufx 쪑 +Wufv 쪒 +Wufg 쪓 +Wua 쪔 +Wuq 쪕 +Wuqt 쪖 +Wut 쪗 +WuT 쪘 +Wud 쪙 +Wuw 쪚 +Wuc 쪛 +Wuz 쪜 +Wux ìª +Wuv 쪞 +Wug 쪟 +WPr 쪡 +WPR 쪢 +WPrt 쪣 +WPs 쪤 +WPsw 쪥 +WPsg 쪦 +WPe 쪧 +WPf 쪨 +WPfr 쪩 +WPfa 쪪 +WPfq 쪫 +WPft 쪬 +WPfx ìª +WPfv 쪮 +WPfg 쪯 +WPa 쪰 +WPq 쪱 +WPqt 쪲 +WPt 쪳 +WPT 쪴 +WPd 쪵 +WPw 쪶 +WPc 쪷 +WPz 쪸 +WPx 쪹 +WPv 쪺 +WPg 쪻 +Whr 쪽 +WhR 쪾 +Whrt 쪿 +Whs ì«€ +Whsw ì« +Whsg ì«‚ +Whe 쫃 +Whf ì«„ +Whfr ì«… +Whfa 쫆 +Whfq 쫇 +Whft 쫈 +Whfx 쫉 +Whfv 쫊 +Whfg ì«‹ +Wha 쫌 +Whq ì« +Whqt 쫎 +Wht ì« +WhT ì« +Whd ì«‘ +Whw ì«’ +Whc ì«“ +Whz ì«” +Whx ì«• +Whv ì«– +Whg ì«— +Whkr ì«™ +WhkR 쫚 +Whkrt ì«› +Whks 쫜 +Whksw ì« +Whksg 쫞 +Whke 쫟 +Whkf ì« +Whkfr ì«¡ +Whkfa ì«¢ +Whkfq ì«£ +Whkft 쫤 +Whkfx ì«¥ +Whkfv 쫦 +Whkfg ì«§ +Whka 쫨 +Whkq ì«© +Whkqt 쫪 +Whkt ì«« +WhkT 쫬 +Whkd ì« +Whkw ì«® +Whkc 쫯 +Whkz ì«° +Whkx 쫱 +Whkv 쫲 +Whkg 쫳 +Whor 쫵 +WhoR ì«¶ +Whort ì«· +Whos 쫸 +Whosw 쫹 +Whosg 쫺 +Whoe ì«» +Whof 쫼 +Whofr 쫽 +Whofa 쫾 +Whofq ì«¿ +Whoft 쬀 +Whofx ì¬ +Whofv 쬂 +Whofg 쬃 +Whoa 쬄 +Whoq 쬅 +Whoqt 쬆 +Whot 쬇 +WhoT 쬈 +Whod 쬉 +Whow 쬊 +Whoc 쬋 +Whoz 쬌 +Whox ì¬ +Whov 쬎 +Whog ì¬ +Whlr 쬑 +WhlR 쬒 +Whlrt 쬓 +Whls 쬔 +Whlsw 쬕 +Whlsg 쬖 +Whle 쬗 +Whlf 쬘 +Whlfr 쬙 +Whlfa 쬚 +Whlfq 쬛 +Whlft 쬜 +Whlfx ì¬ +Whlfv 쬞 +Whlfg 쬟 +Whla ì¬ +Whlq 쬡 +Whlqt 쬢 +Whlt 쬣 +WhlT 쬤 +Whld 쬥 +Whlw 쬦 +Whlc 쬧 +Whlz 쬨 +Whlx 쬩 +Whlv 쬪 +Whlg 쬫 +Wyr ì¬ +WyR 쬮 +Wyrt 쬯 +Wys 쬰 +Wysw 쬱 +Wysg 쬲 +Wye 쬳 +Wyf 쬴 +Wyfr 쬵 +Wyfa 쬶 +Wyfq 쬷 +Wyft 쬸 +Wyfx 쬹 +Wyfv 쬺 +Wyfg 쬻 +Wya 쬼 +Wyq 쬽 +Wyqt 쬾 +Wyt 쬿 +WyT ì€ +Wyd ì +Wyw ì‚ +Wyc ìƒ +Wyz ì„ +Wyx ì… +Wyv ì† +Wyg ì‡ +Wnr ì‰ +WnR ìŠ +Wnrt ì‹ +Wns ìŒ +Wnsw ì +Wnsg ìŽ +Wne ì +Wnf ì +Wnfr ì‘ +Wnfa ì’ +Wnfq ì“ +Wnft ì” +Wnfx ì• +Wnfv ì– +Wnfg ì— +Wna ì˜ +Wnq ì™ +Wnqt ìš +Wnt ì› +WnT ìœ +Wnd ì +Wnw ìž +Wnc ìŸ +Wnz ì +Wnx ì¡ +Wnv ì¢ +Wng ì£ +Wnjr ì¥ +WnjR ì¦ +Wnjrt ì§ +Wnjs ì¨ +Wnjsw ì© +Wnjsg ìª +Wnje ì« +Wnjf ì¬ +Wnjfr ì +Wnjfa ì® +Wnjfq ì¯ +Wnjft ì° +Wnjfx ì± +Wnjfv ì² +Wnjfg ì³ +Wnja ì´ +Wnjq ìµ +Wnjqt ì¶ +Wnjt ì· +WnjT ì¸ +Wnjd ì¹ +Wnjw ìº +Wnjc ì» +Wnjz ì¼ +Wnjx ì½ +Wnjv ì¾ +Wnjg ì¿ +Wnpr ì® +WnpR 쮂 +Wnprt 쮃 +Wnps 쮄 +Wnpsw ì®… +Wnpsg 쮆 +Wnpe 쮇 +Wnpf 쮈 +Wnpfr 쮉 +Wnpfa 쮊 +Wnpfq 쮋 +Wnpft 쮌 +Wnpfx ì® +Wnpfv 쮎 +Wnpfg ì® +Wnpa ì® +Wnpq 쮑 +Wnpqt ì®’ +Wnpt 쮓 +WnpT ì®” +Wnpd 쮕 +Wnpw ì®– +Wnpc ì®— +Wnpz 쮘 +Wnpx ì®™ +Wnpv 쮚 +Wnpg ì®› +Wnlr ì® +WnlR 쮞 +Wnlrt 쮟 +Wnls ì® +Wnlsw 쮡 +Wnlsg 쮢 +Wnle 쮣 +Wnlf 쮤 +Wnlfr 쮥 +Wnlfa 쮦 +Wnlfq ì®§ +Wnlft 쮨 +Wnlfx 쮩 +Wnlfv 쮪 +Wnlfg 쮫 +Wnla 쮬 +Wnlq ì® +Wnlqt ì®® +Wnlt 쮯 +WnlT ì®° +Wnld ì®± +Wnlw 쮲 +Wnlc 쮳 +Wnlz ì®´ +Wnlx 쮵 +Wnlv ì®¶ +Wnlg ì®· +Wbr 쮹 +WbR 쮺 +Wbrt ì®» +Wbs 쮼 +Wbsw 쮽 +Wbsg 쮾 +Wbe 쮿 +Wbf 쯀 +Wbfr ì¯ +Wbfa 쯂 +Wbfq 쯃 +Wbft 쯄 +Wbfx 쯅 +Wbfv 쯆 +Wbfg 쯇 +Wba 쯈 +Wbq 쯉 +Wbqt 쯊 +Wbt 쯋 +WbT 쯌 +Wbd ì¯ +Wbw 쯎 +Wbc ì¯ +Wbz ì¯ +Wbx 쯑 +Wbv 쯒 +Wbg 쯓 +Wmr 쯕 +WmR 쯖 +Wmrt 쯗 +Wms 쯘 +Wmsw 쯙 +Wmsg 쯚 +Wme 쯛 +Wmf 쯜 +Wmfr ì¯ +Wmfa 쯞 +Wmfq 쯟 +Wmft ì¯ +Wmfx 쯡 +Wmfv 쯢 +Wmfg 쯣 +Wma 쯤 +Wmq 쯥 +Wmqt 쯦 +Wmt 쯧 +WmT 쯨 +Wmd 쯩 +Wmw 쯪 +Wmc 쯫 +Wmz 쯬 +Wmx ì¯ +Wmv 쯮 +Wmg 쯯 +Wmlr 쯱 +WmlR 쯲 +Wmlrt 쯳 +Wmls 쯴 +Wmlsw 쯵 +Wmlsg 쯶 +Wmle 쯷 +Wmlf 쯸 +Wmlfr 쯹 +Wmlfa 쯺 +Wmlfq 쯻 +Wmlft 쯼 +Wmlfx 쯽 +Wmlfv 쯾 +Wmlfg 쯿 +Wmla ì°€ +Wmlq ì° +Wmlqt ì°‚ +Wmlt ì°ƒ +WmlT ì°„ +Wmld ì°… +Wmlw ì°† +Wmlc ì°‡ +Wmlz ì°ˆ +Wmlx ì°‰ +Wmlv ì°Š +Wmlg ì°‹ +Wlr ì° +WlR ì°Ž +Wlrt ì° +Wls ì° +Wlsw ì°‘ +Wlsg ì°’ +Wle ì°“ +Wlf ì°” +Wlfr ì°• +Wlfa ì°– +Wlfq ì°— +Wlft ì°˜ +Wlfx ì°™ +Wlfv ì°š +Wlfg ì°› +Wla ì°œ +Wlq ì° +Wlqt ì°ž +Wlt ì°Ÿ +WlT ì° +Wld ì°¡ +Wlw ì°¢ +Wlc ì°£ +Wlz ì°¤ +Wlx ì°¥ +Wlv ì°¦ +Wlg ì°§ +ckr ì°© +ckR ì°ª +ckrt ì°« +cks ì°¬ +cksw ì° +cksg ì°® +cke ì°¯ +ckf ì°° +ckfr ì°± +ckfa ì°² +ckfq ì°³ +ckft ì°´ +ckfx ì°µ +ckfv ì°¶ +ckfg ì°· +cka ì°¸ +ckq ì°¹ +ckqt ì°º +ckt ì°» +ckT ì°¼ +ckd ì°½ +ckw ì°¾ +ckc ì°¿ +ckz ì±€ +ckx ì± +ckv 챂 +ckg 챃 +cor ì±… +coR 챆 +cort 챇 +cos 챈 +cosw 챉 +cosg 챊 +coe 챋 +cof 챌 +cofr ì± +cofa 챎 +cofq ì± +coft ì± +cofx 챑 +cofv ì±’ +cofg 챓 +coa ì±” +coq 챕 +coqt ì±– +cot ì±— +coT 챘 +cod ì±™ +cow 챚 +coc ì±› +coz 챜 +cox ì± +cov 챞 +cog 챟 +cir 챡 +ciR ì±¢ +cirt ì±£ +cis 챤 +cisw ì±¥ +cisg 챦 +cie ì±§ +cif 챨 +cifr 챩 +cifa 챪 +cifq 챫 +cift 챬 +cifx ì± +cifv ì±® +cifg 챯 +cia ì±° +ciq ì±± +ciqt ì±² +cit ì±³ +ciT ì±´ +cid ì±µ +ciw ì±¶ +cic ì±· +ciz 챸 +cix ì±¹ +civ 챺 +cig ì±» +cOr ì±½ +cOR ì±¾ +cOrt 챿 +cOs ì²€ +cOsw ì² +cOsg 첂 +cOe 첃 +cOf 첄 +cOfr ì²… +cOfa 첆 +cOfq 첇 +cOft 첈 +cOfx 첉 +cOfv 첊 +cOfg 첋 +cOa 첌 +cOq ì² +cOqt 첎 +cOt ì² +cOT ì² +cOd 첑 +cOw ì²’ +cOc 첓 +cOz ì²” +cOx 첕 +cOv ì²– +cOg ì²— +cjr ì²™ +cjR 첚 +cjrt ì²› +cjs 천 +cjsw ì² +cjsg 첞 +cje 첟 +cjf ì² +cjfr 첡 +cjfa ì²¢ +cjfq ì²£ +cjft 첤 +cjfx ì²¥ +cjfv 첦 +cjfg ì²§ +cja 첨 +cjq 첩 +cjqt 첪 +cjt 첫 +cjT 첬 +cjd ì² +cjw ì²® +cjc 첯 +cjz ì²° +cjx ì²± +cjv ì²² +cjg ì²³ +cpr ì²µ +cpR ì²¶ +cprt ì²· +cps 첸 +cpsw ì²¹ +cpsg 첺 +cpe ì²» +cpf ì²¼ +cpfr ì²½ +cpfa ì²¾ +cpfq 첿 +cpft ì³€ +cpfx ì³ +cpfv 쳂 +cpfg 쳃 +cpa 쳄 +cpq ì³… +cpqt 쳆 +cpt 쳇 +cpT 쳈 +cpd 쳉 +cpw 쳊 +cpc 쳋 +cpz 쳌 +cpx ì³ +cpv 쳎 +cpg ì³ +cur 쳑 +cuR ì³’ +curt 쳓 +cus ì³” +cusw 쳕 +cusg ì³– +cue ì³— +cuf 쳘 +cufr ì³™ +cufa 쳚 +cufq ì³› +cuft 쳜 +cufx ì³ +cufv 쳞 +cufg 쳟 +cua ì³ +cuq 쳡 +cuqt ì³¢ +cut ì³£ +cuT 쳤 +cud ì³¥ +cuw 쳦 +cuc ì³§ +cuz 쳨 +cux 쳩 +cuv 쳪 +cug 쳫 +cPr ì³ +cPR ì³® +cPrt 쳯 +cPs ì³° +cPsw ì³± +cPsg ì³² +cPe ì³³ +cPf ì³´ +cPfr ì³µ +cPfa ì³¶ +cPfq ì³· +cPft 쳸 +cPfx ì³¹ +cPfv 쳺 +cPfg ì³» +cPa ì³¼ +cPq ì³½ +cPqt ì³¾ +cPt 쳿 +cPT ì´€ +cPd ì´ +cPw ì´‚ +cPc ì´ƒ +cPz ì´„ +cPx ì´… +cPv ì´† +cPg ì´‡ +chr ì´‰ +chR ì´Š +chrt ì´‹ +chs ì´Œ +chsw ì´ +chsg ì´Ž +che ì´ +chf ì´ +chfr ì´‘ +chfa ì´’ +chfq ì´“ +chft ì´” +chfx ì´• +chfv ì´– +chfg ì´— +cha ì´˜ +chq ì´™ +chqt ì´š +cht ì´› +chT ì´œ +chd ì´ +chw ì´ž +chc ì´Ÿ +chz ì´ +chx ì´¡ +chv ì´¢ +chg ì´£ +chkr ì´¥ +chkR ì´¦ +chkrt ì´§ +chks ì´¨ +chksw ì´© +chksg ì´ª +chke ì´« +chkf ì´¬ +chkfr ì´ +chkfa ì´® +chkfq ì´¯ +chkft ì´° +chkfx ì´± +chkfv ì´² +chkfg ì´³ +chka ì´´ +chkq ì´µ +chkqt ì´¶ +chkt ì´· +chkT ì´¸ +chkd ì´¹ +chkw ì´º +chkc ì´» +chkz ì´¼ +chkx ì´½ +chkv ì´¾ +chkg ì´¿ +chor ìµ +choR 쵂 +chort 쵃 +chos 쵄 +chosw ìµ… +chosg 쵆 +choe 쵇 +chof 쵈 +chofr 쵉 +chofa 쵊 +chofq 쵋 +choft 쵌 +chofx ìµ +chofv 쵎 +chofg ìµ +choa ìµ +choq 쵑 +choqt ìµ’ +chot 쵓 +choT ìµ” +chod 쵕 +chow ìµ– +choc ìµ— +choz 쵘 +chox ìµ™ +chov 쵚 +chog ìµ› +chlr ìµ +chlR 쵞 +chlrt 쵟 +chls ìµ +chlsw 쵡 +chlsg ìµ¢ +chle ìµ£ +chlf 쵤 +chlfr ìµ¥ +chlfa 쵦 +chlfq ìµ§ +chlft 쵨 +chlfx 쵩 +chlfv 쵪 +chlfg 쵫 +chla 쵬 +chlq ìµ +chlqt ìµ® +chlt 쵯 +chlT ìµ° +chld ìµ± +chlw ìµ² +chlc ìµ³ +chlz ìµ´ +chlx ìµµ +chlv ìµ¶ +chlg ìµ· +cyr ìµ¹ +cyR 쵺 +cyrt ìµ» +cys ìµ¼ +cysw ìµ½ +cysg ìµ¾ +cye 쵿 +cyf ì¶€ +cyfr ì¶ +cyfa ì¶‚ +cyfq 춃 +cyft ì¶„ +cyfx ì¶… +cyfv 춆 +cyfg 춇 +cya 춈 +cyq 춉 +cyqt ì¶Š +cyt ì¶‹ +cyT ì¶Œ +cyd ì¶ +cyw ì¶Ž +cyc ì¶ +cyz ì¶ +cyx ì¶‘ +cyv ì¶’ +cyg ì¶“ +cnr ì¶• +cnR ì¶– +cnrt ì¶— +cns 춘 +cnsw ì¶™ +cnsg ì¶š +cne ì¶› +cnf ì¶œ +cnfr ì¶ +cnfa ì¶ž +cnfq ì¶Ÿ +cnft ì¶ +cnfx ì¶¡ +cnfv ì¶¢ +cnfg ì¶£ +cna 춤 +cnq ì¶¥ +cnqt 춦 +cnt ì¶§ +cnT 춨 +cnd ì¶© +cnw 춪 +cnc ì¶« +cnz 춬 +cnx ì¶ +cnv ì¶® +cng 춯 +cnjr ì¶± +cnjR ì¶² +cnjrt ì¶³ +cnjs ì¶´ +cnjsw ì¶µ +cnjsg ì¶¶ +cnje ì¶· +cnjf 춸 +cnjfr ì¶¹ +cnjfa 춺 +cnjfq ì¶» +cnjft ì¶¼ +cnjfx ì¶½ +cnjfv ì¶¾ +cnjfg ì¶¿ +cnja ì·€ +cnjq ì· +cnjqt ì·‚ +cnjt ì·ƒ +cnjT ì·„ +cnjd ì·… +cnjw ì·† +cnjc ì·‡ +cnjz ì·ˆ +cnjx ì·‰ +cnjv ì·Š +cnjg ì·‹ +cnpr ì· +cnpR ì·Ž +cnprt ì· +cnps ì· +cnpsw ì·‘ +cnpsg ì·’ +cnpe ì·“ +cnpf ì·” +cnpfr ì·• +cnpfa ì·– +cnpfq ì·— +cnpft ì·˜ +cnpfx ì·™ +cnpfv ì·š +cnpfg ì·› +cnpa ì·œ +cnpq ì· +cnpqt ì·ž +cnpt ì·Ÿ +cnpT ì· +cnpd ì·¡ +cnpw ì·¢ +cnpc ì·£ +cnpz ì·¤ +cnpx ì·¥ +cnpv ì·¦ +cnpg ì·§ +cnlr ì·© +cnlR ì·ª +cnlrt ì·« +cnls ì·¬ +cnlsw ì· +cnlsg ì·® +cnle ì·¯ +cnlf ì·° +cnlfr ì·± +cnlfa ì·² +cnlfq ì·³ +cnlft ì·´ +cnlfx ì·µ +cnlfv ì·¶ +cnlfg ì·· +cnla ì·¸ +cnlq ì·¹ +cnlqt ì·º +cnlt ì·» +cnlT ì·¼ +cnld ì·½ +cnlw ì·¾ +cnlc ì·¿ +cnlz 츀 +cnlx ì¸ +cnlv 츂 +cnlg 츃 +cbr 츅 +cbR 츆 +cbrt 츇 +cbs 츈 +cbsw 츉 +cbsg 츊 +cbe 츋 +cbf 츌 +cbfr ì¸ +cbfa 츎 +cbfq ì¸ +cbft ì¸ +cbfx 츑 +cbfv 츒 +cbfg 츓 +cba 츔 +cbq 츕 +cbqt 츖 +cbt 츗 +cbT 츘 +cbd 츙 +cbw 츚 +cbc 츛 +cbz 츜 +cbx ì¸ +cbv 츞 +cbg 츟 +cmr 측 +cmR 츢 +cmrt 츣 +cms 츤 +cmsw 츥 +cmsg 츦 +cme 츧 +cmf 츨 +cmfr 츩 +cmfa 츪 +cmfq 츫 +cmft 츬 +cmfx ì¸ +cmfv 츮 +cmfg 츯 +cma 츰 +cmq 츱 +cmqt 츲 +cmt 츳 +cmT 츴 +cmd 층 +cmw 츶 +cmc 츷 +cmz 츸 +cmx 츹 +cmv 츺 +cmg 츻 +cmlr 츽 +cmlR 츾 +cmlrt 츿 +cmls ì¹€ +cmlsw ì¹ +cmlsg 칂 +cmle 칃 +cmlf 칄 +cmlfr ì¹… +cmlfa 칆 +cmlfq 칇 +cmlft 칈 +cmlfx 칉 +cmlfv 칊 +cmlfg 칋 +cmla 칌 +cmlq ì¹ +cmlqt 칎 +cmlt ì¹ +cmlT ì¹ +cmld 칑 +cmlw ì¹’ +cmlc 칓 +cmlz ì¹” +cmlx 칕 +cmlv ì¹– +cmlg ì¹— +clr ì¹™ +clR 칚 +clrt ì¹› +cls 친 +clsw ì¹ +clsg 칞 +cle 칟 +clf ì¹ +clfr 칡 +clfa ì¹¢ +clfq ì¹£ +clft 칤 +clfx ì¹¥ +clfv 칦 +clfg ì¹§ +cla 침 +clq 칩 +clqt 칪 +clt 칫 +clT 칬 +cld ì¹ +clw ì¹® +clc 칯 +clz ì¹° +clx ì¹± +clv ì¹² +clg ì¹³ +zkr ì¹µ +zkR ì¹¶ +zkrt ì¹· +zks 칸 +zksw ì¹¹ +zksg 칺 +zke ì¹» +zkf ì¹¼ +zkfr ì¹½ +zkfa ì¹¾ +zkfq 칿 +zkft 캀 +zkfx ìº +zkfv 캂 +zkfg 캃 +zka 캄 +zkq 캅 +zkqt 캆 +zkt 캇 +zkT 캈 +zkd 캉 +zkw 캊 +zkc 캋 +zkz 캌 +zkx ìº +zkv 캎 +zkg ìº +zor 캑 +zoR 캒 +zort 캓 +zos 캔 +zosw 캕 +zosg 캖 +zoe 캗 +zof 캘 +zofr 캙 +zofa 캚 +zofq 캛 +zoft 캜 +zofx ìº +zofv 캞 +zofg 캟 +zoa ìº +zoq 캡 +zoqt 캢 +zot 캣 +zoT 캤 +zod 캥 +zow 캦 +zoc 캧 +zoz 캨 +zox 캩 +zov 캪 +zog 캫 +zir ìº +ziR 캮 +zirt 캯 +zis 캰 +zisw 캱 +zisg 캲 +zie 캳 +zif 캴 +zifr 캵 +zifa 캶 +zifq 캷 +zift 캸 +zifx 캹 +zifv 캺 +zifg 캻 +zia 캼 +ziq 캽 +ziqt 캾 +zit 캿 +ziT 컀 +zid ì» +ziw 컂 +zic 컃 +ziz 컄 +zix ì»… +ziv 컆 +zig 컇 +zOr 컉 +zOR 컊 +zOrt 컋 +zOs 컌 +zOsw ì» +zOsg 컎 +zOe ì» +zOf ì» +zOfr 컑 +zOfa ì»’ +zOfq 컓 +zOft ì»” +zOfx 컕 +zOfv ì»– +zOfg ì»— +zOa 컘 +zOq ì»™ +zOqt 컚 +zOt ì»› +zOT 컜 +zOd ì» +zOw 컞 +zOc 컟 +zOz ì» +zOx 컡 +zOv 컢 +zOg 컣 +zjr 컥 +zjR 컦 +zjrt ì»§ +zjs 컨 +zjsw 컩 +zjsg 컪 +zje 컫 +zjf 컬 +zjfr ì» +zjfa ì»® +zjfq 컯 +zjft ì»° +zjfx ì»± +zjfv 컲 +zjfg 컳 +zja ì»´ +zjq 컵 +zjqt ì»¶ +zjt ì»· +zjT 컸 +zjd 컹 +zjw 컺 +zjc ì»» +zjz 컼 +zjx 컽 +zjv 컾 +zjg 컿 +zpr ì¼ +zpR 켂 +zprt 켃 +zps 켄 +zpsw ì¼… +zpsg 켆 +zpe 켇 +zpf 켈 +zpfr 켉 +zpfa 켊 +zpfq 켋 +zpft 켌 +zpfx ì¼ +zpfv 켎 +zpfg ì¼ +zpa ì¼ +zpq 켑 +zpqt ì¼’ +zpt 켓 +zpT ì¼” +zpd 켕 +zpw ì¼– +zpc ì¼— +zpz 켘 +zpx ì¼™ +zpv 켚 +zpg ì¼› +zur ì¼ +zuR 켞 +zurt 켟 +zus ì¼ +zusw 켡 +zusg ì¼¢ +zue ì¼£ +zuf 켤 +zufr ì¼¥ +zufa 켦 +zufq ì¼§ +zuft 켨 +zufx 켩 +zufv 켪 +zufg 켫 +zua 켬 +zuq ì¼ +zuqt ì¼® +zut 켯 +zuT ì¼° +zud ì¼± +zuw ì¼² +zuc ì¼³ +zuz ì¼´ +zux ì¼µ +zuv ì¼¶ +zug ì¼· +zPr ì¼¹ +zPR 켺 +zPrt ì¼» +zPs ì¼¼ +zPsw ì¼½ +zPsg ì¼¾ +zPe 켿 +zPf ì½€ +zPfr ì½ +zPfa 콂 +zPfq 콃 +zPft 콄 +zPfx ì½… +zPfv 콆 +zPfg 콇 +zPa 콈 +zPq 콉 +zPqt 콊 +zPt 콋 +zPT 콌 +zPd ì½ +zPw 콎 +zPc ì½ +zPz ì½ +zPx 콑 +zPv ì½’ +zPg 콓 +zhr 콕 +zhR ì½– +zhrt ì½— +zhs 콘 +zhsw ì½™ +zhsg 콚 +zhe ì½› +zhf 콜 +zhfr ì½ +zhfa 콞 +zhfq 콟 +zhft ì½ +zhfx 콡 +zhfv ì½¢ +zhfg ì½£ +zha 콤 +zhq ì½¥ +zhqt 콦 +zht ì½§ +zhT 콨 +zhd 콩 +zhw 콪 +zhc 콫 +zhz 콬 +zhx ì½ +zhv ì½® +zhg 콯 +zhkr ì½± +zhkR ì½² +zhkrt ì½³ +zhks ì½´ +zhksw ì½µ +zhksg ì½¶ +zhke ì½· +zhkf 콸 +zhkfr ì½¹ +zhkfa 콺 +zhkfq ì½» +zhkft ì½¼ +zhkfx ì½½ +zhkfv ì½¾ +zhkfg 콿 +zhka ì¾€ +zhkq ì¾ +zhkqt 쾂 +zhkt 쾃 +zhkT 쾄 +zhkd ì¾… +zhkw 쾆 +zhkc 쾇 +zhkz 쾈 +zhkx 쾉 +zhkv 쾊 +zhkg 쾋 +zhor ì¾ +zhoR 쾎 +zhort ì¾ +zhos ì¾ +zhosw 쾑 +zhosg ì¾’ +zhoe 쾓 +zhof ì¾” +zhofr 쾕 +zhofa ì¾– +zhofq ì¾— +zhoft 쾘 +zhofx ì¾™ +zhofv 쾚 +zhofg ì¾› +zhoa 쾜 +zhoq ì¾ +zhoqt 쾞 +zhot 쾟 +zhoT ì¾ +zhod 쾡 +zhow ì¾¢ +zhoc ì¾£ +zhoz 쾤 +zhox ì¾¥ +zhov 쾦 +zhog ì¾§ +zhlr 쾩 +zhlR 쾪 +zhlrt 쾫 +zhls 쾬 +zhlsw ì¾ +zhlsg ì¾® +zhle 쾯 +zhlf ì¾° +zhlfr ì¾± +zhlfa ì¾² +zhlfq ì¾³ +zhlft ì¾´ +zhlfx ì¾µ +zhlfv ì¾¶ +zhlfg ì¾· +zhla 쾸 +zhlq ì¾¹ +zhlqt 쾺 +zhlt ì¾» +zhlT ì¾¼ +zhld ì¾½ +zhlw ì¾¾ +zhlc 쾿 +zhlz ì¿€ +zhlx ì¿ +zhlv ì¿‚ +zhlg 쿃 +zyr ì¿… +zyR 쿆 +zyrt 쿇 +zys 쿈 +zysw 쿉 +zysg 쿊 +zye ì¿‹ +zyf 쿌 +zyfr ì¿ +zyfa 쿎 +zyfq ì¿ +zyft ì¿ +zyfx ì¿‘ +zyfv ì¿’ +zyfg ì¿“ +zya ì¿” +zyq ì¿• +zyqt ì¿– +zyt ì¿— +zyT 쿘 +zyd ì¿™ +zyw 쿚 +zyc ì¿› +zyz 쿜 +zyx ì¿ +zyv 쿞 +zyg 쿟 +znr ì¿¡ +znR ì¿¢ +znrt ì¿£ +zns 쿤 +znsw ì¿¥ +znsg 쿦 +zne ì¿§ +znf 쿨 +znfr ì¿© +znfa 쿪 +znfq ì¿« +znft 쿬 +znfx ì¿ +znfv ì¿® +znfg 쿯 +zna ì¿° +znq 쿱 +znqt 쿲 +znt 쿳 +znT ì¿´ +znd 쿵 +znw ì¿¶ +znc ì¿· +znz 쿸 +znx 쿹 +znv 쿺 +zng ì¿» +znjr 쿽 +znjR 쿾 +znjrt ì¿¿ +znjs 퀀 +znjsw í€ +znjsg 퀂 +znje 퀃 +znjf 퀄 +znjfr 퀅 +znjfa 퀆 +znjfq 퀇 +znjft 퀈 +znjfx 퀉 +znjfv 퀊 +znjfg 퀋 +znja 퀌 +znjq í€ +znjqt 퀎 +znjt í€ +znjT í€ +znjd 퀑 +znjw 퀒 +znjc 퀓 +znjz 퀔 +znjx 퀕 +znjv 퀖 +znjg 퀗 +znpr 퀙 +znpR 퀚 +znprt 퀛 +znps 퀜 +znpsw í€ +znpsg 퀞 +znpe 퀟 +znpf í€ +znpfr 퀡 +znpfa 퀢 +znpfq 퀣 +znpft 퀤 +znpfx 퀥 +znpfv 퀦 +znpfg 퀧 +znpa 퀨 +znpq 퀩 +znpqt 퀪 +znpt 퀫 +znpT 퀬 +znpd í€ +znpw 퀮 +znpc 퀯 +znpz 퀰 +znpx 퀱 +znpv 퀲 +znpg 퀳 +znlr 퀵 +znlR 퀶 +znlrt 퀷 +znls 퀸 +znlsw 퀹 +znlsg 퀺 +znle 퀻 +znlf 퀼 +znlfr 퀽 +znlfa 퀾 +znlfq 퀿 +znlft í€ +znlfx í +znlfv í‚ +znlfg íƒ +znla í„ +znlq í… +znlqt í† +znlt í‡ +znlT íˆ +znld í‰ +znlw íŠ +znlc í‹ +znlz íŒ +znlx í +znlv íŽ +znlg í +zbr í‘ +zbR í’ +zbrt í“ +zbs í” +zbsw í• +zbsg í– +zbe í— +zbf í˜ +zbfr í™ +zbfa íš +zbfq í› +zbft íœ +zbfx í +zbfv íž +zbfg íŸ +zba í +zbq í¡ +zbqt í¢ +zbt í£ +zbT í¤ +zbd í¥ +zbw í¦ +zbc í§ +zbz í¨ +zbx í© +zbv íª +zbg í« +zmr í +zmR í® +zmrt í¯ +zms í° +zmsw í± +zmsg í² +zme í³ +zmf í´ +zmfr íµ +zmfa í¶ +zmfq í· +zmft í¸ +zmfx í¹ +zmfv íº +zmfg í» +zma í¼ +zmq í½ +zmqt í¾ +zmt í¿ +zmT í‚€ +zmd í‚ +zmw í‚‚ +zmc 킃 +zmz í‚„ +zmx í‚… +zmv 킆 +zmg 킇 +zmlr 킉 +zmlR 킊 +zmlrt í‚‹ +zmls 킌 +zmlsw í‚ +zmlsg 킎 +zmle í‚ +zmlf í‚ +zmlfr í‚‘ +zmlfa í‚’ +zmlfq í‚“ +zmlft í‚” +zmlfx í‚• +zmlfv í‚– +zmlfg í‚— +zmla 킘 +zmlq í‚™ +zmlqt 킚 +zmlt í‚› +zmlT 킜 +zmld í‚ +zmlw 킞 +zmlc 킟 +zmlz í‚ +zmlx í‚¡ +zmlv í‚¢ +zmlg í‚£ +zlr í‚¥ +zlR 킦 +zlrt í‚§ +zls 킨 +zlsw í‚© +zlsg 킪 +zle í‚« +zlf 킬 +zlfr í‚ +zlfa í‚® +zlfq 킯 +zlft í‚° +zlfx 킱 +zlfv 킲 +zlfg 킳 +zla í‚´ +zlq 킵 +zlqt í‚¶ +zlt í‚· +zlT 킸 +zld 킹 +zlw 킺 +zlc í‚» +zlz 킼 +zlx 킽 +zlv 킾 +zlg í‚¿ +xkr íƒ +xkR 탂 +xkrt 탃 +xks 탄 +xksw 탅 +xksg 탆 +xke 탇 +xkf 탈 +xkfr 탉 +xkfa 탊 +xkfq 탋 +xkft 탌 +xkfx íƒ +xkfv 탎 +xkfg íƒ +xka íƒ +xkq 탑 +xkqt 탒 +xkt 탓 +xkT 탔 +xkd 탕 +xkw 탖 +xkc 탗 +xkz 탘 +xkx 탙 +xkv 탚 +xkg 탛 +xor íƒ +xoR 탞 +xort 탟 +xos íƒ +xosw 탡 +xosg 탢 +xoe 탣 +xof 탤 +xofr 탥 +xofa 탦 +xofq 탧 +xoft 탨 +xofx 탩 +xofv 탪 +xofg 탫 +xoa 탬 +xoq íƒ +xoqt 탮 +xot 탯 +xoT 탰 +xod 탱 +xow 탲 +xoc 탳 +xoz 탴 +xox 탵 +xov 탶 +xog 탷 +xir 탹 +xiR 탺 +xirt 탻 +xis 탼 +xisw 탽 +xisg 탾 +xie 탿 +xif í„€ +xifr í„ +xifa í„‚ +xifq 턃 +xift í„„ +xifx í„… +xifv 턆 +xifg 턇 +xia 턈 +xiq 턉 +xiqt 턊 +xit í„‹ +xiT 턌 +xid í„ +xiw 턎 +xic í„ +xiz í„ +xix í„‘ +xiv í„’ +xig í„“ +xOr í„• +xOR í„– +xOrt í„— +xOs 턘 +xOsw í„™ +xOsg 턚 +xOe í„› +xOf 턜 +xOfr í„ +xOfa 턞 +xOfq 턟 +xOft í„ +xOfx í„¡ +xOfv í„¢ +xOfg í„£ +xOa 턤 +xOq í„¥ +xOqt 턦 +xOt í„§ +xOT 턨 +xOd í„© +xOw 턪 +xOc í„« +xOz 턬 +xOx í„ +xOv í„® +xOg 턯 +xjr 턱 +xjR 턲 +xjrt 턳 +xjs í„´ +xjsw 턵 +xjsg í„¶ +xje í„· +xjf 털 +xjfr 턹 +xjfa 턺 +xjfq í„» +xjft 턼 +xjfx 턽 +xjfv 턾 +xjfg í„¿ +xja í…€ +xjq í… +xjqt í…‚ +xjt í…ƒ +xjT í…„ +xjd í…… +xjw í…† +xjc í…‡ +xjz í…ˆ +xjx í…‰ +xjv í…Š +xjg í…‹ +xpr í… +xpR í…Ž +xprt í… +xps í… +xpsw í…‘ +xpsg í…’ +xpe í…“ +xpf í…” +xpfr í…• +xpfa í…– +xpfq í…— +xpft í…˜ +xpfx í…™ +xpfv í…š +xpfg í…› +xpa í…œ +xpq í… +xpqt í…ž +xpt í…Ÿ +xpT í… +xpd í…¡ +xpw í…¢ +xpc í…£ +xpz í…¤ +xpx í…¥ +xpv í…¦ +xpg í…§ +xur í…© +xuR í…ª +xurt í…« +xus í…¬ +xusw í… +xusg í…® +xue í…¯ +xuf í…° +xufr í…± +xufa í…² +xufq í…³ +xuft í…´ +xufx í…µ +xufv í…¶ +xufg í…· +xua í…¸ +xuq í…¹ +xuqt í…º +xut í…» +xuT í…¼ +xud í…½ +xuw í…¾ +xuc í…¿ +xuz 톀 +xux í† +xuv 톂 +xug 톃 +xPr 톅 +xPR 톆 +xPrt 톇 +xPs 톈 +xPsw 톉 +xPsg 톊 +xPe 톋 +xPf 톌 +xPfr í† +xPfa 톎 +xPfq í† +xPft í† +xPfx 톑 +xPfv 톒 +xPfg 톓 +xPa 톔 +xPq 톕 +xPqt 톖 +xPt 톗 +xPT 톘 +xPd 톙 +xPw 톚 +xPc 톛 +xPz 톜 +xPx í† +xPv 톞 +xPg 톟 +xhr 톡 +xhR 톢 +xhrt 톣 +xhs 톤 +xhsw 톥 +xhsg 톦 +xhe 톧 +xhf 톨 +xhfr 톩 +xhfa 톪 +xhfq 톫 +xhft 톬 +xhfx í† +xhfv 톮 +xhfg 톯 +xha 톰 +xhq 톱 +xhqt 톲 +xht 톳 +xhT 톴 +xhd 통 +xhw 톶 +xhc 톷 +xhz 톸 +xhx 톹 +xhv 톺 +xhg 톻 +xhkr 톽 +xhkR 톾 +xhkrt 톿 +xhks 퇀 +xhksw í‡ +xhksg 퇂 +xhke 퇃 +xhkf 퇄 +xhkfr 퇅 +xhkfa 퇆 +xhkfq 퇇 +xhkft 퇈 +xhkfx 퇉 +xhkfv 퇊 +xhkfg 퇋 +xhka 퇌 +xhkq í‡ +xhkqt 퇎 +xhkt í‡ +xhkT í‡ +xhkd 퇑 +xhkw 퇒 +xhkc 퇓 +xhkz 퇔 +xhkx 퇕 +xhkv 퇖 +xhkg 퇗 +xhor 퇙 +xhoR 퇚 +xhort 퇛 +xhos 퇜 +xhosw í‡ +xhosg 퇞 +xhoe 퇟 +xhof í‡ +xhofr 퇡 +xhofa 퇢 +xhofq 퇣 +xhoft 퇤 +xhofx 퇥 +xhofv 퇦 +xhofg 퇧 +xhoa 퇨 +xhoq 퇩 +xhoqt 퇪 +xhot 퇫 +xhoT 퇬 +xhod í‡ +xhow 퇮 +xhoc 퇯 +xhoz 퇰 +xhox 퇱 +xhov 퇲 +xhog 퇳 +xhlr 퇵 +xhlR 퇶 +xhlrt 퇷 +xhls 퇸 +xhlsw 퇹 +xhlsg 퇺 +xhle 퇻 +xhlf 퇼 +xhlfr 퇽 +xhlfa 퇾 +xhlfq 퇿 +xhlft 툀 +xhlfx íˆ +xhlfv 툂 +xhlfg 툃 +xhla 툄 +xhlq 툅 +xhlqt 툆 +xhlt 툇 +xhlT 툈 +xhld 툉 +xhlw 툊 +xhlc 툋 +xhlz 툌 +xhlx íˆ +xhlv 툎 +xhlg íˆ +xyr 툑 +xyR 툒 +xyrt 툓 +xys 툔 +xysw 툕 +xysg 툖 +xye 툗 +xyf 툘 +xyfr 툙 +xyfa 툚 +xyfq 툛 +xyft 툜 +xyfx íˆ +xyfv 툞 +xyfg 툟 +xya íˆ +xyq 툡 +xyqt 툢 +xyt 툣 +xyT 툤 +xyd 툥 +xyw 툦 +xyc 툧 +xyz 툨 +xyx 툩 +xyv 툪 +xyg 툫 +xnr íˆ +xnR 툮 +xnrt 툯 +xns 툰 +xnsw 툱 +xnsg 툲 +xne 툳 +xnf 툴 +xnfr 툵 +xnfa 툶 +xnfq 툷 +xnft 툸 +xnfx 툹 +xnfv 툺 +xnfg 툻 +xna 툼 +xnq 툽 +xnqt 툾 +xnt 툿 +xnT 퉀 +xnd í‰ +xnw 퉂 +xnc 퉃 +xnz 퉄 +xnx 퉅 +xnv 퉆 +xng 퉇 +xnjr 퉉 +xnjR 퉊 +xnjrt 퉋 +xnjs 퉌 +xnjsw í‰ +xnjsg 퉎 +xnje í‰ +xnjf í‰ +xnjfr 퉑 +xnjfa 퉒 +xnjfq 퉓 +xnjft 퉔 +xnjfx 퉕 +xnjfv 퉖 +xnjfg 퉗 +xnja 퉘 +xnjq 퉙 +xnjqt 퉚 +xnjt 퉛 +xnjT 퉜 +xnjd í‰ +xnjw 퉞 +xnjc 퉟 +xnjz í‰ +xnjx 퉡 +xnjv 퉢 +xnjg 퉣 +xnpr 퉥 +xnpR 퉦 +xnprt 퉧 +xnps 퉨 +xnpsw 퉩 +xnpsg 퉪 +xnpe 퉫 +xnpf 퉬 +xnpfr í‰ +xnpfa 퉮 +xnpfq 퉯 +xnpft 퉰 +xnpfx 퉱 +xnpfv 퉲 +xnpfg 퉳 +xnpa 퉴 +xnpq 퉵 +xnpqt 퉶 +xnpt 퉷 +xnpT 퉸 +xnpd 퉹 +xnpw 퉺 +xnpc 퉻 +xnpz 퉼 +xnpx 퉽 +xnpv 퉾 +xnpg 퉿 +xnlr íŠ +xnlR 튂 +xnlrt 튃 +xnls 튄 +xnlsw 튅 +xnlsg 튆 +xnle 튇 +xnlf 튈 +xnlfr 튉 +xnlfa 튊 +xnlfq 튋 +xnlft 튌 +xnlfx íŠ +xnlfv 튎 +xnlfg íŠ +xnla íŠ +xnlq 튑 +xnlqt 튒 +xnlt 튓 +xnlT 튔 +xnld 튕 +xnlw 튖 +xnlc 튗 +xnlz 튘 +xnlx 튙 +xnlv 튚 +xnlg 튛 +xbr íŠ +xbR 튞 +xbrt 튟 +xbs íŠ +xbsw 튡 +xbsg 튢 +xbe 튣 +xbf 튤 +xbfr 튥 +xbfa 튦 +xbfq 튧 +xbft 튨 +xbfx 튩 +xbfv 튪 +xbfg 튫 +xba 튬 +xbq íŠ +xbqt 튮 +xbt 튯 +xbT 튰 +xbd 튱 +xbw 튲 +xbc 튳 +xbz 튴 +xbx 튵 +xbv 튶 +xbg 튷 +xmr 특 +xmR 튺 +xmrt 튻 +xms 튼 +xmsw 튽 +xmsg 튾 +xme 튿 +xmf í‹€ +xmfr í‹ +xmfa í‹‚ +xmfq 틃 +xmft í‹„ +xmfx í‹… +xmfv 틆 +xmfg 틇 +xma 틈 +xmq 틉 +xmqt 틊 +xmt í‹‹ +xmT 틌 +xmd í‹ +xmw 틎 +xmc í‹ +xmz í‹ +xmx í‹‘ +xmv í‹’ +xmg í‹“ +xmlr í‹• +xmlR í‹– +xmlrt í‹— +xmls 틘 +xmlsw í‹™ +xmlsg 틚 +xmle í‹› +xmlf 틜 +xmlfr í‹ +xmlfa 틞 +xmlfq 틟 +xmlft í‹ +xmlfx í‹¡ +xmlfv í‹¢ +xmlfg í‹£ +xmla 틤 +xmlq í‹¥ +xmlqt 틦 +xmlt í‹§ +xmlT 틨 +xmld í‹© +xmlw 틪 +xmlc í‹« +xmlz 틬 +xmlx í‹ +xmlv í‹® +xmlg 틯 +xlr 틱 +xlR 틲 +xlrt 틳 +xls í‹´ +xlsw 틵 +xlsg í‹¶ +xle í‹· +xlf 틸 +xlfr 틹 +xlfa 틺 +xlfq í‹» +xlft 틼 +xlfx 틽 +xlfv 틾 +xlfg í‹¿ +xla 팀 +xlq íŒ +xlqt 팂 +xlt 팃 +xlT 팄 +xld 팅 +xlw 팆 +xlc 팇 +xlz 팈 +xlx 팉 +xlv 팊 +xlg 팋 +vkr íŒ +vkR 팎 +vkrt íŒ +vks íŒ +vksw 팑 +vksg 팒 +vke 팓 +vkf 팔 +vkfr 팕 +vkfa 팖 +vkfq 팗 +vkft 팘 +vkfx 팙 +vkfv 팚 +vkfg 팛 +vka 팜 +vkq íŒ +vkqt 팞 +vkt 팟 +vkT íŒ +vkd 팡 +vkw 팢 +vkc 팣 +vkz 팤 +vkx 팥 +vkv 팦 +vkg 팧 +vor 팩 +voR 팪 +vort 팫 +vos 팬 +vosw íŒ +vosg 팮 +voe 팯 +vof 팰 +vofr 팱 +vofa 팲 +vofq 팳 +voft 팴 +vofx 팵 +vofv 팶 +vofg 팷 +voa 팸 +voq 팹 +voqt 팺 +vot 팻 +voT 팼 +vod 팽 +vow 팾 +voc 팿 +voz í€ +vox í +vov í‚ +vog íƒ +vir í… +viR í† +virt í‡ +vis íˆ +visw í‰ +visg íŠ +vie í‹ +vif íŒ +vifr í +vifa íŽ +vifq í +vift í +vifx í‘ +vifv í’ +vifg í“ +via í” +viq í• +viqt í– +vit í— +viT í˜ +vid í™ +viw íš +vic í› +viz íœ +vix í +viv íž +vig íŸ +vOr í¡ +vOR í¢ +vOrt í£ +vOs í¤ +vOsw í¥ +vOsg í¦ +vOe í§ +vOf í¨ +vOfr í© +vOfa íª +vOfq í« +vOft í¬ +vOfx í +vOfv í® +vOfg í¯ +vOa í° +vOq í± +vOqt í² +vOt í³ +vOT í´ +vOd íµ +vOw í¶ +vOc í· +vOz í¸ +vOx í¹ +vOv íº +vOg í» +vjr í½ +vjR í¾ +vjrt í¿ +vjs 펀 +vjsw íŽ +vjsg 펂 +vje 펃 +vjf 펄 +vjfr 펅 +vjfa 펆 +vjfq 펇 +vjft 펈 +vjfx 펉 +vjfv 펊 +vjfg 펋 +vja 펌 +vjq íŽ +vjqt 펎 +vjt íŽ +vjT íŽ +vjd 펑 +vjw 펒 +vjc 펓 +vjz 펔 +vjx 펕 +vjv 펖 +vjg 펗 +vpr 펙 +vpR 펚 +vprt 펛 +vps 펜 +vpsw íŽ +vpsg 펞 +vpe 펟 +vpf íŽ +vpfr 펡 +vpfa 펢 +vpfq 펣 +vpft 펤 +vpfx 펥 +vpfv 펦 +vpfg 펧 +vpa 펨 +vpq 펩 +vpqt 펪 +vpt 펫 +vpT 펬 +vpd íŽ +vpw 펮 +vpc 펯 +vpz 펰 +vpx 펱 +vpv 펲 +vpg 펳 +vur 펵 +vuR 펶 +vurt 펷 +vus 편 +vusw 펹 +vusg 펺 +vue 펻 +vuf 펼 +vufr 펽 +vufa 펾 +vufq 펿 +vuft í€ +vufx í +vufv í‚ +vufg íƒ +vua í„ +vuq í… +vuqt í† +vut í‡ +vuT íˆ +vud í‰ +vuw íŠ +vuc í‹ +vuz íŒ +vux í +vuv íŽ +vug í +vPr í‘ +vPR í’ +vPrt í“ +vPs í” +vPsw í• +vPsg í– +vPe í— +vPf í˜ +vPfr í™ +vPfa íš +vPfq í› +vPft íœ +vPfx í +vPfv íž +vPfg íŸ +vPa í +vPq í¡ +vPqt í¢ +vPt í£ +vPT í¤ +vPd í¥ +vPw í¦ +vPc í§ +vPz í¨ +vPx í© +vPv íª +vPg í« +vhr í +vhR í® +vhrt í¯ +vhs í° +vhsw í± +vhsg í² +vhe í³ +vhf í´ +vhfr íµ +vhfa í¶ +vhfq í· +vhft í¸ +vhfx í¹ +vhfv íº +vhfg í» +vha í¼ +vhq í½ +vhqt í¾ +vht í¿ +vhT í€ +vhd í +vhw í‚ +vhc íƒ +vhz í„ +vhx í… +vhv í† +vhg í‡ +vhkr í‰ +vhkR íŠ +vhkrt í‹ +vhks íŒ +vhksw í +vhksg íŽ +vhke í +vhkf í +vhkfr í‘ +vhkfa í’ +vhkfq í“ +vhkft í” +vhkfx í• +vhkfv í– +vhkfg í— +vhka í˜ +vhkq í™ +vhkqt íš +vhkt í› +vhkT íœ +vhkd í +vhkw íž +vhkc íŸ +vhkz í +vhkx í¡ +vhkv í¢ +vhkg í£ +vhor í¥ +vhoR í¦ +vhort í§ +vhos í¨ +vhosw í© +vhosg íª +vhoe í« +vhof í¬ +vhofr í +vhofa í® +vhofq í¯ +vhoft í° +vhofx í± +vhofv í² +vhofg í³ +vhoa í´ +vhoq íµ +vhoqt í¶ +vhot í· +vhoT í¸ +vhod í¹ +vhow íº +vhoc í» +vhoz í¼ +vhox í½ +vhov í¾ +vhog í¿ +vhlr í‘ +vhlR í‘‚ +vhlrt 푃 +vhls í‘„ +vhlsw í‘… +vhlsg 푆 +vhle 푇 +vhlf 푈 +vhlfr 푉 +vhlfa 푊 +vhlfq í‘‹ +vhlft 푌 +vhlfx í‘ +vhlfv 푎 +vhlfg í‘ +vhla í‘ +vhlq í‘‘ +vhlqt í‘’ +vhlt í‘“ +vhlT í‘” +vhld í‘• +vhlw í‘– +vhlc í‘— +vhlz 푘 +vhlx í‘™ +vhlv 푚 +vhlg í‘› +vyr í‘ +vyR 푞 +vyrt 푟 +vys í‘ +vysw í‘¡ +vysg í‘¢ +vye í‘£ +vyf 푤 +vyfr í‘¥ +vyfa 푦 +vyfq í‘§ +vyft 푨 +vyfx í‘© +vyfv 푪 +vyfg í‘« +vya 푬 +vyq í‘ +vyqt í‘® +vyt 푯 +vyT í‘° +vyd 푱 +vyw 푲 +vyc 푳 +vyz í‘´ +vyx 푵 +vyv í‘¶ +vyg í‘· +vnr 푹 +vnR 푺 +vnrt í‘» +vns 푼 +vnsw 푽 +vnsg 푾 +vne í‘¿ +vnf í’€ +vnfr í’ +vnfa í’‚ +vnfq í’ƒ +vnft í’„ +vnfx í’… +vnfv í’† +vnfg í’‡ +vna í’ˆ +vnq í’‰ +vnqt í’Š +vnt í’‹ +vnT í’Œ +vnd í’ +vnw í’Ž +vnc í’ +vnz í’ +vnx í’‘ +vnv í’’ +vng í’“ +vnjr í’• +vnjR í’– +vnjrt í’— +vnjs í’˜ +vnjsw í’™ +vnjsg í’š +vnje í’› +vnjf í’œ +vnjfr í’ +vnjfa í’ž +vnjfq í’Ÿ +vnjft í’ +vnjfx í’¡ +vnjfv í’¢ +vnjfg í’£ +vnja í’¤ +vnjq í’¥ +vnjqt í’¦ +vnjt í’§ +vnjT í’¨ +vnjd í’© +vnjw í’ª +vnjc í’« +vnjz í’¬ +vnjx í’ +vnjv í’® +vnjg í’¯ +vnpr í’± +vnpR í’² +vnprt í’³ +vnps í’´ +vnpsw í’µ +vnpsg í’¶ +vnpe í’· +vnpf í’¸ +vnpfr í’¹ +vnpfa í’º +vnpfq í’» +vnpft í’¼ +vnpfx í’½ +vnpfv í’¾ +vnpfg í’¿ +vnpa í“€ +vnpq í“ +vnpqt í“‚ +vnpt 퓃 +vnpT í“„ +vnpd í“… +vnpw 퓆 +vnpc 퓇 +vnpz 퓈 +vnpx 퓉 +vnpv 퓊 +vnpg í“‹ +vnlr í“ +vnlR 퓎 +vnlrt í“ +vnls í“ +vnlsw í“‘ +vnlsg í“’ +vnle í““ +vnlf í“” +vnlfr í“• +vnlfa í“– +vnlfq í“— +vnlft 퓘 +vnlfx í“™ +vnlfv 퓚 +vnlfg í“› +vnla 퓜 +vnlq í“ +vnlqt 퓞 +vnlt 퓟 +vnlT í“ +vnld í“¡ +vnlw í“¢ +vnlc í“£ +vnlz 퓤 +vnlx í“¥ +vnlv 퓦 +vnlg í“§ +vbr í“© +vbR 퓪 +vbrt í“« +vbs 퓬 +vbsw í“ +vbsg í“® +vbe 퓯 +vbf í“° +vbfr 퓱 +vbfa 퓲 +vbfq 퓳 +vbft í“´ +vbfx 퓵 +vbfv í“¶ +vbfg í“· +vba 퓸 +vbq 퓹 +vbqt 퓺 +vbt í“» +vbT 퓼 +vbd 퓽 +vbw 퓾 +vbc í“¿ +vbz 픀 +vbx í” +vbv 픂 +vbg 픃 +vmr í”… +vmR 픆 +vmrt 픇 +vms 픈 +vmsw 픉 +vmsg 픊 +vme 픋 +vmf 플 +vmfr í” +vmfa 픎 +vmfq í” +vmft í” +vmfx 픑 +vmfv í”’ +vmfg 픓 +vma í”” +vmq 픕 +vmqt í”– +vmt í”— +vmT 픘 +vmd í”™ +vmw 픚 +vmc í”› +vmz 픜 +vmx í” +vmv 픞 +vmg 픟 +vmlr 픡 +vmlR 픢 +vmlrt 픣 +vmls 픤 +vmlsw 픥 +vmlsg 픦 +vmle í”§ +vmlf 픨 +vmlfr 픩 +vmlfa 픪 +vmlfq 픫 +vmlft 픬 +vmlfx í” +vmlfv í”® +vmlfg 픯 +vmla í”° +vmlq í”± +vmlqt 픲 +vmlt 픳 +vmlT í”´ +vmld 픵 +vmlw í”¶ +vmlc í”· +vmlz 픸 +vmlx 픹 +vmlv 픺 +vmlg í”» +vlr 픽 +vlR 픾 +vlrt 픿 +vls í•€ +vlsw í• +vlsg í•‚ +vle 핃 +vlf í•„ +vlfr í•… +vlfa 핆 +vlfq 핇 +vlft 핈 +vlfx 핉 +vlfv 핊 +vlfg í•‹ +vla 핌 +vlq í• +vlqt 핎 +vlt í• +vlT í• +vld í•‘ +vlw í•’ +vlc í•“ +vlz í•” +vlx í•• +vlv í•– +vlg í•— +gkr í•™ +gkR 핚 +gkrt í•› +gks 한 +gksw í• +gksg 핞 +gke 핟 +gkf í• +gkfr í•¡ +gkfa í•¢ +gkfq í•£ +gkft 핤 +gkfx í•¥ +gkfv 핦 +gkfg í•§ +gka 함 +gkq í•© +gkqt 핪 +gkt í•« +gkT 핬 +gkd í• +gkw í•® +gkc 핯 +gkz í•° +gkx 핱 +gkv 핲 +gkg 핳 +gor 핵 +goR í•¶ +gort í•· +gos 핸 +gosw 핹 +gosg 핺 +goe í•» +gof 핼 +gofr 핽 +gofa 핾 +gofq í•¿ +goft í–€ +gofx í– +gofv í–‚ +gofg í–ƒ +goa í–„ +goq í–… +goqt í–† +got í–‡ +goT í–ˆ +god í–‰ +gow í–Š +goc í–‹ +goz í–Œ +gox í– +gov í–Ž +gog í– +gir í–‘ +giR í–’ +girt í–“ +gis í–” +gisw í–• +gisg í–– +gie í–— +gif í–˜ +gifr í–™ +gifa í–š +gifq í–› +gift í–œ +gifx í– +gifv í–ž +gifg í–Ÿ +gia í– +giq í–¡ +giqt í–¢ +git í–£ +giT í–¤ +gid í–¥ +giw í–¦ +gic í–§ +giz í–¨ +gix í–© +giv í–ª +gig í–« +gOr í– +gOR í–® +gOrt í–¯ +gOs í–° +gOsw í–± +gOsg í–² +gOe í–³ +gOf í–´ +gOfr í–µ +gOfa í–¶ +gOfq í–· +gOft í–¸ +gOfx í–¹ +gOfv í–º +gOfg í–» +gOa í–¼ +gOq í–½ +gOqt í–¾ +gOt í–¿ +gOT í—€ +gOd í— +gOw í—‚ +gOc í—ƒ +gOz í—„ +gOx í—… +gOv í—† +gOg í—‡ +gjr í—‰ +gjR í—Š +gjrt í—‹ +gjs í—Œ +gjsw í— +gjsg í—Ž +gje í— +gjf í— +gjfr í—‘ +gjfa í—’ +gjfq í—“ +gjft í—” +gjfx í—• +gjfv í—– +gjfg í—— +gja í—˜ +gjq í—™ +gjqt í—š +gjt í—› +gjT í—œ +gjd í— +gjw í—ž +gjc í—Ÿ +gjz í— +gjx í—¡ +gjv í—¢ +gjg í—£ +gpr í—¥ +gpR í—¦ +gprt í—§ +gps í—¨ +gpsw í—© +gpsg í—ª +gpe í—« +gpf í—¬ +gpfr í— +gpfa í—® +gpfq í—¯ +gpft í—° +gpfx í—± +gpfv í—² +gpfg í—³ +gpa í—´ +gpq í—µ +gpqt í—¶ +gpt í—· +gpT í—¸ +gpd í—¹ +gpw í—º +gpc í—» +gpz í—¼ +gpx í—½ +gpv í—¾ +gpg í—¿ +gur í˜ +guR 혂 +gurt 혃 +gus 현 +gusw 혅 +gusg 혆 +gue 혇 +guf 혈 +gufr 혉 +gufa 혊 +gufq 혋 +guft 혌 +gufx í˜ +gufv 혎 +gufg í˜ +gua í˜ +guq 협 +guqt 혒 +gut 혓 +guT 혔 +gud 형 +guw 혖 +guc 혗 +guz 혘 +gux 혙 +guv 혚 +gug 혛 +gPr í˜ +gPR 혞 +gPrt 혟 +gPs í˜ +gPsw 혡 +gPsg 혢 +gPe 혣 +gPf 혤 +gPfr 혥 +gPfa 혦 +gPfq 혧 +gPft 혨 +gPfx 혩 +gPfv 혪 +gPfg 혫 +gPa 혬 +gPq í˜ +gPqt 혮 +gPt 혯 +gPT 혰 +gPd 혱 +gPw 혲 +gPc 혳 +gPz 혴 +gPx 혵 +gPv 혶 +gPg 혷 +ghr 혹 +ghR 혺 +ghrt 혻 +ghs 혼 +ghsw 혽 +ghsg 혾 +ghe 혿 +ghf 홀 +ghfr í™ +ghfa 홂 +ghfq 홃 +ghft 홄 +ghfx í™… +ghfv 홆 +ghfg 홇 +gha 홈 +ghq 홉 +ghqt 홊 +ght 홋 +ghT 홌 +ghd í™ +ghw 홎 +ghc í™ +ghz í™ +ghx 홑 +ghv í™’ +ghg 홓 +ghkr 확 +ghkR í™– +ghkrt í™— +ghks 환 +ghksw í™™ +ghksg 홚 +ghke í™› +ghkf 활 +ghkfr í™ +ghkfa 홞 +ghkfq 홟 +ghkft í™ +ghkfx 홡 +ghkfv 홢 +ghkfg 홣 +ghka 홤 +ghkq 홥 +ghkqt 홦 +ghkt í™§ +ghkT 홨 +ghkd 황 +ghkw 홪 +ghkc 홫 +ghkz 홬 +ghkx í™ +ghkv í™® +ghkg 홯 +ghor í™± +ghoR 홲 +ghort 홳 +ghos í™´ +ghosw 홵 +ghosg í™¶ +ghoe í™· +ghof 홸 +ghofr 홹 +ghofa 홺 +ghofq í™» +ghoft 홼 +ghofx 홽 +ghofv 홾 +ghofg 홿 +ghoa 횀 +ghoq íš +ghoqt íš‚ +ghot 횃 +ghoT íš„ +ghod íš… +ghow 횆 +ghoc 횇 +ghoz 횈 +ghox 횉 +ghov 횊 +ghog íš‹ +ghlr íš +ghlR 횎 +ghlrt íš +ghls íš +ghlsw íš‘ +ghlsg íš’ +ghle íš“ +ghlf íš” +ghlfr íš• +ghlfa íš– +ghlfq íš— +ghlft 횘 +ghlfx íš™ +ghlfv íšš +ghlfg íš› +ghla íšœ +ghlq íš +ghlqt íšž +ghlt 횟 +ghlT íš +ghld íš¡ +ghlw 횢 +ghlc 횣 +ghlz 횤 +ghlx 횥 +ghlv 횦 +ghlg íš§ +gyr íš© +gyR 횪 +gyrt íš« +gys 횬 +gysw íš +gysg íš® +gye 횯 +gyf íš° +gyfr íš± +gyfa íš² +gyfq íš³ +gyft íš´ +gyfx íšµ +gyfv íš¶ +gyfg íš· +gya 횸 +gyq íš¹ +gyqt 횺 +gyt íš» +gyT íš¼ +gyd íš½ +gyw íš¾ +gyc íš¿ +gyz 훀 +gyx í› +gyv 훂 +gyg 훃 +gnr í›… +gnR 훆 +gnrt 훇 +gns 훈 +gnsw 훉 +gnsg 훊 +gne 훋 +gnf 훌 +gnfr í› +gnfa 훎 +gnfq í› +gnft í› +gnfx 훑 +gnfv í›’ +gnfg 훓 +gna í›” +gnq 훕 +gnqt í›– +gnt í›— +gnT 훘 +gnd í›™ +gnw 훚 +gnc í›› +gnz 훜 +gnx í› +gnv 훞 +gng 훟 +gnjr 훡 +gnjR 훢 +gnjrt 훣 +gnjs 훤 +gnjsw 훥 +gnjsg 훦 +gnje í›§ +gnjf 훨 +gnjfr 훩 +gnjfa 훪 +gnjfq 훫 +gnjft 훬 +gnjfx í› +gnjfv í›® +gnjfg 훯 +gnja í›° +gnjq í›± +gnjqt 훲 +gnjt 훳 +gnjT í›´ +gnjd 훵 +gnjw í›¶ +gnjc í›· +gnjz 훸 +gnjx 훹 +gnjv 훺 +gnjg í›» +gnpr 훽 +gnpR 훾 +gnprt 훿 +gnps 휀 +gnpsw íœ +gnpsg 휂 +gnpe 휃 +gnpf 휄 +gnpfr 휅 +gnpfa 휆 +gnpfq 휇 +gnpft 휈 +gnpfx 휉 +gnpfv 휊 +gnpfg 휋 +gnpa 휌 +gnpq íœ +gnpqt 휎 +gnpt íœ +gnpT íœ +gnpd 휑 +gnpw 휒 +gnpc 휓 +gnpz 휔 +gnpx 휕 +gnpv 휖 +gnpg 휗 +gnlr 휙 +gnlR 휚 +gnlrt 휛 +gnls 휜 +gnlsw íœ +gnlsg 휞 +gnle 휟 +gnlf íœ +gnlfr 휡 +gnlfa 휢 +gnlfq 휣 +gnlft 휤 +gnlfx 휥 +gnlfv 휦 +gnlfg 휧 +gnla 휨 +gnlq 휩 +gnlqt 휪 +gnlt 휫 +gnlT 휬 +gnld íœ +gnlw 휮 +gnlc 휯 +gnlz 휰 +gnlx 휱 +gnlv 휲 +gnlg 휳 +gbr 휵 +gbR 휶 +gbrt 휷 +gbs 휸 +gbsw 휹 +gbsg 휺 +gbe 휻 +gbf 휼 +gbfr 휽 +gbfa 휾 +gbfq 휿 +gbft í€ +gbfx í +gbfv í‚ +gbfg íƒ +gba í„ +gbq í… +gbqt í† +gbt í‡ +gbT íˆ +gbd í‰ +gbw íŠ +gbc í‹ +gbz íŒ +gbx í +gbv íŽ +gbg í +gmr í‘ +gmR í’ +gmrt í“ +gms í” +gmsw í• +gmsg í– +gme í— +gmf í˜ +gmfr í™ +gmfa íš +gmfq í› +gmft íœ +gmfx í +gmfv íž +gmfg íŸ +gma í +gmq í¡ +gmqt í¢ +gmt í£ +gmT í¤ +gmd í¥ +gmw í¦ +gmc í§ +gmz í¨ +gmx í© +gmv íª +gmg í« +gmlr í +gmlR í® +gmlrt í¯ +gmls í° +gmlsw í± +gmlsg í² +gmle í³ +gmlf í´ +gmlfr íµ +gmlfa í¶ +gmlfq í· +gmlft í¸ +gmlfx í¹ +gmlfv íº +gmlfg í» +gmla í¼ +gmlq í½ +gmlqt í¾ +gmlt í¿ +gmlT 힀 +gmld íž +gmlw íž‚ +gmlc 힃 +gmlz íž„ +gmlx íž… +gmlv 힆 +gmlg 힇 +glr 힉 +glR 힊 +glrt íž‹ +gls 힌 +glsw íž +glsg 힎 +gle íž +glf íž +glfr íž‘ +glfa íž’ +glfq íž“ +glft íž” +glfx íž• +glfv íž– +glfg íž— +gla 힘 +glq íž™ +glqt ížš +glt íž› +glT ížœ +gld íž +glw ížž +glc 힟 +glz íž +glx íž¡ +glv 힢 +glg 힣 diff --git a/runtime/keymap/korean.vim b/runtime/keymap/korean.vim new file mode 100644 index 0000000000..044e3b9918 --- /dev/null +++ b/runtime/keymap/korean.vim @@ -0,0 +1,23 @@ +" Maintainer: Jang Whemoon <palindrom615@gmail.com> +" Last Change: Nov 24, 2020 +" +" +" +" Unlike Japanese or Chinese, modern Korean texts do not depends on conversion +" to Hanja (Chinese character). Thus, general Korean text totally can be +" covered without help of IME but this keymap. +" +" BUT, simply mapping each letter of Hangul with sequence of alphabet 1 by 1 +" can fail to combine Hangul jamo (conconants and vowels) right. +" For example, sequentially pressing `ㅅㅓㅇㅜㄹㄷã…ã…Žã…ㄱㅛ` can not only be +" combined as `서울대학êµ`, but alse `성ㅜㄹ댛ã…ㄱêµ`, which is totally +" nonsense. +" Though combining Hangul is deterministic with law that each letter must be +" one of (consonant + vowel) or (consonant + vowel + consonant), there is no +" way to apply such law without implementing input engine. +" +" Thus, user of this keymap should wait until previous hangul letter is +" completed before typing next one. To reduce such inconvenience, I suggest to +" set `timeoutlen` with their own value. (default value is 1000ms) + +source <sfile>:p:h/korean-dubeolsik_utf-8.vim diff --git a/runtime/keymap/oldturkic-yenisei_utf-8.vim b/runtime/keymap/oldturkic-yenisei_utf-8.vim index f939f0a405..09722e70a2 100644 --- a/runtime/keymap/oldturkic-yenisei_utf-8.vim +++ b/runtime/keymap/oldturkic-yenisei_utf-8.vim @@ -5,7 +5,7 @@ " UTF-8) should work. scriptencoding utf-8 -let b:keymap_name = "oto" +let b:keymap_name = "oty" highlight lCursor guibg=red guifg=NONE " map F8 to toggle keymap (Ctrl-^ not present on keyboard) @@ -22,7 +22,10 @@ I ð°„ 10C04 OLD TURKIC LETTER YENISEI I 04 ð°„ 10C04 OLD TURKIC LETTER YENISEI I E ð°… 10C05 OLD TURKIC LETTER YENISEI E 05 ð°… 10C05 OLD TURKIC LETTER YENISEI E -OE ð°ˆ 10C08 OLD TURKIC LETTER YENISEI OE +OO ð°† 10C06 OLD TURKIC LETTER ORKHON O +U ð°† 10C06 OLD TURKIC LETTER ORKHON O +06 ð°† 10C06 OLD TURKIC LETTER ORKHON O +E ð°ˆ 10C08 OLD TURKIC LETTER YENISEI OE UE ð°ˆ 10C08 OLD TURKIC LETTER YENISEI OE 08 ð°ˆ 10C08 OLD TURKIC LETTER YENISEI OE ab ð°Š 10C0A OLD TURKIC LETTER YENISEI AB @@ -42,6 +45,10 @@ g2 ð° 10C10 OLD TURKIC LETTER YENISEI AEG ad ð°’ 10C12 OLD TURKIC LETTER YENISEI AD d1 ð°’ 10C12 OLD TURKIC LETTER YENISEI AD 12 ð°’ 10C12 OLD TURKIC LETTER YENISEI AD +aed ð°“ 10C13 OLD TURKIC LETTER ORKHON AED +ed ð°“ 10C13 OLD TURKIC LETTER ORKHON AED +d2 ð°“ 10C13 OLD TURKIC LETTER ORKHON AED +13 ð°“ 10C13 OLD TURKIC LETTER ORKHON AED ez ð°• 10C15 OLD TURKIC LETTER YENISEI EZ z ð°• 10C15 OLD TURKIC LETTER YENISEI EZ 15 ð°• 10C15 OLD TURKIC LETTER YENISEI EZ @@ -65,6 +72,19 @@ al ð°Ÿ 10C1F OLD TURKIC LETTER YENISEI AL l ð°Ÿ 10C1F OLD TURKIC LETTER YENISEI AL l1 ð°Ÿ 10C1F OLD TURKIC LETTER YENISEI AL 1f ð°Ÿ 10C1F OLD TURKIC LETTER YENISEI AL +ael ð° 10C20 OLD TURKIC LETTER ORKHON AEL +el ð° 10C20 OLD TURKIC LETTER ORKHON AEL +l2 ð° 10C20 OLD TURKIC LETTER ORKHON AEL +20 ð° 10C20 OLD TURKIC LETTER ORKHON AEL +elt ð°¡ 10C21 OLD TURKIC LETTER ORKHON ELT +lt ð°¡ 10C21 OLD TURKIC LETTER ORKHON ELT +21 ð°¡ 10C21 OLD TURKIC LETTER ORKHON ELT +em ð°¢ 10C22 OLD TURKIC LETTER ORKHON EM +m ð°¢ 10C22 OLD TURKIC LETTER ORKHON EM +22 ð°¢ 10C22 OLD TURKIC LETTER ORKHON EM +an ð°£ 10C23 OLD TURKIC LETTER ORKHON AN +n1 ð°£ 10C23 OLD TURKIC LETTER ORKHON AN +23 ð°£ 10C23 OLD TURKIC LETTER ORKHON AN aen ð°¥ 10C25 OLD TURKIC LETTER YENISEI AEN en ð°¥ 10C25 OLD TURKIC LETTER YENISEI AEN n2 ð°¥ 10C25 OLD TURKIC LETTER YENISEI AEN @@ -84,6 +104,14 @@ ng ð°¬ 10C2C OLD TURKIC LETTER YENISEI ANG aeng ð°® 10C2E OLD TURKIC LETTER YENISEI AENG eng ð°® 10C2E OLD TURKIC LETTER YENISEI AENG 2e ð°® 10C2E OLD TURKIC LETTER YENISEI AENG +ep ð°¯ 10C2F OLD TURKIC LETTER ORKHON EP +p ð°¯ 10C2F OLD TURKIC LETTER ORKHON EP +2f ð°¯ 10C2F OLD TURKIC LETTER ORKHON EP +op ð°° 10C30 OLD TURKIC LETTER ORKHON OP +up ð°° 10C30 OLD TURKIC LETTER ORKHON OP +30 ð°° 10C30 OLD TURKIC LETTER ORKHON OP +ic ð°± 10C31 OLD TURKIC LETTER ORKHON IC +31 ð°± 10C31 OLD TURKIC LETTER ORKHON IC ec ð°³ 10C33 OLD TURKIC LETTER YENISEI EC c ð°³ 10C33 OLD TURKIC LETTER YENISEI EC 33 ð°³ 10C33 OLD TURKIC LETTER YENISEI EC @@ -100,6 +128,17 @@ ar ð°» 10C3B OLD TURKIC LETTER YENISEI AR r ð°» 10C3B OLD TURKIC LETTER YENISEI AR r1 ð°» 10C3B OLD TURKIC LETTER YENISEI AR 3b ð°» 10C3B OLD TURKIC LETTER YENISEI AR +aer ð°¼ 10C3C OLD TURKIC LETTER ORKHON AER +er ð°¼ 10C3C OLD TURKIC LETTER ORKHON AER +r2 ð°¼ 10C3C OLD TURKIC LETTER ORKHON AER +3c ð°¼ 10C3C OLD TURKIC LETTER ORKHON AER +as ð°½ 10C3D OLD TURKIC LETTER ORKHON AS +s1 ð°½ 10C3D OLD TURKIC LETTER ORKHON AS +3d ð°½ 10C3D OLD TURKIC LETTER ORKHON AS +aes ð°¾ 10C3E OLD TURKIC LETTER ORKHON AES +es ð°¾ 10C3E OLD TURKIC LETTER ORKHON AES +s2 ð°¾ 10C3E OLD TURKIC LETTER ORKHON AES +3e ð°¾ 10C3E OLD TURKIC LETTER ORKHON AES ash ð±€ 10C40 OLD TURKIC LETTER YENISEI ASH sh1 ð±€ 10C40 OLD TURKIC LETTER YENISEI ASH 40 ð±€ 10C40 OLD TURKIC LETTER YENISEI ASH @@ -113,3 +152,8 @@ aet 𱆠10C46 OLD TURKIC LETTER YENISEI AET et 𱆠10C46 OLD TURKIC LETTER YENISEI AET t2 𱆠10C46 OLD TURKIC LETTER YENISEI AET 46 𱆠10C46 OLD TURKIC LETTER YENISEI AET +ot 𱇠10C47 OLD TURKIC LETTER ORKHON OT +ut 𱇠10C47 OLD TURKIC LETTER ORKHON OT +47 𱇠10C47 OLD TURKIC LETTER ORKHON OT +bash 𱈠10C48 OLD TURKIC LETTER ORKHON BASH +48 𱈠10C48 OLD TURKIC LETTER ORKHON BASH diff --git a/runtime/keymap/russian-typograph.vim b/runtime/keymap/russian-typograph.vim new file mode 100644 index 0000000000..a85e861e32 --- /dev/null +++ b/runtime/keymap/russian-typograph.vim @@ -0,0 +1,190 @@ +" Vim Keymap file for Russian characters +" layout English-US standard 104 key 'QWERTY', 'JCUKEN' +" +" Maintainer: Restorer <restorers@users.sourceforge.net> +" Last Changed: 20 Jan 2019 +" Description: РаÑкладка Ñделана на оÑнове раÑкладки «руÑÑÐºÐ°Ñ Ð¼Ð°ÑˆÐ¸Ð½Ð¾Ð¿Ð¸Ñь» +" (KBDRU1.DLL), поÑтавлÑемой в ÑоÑтаве ОС MS Windows. Ðта раÑкладка позволÑет +" печать практичеÑки вÑе знаки Ð¿Ñ€ÐµÐ¿Ð¸Ð½Ð°Ð½Ð¸Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ñ†Ð¸Ñ„Ñ€Ð¾Ð²Ð¾Ð¹ Ñ€Ñд и не Ñ‚Ñ€ÐµÐ±ÑƒÑ Ð¿Ñ€Ð¸ +" Ñтом Ð½Ð°Ð¶Ð°Ñ‚Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… клавиш, ну и также удобное раÑположение буквы «Ð». +" Однако были внеÑены некоторые Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (улучшениÑ?), в чаÑтноÑти: +" †раздельные Ñимволы круглых Ñкобок (), раÑположены на тех же позициÑÑ…, что и +" в US-International; +" †раздельные Ñимволы типографÑких кавычек «», раÑположены на клавишах «3» и +" «4» ÑоответÑтвенно; +" †на Ñтих же клавишах находÑÑ‚ÑÑ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½Ð¸Ðµ кавычки “лапкиâ€, набираемые при +" нажатой клавише «ALT»; +" †возможноÑть набирать Ñимволы, отÑутÑтвующие в руÑÑкой раÑкладке клавиатуры, +" а именно @#$^&*{}[]"'`~<>, которые раÑположены на тех же меÑтах, что и раньше. +" Ð”Ð»Ñ Ñтого не требуетÑÑ Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡Ð°Ñ‚ÑŒÑÑ Ð² латинÑкую раÑкладку клавиатуры, а +" оÑтаваÑÑÑŒ в руÑÑкой, иÑпользовать Ð´Ð»Ñ Ñтого дополнительные клавиши «SHIFT» и +" «ALT»; +" †и ещё неÑколько удобÑтв, которые позволÑÑŽÑ‚ быÑтро и Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ уÑилиÑми +" набирать текÑÑ‚. + +scriptencoding utf-8 + +" Переключение Ñзыка ввода Ñо Ñтандартного ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ <CTRL+^> на указанные ниже +" Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² вÑтавки и замены +""или SHIFT+SPACE +" inoremap <S-Space> <C-^> +""или CTRL+SPACE" +" inoremap <C-Space> <C-^> +" Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð° командной Ñтроки +""или SHIFT+SPACE +" cnoremap <S-Space> <C-^> +""или CTRL+SPACE" +" cnoremap <C-Space> <C-^> +" Одной командой Ð´Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ð¾Ð² вÑтавки, замены и командной Ñтроки +" noremap! <S-Space> <C-^> +" noremap! <C-Space> <C-^> +" +" Стандартное переключение по CTRL+^ поÑле Ñтих переназначений также ÑохранÑетÑÑ + +let b:keymap_name ="RUS" + +loadkeymap + +" DIGITAL ROW + +" The Shift key is not pressed +" +<char-0x0060> <char-0x0025> " PERCENT SIGN +<char-0x0031> <char-0x0021> " EXCLAMATION MARK +<char-0x0032> <char-0x2014> " EM DASH +<char-0x0033> <char-0x00ab> " LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +<char-0x0034> <char-0x00bb> " RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +<char-0x0035> <char-0x003a> " COLON +<char-0x0036> <char-0x002c> " COMMA +<char-0x0037> <char-0x002e> " FULL STOP +<char-0x0038> <char-0x003f> " QUESTION MARK +<char-0x0039> <char-0x0028> " LEFT PARENTHESIS +<char-0x0030> <char-0x0029> " RIGHT PARENTHESIS +<char-0x002d> <char-0x2010> " HYPHEN +<char-0x003d> <char-0x003b> " SEMICOLON + +" The Shift key is pressed + +<char-0x007e> <char-0x003d> " EQUALS SIGN +<char-0x0021> <char-0x0031> " DIGIT ONE +<char-0x0040> <char-0x0032> " DIGIT TWO +<char-0x0023> <char-0x0033> " DIGIT THREE +<char-0x0024> <char-0x0034> " DIGIT FOUR +<char-0x0025> <char-0x0035> " DIGIT FIVE +<char-0x005e> <char-0x0036> " DIGIT SIX +<char-0x0026> <char-0x0037> " DIGIT SEVEN +<char-0x002a> <char-0x0038> " DIGIT EIGHT +<char-0x0028> <char-0x0039> " DIGIT NINE +<char-0x0029> <char-0x0030> " DIGIT ZERO +<char-0x005f> <char-0x002d> " HYPHEN-MINUS +<char-0x002b> <char-0x002b> " PLUS SIGN + +" ALPHABETICAL 1st ROW + +<char-0x0071> <char-0x0439> " CYRILLIC SMALL LETTER SHORT I +<char-0x0051> <char-0x0419> " CYRILLIC CAPITAL LETTER SHORT I +<char-0x0077> <char-0x0446> " CYRILLIC SMALL LETTER TSE +<char-0x0057> <char-0x0426> " CYRILLIC CAPITAL LETTER TSE +<char-0x0065> <char-0x0443> " CYRILLIC SMALL LETTER U +<char-0x0045> <char-0x0423> " CYRILLIC CAPITAL LETTER U +<char-0x0072> <char-0x043a> " CYRILLIC SMALL LETTER KA +<char-0x0052> <char-0x041a> " CYRILLIC CAPITAL LETTER KA +<char-0x0074> <char-0x0435> " CYRILLIC SMALL LETTER IE +<char-0x0054> <char-0x0415> " CYRILLIC CAPITAL LETTER IE +<char-0x0079> <char-0x043d> " CYRILLIC SMALL LETTER EN +<char-0x0059> <char-0x041d> " CYRILLIC CAPITAL LETTER EN +<char-0x0075> <char-0x0433> " CYRILLIC SMALL LETTER GHE +<char-0x0055> <char-0x0413> " CYRILLIC CAPITAL LETTER GHE +<char-0x0069> <char-0x0448> " CYRILLIC SMALL LETTER SHA +<char-0x0049> <char-0x0428> " CYRILLIC CAPITAL LETTER SHA +<char-0x006f> <char-0x0449> " CYRILLIC SMALL LETTER SHCHA +<char-0x004f> <char-0x0429> " CYRILLIC CAPITAL LETTER SHCHA +<char-0x0070> <char-0x0437> " CYRILLIC SMALL LETTER ZE +<char-0x0050> <char-0x0417> " CYRILLIC CAPITAL LETTER ZE +<char-0x005b> <char-0x0445> " CYRILLIC SMALL LETTER HA +<char-0x007b> <char-0x0425> " CYRILLIC CAPITAL LETTER HA +<char-0x005d> <char-0x044a> " CYRILLIC SMALL LETTER HARD SIGN +<char-0x007d> <char-0x042a> " CYRILLIC CAPITAL LETTER HARD SIGN + +" ALPHABETIC 2st ROW + +<char-0x0061> <char-0x0444> " CYRILLIC SMALL LETTER EF +<char-0x0041> <char-0x0424> " CYRILLIC CAPITAL LETTER EF +<char-0x0073> <char-0x044b> " CYRILLIC SMALL LETTER YERU +<char-0x0053> <char-0x042b> " CYRILLIC CAPITAL LETTER YERU +<char-0x0064> <char-0x0432> " CYRILLIC SMALL LETTER VE +<char-0x0044> <char-0x0412> " CYRILLIC CAPITAL LETTER VE +<char-0x0066> <char-0x0430> " CYRILLIC SMALL LETTER A +<char-0x0046> <char-0x0410> " CYRILLIC CAPITAL LETTER A +<char-0x0067> <char-0x043f> " CYRILLIC SMALL LETTER PE +<char-0x0047> <char-0x041f> " CYRILLIC CAPITAL LETTER PE +<char-0x0068> <char-0x0440> " CYRILLIC SMALL LETTER ER +<char-0x0048> <char-0x0420> " CYRILLIC CAPITAL LETTER ER +<char-0x006a> <char-0x043e> " CYRILLIC SMALL LETTER O +<char-0x004a> <char-0x041e> " CYRILLIC CAPITAL LETTER O +<char-0x006b> <char-0x043b> " CYRILLIC SMALL LETTER EL +<char-0x004b> <char-0x041b> " CYRILLIC CAPITAL LETTER EL +<char-0x006c> <char-0x0434> " CYRILLIC SMALL LETTER DE +<char-0x004c> <char-0x0414> " CYRILLIC CAPITAL LETTER DE +<char-0x003b> <char-0x0436> " CYRILLIC SMALL LETTER ZHE +<char-0x003a> <char-0x0416> " CYRILLIC CAPITAL LETTER ZHE +<char-0x0027> <char-0x044d> " CYRILLIC SMALL LETTER E +<char-0x0022> <char-0x042d> " CYRILLIC CAPITAL LETTER E + +" ALPHABETIC 3st ROW + +<char-0x007a> <char-0x044f> " CYRILLIC SMALL LETTER YA +<char-0x005a> <char-0x042f> " CYRILLIC CAPITAL LETTER YA +<char-0x0078> <char-0x0447> " CYRILLIC SMALL LETTER CHE +<char-0x0058> <char-0x0427> " CYRILLIC CAPITAL LETTER CHE +<char-0x0063> <char-0x0441> " CYRILLIC SMALL LETTER ES +<char-0x0043> <char-0x0421> " CYRILLIC CAPITAL LETTER ES +<char-0x0076> <char-0x043c> " CYRILLIC SMALL LETTER EM +<char-0x0056> <char-0x041c> " CYRILLIC CAPITAL LETTER EM +<char-0x0062> <char-0x0438> " CYRILLIC SMALL LETTER I +<char-0x0042> <char-0x0418> " CYRILLIC CAPITAL LETTER I +<char-0x006e> <char-0x0442> " CYRILLIC SMALL LETTER TE +<char-0x004e> <char-0x0422> " CYRILLIC CAPITAL LETTER TE +<char-0x006d> <char-0x044c> " CYRILLIC SMALL LETTER SOFT SIGN +<char-0x004d> <char-0x042c> " CYRILLIC CAPITAL LETTER SOFT SIGN +<char-0x002c> <char-0x0431> " CYRILLIC SMALL LETTER BE +<char-0x003c> <char-0x0411> " CYRILLIC CAPITAL LETTER BE +<char-0x002e> <char-0x044e> " CYRILLIC SMALL LETTER YU +<char-0x003e> <char-0x042e> " CYRILLIC CAPITAL LETTER YU +<char-0x002f> <char-0x0451> " CYRILLIC SMALL LETTER IO +<char-0x003f> <char-0x0401> " CYRILLIC CAPITAL LETTER IO + +" VK_OEM_5 key (scan code 2b) + +" The Shift key is not pressed +<char-0x005c> <char-0x002f> " SOLIDUS +" The Shift key is pressed +<char-0x007c> <char-0x005c> " REVERSE SOLIDUS + +" Alt key pressed + +<A-char-0x0060> <char-0x0060> " GRAVE ACCENT +<A-char-0x0031> <char-0x2116> " NUMERO SIGN +<A-char-0x0033> <char-0x201c> " LEFT DOUBLE QUOTATION MARK +<A-char-0x0034> <char-0x201d> " RIGHT DOUBLE QUOTATION MARK +<A-char-0x005b> <char-0x005b> " LEFT SQUARE BRACKET +<A-char-0x005d> <char-0x005d> " RIGHT SQUARE BRACKET +<A-char-0x0027> <char-0x0027> " APOSTROPHE + +" Alt and Shift keys pressed + +<A-char-0x007e> <char-0x007e> " TILDE +<A-char-0x0040> <char-0x0040> " COMMERCIAL AT +<A-char-0x0023> <char-0x0023> " NUMBER SIGN +<A-char-0x0024> <char-0x0024> " DOLLAR SIGN +<A-char-0x005e> <char-0x005e> " CIRCUMFLEX ACCENT +<A-char-0x0026> <char-0x0026> " AMPERSAND +<A-char-0x002a> <char-0x002a> " ASTERISK +<A-char-0x005f> <char-0x005f> " LOW LINE +<A-char-0x007b> <char-0x007b> " LEFT CURLY BRACKET +<A-char-0x007d> <char-0x007d> " RIGHT CURLY BRACKET +<A-char-0x0022> <char-0x0022> " QUOTATION MARK +<A-char-0x003c> <char-0x003c> " LESS-THAN SIGN +<A-char-0x003e> <char-0x003e> " GREATER-THAN SIGN +<A-char-0x007c> <char-0x007c> " VERTICAL LINE + diff --git a/runtime/keymap/turkish-f.vim b/runtime/keymap/turkish-f.vim new file mode 100644 index 0000000000..f03c5eb3e2 --- /dev/null +++ b/runtime/keymap/turkish-f.vim @@ -0,0 +1,113 @@ +" Vim keymap file for Turkish F layout +" Maintainer: Emir SARI <bitigchi@me.com> +" Last changed: 5 August 2020 + +scriptencoding utf-8 +let b:keymap_name = "tr-f" +loadkeymap + +F A LATIN CAPITAL LETTER A +< B LATIN CAPITAL LETTER B +V C LATIN CAPITAL LETTER C +B Ç LATIN CAPITAL LETTER C WITH CEDILLA +Y D LATIN CAPITAL LETTER D +D E LATIN CAPITAL LETTER E +Q F LATIN CAPITAL LETTER F +W G LATIN CAPITAL LETTER G +E Äž LATIN CAPITAL LETTER G WITH BREVE +O H LATIN CAPITAL LETTER H +R I LATIN CAPITAL LETTER I +S İ LATIN CAPITAL LETTER I WITH DOT ABOVE +Z J LATIN CAPITAL LETTER J +J K LATIN CAPITAL LETTER K +K M LATIN CAPITAL LETTER M +I N LATIN CAPITAL LETTER N +T O LATIN CAPITAL LETTER O +X Ö LATIN CAPITAL LETTER O WITH DIAERESIS +U R LATIN CAPITAL LETTER R +M S LATIN CAPITAL LETTER S +\" Åž LATIN CAPITAL LETTER S WITH CEDILLA +H T LATIN CAPITAL LETTER T +A U LATIN CAPITAL LETTER U +G Ü LATIN CAPITAL LETTER U WITH DIAERESIS +C V LATIN CAPITAL LETTER V +: Y LATIN CAPITAL LETTER Y +N Z LATIN CAPITAL LETTER Z + +{ Q LATIN CAPITAL LETTER Q +} W LATIN CAPITAL LETTER W +| X LATIN CAPITAL LETTER X + +± * ASTERISK +@ " QUOTATION MARK +# ^ CIRCUMFLEX ACCENT +^ & AMPERSAND +& ' APOSTROPHE +* ( LEFT PARENTHESIS +( ) RIGHT PARENTHESIS +) = EQUALS SIGN +_ ? QUESTION MARK ++ _ LOW LINE +> : COLON +? ; SEMICOLON +~ > GREATER-THAN SIGN + +Ã… Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX +à Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX +à  LATIN CAPITAL LETTER A WITH CIRCUMFLEX + +f a LATIN SMALL LETTER A +, b LATIN SMALL LETTER B +v c LATIN SMALL LETTER C +b ç LATIN SMALL LETTER C WITH CEDILLA +y d LATIN SMALL LETTER D +d e LATIN SMALL LETTER E +q f LATIN SMALL LETTER F +w g LATIN SMALL LETTER G +e ÄŸ LATIN SMALL LETTER G WITH BREVE +o h LATIN SMALL LETTER H +r ı LATIN SMALL LETTER I +s i LATIN SMALL LETTER I WITH DOT ABOVE +z j LATIN SMALL LETTER J +j k LATIN SMALL LETTER K +k m LATIN SMALL LETTER M +i n LATIN SMALL LETTER N +t o LATIN SMALL LETTER O +x ö LATIN SMALL LETTER O WITH DIAERESIS +u r LATIN SMALL LETTER R +m s LATIN SMALL LETTER S +\' ÅŸ LATIN SMALL LETTER S WITH CEDILLA +h t LATIN SMALL LETTER T +a u LATIN SMALL LETTER U +g ü LATIN SMALL LETTER U WITH DIAERESIS +c v LATIN SMALL LETTER V +; y LATIN SMALL LETTER Y +n z LATIN SMALL LETTER Z + +[ q LATIN SMALL LETTER Q +] w LATIN SMALL LETTER W +\\ x LATIN SMALL LETTER X + +§ + PLUS SIGN +- / SOLIDUS += - HYPHEN-MINUS +/ , COMMA +` < LESS-THAN SIGN + +£ # NUMBER SIGN +¶ { LEFT CURLY BRACKET +• [ LEFT SQUARE BRACKET +ª ] RIGHT SQUARE BRACKET +º } RIGHT CURLY BRACKET +– \\ REVERSE SOLIDUS +≠| VERTICAL LINE +Å“ @ COMMERCIAL AT +‘ ~ TILDE +Ã¥ û LATIN SMALL LETTER U WITH CIRCUMFLEX +ß î LATIN SMALL LETTER I WITH CIRCUMFLEX +∂ € EURO SIGN +Æ’ â LATIN SMALL LETTER A WITH CIRCUMFLEX +Ë™ ₺ TURKISH LIRA SIGN +¬ £ POUND SIGN +… Â¥ YEN SIGN +« ` GRAVE ACCENT diff --git a/runtime/keymap/turkish-q.vim b/runtime/keymap/turkish-q.vim new file mode 100644 index 0000000000..326b08e4b9 --- /dev/null +++ b/runtime/keymap/turkish-q.vim @@ -0,0 +1,62 @@ +" Vim keymap file for Turkish Q layout +" Maintainer: Emir SARI <bitigchi@me.com> +" Last changed: 5 August 2020 + +scriptencoding utf-8 +let b:keymap_name = "tr-q" +loadkeymap + +\> Ç LATIN CAPITAL LETTER C WITH CEDILLA +\{ Äž LATIN CAPITAL LETTER G WITH BREVE +\" İ LATIN CAPITAL LETTER I WITH DOT ABOVE +\< Ö LATIN CAPITAL LETTER O WITH DIAERESIS +\: Åž LATIN CAPITAL LETTER S WITH CEDILLA +\} Ü LATIN CAPITAL LETTER U WITH DIAERESIS + +± é LATIN SMALL LETTER E WITH ACUTE +@ ' APOSTROPHE +# ^ CIRCUMFLEX ACCENT +$ + PLUS SIGN +^ & AMPERSAND +& / SOLIDUS +* ( LEFT PARENTHESIS +( ) RIGHT PARENTHESIS +) = EQUAL SIGN +_ ? QUESTION MARK ++ _ LOW LINE +~ > GREATER-THAN SIGN +| ; SEMICOLON +? : COLON + +\. ç LATIN SMALL LETTER C WITH CEDILLA +\[ ÄŸ LATIN SMALL LETTER G WITH BREVE +\' i LATIN SMALL LETTER I +\, ö LATIN SMALL LETTER O WITH DIAERESIS +\; ÅŸ LATIN SMALL LETTER S WITH CEDILLA +\] ü LATIN SMALL LETTER U WITH DIAERESIS +i ı LATIN SMALL LETTER DOTLESS I + +§ " QUOTATION MARK +- * ASTERISK += - HYPHEN-MINUS +\\ , COMMA +\/ . FULL STOP +` < LESS-THAN SIGN + +â„¢ £ POUND SIGN +£ # NUMBER SIGN +¢ $ DOLLAR SIGN +∞ ½ VULGAR FRACTION ONE HALF +¶ { LEFT CURLY BRACKET +• [ LEFT SQUARE BRACKET +ª ] RIGHT SQUARE BRACKET +º } RIGHT CURLY BRACKET +– \\ REVERSE SOLIDUS +≠| VERTICAL LINE +Å“ @ COMMERCIAL AT +´ € EURO SIGN +†₺ TURKISH LIRA SIGN +Â¥ Â¥ YEN SIGN +‘ ~ TILDE +… ´ ACUTE ACCENT +« ` GRAVE ACCENT diff --git a/runtime/macros/less.vim b/runtime/macros/less.vim index aad122d70a..a4f96f340e 100644 --- a/runtime/macros/less.vim +++ b/runtime/macros/less.vim @@ -1,6 +1,6 @@ " Vim script to work like "less" " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2017 Mar 31 +" Last Change: 2020 Dec 17 " Avoid loading this file twice, allow the user to define his own script. if exists("loaded_less") @@ -35,8 +35,16 @@ if argc() > 0 endwhile endif -set nocp -syntax on +" we don't want 'compatible' here +if &cp + set nocp +endif + +" enable syntax highlighting if not done already +if !get(g:, 'syntax_on', 0) + syntax enable +endif + set so=0 set hlsearch set incsearch @@ -66,8 +74,8 @@ endif " When reading from stdin don't consider the file modified. au VimEnter * set nomod -" Can't modify the text -set noma +" Can't modify the text or write the file. +set nomodifiable readonly " Give help noremap h :call <SID>Help()<CR> diff --git a/runtime/makemenu.vim b/runtime/makemenu.vim index 27fa46fe25..6173d8b691 100644 --- a/runtime/makemenu.vim +++ b/runtime/makemenu.vim @@ -481,6 +481,7 @@ SynMenu R.RCS.RCS\ file:rcs SynMenu R.Readline\ config:readline SynMenu R.Rebol:rebol SynMenu R.ReDIF:redif +SynMenu R.Rego:rego SynMenu R.Relax\ NG:rng SynMenu R.Remind:remind SynMenu R.Relax\ NG\ compact:rnc diff --git a/runtime/menu.vim b/runtime/menu.vim index 78306a57b8..701dd33cdd 100644 --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -29,7 +29,8 @@ if exists("v:lang") || &langmenu != "" let s:lang = v:lang endif " A language name must be at least two characters, don't accept "C" - if strlen(s:lang) > 1 + " Also skip "en_US" to avoid picking up "en_gb" translations. + if strlen(s:lang) > 1 && s:lang !~? '^en_us' " When the language does not include the charset add 'encoding' if s:lang =~ '^\a\a$\|^\a\a_\a\a$' let s:lang = s:lang . '.' . &enc @@ -158,6 +159,9 @@ an 20.335 &Edit.-SEP1- <Nop> vnoremenu 20.340 &Edit.Cu&t<Tab>"+x "+x vnoremenu 20.350 &Edit.&Copy<Tab>"+y "+y cnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-Y> +if exists(':tlmenu') + tlnoremenu 20.350 &Edit.&Copy<Tab>"+y <C-W>:<C-Y><CR> +endif nnoremenu 20.360 &Edit.&Paste<Tab>"+gP "+gP cnoremenu &Edit.&Paste<Tab>"+gP <C-R>+ exe 'vnoremenu <script> &Edit.&Paste<Tab>"+gP ' . paste#paste_cmd['v'] @@ -446,12 +450,12 @@ if has("spell") an 40.335.260 &Tools.&Spelling.Set\ Language\ to\ "en_us" :set spl=en_us spell<CR> an <silent> 40.335.270 &Tools.&Spelling.&Find\ More\ Languages :call <SID>SpellLang()<CR> - let s:undo_spellang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] + let s:undo_spelllang = ['aun &Tools.&Spelling.&Find\ More\ Languages'] func! s:SpellLang() - for cmd in s:undo_spellang + for cmd in s:undo_spelllang exe "silent! " . cmd endfor - let s:undo_spellang = [] + let s:undo_spelllang = [] if &enc == "iso-8859-15" let enc = "latin1" @@ -474,7 +478,7 @@ if has("spell") let found += 1 let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"' exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>' - let s:undo_spellang += ['aun ' . menuname] + let s:undo_spelllang += ['aun ' . menuname] endif let n += 10 endfor @@ -565,7 +569,7 @@ func! s:XxdConv() %!mc vim:xxd else call s:XxdFind() - exe '%!"' . g:xxdprogram . '"' + exe '%!' . g:xxdprogram endif if getline(1) =~ "^0000000:" " only if it worked set ft=xxd @@ -579,7 +583,7 @@ func! s:XxdBack() %!mc vim:xxd -r else call s:XxdFind() - exe '%!"' . g:xxdprogram . '" -r' + exe '%!' . g:xxdprogram . ' -r' endif set ft= doautocmd filetypedetect BufReadPost @@ -591,6 +595,9 @@ func! s:XxdFind() " On the PC xxd may not be in the path but in the install directory if has("win32") && !executable("xxd") let g:xxdprogram = $VIMRUNTIME . (&shellslash ? '/' : '\') . "xxd.exe" + if g:xxdprogram =~ ' ' + let g:xxdprogram = '"' .. g:xxdprogram .. '"' + endif else let g:xxdprogram = "xxd" endif diff --git a/runtime/nvim.desktop b/runtime/nvim.desktop index be6a2eda82..052904dd76 100644 --- a/runtime/nvim.desktop +++ b/runtime/nvim.desktop @@ -2,6 +2,10 @@ Name=Neovim GenericName=Text Editor GenericName[de]=Texteditor +GenericName[fr]=Éditeur de texte +GenericName[ru]=ТекÑтовый редактор +GenericName[sr]=Едитор текÑÑ‚ +GenericName[tr]=Metin Düzenleyici Comment=Edit text files Comment[af]=Redigeer tekslêers Comment[am]=የጽሑá á‹á‹áˆŽá‰½ ያስተካáŠáˆ‰ @@ -24,7 +28,7 @@ Comment[et]=Redigeeri tekstifaile Comment[eu]=Editatu testu-fitxategiak Comment[fa]=ویرایش پرونده‌های متنی Comment[fi]=Muokkaa tekstitiedostoja -Comment[fr]=Édite des fichiers texte +Comment[fr]=Éditer des fichiers texte Comment[ga]=Eagar comhad Téacs Comment[gu]=લખાણ ફાઇલોમાં ફેરફાર કરો Comment[he]=ערוך קבצי טקסט @@ -54,17 +58,17 @@ Comment[pl]=Edytor plików tekstowych Comment[pt]=Editar ficheiros de texto Comment[pt_BR]=Edite arquivos de texto Comment[ro]=Editare fiÅŸiere text -Comment[ru]=Редактор текÑтовых файлов +Comment[ru]=Редактирование текÑтовых файлов Comment[sk]=Úprava textových súborov Comment[sl]=Urejanje datotek z besedili Comment[sq]=Përpuno files teksti -Comment[sr]=Измени текÑтуалне датотеке +Comment[sr]=Уређујте текÑÑ‚ фајлове Comment[sr@Latn]=Izmeni tekstualne datoteke Comment[sv]=Redigera textfiler Comment[ta]=உரை கோபà¯à®ªà¯à®•ளை தொகà¯à®•à¯à®•வà¯à®®à¯ Comment[th]=à¹à¸à¹‰à¹„ขà¹à¸Ÿà¹‰à¸¡à¸‚้à¸à¸„วาม Comment[tk]=Metin faýllary editle -Comment[tr]=Metin dosyalarını düzenle +Comment[tr]=Metin dosyaları düzenleyin Comment[uk]=Редактор текÑтових файлів Comment[vi]=Soạn thảo táºp tin văn bản Comment[wa]=Asspougnî des fitchîs tecses @@ -75,6 +79,10 @@ Exec=nvim %F Terminal=true Type=Application Keywords=Text;editor; +Keywords[fr]=Texte;éditeur; +Keywords[ru]=текÑÑ‚;текÑтовый редактор; +Keywords[sr]=ТекÑÑ‚;едитор; +Keywords[tr]=Metin;düzenleyici; Icon=nvim Categories=Utility;TextEditor; StartupNotify=false diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 60dc6fdd31..633cb9e509 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2019 Jul 18 +" Last Change: 2020 Oct 27 " If there already is an option window, jump to that one. let buf = bufnr('option-window') @@ -69,6 +69,10 @@ fun! <SID>Space() endif endfun +let s:local_to_window = '(local to window)' +let s:local_to_buffer = '(local to buffer)' +let s:global_or_local = '(global or local to buffer)' + " find the window in which the option applies " returns 0 for global option, 1 for local option, -1 for error fun! <SID>Find(lnum) @@ -155,6 +159,16 @@ call append(6, '" Hit <Space> on a "set" line to refresh it.') " These functions are called often below. Keep them fast! +" Add an option name and explanation. The text can contain "\n" characters +" where a line break is to be inserted. +func <SID>AddOption(name, text) + let lines = split(a:text, "\n") + call append("$", a:name .. "\t" .. lines[0]) + for line in lines[1:] + call append("$", "\t" .. line) + endfor +endfunc + " Init a local binary option fun! <SID>BinOptionL(name) let val = getwinvar(winnr('#'), '&' . a:name) @@ -441,6 +455,9 @@ if has("syntax") call append("$", "spellcapcheck\tpattern to locate the end of a sentence") call append("$", "\t(local to buffer)") call <SID>OptionL("spc") + call append("$", "spelloptions\tflags to change how spell checking works") + call append("$", "\t(local to buffer)") + call <SID>OptionL("spo") call append("$", "spellsuggest\tmethods used to suggest corrections") call <SID>OptionG("sps", &sps) call append("$", "mkspellmem\tamount of memory used by :mkspell before compressing") @@ -722,19 +739,19 @@ call <SID>OptionG("udir", &udir) call append("$", "undoreload\tmaximum number lines to save for undo on a buffer reload") call append("$", " \tset ur=" . &ur) call append("$", "modified\tchanges have been made and not written to a file") -call append("$", "\t(local to buffer)") +call append("$", "\t" .. s:local_to_buffer) call <SID>BinOptionL("mod") call append("$", "readonly\tbuffer is not to be written") -call append("$", "\t(local to buffer)") +call append("$", "\t" .. s:local_to_buffer) call <SID>BinOptionL("ro") -call append("$", "modifiable\tchanges to the text are not possible") -call append("$", "\t(local to buffer)") +call <SID>AddOption("modifiable", "changes to the text are possible") +call append("$", "\t" .. s:local_to_buffer) call <SID>BinOptionL("ma") call append("$", "textwidth\tline length above which to break a line") -call append("$", "\t(local to buffer)") +call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("tw") call append("$", "wrapmargin\tmargin from the right in which to break a line") -call append("$", "\t(local to buffer)") +call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("wm") call append("$", "backspace\tspecifies what <BS>, CTRL-W, etc. can do in Insert mode") call append("$", " \tset bs=" . &bs) @@ -786,20 +803,19 @@ if has("digraphs") endif call append("$", "tildeop\tthe \"~\" command behaves like an operator") call <SID>BinOptionG("top", &top) -call append("$", "operatorfunc\tfunction called for the\"g@\" operator") +call <SID>AddOption("operatorfunc", "function called for the \"g@\" operator") call <SID>OptionG("opfunc", &opfunc) call append("$", "showmatch\twhen inserting a bracket, briefly jump to its match") call <SID>BinOptionG("sm", &sm) call append("$", "matchtime\ttenth of a second to show a match for 'showmatch'") call append("$", " \tset mat=" . &mat) call append("$", "matchpairs\tlist of pairs that match for the \"%\" command") -call append("$", "\t(local to buffer)") +call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("mps") call append("$", "joinspaces\tuse two spaces after '.' when joining a line") call <SID>BinOptionG("js", &js) -call append("$", "nrformats\t\"alpha\", \"octal\" and/or \"hex\"; number formats recognized for") -call append("$", "\tCTRL-A and CTRL-X commands") -call append("$", "\t(local to buffer)") +call <SID>AddOption("nrformats", "\"alpha\", \"octal\", \"hex\", \"bin\" and/or \"unsigned\"; number formats\nrecognized for CTRL-A and CTRL-X commands") +call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("nf") @@ -873,11 +889,11 @@ endif if has("folding") call <SID>Header("folding") - call append("$", "foldenable\tset to display all folds open") - call append("$", "\t(local to window)") + call <SID>AddOption("foldenable", "unset to display all folds open") + call append("$", "\t" .. s:local_to_window) call <SID>BinOptionL("fen") call append("$", "foldlevel\tfolds with a level higher than this number will be closed") - call append("$", "\t(local to window)") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fdl") call append("$", "foldlevelstart\tvalue for 'foldlevel' when starting to edit a file") call append("$", " \tset fdls=" . &fdls) @@ -896,20 +912,20 @@ if has("folding") call <SID>OptionL("fml") call append("$", "commentstring\ttemplate for comments; used to put the marker in") call <SID>OptionL("cms") - call append("$", "foldmethod\tfolding type: \"manual\", \"indent\", \"expr\", \"marker\" or \"syntax\"") - call append("$", "\t(local to window)") + call <SID>AddOption("foldmethod", "folding type: \"manual\", \"indent\", \"expr\", \"marker\",\n\"syntax\" or \"diff\"") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fdm") call append("$", "foldexpr\texpression used when 'foldmethod' is \"expr\"") - call append("$", "\t(local to window)") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fde") call append("$", "foldignore\tused to ignore lines when 'foldmethod' is \"indent\"") - call append("$", "\t(local to window)") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fdi") call append("$", "foldmarker\tmarkers used when 'foldmethod' is \"marker\"") - call append("$", "\t(local to window)") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fmr") call append("$", "foldnestmax\tmaximum fold depth for when 'foldmethod' is \"indent\" or \"syntax\"") - call append("$", "\t(local to window)") + call append("$", "\t" .. s:local_to_window) call <SID>OptionL("fdn") endif @@ -1014,7 +1030,7 @@ call append("$", " \tset ut=" . &ut) call <SID>Header("command line editing") -call append("$", "history\thow many command lines are remembered ") +call <SID>AddOption("history", "how many command lines are remembered") call append("$", " \tset hi=" . &hi) call append("$", "wildchar\tkey that triggers command-line expansion") call append("$", " \tset wc=" . &wc) @@ -1078,7 +1094,7 @@ call <SID>BinOptionG("warn", &warn) if has("quickfix") - call <SID>Header("running make and jumping to errors") + call <SID>Header("running make and jumping to errors (quickfix)") call append("$", "errorfile\tname of the file that contains error messages") call <SID>OptionG("ef", &ef) call append("$", "errorformat\tlist of formats for error messages") @@ -1102,12 +1118,12 @@ if has("quickfix") endif -if has("msdos") || has("win16") || has("win32") +if has("win32") call <SID>Header("system specific") - if has("msdos") || has("win16") || has("win32") - call append("$", "shellslash\tuse forward slashes in file names; for Unix-like shells") - call <SID>BinOptionG("ssl", &ssl) - endif + call <SID>AddOption("shellslash", "use forward slashes in file names; for Unix-like shells") + call <SID>BinOptionG("ssl", &ssl) + call <SID>AddOption("completeslash", "specifies slash/backslash used for completion") + call <SID>OptionG("csl", &csl) endif @@ -1185,11 +1201,10 @@ endif if has("multi_byte") call <SID>Header("multi-byte characters") - call append("$", "encoding\tcharacter encoding used in Vim: \"latin1\", \"utf-8\"") - call append("$", "\t\"euc-jp\", \"big5\", etc.") + call <SID>AddOption("encoding", "character encoding used in Nvim: \"utf-8\"") call <SID>OptionG("enc", &enc) call append("$", "fileencoding\tcharacter encoding for the current file") - call append("$", "\t(local to buffer)") + call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("fenc") call append("$", "fileencodings\tautomatically detected character encodings") call <SID>OptionG("fencs", &fencs) @@ -1211,7 +1226,7 @@ endif call <SID>Header("various") -call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"") +call <SID>AddOption("virtualedit", "when to use virtual editing: \"block\", \"insert\", \"all\"\nand/or \"onemore\"") call <SID>OptionG("ve", &ve) call append("$", "eventignore\tlist of autocommand events which are to be ignored") call <SID>OptionG("ei", &ei) @@ -1245,10 +1260,10 @@ if has("shada") endif if has("quickfix") call append("$", "bufhidden\twhat happens with a buffer when it's no longer in a window") - call append("$", "\t(local to buffer)") + call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("bh") - call append("$", "buftype\t\"\", \"nofile\", \"nowrite\" or \"quickfix\": type of buffer") - call append("$", "\t(local to buffer)") + call <SID>AddOption("buftype", "empty, \"nofile\", \"nowrite\", \"quickfix\", etc.: type of buffer") + call append("$", "\t" .. s:local_to_buffer) call <SID>OptionL("bt") endif call append("$", "buflisted\twhether the buffer shows up in the buffer list") diff --git a/runtime/pack/dist/opt/matchit/autoload/matchit.vim b/runtime/pack/dist/opt/matchit/autoload/matchit.vim index abf06d3c4c..4f3dd8ff9e 100644 --- a/runtime/pack/dist/opt/matchit/autoload/matchit.vim +++ b/runtime/pack/dist/opt/matchit/autoload/matchit.vim @@ -1,6 +1,6 @@ " matchit.vim: (global plugin) Extended "%" matching " autload script of matchit plugin, see ../plugin/matchit.vim -" Last Change: 2019 Jan 28 +" Last Change: Mar 01, 2020 let s:last_mps = "" let s:last_words = ":" @@ -48,6 +48,8 @@ function matchit#Match_wrapper(word, forward, mode) range execute "normal! gv\<Esc>" elseif a:mode == "o" && mode(1) !~# '[vV]' exe "norm! v" + elseif a:mode == "n" && mode(1) =~# 'ni' + exe "norm! v" endif " In s:CleanUp(), we may need to check whether the cursor moved forward. let startpos = [line("."), col(".")] @@ -211,6 +213,14 @@ function matchit#Match_wrapper(word, forward, mode) range execute "if " . skip . "| let skip = '0' | endif" endif let sp_return = searchpair(ini, mid, fin, flag, skip) + if &selection isnot# 'inclusive' && a:mode == 'v' + " move cursor one pos to the right, because selection is not inclusive + " add virtualedit=onemore, to make it work even when the match ends the " line + if !(col('.') < col('$')-1) + set ve=onemore + endif + norm! l + endif let final_position = "call cursor(" . line(".") . "," . col(".") . ")" " Restore cursor position and original screen. call winrestview(view) diff --git a/runtime/pack/dist/opt/matchit/doc/matchit.txt b/runtime/pack/dist/opt/matchit/doc/matchit.txt index b2b78089a0..3cd2c8e2a7 100644 --- a/runtime/pack/dist/opt/matchit/doc/matchit.txt +++ b/runtime/pack/dist/opt/matchit/doc/matchit.txt @@ -4,7 +4,7 @@ For instructions on installing this file, type `:help matchit-install` inside Vim. -For Vim version 8.1. Last change: 2019 May 05 +For Vim version 8.1. Last change: 2020 Mar 01 VIM REFERENCE MANUAL by Benji Fisher et al @@ -377,6 +377,10 @@ The back reference '\'.d refers to the same thing as '\'.b:match_table[d] in ============================================================================== 5. Known Bugs and Limitations *matchit-bugs* +Repository: https://github.com/chrisbra/matchit/ +Bugs can be reported at the repository (alternatively you can send me a mail). +The latest development snapshot can also be downloaded there. + Just because I know about a bug does not mean that it is on my todo list. I try to respond to reports of bugs that cause real problems. If it does not cause serious problems, or if there is a work-around, a bug may sit there for @@ -388,4 +392,4 @@ try to implement this in a future version. (This is not so easy to arrange as you might think!) ============================================================================== -vim:tw=78:fo=tcq2:ft=help: +vim:tw=78:ts=8:fo=tcq2:ft=help: diff --git a/runtime/pack/dist/opt/matchit/plugin/matchit.vim b/runtime/pack/dist/opt/matchit/plugin/matchit.vim index 84147f1fc8..b62cc3913a 100644 --- a/runtime/pack/dist/opt/matchit/plugin/matchit.vim +++ b/runtime/pack/dist/opt/matchit/plugin/matchit.vim @@ -1,13 +1,13 @@ " matchit.vim: (global plugin) Extended "%" matching " Maintainer: Christian Brabandt -" Version: 1.15 -" Last Change: 2019 Jan 28 +" Version: 1.17 +" Last Change: 2019 Oct 24 " Repository: https://github.com/chrisbra/matchit " Previous URL:http://www.vim.org/script.php?script_id=39 " Previous Maintainer: Benji Fisher PhD <benji@member.AMS.org> " Documentation: -" The documentation is in a separate file: ../doc/matchit.txt . +" The documentation is in a separate file: ../doc/matchit.txt " Credits: " Vim editor by Bram Moolenaar (Thanks, Bram!) @@ -48,8 +48,8 @@ set cpo&vim nnoremap <silent> <Plug>(MatchitNormalForward) :<C-U>call matchit#Match_wrapper('',1,'n')<CR> nnoremap <silent> <Plug>(MatchitNormalBackward) :<C-U>call matchit#Match_wrapper('',0,'n')<CR> -vnoremap <silent> <Plug>(MatchitVisualForward) :<C-U>call matchit#Match_wrapper('',1,'v')<CR>m'gv`` -vnoremap <silent> <Plug>(MatchitVisualBackward) :<C-U>call matchit#Match_wrapper('',0,'v')<CR>m'gv`` +xnoremap <silent> <Plug>(MatchitVisualForward) :<C-U>call matchit#Match_wrapper('',1,'v')<CR>m'gv`` +xnoremap <silent> <Plug>(MatchitVisualBackward) :<C-U>call matchit#Match_wrapper('',0,'v')<CR>m'gv`` onoremap <silent> <Plug>(MatchitOperationForward) :<C-U>call matchit#Match_wrapper('',1,'o')<CR> onoremap <silent> <Plug>(MatchitOperationBackward) :<C-U>call matchit#Match_wrapper('',0,'o')<CR> @@ -63,8 +63,8 @@ omap <silent> g% <Plug>(MatchitOperationBackward) " Analogues of [{ and ]} using matching patterns: nnoremap <silent> <Plug>(MatchitNormalMultiBackward) :<C-U>call matchit#MultiMatch("bW", "n")<CR> nnoremap <silent> <Plug>(MatchitNormalMultiForward) :<C-U>call matchit#MultiMatch("W", "n")<CR> -vnoremap <silent> <Plug>(MatchitVisualMultiBackward) :<C-U>call matchit#MultiMatch("bW", "n")<CR>m'gv`` -vnoremap <silent> <Plug>(MatchitVisualMultiForward) :<C-U>call matchit#MultiMatch("W", "n")<CR>m'gv`` +xnoremap <silent> <Plug>(MatchitVisualMultiBackward) :<C-U>call matchit#MultiMatch("bW", "n")<CR>m'gv`` +xnoremap <silent> <Plug>(MatchitVisualMultiForward) :<C-U>call matchit#MultiMatch("W", "n")<CR>m'gv`` onoremap <silent> <Plug>(MatchitOperationMultiBackward) :<C-U>call matchit#MultiMatch("bW", "o")<CR> onoremap <silent> <Plug>(MatchitOperationMultiForward) :<C-U>call matchit#MultiMatch("W", "o")<CR> @@ -76,7 +76,7 @@ omap <silent> [% <Plug>(MatchitOperationMultiBackward) omap <silent> ]% <Plug>(MatchitOperationMultiForward) " text object: -vmap <silent> <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward) +xmap <silent> <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward) xmap a% <Plug>(MatchitVisualTextObject) " Call this function to turn on debugging information. Every time the main diff --git a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim index fa5d064048..a62df1dcec 100644 --- a/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim +++ b/runtime/pack/dist/opt/termdebug/plugin/termdebug.vim @@ -2,7 +2,7 @@ " " Author: Bram Moolenaar " Copyright: Vim license applies, see ":help license" -" Last Update: 2018 Jun 3 +" Last Change: 2021 Jan 03 " " WORK IN PROGRESS - Only the basics work " Note: On MS-Windows you need a recent version of gdb. The one included with @@ -131,7 +131,11 @@ func s:StartDebug_internal(dict) " call ch_logfile('debuglog', 'w') let s:sourcewin = win_getid(winnr()) - let s:startsigncolumn = &signcolumn + + " Remember the old value of 'signcolumn' for each buffer that it's set in, so + " that we can restore the value for all buffers. + let b:save_signcolumn = &signcolumn + let s:signcolumn_buflist = [bufnr()] let s:save_columns = 0 let s:allleft = 0 @@ -292,7 +296,7 @@ func s:StartDebug_term(dict) sleep 10m endwhile - " Interpret commands while the target is running. This should usualy only be + " Interpret commands while the target is running. This should usually only be " exec-interrupt, since many commands don't work properly while the target is " running. call s:SendCommand('-gdb-set mi-async on') @@ -348,7 +352,7 @@ func s:StartDebug_prompt(dict) return endif - " Interpret commands while the target is running. This should usualy only + " Interpret commands while the target is running. This should usually only " be exec-interrupt, since many commands don't work properly while the " target is running. call s:SendCommand('-gdb-set mi-async on') @@ -552,9 +556,14 @@ func s:DecodeMessage(quotedText) if a:quotedText[i] == '\' let i += 1 if a:quotedText[i] == 'n' - " drop \n - let i += 1 - continue + " drop \n + let i += 1 + continue + elseif a:quotedText[i] == 't' + " append \t + let i += 1 + let result .= "\t" + continue endif endif let result .= a:quotedText[i] @@ -598,8 +607,20 @@ func s:EndDebugCommon() exe 'bwipe! ' . s:ptybuf endif + " Restore 'signcolumn' in all buffers for which it was set. call win_gotoid(s:sourcewin) - let &signcolumn = s:startsigncolumn + let was_buf = bufnr() + for bufnr in s:signcolumn_buflist + if bufexists(bufnr) + exe bufnr .. "buf" + if exists('b:save_signcolumn') + let &signcolumn = b:save_signcolumn + unlet b:save_signcolumn + endif + endif + endfor + exe was_buf .. "buf" + call s:DeleteCommands() call win_gotoid(curwinid) @@ -715,12 +736,22 @@ func s:CommOutput(job_id, msgs, event) endfor endfunc +func s:GotoProgram() + if has('win32') + if executable('powershell') + call system(printf('powershell -Command "add-type -AssemblyName microsoft.VisualBasic;[Microsoft.VisualBasic.Interaction]::AppActivate(%d);"', s:pid)) + endif + else + call win_gotoid(s:ptywin) + endif +endfunc + " Install commands in the current window to control the debugger. func s:InstallCommands() let save_cpo = &cpo set cpo&vim - command Break call s:SetBreakpoint() + command -nargs=? Break call s:SetBreakpoint(<q-args>) command Clear call s:ClearBreakpoint() command Step call s:SendCommand('-exec-step') command Over call s:SendCommand('-exec-next') @@ -738,13 +769,15 @@ func s:InstallCommands() command -range -nargs=* Evaluate call s:Evaluate(<range>, <q-args>) command Gdb call win_gotoid(s:gdbwin) - command Program call win_gotoid(s:ptywin) + command Program call s:GotoProgram() command Source call s:GotoSourcewinOrCreateIt() command Asm call s:GotoAsmwinOrCreateIt() command Winbar call s:InstallWinbar() - " TODO: can the K mapping be restored? - nnoremap K :Evaluate<CR> + if !exists('g:termdebug_map_K') || g:termdebug_map_K + let s:k_map_saved = maparg('K', 'n', 0, 1) + nnoremap K :Evaluate<CR> + endif let &cpo = save_cpo endfunc @@ -782,7 +815,14 @@ func s:DeleteCommands() delcommand Asm delcommand Winbar - nunmap K + if exists('s:k_map_saved') + if empty(s:k_map_saved) + nunmap K + else + call mapset('n', 0, s:k_map_saved) + endif + unlet s:k_map_saved + endif exe 'sign unplace ' . s:pc_id for [id, entries] in items(s:breakpoints) @@ -801,7 +841,7 @@ func s:DeleteCommands() endfunc " :Break - Set a breakpoint at the cursor position. -func s:SetBreakpoint() +func s:SetBreakpoint(at) " Setting a breakpoint may not work while the program is running. " Interrupt to make it work. let do_continue = 0 @@ -814,9 +854,11 @@ func s:SetBreakpoint() endif sleep 10m endif + " Use the fname:lnum format, older gdb can't handle --source. - call s:SendCommand('-break-insert ' - \ . fnameescape(expand('%:p')) . ':' . line('.')) + let at = empty(a:at) ? + \ fnameescape(expand('%:p')) . ':' . line('.') : a:at + call s:SendCommand('-break-insert ' . at) if do_continue call s:SendCommand('-exec-continue') endif @@ -831,14 +873,14 @@ func s:ClearBreakpoint() let idx = 0 for id in s:breakpoint_locations[bploc] if has_key(s:breakpoints, id) - " Assume this always works, the reply is simply "^done". - call s:SendCommand('-break-delete ' . id) - for subid in keys(s:breakpoints[id]) - exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) - endfor - unlet s:breakpoints[id] - unlet s:breakpoint_locations[bploc][idx] - break + " Assume this always works, the reply is simply "^done". + call s:SendCommand('-break-delete ' . id) + for subid in keys(s:breakpoints[id]) + exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) + endfor + unlet s:breakpoints[id] + unlet s:breakpoint_locations[bploc][idx] + break else let idx += 1 endif @@ -1152,6 +1194,10 @@ func s:HandleCursor(msg) exe lnum exe 'sign unplace ' . s:pc_id exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname + if !exists('b:save_signcolumn') + let b:save_signcolumn = &signcolumn + call add(s:signcolumn_buflist, bufnr()) + endif setlocal signcolumn=yes endif elseif !s:stopped || fname != '' @@ -1228,7 +1274,7 @@ endfunc func s:PlaceSign(id, subid, entry) let nr = printf('%d.%d', a:id, a:subid) - exe 'sign place ' . s:Breakpoint2SignNumber(a:id, a:subid) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . nr . ' file=' . a:entry['fname'] + exe 'sign place ' . s:Breakpoint2SignNumber(a:id, a:subid) . ' line=' . a:entry['lnum'] . ' name=debugBreakpoint' . nr . ' priority=110 file=' . a:entry['fname'] let a:entry['placed'] = 1 endfunc @@ -1242,8 +1288,8 @@ func s:HandleBreakpointDelete(msg) if has_key(s:breakpoints, id) for [subid, entry] in items(s:breakpoints[id]) if has_key(entry, 'placed') - exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) - unlet entry['placed'] + exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) + unlet entry['placed'] endif endfor unlet s:breakpoints[id] @@ -1267,7 +1313,7 @@ func s:BufRead() for [id, entries] in items(s:breakpoints) for [subid, entry] in items(entries) if entry['fname'] == fname - call s:PlaceSign(id, subid, entry) + call s:PlaceSign(id, subid, entry) endif endfor endfor @@ -1279,7 +1325,7 @@ func s:BufUnloaded() for [id, entries] in items(s:breakpoints) for [subid, entry] in items(entries) if entry['fname'] == fname - let entry['placed'] = 0 + let entry['placed'] = 0 endif endfor endfor diff --git a/runtime/plugin/gzip.vim b/runtime/plugin/gzip.vim index 5e13b92d1e..7214488579 100644 --- a/runtime/plugin/gzip.vim +++ b/runtime/plugin/gzip.vim @@ -20,7 +20,7 @@ augroup gzip " " Set binary mode before reading the file. " Use "gzip -d", gunzip isn't always available. - autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z,*.lzma,*.xz,*.lz,*.zst setlocal bin + autocmd BufReadPre,FileReadPre *.gz,*.bz2,*.Z,*.lzma,*.xz,*.lz,*.zst,*.br,*.lzo setlocal bin autocmd BufReadPost,FileReadPost *.gz call gzip#read("gzip -dn") autocmd BufReadPost,FileReadPost *.bz2 call gzip#read("bzip2 -d") autocmd BufReadPost,FileReadPost *.Z call gzip#read("uncompress") @@ -28,6 +28,8 @@ augroup gzip autocmd BufReadPost,FileReadPost *.xz call gzip#read("xz -d") autocmd BufReadPost,FileReadPost *.lz call gzip#read("lzip -d") autocmd BufReadPost,FileReadPost *.zst call gzip#read("zstd -d --rm") + autocmd BufReadPost,FileReadPost *.br call gzip#read("brotli -d --rm") + autocmd BufReadPost,FileReadPost *.lzo call gzip#read("lzop -d -U") autocmd BufWritePost,FileWritePost *.gz call gzip#write("gzip") autocmd BufWritePost,FileWritePost *.bz2 call gzip#write("bzip2") autocmd BufWritePost,FileWritePost *.Z call gzip#write("compress -f") @@ -35,6 +37,8 @@ augroup gzip autocmd BufWritePost,FileWritePost *.xz call gzip#write("xz -z") autocmd BufWritePost,FileWritePost *.lz call gzip#write("lzip") autocmd BufWritePost,FileWritePost *.zst call gzip#write("zstd --rm") + autocmd BufWritePost,FileWritePost *.br call gzip#write("brotli --rm") + autocmd BufWritePost,FileWritePost *.lzo call gzip#write("lzop -U") autocmd FileAppendPre *.gz call gzip#appre("gzip -dn") autocmd FileAppendPre *.bz2 call gzip#appre("bzip2 -d") autocmd FileAppendPre *.Z call gzip#appre("uncompress") @@ -42,6 +46,8 @@ augroup gzip autocmd FileAppendPre *.xz call gzip#appre("xz -d") autocmd FileAppendPre *.lz call gzip#appre("lzip -d") autocmd FileAppendPre *.zst call gzip#appre("zstd -d --rm") + autocmd FileAppendPre *.br call gzip#appre("brotli -d --rm") + autocmd FileAppendPre *.lzo call gzip#appre("lzop -d -U") autocmd FileAppendPost *.gz call gzip#write("gzip") autocmd FileAppendPost *.bz2 call gzip#write("bzip2") autocmd FileAppendPost *.Z call gzip#write("compress -f") @@ -49,4 +55,6 @@ augroup gzip autocmd FileAppendPost *.xz call gzip#write("xz -z") autocmd FileAppendPost *.lz call gzip#write("lzip") autocmd FileAppendPost *.zst call gzip#write("zstd --rm") + autocmd FileAppendPost *.br call gzip#write("brotli --rm") + autocmd FileAppendPost *.lzo call gzip#write("lzop -U") augroup END diff --git a/runtime/plugin/matchparen.vim b/runtime/plugin/matchparen.vim index 65b9fe57bf..cc4f38f669 100644 --- a/runtime/plugin/matchparen.vim +++ b/runtime/plugin/matchparen.vim @@ -1,6 +1,6 @@ " Vim plugin for showing matching parens " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 Jul 3 +" Last Change: 2021 Apr 08 " Exit quickly when: " - this plugin was already loaded (or disabled) @@ -21,6 +21,7 @@ endif augroup matchparen " Replace all matchparen autocommands autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair() + autocmd! WinLeave * call s:Remove_Matches() if exists('##TextChanged') autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair() endif @@ -36,12 +37,9 @@ set cpo-=C " The function that is invoked (very often) to define a ":match" highlighting " for any matching paren. -function! s:Highlight_Matching_Pair() +func s:Highlight_Matching_Pair() " Remove any previous match. - if exists('w:paren_hl_on') && w:paren_hl_on - silent! call matchdelete(3) - let w:paren_hl_on = 0 - endif + call s:Remove_Matches() " Avoid that we remove the popup menu. " Return when there are no colors (looks like the cursor jumps). @@ -109,9 +107,10 @@ function! s:Highlight_Matching_Pair() " Build an expression that detects whether the current cursor position is " in certain syntax types (string, comment, etc.), for use as " searchpairpos()'s skip argument. - " We match "escape" for special items, such as lispEscapeSpecial. + " We match "escape" for special items, such as lispEscapeSpecial, and + " match "symbol" for lispBarSymbol. let s_skip = '!empty(filter(map(synstack(line("."), col(".")), ''synIDattr(v:val, "name")''), ' . - \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|comment"''))' + \ '''v:val =~? "string\\|character\\|singlequote\\|escape\\|symbol\\|comment"''))' " If executing the expression determines that the cursor is currently in " one of the syntax types, then we want searchpairpos() to find the pair " within those syntax types (i.e., not skip). Otherwise, the cursor is @@ -195,11 +194,19 @@ function! s:Highlight_Matching_Pair() endif endfunction +func s:Remove_Matches() + if exists('w:paren_hl_on') && w:paren_hl_on + silent! call matchdelete(3) + let w:paren_hl_on = 0 + endif +endfunc + + " Define commands that will disable and enable the plugin. -command! DoMatchParen call s:DoMatchParen() -command! NoMatchParen call s:NoMatchParen() +command DoMatchParen call s:DoMatchParen() +command NoMatchParen call s:NoMatchParen() -func! s:NoMatchParen() +func s:NoMatchParen() let w = winnr() noau windo silent! call matchdelete(3) unlet! g:loaded_matchparen @@ -207,7 +214,7 @@ func! s:NoMatchParen() au! matchparen endfunc -func! s:DoMatchParen() +func s:DoMatchParen() runtime plugin/matchparen.vim let w = winnr() silent windo doau CursorMoved diff --git a/runtime/plugin/netrwPlugin.vim b/runtime/plugin/netrwPlugin.vim index 87302cf23b..217a7795c9 100644 --- a/runtime/plugin/netrwPlugin.vim +++ b/runtime/plugin/netrwPlugin.vim @@ -20,7 +20,7 @@ if &cp || exists("g:loaded_netrwPlugin") finish endif -let g:loaded_netrwPlugin = "v168" +let g:loaded_netrwPlugin = "v170" let s:keepcpo = &cpo set cpo&vim "DechoRemOn diff --git a/runtime/plugin/tohtml.vim b/runtime/plugin/tohtml.vim index 0cd931eada..2c85b57529 100644 --- a/runtime/plugin/tohtml.vim +++ b/runtime/plugin/tohtml.vim @@ -1,6 +1,6 @@ " Vim plugin for converting a syntax highlighted file to HTML. " Maintainer: Ben Fritz <fritzophrenic@gmail.com> -" Last Change: 2018 Nov 11 +" Last Change: 2019 Nov 13 " " The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and " $VIMRUNTIME/syntax/2html.vim @@ -8,17 +8,46 @@ if exists('g:loaded_2html_plugin') finish endif -let g:loaded_2html_plugin = 'vim8.1_v1' +let g:loaded_2html_plugin = 'vim8.1_v2' " " Changelog: {{{ -" 8.1_v1 (this version): Fix Bitbucket issue #6: Don't generate empty script -" tag. -" Fix Bitbucket issue #5: javascript should -" declare variables with "var". -" Fix Bitbucket issue #13: errors thrown sourcing -" 2html.vim directly when plugins not loaded. -" Fix Bitbucket issue #16: support 'vartabstop'. +" 8.1_v2 (this version): - Fix Bitbucket issue #19: fix calculation of tab +" stop position to use in expanding a tab, when that +" tab occurs after a syntax match which in turn +" comes after previously expanded tabs. +" - Set eventignore while splitting a window for the +" destination file to ignore FileType events; +" speeds up processing when the destination file +" already exists and HTML highlight takes too long. +" - Fix Bitbucket issue #20: progress bar could not be +" seen when DiffDelete background color matched +" StatusLine background color. Added TOhtmlProgress +" highlight group for manual user override, but +" calculate it to be visible compared to StatusLine +" by default. +" - Fix Bitbucket issue #1: Remove workaround for old +" browsers which don't support 'ch' CSS unit, since +" all modern browsers, including IE>=9, support it. +" - Fix Bitbucket issue #10: support termguicolors +" - Fix Bitbucket issue #21: default to using +" generated content instead of <input> tags for +" uncopyable text, so that text is correctly +" prevented from being copied in chrome. Use +" g:html_use_input_for_pc option to control the +" method used. +" - Switch to HTML5 to allow using vnu as a validator +" in unit test. +" - Fix fallback sizing of <input> tags for browsers +" without "ch" support. +" - Fix cursor on unselectable diff filler text. +" 8.1_v1 (Vim 8.1.0528): - Fix Bitbucket issue #6: Don't generate empty +" script tag. +" - Fix Bitbucket issue #5: javascript should +" declare variables with "var". +" - Fix Bitbucket issue #13: errors thrown sourcing +" 2html.vim directly when plugins not loaded. +" - Fix Bitbucket issue #16: support 'vartabstop'. " " 7.4 updates: {{{ " 7.4_v2 (Vim 7.4.0899): Fix error raised when converting a diff containing diff --git a/runtime/plugin/zipPlugin.vim b/runtime/plugin/zipPlugin.vim index c04d5344b1..b9e334fb98 100644 --- a/runtime/plugin/zipPlugin.vim +++ b/runtime/plugin/zipPlugin.vim @@ -1,7 +1,7 @@ " zipPlugin.vim: Handles browsing zipfiles " PLUGIN PORTION -" Date: Sep 13, 2016 -" Maintainer: Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM> +" Date: Jan 07, 2020 +" Maintainer: Charles E Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " License: Vim License (see vim's :help license) " Copyright: Copyright (C) 2005-2016 Charles E. Campbell {{{1 " Permission is hereby granted to use and distribute this code, @@ -20,14 +20,14 @@ if &cp || exists("g:loaded_zipPlugin") finish endif -let g:loaded_zipPlugin = "v28" +let g:loaded_zipPlugin = "v31" let s:keepcpo = &cpo set cpo&vim " --------------------------------------------------------------------- " Options: {{{1 if !exists("g:zipPlugin_ext") - let g:zipPlugin_ext='*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap,*.xlam,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' + let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,*.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap,*.xlam,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip' endif " --------------------------------------------------------------------- diff --git a/runtime/scripts.vim b/runtime/scripts.vim index 3b3409bf4b..0b3fdc3514 100644 --- a/runtime/scripts.vim +++ b/runtime/scripts.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types in scripts " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last change: 2020 Jun 07 +" Last change: 2021 Jan 22 " This file is called by an autocommand for every file that has just been " loaded into a buffer. It checks if the type of file can be recognized by @@ -110,10 +110,6 @@ if s:line1 =~# "^#!" elseif s:name =~# 'lua' set ft=lua - " Perl 6 - elseif s:name =~# 'perl6' - set ft=perl6 - " Perl elseif s:name =~# 'perl' set ft=perl @@ -130,6 +126,10 @@ if s:line1 =~# "^#!" elseif s:name =~# '^groovy\>' set ft=groovy + " Raku + elseif s:name =~# 'raku' + set ft=raku + " Ruby elseif s:name =~# 'ruby' set ft=ruby @@ -150,7 +150,7 @@ if s:line1 =~# "^#!" elseif s:name =~# 'ocaml' set ft=ocaml - " Awk scripts + " Awk scripts; also finds "gawk" elseif s:name =~# 'awk\>' set ft=awk diff --git a/runtime/synmenu.vim b/runtime/synmenu.vim index 3367c68d3b..d1e4becb2b 100644 --- a/runtime/synmenu.vim +++ b/runtime/synmenu.vim @@ -404,6 +404,7 @@ an 50.90.120 &Syntax.PQ.Pam\ config :cal SetSyn("pamconf")<CR> an 50.90.130 &Syntax.PQ.PApp :cal SetSyn("papp")<CR> an 50.90.140 &Syntax.PQ.Pascal :cal SetSyn("pascal")<CR> an 50.90.150 &Syntax.PQ.Password\ file :cal SetSyn("passwd")<CR> +an 50.90.490 &Syntax.PQ.Pbtxt :cal SetSyn("pbtxt")<CR> an 50.90.160 &Syntax.PQ.PCCTS :cal SetSyn("pccts")<CR> an 50.90.170 &Syntax.PQ.PDF :cal SetSyn("pdf")<CR> an 50.90.180 &Syntax.PQ.Perl.Perl :cal SetSyn("perl")<CR> diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim index 91bb0e0d4a..4afdff2899 100644 --- a/runtime/syntax/2html.vim +++ b/runtime/syntax/2html.vim @@ -1,6 +1,6 @@ " Vim syntax support file " Maintainer: Ben Fritz <fritzophrenic@gmail.com> -" Last Change: 2018 Nov 11 +" Last Change: 2020 Jan 05 " " Additional contributors: " @@ -20,8 +20,13 @@ " this file uses line continuations let s:cpo_sav = &cpo let s:ls = &ls +let s:ei_sav = &eventignore set cpo&vim +" HTML filetype can take a while to load/highlight if the destination file +" already exists. +set eventignore+=FileType + let s:end=line('$') " Font @@ -37,6 +42,14 @@ endif let s:settings = tohtml#GetUserSettings() +if s:settings.use_xhtml + let s:html5 = 0 +elseif s:settings.use_css && !s:settings.no_pre + let s:html5 = 1 +else + let s:html5 = 0 +endif + if !exists('s:FOLDED_ID') let s:FOLDED_ID = hlID("Folded") | lockvar s:FOLDED_ID let s:FOLD_C_ID = hlID("FoldColumn") | lockvar s:FOLD_C_ID @@ -69,9 +82,10 @@ if !empty(s:settings.prevent_copy) endif endif -" When not in gui we can only guess the colors. -" TODO - is this true anymore? -if has("gui_running") +" When gui colors are not supported, we can only guess the colors. +" TODO - is this true anymore? Is there a way to ask the terminal what colors +" each number means or read them from some file? +if &termguicolors || has("gui_running") let s:whatterm = "gui" else let s:whatterm = "cterm" @@ -352,6 +366,12 @@ if s:settings.use_css \ ] else + " New method: use generated content in the CSS. The only thing needed here + " is a span with no content, with an attribute holding the desired text. + " + " Old method: use an <input> element when text is unsectable. This is still + " used in conditional comments for Internet Explorer, where the new method + " doesn't work. " " Wrap the <input> in a <span> to allow fixing the stupid bug in some fonts " which cause browsers to display a 1px gap between lines when these @@ -369,16 +389,26 @@ if s:settings.use_css " to use strchars(), because HTML specifies that the maxlength parameter " uses the number of unique codepoints for its limit. let wrapperfunc_lines += [ - \ ' if a:make_unselectable', - \ ' return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">'. - \ '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'. - \ ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'. - \ ' onselect=''this.blur(); return false;'''. - \ ' onmousedown=''this.blur(); return false;'''. - \ ' onclick=''this.blur(); return false;'''. - \ ' readonly=''readonly'''. - \ ' size=\"".strwidth(a:unformatted)."\"'. - \ (s:settings.use_xhtml ? '/' : '').'></span>"', + \ ' if a:make_unselectable', + \ ' return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\"' + \ ] + if s:settings.use_input_for_pc !=# 'all' + let wrapperfunc_lines[-1] .= ' " . "data-" . l:style_name . "-content=\"".a:text."\"' + endif + let wrapperfunc_lines[-1] .= '>' + if s:settings.use_input_for_pc !=# 'none' + let wrapperfunc_lines[-1] .= + \ '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'. + \ ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'. + \ ' onselect=''this.blur(); return false;'''. + \ ' onmousedown=''this.blur(); return false;'''. + \ ' onclick=''this.blur(); return false;'''. + \ ' readonly=''readonly'''. + \ ' size=\"".strwidth(a:unformatted)."\"'. + \ (s:settings.use_xhtml ? '/' : '').'>' + endif + let wrapperfunc_lines[-1] .= '</span>"' + let wrapperfunc_lines += [ \ ' else', \ ' return "<span ".a:extra_attrs."class=\"" . l:style_name .'. diffstyle .'"\">".a:text."</span>"' \ ] @@ -501,27 +531,63 @@ else endfun endif if s:settings.prevent_copy =~# 'f' - " Note the <input> elements for fill spaces will have a single space for - " content, to allow active cursor CSS selection to work. - " - " Wrap the whole thing in a span for the 1px padding workaround for gaps. - function! s:FoldColumn_build(char, len, numfill, char2, class, click) - let l:input_open = "<input readonly='readonly'".s:unselInputType. - \ " onselect='this.blur(); return false;'". - \ " onmousedown='this.blur(); ".a:click." return false;'". - \ " onclick='return false;' size='". - \ string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) . - \ "' " - let l:common_attrs = "class='FoldColumn' value='" - let l:input_close = (s:settings.use_xhtml ? "' />" : "'>") - return "<span class='".a:class."'>". - \ l:input_open.l:common_attrs.repeat(a:char, a:len). - \ (!empty(a:char2) ? a:char2 : ""). - \ l:input_close . "</span>" - endfun - function! s:FoldColumn_fill() - return s:FoldColumn_build('', s:foldcolumn, 0, '', 'FoldColumn', '') - endfun + if s:settings.use_input_for_pc ==# 'none' + " Simply space-pad to the desired width inside the generated content (note + " that the FoldColumn definition includes a whitespace:pre rule) + function! s:FoldColumn_build(char, len, numfill, char2, class, click) + return "<a href='#' class='".a:class."' onclick='".a:click."' data-FoldColumn-content='". + \ repeat(a:char, a:len).a:char2.repeat(' ', a:numfill). + \ "'></a>" + endfun + function! s:FoldColumn_fill() + return s:HtmlFormat(repeat(' ', s:foldcolumn), s:FOLD_C_ID, 0, "", 1) + endfun + else + " Note the <input> elements for fill spaces will have a single space for + " content, to allow active cursor CSS selection to work. + " + " Wrap the whole thing in a span for the 1px padding workaround for gaps. + " + " Build the function line by line containing only what is needed for the + " options in use for maximum code sharing with minimal branch logic for + " greater speed. + " + " Note, 'exec' commands do not recognize line continuations, so must + " concatenate lines rather than continue them. + let build_fun_lines = [ + \ 'function! s:FoldColumn_build(char, len, numfill, char2, class, click)', + \ ' let l:input_open = "<input readonly=''readonly''".s:unselInputType.'. + \ ' " onselect=''this.blur(); return false;''".'. + \ ' " onmousedown=''this.blur(); ".a:click." return false;''".'. + \ ' " onclick=''return false;'' size=''".'. + \ ' string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) .'. + \ ' "'' "', + \ ' let l:common_attrs = "class=''FoldColumn'' value=''"', + \ ' let l:input_close = (s:settings.use_xhtml ? "'' />" : "''>")' + \ ] + if s:settings.use_input_for_pc ==# 'fallback' + let build_fun_lines += [ + \ ' let l:gen_content_link ='. + \ ' "<a href=''#'' class=''FoldColumn'' onclick=''".a:click."'' data-FoldColumn-content=''".'. + \ ' repeat(a:char, a:len).a:char2.repeat('' '', a:numfill).'. + \ ' "''></a>"' + \ ] + endif + let build_fun_lines += [ + \ ' return "<span class=''".a:class."''>".'. + \ ' l:input_open.l:common_attrs.repeat(a:char, a:len).(a:char2).'. + \ ' l:input_close.'. + \ (s:settings.use_input_for_pc ==# 'fallback' ? 'l:gen_content_link.' : ""). + \ ' "</span>"', + \ 'endfun' + \ ] + " create the function we built line by line above + exec join(build_fun_lines, "\n") + + function! s:FoldColumn_fill() + return s:FoldColumn_build(' ', s:foldcolumn, 0, '', 'FoldColumn', '') + endfun + endif else " For normal fold columns, simply space-pad to the desired width (note that " the FoldColumn definition includes a whitespace:pre rule) @@ -755,7 +821,11 @@ call extend(s:lines, [ " include encoding as close to the top as possible, but only if not already " contained in XML information (to avoid haggling over content type) if s:settings.encoding != "" && !s:settings.use_xhtml - call add(s:lines, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . s:tag_close) + if s:html5 + call add(s:lines, '<meta charset="' . s:settings.encoding . '"' . s:tag_close) + else + call add(s:lines, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . s:tag_close) + endif endif call extend(s:lines, [ \ ("<title>".expand("%:p:~")."</title>"), @@ -766,6 +836,7 @@ call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_clo call add(s:lines, '<meta name="settings" content="'. \ join(filter(keys(s:settings),'s:settings[v:val]'),','). \ ',prevent_copy='.s:settings.prevent_copy. + \ ',use_input_for_pc='.s:settings.use_input_for_pc. \ '"'.s:tag_close) call add(s:lines, '<meta name="colorscheme" content="'. \ (exists('g:colors_name') @@ -773,19 +844,21 @@ call add(s:lines, '<meta name="colorscheme" content="'. \ : 'none'). '"'.s:tag_close) if s:settings.use_css + call extend(s:lines, [ + \ "<style" . (s:html5 ? "" : " type=\"text/css\"") . ">", + \ s:settings.use_xhtml ? "" : "<!--"]) + let s:ieonly = [] if s:settings.dynamic_folds if s:settings.hover_unfold " if we are doing hover_unfold, use css 2 with css 1 fallback for IE6 call extend(s:lines, [ - \ "<style type=\"text/css\">", - \ s:settings.use_xhtml ? "" : "<!--", \ ".FoldColumn { text-decoration: none; white-space: pre; }", \ "", \ "body * { margin: 0; padding: 0; }", "", - \ ".open-fold > .Folded { display: none; }", - \ ".open-fold > .fulltext { display: inline; }", - \ ".closed-fold > .fulltext { display: none; }", - \ ".closed-fold > .Folded { display: inline; }", + \ ".open-fold > span.Folded { display: none; }", + \ ".open-fold > .fulltext { display: inline; }", + \ ".closed-fold > .fulltext { display: none; }", + \ ".closed-fold > span.Folded { display: inline; }", \ "", \ ".open-fold > .toggle-open { display: none; }", \ ".open-fold > .toggle-closed { display: inline; }", @@ -794,65 +867,60 @@ if s:settings.use_css \ "", "", \ '/* opening a fold while hovering won''t be supported by IE6 and other', \ "similar browsers, but it should fail gracefully. */", - \ ".closed-fold:hover > .fulltext { display: inline; }", + \ ".closed-fold:hover > .fulltext { display: inline; }", \ ".closed-fold:hover > .toggle-filler { display: none; }", - \ ".closed-fold:hover > .Folded { display: none; }", - \ s:settings.use_xhtml ? "" : '-->', - \ '</style>']) - " TODO: IE7 doesn't *actually* support XHTML, maybe we should remove this. - " But if it's served up as tag soup, maybe the following will work, so - " leave it in for now. - call extend(s:lines, [ + \ ".closed-fold:hover > .Folded { display: none; }"]) + " TODO: IE6 is REALLY old and I can't even test it anymore. Maybe we + " should remove this? Leave it in for now, it was working at one point, + " and doesn't affect any modern browsers. Even newer IE versions should + " support the above code and ignore the following. + let s:ieonly = [ \ "<!--[if lt IE 7]><style type=\"text/css\">", - \ ".open-fold .Folded { display: none; }", \ ".open-fold .fulltext { display: inline; }", + \ ".open-fold span.Folded { display: none; }", \ ".open-fold .toggle-open { display: none; }", - \ ".closed-fold .toggle-closed { display: inline; }", + \ ".open-fold .toggle-closed { display: inline; }", \ "", \ ".closed-fold .fulltext { display: none; }", - \ ".closed-fold .Folded { display: inline; }", + \ ".closed-fold span.Folded { display: inline; }", \ ".closed-fold .toggle-open { display: inline; }", \ ".closed-fold .toggle-closed { display: none; }", \ "</style>", \ "<![endif]-->", - \]) + \] else " if we aren't doing hover_unfold, use CSS 1 only call extend(s:lines, [ - \ "<style type=\"text/css\">", - \ s:settings.use_xhtml ? "" :"<!--", \ ".FoldColumn { text-decoration: none; white-space: pre; }", - \ ".open-fold .Folded { display: none; }", \ ".open-fold .fulltext { display: inline; }", + \ ".open-fold span.Folded { display: none; }", \ ".open-fold .toggle-open { display: none; }", - \ ".closed-fold .toggle-closed { display: inline; }", + \ ".open-fold .toggle-closed { display: inline; }", \ "", \ ".closed-fold .fulltext { display: none; }", - \ ".closed-fold .Folded { display: inline; }", + \ ".closed-fold span.Folded { display: inline; }", \ ".closed-fold .toggle-open { display: inline; }", \ ".closed-fold .toggle-closed { display: none; }", - \ s:settings.use_xhtml ? "" : '-->', - \ '</style>' \]) endif - else - " if we aren't doing any dynamic folding, no need for any special rules - call extend(s:lines, [ - \ "<style type=\"text/css\">", - \ s:settings.use_xhtml ? "" : "<!--", + endif + " else we aren't doing any dynamic folding, no need for any special rules + + call extend(s:lines, [ \ s:settings.use_xhtml ? "" : '-->', \ "</style>", \]) - endif + call extend(s:lines, s:ieonly) + unlet s:ieonly endif -let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids || !empty(s:settings.prevent_copy) +let s:uses_script = s:settings.dynamic_folds || s:settings.line_ids " insert script tag if needed if s:uses_script call extend(s:lines, [ \ "", - \ "<script type='text/javascript'>", + \ "<script" . (s:html5 ? "" : " type='text/javascript'") . ">", \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"]) endif @@ -864,7 +932,7 @@ if s:settings.dynamic_folds \ "{", \ " var fold;", \ " fold = document.getElementById(objID);", - \ " if(fold.className == 'closed-fold')", + \ " if (fold.className == 'closed-fold')", \ " {", \ " fold.className = 'open-fold';", \ " }", @@ -924,65 +992,6 @@ if s:settings.line_ids \ ]) endif -" Small text columns like the foldcolumn and line number column need a weird -" hack to work around Webkit's and (in versions prior to 9) IE's lack of support -" for the 'ch' unit without messing up Opera, which also doesn't support it but -" works anyway. -" -" The problem is that without the 'ch' unit, it is not possible to specify a -" size of an <input> in terms of character widths. Only Opera seems to do the -" "sensible" thing and make the <input> sized to fit exactly as many characters -" as specified by its "size" attribute, but the spec actually says "at least -" wide enough to fit 'size' characters", so the other browsers are technically -" correct as well. -" -" Anyway, this leads to two diffculties: -" 1. The foldcolumn is made up of multiple elements side-by-side with -" different sizes, each of which has their own extra padding added. Thus, a -" column made up of one item of size 1 and another of size 2 would not -" necessarily be equal in size to another line's foldcolumn with a single -" item of size 3. -" 2. The extra padding added to the <input> elements adds up to make the -" foldcolumn and line number column too wide, especially in Webkit -" browsers. -" -" So, the full workaround is: -" 1. Define a default size in em, equal to the number of characters in the -" input element, in case javascript is disabled and the browser does not -" support the 'ch' unit. Unfortunately this makes Opera no longer work -" properly without javascript. 1em per character is much too wide but it -" looks better in webkit browsers than unaligned columns. -" 2. Insert the following javascript to run at page load, which checks for the -" width of a single character (in an extraneous page element inserted -" before the page title, and set to hidden) and compares it to the width of -" another extra <input> element with only one character. If the width -" matches, the script does nothing more, but if not, it will figure out the -" fraction of an em unit which would correspond with a ch unit if there -" were one, and set the containing element (<pre> or <div>) to a class with -" pre-defined rules which is closest to that fraction of an em. Rules are -" defined from 0.05 em to 1em per ch. -if !empty(s:settings.prevent_copy) - call extend(s:lines, [ - \ '', - \ '/* simulate a "ch" unit by asking the browser how big a zero character is */', - \ 'function FixCharWidth() {', - \ ' /* get the hidden element which gives the width of a single character */', - \ ' var goodWidth = document.getElementById("oneCharWidth").clientWidth;', - \ ' /* get all input elements, we''ll filter on class later */', - \ ' var inputTags = document.getElementsByTagName("input");', - \ ' var ratio = 5;', - \ ' var inputWidth = document.getElementById("oneInputWidth").clientWidth;', - \ ' var emWidth = document.getElementById("oneEmWidth").clientWidth;', - \ ' if (inputWidth > goodWidth) {', - \ ' while (ratio < 100*goodWidth/emWidth && ratio < 100) {', - \ ' ratio += 5;', - \ ' }', - \ ' document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;', - \ ' }', - \ '}' - \ ]) -endif - " insert script closing tag if needed if s:uses_script call extend(s:lines, [ @@ -992,18 +1001,9 @@ if s:uses_script \ ]) endif -call extend(s:lines, ["</head>"]) -if !empty(s:settings.prevent_copy) - call extend(s:lines, - \ ["<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>", - \ "<!-- hidden divs used by javascript to get the width of a char -->", - \ "<div id='oneCharWidth'>0</div>", - \ "<div id='oneInputWidth'><input size='1' value='0'".s:tag_close."</div>", - \ "<div id='oneEmWidth' style='width: 1em;'></div>" - \ ]) -else - call extend(s:lines, ["<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"]) -endif +call extend(s:lines, ["</head>", + \ "<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"]) + if s:settings.no_pre " if we're not using CSS we use a font tag which can't have a div inside if s:settings.use_css @@ -1035,14 +1035,68 @@ if !s:settings.no_progress let s:progressbar={} " Progessbar specific functions + + func! s:SetProgbarColor() + if hlID("TOhtmlProgress") != 0 + hi! link TOhtmlProgress_auto TOhtmlProgress + elseif hlID("TOhtmlProgress_auto")==0 || + \ !exists("s:last_colors_name") || !exists("g:colors_name") || + \ g:colors_name != s:last_colors_name + let s:last_colors_name = exists("g:colors_name") ? g:colors_name : "none" + + let l:diffatr = synIDattr(hlID("DiffDelete"), "reverse", s:whatterm) ? "fg#" : "bg#" + let l:stlatr = synIDattr(hlID("StatusLine"), "reverse", s:whatterm) ? "fg#" : "bg#" + + let l:progbar_color = synIDattr(hlID("DiffDelete"), l:diffatr, s:whatterm) + let l:stl_color = synIDattr(hlID("StatusLine"), l:stlatr, s:whatterm) + + if "" == l:progbar_color + let l:progbar_color = synIDattr(hlID("DiffDelete"), "reverse", s:whatterm) ? s:fgc : s:bgc + endif + if "" == l:stl_color + let l:stl_color = synIDattr(hlID("StatusLine"), "reverse", s:whatterm) ? s:fgc : s:bgc + endif + + if l:progbar_color == l:stl_color + if s:whatterm == 'cterm' + if l:progbar_color >= (&t_Co/2) + let l:progbar_color-=1 + else + let l:progbar_color+=1 + endif + else + let l:rgb = map(matchlist(l:progbar_color, '#\zs\x\x\ze\(\x\x\)\(\x\x\)')[:2], 'str2nr(v:val, 16)') + let l:avg = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3 + if l:avg >= 128 + let l:avg_new = l:avg + while l:avg - l:avg_new < 0x15 + let l:rgb = map(l:rgb, 'v:val * 3 / 4') + let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3 + endwhile + else + let l:avg_new = l:avg + while l:avg_new - l:avg < 0x15 + let l:rgb = map(l:rgb, 'min([max([v:val, 4]) * 5 / 4, 255])') + let l:avg_new = (l:rgb[0] + l:rgb[1] + l:rgb[2])/3 + endwhile + endif + let l:progbar_color = printf("#%02x%02x%02x", l:rgb[0], l:rgb[1], l:rgb[2]) + endif + echomsg "diff detected progbar color set to" l:progbar_color + endif + exe "hi TOhtmlProgress_auto" s:whatterm."bg=".l:progbar_color + endif + endfun + func! s:ProgressBar(title, max_value, winnr) let pgb=copy(s:progressbar) let pgb.title = a:title.' ' let pgb.max_value = a:max_value let pgb.winnr = a:winnr let pgb.cur_value = 0 + let pgb.items = { 'title' : { 'color' : 'Statusline' }, - \'bar' : { 'color' : 'Statusline' , 'fillcolor' : 'DiffDelete' , 'bg' : 'Statusline' } , + \'bar' : { 'color' : 'Statusline' , 'fillcolor' : 'TOhtmlProgress_auto' , 'bg' : 'Statusline' } , \'counter' : { 'color' : 'Statusline' } } let pgb.last_value = 0 let pgb.needs_redraw = 0 @@ -1134,6 +1188,8 @@ if !s:settings.no_progress " to process folds we make two passes through each line let s:pgb = s:ProgressBar("Processing folds:", line('$')*2, s:orgwin) endif + + call s:SetProgbarColor() endif " First do some preprocessing for dynamic folding. Do this for the entire file @@ -1577,28 +1633,44 @@ while s:lnum <= s:end let s:tabidx = 0 let s:tabwidth = 0 while s:idx >= 0 - while s:startcol+s:idx > s:tabwidth + s:tablist[s:tabidx] - let s:tabwidth += s:tablist[s:tabidx] - if s:tabidx < len(s:tablist)-1 - let s:tabidx = s:tabidx+1 - endif - endwhile - if has("multi_byte_encoding") - if s:startcol + s:idx == 1 - let s:i = s:tablist[s:tabidx] + if s:startcol + s:idx == 1 + let s:i = s:tablist[0] + else + " Get the character, which could be multiple bytes, which falls + " immediately before the found tab. Extract it by matching a + " character just prior to the column where the tab matches. + " We'll use this to get the byte index of the character + " immediately preceding the tab, so we can then look up the + " virtual column that character appears in, to determine how + " much of the current tabstop has been used up. + if s:idx == 0 + " if the found tab is the first character in the text being + " processed, we need to get the character prior to the text, + " given by startcol. + let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:offset) . 'c') else - if s:idx == 0 - let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c') - else - let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c') - endif - let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)]) - let s:i = s:tablist[s:tabidx] - (s:vcol - s:tabwidth) + " Otherwise, the byte index of the tab into s:expandedtab is + " given by s:idx. + let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c') endif - let s:offset -= s:i - 1 - else - let s:i = s:tablist[s:tabidx] - ((s:idx + s:startcol - 1) - s:tabwidth) + let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)]) + + " find the tabstop interval to use for the tab we just found. Keep + " adding tabstops (which could be variable) until we would exceed + " the virtual screen position of the start of the found tab. + while s:vcol >= s:tabwidth + s:tablist[s:tabidx] + let s:tabwidth += s:tablist[s:tabidx] + if s:tabidx < len(s:tablist)-1 + let s:tabidx = s:tabidx+1 + endif + endwhile + let s:i = s:tablist[s:tabidx] - (s:vcol - s:tabwidth) endif + " update offset to keep the index within the line corresponding to + " actual tab characters instead of replaced spaces; s:idx reflects + " replaced spaces in s:expandedtab, s:offset cancels out all but + " the tab character itself. + let s:offset -= s:i - 1 let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '') let s:idx = stridx(s:expandedtab, "\t") endwhile @@ -1674,12 +1746,10 @@ call append(line('$'), "<!-- vim: set foldmethod=manual : -->") " Now, when we finally know which, we define the colors and styles if s:settings.use_css - 1;/<style type="text/+1 + 1;/<style\>/+1 endif " Normal/global attributes -" For Netscape 4, set <body> attributes too, though, strictly speaking, it's -" incorrect. if s:settings.use_css if s:settings.no_pre call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }") @@ -1702,61 +1772,111 @@ if s:settings.use_css " if we use any input elements for unselectable content, make sure they look " like normal text if !empty(s:settings.prevent_copy) - call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }') - + - " ch units for browsers which support them, em units for a somewhat - " reasonable fallback. Also make sure the special elements for size - " calculations aren't seen. - call append('.', [ - \ "input[size='1'] { width: 1em; width: 1ch; }", - \ "input[size='2'] { width: 2em; width: 2ch; }", - \ "input[size='3'] { width: 3em; width: 3ch; }", - \ "input[size='4'] { width: 4em; width: 4ch; }", - \ "input[size='5'] { width: 5em; width: 5ch; }", - \ "input[size='6'] { width: 6em; width: 6ch; }", - \ "input[size='7'] { width: 7em; width: 7ch; }", - \ "input[size='8'] { width: 8em; width: 8ch; }", - \ "input[size='9'] { width: 9em; width: 9ch; }", - \ "input[size='10'] { width: 10em; width: 10ch; }", - \ "input[size='11'] { width: 11em; width: 11ch; }", - \ "input[size='12'] { width: 12em; width: 12ch; }", - \ "input[size='13'] { width: 13em; width: 13ch; }", - \ "input[size='14'] { width: 14em; width: 14ch; }", - \ "input[size='15'] { width: 15em; width: 15ch; }", - \ "input[size='16'] { width: 16em; width: 16ch; }", - \ "input[size='17'] { width: 17em; width: 17ch; }", - \ "input[size='18'] { width: 18em; width: 18ch; }", - \ "input[size='19'] { width: 19em; width: 19ch; }", - \ "input[size='20'] { width: 20em; width: 20ch; }", - \ "#oneCharWidth, #oneEmWidth, #oneInputWidth { padding: 0; margin: 0; position: absolute; left: -999999px; visibility: hidden; }" - \ ]) - +21 - for w in range(5, 100, 5) - let base = 0.01 * w - call append('.', join(map(range(1,20), "'.em'.w.' input[size='''.v:val.'''] { width: '.string(v:val*base).'em; }'"))) + if s:settings.use_input_for_pc !=# "none" + call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }') + - endfor - if s:settings.prevent_copy =~# 'f' - " Make the cursor show active fold columns as active areas, and empty fold - " columns as not interactive. - call append('.', ['input.FoldColumn { cursor: pointer; }', - \ 'input.FoldColumn[value=""] { cursor: default; }' - \ ]) - +2 + " ch units for browsers which support them, em units for a somewhat + " reasonable fallback. + for w in range(1, 20, 1) + call append('.', [ + \ "input[size='".w."'] { width: ".w."em; width: ".w."ch; }" + \ ]) + + + endfor endif - " make line number column show as non-interactive if not selectable - if s:settings.prevent_copy =~# 'n' - call append('.', 'input.LineNr { cursor: default; }') - + + + if s:settings.use_input_for_pc !=# 'all' + let s:unselectable_styles = [] + if s:settings.prevent_copy =~# 'f' + call add(s:unselectable_styles, 'FoldColumn') + endif + if s:settings.prevent_copy =~# 'n' + call add(s:unselectable_styles, 'LineNr') + endif + if s:settings.prevent_copy =~# 't' && !s:settings.ignore_folding + call add(s:unselectable_styles, 'Folded') + endif + if s:settings.prevent_copy =~# 'd' + call add(s:unselectable_styles, 'DiffDelete') + endif + if s:settings.use_input_for_pc !=# 'none' + call append('.', [ + \ '/* Note: IE does not support @supports conditionals, but also does not fully support', + \ ' "content:" with custom content, so we *want* the check to fail */', + \ '@supports ( content: attr(data-custom-content) ) {' + \ ]) + +3 + endif + " The line number column inside the foldtext is styled just like the fold + " text in Vim, but it should use the prevent_copy settings of line number + " rather than fold text. Apply the prevent_copy styles to foldtext + " specifically for line numbers, which always come after the fold column, + " or at the beginning of the line. + if s:settings.prevent_copy =~# 'n' && !s:settings.ignore_folding + call append('.', [ + \ ' .FoldColumn + .Folded, .Folded:first-child { user-select: none; }', + \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { content: attr(data-Folded-content); }', + \ ' .FoldColumn + [data-Folded-content]::before, [data-Folded-content]:first-child::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + \ ' .FoldColumn + span[data-Folded-content]::before, [data-Folded-content]:first-child::before { cursor: default; }', + \ ]) + +4 + endif + for s:style_name in s:unselectable_styles + call append('.', [ + \ ' .'.s:style_name.' { user-select: none; }', + \ ' [data-'.s:style_name.'-content]::before { content: attr(data-'.s:style_name.'-content); }', + \ ' [data-'.s:style_name.'-content]::before { padding-bottom: 1px; display: inline-block; /* match the 1-px padding of standard items with background */ }', + \ ' span[data-'.s:style_name.'-content]::before { cursor: default; }', + \ ]) + +4 + endfor + if s:settings.use_input_for_pc !=# 'none' + call append('.', [ + \ ' input { display: none; }', + \ '}' + \ ]) + +2 + endif + unlet s:unselectable_styles endif - " make fold text and line number column within fold text show as - " non-interactive if not selectable - if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding - call append('.', 'input.Folded { cursor: default; }') - + + + " Fix mouse cursor shape for the fallback <input> method of uncopyable text + if s:settings.use_input_for_pc !=# 'none' + if s:settings.prevent_copy =~# 'f' + " Make the cursor show active fold columns as active areas, and empty fold + " columns as not interactive. + call append('.', ['input.FoldColumn { cursor: pointer; }', + \ 'input.FoldColumn[value="'.repeat(' ', s:foldcolumn).'"] { cursor: default; }' + \ ]) + +2 + if s:settings.use_input_for_pc !=# 'all' + call append('.', [ + \ 'a[data-FoldColumn-content="'.repeat(' ', s:foldcolumn).'"] { cursor: default; }' + \ ]) + +1 + end + endif + " make line number column show as non-interactive if not selectable + if s:settings.prevent_copy =~# 'n' + call append('.', 'input.LineNr { cursor: default; }') + + + endif + " make fold text and line number column within fold text show as + " non-interactive if not selectable + if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding + call append('.', 'input.Folded { cursor: default; }') + + + endif + " make diff filler show as non-interactive if not selectable + if s:settings.prevent_copy =~# 'd' + call append('.', 'input.DiffDelete { cursor: default; }') + + + endif endif endif else + " For Netscape 4, set <body> attributes too, though, strictly speaking, it's + " incorrect. execute '%s:<body\([^>]*\):<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"\1>\r<font face="'. s:htmlfont .'"' endif @@ -1779,8 +1899,8 @@ endif " The DTD if s:settings.use_xhtml exe "normal! gg$a\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">" -elseif s:settings.use_css && !s:settings.no_pre - exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n" +elseif s:html5 + exe "normal! gg0i<!DOCTYPE html>\n" else exe "normal! gg0i<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n" endif @@ -1823,6 +1943,7 @@ exec 'resize' s:old_winheight let &l:winfixheight = s:old_winfixheight let &ls=s:ls +let &eventignore=s:ei_sav " Save a little bit of memory (worth doing?) unlet s:htmlfont s:whitespace @@ -1831,7 +1952,7 @@ unlet s:old_magic s:old_more s:old_fen s:old_winheight unlet! s:old_isprint unlet s:whatterm s:stylelist s:diffstylelist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo s:diff_mode -unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl +unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:ei_sav s:origwin_stl unlet! s:newwin_stl s:current_syntax if !v:profiling delfunc s:HtmlColor diff --git a/runtime/syntax/abap.vim b/runtime/syntax/abap.vim index 4650109fb1..e48dfc3603 100644 --- a/runtime/syntax/abap.vim +++ b/runtime/syntax/abap.vim @@ -1,7 +1,7 @@ " Vim ABAP syntax file " Language: SAP - ABAP/R4 " Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com> -" Last Change: 2018 Dec 12 +" Last Change: 2021 Jan 02 " Comment: Thanks to EPI-USE Labs for all your assistance. :) " Quit when a syntax file was already loaded @@ -193,4 +193,4 @@ hi def link abapHex Number let b:current_syntax = "abap" -" vim: ts=8 sw=2
\ No newline at end of file +" vim: ts=8 sw=2 diff --git a/runtime/syntax/aidl.vim b/runtime/syntax/aidl.vim new file mode 100644 index 0000000000..3a79433aa9 --- /dev/null +++ b/runtime/syntax/aidl.vim @@ -0,0 +1,23 @@ +" Vim syntax file +" Language: aidl (Android Interface Definition Language) +" https://developer.android.com/guide/components/aidl +" Maintainer: Dominique Pelle <dominique.pelle@tomtom.com> +" LastChange: 2020/12/03 + +" Quit when a syntax file was already loaded. +if exists("b:current_syntax") + finish +endif + +source <sfile>:p:h/java.vim + +syn keyword aidlParamDir in out inout +syn keyword aidlKeyword const oneway parcelable + +" Needed for the 'in', 'out', 'inout' keywords to be highlighted. +syn cluster javaTop add=aidlParamDir + +hi def link aidlParamDir StorageClass +hi def link aidlKeyword Keyword + +let b:current_syntax = "aidl" diff --git a/runtime/syntax/amiga.vim b/runtime/syntax/amiga.vim index eab9f66169..5a664c4f60 100644 --- a/runtime/syntax/amiga.vim +++ b/runtime/syntax/amiga.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: AmigaDos -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 9 +" Version: 10 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_AMIGA " quit when a syntax file was already loaded diff --git a/runtime/syntax/apache.vim b/runtime/syntax/apache.vim index 71babfba36..dd18aa6570 100644 --- a/runtime/syntax/apache.vim +++ b/runtime/syntax/apache.vim @@ -3,7 +3,7 @@ " Maintainer: David Necas (Yeti) <yeti@physics.muni.cz> " License: This file can be redistribued and/or modified under the same terms " as Vim itself. -" Last Change: 2018-12-06 +" Last Change: 2020 Oct 07 " Notes: Last synced with apache-2.2.3, version 1.x is no longer supported " TODO: see particular FIXME's scattered through the file " make it really linewise? @@ -42,6 +42,8 @@ syn keyword apacheOption user group syn match apacheOption "\<valid-user\>" syn case match syn keyword apacheMethodOption GET POST PUT DELETE CONNECT OPTIONS TRACE PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK contained +" Added as suggested by Mikko Koivunalho +syn keyword apacheMethodOption BASELINE-CONTROL CHECKIN CHECKOUT LABEL MERGE MKACTIVITY MKWORKSPACE REPORT UNCHECKOUT UPDATE VERSION-CONTROL contained syn case ignore syn match apacheSection "<\/\=\(Directory\|DirectoryMatch\|Files\|FilesMatch\|IfModule\|IfDefine\|Location\|LocationMatch\|VirtualHost\)[^>]*>" contains=apacheAnything syn match apacheLimitSection "<\/\=\(Limit\|LimitExcept\)[^>]*>" contains=apacheLimitSectionKeyword,apacheMethodOption,apacheError diff --git a/runtime/syntax/asciidoc.vim b/runtime/syntax/asciidoc.vim index ccb079e06b..29451f9eab 100644 --- a/runtime/syntax/asciidoc.vim +++ b/runtime/syntax/asciidoc.vim @@ -1,13 +1,15 @@ " Vim syntax file -" Language: AsciiDoc -" Author: Stuart Rackham <srackham@gmail.com> (inspired by Felix -" Obenhuber's original asciidoc.vim script). -" URL: http://asciidoc.org/ -" Licence: GPL (http://www.gnu.org) -" Remarks: Vim 6 or greater -" Last Update: 2014 Aug 29 (see Issue 240) +" Language: AsciiDoc +" Maintainer: @aerostitch on GitHub (tag me in your issue in the +" github/vim/vim repository and I'll answer when available) +" Original author: Stuart Rackham <srackham@gmail.com> (inspired by Felix +" Obenhuber's original asciidoc.vim script). +" URL: http://asciidoc.org/ +" Licence: GPL (http://www.gnu.org) +" Remarks: Vim 6 or greater +" Last Update: 2020 May 03 (see Issue 240) " Limitations: -" +" " - Nested quoted text formatting is highlighted according to the outer " format. " - If a closing Example Block delimiter may be mistaken for a title @@ -23,9 +25,7 @@ if exists("b:current_syntax") finish endif -syn clear -syn sync fromstart -syn sync linebreaks=100 +" Use the default syntax syncing. " Run :help syn-priority to review syntax matching priority. syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED diff --git a/runtime/syntax/asm.vim b/runtime/syntax/asm.vim index 492e3e8e92..73f283a4a7 100644 --- a/runtime/syntax/asm.vim +++ b/runtime/syntax/asm.vim @@ -1,11 +1,10 @@ " Vim syntax file -" Language: GNU Assembler -" Maintainer: Erik Wognsen <erik.wognsen@gmail.com> -" Previous maintainer: -" Kevin Dahlhausen <kdahlhaus@yahoo.com> -" Last Change: 2014 Feb 04 - -" Thanks to Ori Avtalion for feedback on the comment markers! +" Language: GNU Assembler +" Maintainer: Doug Kearns dougkearns@gmail.com +" Previous Maintainers: Erik Wognsen <erik.wognsen@gmail.com> +" Kevin Dahlhausen <kdahlhaus@yahoo.com> +" Contributors: Ori Avtalion, Lakshay Garg +" Last Change: 2020 Oct 31 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -34,29 +33,49 @@ syn match asmType "\.space" syn match asmType "\.string" syn match asmType "\.word" -syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1 syn match asmIdentifier "[a-z_][a-z0-9_]*" +syn match asmLabel "[a-z_][a-z0-9_]*:"he=e-1 " Various #'s as defined by GAS ref manual sec 3.6.2.1 -" Technically, the first decNumber def is actually octal, +" Technically, the first asmDecimal def is actually octal, " since the value of 0-7 octal is the same as 0-7 decimal, " I (Kevin) prefer to map it as decimal: -syn match decNumber "0\+[1-7]\=[\t\n$,; ]" -syn match decNumber "[1-9]\d*" -syn match octNumber "0[0-7][0-7]\+" -syn match hexNumber "0[xX][0-9a-fA-F]\+" -syn match binNumber "0[bB][0-1]*" +syn match asmDecimal "\<0\+[1-7]\=\>" display +syn match asmDecimal "\<[1-9]\d*\>" display +syn match asmOctal "\<0[0-7][0-7]\+\>" display +syn match asmHexadecimal "\<0[xX][0-9a-fA-F]\+\>" display +syn match asmBinary "\<0[bB][0-1]\+\>" display + +syn match asmFloat "\<\d\+\.\d*\%(e[+-]\=\d\+\)\=\>" display +syn match asmFloat "\.\d\+\%(e[+-]\=\d\+\)\=\>" display +syn match asmFloat "\<\d\%(e[+-]\=\d\+\)\>" display +syn match asmFloat "[+-]\=Inf\>\|\<NaN\>" display + +syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display +syn match asmFloat "\%(0[edfghprs]\)[+-]\=\d\+\%(\.\d\+\)\=\%(e[+-]\=\d\+\)\=" display +" Avoid fighting the hexadecimal match for unicorn-like '0x' prefixed floats +syn match asmFloat "\%(0x\)[+-]\=\d*\%(\.\d\+\)\%(e[+-]\=\d\+\)\=" display -syn keyword asmTodo contained TODO +" Allow all characters to be escaped (and in strings) as these vary across +" architectures [See sec 3.6.1.1 Strings] +syn match asmCharacterEscape "\\." contained +syn match asmCharacter "'\\\=." contains=asmCharacterEscape +syn match asmStringEscape "\\\_." contained +syn match asmStringEscape "\\\%(\o\{3}\|00[89]\)" contained display +syn match asmStringEscape "\\x\x\+" contained display + +syn region asmString start="\"" end="\"" skip="\\\\\|\\\"" contains=asmStringEscape + +syn keyword asmTodo contained TODO FIXME XXX NOTE " GAS supports one type of multi line comments: -syn region asmComment start="/\*" end="\*/" contains=asmTodo +syn region asmComment start="/\*" end="\*/" contains=asmTodo,@Spell " GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however, " a backslash ending a C++ style comment does not extend the comment to the " next line (hence the syntax region does not define 'skip="\\$"') -syn region asmComment start="//" end="$" keepend contains=asmTodo +syn region asmComment start="//" end="$" keepend contains=asmTodo,@Spell " Line comment characters depend on the target architecture and command line " options and some comments may double as logical line number directives or @@ -69,7 +88,7 @@ syn region asmComment start="//" end="$" keepend contains=asmTodo " frequently used features of the most popular architectures (and also the " non-GNU assembly languages that use this syntax file because their asm files " are also named *.asm), the following are used as line comment characters: -syn match asmComment "[#;!|].*" contains=asmTodo +syn match asmComment "[#;!|].*" contains=asmTodo,@Spell " Side effects of this include: " - When `;' is used to separate statements on the same line (many targets @@ -96,35 +115,50 @@ syn match asmMacro "\.endm" " with '.', including the GCC auto-generated '.L' labels. syn match asmDirective "\.[A-Za-z][0-9A-Za-z-_]*" - syn case match " Define the default highlighting. " Only when an item doesn't have highlighting yet " The default methods for highlighting. Can be overridden later -hi def link asmSection Special -hi def link asmLabel Label -hi def link asmComment Comment -hi def link asmTodo Todo +hi def link asmSection Special +hi def link asmLabel Label +hi def link asmComment Comment +hi def link asmTodo Todo hi def link asmDirective Statement -hi def link asmInclude Include -hi def link asmCond PreCondit -hi def link asmMacro Macro +hi def link asmInclude Include +hi def link asmCond PreCondit +hi def link asmMacro Macro + +if exists('g:asm_legacy_syntax_groups') + hi def link hexNumber Number + hi def link decNumber Number + hi def link octNumber Number + hi def link binNumber Number + hi def link asmHexadecimal hexNumber + hi def link asmDecimal decNumber + hi def link asmOctal octNumber + hi def link asmBinary binNumber +else + hi def link asmHexadecimal Number + hi def link asmDecimal Number + hi def link asmOctal Number + hi def link asmBinary Number +endif +hi def link asmFloat Float -hi def link hexNumber Number -hi def link decNumber Number -hi def link octNumber Number -hi def link binNumber Number +hi def link asmString String +hi def link asmStringEscape Special +hi def link asmCharacter Character +hi def link asmCharacterEscape Special hi def link asmIdentifier Identifier -hi def link asmType Type - +hi def link asmType Type let b:current_syntax = "asm" let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/runtime/syntax/asmh8300.vim b/runtime/syntax/asmh8300.vim index 8560fb7ae4..2eabb7e4e5 100644 --- a/runtime/syntax/asmh8300.vim +++ b/runtime/syntax/asmh8300.vim @@ -1,19 +1,21 @@ " Vim syntax file -" Language: Hitachi H-8300h specific syntax for GNU Assembler -" Maintainer: Kevin Dahlhausen <kdahlhaus@yahoo.com> -" Last Change: 2002 Sep 19 +" Language: Hitachi H-8300h specific syntax for GNU Assembler +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Kevin Dahlhausen <kdahlhaus@yahoo.com> +" Last Change: 2020 Oct 31 -" quit when a syntax file was already loaded if exists("b:current_syntax") finish endif +runtime! syntax/asm.vim + syn case ignore -syn match asmDirective "\.h8300[h]*" +syn match asmDirective "\.h8300[hs]n\=" "h8300[h] registers -syn match asmReg "e\=r[0-7][lh]\=" +syn match asmRegister "e\=r\o[lh]\=" "h8300[h] opcodes - order is important! syn match asmOpcode "add\.[lbw]" @@ -37,32 +39,20 @@ syn match asmOpcode "sha[lr]\.[lbw]" syn match asmOpcode "shl[lr]\.[lbw]" syn match asmOpcode "sub\.[lbw]" syn match asmOpcode "xor\.[lbw]" -syn keyword asmOpcode "andc" "band" "bcc" "bclr" "bcs" "beq" "bf" "bge" "bgt" -syn keyword asmOpcode "bhi" "bhs" "biand" "bild" "bior" "bist" "bixor" "bmi" -syn keyword asmOpcode "bne" "bnot" "bnp" "bor" "bpl" "bpt" "bra" "brn" "bset" -syn keyword asmOpcode "bsr" "btst" "bst" "bt" "bvc" "bvs" "bxor" "cmp" "daa" -syn keyword asmOpcode "das" "eepmov" "eepmovw" "inc" "jmp" "jsr" "ldc" "movfpe" -syn keyword asmOpcode "movtpe" "mov" "nop" "orc" "rte" "rts" "sleep" "stc" -syn keyword asmOpcode "sub" "trapa" "xorc" - -syn case match - -" Read the general asm syntax -runtime! syntax/asm.vim - - -" Define the default highlighting. -" Only when an item doesn't have highlighting yet +syn keyword asmOpcode andc band bcc bclr bcs beq bf bge bgt +syn keyword asmOpcode bhi bhs biand bild bior bist bixor bmi +syn keyword asmOpcode bne bnot bnp bor bpl bpt bra brn bset +syn keyword asmOpcode bsr btst bst bt bvc bvs bxor cmp daa +syn keyword asmOpcode das eepmov eepmovw inc jmp jsr ldc movfpe +syn keyword asmOpcode movtpe mov nop orc rte rts sleep stc +syn keyword asmOpcode sub trapa xorc -hi def link asmOpcode Statement -hi def link asmRegister Identifier - -" My default-color overrides: -"hi asmOpcode ctermfg=yellow -"hi asmReg ctermfg=lightmagenta +syn case match +hi def link asmOpcode Statement +hi def link asmRegister Identifier let b:current_syntax = "asmh8300" -" vim: ts=8 +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/runtime/syntax/asterisk.vim b/runtime/syntax/asterisk.vim index 4a922d3f11..4b3d246e39 100644 --- a/runtime/syntax/asterisk.vim +++ b/runtime/syntax/asterisk.vim @@ -19,7 +19,7 @@ syn match asteriskComment ";.*" contains=asteriskTodo syn match asteriskContext "\[.\{-}\]" syn match asteriskExten "^\s*\zsexten\s*=>\?\s*[^,]\+\ze," contains=asteriskPattern nextgroup=asteriskPriority syn match asteriskExten "^\s*\zssame\s*=>\?\s*\ze" nextgroup=asteriskPriority -syn match asteriskExten "^\s*\(register\|channel\|ignorepat\|include\|\(no\)\?load\)\s*=>\?" +syn match asteriskExten "^\s*\(register\|channel\|ignorepat\|include\|l\?e\?switch\|\(no\)\?load\)\s*=>\?" syn match asteriskPattern "_\(\[[[:alnum:]#*\-]\+\]\|[[:alnum:]#*]\)*\.\?" contained syn match asteriskPattern "[^A-Za-z0-9,]\zs[[:alnum:]#*]\+\ze" contained syn match asteriskApp ",\zs[a-zA-Z]\+\ze$" @@ -39,7 +39,7 @@ syn match asteriskVarLen "\${_\{0,2}[[:alpha:]][[:alnum:]_]*(.*)} syn match asteriskVarLen "(\zs[[:alpha:]][[:alnum:]_]*(.\{-})\ze=" contains=asteriskVar,asteriskVarLen,asteriskExp syn match asteriskExp "\$\[.\{-}\]" contains=asteriskVar,asteriskVarLen,asteriskExp syn match asteriskCodecsPermit "^\s*\(allow\|disallow\)\s*=\s*.*$" contains=asteriskCodecs -syn match asteriskCodecs "\(g723\|gsm\|ulaw\|alaw\|g726\|adpcm\|slin\|lpc10\|g729\|speex\|ilbc\|all\s*$\)" +syn match asteriskCodecs "\(vp9\|vp8\|h264\|h263p\|h263\|h261\|jpeg\|opus\|g722\|g723\|gsm\|ulaw\|alaw\|g719\|g726\|g726aal2\|siren7\|siren14\|adpcm\|slin\|lpc10\|g729\|speex\|ilbc\|wav\|all\s*$\)" syn match asteriskError "^\(type\|auth\|permit\|deny\|bindaddr\|host\)\s*=.*$" syn match asteriskType "^\zstype=\ze\<\(peer\|user\|friend\)\>$" contains=asteriskTypeType syn match asteriskTypeType "\<\(peer\|user\|friend\)\>" contained diff --git a/runtime/syntax/awk.vim b/runtime/syntax/awk.vim index 7c0682ce9f..3082c1cb5c 100644 --- a/runtime/syntax/awk.vim +++ b/runtime/syntax/awk.vim @@ -1,7 +1,8 @@ " Vim syntax file -" Language: awk, nawk, gawk, mawk -" Maintainer: Antonio Colombo <azc100@gmail.com> -" Last Change: 2016 Sep 05 +" Language: awk, nawk, gawk, mawk +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Antonio Colombo <azc100@gmail.com> +" Last Change: 2020 Aug 18 " AWK ref. is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger " The AWK Programming Language, Addison-Wesley, 1988 @@ -9,7 +10,7 @@ " GAWK ref. is: Arnold D. Robbins " Effective AWK Programming, Third Edition, O'Reilly, 2001 " Effective AWK Programming, Fourth Edition, O'Reilly, 2015 -" (also available and updated with the gawk source distribution) +" (up-to-date version available with the gawk source distribution) " MAWK is a "new awk" meaning it implements AWK ref. " mawk conforms to the Posix 1003.2 (draft 11.3) @@ -27,20 +28,27 @@ endif let s:cpo_save = &cpo set cpo&vim +syn iskeyword @,48-57,_,192-255,@-@ + " A bunch of useful Awk keywords " AWK ref. p. 188 syn keyword awkStatement break continue delete exit syn keyword awkStatement function getline next syn keyword awkStatement print printf return " GAWK ref. Chapter 7-9 -syn keyword awkStatement switch nextfile +syn keyword awkStatement case default switch nextfile syn keyword awkStatement func +" GAWK ref. Chapter 2.7, Including Other Files into Your Program +" GAWK ref. Chapter 2.8, Loading Dynamic Extensions into Your Program +" GAWK ref. Chapter 15, Namespaces +" Directives +syn keyword awkStatement @include @load @namespace " " GAWK ref. Chapter 9, Functions " Numeric Functions -syn keyword awkFunction atan2 cos exp int intdiv log rand sin sqrt srand +syn keyword awkFunction atan2 cos exp int log rand sin sqrt srand " String Manipulation Functions -syn keyword awkFunction asort asort1 gensub gsub index length match +syn keyword awkFunction asort asorti gensub gsub index length match syn keyword awkFunction patsplit split sprintf strtonum sub substr syn keyword awkFunction tolower toupper " Input Output Functions @@ -49,7 +57,7 @@ syn keyword awkFunction close fflush system syn keyword awkFunction mktime strftime systime " Bit Manipulation Functions syn keyword awkFunction and compl lshift or rshift xor -" Getting Type Functions +" Getting Type Information Functions syn keyword awkFunction isarray typeof " String-Translation Functions syn keyword awkFunction bindtextdomain dcgettext dcngetext diff --git a/runtime/syntax/bash.vim b/runtime/syntax/bash.vim new file mode 100644 index 0000000000..75ab99938e --- /dev/null +++ b/runtime/syntax/bash.vim @@ -0,0 +1,20 @@ +" Vim syntax file +" Language: bash +" Maintainer: Bram +" Last Change: 2019 Sep 27 + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" The actual syntax is in sh.vim and controlled by buffer-local variables. +unlet! b:is_sh +unlet! b:is_kornshell +let b:is_bash = 1 + +runtime! syntax/sh.vim + +let b:current_syntax = 'bash' + +" vim: ts=8 diff --git a/runtime/syntax/basic.vim b/runtime/syntax/basic.vim index 488ddc0ec4..ad9450b3b8 100644 --- a/runtime/syntax/basic.vim +++ b/runtime/syntax/basic.vim @@ -1,14 +1,16 @@ " Vim syntax file -" Language: BASIC -" Maintainer: Allan Kelly <allan@fruitloaf.co.uk> -" Last Change: 2011 Dec 25 by Thilo Six +" Language: BASIC +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Allan Kelly <allan@fruitloaf.co.uk> +" Contributors: Thilo Six +" Last Change: 2015 Jan 10 " First version based on Micro$soft QBASIC circa 1989, as documented in " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989. " This syntax file not a complete implementation yet. Send suggestions to the " maintainer. -" quit when a syntax file was already loaded +" Prelude {{{1 if exists("b:current_syntax") finish endif @@ -16,7 +18,7 @@ endif let s:cpo_save = &cpo set cpo&vim -" A bunch of useful BASIC keywords +" Keywords {{{1 syn keyword basicStatement BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave syn keyword basicStatement CALL call Call ABSOLUTE absolute Absolute syn keyword basicStatement CHAIN chain Chain CHDIR chdir Chdir @@ -116,32 +118,39 @@ syn keyword basicFunction RIGHT$ right$ Right$ RTRIM$ rtrim$ Rtrim$ syn keyword basicFunction SPACE$ space$ Space$ STR$ str$ Str$ syn keyword basicFunction STRING$ string$ String$ TIME$ time$ Time$ syn keyword basicFunction UCASE$ ucase$ Ucase$ VARPTR$ varptr$ Varptr$ -syn keyword basicTodo contained TODO -"integer number, or floating point number without a dot. +" Numbers {{{1 +" Integer number, or floating point number without a dot. syn match basicNumber "\<\d\+\>" -"floating point number, with dot +" Floating point number, with dot syn match basicNumber "\<\d\+\.\d*\>" -"floating point number, starting with a dot +" Floating point number, starting with a dot syn match basicNumber "\.\d\+\>" -" String and Character contstants -syn match basicSpecial contained "\\\d\d\d\|\\." -syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial +" String and Character constants {{{1 +syn match basicSpecial "\\\d\d\d\|\\." contained +syn region basicString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=basicSpecial -syn region basicComment start="REM" end="$" contains=basicTodo -syn region basicComment start="^[ \t]*'" end="$" contains=basicTodo +" Line numbers {{{1 syn region basicLineNumber start="^\d" end="\s" -syn match basicTypeSpecifier "[a-zA-Z0-9][\$%&!#]"ms=s+1 + +" Data-type suffixes {{{1 +syn match basicTypeSpecifier "[a-zA-Z0-9][$%&!#]"ms=s+1 " Used with OPEN statement syn match basicFilenumber "#\d\+" -"syn sync ccomment basicComment + +" Mathematical operators {{{1 " syn match basicMathsOperator "[<>+\*^/\\=-]" -syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR" +syn match basicMathsOperator "-\|=\|[:<>+\*^/\\]\|AND\|OR" -" Define the default highlighting. -" Only when an item doesn't have highlighting yet +" Comments {{{1 +syn keyword basicTodo TODO FIXME XXX NOTE contained +syn region basicComment start="^\s*\zsREM\>" start="\%(:\s*\)\@<=REM\>" end="$" contains=basicTodo +syn region basicComment start="'" end="$" contains=basicTodo +"syn sync ccomment basicComment + +" Default Highlighting {{{1 hi def link basicLabel Label hi def link basicConditional Conditional hi def link basicRepeat Repeat @@ -150,17 +159,18 @@ hi def link basicNumber Number hi def link basicError Error hi def link basicStatement Statement hi def link basicString String -hi def link basicComment Comment -hi def link basicSpecial Special +hi def link basicComment Comment +hi def link basicSpecial Special hi def link basicTodo Todo -hi def link basicFunction Identifier -hi def link basicTypeSpecifier Type -hi def link basicFilenumber basicTypeSpecifier +hi def link basicFunction Identifier +hi def link basicTypeSpecifier Type +hi def link basicFilenumber basicTypeSpecifier "hi basicMathsOperator term=bold cterm=bold gui=bold - +" Postscript {{{1 let b:current_syntax = "basic" let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/syntax/bindzone.vim b/runtime/syntax/bindzone.vim index df3c789d98..bb790bb75c 100644 --- a/runtime/syntax/bindzone.vim +++ b/runtime/syntax/bindzone.vim @@ -32,8 +32,8 @@ syn match zoneDomain contained /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\ syn match zoneSpecial contained /^[@*.]\s/ syn match zoneTTL contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite -syn keyword zoneClass contained IN CHAOS nextgroup=zoneRRType,zoneTTL skipwhite -syn keyword zoneRRType contained A AAAA CNAME DNAME HINFO MX NS PTR SOA SRV TXT SPF nextgroup=zoneRData skipwhite +syn keyword zoneClass contained IN CHAOS CH HS HESIOD nextgroup=zoneRRType,zoneTTL skipwhite +syn keyword zoneRRType contained A AAAA CERT CNAME DNAME DNSKEY DS HINFO LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RP RRSIG SSHFP SOA SPF SRV TLSA TXT nextgroup=zoneRData skipwhite syn match zoneRData contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown syn match zoneIPAddr contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/ diff --git a/runtime/syntax/bsdl.vim b/runtime/syntax/bsdl.vim new file mode 100644 index 0000000000..75c69558e5 --- /dev/null +++ b/runtime/syntax/bsdl.vim @@ -0,0 +1,17 @@ +" Vim syntax file +" Language: Boundary Scan Description Language (BSDL) +" Maintainer: Daniel Kho <daniel.kho@logik.haus> +" Last Changed: 2020 Mar 19 by Daniel Kho + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read in VHDL syntax files +runtime! syntax/vhdl.vim +unlet b:current_syntax + +let b:current_syntax = "bsdl" + +" vim: ts=8 diff --git a/runtime/syntax/c.vim b/runtime/syntax/c.vim index 2a14ae0c46..d07aaf2658 100644 --- a/runtime/syntax/c.vim +++ b/runtime/syntax/c.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: C " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2019 Apr 23 +" Last Change: 2021 Jan 11 " Quit when a (custom) syntax file was already loaded if exists("b:current_syntax") @@ -13,6 +13,9 @@ set cpo&vim let s:ft = matchstr(&ft, '^\([^.]\)\+') +" check if this was included from cpp.vim +let s:in_cpp_family = exists("b:filetype_in_cpp_family") + " Optional embedded Autodoc parsing " To enable it add: let g:c_autodoc = 1 " to your .vimrc @@ -55,7 +58,7 @@ if !exists("c_no_cformat") endif " cCppString: same as cString, but ends at end of line -if s:ft ==# "cpp" && !exists("cpp_no_cpp11") && !exists("c_no_cformat") +if s:in_cpp_family && !exists("cpp_no_cpp11") && !exists("c_no_cformat") " ISO C++11 syn region cString start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend syn region cCppString start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell @@ -87,7 +90,7 @@ syn match cSpecialCharacter display "L\='\\\o\{1,3}'" syn match cSpecialCharacter display "'\\x\x\{1,2}'" syn match cSpecialCharacter display "L'\\x\x\+'" -if (s:ft ==# "c" && !exists("c_no_c11")) || (s:ft ==# "cpp" && !exists("cpp_no_cpp11")) +if (s:ft ==# "c" && !exists("c_no_c11")) || (s:in_cpp_family && !exists("cpp_no_cpp11")) " ISO C11 or ISO C++ 11 if exists("c_no_cformat") syn region cString start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend @@ -130,21 +133,21 @@ endif " But avoid matching <::. syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom if exists("c_no_curly_error") - if s:ft ==# 'cpp' && !exists("cpp_no_cpp11") + if s:in_cpp_family && !exists("cpp_no_cpp11") syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,@cStringGroup,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn match cParenError display ")" syn match cErrInParen display contained "^^<%\|^%>" else - syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup,@Spell + syn region cParen transparent start='(' end=')' contains=ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell syn match cParenError display ")" syn match cErrInParen display contained "^[{}]\|^<%\|^%>" endif elseif exists("c_no_bracket_error") - if s:ft ==# 'cpp' && !exists("cpp_no_cpp11") + if s:in_cpp_family && !exists("cpp_no_cpp11") syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,@cStringGroup,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell @@ -158,7 +161,7 @@ elseif exists("c_no_bracket_error") syn match cErrInParen display contained "[{}]\|<%\|%>" endif else - if s:ft ==# 'cpp' && !exists("cpp_no_cpp11") + if s:in_cpp_family && !exists("cpp_no_cpp11") syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup,@Spell " cCppParen: same as cParen but ends at end-of-line; used in cDefine syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell @@ -272,12 +275,13 @@ if exists("c_gnu") syn keyword cType __label__ __complex__ __volatile__ endif -syn keyword cStructure struct union enum typedef +syn keyword cTypedef typedef +syn keyword cStructure struct union enum syn keyword cStorageClass static register auto volatile extern const if exists("c_gnu") syn keyword cStorageClass inline __attribute__ endif -if !exists("c_no_c99") && s:ft !=# 'cpp' +if !exists("c_no_c99") && !s:in_cpp_family syn keyword cStorageClass inline restrict endif if !exists("c_no_c11") @@ -311,8 +315,7 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") if exists("c_gnu") syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ __func__ endif - syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ - syn keyword cConstant __STDC_VERSION__ + syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__ __STDC_VERSION__ __STDC_HOSTED__ syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN @@ -346,6 +349,8 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu") syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF FOPEN_MAX FILENAME_MAX L_tmpnam syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET TMP_MAX stderr stdin stdout EXIT_FAILURE EXIT_SUCCESS RAND_MAX + " used in assert.h + syn keyword cConstant NDEBUG " POSIX 2001 syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG SIGVTALRM SIGXCPU SIGXFSZ " non-POSIX signals @@ -418,7 +423,7 @@ endif syn cluster cLabelGroup contains=cUserLabel syn match cUserCont display "^\s*\zs\I\i*\s*:$" contains=@cLabelGroup syn match cUserCont display ";\s*\zs\I\i*\s*:$" contains=@cLabelGroup -if s:ft ==# 'cpp' +if s:in_cpp_family syn match cUserCont display "^\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup syn match cUserCont display ";\s*\zs\%(class\|struct\|enum\)\@!\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup else @@ -475,6 +480,7 @@ hi def link cSpecialError cError hi def link cCurlyError cError hi def link cOperator Operator hi def link cStructure Structure +hi def link cTypedef Structure hi def link cStorageClass StorageClass hi def link cInclude Include hi def link cPreProc PreProc diff --git a/runtime/syntax/clojure.vim b/runtime/syntax/clojure.vim index ffdd5c2ab0..1037967d1c 100644 --- a/runtime/syntax/clojure.vim +++ b/runtime/syntax/clojure.vim @@ -1,15 +1,13 @@ -" Vim syntax file -" Language: Clojure -" Authors: Toralf Wittner <toralf.wittner@gmail.com> -" modified by Meikel Brandmeyer <mb@kotka.de> -" URL: http://kotka.de/projects/clojure/vimclojure.html -" -" Contributors: Joel Holdbrooks <cjholdbrooks@gmail.com> (Regexp support, bug fixes) -" -" Maintainer: Sung Pae <self@sungpae.com> -" URL: https://github.com/guns/vim-clojure-static -" License: Same as Vim -" Last Change: 18 July 2016 +" Vim indent file +" Language: Clojure +" Maintainer: Alex Vear <av@axvr.io> +" Former Maintainers: Sung Pae <self@sungpae.com> +" Meikel Brandmeyer <mb@kotka.de> +" Toralf Wittner <toralf.wittner@gmail.com> +" Contributors: Joel Holdbrooks <cjholdbrooks@gmail.com> (Regexp support, bug fixes) +" URL: https://github.com/clojure-vim/clojure.vim +" License: Vim (see :h license) +" Last Change: 2021-02-13 if exists("b:current_syntax") finish @@ -23,19 +21,19 @@ if has("folding") && exists("g:clojure_fold") && g:clojure_fold > 0 endif " -*- KEYWORDS -*- -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj -" Clojure version 1.8.0 +" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj +" Clojure version 1.10.2 let s:clojure_syntax_keywords = { \ 'clojureBoolean': ["false","true"] \ , 'clojureCond': ["case","clojure.core/case","clojure.core/cond","clojure.core/cond->","clojure.core/cond->>","clojure.core/condp","clojure.core/if-let","clojure.core/if-not","clojure.core/if-some","clojure.core/when","clojure.core/when-first","clojure.core/when-let","clojure.core/when-not","clojure.core/when-some","cond","cond->","cond->>","condp","if-let","if-not","if-some","when","when-first","when-let","when-not","when-some"] \ , 'clojureConstant': ["nil"] \ , 'clojureDefine': ["clojure.core/definline","clojure.core/definterface","clojure.core/defmacro","clojure.core/defmethod","clojure.core/defmulti","clojure.core/defn","clojure.core/defn-","clojure.core/defonce","clojure.core/defprotocol","clojure.core/defrecord","clojure.core/defstruct","clojure.core/deftype","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype"] \ , 'clojureException': ["catch","finally","throw","try"] - \ , 'clojureFunc': ["*","*'","+","+'","-","-'","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","/","<","<=","=","==",">",">=","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","ancestors","apply","array-map","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn*","bound?","butlast","byte","byte-array","bytes","cast","cat","char","char-array","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","clojure.core/*","clojure.core/*'","clojure.core/+","clojure.core/+'","clojure.core/-","clojure.core/-'","clojure.core/->ArrayChunk","clojure.core/->Eduction","clojure.core/->Vec","clojure.core/->VecNode","clojure.core/->VecSeq","clojure.core/-cache-protocol-fn","clojure.core/-reset-methods","clojure.core//","clojure.core/<","clojure.core/<=","clojure.core/=","clojure.core/==","clojure.core/>","clojure.core/>=","clojure.core/Throwable->map","clojure.core/accessor","clojure.core/aclone","clojure.core/add-classpath","clojure.core/add-watch","clojure.core/agent","clojure.core/agent-error","clojure.core/agent-errors","clojure.core/aget","clojure.core/alength","clojure.core/alias","clojure.core/all-ns","clojure.core/alter","clojure.core/alter-meta!","clojure.core/alter-var-root","clojure.core/ancestors","clojure.core/apply","clojure.core/array-map","clojure.core/aset","clojure.core/aset-boolean","clojure.core/aset-byte","clojure.core/aset-char","clojure.core/aset-double","clojure.core/aset-float","clojure.core/aset-int","clojure.core/aset-long","clojure.core/aset-short","clojure.core/assoc","clojure.core/assoc!","clojure.core/assoc-in","clojure.core/associative?","clojure.core/atom","clojure.core/await","clojure.core/await-for","clojure.core/await1","clojure.core/bases","clojure.core/bean","clojure.core/bigdec","clojure.core/bigint","clojure.core/biginteger","clojure.core/bit-and","clojure.core/bit-and-not","clojure.core/bit-clear","clojure.core/bit-flip","clojure.core/bit-not","clojure.core/bit-or","clojure.core/bit-set","clojure.core/bit-shift-left","clojure.core/bit-shift-right","clojure.core/bit-test","clojure.core/bit-xor","clojure.core/boolean","clojure.core/boolean-array","clojure.core/booleans","clojure.core/bound-fn*","clojure.core/bound?","clojure.core/butlast","clojure.core/byte","clojure.core/byte-array","clojure.core/bytes","clojure.core/cast","clojure.core/cat","clojure.core/char","clojure.core/char-array","clojure.core/char?","clojure.core/chars","clojure.core/chunk","clojure.core/chunk-append","clojure.core/chunk-buffer","clojure.core/chunk-cons","clojure.core/chunk-first","clojure.core/chunk-next","clojure.core/chunk-rest","clojure.core/chunked-seq?","clojure.core/class","clojure.core/class?","clojure.core/clear-agent-errors","clojure.core/clojure-version","clojure.core/coll?","clojure.core/commute","clojure.core/comp","clojure.core/comparator","clojure.core/compare","clojure.core/compare-and-set!","clojure.core/compile","clojure.core/complement","clojure.core/completing","clojure.core/concat","clojure.core/conj","clojure.core/conj!","clojure.core/cons","clojure.core/constantly","clojure.core/construct-proxy","clojure.core/contains?","clojure.core/count","clojure.core/counted?","clojure.core/create-ns","clojure.core/create-struct","clojure.core/cycle","clojure.core/dec","clojure.core/dec'","clojure.core/decimal?","clojure.core/dedupe","clojure.core/delay?","clojure.core/deliver","clojure.core/denominator","clojure.core/deref","clojure.core/derive","clojure.core/descendants","clojure.core/destructure","clojure.core/disj","clojure.core/disj!","clojure.core/dissoc","clojure.core/dissoc!","clojure.core/distinct","clojure.core/distinct?","clojure.core/doall","clojure.core/dorun","clojure.core/double","clojure.core/double-array","clojure.core/doubles","clojure.core/drop","clojure.core/drop-last","clojure.core/drop-while","clojure.core/eduction","clojure.core/empty","clojure.core/empty?","clojure.core/ensure","clojure.core/ensure-reduced","clojure.core/enumeration-seq","clojure.core/error-handler","clojure.core/error-mode","clojure.core/eval","clojure.core/even?","clojure.core/every-pred","clojure.core/every?","clojure.core/ex-data","clojure.core/ex-info","clojure.core/extend","clojure.core/extenders","clojure.core/extends?","clojure.core/false?","clojure.core/ffirst","clojure.core/file-seq","clojure.core/filter","clojure.core/filterv","clojure.core/find","clojure.core/find-keyword","clojure.core/find-ns","clojure.core/find-protocol-impl","clojure.core/find-protocol-method","clojure.core/find-var","clojure.core/first","clojure.core/flatten","clojure.core/float","clojure.core/float-array","clojure.core/float?","clojure.core/floats","clojure.core/flush","clojure.core/fn?","clojure.core/fnext","clojure.core/fnil","clojure.core/force","clojure.core/format","clojure.core/frequencies","clojure.core/future-call","clojure.core/future-cancel","clojure.core/future-cancelled?","clojure.core/future-done?","clojure.core/future?","clojure.core/gensym","clojure.core/get","clojure.core/get-in","clojure.core/get-method","clojure.core/get-proxy-class","clojure.core/get-thread-bindings","clojure.core/get-validator","clojure.core/group-by","clojure.core/hash","clojure.core/hash-combine","clojure.core/hash-map","clojure.core/hash-ordered-coll","clojure.core/hash-set","clojure.core/hash-unordered-coll","clojure.core/identical?","clojure.core/identity","clojure.core/ifn?","clojure.core/in-ns","clojure.core/inc","clojure.core/inc'","clojure.core/init-proxy","clojure.core/instance?","clojure.core/int","clojure.core/int-array","clojure.core/integer?","clojure.core/interleave","clojure.core/intern","clojure.core/interpose","clojure.core/into","clojure.core/into-array","clojure.core/ints","clojure.core/isa?","clojure.core/iterate","clojure.core/iterator-seq","clojure.core/juxt","clojure.core/keep","clojure.core/keep-indexed","clojure.core/key","clojure.core/keys","clojure.core/keyword","clojure.core/keyword?","clojure.core/last","clojure.core/line-seq","clojure.core/list","clojure.core/list*","clojure.core/list?","clojure.core/load","clojure.core/load-file","clojure.core/load-reader","clojure.core/load-string","clojure.core/loaded-libs","clojure.core/long","clojure.core/long-array","clojure.core/longs","clojure.core/macroexpand","clojure.core/macroexpand-1","clojure.core/make-array","clojure.core/make-hierarchy","clojure.core/map","clojure.core/map-entry?","clojure.core/map-indexed","clojure.core/map?","clojure.core/mapcat","clojure.core/mapv","clojure.core/max","clojure.core/max-key","clojure.core/memoize","clojure.core/merge","clojure.core/merge-with","clojure.core/meta","clojure.core/method-sig","clojure.core/methods","clojure.core/min","clojure.core/min-key","clojure.core/mix-collection-hash","clojure.core/mod","clojure.core/munge","clojure.core/name","clojure.core/namespace","clojure.core/namespace-munge","clojure.core/neg?","clojure.core/newline","clojure.core/next","clojure.core/nfirst","clojure.core/nil?","clojure.core/nnext","clojure.core/not","clojure.core/not-any?","clojure.core/not-empty","clojure.core/not-every?","clojure.core/not=","clojure.core/ns-aliases","clojure.core/ns-imports","clojure.core/ns-interns","clojure.core/ns-map","clojure.core/ns-name","clojure.core/ns-publics","clojure.core/ns-refers","clojure.core/ns-resolve","clojure.core/ns-unalias","clojure.core/ns-unmap","clojure.core/nth","clojure.core/nthnext","clojure.core/nthrest","clojure.core/num","clojure.core/number?","clojure.core/numerator","clojure.core/object-array","clojure.core/odd?","clojure.core/parents","clojure.core/partial","clojure.core/partition","clojure.core/partition-all","clojure.core/partition-by","clojure.core/pcalls","clojure.core/peek","clojure.core/persistent!","clojure.core/pmap","clojure.core/pop","clojure.core/pop!","clojure.core/pop-thread-bindings","clojure.core/pos?","clojure.core/pr","clojure.core/pr-str","clojure.core/prefer-method","clojure.core/prefers","clojure.core/print","clojure.core/print-ctor","clojure.core/print-dup","clojure.core/print-method","clojure.core/print-simple","clojure.core/print-str","clojure.core/printf","clojure.core/println","clojure.core/println-str","clojure.core/prn","clojure.core/prn-str","clojure.core/promise","clojure.core/proxy-call-with-super","clojure.core/proxy-mappings","clojure.core/proxy-name","clojure.core/push-thread-bindings","clojure.core/quot","clojure.core/rand","clojure.core/rand-int","clojure.core/rand-nth","clojure.core/random-sample","clojure.core/range","clojure.core/ratio?","clojure.core/rational?","clojure.core/rationalize","clojure.core/re-find","clojure.core/re-groups","clojure.core/re-matcher","clojure.core/re-matches","clojure.core/re-pattern","clojure.core/re-seq","clojure.core/read","clojure.core/read-line","clojure.core/read-string","clojure.core/reader-conditional","clojure.core/reader-conditional?","clojure.core/realized?","clojure.core/record?","clojure.core/reduce","clojure.core/reduce-kv","clojure.core/reduced","clojure.core/reduced?","clojure.core/reductions","clojure.core/ref","clojure.core/ref-history-count","clojure.core/ref-max-history","clojure.core/ref-min-history","clojure.core/ref-set","clojure.core/refer","clojure.core/release-pending-sends","clojure.core/rem","clojure.core/remove","clojure.core/remove-all-methods","clojure.core/remove-method","clojure.core/remove-ns","clojure.core/remove-watch","clojure.core/repeat","clojure.core/repeatedly","clojure.core/replace","clojure.core/replicate","clojure.core/require","clojure.core/reset!","clojure.core/reset-meta!","clojure.core/resolve","clojure.core/rest","clojure.core/restart-agent","clojure.core/resultset-seq","clojure.core/reverse","clojure.core/reversible?","clojure.core/rseq","clojure.core/rsubseq","clojure.core/run!","clojure.core/satisfies?","clojure.core/second","clojure.core/select-keys","clojure.core/send","clojure.core/send-off","clojure.core/send-via","clojure.core/seq","clojure.core/seq?","clojure.core/seque","clojure.core/sequence","clojure.core/sequential?","clojure.core/set","clojure.core/set-agent-send-executor!","clojure.core/set-agent-send-off-executor!","clojure.core/set-error-handler!","clojure.core/set-error-mode!","clojure.core/set-validator!","clojure.core/set?","clojure.core/short","clojure.core/short-array","clojure.core/shorts","clojure.core/shuffle","clojure.core/shutdown-agents","clojure.core/slurp","clojure.core/some","clojure.core/some-fn","clojure.core/some?","clojure.core/sort","clojure.core/sort-by","clojure.core/sorted-map","clojure.core/sorted-map-by","clojure.core/sorted-set","clojure.core/sorted-set-by","clojure.core/sorted?","clojure.core/special-symbol?","clojure.core/spit","clojure.core/split-at","clojure.core/split-with","clojure.core/str","clojure.core/string?","clojure.core/struct","clojure.core/struct-map","clojure.core/subs","clojure.core/subseq","clojure.core/subvec","clojure.core/supers","clojure.core/swap!","clojure.core/symbol","clojure.core/symbol?","clojure.core/tagged-literal","clojure.core/tagged-literal?","clojure.core/take","clojure.core/take-last","clojure.core/take-nth","clojure.core/take-while","clojure.core/test","clojure.core/the-ns","clojure.core/thread-bound?","clojure.core/to-array","clojure.core/to-array-2d","clojure.core/trampoline","clojure.core/transduce","clojure.core/transient","clojure.core/tree-seq","clojure.core/true?","clojure.core/type","clojure.core/unchecked-add","clojure.core/unchecked-add-int","clojure.core/unchecked-byte","clojure.core/unchecked-char","clojure.core/unchecked-dec","clojure.core/unchecked-dec-int","clojure.core/unchecked-divide-int","clojure.core/unchecked-double","clojure.core/unchecked-float","clojure.core/unchecked-inc","clojure.core/unchecked-inc-int","clojure.core/unchecked-int","clojure.core/unchecked-long","clojure.core/unchecked-multiply","clojure.core/unchecked-multiply-int","clojure.core/unchecked-negate","clojure.core/unchecked-negate-int","clojure.core/unchecked-remainder-int","clojure.core/unchecked-short","clojure.core/unchecked-subtract","clojure.core/unchecked-subtract-int","clojure.core/underive","clojure.core/unreduced","clojure.core/unsigned-bit-shift-right","clojure.core/update","clojure.core/update-in","clojure.core/update-proxy","clojure.core/use","clojure.core/val","clojure.core/vals","clojure.core/var-get","clojure.core/var-set","clojure.core/var?","clojure.core/vary-meta","clojure.core/vec","clojure.core/vector","clojure.core/vector-of","clojure.core/vector?","clojure.core/volatile!","clojure.core/volatile?","clojure.core/vreset!","clojure.core/with-bindings*","clojure.core/with-meta","clojure.core/with-redefs-fn","clojure.core/xml-seq","clojure.core/zero?","clojure.core/zipmap","coll?","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","dedupe","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","double","double-array","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn?","fnext","fnil","force","format","frequencies","future-call","future-cancel","future-cancelled?","future-done?","future?","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","identical?","identity","ifn?","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","long","long-array","longs","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy-call-with-super","proxy-mappings","proxy-name","push-thread-bindings","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","use","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","with-bindings*","with-meta","with-redefs-fn","xml-seq","zero?","zipmap"] + \ , 'clojureFunc': ["*","*'","+","+'","-","-'","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","/","<","<=","=","==",">",">=","PrintWriter-on","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-tap","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","ancestors","any?","apply","array-map","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case-fallthrough-err-impl","cast","cat","char","char-array","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","clojure.core/*","clojure.core/*'","clojure.core/+","clojure.core/+'","clojure.core/-","clojure.core/-'","clojure.core/->ArrayChunk","clojure.core/->Eduction","clojure.core/->Vec","clojure.core/->VecNode","clojure.core/->VecSeq","clojure.core/-cache-protocol-fn","clojure.core/-reset-methods","clojure.core//","clojure.core/<","clojure.core/<=","clojure.core/=","clojure.core/==","clojure.core/>","clojure.core/>=","clojure.core/PrintWriter-on","clojure.core/StackTraceElement->vec","clojure.core/Throwable->map","clojure.core/accessor","clojure.core/aclone","clojure.core/add-classpath","clojure.core/add-tap","clojure.core/add-watch","clojure.core/agent","clojure.core/agent-error","clojure.core/agent-errors","clojure.core/aget","clojure.core/alength","clojure.core/alias","clojure.core/all-ns","clojure.core/alter","clojure.core/alter-meta!","clojure.core/alter-var-root","clojure.core/ancestors","clojure.core/any?","clojure.core/apply","clojure.core/array-map","clojure.core/aset","clojure.core/aset-boolean","clojure.core/aset-byte","clojure.core/aset-char","clojure.core/aset-double","clojure.core/aset-float","clojure.core/aset-int","clojure.core/aset-long","clojure.core/aset-short","clojure.core/assoc","clojure.core/assoc!","clojure.core/assoc-in","clojure.core/associative?","clojure.core/atom","clojure.core/await","clojure.core/await-for","clojure.core/await1","clojure.core/bases","clojure.core/bean","clojure.core/bigdec","clojure.core/bigint","clojure.core/biginteger","clojure.core/bit-and","clojure.core/bit-and-not","clojure.core/bit-clear","clojure.core/bit-flip","clojure.core/bit-not","clojure.core/bit-or","clojure.core/bit-set","clojure.core/bit-shift-left","clojure.core/bit-shift-right","clojure.core/bit-test","clojure.core/bit-xor","clojure.core/boolean","clojure.core/boolean-array","clojure.core/boolean?","clojure.core/booleans","clojure.core/bound-fn*","clojure.core/bound?","clojure.core/bounded-count","clojure.core/butlast","clojure.core/byte","clojure.core/byte-array","clojure.core/bytes","clojure.core/bytes?","clojure.core/case-fallthrough-err-impl","clojure.core/cast","clojure.core/cat","clojure.core/char","clojure.core/char-array","clojure.core/char?","clojure.core/chars","clojure.core/chunk","clojure.core/chunk-append","clojure.core/chunk-buffer","clojure.core/chunk-cons","clojure.core/chunk-first","clojure.core/chunk-next","clojure.core/chunk-rest","clojure.core/chunked-seq?","clojure.core/class","clojure.core/class?","clojure.core/clear-agent-errors","clojure.core/clojure-version","clojure.core/coll?","clojure.core/commute","clojure.core/comp","clojure.core/comparator","clojure.core/compare","clojure.core/compare-and-set!","clojure.core/compile","clojure.core/complement","clojure.core/completing","clojure.core/concat","clojure.core/conj","clojure.core/conj!","clojure.core/cons","clojure.core/constantly","clojure.core/construct-proxy","clojure.core/contains?","clojure.core/count","clojure.core/counted?","clojure.core/create-ns","clojure.core/create-struct","clojure.core/cycle","clojure.core/dec","clojure.core/dec'","clojure.core/decimal?","clojure.core/dedupe","clojure.core/delay?","clojure.core/deliver","clojure.core/denominator","clojure.core/deref","clojure.core/derive","clojure.core/descendants","clojure.core/destructure","clojure.core/disj","clojure.core/disj!","clojure.core/dissoc","clojure.core/dissoc!","clojure.core/distinct","clojure.core/distinct?","clojure.core/doall","clojure.core/dorun","clojure.core/double","clojure.core/double-array","clojure.core/double?","clojure.core/doubles","clojure.core/drop","clojure.core/drop-last","clojure.core/drop-while","clojure.core/eduction","clojure.core/empty","clojure.core/empty?","clojure.core/ensure","clojure.core/ensure-reduced","clojure.core/enumeration-seq","clojure.core/error-handler","clojure.core/error-mode","clojure.core/eval","clojure.core/even?","clojure.core/every-pred","clojure.core/every?","clojure.core/ex-cause","clojure.core/ex-data","clojure.core/ex-info","clojure.core/ex-message","clojure.core/extend","clojure.core/extenders","clojure.core/extends?","clojure.core/false?","clojure.core/ffirst","clojure.core/file-seq","clojure.core/filter","clojure.core/filterv","clojure.core/find","clojure.core/find-keyword","clojure.core/find-ns","clojure.core/find-protocol-impl","clojure.core/find-protocol-method","clojure.core/find-var","clojure.core/first","clojure.core/flatten","clojure.core/float","clojure.core/float-array","clojure.core/float?","clojure.core/floats","clojure.core/flush","clojure.core/fn?","clojure.core/fnext","clojure.core/fnil","clojure.core/force","clojure.core/format","clojure.core/frequencies","clojure.core/future-call","clojure.core/future-cancel","clojure.core/future-cancelled?","clojure.core/future-done?","clojure.core/future?","clojure.core/gensym","clojure.core/get","clojure.core/get-in","clojure.core/get-method","clojure.core/get-proxy-class","clojure.core/get-thread-bindings","clojure.core/get-validator","clojure.core/group-by","clojure.core/halt-when","clojure.core/hash","clojure.core/hash-combine","clojure.core/hash-map","clojure.core/hash-ordered-coll","clojure.core/hash-set","clojure.core/hash-unordered-coll","clojure.core/ident?","clojure.core/identical?","clojure.core/identity","clojure.core/ifn?","clojure.core/in-ns","clojure.core/inc","clojure.core/inc'","clojure.core/indexed?","clojure.core/init-proxy","clojure.core/inst-ms","clojure.core/inst-ms*","clojure.core/inst?","clojure.core/instance?","clojure.core/int","clojure.core/int-array","clojure.core/int?","clojure.core/integer?","clojure.core/interleave","clojure.core/intern","clojure.core/interpose","clojure.core/into","clojure.core/into-array","clojure.core/ints","clojure.core/isa?","clojure.core/iterate","clojure.core/iterator-seq","clojure.core/juxt","clojure.core/keep","clojure.core/keep-indexed","clojure.core/key","clojure.core/keys","clojure.core/keyword","clojure.core/keyword?","clojure.core/last","clojure.core/line-seq","clojure.core/list","clojure.core/list*","clojure.core/list?","clojure.core/load","clojure.core/load-file","clojure.core/load-reader","clojure.core/load-string","clojure.core/loaded-libs","clojure.core/long","clojure.core/long-array","clojure.core/longs","clojure.core/macroexpand","clojure.core/macroexpand-1","clojure.core/make-array","clojure.core/make-hierarchy","clojure.core/map","clojure.core/map-entry?","clojure.core/map-indexed","clojure.core/map?","clojure.core/mapcat","clojure.core/mapv","clojure.core/max","clojure.core/max-key","clojure.core/memoize","clojure.core/merge","clojure.core/merge-with","clojure.core/meta","clojure.core/method-sig","clojure.core/methods","clojure.core/min","clojure.core/min-key","clojure.core/mix-collection-hash","clojure.core/mod","clojure.core/munge","clojure.core/name","clojure.core/namespace","clojure.core/namespace-munge","clojure.core/nat-int?","clojure.core/neg-int?","clojure.core/neg?","clojure.core/newline","clojure.core/next","clojure.core/nfirst","clojure.core/nil?","clojure.core/nnext","clojure.core/not","clojure.core/not-any?","clojure.core/not-empty","clojure.core/not-every?","clojure.core/not=","clojure.core/ns-aliases","clojure.core/ns-imports","clojure.core/ns-interns","clojure.core/ns-map","clojure.core/ns-name","clojure.core/ns-publics","clojure.core/ns-refers","clojure.core/ns-resolve","clojure.core/ns-unalias","clojure.core/ns-unmap","clojure.core/nth","clojure.core/nthnext","clojure.core/nthrest","clojure.core/num","clojure.core/number?","clojure.core/numerator","clojure.core/object-array","clojure.core/odd?","clojure.core/parents","clojure.core/partial","clojure.core/partition","clojure.core/partition-all","clojure.core/partition-by","clojure.core/pcalls","clojure.core/peek","clojure.core/persistent!","clojure.core/pmap","clojure.core/pop","clojure.core/pop!","clojure.core/pop-thread-bindings","clojure.core/pos-int?","clojure.core/pos?","clojure.core/pr","clojure.core/pr-str","clojure.core/prefer-method","clojure.core/prefers","clojure.core/print","clojure.core/print-ctor","clojure.core/print-dup","clojure.core/print-method","clojure.core/print-simple","clojure.core/print-str","clojure.core/printf","clojure.core/println","clojure.core/println-str","clojure.core/prn","clojure.core/prn-str","clojure.core/promise","clojure.core/proxy-call-with-super","clojure.core/proxy-mappings","clojure.core/proxy-name","clojure.core/push-thread-bindings","clojure.core/qualified-ident?","clojure.core/qualified-keyword?","clojure.core/qualified-symbol?","clojure.core/quot","clojure.core/rand","clojure.core/rand-int","clojure.core/rand-nth","clojure.core/random-sample","clojure.core/range","clojure.core/ratio?","clojure.core/rational?","clojure.core/rationalize","clojure.core/re-find","clojure.core/re-groups","clojure.core/re-matcher","clojure.core/re-matches","clojure.core/re-pattern","clojure.core/re-seq","clojure.core/read","clojure.core/read+string","clojure.core/read-line","clojure.core/read-string","clojure.core/reader-conditional","clojure.core/reader-conditional?","clojure.core/realized?","clojure.core/record?","clojure.core/reduce","clojure.core/reduce-kv","clojure.core/reduced","clojure.core/reduced?","clojure.core/reductions","clojure.core/ref","clojure.core/ref-history-count","clojure.core/ref-max-history","clojure.core/ref-min-history","clojure.core/ref-set","clojure.core/refer","clojure.core/release-pending-sends","clojure.core/rem","clojure.core/remove","clojure.core/remove-all-methods","clojure.core/remove-method","clojure.core/remove-ns","clojure.core/remove-tap","clojure.core/remove-watch","clojure.core/repeat","clojure.core/repeatedly","clojure.core/replace","clojure.core/replicate","clojure.core/require","clojure.core/requiring-resolve","clojure.core/reset!","clojure.core/reset-meta!","clojure.core/reset-vals!","clojure.core/resolve","clojure.core/rest","clojure.core/restart-agent","clojure.core/resultset-seq","clojure.core/reverse","clojure.core/reversible?","clojure.core/rseq","clojure.core/rsubseq","clojure.core/run!","clojure.core/satisfies?","clojure.core/second","clojure.core/select-keys","clojure.core/send","clojure.core/send-off","clojure.core/send-via","clojure.core/seq","clojure.core/seq?","clojure.core/seqable?","clojure.core/seque","clojure.core/sequence","clojure.core/sequential?","clojure.core/set","clojure.core/set-agent-send-executor!","clojure.core/set-agent-send-off-executor!","clojure.core/set-error-handler!","clojure.core/set-error-mode!","clojure.core/set-validator!","clojure.core/set?","clojure.core/short","clojure.core/short-array","clojure.core/shorts","clojure.core/shuffle","clojure.core/shutdown-agents","clojure.core/simple-ident?","clojure.core/simple-keyword?","clojure.core/simple-symbol?","clojure.core/slurp","clojure.core/some","clojure.core/some-fn","clojure.core/some?","clojure.core/sort","clojure.core/sort-by","clojure.core/sorted-map","clojure.core/sorted-map-by","clojure.core/sorted-set","clojure.core/sorted-set-by","clojure.core/sorted?","clojure.core/special-symbol?","clojure.core/spit","clojure.core/split-at","clojure.core/split-with","clojure.core/str","clojure.core/string?","clojure.core/struct","clojure.core/struct-map","clojure.core/subs","clojure.core/subseq","clojure.core/subvec","clojure.core/supers","clojure.core/swap!","clojure.core/swap-vals!","clojure.core/symbol","clojure.core/symbol?","clojure.core/tagged-literal","clojure.core/tagged-literal?","clojure.core/take","clojure.core/take-last","clojure.core/take-nth","clojure.core/take-while","clojure.core/tap>","clojure.core/test","clojure.core/the-ns","clojure.core/thread-bound?","clojure.core/to-array","clojure.core/to-array-2d","clojure.core/trampoline","clojure.core/transduce","clojure.core/transient","clojure.core/tree-seq","clojure.core/true?","clojure.core/type","clojure.core/unchecked-add","clojure.core/unchecked-add-int","clojure.core/unchecked-byte","clojure.core/unchecked-char","clojure.core/unchecked-dec","clojure.core/unchecked-dec-int","clojure.core/unchecked-divide-int","clojure.core/unchecked-double","clojure.core/unchecked-float","clojure.core/unchecked-inc","clojure.core/unchecked-inc-int","clojure.core/unchecked-int","clojure.core/unchecked-long","clojure.core/unchecked-multiply","clojure.core/unchecked-multiply-int","clojure.core/unchecked-negate","clojure.core/unchecked-negate-int","clojure.core/unchecked-remainder-int","clojure.core/unchecked-short","clojure.core/unchecked-subtract","clojure.core/unchecked-subtract-int","clojure.core/underive","clojure.core/unreduced","clojure.core/unsigned-bit-shift-right","clojure.core/update","clojure.core/update-in","clojure.core/update-proxy","clojure.core/uri?","clojure.core/use","clojure.core/uuid?","clojure.core/val","clojure.core/vals","clojure.core/var-get","clojure.core/var-set","clojure.core/var?","clojure.core/vary-meta","clojure.core/vec","clojure.core/vector","clojure.core/vector-of","clojure.core/vector?","clojure.core/volatile!","clojure.core/volatile?","clojure.core/vreset!","clojure.core/with-bindings*","clojure.core/with-meta","clojure.core/with-redefs-fn","clojure.core/xml-seq","clojure.core/zero?","clojure.core/zipmap","coll?","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","dedupe","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-cause","ex-data","ex-info","ex-message","extend","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn?","fnext","fnil","force","format","frequencies","future-call","future-cancel","future-cancelled?","future-done?","future?","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","ifn?","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","long","long-array","longs","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy-call-with-super","proxy-mappings","proxy-name","push-thread-bindings","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read+string","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-tap","remove-watch","repeat","repeatedly","replace","replicate","require","requiring-resolve","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","tap>","test","the-ns","thread-bound?","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","with-bindings*","with-meta","with-redefs-fn","xml-seq","zero?","zipmap"] \ , 'clojureMacro': ["->","->>","..","amap","and","areduce","as->","assert","binding","bound-fn","clojure.core/->","clojure.core/->>","clojure.core/..","clojure.core/amap","clojure.core/and","clojure.core/areduce","clojure.core/as->","clojure.core/assert","clojure.core/binding","clojure.core/bound-fn","clojure.core/comment","clojure.core/declare","clojure.core/delay","clojure.core/dosync","clojure.core/doto","clojure.core/extend-protocol","clojure.core/extend-type","clojure.core/for","clojure.core/future","clojure.core/gen-class","clojure.core/gen-interface","clojure.core/import","clojure.core/io!","clojure.core/lazy-cat","clojure.core/lazy-seq","clojure.core/letfn","clojure.core/locking","clojure.core/memfn","clojure.core/ns","clojure.core/or","clojure.core/proxy","clojure.core/proxy-super","clojure.core/pvalues","clojure.core/refer-clojure","clojure.core/reify","clojure.core/some->","clojure.core/some->>","clojure.core/sync","clojure.core/time","clojure.core/vswap!","clojure.core/with-bindings","clojure.core/with-in-str","clojure.core/with-loading-context","clojure.core/with-local-vars","clojure.core/with-open","clojure.core/with-out-str","clojure.core/with-precision","clojure.core/with-redefs","comment","declare","delay","dosync","doto","extend-protocol","extend-type","for","future","gen-class","gen-interface","import","io!","lazy-cat","lazy-seq","letfn","locking","memfn","ns","or","proxy","proxy-super","pvalues","refer-clojure","reify","some->","some->>","sync","time","vswap!","with-bindings","with-in-str","with-loading-context","with-local-vars","with-open","with-out-str","with-precision","with-redefs"] \ , 'clojureRepeat': ["clojure.core/doseq","clojure.core/dotimes","clojure.core/while","doseq","dotimes","while"] \ , 'clojureSpecial': [".","clojure.core/fn","clojure.core/let","clojure.core/loop","def","do","fn","if","let","loop","monitor-enter","monitor-exit","new","quote","recur","set!","var"] - \ , 'clojureVariable': ["*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","EMPTY-NODE","char-escape-string","char-name-string","clojure.core/*1","clojure.core/*2","clojure.core/*3","clojure.core/*agent*","clojure.core/*allow-unresolved-vars*","clojure.core/*assert*","clojure.core/*clojure-version*","clojure.core/*command-line-args*","clojure.core/*compile-files*","clojure.core/*compile-path*","clojure.core/*compiler-options*","clojure.core/*data-readers*","clojure.core/*default-data-reader-fn*","clojure.core/*e","clojure.core/*err*","clojure.core/*file*","clojure.core/*flush-on-newline*","clojure.core/*fn-loader*","clojure.core/*in*","clojure.core/*math-context*","clojure.core/*ns*","clojure.core/*out*","clojure.core/*print-dup*","clojure.core/*print-length*","clojure.core/*print-level*","clojure.core/*print-meta*","clojure.core/*print-readably*","clojure.core/*read-eval*","clojure.core/*source-path*","clojure.core/*suppress-read*","clojure.core/*unchecked-math*","clojure.core/*use-context-classloader*","clojure.core/*verbose-defrecords*","clojure.core/*warn-on-reflection*","clojure.core/EMPTY-NODE","clojure.core/char-escape-string","clojure.core/char-name-string","clojure.core/default-data-readers","clojure.core/primitives-classnames","clojure.core/unquote","clojure.core/unquote-splicing","default-data-readers","primitives-classnames","unquote","unquote-splicing"] + \ , 'clojureVariable': ["*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","EMPTY-NODE","Inst","char-escape-string","char-name-string","clojure.core/*1","clojure.core/*2","clojure.core/*3","clojure.core/*agent*","clojure.core/*allow-unresolved-vars*","clojure.core/*assert*","clojure.core/*clojure-version*","clojure.core/*command-line-args*","clojure.core/*compile-files*","clojure.core/*compile-path*","clojure.core/*compiler-options*","clojure.core/*data-readers*","clojure.core/*default-data-reader-fn*","clojure.core/*e","clojure.core/*err*","clojure.core/*file*","clojure.core/*flush-on-newline*","clojure.core/*fn-loader*","clojure.core/*in*","clojure.core/*math-context*","clojure.core/*ns*","clojure.core/*out*","clojure.core/*print-dup*","clojure.core/*print-length*","clojure.core/*print-level*","clojure.core/*print-meta*","clojure.core/*print-namespace-maps*","clojure.core/*print-readably*","clojure.core/*read-eval*","clojure.core/*reader-resolver*","clojure.core/*source-path*","clojure.core/*suppress-read*","clojure.core/*unchecked-math*","clojure.core/*use-context-classloader*","clojure.core/*verbose-defrecords*","clojure.core/*warn-on-reflection*","clojure.core/EMPTY-NODE","clojure.core/Inst","clojure.core/char-escape-string","clojure.core/char-name-string","clojure.core/default-data-readers","clojure.core/primitives-classnames","clojure.core/unquote","clojure.core/unquote-splicing","default-data-readers","primitives-classnames","unquote","unquote-splicing"] \ } function! s:syntax_keyword(dict) @@ -116,16 +114,16 @@ syntax region clojureRegexpQuoted start=/\\Q/ms=e+1 skip=/\\\\\|\\"/ end=/\\E/me syntax region clojureRegexpQuote start=/\\Q/ skip=/\\\\\|\\"/ end=/\\E/ end=/"/me=s-1 contains=clojureRegexpQuoted keepend contained " -*- CHARACTER PROPERTY CLASSES -*- -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj -" Java version 1.8.0_92 +" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj +" Java version 15.0.2 syntax match clojureRegexpPosixCharClass "\v\\[pP]\{%(Cntrl|A%(l%(pha|num)|SCII)|Space|Graph|Upper|P%(rint|unct)|Blank|XDigit|Digit|Lower)\}" contained display syntax match clojureRegexpJavaCharClass "\v\\[pP]\{java%(Whitespace|JavaIdentifier%(Part|Start)|SpaceChar|Mirrored|TitleCase|I%(SOControl|de%(ographic|ntifierIgnorable))|D%(efined|igit)|U%(pperCase|nicodeIdentifier%(Part|Start))|L%(etter%(OrDigit)?|owerCase)|Alphabetic)\}" contained display syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\cIs%(l%(owercase|etter)|hex%(digit|_digit)|w%(hite%(_space|space)|ord)|noncharacter%(_code_point|codepoint)|p%(rint|unctuation)|ideographic|graph|a%(l%(num|phabetic)|ssigned)|uppercase|join%(control|_control)|titlecase|blank|digit|control)\}" contained display syntax match clojureRegexpUnicodeCharClass "\v\\[pP][NSCMZPL]" contained display syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(N[dlo]?|P[dcifeos]?|C[ncfos]?|M[nce]?|Z[lsp]?|S[mcko]?|L[muCDlto]?)\}" contained display syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{%(Is|gc\=|general_category\=)?%(N[dlo]?|P[dcifeos]?|C[ncfos]?|M[nce]?|Z[lsp]?|S[mcko]?|L[muCDlto]?)\}" contained display -syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(Is|sc\=|script\=)%(l%(epc%(ha)?|y%([dc]i%(an)?)|a%(t%(n|in)|na|oo?)|i%(n%(b|ear_b)|mbu?|su))|p%(rti|lrd|h%(oenician|li|ag%(s_pa)?|nx))|vaii?|d%(srt|e%(seret|va%(nagari)?))|g%(lag%(olitic)?|eor%(gian)?|oth%(ic)?|re%(k|ek)|u%(j%(arati|r)|r%(u|mukhi)))|u%(gar%(itic)?|nknown)|a%(r%(ab%(ic)?|m%([ni]|enian))|v%(st|estan))|e%(thi%(opic)?|gyp%(tian_hieroglyphs)?)|z%(inh|yyy|zzz)|r%(un%(ic|r)|ejang|jng)|s%(inh%(ala)?|h%(rd|a%(vian|rada|w))|a%(ur%(ashtra)?|m%(r|aritan)|rb)|y%(r%(c|iac)|lo%(ti_nagri)?)|und%(anese)?|ora%(_sompeng)?)|i%(n%(scriptional_pa%(rthian|hlavi)|herited)|mperial_aramaic|tal)|b%(eng%(ali)?|a%(t%(ak|k)|li%(nese)?|mum?)|ra%(i%(lle)?|h%(mi)?)|opo%(mofo)?|u%(gi%(nese)?|h%(d|id)))|o%(g%(am|ham)|r%(iya|kh|ya)|sma%(nya)?|l%(d_%(south_arabian|persian|italic|turkic)|ck|_chiki))|k%(h%(m%(r|er)|ar%(oshthi)?)|nda|a%(li|n%(a|nada)|takana|yah_li|ithi)|thi)|m%(a%(nd%(aic)?|layalam)|lym|y%(anmar|mr)|tei|e%(r%(c|o%(itic_%(hieroglyphs|cursive))?)|etei_mayek)|ong%(olian)?|iao)|yi%(ii)?|x%(peo|sux)|n%(ew_tai_lue|koo?)|h%(ira%(gana)?|an%([io]|unoo|g%(ul)?)?|ebr%(ew)?)|c%(y%(priot|r%(l|illic))|a%(km|n%(adian_aboriginal|s)|ri%(an)?)|prt|h%(er%(okee)?|a%(m|kma))|uneiform|o%(pt%(ic)?|mmon))|t%(elu%(gu)?|i%(finagh|b%(t|etan))|ha%(i|a%(na)?)|a%(i_%(le|tham|viet)|g%(alog|b%(anwa)?)|vt|kri?|l[ue]|m%(il|l))|fng|glg)|java%(nese)?)\}" contained display -syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(In|blk\=|block\=)%(javanese|h%(a%(lfwidth%( and fullwidth forms|andfullwidthforms|_and_fullwidth_forms)|n%(unoo|gul%(compatibilityjamo|syllables|jamo%(extended\-[ab])?|_%(syllables|jamo%(_extended_[ab])?|compatibility_jamo)| %(syllables|compatibility jamo|jamo%( extended\-[ab])?))))|i%(ragana|gh%( %(private use surrogates|surrogates)|_%(private_use_surrogates|surrogates)|surrogates|privateusesurrogates))|ebrew)|i%(pa%([ _]extensions|extensions)|deographic%( description characters|_description_characters|descriptioncharacters)|nscriptional%(%([ _]pa%(rthian|hlavi))|pa%(rthian|hlavi))|mperial%(aramaic|[_ ]aramaic))|l%(e%(tterlike%([_ ]symbols|symbols)|pcha)|ow%([_ ]surrogates|surrogates)|i%(mbu|near%(_b_%(ideograms|syllabary)|b%(ideograms|syllabary)| b %(ideograms|syllabary))|su)|a%(tin%(extended%(additional|\-[dacb])| extended%( additional|\-[dacb])|\-1%(supplement| supplement)|_%(extended_%([dcb]|a%(dditional)?)|1_supplement))|o)|y[cd]ian)|b%(u%(ginese|hid)|ra%(hmi|ille%(patterns|[_ ]patterns))|o%(x%([ _]drawing|drawing)|pomofo%([ _]extended|extended)?)|lock%([ _]elements|elements)|yzantine%( musical symbols|musicalsymbols|_musical_symbols)|engali|a%(linese|mum%(supplement|[ _]supplement)?|tak|sic%([ _]latin|latin)))|e%(gyptian%([ _]hieroglyphs|hieroglyphs)|moticons|nclosed%( %(cjk letters and months|ideographic supplement|alphanumeric%( supplement|s))|cjklettersandmonths|_%(ideographic_supplement|alphanumeric%(_supplement|s)|cjk_letters_and_months)|alphanumerics%(upplement)?|ideographicsupplement)|thiopic%(supplement|_%(supplement|extended%(_a)?)| %(supplement|extended%(\-a)?)|extended%(\-a)?)?)|k%(h%(aroshthi|mer%([_ ]symbols|symbols)?)|a%(takana%(_phonetic_extensions|phoneticextensions| phonetic extensions)?|n%(gxi%([_ ]radicals|radicals)|a%(supplement|[ _]supplement)|bun|nada)|ithi|yah%([ _]li|li)))|m%(i%(ao|scellaneous%(technical|symbols%(and%(pictographs|arrows))?|mathematicalsymbols\-[ab]| %(technical|mathematical symbols\-[ab]|symbols%( and %(pictographs|arrows))?)|_%(technical|symbols%(_and_%(pictographs|arrows))?|mathematical_symbols_[ab])))|usical%([_ ]symbols|symbols)|e%(etei%(mayek%(extensions)?|_mayek%(_extensions)?| mayek%( extensions)?)|roitic%(hieroglyphs|%([_ ]%(hieroglyphs|cursive))|cursive))|a%(ndaic|hjong%([ _]tiles|tiles)|layalam|thematical%(alphanumericsymbols| %(alphanumeric symbols|operators)|_%(alphanumeric_symbols|operators)|operators))|yanmar%(extended\-a|_extended_a| extended\-a)?|o%(difier%(_tone_letters| tone letters|toneletters)|ngolian))|r%(u%(nic|mi%(numeralsymbols| numeral symbols|_numeral_symbols))|ejang)|n%(umber%(forms|[ _]forms)|ko|ew%(_tai_lue|tailue| tai lue))|c%(o%(ntrol%(pictures|[ _]pictures)|m%(bining%(diacriticalmarks%(supplement|forsymbols)?|halfmarks| %(diacritical marks%( %(supplement|for symbols))?|half marks|marks for symbols)|marksforsymbols|_%(marks_for_symbols|half_marks|diacritical_marks%(_supplement)?))|mon%(_indic_number_forms|indicnumberforms| indic number forms))|ptic|unting%( rod numerals|_rod_numerals|rodnumerals))|y%(rillic%(extended\-[ab]|_%(extended_[ab]|supplementary)|supplement%(ary)?| %(extended\-[ab]|supplement%(ary)?))?|priot%(syllabary|[ _]syllabary))|u%(rrency%([_ ]symbols|symbols)|neiform%(_numbers_and_punctuation|numbersandpunctuation| numbers and punctuation)?)|h%(a%(m|kma)|erokee)|arian|jk%(s%(ymbolsandpunctuation|trokes)|compatibility%(forms|ideographs%(supplement)?)?|radicalssupplement| %(compatibility%( %(ideographs%( supplement)?|forms))?|radicals supplement|unified ideographs%( extension [dacb])?|s%(ymbols and punctuation|trokes))|_%(s%(trokes|ymbols_and_punctuation)|radicals_supplement|compatibility%(_%(forms|ideographs%(_supplement)?))?|unified_ideographs%(_extension_[dacb])?)|unifiedideographs%(extension[dacb])?))|d%(e%(seret|vanagari%([ _]extended|extended)?)|ingbats|omino%([ _]tiles|tiles))|yi%(syllables|%([_ ]%(syllables|radicals))|radicals|jing%(hexagramsymbols| hexagram symbols|_hexagram_symbols))|s%(mall%( form variants|formvariants|_form_variants)|p%(acing%(_modifier_letters| modifier letters|modifierletters)|ecials)|ora%(sompeng|[ _]sompeng)|ha%(vian|rada)|a%(maritan|urashtra)|inhala|y%(riac|loti%([_ ]nagri|nagri))|u%(ndanese%(supplement|[ _]supplement)?|p%(erscripts%(_and_subscripts|andsubscripts| and subscripts)|plementa%(ry%(_private_use_area_[ab]|privateusearea\-[ab]| private use area\-[ab])|l%(_%(arrows_[ab]|mathematical_operators|punctuation)| %(mathematical operators|punctuation|arrows\-[ab])|mathematicaloperators|punctuation|arrows\-[ab])))|rrogates_area))|p%(h%(o%(enician|netic%( extensions%( supplement)?|extensions%(supplement)?|_extensions%(_supplement)?))|a%(istos%([ _]disc|disc)|gs[_\-]pa))|laying%(cards|[_ ]cards)|rivate%(usearea| use area|_use_area))|o%(smanya|l%([ _]chiki|d%( %(south arabian|persian|italic|turkic)|southarabian|_%(south_arabian|persian|italic|turkic)|persian|italic|turkic)|chiki)|riya|ptical%( character recognition|_character_recognition|characterrecognition)|gham)|g%(u%(jarati|rmukhi)|othic|lagolitic|e%(o%(rgian%(supplement|[ _]supplement)?|metric%(shapes|[ _]shapes))|neral%([_ ]punctuation|punctuation))|reek%( %(and coptic|extended)|andcoptic|_extended|extended)?)|t%(i%(betan|finagh)|elugu|ransport%( and map symbols|_and_map_symbols|andmapsymbols)|a%(mil|kri|i%(xuanjingsymbols|_%(le|xuan_jing_symbols|tham|viet)|le| %(xuan jing symbols|le|tham|viet)|tham|viet)|g%(alog|s|banwa))|ha%(i|ana))|a%(l%(chemical%([_ ]symbols|symbols)|phabetic%( presentation forms|_presentation_forms|presentationforms))|r%(menian|abic%(extended\-a|mathematicalalphabeticsymbols|supplement|_%(presentation_forms_[ab]|supplement|extended_a|mathematical_alphabetic_symbols)| %(extended\-a|mathematical alphabetic symbols|supplement|presentation forms\-[ab])|presentationforms\-[ab])?|rows)|ncient%(_%(greek_%(musical_notation|numbers)|symbols)|greek%(numbers|musicalnotation)| %(greek %(numbers|musical notation)|symbols)|symbols)|egean%(numbers|[ _]numbers)|vestan)|u%(garitic|nified%(canadianaboriginalsyllabics%(extended)?|_canadian_aboriginal_syllabics%(_extended)?| canadian aboriginal syllabics%( extended)?))|v%(a%(i|riation%( selectors%( supplement)?|selectors%(supplement)?|_selectors%(_supplement)?))|e%(rtical%(forms|[ _]forms)|dic%([ _]extensions|extensions))))\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(Is|sc\=|script\=)%(k%(its|h%(oj%(ki)?|m%(r|er)|itan_small_script|udawadi|ar%(oshthi)?)|a%(li|n%(a|nada)|takana%(_or_hiragana)?|yah_li|ithi)|nda|thi)|r%(ohg|un%(ic|r)|ejang|jng)|l%(epc%(ha)?|i%(mbu?|n%([ab]|ear_[ab])|su)|y%([dc]i%(an)?)|a%(t%(n|in)|na|oo?))|t%(elu%(gu)?|ha%(i|a%(na)?)|i%(finagh|rh%(uta)?|b%(t|etan))|fng|glg|a%(i_%(le|tham|viet)|g%(alog|b%(anwa)?)|vt|kri?|ng%(ut)?|l[ue]|m%(il|l)))|vaii?|y%(i%(ii)?|ezi%(di)?)|e%(thi%(opic)?|l%(ym%(aic)?|ba%(san)?)|gyp%(tian_hieroglyphs)?)|u%(gar%(itic)?|nknown)|h%(ung|ira%(gana)?|rkt|mn[gp]|a%(n%(i%(fi_rohingya)?|unoo|o|g%(ul)?)?|tr%(an)?)|luw|ebr%(ew)?)|g%(r%(e%(k|ek)|an%(tha)?)|lag%(olitic)?|eor%(gian)?|o%(n[mg]|th%(ic)?)|u%(j%(arati|r)|r%(u|mukhi)|njala_gondi))|m%(lym|a%(n%(d%(aic)?|i%(chaean)?)|saram_gondi|h%(ajani|j)|ka%(sar)?|rc%(hen)?|layalam)|o%(di|ng%(olian)?)|e%(r%(c|o%(itic_%(hieroglyphs|cursive))?)|etei_mayek|nd%(e_kikakui)?|d%(f|efaidrin))|roo?|y%(anmar|mr)|tei|iao|ult%(ani)?)|d%(upl%(oyan)?|srt|i%(ak|ves_akuru)|ogra?|e%(seret|va%(nagari)?))|z%(an%(abazar_square|b)|inh|yyy|zzz)|n%(yiakeng_puachue_hmong|bat|koo?|ew%(_tai_lue|a)|ushu|shu|a%(bataean|rb|nd%(inagari)?))|s%(h%(rd|a%(vian|rada|w))|o%(yo%(mbo)?|g%(d%(ian)?|o)|ra%(_sompeng)?)|i%(n%(d|h%(ala)?)|dd%(ham)?|gnwriting)|a%(ur%(ashtra)?|m%(r|aritan)|rb)|y%(r%(c|iac)|lo%(ti_nagri)?)|und%(anese)?|gnw)|w%(cho|a%(ncho|ra%(ng_citi)?))|c%(y%(priot|r%(l|illic))|h%(er%(okee)?|a%(m|kma)|rs|orasmian)|a%(km|ucasian_albanian|n%(adian_aboriginal|s)|ri%(an)?)|prt|uneiform|o%(pt%(ic)?|mmon))|i%(n%(scriptional_pa%(rthian|hlavi)|herited)|mperial_aramaic|tal)|p%(h%(l[ip]|oenician|ag%(s_pa)?|nx)|a%(lm%(yrene)?|u%(_cin_hau|c)|hawh_hmong)|rti|salter_pahlavi|lrd|erm)|x%(peo|sux)|b%(eng%(ali)?|ra%(i%(lle)?|h%(mi)?)|opo%(mofo)?|u%(gi%(nese)?|h%(d|id))|h%(ks|aiksuki)|a%(ss%(a_vah)?|t%(ak|k)|li%(nese)?|mum?))|java%(nese)?|o%(g%(am|ham)|s%(age|ge|ma%(nya)?)|l%(d_%(hungarian|north_arabian|so%(gdian|uth_arabian)|per%(mic|sian)|italic|turkic)|ck|_chiki)|r%(iya|kh|ya))|a%(r%(ab%(ic)?|m%([ni]|enian))|dl%(m|am)|natolian_hieroglyphs|hom|v%(st|estan)|ghb))\}" contained display +syntax match clojureRegexpUnicodeCharClass "\v\\[pP]\{\c%(In|blk\=|block\=)%(zanabazar%([ _]square|square)|javanese|h%(a%(lfwidth%( and fullwidth forms|andfullwidthforms|_and_fullwidth_forms)|tran|n%(unoo|gul%(compatibilityjamo|syllables|jamo%(extended\-[ab])?|_%(syllables|jamo%(_extended_[ab])?|compatibility_jamo)| %(syllables|compatibility jamo|jamo%( extended\-[ab])?))|ifi%([_ ]rohingya|rohingya)))|i%(ragana|gh%( %(private use surrogates|surrogates)|_%(private_use_surrogates|surrogates)|surrogates|privateusesurrogates))|ebrew)|i%(pa%([ _]extensions|extensions)|n%(scriptional%(%([ _]pa%(rthian|hlavi))|pa%(rthian|hlavi))|dic%(siyaqnumbers|_siyaq_numbers| siyaq numbers))|deographic%(symbolsandpunctuation|_%(description_characters|symbols_and_punctuation)| %(description characters|symbols and punctuation)|descriptioncharacters)|mperial%(aramaic|[_ ]aramaic))|c%(o%(ntrol%(pictures|[ _]pictures)|ptic%(epactnumbers|_epact_numbers| epact numbers)?|m%(mon%(_indic_number_forms|indicnumberforms| indic number forms)|bining%(halfmarks|_%(diacritical_marks%(_%(supplement|for_symbols|extended))?|marks_for_symbols|half_marks)| %(half marks|diacritical marks%( %(supplement|for symbols|extended))?|marks for symbols)|diacriticalmarks%(supplement|forsymbols|extended)?|marksforsymbols))|unting%( rod numerals|_rod_numerals|rodnumerals))|a%(rian|ucasian%([ _]albanian|albanian))|jk%(unifiedideographs%(extension[dgacfbe])?|s%(ymbolsandpunctuation|trokes)|_%(s%(trokes|ymbols_and_punctuation)|radicals_supplement|unified_ideographs%(_extension_[dgacfbe])?|compatibility%(_%(forms|ideographs%(_supplement)?))?)|compatibility%(forms|ideographs%(supplement)?)?|radicalssupplement| %(compatibility%( %(ideographs%( supplement)?|forms))?|unified ideographs%( extension [dgacfbe])?|radicals supplement|s%(ymbols and punctuation|trokes)))|y%(rillic%(supplement%(ary)?| %(supplement%(ary)?|extended\-[acb])|extended\-[acb]|_%(extended_[acb]|supplement%(ary)?))?|priot%(syllabary|[ _]syllabary))|u%(rrency%([_ ]symbols|symbols)|neiform%(_numbers_and_punctuation|numbersandpunctuation| numbers and punctuation)?)|h%(e%(ss%([_ ]symbols|symbols)|rokee%(supplement|[ _]supplement)?)|a%(m|kma)|orasmian))|g%(othic|u%(njala%(gondi|[_ ]gondi)|jarati|rmukhi)|lagolitic%(supplement|[ _]supplement)?|e%(o%(rgian%(supplement|%([_ ]%(supplement|extended))|extended)?|metric%( shapes%( extended)?|shapes%(extended)?|_shapes%(_extended)?))|neral%([_ ]punctuation|punctuation))|r%(eek%( %(and coptic|extended)|andcoptic|_%(and_coptic|extended)|extended)?|antha))|s%(h%(orthand%( format controls|_format_controls|formatcontrols)|a%(vian|rada))|u%(ndanese%(supplement|[ _]supplement)?|p%(erscripts%(_and_subscripts|andsubscripts| and subscripts)|plementa%(ry%(_private_use_area_[ab]|privateusearea\-[ab]| private use area\-[ab])|l%( %(mathematical operators|symbols and pictographs|punctuation|arrows\-[acb])|symbolsandpictographs|mathematicaloperators|punctuation|arrows\-[acb]|_%(arrows_[acb]|symbols_and_pictographs|mathematical_operators|punctuation))))|tton%(signwriting|[_ ]signwriting))|i%(nhala%( archaic numbers|archaicnumbers|_archaic_numbers)?|ddham)|y%(loti%([_ ]nagri|nagri)|mbols%( %(for legacy computing|and pictographs extended\-a)|forlegacycomputing|andpictographsextended\-a|_%(and_pictographs_extended_a|for_legacy_computing))|riac%(supplement|[ _]supplement)?)|p%(acing%(_modifier_letters| modifier letters|modifierletters)|ecials)|a%(maritan|urashtra)|o%(yombo|gdian|ra%(sompeng|[ _]sompeng))|mall%(kanaextension| %(kana extension|form variants)|_%(kana_extension|form_variants)|formvariants))|y%(i%(syllables|%([_ ]%(syllables|radicals))|radicals|jing%(hexagramsymbols| hexagram symbols|_hexagram_symbols))|ezidi)|p%(h%(o%(enician|netic%( extensions%( supplement)?|extensions%(supplement)?|_extensions%(_supplement)?))|a%(istos%([ _]disc|disc)|gs[_\-]pa))|laying%(cards|[_ ]cards)|rivate%(usearea| use area|_use_area)|a%(hawh%(hmong|[_ ]hmong)|u%(_cin_hau|cinhau| cin hau)|lmyrene)|salter%(pahlavi|[ _]pahlavi))|e%(l%(basan|ymaic)|arly%(_dynastic_cuneiform|dynasticcuneiform| dynastic cuneiform)|moticons|gyptian%(hieroglyph%(formatcontrols|s)| hieroglyph%( format controls|s)|_hieroglyph%(_format_controls|s))|nclosed%( %(cjk letters and months|ideographic supplement|alphanumeric%( supplement|s))|cjklettersandmonths|_%(ideographic_supplement|alphanumeric%(_supplement|s)|cjk_letters_and_months)|alphanumerics%(upplement)?|ideographicsupplement)|thiopic%(supplement|_%(supplement|extended%(_a)?)| %(supplement|extended%(\-a)?)|extended%(\-a)?)?)|r%(u%(nic|mi%(numeralsymbols| numeral symbols|_numeral_symbols))|ejang)|d%(o%(gra|mino%([ _]tiles|tiles))|e%(seret|vanagari%([ _]extended|extended)?)|uployan|i%(ngbats|ves%([_ ]akuru|akuru)))|m%(e%(defaidrin|nde%([ _]kikakui|kikakui)|etei%(mayek%(extensions)?|_mayek%(_extensions)?| mayek%( extensions)?)|roitic%(hieroglyphs|%([_ ]%(hieroglyphs|cursive))|cursive))|o%(ngolian%(supplement|[ _]supplement)?|di%(fier%(_tone_letters| tone letters|toneletters))?)|ro|u%(ltani|sical%([_ ]symbols|symbols))|i%(ao|scellaneous%(technical|symbols%(and%(pictographs|arrows))?|mathematicalsymbols\-[ab]| %(technical|mathematical symbols\-[ab]|symbols%( and %(pictographs|arrows))?)|_%(technical|symbols%(_and_%(pictographs|arrows))?|mathematical_symbols_[ab])))|yanmar%( extended\-[ab]|extended\-[ab]|_extended_[ab])?|a%(h%(ajani|jong%([ _]tiles|tiles))|rchen|n%(daic|ichaean)|yan%([_ ]numerals|numerals)|saram%(gondi|[_ ]gondi)|layalam|thematical%(alphanumericsymbols| %(alphanumeric symbols|operators)|_%(alphanumeric_symbols|operators)|operators)|kasar))|o%(s%(age|manya)|ttoman%(siyaqnumbers|_siyaq_numbers| siyaq numbers)|r%(namental%([ _]dingbats|dingbats)|iya)|ptical%( character recognition|_character_recognition|characterrecognition)|gham|l%([ _]chiki|d%(hungarian| %(hungarian|so%(uth arabian|gdian)|per%(mic|sian)|north arabian|italic|turkic)|per%(mic|sian)|so%(utharabian|gdian)|italic|turkic|_%(hungarian|north_arabian|so%(gdian|uth_arabian)|per%(mic|sian)|italic|turkic)|northarabian)|chiki))|n%(ew%(_tai_lue|a|tailue| tai lue)|ko|yiakeng%( puachue hmong|puachuehmong|_puachue_hmong)|a%(bataean|ndinagari)|u%(shu|mber%(forms|[ _]forms)))|b%(u%(ginese|hid)|a%(s%(sa%([ _]vah|vah)|ic%([ _]latin|latin))|linese|mum%(supplement|[ _]supplement)?|tak)|ra%(hmi|ille%(patterns|[_ ]patterns))|o%(x%([ _]drawing|drawing)|pomofo%([ _]extended|extended)?)|lock%([ _]elements|elements)|haiksuki|yzantine%( musical symbols|musicalsymbols|_musical_symbols)|engali)|l%(i%(mbu|near%(a| %(a|b %(ideograms|syllabary))|b%(ideograms|syllabary)|_%(a|b_%(ideograms|syllabary)))|su%(supplement|[ _]supplement)?)|a%(tin%(extended%(\-[dacbe]|additional)|_%(extended_%([dcbe]|a%(dditional)?)|1_supplement)|\-1%(supplement| supplement)| extended%(\-[dacbe]| additional))|o)|e%(tterlike%([_ ]symbols|symbols)|pcha)|ow%([_ ]surrogates|surrogates)|y[cd]ian)|k%(h%(aroshthi|ojki|mer%([_ ]symbols|symbols)?|udawadi|itan%( small script|smallscript|_small_script))|a%(takana%(_phonetic_extensions|phoneticextensions| phonetic extensions)?|n%(gxi%([_ ]radicals|radicals)|a%(extended\-a|supplement| %(extended\-a|supplement)|_%(supplement|extended_a))|bun|nada)|ithi|yah%([ _]li|li)))|wa%(ncho|rang%(citi|[ _]citi))|t%(elugu|ransport%( and map symbols|_and_map_symbols|andmapsymbols)|i%(rhuta|betan|finagh)|a%(mil%(supplement|[ _]supplement)?|kri|ngut%(supplement|%([ _]%(supplement|components))|components)?|i%(xuanjingsymbols|_%(le|xuan_jing_symbols|tham|viet)|le| %(xuan jing symbols|le|tham|viet)|tham|viet)|g%(alog|s|banwa))|ha%(i|ana))|a%(l%(chemical%([_ ]symbols|symbols)|phabetic%( presentation forms|_presentation_forms|presentationforms))|n%(cient%(_%(greek_%(musical_notation|numbers)|symbols)|greek%(numbers|musicalnotation)| %(greek %(numbers|musical notation)|symbols)|symbols)|atolian%([ _]hieroglyphs|hieroglyphs))|dlam|r%(menian|abic%(extended\-a|mathematicalalphabeticsymbols|supplement|_%(presentation_forms_[ab]|supplement|extended_a|mathematical_alphabetic_symbols)| %(extended\-a|mathematical alphabetic symbols|supplement|presentation forms\-[ab])|presentationforms\-[ab])?|rows)|egean%(numbers|[ _]numbers)|vestan|hom)|u%(garitic|nified%(canadianaboriginalsyllabics%(extended)?|_canadian_aboriginal_syllabics%(_extended)?| canadian aboriginal syllabics%( extended)?))|v%(a%(i|riation%( selectors%( supplement)?|selectors%(supplement)?|_selectors%(_supplement)?))|e%(rtical%(forms|[ _]forms)|dic%([ _]extensions|extensions))))\}" contained display syntax match clojureRegexpPredefinedCharClass "\v%(\\[dDsSwW]|\.)" contained display syntax cluster clojureRegexpCharPropertyClasses contains=clojureRegexpPosixCharClass,clojureRegexpJavaCharClass,clojureRegexpUnicodeCharClass @@ -136,7 +134,7 @@ syntax match clojureRegexpBoundary "[$^]" contained display syntax match clojureRegexpQuantifier "[?*+][?+]\=" contained display syntax match clojureRegexpQuantifier "\v\{\d+%(,|,\d+)?}\??" contained display syntax match clojureRegexpOr "|" contained display -syntax match clojureRegexpBackRef "\v\\%([1-9]\d*|k\<[a-zA-Z]+\>)" contained display +syntax match clojureRegexpBackRef "\v\\%([1-9]\d*|k\<[a-zA-z]+\>)" contained display " Mode modifiers, mode-modified spans, lookaround, regular and atomic " grouping, and named-capturing. @@ -148,13 +146,13 @@ syntax match clojureRegexpMod "\v\(@<=\?\<[a-zA-Z]+\>" contained display syntax region clojureRegexpGroup start="(" skip=/\\\\\|\\)/ end=")" matchgroup=clojureRegexpGroup contained contains=clojureRegexpMod,clojureRegexpQuantifier,clojureRegexpBoundary,clojureRegexpEscape,@clojureRegexpCharClasses syntax region clojureRegexp start=/\#"/ skip=/\\\\\|\\"/ end=/"/ contains=@clojureRegexpCharClasses,clojureRegexpEscape,clojureRegexpQuote,clojureRegexpBoundary,clojureRegexpQuantifier,clojureRegexpOr,clojureRegexpBackRef,clojureRegexpGroup keepend -syntax keyword clojureCommentTodo contained FIXME XXX TODO FIXME: XXX: TODO: +syntax keyword clojureCommentTodo contained FIXME XXX TODO BUG NOTE HACK FIXME: XXX: TODO: BUG: NOTE: HACK: syntax match clojureComment ";.*$" contains=clojureCommentTodo,@Spell syntax match clojureComment "#!.*$" " -*- TOP CLUSTER -*- -" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-011/clj/src/vim_clojure_static/generate.clj +" Generated from https://github.com/clojure-vim/clojure.vim/blob/f8594e7030cdfb0b7990ac92953c77a08a7220f0/clj/src/vim_clojure_static/generate.clj syntax cluster clojureTop contains=@Spell,clojureAnonArg,clojureBoolean,clojureCharacter,clojureComment,clojureCond,clojureConstant,clojureDefine,clojureDeref,clojureDispatch,clojureError,clojureException,clojureFunc,clojureKeyword,clojureMacro,clojureMap,clojureMeta,clojureNumber,clojureQuote,clojureRegexp,clojureRepeat,clojureSexp,clojureSpecial,clojureString,clojureSymbol,clojureUnquote,clojureVarArg,clojureVariable,clojureVector syntax region clojureSexp matchgroup=clojureParen start="(" end=")" contains=@clojureTop fold diff --git a/runtime/syntax/conf.vim b/runtime/syntax/conf.vim index 9b8a6361bc..6a78ef8c6e 100644 --- a/runtime/syntax/conf.vim +++ b/runtime/syntax/conf.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: generic configure file " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2005 Jun 20 +" Last Change: 2021 May 01 " Quit when a (custom) syntax file was already loaded if exists("b:current_syntax") @@ -10,8 +10,8 @@ endif syn keyword confTodo contained TODO FIXME XXX " Avoid matching "text#text", used in /etc/disktab and /etc/gettytab -syn match confComment "^#.*" contains=confTodo -syn match confComment "\s#.*"ms=s+1 contains=confTodo +syn match confComment "^#.*" contains=confTodo,@Spell +syn match confComment "\s#.*"ms=s+1 contains=confTodo,@Spell syn region confString start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline syn region confString start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline diff --git a/runtime/syntax/cpp.vim b/runtime/syntax/cpp.vim index 9cb0860e84..ed38913f29 100644 --- a/runtime/syntax/cpp.vim +++ b/runtime/syntax/cpp.vim @@ -2,13 +2,16 @@ " Language: C++ " Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) " Previous Maintainer: Ken Shan <ccshan@post.harvard.edu> -" Last Change: 2017 Jun 05 +" Last Change: 2021 Jan 12 " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif +" inform C syntax that the file was included from cpp.vim +let b:filetype_in_cpp_family = 1 + " Read the C syntax to start with runtime! syntax/c.vim unlet b:current_syntax @@ -42,6 +45,8 @@ if !exists("cpp_no_cpp11") syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell + syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1 + syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$" endif " C++ 14 extensions @@ -53,6 +58,21 @@ if !exists("cpp_no_cpp14") syn case match endif +" C++ 20 extensions +if !exists("cpp_no_cpp20") + syn keyword cppStatement co_await co_return co_yield requires + syn keyword cppStorageClass consteval constinit + syn keyword cppStructure concept + syn keyword cppType char8_t + syn keyword cppModule import module export +endif + +" C++ 17 extensions +if !exists("cpp_no_cpp17") + syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1 + syn match cppCast "\<reinterpret_pointer_cast\s*$" +endif + " The minimum and maximum operators in GNU C++ syn match cppMinMax "[<>]?" @@ -71,6 +91,7 @@ hi def link cppConstant Constant hi def link cppRawStringDelimiter Delimiter hi def link cppRawString String hi def link cppNumber Number +hi def link cppModule Include let b:current_syntax = "cpp" diff --git a/runtime/syntax/cs.vim b/runtime/syntax/cs.vim index eeb990215d..b4cb6489e6 100644 --- a/runtime/syntax/cs.vim +++ b/runtime/syntax/cs.vim @@ -3,7 +3,7 @@ " Maintainer: Nick Jensen <nickspoon@gmail.com> " Former Maintainers: Anduin Withers <awithers@anduin.com> " Johannes Zellner <johannes@zellner.org> -" Last Change: 2019-08-01 +" Last Change: 2020-11-23 " Filenames: *.cs " License: Vim (see :h license) " Repository: https://github.com/nickspoons/vim-cs @@ -18,7 +18,6 @@ endif let s:save_cpo = &cpoptions set cpoptions&vim - syn keyword csType bool byte char decimal double float int long object sbyte short string T uint ulong ushort var void dynamic syn keyword csStorage delegate enum interface namespace struct syn keyword csRepeat break continue do for foreach goto return while @@ -27,7 +26,7 @@ syn keyword csLabel case default syn match csOperatorError display +::+ syn match csGlobal display +global::+ " user labels (see [1] 8.6 Statements) -syn match csLabel display +^\s*\I\i*\s*:\([^:]\)\@=+ +syn match csLabel display +^\s*\I\i*\s*:\%([^:]\)\@=+ syn keyword csModifier abstract const extern internal override private protected public readonly sealed static virtual volatile syn keyword csConstant false null true syn keyword csException try catch finally throw when @@ -39,9 +38,10 @@ syn keyword csUnsupportedStatement add remove value syn keyword csUnspecifiedKeyword explicit implicit " Contextual Keywords -syn match csContextualStatement /\<yield[[:space:]\n]\+\(return\|break\)/me=s+5 -syn match csContextualStatement /\<partial[[:space:]\n]\+\(class\|struct\|interface\)/me=s+7 -syn match csContextualStatement /\<\(get\|set\)\(;\|[[:space:]\n]*{\)/me=s+3 +syn match csContextualStatement /\<yield[[:space:]\n]\+\%(return\|break\)/me=s+5 +syn match csContextualStatement /\<partial[[:space:]\n]\+\%(class\|struct\|interface\)/me=s+7 +syn match csContextualStatement /\<\%(get\|set\)\%(;\|[[:space:]\n]*{\)/me=s+3 +syn match csContextualStatement /\<\%(get\|set\)\s*=>/me=s+3 syn match csContextualStatement /\<where\>[^:]\+:/me=s+5 " Operators @@ -97,9 +97,11 @@ syn match csXmlComment "///.*$" contains=csXmlCommentLeader,@csXml,@Spell keepen syn include @csXml syntax/xml.vim hi def link xmlRegion Comment +" Since syntax/xml.vim contains `syn spell toplevel`, we need to set it back to `default` here. +syn spell default " [1] 9.5 Pre-processing directives -syn region csPreCondit start="^\s*#\s*\(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\)" skip="\\$" end="$" contains=csComment keepend +syn region csPreCondit start="^\s*#\s*\%(define\|undef\|if\|elif\|else\|endif\|line\|error\|warning\|pragma\)\>" skip="\\$" end="$" contains=csComment keepend syn region csRegion matchgroup=csPreCondit start="^\s*#\s*region.*$" end="^\s*#\s*endregion" transparent fold contains=TOP syn region csSummary start="^\s*/// <summary" end="^\%\(\s*///\)\@!" transparent fold keepend @@ -118,25 +120,27 @@ syn match csSpecialError "\\." contained syn match csSpecialCharError "[^']" contained " [1] 9.4.4.4 Character literals syn match csSpecialChar +\\["\\'0abfnrtvx]+ contained display +syn match csUnicodeNumber +\\x\x\{2,4}+ contained contains=csUnicodeSpecifier display syn match csUnicodeNumber +\\u\x\{4}+ contained contains=csUnicodeSpecifier display syn match csUnicodeNumber +\\U\x\{8}+ contained contains=csUnicodeSpecifier display syn match csUnicodeSpecifier +\\[uU]+ contained display syn region csString matchgroup=csQuote start=+"+ end=+"+ end=+$+ extend contains=csSpecialChar,csSpecialError,csUnicodeNumber,@Spell -syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError display +syn match csCharacter "'[^']*'" contains=csSpecialChar,csSpecialCharError,csUnicodeNumber display syn match csCharacter "'\\''" contains=csSpecialChar display syn match csCharacter "'[^\\]'" display syn match csNumber "\<0[0-7]*[lL]\=\>" display -syn match csNumber "\<0[xX]\x\+[lL]\=\>" display -syn match csNumber "\<\d\+[lL]\=\>" display -syn match csNumber "\<\d\+\.\d*\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display -syn match csNumber "\.\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\=" display -syn match csNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>" display -syn match csNumber "\<\d\+\%\([eE][-+]\=\d\+\)\=[fFdD]\>" display +syn match csNumber "\<0[xX][[:xdigit:]_]\+[lL]\=\>" display +syn match csNumber "\<0[bB][01_]\+[lL]\=\>" display +syn match csNumber "\<[[:digit:]_]\+[lL]\=\>" display +syn match csNumber "\<[[:digit:]_]\+\.[[:digit:]_]*\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display +syn match csNumber "\.[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\=" display +syn match csNumber "\<[[:digit:]_]\+[eE][-+]\=[[:digit:]_]\+[fFdDmM]\=\>" display +syn match csNumber "\<[[:digit:]_]\+\%\([eE][-+]\=[[:digit:]_]\+\)\=[fFdDmM]\>" display -syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ end=+$+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell +syn region csInterpolatedString matchgroup=csQuote start=+\$"+ end=+"+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,@Spell -syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBracketed,csInterpolationAlign,csInterpolationFormat +syn region csInterpolation matchgroup=csInterpolationDelimiter start=+{+ end=+}+ keepend contained contains=@csAll,csBraced,csBracketed,csInterpolationAlign,csInterpolationFormat syn match csEscapedInterpolation "{{" transparent contains=NONE display syn match csEscapedInterpolation "}}" transparent contains=NONE display syn region csInterpolationAlign matchgroup=csInterpolationAlignDel start=+,+ end=+}+ end=+:+me=e-1 contained contains=csNumber,csConstant,csCharacter,csParens,csOpSymbols,csString,csBracketed display @@ -150,9 +154,10 @@ syn match csQuoteError +@$"+he=s+2,me=s+2 syn region csInterVerbString matchgroup=csQuote start=+\$@"+ end=+"+ skip=+""+ extend contains=csInterpolation,csEscapedInterpolation,csSpecialChar,csSpecialError,csUnicodeNumber,csVerbatimQuote,@Spell -syn region csBracketed matchgroup=csParens start=+(+ end=+)+ contained transparent contains=@csAll,csBracketed +syn region csBracketed matchgroup=csParens start=+(+ end=+)+ extend contained transparent contains=@csAll,csBraced,csBracketed +syn region csBraced matchgroup=csParens start=+{+ end=+}+ extend contained transparent contains=@csAll,csBraced,csBracketed -syn cluster csAll contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csInterpolatedString,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csType,csUnicodeNumber,csUnicodeSpecifier,csVerbatimString,csUserType,csUserIdentifier,csUserInterface,csUserMethod +syn cluster csAll contains=csCharacter,csClassType,csComment,csContextualStatement,csEndColon,csIsType,csLabel,csLogicSymbols,csNewType,csConstant,csNumber,csOpSymbols,csOperatorError,csParens,csPreCondit,csRegion,csString,csSummary,csType,csUnicodeNumber,csUnicodeSpecifier,csInterpolatedString,csVerbatimString,csInterVerbString,csUserType,csUserIdentifier,csUserInterface,csUserMethod " The default highlighting. hi def link csType Type diff --git a/runtime/syntax/csh.vim b/runtime/syntax/csh.vim index c134aa7ef3..6a056c7004 100644 --- a/runtime/syntax/csh.vim +++ b/runtime/syntax/csh.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: C-shell (csh) -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 13 +" Version: 14 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_CSH " quit when a syntax file was already loaded diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim index 73bbd8d03f..19326d01e4 100644 --- a/runtime/syntax/css.vim +++ b/runtime/syntax/css.vim @@ -1,11 +1,12 @@ " Vim syntax file " Language: Cascading Style Sheets " Previous Contributor List: +" Jules Wang <w.jq0722@gmail.com> " Claudio Fleiner <claudio@fleiner.com> (Maintainer) " Yeti (Add full CSS2, HTML4 support) " Nikolai Weibull (Add CSS2 support) -" URL: https://github.com/JulesWang/css.vim -" Maintainer: Jules Wang <w.jq0722@gmail.com> +" URL: https://github.com/jsit/css.vim +" Maintainer: Jay Sitter <jay@jaysitter.com> " Last Change: 2019 Jul. 29 " quit when a syntax file was already loaded @@ -60,7 +61,7 @@ syn match cssClassName "\.-\=[A-Za-z_][A-Za-z0-9_-]*" contains=cssClassNameDot syn match cssClassNameDot contained '\.' try -syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*" +syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*" catch /^.*/ syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*" endtry @@ -68,7 +69,7 @@ endtry " digits syn match cssValueInteger contained "[-+]\=\d\+" contains=cssUnitDecorators syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\=" contains=cssUnitDecorators -syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\|dpi\|dppx\|dpcm\|fr\|vw\|vh\|vmin\|vmax\)\>" contains=cssUnitDecorators +syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\|dpi\|dppx\|dpcm\|fr\|vw\|vh\|vmin\|vmax\|ch\)\>" contains=cssUnitDecorators syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=%" contains=cssUnitDecorators syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)\>" contains=cssUnitDecorators syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)\>" contains=cssUnitDecorators @@ -128,12 +129,14 @@ syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma,cssFunction syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear-\|radial-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunction,cssGradientAttr,cssFunctionComma syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y\|Z\)\=\|translate\(3d\|X\|Y\|Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(blur\|brightness\|contrast\|drop-shadow\|grayscale\|hue-rotate\|invert\|opacity\|saturate\|sepia\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma syn keyword cssGradientAttr contained top bottom left right cover center middle ellipse at syn match cssFunctionComma contained "," " Common Prop and Attr syn keyword cssCommonAttr contained auto none inherit all default normal syn keyword cssCommonAttr contained top bottom center stretch hidden visible +syn match cssCommonAttr contained "\<\(max-\|min-\|fit-\)content\>" "------------------------------------------------ " CSS Animations " http://www.w3.org/TR/css3-animations/ @@ -646,5 +649,5 @@ endif let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 +" vim: ts=8 diff --git a/runtime/syntax/cvs.vim b/runtime/syntax/cvs.vim index 3eac191637..e1e413fcf9 100644 --- a/runtime/syntax/cvs.vim +++ b/runtime/syntax/cvs.vim @@ -1,7 +1,6 @@ " Vim syntax file " Language: CVS commit file -" Maintainer: Matt Dunford (zoot@zotikos.com) -" URL: http://www.zotikos.com/downloads/cvs.vim +" Maintainer: Matt Dunford (zenmatic@gmail.com) " Last Change: Sat Nov 24 23:25:11 CET 2001 " quit when a syntax file was already loaded diff --git a/runtime/syntax/dart.vim b/runtime/syntax/dart.vim new file mode 100644 index 0000000000..d1c2bf2158 --- /dev/null +++ b/runtime/syntax/dart.vim @@ -0,0 +1,90 @@ +" Vim syntax file +" +" Language: Dart +" Maintainer: Eugene 'pr3d4t0r' Ciurana <dart.syntax AT cime.net > +" Source: https://github.com/pr3d4t0r/dart-vim-syntax +" Last Update: 2019 Oct 19 +" +" License: Vim is Charityware. dart.vim syntax is Charityware. +" (c) Copyright 2019 by Eugene Ciurana / pr3d4t0r. Licensed +" under the standard VIM LICENSE - Vim command :help uganda.txt +" for details. +" +" Questions, comments: <dart.syntax AT cime.net> +" https://ciurana.eu/pgp, https://keybase.io/pr3d4t0r +" +" vim: set fileencoding=utf-8: + + +" Quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + + +syn keyword dartCommentTodo contained TODO FIXME XXX TBD +syn match dartLineComment "//.*" contains=dartTodo,@Spell +syn match dartCommentSkip "^[ \t]*\*\($\|[ \t]\+\)" +syn region dartComment start="/\*" end="\*/" contains=@Spell,dartTodo +syn keyword dartReserved assert async await class const export extends external final hide import implements interface library mixin on show super sync yield +syn match dartNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" + + +syn keyword dartBoolean false true +syn keyword dartBranch break continue +syn keyword dartConditional if else switch +syn keyword dartException catch finally rethrow throw try +syn keyword dartIdentifier abstract covariant deferred dynamic factory Function operator part static this typedef var +syn keyword dartLabel case default +syn keyword dartNull null +syn keyword dartOperator is new +syn keyword dartRepeat for do in while +syn keyword dartStatement return with +syn keyword dartType bool double enum int String StringBuffer void +syn keyword dartTodo contained TODO FIXME XXX + + +syn match dartEscape contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)" +syn match dartSpecialError contained "\\." +syn match dartStrInterpol contained "\${[\x, _]*\}" + +syn region dartDQString start=+"+ end=+"+ end=+$+ contains=dartEscape,dartStrInterpol,dartSpecialError,@Spell +syn region dartSQString start=+'+ end=+'+ end=+$+ contains=dartEscape,dartStrInterpol,dartSpecialError,@Spell + +syn match dartBraces "[{}\[\]]" +syn match dartParens "[()]" + + +syn sync fromstart +syn sync maxlines=100 + + +hi def link dartBoolean Boolean +hi def link dartBranch Conditional +hi def link dartComment Comment +hi def link dartConditional Conditional +hi def link dartDQString String +hi def link dartEscape SpecialChar +hi def link dartException Exception +hi def link dartIdentifier Identifier +hi def link dartLabel Label +hi def link dartLineComment Comment +hi def link dartNull Keyword +hi def link dartOperator Operator +hi def link dartRepeat Repeat +hi def link dartReserved Keyword +hi def link dartSQString String +hi def link dartSpecialError Error +hi def link dartStatement Statement +hi def link dartStrInterpol Special +hi def link dartTodo Todo +hi def link dartType Type + + +let b:current_syntax = "dart" +let &cpo = s:cpo_save +unlet s:cpo_save + diff --git a/runtime/syntax/dcl.vim b/runtime/syntax/dcl.vim index c0d0ebcf95..7e9741efc7 100644 --- a/runtime/syntax/dcl.vim +++ b/runtime/syntax/dcl.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: DCL (Digital Command Language - vms) -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Mar 26, 2019 -" Version: 12 +" Version: 13 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_DCL " quit when a syntax file was already loaded diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim index 9d6dfe96a5..220f184bc0 100644 --- a/runtime/syntax/debchangelog.vim +++ b/runtime/syntax/debchangelog.vim @@ -3,7 +3,7 @@ " Maintainer: Debian Vim Maintainers " Former Maintainers: Gerfried Fuchs <alfie@ist.org> " Wichert Akkerman <wakkerma@debian.org> -" Last Change: 2019 Apr 21 +" Last Change: 2020 Nov 28 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim " Standard syntax initialization @@ -17,11 +17,34 @@ syn case ignore let s:urgency='urgency=\(low\|medium\|high\|emergency\|critical\)\( [^[:space:],][^,]*\)\=' let s:binNMU='binary-only=yes' +let s:cpo = &cpo +set cpo-=C +let s:supported = [ + \ 'oldstable', 'stable', 'testing', 'unstable', 'experimental', + \ 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm', + \ 'trixie', 'sid', 'rc-buggy', + \ + \ 'trusty', 'xenial', 'bionic', 'focal', 'groovy', 'hirsute', 'devel' + \ ] +let s:unsupported = [ + \ 'frozen', 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', + \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze', 'wheezy', + \ + \ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty', + \ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid', + \ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy', + \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful', 'cosmic', + \ 'disco', 'eoan' + \ ] +let &cpo=s:cpo + " Define some common expressions we can use later on syn match debchangelogName contained "^[[:alnum:]][[:alnum:].+-]\+ " exe 'syn match debchangelogFirstKV contained "; \('.s:urgency.'\|'.s:binNMU.'\)"' exe 'syn match debchangelogOtherKV contained ", \('.s:urgency.'\|'.s:binNMU.'\)"' -syn match debchangelogTarget contained "\v %(frozen|unstable|sid|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(squeeze|wheezy|jessie)-%(backports%(-sloppy)=|lts|security)|stretch%(-backports%(-sloppy)=|-security)=|buster%(-backports|-security)=|bullseye|%(devel|precise|trusty|vivid|wily|xenial|yakkety|zesty|artful|bionic|cosmic|disco|eoan)%(-%(security|proposed|updates|backports|commercial|partner))=)+" +exe 'syn match debchangelogTarget contained "\%( \%('.join(s:supported, '\|').'\)\>[-[:alnum:]]*\)\+"' +exe 'syn match debchangelogUnsupportedTarget contained "\%( \%('.join(s:unsupported, '\|').'\)\>[-[:alnum:]]*\)\+"' +syn match debchangelogUnreleased contained / UNRELEASED/ syn match debchangelogVersion contained "(.\{-})" syn match debchangelogCloses contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*" syn match debchangelogLP contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*" @@ -29,7 +52,7 @@ syn match debchangelogEmail contained "[_=[:alnum:].+-]\+@[[:alnum:]./\-]\+" syn match debchangelogEmail contained "<.\{-}>" " Define the entries that make up the changelog -syn region debchangelogHeader start="^[^ ]" end="$" contains=debchangelogName,debchangelogFirstKV,debchangelogOtherKV,debchangelogTarget,debchangelogVersion,debchangelogBinNMU oneline +syn region debchangelogHeader start="^[^ ]" end="$" contains=debchangelogName,debchangelogFirstKV,debchangelogOtherKV,debchangelogTarget,debchangelogUnsupportedTarget,debchangelogUnreleased,debchangelogVersion,debchangelogBinNMU oneline syn region debchangelogFooter start="^ [^ ]" end="$" contains=debchangelogEmail oneline syn region debchangelogEntry start="^ " end="$" contains=debchangelogCloses,debchangelogLP oneline @@ -44,6 +67,8 @@ hi def link debchangelogOtherKV Identifier hi def link debchangelogName Comment hi def link debchangelogVersion Identifier hi def link debchangelogTarget Identifier +hi def link debchangelogUnsupportedTarget Identifier +hi def link debchangelogUnreleased WarningMsg hi def link debchangelogEmail Special let b:current_syntax = 'debchangelog' diff --git a/runtime/syntax/debcontrol.vim b/runtime/syntax/debcontrol.vim index 9085cd01d5..25fc252de6 100644 --- a/runtime/syntax/debcontrol.vim +++ b/runtime/syntax/debcontrol.vim @@ -3,7 +3,7 @@ " Maintainer: Debian Vim Maintainers " Former Maintainers: Gerfried Fuchs <alfie@ist.org> " Wichert Akkerman <wakkerma@debian.org> -" Last Change: 2018 Aug 11 +" Last Change: 2020 Oct 26 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcontrol.vim " Standard syntax initialization @@ -47,22 +47,24 @@ exe 'syn keyword debcontrolArchitecture contained '. join(s:pairs) unlet s:kernels s:archs s:pairs +" Keep in sync with https://metadata.ftp-master.org/sections.822 +" curl -q https://metadata.ftp-master.debian.org/sections.822 2>/dev/null| grep-dctrl -n --not -FSection -sSection / - let s:sections = [ \ 'admin', 'cli-mono', 'comm', 'database', 'debian-installer', 'debug' \, 'devel', 'doc', 'editors', 'education', 'electronics', 'embedded' - \, 'fonts', 'games', 'gnome', 'gnustep', 'gnu-r', 'golang', 'graphics' + \, 'fonts', 'games', 'gnome', 'gnu-r', 'gnustep', 'golang', 'graphics' \, 'hamradio', 'haskell', 'httpd', 'interpreters', 'introspection' - \, 'java\%(script\)\=', 'kde', 'kernel', 'libs', 'libdevel', 'lisp' - \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net' - \, 'news', 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python' - \, 'ruby', 'rust', 'science', 'shells', 'sound', 'text', 'tex' + \, 'java', 'javascript', 'kde', 'kernel', 'libdevel', 'libs', 'lisp' + \, 'localization', 'mail', 'math', 'metapackages', 'misc', 'net', 'news' + \, 'ocaml', 'oldlibs', 'otherosfs', 'perl', 'php', 'python', 'raku' + \, 'ruby', 'rust', 'science', 'shells', 'sound', 'tasks', 'tex', 'text' \, 'utils', 'vcs', 'video', 'web', 'x11', 'xfce', 'zope' \ ] syn keyword debcontrolMultiArch contained no foreign allowed same syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+" syn keyword debcontrolPriority contained extra important optional required standard -exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\%('.join(s:sections, '\|').'\)"' +exe 'syn match debcontrolSection contained "\%(\%(contrib\|non-free\|non-US/main\|non-US/contrib\|non-US/non-free\|restricted\|universe\|multiverse\)/\)\=\<\%('.join(s:sections, '\|').'\)\>"' syn keyword debcontrolPackageType contained udeb deb syn match debcontrolVariable contained "\${.\{-}}" syn keyword debcontrolDmUpload contained yes diff --git a/runtime/syntax/debcopyright.vim b/runtime/syntax/debcopyright.vim index c85ca372d0..c87b876eea 100644 --- a/runtime/syntax/debcopyright.vim +++ b/runtime/syntax/debcopyright.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Debian copyright file " Maintainer: Debian Vim Maintainers -" Last Change: 2018 Feb 05 +" Last Change: 2019 Sep 07 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debcopyright.vim " Standard syntax initialization @@ -15,7 +15,7 @@ set cpo&vim syn case match syn match debcopyrightUrl "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$" -syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\): *" +syn match debcopyrightKey "^\%(Format\|Upstream-Name\|Upstream-Contact\|Disclaimer\|Source\|Comment\|Files\|Copyright\|License\|Files-Excluded\%(-[-a-zA-Z0-9]\+\)\=\): *" syn match debcopyrightEmail "[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+" syn match debcopyrightEmail "<.\{-}>" syn match debcopyrightComment "^#.*$" contains=@Spell diff --git a/runtime/syntax/debsources.vim b/runtime/syntax/debsources.vim index f90476fe25..2352466a3b 100644 --- a/runtime/syntax/debsources.vim +++ b/runtime/syntax/debsources.vim @@ -2,7 +2,7 @@ " Language: Debian sources.list " Maintainer: Debian Vim Maintainers " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl> -" Last Change: 2019 Apr 21 +" Last Change: 2020 Nov 28 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debsources.vim " Standard syntax initialization @@ -23,19 +23,20 @@ let s:cpo = &cpo set cpo-=C let s:supported = [ \ 'oldstable', 'stable', 'testing', 'unstable', 'experimental', - \ 'wheezy', 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm', - \ 'sid', 'rc-buggy', + \ 'jessie', 'stretch', 'buster', 'bullseye', 'bookworm', + \ 'trixie', 'sid', 'rc-buggy', \ - \ 'trusty', 'xenial', 'bionic', 'cosmic', 'disco', 'eoan', 'devel' + \ 'trusty', 'xenial', 'bionic', 'focal', 'groovy', 'hirsute', 'devel' \ ] let s:unsupported = [ \ 'buzz', 'rex', 'bo', 'hamm', 'slink', 'potato', - \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze', + \ 'woody', 'sarge', 'etch', 'lenny', 'squeeze', 'wheezy', \ \ 'warty', 'hoary', 'breezy', 'dapper', 'edgy', 'feisty', \ 'gutsy', 'hardy', 'intrepid', 'jaunty', 'karmic', 'lucid', \ 'maverick', 'natty', 'oneiric', 'precise', 'quantal', 'raring', 'saucy', - \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful' + \ 'utopic', 'vivid', 'wily', 'yakkety', 'zesty', 'artful', 'cosmic', + \ 'disco', 'eoan' \ ] let &cpo=s:cpo diff --git a/runtime/syntax/desktop.vim b/runtime/syntax/desktop.vim index 915107887a..2c1102238d 100644 --- a/runtime/syntax/desktop.vim +++ b/runtime/syntax/desktop.vim @@ -1,107 +1,267 @@ " Vim syntax file -" Language: .desktop, .directory files -" according to freedesktop.org specification 0.9.4 -" http://pdx.freedesktop.org/Standards/desktop-entry-spec/desktop-entry-spec-0.9.4.html -" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) -" Last Change: 2016 Apr 02 -" (added "Keywords") -" Version Info: desktop.vim 0.9.4-1.2 +" Language: XDG desktop entry +" Filenames: *.desktop, *.directory +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) +" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl ) +" Last Change: 2020-06-11 +" Version Info: desktop.vim 1.5 +" References: +" - https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.5.html (2020-04-27) +" - https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-0.11.html (2006-02-07) " quit when a syntax file was already loaded if exists("b:current_syntax") - finish + finish endif +let s:cpo_save = &cpo +set cpo&vim +syn case match + +" Variable {{{1 " This syntax file can be used to all *nix configuration files similar to dos -" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. But -" you can also enforce strict following of freedesktop.org standard for -" .desktop and .directory files . Set (eg. in vimrc) -" let enforce_freedesktop_standard = 1 -" and nonstandard extensions not following X- notation will not be highlighted. -if exists("enforce_freedesktop_standard") - let b:enforce_freedesktop_standard = 1 +" ini format (eg. .xawtv, .radio, kde rc files) - this is default mode. +" By default strict following of freedesktop.org standard is enforced. +" To highlight nonstandard extensions that does not begin with X-, set +" let g:desktop_enable_nonstd = v:true +" Note that this may cause wrong highlight. +" To highlight KDE-reserved features, set +" let g:desktop_enable_kde = v:true +" g:desktop_enable_kde follows g:desktop_enable_nonstd if not supplied + +if exists("g:desktop_enable_nonstd") && g:desktop_enable_nonstd + let s:desktop_enable_nonstd = v:true else - let b:enforce_freedesktop_standard = 0 + let s:desktop_enable_nonstd = v:false endif -" case on -syn case match +if exists("g:desktop_enable_kde") && g:desktop_enable_kde || s:desktop_enable_nonstd + let s:desktop_enable_kde = v:true +else + let s:desktop_enable_kde = v:false +endif + +" Comment {{{1 +syn match dtComment /^#.*$/ -" General -if b:enforce_freedesktop_standard == 0 - syn match dtNotStLabel "^.\{-}=\@=" nextgroup=dtDelim +" Error {{{1 +syn match dtError /\%(^\s.*\|\s\+$\)/ + +" Group Header {{{1 +" ASCII printable characters except for brackets [ (0x5B) and ] (0x5D) +syn match dtGroup /^\[[\x20-\x5A\x5C\x5E-\x7E]\+\]$/ + +" Entries {{{1 +syn match dtDelim /=/ contained +" lang_territory.codeset@modifier +syn match dtLocaleSuffix + \ /\[\%(C\|POSIX\|[a-z]\{2,4}\%(_[A-Z0-9]\{2,3}\)\?\)\%(\.[A-Za-z0-9_-]\+\)\?\%(@[A-Za-z]\+\)\?\]\ze\s*=/ + \ contained + +" Boolean Value {{{2 +syn match dtBoolean + \ /^\%(DBusActivatable\|Hidden\|NoDisplay\|PrefersNonDefaultGPU\|StartupNotify\|Terminal\)\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent +syn keyword dtBooleanKey + \ DBusActivatable Hidden NoDisplay PrefersNonDefaultGPU StartupNotify Terminal + \ contained nextgroup=dtDelim + +if s:desktop_enable_kde + syn match dtBoolean + \ /^ReadOnly\s*=\s*\%(true\|false\)/ + \ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent + syn keyword dtBooleanKey + \ ReadOnly + \ contained nextgroup=dtDelim endif +syn keyword dtBooleanValue true false contained -syn match dtGroup /^\s*\[.*\]/ -syn match dtComment /^\s*#.*$/ -syn match dtDelim /=/ contained +" Numeric Value {{{2 +" icon theme +syn match dtNumeric /^\%(MaxSize\|MinSize\|Size\|Threshold\)\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal +syn keyword dtNumericKey + \ MaxSize MinSize Size Threshold + \ contained nextgroup=dtDelim -" Locale -syn match dtLocale /^\s*\<\(Name\|GenericName\|Comment\|SwallowTitle\|Icon\|UnmountIcon\)\>.*/ contains=dtLocaleKey,dtLocaleName,dtDelim transparent -syn keyword dtLocaleKey Name GenericName Comment SwallowTitle Icon UnmountIcon nextgroup=dtLocaleName containedin=dtLocale -syn match dtLocaleName /\(\[.\{-}\]\s*=\@=\|\)/ nextgroup=dtDelim containedin=dtLocale contained +if s:desktop_enable_kde + syn match dtNumeric /^InitialPreference\s*=\s*\d\+/ contains=dtNumericKey,dtDelim,dtNumericDecimal + syn keyword dtNumericKey + \ InitialPreference + \ contained nextgroup=dtDelim +endif + +syn match dtNumericDecimal /\<\d\+$/ contained -" Numeric -syn match dtNumeric /^\s*\<Version\>/ contains=dtNumericKey,dtDelim -syn keyword dtNumericKey Version nextgroup=dtDelim containedin=dtNumeric contained +" String Value {{{2 +syn match dtString + \ /^\%(Actions\|Implements\|MimeType\|NotShowIn\|OnlyShowIn\|Path\|StartupWMClass\|URL\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Actions Implements MimeType NotShowIn OnlyShowIn Path StartupWMClass URL Version + \ contained nextgroup=dtDelim -" Boolean -syn match dtBoolean /^\s*\<\(StartupNotify\|ReadOnly\|Terminal\|Hidden\|NoDisplay\)\>.*/ contains=dtBooleanKey,dtDelim,dtBooleanValue transparent -syn keyword dtBooleanKey StartupNotify ReadOnly Terminal Hidden NoDisplay nextgroup=dtDelim containedin=dtBoolean contained -syn keyword dtBooleanValue true false containedin=dtBoolean contained +" icon theme +syn match dtString + \ /^\%(Context\|Directories\|Example\|Inherits\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent +syn keyword dtStringKey + \ Context Directories Example Inherits + \ contained nextgroup=dtDelim -" String -syn match dtString /^\s*\<\(Encoding\|Icon\|Path\|Actions\|FSType\|MountPoint\|UnmountIcon\|URL\|Keywords\|Categories\|OnlyShowIn\|NotShowIn\|StartupWMClass\|FilePattern\|MimeType\)\>.*/ contains=dtStringKey,dtDelim transparent -syn keyword dtStringKey Type Encoding TryExec Exec Path Actions FSType MountPoint URL Keywords Categories OnlyShowIn NotShowIn StartupWMClass FilePattern MimeType nextgroup=dtDelim containedin=dtString contained +if s:desktop_enable_kde + syn match dtString + \ /^\%(Dev\|DocPath\|FSType\|MountPoint\|ServiceTypes\)\s*=.*\S/ + \ contains=dtStringKey,dtDelim transparent + syn keyword dtStringKey + \ Dev DocPath FSType MountPoint ServiceTypes + \ contained nextgroup=dtDelim +endif -" Exec -syn match dtExec /^\s*\<\(Exec\|TryExec\|SwallowExec\)\>.*/ contains=dtExecKey,dtDelim,dtExecParam transparent -syn keyword dtExecKey Exec TryExec SwallowExec nextgroup=dtDelim containedin=dtExec contained -syn match dtExecParam /%[fFuUnNdDickv]/ containedin=dtExec contained +" Categories {{{3 +" https://specifications.freedesktop.org/menu-spec/menu-spec-1.0.html#category-registry +syn match dtCategories /^Categories\s*=.\+\S/ contains=dtCategoriesKey,dtDelim,dtCategoriesValue transparent +syn keyword dtCategoriesKey + \ Categories + \ contained nextgroup=dtDelim -" Type -syn match dtType /^\s*\<Type\>.*/ contains=dtTypeKey,dtDelim,dtTypeValue transparent -syn keyword dtTypeKey Type nextgroup=dtDelim containedin=dtType contained -syn keyword dtTypeValue Application Link FSDevice Directory containedin=dtType contained +" Main Categories +syn keyword dtCategoriesValue + \ Audio AudioVideo Development Education Game Graphics Network Office + \ Settings System Utility Video + \ contained -" X-Addition -syn match dtXAdd /^\s*X-.*/ contains=dtXAddKey,dtDelim transparent -syn match dtXAddKey /^\s*X-.\{-}\s*=\@=/ nextgroup=dtDelim containedin=dtXAdd contains=dtXLocale contained +" Additional Categories +syn keyword dtCategoriesValue + \ BoardGame Chat Clock Geoscience Presentation 2DGraphics 3DGraphics + \ Accessibility ActionGame AdventureGame Amusement ArcadeGame Archiving + \ Art ArtificialIntelligence Astronomy AudioVideoEditing Biology + \ BlocksGame BoardGame Building Calculator Calendar CardGame Chart Chat + \ Chemistry Clock Compression ComputerScience ConsoleOnly Construction + \ ContactManagement Core DataVisualization Database Debugger + \ DesktopSettings Dialup Dictionary DiscBurning Documentation Economy + \ Electricity Electronics Email Emulator Engineering FileManager + \ FileTools FileTransfer Filesystem Finance FlowChart GNOME GTK + \ GUIDesigner Geography Geology Geoscience HamRadio HardwareSettings + \ History IDE IRCClient ImageProcessing InstantMessaging Java KDE + \ KidsGame Languages Literature LogicGame Math MedicalSoftware Midi + \ Mixer Monitor Motif Music News NumericalAnalysis OCR P2P PDA + \ PackageManager ParallelComputing Photography Physics Player + \ Presentation Printing Profiling ProjectManagement Publishing Qt + \ RasterGraphics Recorder RemoteAccess RevisionControl Robotics + \ RolePlaying Scanning Science Security Sequencer Simulation Sports + \ SportsGame Spreadsheet StrategyGame TV Telephony TelephonyTools + \ TerminalEmulator TextEditor TextTools Translation Tuner VectorGraphics + \ VideoConference Viewer WebBrowser WebDevelopment WordProcessor + \ contained -" Locale for X-Addition -syn match dtXLocale /\[.\{-}\]\s*=\@=/ containedin=dtXAddKey contained +" Reserved Category +syn keyword dtCategoriesValue + \ Applet Screensaver Shell TrayIcon + \ contained + +" Exec/TryExec {{{3 +syn match dtExec /^\%(Exec\|TryExec\)\s*=.\+\S/ contains=dtExecKey,dtDelim,dtExecParam transparent +syn keyword dtExecKey + \ Exec TryExec + \ contained nextgroup=dtDelim +" code for file(s), URL(s), etc +syn match dtExecParam /\s\zs%[fFuUick]\ze\%(\W\|$\)/ contained + +" Type {{{3 +syn match dtType /^Type\s*=\s*\S\+/ contains=dtTypeKey,dtDelim,dtTypeValue transparent +syn keyword dtTypeKey + \ Type + \ contained nextgroup=dtDelim +syn keyword dtTypeValue + \ Application Directory Link + \ contained + +if s:desktop_enable_kde + syn keyword dtTypeValue + \ FSDevice Service ServiceType + \ contained +endif + + +" Version {{{3 +syn match dtVersion /^Version\s*=\s*\S\+/ contains=dtVersionKey,dtDelim,dtVersionValue transparent +syn keyword dtVersionKey + \ Version + \ contained nextgroup=dtDelim +syn match dtVersionValue /[0-9]\+\%(\.[0-9]\+\)\{1,2}$/ contained + +" Localestring Value {{{2 +syn match dtLocalestring + \ /^\%(Comment\|GenericName\|Keywords\|Name\)\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtLocalestringKey,dtLocaleSuffix,dtDelim transparent +syn keyword dtLocalestringKey + \ Comment GenericName Keywords Name + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite + +" Iconstring Value {{{2 +syn match dtIconstring + \ /^Icon\s*=.*\S/ + \ contains=dtIconstringKey,dtDelim transparent +syn keyword dtIconstringKey + \ Icon + \ contained nextgroup=dtDelim skipwhite + +if s:desktop_enable_kde + syn match dtIconstring + \ /^UnmountIcon\>\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtIconstringKey,dtLocaleSuffix,dtDelim transparent + syn keyword dtIconstringKey + \ UnmountIcon + \ contained nextgroup=dtLocaleSuffix,dtDelim skipwhite +endif + +" X-Extension {{{2 +syn match dtXExtension /^X-[0-9A-Za-z-]*\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtXExtensionKey,dtLocaleSuffix,dtDelim transparent +syn match dtXExtensionKey /^X-[0-9A-Za-z-]*/ contained nextgroup=dtLocaleSuffix,dtDelim + +" non standard {{{2 +if s:desktop_enable_nonstd + syn match dtNonStdLabel /^[0-9A-Za-z-]\+\%(\[.\{-}\]\)\?\s*=.*\S/ + \ contains=dtNonStdLabelKey,dtLocaleSuffix,dtDelim transparent + syn match dtNonStdLabelKey /^[0-9A-Za-z-]\+/ contained nextgroup=dtLocaleSuffix,dtDelim +endif -" Locale for all -syn match dtALocale /\[.\{-}\]\s*=\@=/ containedin=ALL +" Highlight {{{1 +hi def link dtComment Comment +hi def link dtError Error +hi def link dtGroup Special -" Define the default highlighting. -" Only when an item doesn't have highlighting yet +hi def link dtDelim Delimiter +hi def link dtLocaleSuffix Identifier -hi def link dtGroup Special -hi def link dtComment Comment -hi def link dtDelim String +hi def link dtBooleanKey Type +hi def link dtBooleanValue Boolean -hi def link dtLocaleKey Type -hi def link dtLocaleName Identifier -hi def link dtXLocale Identifier -hi def link dtALocale Identifier +hi def link dtNumericKey Type +hi def link dtNumericDecimal Number -hi def link dtNumericKey Type +hi def link dtStringKey Type +hi def link dtCategoriesKey Type +hi def link dtCategoriesValue Constant +hi def link dtExecKey Type +hi def link dtExecParam Special +hi def link dtTypeKey Type +hi def link dtTypeValue Constant +hi def link dtVersionKey Type +hi def link dtVersionValue Constant -hi def link dtBooleanKey Type -hi def link dtBooleanValue Constant +hi def link dtLocalestringKey Type -hi def link dtStringKey Type +hi def link dtIconStringKey Type -hi def link dtExecKey Type -hi def link dtExecParam Special -hi def link dtTypeKey Type -hi def link dtTypeValue Constant -hi def link dtNotStLabel Type -hi def link dtXAddKey Type +hi def link dtXExtensionKey Type +hi def link dtNonStdLabelKey Type +" Clean Up {{{1 let b:current_syntax = "desktop" +let &cpo = s:cpo_save -" vim:ts=8 +" vim:ts=8:sw=2:fdm=marker diff --git a/runtime/syntax/diff.vim b/runtime/syntax/diff.vim index b656cd97a6..408556ac13 100644 --- a/runtime/syntax/diff.vim +++ b/runtime/syntax/diff.vim @@ -2,7 +2,7 @@ " Language: Diff (context or unified) " Maintainer: Bram Moolenaar <Bram@vim.org> " Translations by Jakson Alves de Aquino. -" Last Change: 2016 Apr 02 +" Last Change: 2020 Dec 30 " Quit when a (custom) syntax file was already loaded if exists("b:current_syntax") @@ -346,11 +346,18 @@ syn match diffLine "^---$" syn match diffLine "^\d\+\(,\d\+\)\=[cda]\d\+\>.*" syn match diffFile "^diff\>.*" -syn match diffFile "^+++ .*" syn match diffFile "^Index: .*" syn match diffFile "^==== .*" -syn match diffOldFile "^\*\*\* .*" -syn match diffNewFile "^--- .*" + +if search('^@@ -\S\+ +\S\+ @@', 'nw', '', 100) + " unified + syn match diffOldFile "^--- .*" + syn match diffNewFile "^+++ .*" +else + " context / old style + syn match diffOldFile "^\*\*\* .*" + syn match diffNewFile "^--- .*" +endif " Used by git syn match diffIndexLine "^index \x\x\x\x.*" diff --git a/runtime/syntax/dot.vim b/runtime/syntax/dot.vim index 0fdd6ea080..68a0f57a98 100644 --- a/runtime/syntax/dot.vim +++ b/runtime/syntax/dot.vim @@ -1,16 +1,22 @@ -" Vim syntax file " Language: Dot " Filenames: *.dot " Maintainer: Markus Mottl <markus.mottl@gmail.com> " URL: http://www.ocaml.info/vim/syntax/dot.vim -" Last Change: 2011 May 17 - improved identifier matching + two new keywords +" Last Change: 2021 Mar 24 - better attr + escape string matching, new keywords (Farbod Salamat-Zadeh) +" 2011 May 17 - improved identifier matching + two new keywords " 2001 May 04 - initial version -" quit when a syntax file was already loaded -if exists("b:current_syntax") +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") finish endif +let s:keepcpo = &cpo +set cpo&vim + " Errors syn match dotParErr ")" syn match dotBrackErr "]" @@ -29,39 +35,43 @@ syn keyword dotTodo contained TODO FIXME XXX " Strings syn region dotString start=+"+ skip=+\\\\\|\\"+ end=+"+ -" General keywords -syn keyword dotKeyword digraph node edge subgraph - -" Graph attributes -syn keyword dotType center layers margin mclimit name nodesep nslimit -syn keyword dotType ordering page pagedir rank rankdir ranksep ratio -syn keyword dotType rotate size - -" Node attributes -syn keyword dotType distortion fillcolor fontcolor fontname fontsize -syn keyword dotType height layer orientation peripheries regular -syn keyword dotType shape shapefile sides skew width +" Escape strings +syn match dotEscString /\v\\(N|G|E|T|H|L)/ containedin=dotString +syn match dotEscString /\v\\(n|l|r)/ containedin=dotString -" Edge attributes -syn keyword dotType arrowhead arrowsize arrowtail constraint decorateP -syn keyword dotType dir headclip headlabel headport labelangle labeldistance -syn keyword dotType labelfontcolor labelfontname labelfontsize -syn keyword dotType minlen port_label_distance samehead sametail -syn keyword dotType tailclip taillabel tailport weight - -" Shared attributes (graphs, nodes, edges) -syn keyword dotType color - -" Shared attributes (graphs and edges) -syn keyword dotType bgcolor label URL - -" Shared attributes (nodes and edges) -syn keyword dotType fontcolor fontname fontsize layer style +" General keywords +syn keyword dotKeyword graph digraph subgraph node edge strict + +" Node, edge and graph attributes +syn keyword dotType _background area arrowhead arrowsize arrowtail bb bgcolor + \ center charset class clusterrank color colorscheme comment compound + \ concentrate constraint Damping decorate defaultdist dim dimen dir + \ diredgeconstraints distortion dpi edgehref edgetarget edgetooltip + \ edgeURL epsilon esep fillcolor fixedsize fontcolor fontname fontnames + \ fontpath fontsize forcelabels gradientangle group head_lp headclip + \ headhref headlabel headport headtarget headtooltip headURL height href + \ id image imagepath imagepos imagescale inputscale K label label_scheme + \ labelangle labeldistance labelfloat labelfontcolor labelfontname + \ labelfontsize labelhref labeljust labelloc labeltarget labeltooltip + \ labelURL landscape layer layerlistsep layers layerselect layersep + \ layout len levels levelsgap lhead lheight lp ltail lwidth margin + \ maxiter mclimit mindist minlen mode model mosek newrank nodesep + \ nojustify normalize notranslate nslimit nslimit1 ordering orientation + \ outputorder overlap overlap_scaling overlap_shrink pack packmode pad + \ page pagedir pencolor penwidth peripheries pin pos quadtree quantum + \ rank rankdir ranksep ratio rects regular remincross repulsiveforce + \ resolution root rotate rotation samehead sametail samplepoints scale + \ searchsize sep shape shapefile showboxes sides size skew smoothing + \ sortv splines start style stylesheet tail_lp tailclip tailhref + \ taillabel tailport tailtarget tailtooltip tailURL target tooltip + \ truecolor URL vertices viewport voro_margin weight width xdotversion + \ xlabel xlp z " Special chars syn match dotKeyChar "=" syn match dotKeyChar ";" syn match dotKeyChar "->" +syn match dotKeyChar "--" " Identifier syn match dotIdentifier /\<\w\+\(:\w\+\)\?\>/ @@ -71,27 +81,41 @@ syn sync minlines=50 syn sync maxlines=500 " Define the default highlighting. -" Only when an item doesn't have highlighting yet - -hi def link dotParErr Error -hi def link dotBraceErr Error -hi def link dotBrackErr Error - -hi def link dotComment Comment -hi def link dotTodo Todo - -hi def link dotParEncl Keyword -hi def link dotBrackEncl Keyword -hi def link dotBraceEncl Keyword - -hi def link dotKeyword Keyword -hi def link dotType Type -hi def link dotKeyChar Keyword - -hi def link dotString String -hi def link dotIdentifier Identifier - +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_dot_syntax_inits") + if version < 508 + let did_dot_syntax_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink dotParErr Error + HiLink dotBraceErr Error + HiLink dotBrackErr Error + + HiLink dotComment Comment + HiLink dotTodo Todo + + HiLink dotParEncl Keyword + HiLink dotBrackEncl Keyword + HiLink dotBraceEncl Keyword + + HiLink dotKeyword Keyword + HiLink dotType Type + HiLink dotKeyChar Keyword + + HiLink dotString String + HiLink dotEscString Keyword + HiLink dotIdentifier Identifier + + delcommand HiLink +endif let b:current_syntax = "dot" +let &cpo = s:keepcpo +unlet s:keepcpo + " vim: ts=8 diff --git a/runtime/syntax/doxygen.vim b/runtime/syntax/doxygen.vim index adc0c41dd6..cfd5452ee4 100644 --- a/runtime/syntax/doxygen.vim +++ b/runtime/syntax/doxygen.vim @@ -2,10 +2,10 @@ " Language: doxygen on top of c, cpp, idl, java, php " Maintainer: Michael Geddes <vimmer@frog.wheelycreek.net> " Author: Michael Geddes -" Last Change: November 2017 (\throws by Candy Gumdrop) -" Version: 1.27 +" Last Change: December 2020 +" Version: 1.30 " -" Copyright 2004-2017 Michael Geddes +" Copyright 2004-2020 Michael Geddes " Please feel free to use, modify & distribute all or part of this script, " providing this copyright message remains. " I would appreciate being acknowledged in any derived scripts, and would @@ -170,7 +170,7 @@ endif fun! s:DxyCreateSmallSpecial( kword, name ) - let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,][0-9a-zA-Z_]\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+' + let mx='[-:0-9A-Za-z_%=&+*/!~>|]\@<!\([-0-9A-Za-z_%=+*/!~>|#]\+[-0-9A-Za-z_%=+*/!~>|]\@!\|\\[\\<>&.]@\|[.,]\w\@=\|::\|([^)]*)\|&[0-9a-zA-Z]\{2,7};\)\+' exe 'syn region doxygenSpecial'.a:name.'Word contained start=+'.a:kword.'+ end=+\(\_s\+'.mx.'\)\@<=[-a-zA-Z_0-9+*/^%|~!=&\\]\@!+ skipwhite contains=doxygenContinueCommentWhite,doxygen'.a:name.'Word' exe 'syn match doxygen'.a:name.'Word contained "\_s\@<='.mx.'" contains=doxygenHtmlSpecial,@Spell keepend' endfun @@ -186,7 +186,7 @@ endif syn match doxygenSmallSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\>\|\<link\>\|f\$\|[$\\&<>#]\)\@=+ nextgroup=doxygenOtherLink,doxygenHyperLink,doxygenHashLink,doxygenFormula,doxygenSymbol,doxygenSpecial.*Word " Now for special characters - syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion + syn match doxygenSpecial contained +[@\\]\(\<[npcbea]\>\|\<em\>\|\<ref\|\<link\>\>\|\<f\$\|[$\\&<>#]\)\@!+ nextgroup=doxygenParam,doxygenTParam,doxygenRetval,doxygenBriefWord,doxygenBold,doxygenBOther,doxygenOther,doxygenOtherTODO,doxygenOtherWARN,doxygenOtherBUG,doxygenPage,doxygenGroupDefine,doxygenCodeRegion,doxygenVerbatimRegion,doxygenDotRegion " doxygenOtherLink,doxygenSymbol,doxygenFormula,doxygenErrorSpecial,doxygenSpecial.*Word " syn match doxygenGroupDefine contained +@\@<=[{}]+ @@ -199,13 +199,14 @@ endif syn keyword doxygenParam contained param nextgroup=doxygenParamName,doxygenParamDirection skipwhite syn keyword doxygenTParam contained tparam nextgroup=doxygenParamName skipwhite syn match doxygenParamName contained +[A-Za-z0-9_:]\++ nextgroup=doxygenSpecialMultilineDesc skipwhite - syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenParamName skipwhite + syn keyword doxygenRetval contained retval throw throws exception nextgroup=doxygenReturnValue skipwhite + syn match doxygenReturnValue contained +\S\++ nextgroup=doxygenSpecialMultilineDesc skipwhite " Match one line identifiers. syn keyword doxygenOther contained addindex anchor \ dontinclude endhtmlonly endlatexonly showinitializer hideinitializer - \ example htmlonly image include includelineno ingroup internal latexonly line - \ overload relates relatesalso sa skip skipline + \ example htmlonly image include includelineno ingroup latexonly line + \ overload relates related relatesalso relatedalso sa skip skipline \ until verbinclude version addtogroup htmlinclude copydoc dotfile \ xmlonly endxmlonly \ nextgroup=doxygenSpecialOnelineDesc copybrief copydetails copyright dir extends @@ -241,8 +242,8 @@ endif syn keyword doxygenOther contained par nextgroup=doxygenHeaderLine syn region doxygenHeaderLine start=+.+ end=+^+ contained skipwhite nextgroup=doxygenSpecialMultilineDesc - - syn keyword doxygenOther contained arg author authors date deprecated li return returns see invariant note post pre remarks since test nextgroup=doxygenSpecialMultilineDesc + " Match the start of other multiline comments. + syn keyword doxygenOther contained arg author authors date deprecated li return returns result see invariant note post pre remarks since test internal nextgroup=doxygenSpecialMultilineDesc syn keyword doxygenOtherTODO contained todo attention nextgroup=doxygenSpecialMultilineDesc syn keyword doxygenOtherWARN contained warning nextgroup=doxygenSpecialMultilineDesc syn keyword doxygenOtherBUG contained bug nextgroup=doxygenSpecialMultilineDesc @@ -256,7 +257,7 @@ endif syn match doxygenContinueLinkComment contained +^\s*\*\=[^/]+me=e-1 nextgroup=doxygenLinkRest syn match doxygenLinkError "\*/" contained " #Link hilighting. - syn match doxygenHashLink /\([a-zA-Z_][0-9a-zA-Z_]*\)\?#\(\.[0-9a-zA-Z_]\@=\|[a-zA-Z0-9_]\+\|::\|()\)\+/ contained contains=doxygenHashSpecial + syn match doxygenHashLink /\(\h\w*\)\?#\(\.\w\@=\|\w\+\|::\|()\)\+/ contained contains=doxygenHashSpecial syn match doxygenHashSpecial /#/ contained syn match doxygenHyperLink /\(\s\|^\s*\*\?\)\@<=\(http\|https\|ftp\):\/\/[-0-9a-zA-Z_?&=+#%/.!':;@~]\+/ contained @@ -264,12 +265,12 @@ endif syn match doxygenPage "[\\@]page\>"me=s+1 contained skipwhite nextgroup=doxygenPagePage syn keyword doxygenPagePage page contained skipwhite nextgroup=doxygenPageIdent syn region doxygenPageDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenBody - syn match doxygenPageIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenPageDesc + syn match doxygenPageIdent "\<\w\+\>" contained nextgroup=doxygenPageDesc " Handle section syn keyword doxygenOther defgroup section subsection subsubsection weakgroup contained skipwhite nextgroup=doxygenSpecialIdent syn region doxygenSpecialSectionDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend skipwhite skipnl nextgroup=doxygenContinueCommentWhite - syn match doxygenSpecialIdent "\<[a-zA-Z_0-9]\+\>" contained nextgroup=doxygenSpecialSectionDesc + syn match doxygenSpecialIdent "\<\w\+\>" contained nextgroup=doxygenSpecialSectionDesc " Does the one-line description for the one-line type identifiers. syn region doxygenSpecialTypeOnelineDesc start=+.\++ end=+$+ contained skipwhite contains=doxygenSmallSpecial,@doxygenHtmlGroup keepend @@ -421,7 +422,7 @@ endif if &guifont == '' let font="font='FreeSerif 12'" else - let font="font='".substitute(&guifont, '^.\{-}\([0-9]\+\)$', 'FreeSerif \1','')."'" + let font="font='".substitute(&guifont, '^.\{-}\(\d\+\)$', 'FreeSerif \1','')."'" endif elseif has('gui_win32') || has('gui_win16') || has('gui_win95') @@ -475,6 +476,7 @@ endif SynColor doxygenSpecialHeading cterm=bold ctermfg=LightBlue guifg=LightBlue gui=bold SynColor doxygenPrev ctermfg=LightGreen guifg=LightGreen endif + SynLink doxygenValue doxygenParamName else SynLink doxygenComment SpecialComment SynLink doxygenBrief Statement @@ -486,7 +488,10 @@ endif SynLink doxygenSpecialOnelineDesc Statement SynLink doxygenSpecialHeading Statement SynLink doxygenPrev SpecialComment + SynLink doxygenValue Constant endif + SynLink doxygenTParam doxygenParam + endfun call s:Doxygen_Hilights() @@ -550,6 +555,7 @@ endif SynLink doxygenLinkRest doxygenSpecialMultilineDesc SynLink doxygenHyperLink doxygenLinkWord SynLink doxygenHashLink doxygenLinkWord + SynLink doxygenReturnValue doxygenValue SynLink doxygenPage doxygenSpecial SynLink doxygenPagePage doxygenBOther diff --git a/runtime/syntax/dtd.vim b/runtime/syntax/dtd.vim index ae0bd1288e..ef0592e1d1 100644 --- a/runtime/syntax/dtd.vim +++ b/runtime/syntax/dtd.vim @@ -1,10 +1,11 @@ " Vim syntax file -" Language: DTD (Document Type Definition for XML) -" Maintainer: Johannes Zellner <johannes@zellner.org> -" Author and previous maintainer: -" Daniel Amyot <damyot@site.uottawa.ca> -" Last Change: Tue, 27 Apr 2004 14:54:59 CEST -" Filenames: *.dtd +" Language: DTD (Document Type Definition for XML) +" Maintainer: Christian Brabandt <cb@256bit.org> +" Repository: https://github.com/chrisbra/vim-xml-ftplugin +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Author: Daniel Amyot <damyot@site.uottawa.ca> +" Last Changed: Sept 24, 2019 +" Filenames: *.dtd " " REFERENCES: " http://www.w3.org/TR/html40/ diff --git a/runtime/syntax/dune.vim b/runtime/syntax/dune.vim index f901813d24..b4254057c0 100644 --- a/runtime/syntax/dune.vim +++ b/runtime/syntax/dune.vim @@ -1,7 +1,8 @@ +" Vim syntax file " Language: Dune buildsystem " Maintainer: Markus Mottl <markus.mottl@gmail.com> " Anton Kochkov <anton.kochkov@gmail.com> -" URL: https://github.com/rgrinberg/vim-ocaml +" URL: https://github.com/ocaml/vim-ocaml " Last Change: " 2019 Feb 27 - Add newer keywords to the syntax (Simon Cruanes) " 2018 May 8 - Check current_syntax (Kawahara Satoru) @@ -28,7 +29,7 @@ syn keyword lispKey ppx_runtime_libraries virtual_deps js_of_ocaml link_flags syn keyword lispKey javascript_files flags ocamlc_flags ocamlopt_flags pps staged_pps syn keyword lispKey library_flags c_flags c_library_flags kind package action syn keyword lispKey deps targets locks fallback -syn keyword lispKey inline_tests tests names +syn keyword lispKey inline_tests tests test names syn keyword lispAtom true false diff --git a/runtime/syntax/elf.vim b/runtime/syntax/elf.vim index e695dbc79a..c8e5a61bd1 100644 --- a/runtime/syntax/elf.vim +++ b/runtime/syntax/elf.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: ELF -" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> +" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> " Last Change: Son 22 Jun 2003 20:43:14 CEST " Filenames: *.ab,*.am " URL: http://www.cvjb.de/comp/vim/elf.vim diff --git a/runtime/syntax/elmfilt.vim b/runtime/syntax/elmfilt.vim index ec97af038d..d995853e8e 100644 --- a/runtime/syntax/elmfilt.vim +++ b/runtime/syntax/elmfilt.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Elm Filter rules -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 8 +" Version: 9 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_ELMFILT " quit when a syntax file was already loaded diff --git a/runtime/syntax/erlang.vim b/runtime/syntax/erlang.vim index 870fcca106..b8cbf07bb2 100644 --- a/runtime/syntax/erlang.vim +++ b/runtime/syntax/erlang.vim @@ -2,7 +2,7 @@ " Language: Erlang (http://www.erlang.org) " Maintainer: Csaba Hoch <csaba.hoch@gmail.com> " Contributor: Adam Rutkowski <hq@mtod.org> -" Last Update: 2017-Mar-05 +" Last Update: 2020-May-26 " License: Vim license " URL: https://github.com/vim-erlang/vim-erlang-runtime @@ -44,7 +44,7 @@ setlocal iskeyword+=$,@-@ " Comments syn match erlangComment '%.*$' contains=erlangCommentAnnotation,erlangTodo -syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained +syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|param\|private\|equiv\|spec\|throws\)' contained syn match erlangCommentAnnotation /`[^']*'/ contained syn keyword erlangTodo TODO FIXME XXX contained @@ -79,6 +79,7 @@ syn match erlangGlobalFuncRef '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\ syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*' syn match erlangMacro '??\=[[:alnum:]_@]\+' syn match erlangMacro '\%(-define(\)\@<=[[:alnum:]_@]\+' +syn region erlangQuotedMacro start=/??\=\s*'/ end=/'/ contains=erlangQuotedAtomModifier syn match erlangMap '#' syn match erlangRecord '#\s*\l[[:alnum:]_@]*' syn region erlangQuotedRecord start=/#\s*'/ end=/'/ contains=erlangQuotedAtomModifier @@ -91,7 +92,7 @@ syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary " Constants and Directives syn match erlangUnknownAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment -syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\)\>' contains=erlangComment +syn match erlangAttribute '^\s*-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\(_type\)\=\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|optional_callbacks\)\>' contains=erlangComment syn match erlangInclude '^\s*-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment syn match erlangRecordDef '^\s*-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment syn match erlangDefine '^\s*-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment @@ -116,14 +117,14 @@ syn keyword erlangBIF garbage_collect get get_keys group_leader contained syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained -syn keyword erlangBIF is_float is_function is_integer is_list contained +syn keyword erlangBIF is_float is_function is_integer is_list is_map is_map_key contained syn keyword erlangBIF is_number is_pid is_port is_process_alive contained syn keyword erlangBIF is_record is_reference is_tuple length link contained syn keyword erlangBIF list_to_atom list_to_binary contained syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained -syn keyword erlangBIF list_to_tuple load_module make_ref max min contained -syn keyword erlangBIF module_loaded monitor monitor_node node contained +syn keyword erlangBIF list_to_tuple load_module make_ref map_size max contained +syn keyword erlangBIF min module_loaded monitor monitor_node node contained syn keyword erlangBIF nodes now open_port pid_to_list port_close contained syn keyword erlangBIF port_command port_connect pre_loaded contained syn keyword erlangBIF process_flag process_flag process_info contained @@ -191,6 +192,7 @@ hi def link erlangGlobalFuncCall Function hi def link erlangGlobalFuncRef Function hi def link erlangVariable Normal hi def link erlangMacro Normal +hi def link erlangQuotedMacro Normal hi def link erlangRecord Normal hi def link erlangQuotedRecord Normal hi def link erlangMap Normal @@ -202,6 +204,7 @@ hi def link erlangGlobalFuncCall Normal hi def link erlangGlobalFuncRef Normal hi def link erlangVariable Identifier hi def link erlangMacro Macro +hi def link erlangQuotedMacro Macro hi def link erlangRecord Structure hi def link erlangQuotedRecord Structure hi def link erlangMap Structure diff --git a/runtime/syntax/exports.vim b/runtime/syntax/exports.vim index 55efbb1e50..05a3f1acfe 100644 --- a/runtime/syntax/exports.vim +++ b/runtime/syntax/exports.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: exports -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 7 +" Version: 8 " Notes: This file includes both SysV and BSD 'isms " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_EXPORTS diff --git a/runtime/syntax/forth.vim b/runtime/syntax/forth.vim index a1912461e6..9b39a7fd7d 100644 --- a/runtime/syntax/forth.vim +++ b/runtime/syntax/forth.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: FORTH " Current Maintainer: Johan Kotlinski <kotlinski@gmail.com> -" Previous Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> +" Previous Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> " Last Change: 2018-03-29 " Filenames: *.fs,*.ft " URL: https://github.com/jkotlinski/forth.vim diff --git a/runtime/syntax/fortran.vim b/runtime/syntax/fortran.vim index 4c26e78f16..b5c9b1ef8d 100644 --- a/runtime/syntax/fortran.vim +++ b/runtime/syntax/fortran.vim @@ -1,17 +1,17 @@ " Vim syntax file " Language: Fortran 2008 (and older: Fortran 2003, 95, 90, and 77) -" Version: 100 -" Last Change: 2016 Oct. 29 +" Version: (v104) 2021 April 06 " Maintainer: Ajit J. Thakkar <ajit@unb.ca>; <http://www2.unb.ca/~ajit/> " Usage: For instructions, do :help fortran-syntax from Vim " Credits: -" Version 0.1 (April 2000) for Fortran 95 was based on the Fortran 77 syntax file by -" Mario Eusebio and Preben Guldberg. Since then, useful suggestions and contributions -" have been made, in chronological order, by: +" Version 0.1 for Fortran 95 was created in April 2000 by Ajit Thakkar from an +" older Fortran 77 syntax file by Mario Eusebio and Preben Guldberg. +" Since then, useful suggestions and contributions have been made, in order, by: " Andrej Panjkov, Bram Moolenaar, Thomas Olsen, Michael Sternberg, Christian Reile, -" Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman, +" Walter Dieudonne, Alexander Wagner, Roman Bertle, Charles Rendleman, " Andrew Griffiths, Joe Krahn, Hendrik Merx, Matt Thompson, Jan Hermann, -" Stefano Zaghi, Vishnu V. Krishnan and Judicaël Grasset +" Stefano Zaghi, Vishnu V. Krishnan, Judicael Grasset, Takuma Yoshida, +" Eisuke Kawashima, Andre Chalella, and Fritz Reese. if exists("b:current_syntax") finish @@ -53,10 +53,10 @@ if !exists("b:fortran_fixed_source") elseif exists("fortran_fixed_source") " User guarantees fixed source form for all fortran files let b:fortran_fixed_source = 1 - elseif expand("%:e") ==? "f\<90\|95\|03\|08\>" + elseif expand("%:e") =~? '^f\%(90\|95\|03\|08\)$' " Free-form file extension defaults as in Intel ifort, gcc(gfortran), NAG, Pathscale, and Cray compilers let b:fortran_fixed_source = 0 - elseif expand("%:e") ==? "f\|f77\|for" + elseif expand("%:e") =~? '^\%(f\|f77\|for\)$' " Fixed-form file extension defaults let b:fortran_fixed_source = 1 else @@ -92,15 +92,17 @@ else syn match fortranConstructName "^\s*\zs\a\w*\ze\s*:" endif if exists("fortran_more_precise") - syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*" - syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*" - syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*" + syn match fortranConstructName "\(\<end\s*do\s\+\)\@11<=\a\w*" + syn match fortranConstructName "\(\<end\s*if\s\+\)\@11<=\a\w*" + syn match fortranConstructName "\(\<end\s*select\s\+\)\@15<=\a\w*" endif syn match fortranUnitHeader "\<end\>" syn match fortranType "\<character\>" syn match fortranType "\<complex\>" syn match fortranType "\<integer\>" +syn match fortranType "\<real\>" +syn match fortranType "\<logical\>" syn keyword fortranType intrinsic syn match fortranType "\<implicit\>" syn keyword fortranStructure dimension @@ -148,11 +150,9 @@ syn keyword fortranExtraIntrinsic algama cdabs cdcos cdexp cdlog cdsin cdsqrt cq syn keyword fortranIntrinsic abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh syn match fortranIntrinsic "\<len\s*[(,]"me=s+3 syn match fortranIntrinsic "\<real\s*("me=s+4 -syn match fortranType "\<implicit\s\+real" -syn match fortranType "^\s*real\>" syn match fortranIntrinsic "\<logical\s*("me=s+7 -syn match fortranType "\<implicit\s\+logical" -syn match fortranType "^\s*logical\>" +syn match fortranType "\<implicit\s\+real\>" +syn match fortranType "\<implicit\s\+logical\>" "Numbers of various sorts " Integers @@ -167,6 +167,12 @@ syn match fortranFloatIll display "\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>" syn match fortranFloatIll display "\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>" " floating point number syn match fortranFloat display "\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>" +" binary number +syn match fortranBinary display "b["'][01]\+["']" +" octal number +syn match fortranOctal display "o["'][0-7]\+["']" +" hexadecimal number +syn match fortranHex display "z["'][0-9A-F]\+["']" " Numbers in formats syn match fortranFormatSpec display "\d*f\d\+\.\d\+" syn match fortranFormatSpec display "\d*e[sn]\=\d\+\.\d\+\(e\d+\>\)\=" @@ -185,8 +191,8 @@ syn match fortranLabelNumber display "^ \d\s"ms=s+4,me=e-1 if exists("fortran_more_precise") " Numbers as targets syn match fortranTarget display "\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>" - syn match fortranTarget display "\(\<do\s\+\)\@<=\d\+\>" - syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>" + syn match fortranTarget display "\(\<do\s\+\)\@11<=\d\+\>" + syn match fortranTarget display "\(\<go\s*to\s*(\=\)\@11<=\(\d\+\s*,\s*\)*\d\+\>" endif syn keyword fortranTypeR external @@ -214,7 +220,6 @@ syn match fortranUnitHeader "\<submodule\>" syn keyword fortranUnitHeader use only contains syn keyword fortranUnitHeader result operator assignment syn match fortranUnitHeader "\<interface\>" -syn match fortranUnitHeader "\<recursive\>" syn keyword fortranKeyword allocate deallocate nullify cycle exit syn match fortranConditional "\<select\>" syn keyword fortranConditional case default where elsewhere @@ -273,8 +278,9 @@ syn keyword fortranIntrinsic null cpu_time syn match fortranType "\<elemental\>" syn match fortranType "\<pure\>" syn match fortranType "\<impure\>" +syn match fortranType "\<recursive\>" if exists("fortran_more_precise") - syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>" + syn match fortranConstructName "\(\<end\s*forall\s\+\)\@15<=\a\w*\>" endif if b:fortran_dialect == "f08" @@ -354,8 +360,15 @@ syn cluster fortranCommentGroup contains=fortranTodo if (b:fortran_fixed_source == 1) if !exists("fortran_have_tabs") - "Flag items beyond column 72 - syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72 + " Fixed format requires a textwidth of 72 for code, + " but some vendor extensions allow longer lines + if exists("fortran_extended_line_length") + syn match fortranSerialNumber excludenl "^.\{133,}$"lc=132 + elseif exists("fortran_cardimage_line_length") + syn match fortranSerialNumber excludenl "^.\{81,}$"lc=80 + else + syn match fortranSerialNumber excludenl "^.\{73,}$"lc=72 + endif "Flag left margin errors syn match fortranLabelError "^.\{-,4}[^0-9 ]" contains=fortranTab syn match fortranLabelError "^.\{4}\d\S" @@ -375,7 +388,8 @@ syn match cPreProc "^\s*#\s*\(define\|ifdef\)\>.*" syn match cPreProc "^\s*#\s*\(elif\|if\)\>.*" syn match cPreProc "^\s*#\s*\(ifndef\|undef\)\>.*" syn match cPreCondit "^\s*#\s*\(else\|endif\)\>.*" -syn region cIncluded contained start=+"[^(]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber +syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber +"syn region cIncluded contained start=+"[^("]+ skip=+\\\\\|\\"+ end=+"+ syn match cIncluded contained "<[^>]*>" syn match cInclude "^\s*#\s*include\>\s*["<]" contains=cIncluded @@ -451,6 +465,9 @@ hi def link fortranTodo Todo hi def link fortranContinueMark Special hi def link fortranString String hi def link fortranNumber Number +hi def link fortranBinary Number +hi def link fortranOctal Number +hi def link fortranHex Number hi def link fortranOperator Operator hi def link fortranBoolean Boolean hi def link fortranLabelError Error diff --git a/runtime/syntax/fpcmake.vim b/runtime/syntax/fpcmake.vim new file mode 100644 index 0000000000..bbc6f1d770 --- /dev/null +++ b/runtime/syntax/fpcmake.vim @@ -0,0 +1,58 @@ +" Vim syntax file +" Language: Free Pascal Makefile Definition Files +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 Apr 23 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/make.vim + +" NOTE: using start-of-line anchored syn-match groups is simpler than other +" alternatives when interacting with the sourced make.vim syntax groups + +" Sections +syn region fpcmakeSection matchgroup=fpcmakeSectionDelimiter start="^\s*\[" end="]" contains=fpcmakeSectionName + +syn keyword fpcmakeSectionName contained clean compiler default dist install +syn keyword fpcmakeSectionName contained lib package prerules require rules +syn keyword fpcmakeSectionName contained shared target + +" [clean] +syn match fpcmakeRule "^\s*\(units\|files\)\>" +" [compiler] +syn match fpcmakeRule "^\s*\(options\|version\|unitdir\|librarydir\|objectdir\)\>" +syn match fpcmakeRule "^\s*\(targetdir\|sourcedir\|unittargetdir\|includedir\)\>" +" [default] +syn match fpcmakeRule "^\s*\(cpu\|dir\|fpcdir\|rule\|target\)\>" +" [dist] +syn match fpcmakeRule "^\s*\(destdir\|zipname\|ziptarget\)\>" +" [install] +syn match fpcmakeRule "^\s*\(basedir\|datadir\|fpcpackage\|files\|prefix\)\>" +syn match fpcmakeRule "^\s*\(units\)\>" +" [package] +syn match fpcmakeRule "^\s*\(name\|version\|main\)\>" +" [requires] +syn match fpcmakeRule "^\s*\(fpcmake\|packages\|libc\|nortl\|unitdir\)\>" +syn match fpcmakeRule "^\s*\(packagedir\|tools\)\>" +" [shared] +syn match fpcmakeRule "^\s*\(build\|libname\|libversion\|libunits\)\>" +" [target] +syn match fpcmakeRule "^\s*\(dirs\|exampledirs\|examples\|loaders\|programs\)\>" +syn match fpcmakeRule "^\s*\(rsts\|units\)\>" + +" Comments +syn keyword fpcmakeTodo TODO FIXME XXX contained +syn match fpcmakeComment "#.*" contains=fpcmakeTodo,@Spell + +" Default highlighting +hi def link fpcmakeSectionDelimiter Delimiter +hi def link fpcmakeSectionName Type +hi def link fpcmakeComment Comment +hi def link fpcmakeTodo Todo +hi def link fpcmakeRule Identifier + +let b:current_syntax = "fpcmake" + +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/freebasic.vim b/runtime/syntax/freebasic.vim index bce7f9ebc1..68e838f393 100644 --- a/runtime/syntax/freebasic.vim +++ b/runtime/syntax/freebasic.vim @@ -1,12 +1,13 @@ " Vim syntax file " Language: FreeBasic -" Maintainer: Mark Manning <markem@airmail.net> -" Updated: 10/22/2006 +" Maintainer: Mark Manning <markem@sim1.us> +" Updated: 10/9/2019 +" Version: 7.0b " " Description: " " Based originally on the work done by Allan Kelly <Allan.Kelly@ed.ac.uk> -" Updated by Mark Manning <markem@airmail.net> +" Updated by Mark Manning <markem@sim1.us> " Applied FreeBasic support to the already excellent support " for standard basic syntax (like QB). " @@ -138,7 +139,7 @@ syn keyword freebasicUserInput GETJOYSTICK GETKEY GETMOUSE INKEY INPUT MULTIKEY " types of identifiers like functions, basic commands and " such. MEM 9/9/2006 " -syn match freebasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" +syn match freebasicIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>" syn match freebasicGenericFunction "\<[a-zA-Z_][a-zA-Z0-9_]*\>\s*("me=e-1,he=e-1 " " Function list @@ -154,9 +155,13 @@ syn cluster freebasicParenGroup contains=freebasicParenError,freebasicSpecial,fr " " Integer number, or floating point number without a dot and with "f". " -syn region freebasicHex start="&h" end="\W" -syn region freebasicHexError start="&h\x*[g-zG-Z]" end="\W" -syn match freebasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" +syn region freebasicHex start="&h" end="\W" +syn region freebasicHexError start="&h\x*[g-zG-Z]" end="\W" +syn region freebasicOctal start="&o" end="\W" +syn region freebasicOctalError start="&o[0-7]*[89a-zA-Z]" end="\W" +syn region freebasicBinary start="&b" end="\W" +syn region freebasicBinaryError start="&b[01]*[2-9a-zA-Z]" end="\W" +syn match freebasicInteger "\<\d\+\(u\=l\=\|lu\|f\)\>" " " Floating point number, with dot, optional exponent " @@ -170,11 +175,11 @@ syn match freebasicFloat "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" " syn match freebasicFloat "\<\d\+e[-+]\=\d\+[fl]\=\>" " -" Hex number +" Octal number " syn case match -syn match freebasicOctal "\<0\o*\>" -syn match freebasicOctalError "\<0\o*[89]" +syn match freebasicOctal2 "\<0\o*\>" +syn match freebasicOctal2Error "\<0\o*[89a-zA-Z]" " " String and Character contstants " @@ -183,7 +188,7 @@ syn region freebasicString start="'" end="'" contains=freebasicSpecial,freebasi " " Comments " -syn match freebasicSpecial contained "\\." +syn match freebasicSpecial contained "\\\\." syn region freebasicComment start="^rem" end="$" contains=freebasicSpecial,freebasicTodo syn region freebasicComment start=":\s*rem" end="$" contains=freebasicSpecial,freebasicTodo syn region freebasicComment start="\s*'" end="$" contains=freebasicSpecial,freebasicTodo @@ -197,12 +202,12 @@ syn region freebasicLineNumber start="^\d" end="\s" " " Create the clusters " -syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicInteger,freebasicFloat -syn cluster freebasicError contains=freebasicHexError,freebasicOctalError +syn cluster freebasicNumber contains=freebasicHex,freebasicOctal,freebasicOctal2,freebasicBinary,freebasicInteger,freebasicFloat +syn cluster freebasicError contains=freebasicHexError,freebasicOctalError,freebasicOctal2,freebasicBinary " " Used with OPEN statement " -syn match freebasicFilenumber "#\d\+" +syn match freebasicFilenumber "#\d\+" syn match freebasicMathOperator "[\+\-\=\|\*\/\>\<\%\()[\]]" contains=freebasicParen " " The default methods for highlighting. Can be overridden later diff --git a/runtime/syntax/fstab.vim b/runtime/syntax/fstab.vim index e416a9abfc..318488713b 100644 --- a/runtime/syntax/fstab.vim +++ b/runtime/syntax/fstab.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: fstab file " Maintainer: Radu Dineiu <radu.dineiu@gmail.com> -" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim -" Last Change: 2019 Jun 06 -" Version: 1.3 +" URL: https://raw.github.com/rid9/vim-fstab/master/syntax/fstab.vim +" Last Change: 2020 Dec 30 +" Version: 1.4 " " Credits: " David Necas (Yeti) <yeti@physics.muni.cz> @@ -68,7 +68,7 @@ syn match fsOptionsString /[a-zA-Z0-9_-]\+/ syn keyword fsOptionsYesNo yes no syn cluster fsOptionsCheckCluster contains=fsOptionsExt2Check,fsOptionsFatCheck syn keyword fsOptionsSize 512 1024 2048 -syn keyword fsOptionsGeneral async atime auto bind current defaults dev devgid devmode devmtime devuid dirsync exec force fstab kudzu loop mand move noatime noauto noclusterr noclusterw nodev nodevmtime nodiratime noexec nomand norelatime nosuid nosymfollow nouser owner rbind rdonly relatime remount ro rq rw suid suiddir supermount sw sync union update user users wxallowed xx nofail +syn keyword fsOptionsGeneral async atime auto bind current defaults dev devgid devmode devmtime devuid dirsync exec force fstab kudzu loop mand move noatime noauto noclusterr noclusterw nodev nodevmtime nodiratime noexec nomand norelatime nosuid nosymfollow nouser owner rbind rdonly relatime remount ro rq rw suid suiddir supermount sw sync union update user users wxallowed xx nofail failok syn match fsOptionsGeneral /_netdev/ " Options: adfs diff --git a/runtime/syntax/gift.vim b/runtime/syntax/gift.vim new file mode 100644 index 0000000000..3f8d631ec0 --- /dev/null +++ b/runtime/syntax/gift.vim @@ -0,0 +1,216 @@ +" Vim syntax file +" +" Language: Moodle GIFT (General Import Format Template) +" Maintainer: Selim Temizer (http://selimtemizer.com) +" Creation: November 28, 2020 +" Latest Revision: December 21, 2020 +" Note: The order of entities in this file is important! + +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + + +setlocal conceallevel=1 + +"----------------------------------------------- +" GIFT entities + +syn match giftS "\~" contained "GIFT special characters +syn match giftS "=" contained +syn match giftS "#" contained +syn match giftS "{" contained +syn match giftS "}" contained +syn match giftS ":" contained + +syn match giftES "\\\~" contained conceal cchar=~ "GIFT escaped special characters +syn match giftES "\\=" contained conceal cchar== +syn match giftES "\\#" contained conceal cchar=# +syn match giftES "\\{" contained conceal cchar={ +syn match giftES "\\}" contained conceal cchar=} +syn match giftES "\\:" contained conceal cchar=: + +syn match giftEN "\\n" contained conceal cchar=n "GIFT escaped newline + +syn match giftFormat "\[html]" contained "GIFT formats +syn match giftFormat "\[plain]" contained +syn match giftFormat "\[moodle]" contained +syn match giftFormat "\[markdown]" contained + +"-------------------------------------------------------- +" HTML entities + +syn match giftH "<" contained "HTML characters that might need to be handled/escaped +syn match giftH ">" contained +syn match giftH "&" contained + +syn match giftEH "<" contained conceal cchar=< "HTML escaped characters +syn match giftEH ">" contained conceal cchar=> +syn match giftEH "&" contained conceal cchar=& +syn match giftEH " " contained conceal cchar=_ + +"------------------------------------------------------- +" Answer components: Feedback and general feedback + +syn match giftFB "#\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=giftF "Feedback block +syn match giftF "#\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|#\|####\|}\)" contained contains=@giftCEF "Feedback + +syn match giftGFB "####\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=giftGF "General feedback block +syn match giftGF "####\zs\_.\{-}\(\_^\|[^\\]\)\ze}" contained contains=@giftCEF "General feedback + +"------------------------------------------------------ +" Answer components: Other components + +syn keyword giftTF T TRUE F FALSE contained + +syn match giftNum1 "[-+]\=[.0-9]\+" contained "Something matching a number + +syn match giftNum2 "[-+]\=[.0-9]\+\s*:\s*[-+]\=[.0-9]\+" contained contains=giftNum2D "Number with error margin +syn match giftNum2D ":" contained "Associated delimiter + +syn match giftNum3 "[-+]\=[.0-9]\+\s*\.\.\s*[-+]\=[.0-9]\+" contained contains=giftNum3D "Number as min/max range +syn match giftNum3D "\.\." contained "Associated delimiter + +syn match giftWeightB "%-*[0-9]\{1,2}\.\?[0-9]*%" contained contains=giftWeight "Weight block +syn match giftWeight "%\zs-*[0-9]\{1,2}\.\?[0-9]*\ze%" contained "Weight + +"----------------------------------------------------- +" Answer choices + +syn match giftWrongNum "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(####\|}\)" contained contains=@giftCEFF "Wrong numeric choice +syn match giftRightNum "=\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW,@giftNums "Right numeric choice + +syn match giftWrong "\~\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCEFFW "Wrong choice +syn match giftRight "=\zs\_.\{-}\(\ze->\|\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)\)" contained contains=@giftCEFFW "Right choice +syn match giftMatchB "->\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=giftMatch "Match choice block +syn match giftMatch "->\zs\_.\{-}\(\_^\|[^\\]\)\ze\(=\|\~\|####\|}\)" contained contains=@giftCE "Match choice + +"---------------------------------------------------- +" Answer + +syn match giftAnswer "{\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftA "General answer +syn match giftAnswer "{}" contained "Minimal answer + +syn match giftAnswerNum "{\_[[:space:]]*#\_[^#]\_.\{-}\(\_^\|[^\\]\)}" contained keepend contains=@giftANum "Numeric answer +syn match giftAnswerNumD "{\zs\_[[:space:]]*#" contained "Associated delimiter + +"--------------------------------------------------- +" Question + +" The first pattern matches the last question at the end of the file (in case there is no empty line coming after). +" However, it slows down parsing (and especially scrolling up), therefore it is commented out. + +"syn match giftQuestion "[^{[:space:]]\_.\{-}\%$" keepend contains=@giftCEF,giftAnswer,giftAnswerNum + syn match giftQuestion "[^{[:space:]]\_.\{-}\n\(\s*\n\)\+" keepend contains=@giftCEF,giftAnswer,giftAnswerNum + +"-------------------------------------------------- +" Question name + +syn match giftName "::\_.\{-}::" contains=@giftCE,giftNameD "Question name +syn match giftNameD "::" contained "Associated delimiter + +"------------------------------------------------- +" Category + +syn match giftCategoryB "^\s*\$CATEGORY:.*\n\+" contains=giftCategory "Category block +syn match giftCategory "^\s*\$CATEGORY:\zs.*\ze\n" contained "Category + +"------------------------------------------------ +" Comments (may need to be the last entity) + +syn keyword giftTodo FIXME TODO NOTE FIX XXX contained + +syn match giftIdB "\[id:\(\\]\|[^][:cntrl:]]\)\+]" contained contains=giftId "Id block +syn match giftId "\[id:\zs\(\\]\|[^][:cntrl:]]\)\+\ze]" contained "Id + +syn match giftTagB "\[tag:\(\\]\|[^]<>`[:cntrl:]]\)\+]" contained contains=giftTag "Tag block +syn match giftTag "\[tag:\zs\(\\]\|[^]<>`[:cntrl:]]\)\+\ze]" contained "Tag + +syn match giftComment "^\s*//.*" contains=giftTodo,giftIdB,giftTagB + +"----------------------------------------------- +" Clusters + +"Comments and entities (to be escaped) +syn cluster giftCE contains=giftComment,giftS,giftES,giftEN,giftH,giftEH + +"The above plus format +syn cluster giftCEF contains=@giftCE,giftFormat + +"The above plus feedback block +syn cluster giftCEFF contains=@giftCEF,giftFB + +"The above plus weight block +syn cluster giftCEFFW contains=@giftCEFF,giftWeightB + +"Possible numerical representations +syn cluster giftNums contains=giftNum1,giftNum2,giftNum3 + +"Possible contents of answers +syn cluster giftA contains=giftComment,giftTF,giftWrong,giftRight,giftMatchB,giftFB,giftGFB + +"Possible contents of numerical answers +syn cluster giftANum contains=giftAnswerNumD,giftComment,@giftNums,giftWrongNum,giftRightNum,giftFB,giftGFB + +"----------------------------------------------- + +let b:current_syntax = "gift" + +"----------------------------------------------- + +hi Conceal ctermbg=NONE ctermfg=Blue guibg=NONE guifg=Blue +hi Feedback ctermbg=NONE ctermfg=DarkCyan guibg=NONE guifg=DarkCyan +hi GFeedback ctermbg=NONE ctermfg=DarkGreen guibg=NONE guifg=DarkGreen +hi WeightB ctermbg=NONE ctermfg=DarkYellow guibg=NONE guifg=DarkYellow + +"----------------------------------------------- + +hi def link giftS Error +hi def link giftES Conceal +hi def link giftEN Conceal +hi def link giftFormat LineNr + +hi def link giftH Error +hi def link giftEH Conceal + +hi def link giftFB PreProc +hi def link giftF Feedback +hi def link giftGFB Title +hi def link giftGF GFeedback + +hi def link giftTF Question +hi def link giftNum1 Question +hi def link giftNum2 Question +hi def link giftNum2D Special +hi def link giftNum3 Question +hi def link giftNum3D Special +hi def link giftWeightB WeightB +hi def link giftWeight Identifier + +hi def link giftWrongNum Constant +hi def link giftRightNum Question +hi def link giftWrong Constant +hi def link giftRight Question +hi def link giftMatchB ModeMsg +hi def link giftMatch Constant + +hi def link giftAnswer MoreMsg +hi def link giftAnswerNum MoreMsg +hi def link giftAnswerNumD Identifier + +hi def link giftQuestion Identifier + +hi def link giftName PreProc +hi def link giftNameD Directory + +hi def link giftCategoryB LineNr +hi def link giftCategory Directory + +hi def link giftTodo Todo +hi def link giftIdB LineNr +hi def link giftId Title +hi def link giftTagB LineNr +hi def link giftTag Constant +hi def link giftComment Comment diff --git a/runtime/syntax/git.vim b/runtime/syntax/git.vim index 48264c7bf2..a8467edd43 100644 --- a/runtime/syntax/git.vim +++ b/runtime/syntax/git.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: generic git output " Maintainer: Tim Pope <vimNOSPAM@tpope.org> -" Last Change: 2010 May 21 +" Last Change: 2019 Dec 05 if exists("b:current_syntax") finish @@ -13,7 +13,7 @@ syn sync minlines=50 syn include @gitDiff syntax/diff.vim syn region gitHead start=/\%^/ end=/^$/ -syn region gitHead start=/\%(^commit \x\{40\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ +syn region gitHead start=/\%(^commit\%( \x\{40\}\)\{1,\}\%(\s*(.*)\)\=$\)\@=/ end=/^$/ " For git reflog and git show ...^{tree}, avoid sync issues syn match gitHead /^\d\{6\} \%(\w\{4} \)\=\x\{40\}\%( [0-3]\)\=\t.*/ @@ -25,12 +25,14 @@ syn region gitDiff start=/^\%(@@ -\)\@=/ end=/^\%(diff --\%(git\|cc\|combined\) syn region gitDiffMerge start=/^\%(diff --\%(cc\|combined\) \)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff syn region gitDiffMerge start=/^\%(@@@@* -\)\@=/ end=/^\%(diff --\|$\)\@=/ contains=@gitDiff syn match gitDiffAdded "^ \++.*" contained containedin=gitDiffMerge +syn match gitDiffAdded "{+.*+}" contained containedin=gitDiff syn match gitDiffRemoved "^ \+-.*" contained containedin=gitDiffMerge +syn match gitDiffRemoved "\[-.*-\]" contained containedin=gitDiff syn match gitKeyword /^\%(object\|type\|tag\|commit\|tree\|parent\|encoding\)\>/ contained containedin=gitHead nextgroup=gitHash,gitType skipwhite syn match gitKeyword /^\%(tag\>\|ref:\)/ contained containedin=gitHead nextgroup=gitReference skipwhite syn match gitKeyword /^Merge:/ contained containedin=gitHead nextgroup=gitHashAbbrev skipwhite -syn match gitMode /^\d\{6\}/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite +syn match gitMode /^\d\{6\}\>/ contained containedin=gitHead nextgroup=gitType,gitHash skipwhite syn match gitIdentityKeyword /^\%(author\|committer\|tagger\)\>/ contained containedin=gitHead nextgroup=gitIdentity skipwhite syn match gitIdentityHeader /^\%(Author\|Commit\|Tagger\):/ contained containedin=gitHead nextgroup=gitIdentity skipwhite syn match gitDateHeader /^\%(AuthorDate\|CommitDate\|Date\):/ contained containedin=gitHead nextgroup=gitDate skipwhite diff --git a/runtime/syntax/gnuplot.vim b/runtime/syntax/gnuplot.vim index 7777cc9e46..9c98e67e58 100644 --- a/runtime/syntax/gnuplot.vim +++ b/runtime/syntax/gnuplot.vim @@ -3,7 +3,7 @@ " Maintainer: Josh Wainwright <wainwright DOT ja AT gmail DOT com> " Last Maintainer: Andrew Rasmussen andyras@users.sourceforge.net " Original Maintainer: John Hoelzel johnh51@users.sourceforge.net -" Last Change: 2015-08-25 +" Last Change: 2020 May 12 " Filenames: *.gnu *.plt *.gpi *.gih *.gp *.gnuplot scripts: #!*gnuplot " URL: http://www.vim.org/scripts/script.php?script_id=4873 " Original URL: http://johnh51.get.to/vim/syntax/gnuplot.vim @@ -479,7 +479,7 @@ syn keyword gnuplotKeyword terminal palette rgb rbg grb gbr brg bgr " ---- Macros ---- " -syn region gnuplotMacro start="@" end=" " +syn match gnuplotMacro "@[a-zA-Z0-9_]*" " ---- Todos ---- " diff --git a/runtime/syntax/gprof.vim b/runtime/syntax/gprof.vim index 381a3c63b0..880452a84b 100644 --- a/runtime/syntax/gprof.vim +++ b/runtime/syntax/gprof.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Syntax for Gprof Output " Maintainer: Dominique Pelle <dominique.pelle@gmail.com> -" Last Change: 2013 Jun 09 +" Last Change: 2021 Apr 08 " Quit when a syntax file was already loaded if exists("b:current_syntax") @@ -28,7 +28,7 @@ syn match gprofCallGraphTitle "Call graph (explanation follows)" syn region gprofCallGraphHeader \ start="^granularity: each sample hit covers.*" \ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$" -syn match gprofCallGraphFunction "\s\+\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\[" +syn match gprofCallGraphFunction "\<\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\[" syn match gprofCallGraphSeparator "^-\+$" syn region gprofCallGraphTrailer \ start="This table describes the call tree of the program" @@ -41,7 +41,7 @@ syn region gprofIndex syn match gprofIndexFunctionTitle "^Index by function name$" -syn match gprofNumbers "^\s\+[0-9 ./+]\+" +syn match gprofNumbers "^\s*[0-9 ./+]\+" syn match gprofFunctionIndex "\[\d\+\]" syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>" diff --git a/runtime/syntax/groff.vim b/runtime/syntax/groff.vim index d4dc0cc4f7..c076c8d973 100644 --- a/runtime/syntax/groff.vim +++ b/runtime/syntax/groff.vim @@ -1,7 +1,7 @@ " VIM syntax file " Language: groff -" Maintainer: Alejandro López-Valencia <dradul@yahoo.com> -" URL: http://dradul.tripod.com/vim +" Maintainer: John Marshall <jmarshall@hey.com> +" Previous Maintainer: Pedro Alejandro López-Valencia <palopezv@gmail.com> " Last Change: 2003-05-08-12:41:13 GMT-5. " This uses the nroff.vim syntax file. diff --git a/runtime/syntax/groovy.vim b/runtime/syntax/groovy.vim index 2245b79d04..41495e6682 100644 --- a/runtime/syntax/groovy.vim +++ b/runtime/syntax/groovy.vim @@ -1,10 +1,10 @@ " Vim syntax file " Language: Groovy -" Original Author: Alessio Pace <billy.corgan@tiscali.it> -" Maintainer: Tobias Rapp <yahuxo@gmx.de> -" Version: 0.1.16 +" Original Author: Alessio Pace <billy.corgan AT tiscali.it> +" Maintainer: Tobias Rapp <yahuxo+vim AT mailbox.org> +" Version: 0.1.18 " URL: http://www.vim.org/scripts/script.php?script_id=945 -" Last Change: 2016 May 23 +" Last Change: 2021 Feb 03 " THE ORIGINAL AUTHOR'S NOTES: " @@ -253,7 +253,8 @@ if exists("groovy_regex_strings") endif " syn region groovyELExpr start=+${+ end=+}+ keepend contained syn match groovyELExpr /\${.\{-}}/ contained -syn match groovyELExpr /\$[a-zA-Z_][a-zA-Z0-9_.]*/ contained +" Fix: force use of the NFA regexp engine (2), see GitHub issue #7280 +syn match groovyELExpr /\%#=2\$[a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE_][a-zA-Z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\uFFFE0-9_.]*/ contained hi def link groovyELExpr Identifier " TODO: better matching. I am waiting to understand how it really works in groovy diff --git a/runtime/syntax/haml.vim b/runtime/syntax/haml.vim index 5369695c22..c14b88f502 100644 --- a/runtime/syntax/haml.vim +++ b/runtime/syntax/haml.vim @@ -2,7 +2,7 @@ " Language: Haml " Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Filenames: *.haml -" Last Change: 2016 Aug 29 +" Last Change: 2019 Dec 05 if exists("b:current_syntax") finish @@ -38,7 +38,7 @@ syn match hamlDespacer "[<>]" contained nextgroup=hamlDespacer,hamlSelfCloser, syn match hamlSelfCloser "/" contained syn match hamlClassChar "\." contained nextgroup=hamlClass syn match hamlIdChar "#{\@!" contained nextgroup=hamlId -syn match hamlClass "\%(\w\|-\)\+" contained nextgroup=@hamlComponent +syn match hamlClass "\%(\w\|-\|\:\)\+" contained nextgroup=@hamlComponent syn match hamlId "\%(\w\|-\)\+" contained nextgroup=@hamlComponent syn region hamlDocType start="^\s*!!!" end="$" diff --git a/runtime/syntax/help.vim b/runtime/syntax/help.vim index 642d177cdd..d3d8f4f435 100644 --- a/runtime/syntax/help.vim +++ b/runtime/syntax/help.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Vim help file " Maintainer: Bram Moolenaar (Bram@vim.org) -" Last Change: 2019 May 12 +" Last Change: 2020 Jul 28 " Quit when a (custom) syntax file was already loaded if exists("b:current_syntax") @@ -11,7 +11,7 @@ endif let s:cpo_save = &cpo set cpo&vim -syn match helpHeadline "^[-A-Z .][-A-Z0-9 .()_]*[ \t]\+\*"me=e-1 +syn match helpHeadline "^[-A-Z .][-A-Z0-9 .()_]*\ze\(\s\+\*\|$\)" syn match helpSectionDelim "^===.*===$" syn match helpSectionDelim "^---.*--$" if has("conceal") @@ -85,6 +85,7 @@ syn match helpSpecial "\[group]" syn match helpNormal "\[\(readonly\|fifo\|socket\|converted\|crypted\)]" syn match helpSpecial "CTRL-." +syn match helpSpecial "CTRL-SHIFT-." syn match helpSpecial "CTRL-Break" syn match helpSpecial "CTRL-PageUp" syn match helpSpecial "CTRL-PageDown" diff --git a/runtime/syntax/help_ru.vim b/runtime/syntax/help_ru.vim new file mode 100644 index 0000000000..8fcd63a917 --- /dev/null +++ b/runtime/syntax/help_ru.vim @@ -0,0 +1,65 @@ +" Vim syntax file +" Language: Russian Vim program help files *.rux +" Maintainer: Restorer (restorers@users.sourceforge.net) +" Last Change: 04 Aprl 2017 +" + +" ПроверÑем Ñзык локали и уÑтановки опции 'helplang' +" ЕÑли не руÑÑкий, то выходим из Ñкрипта. +if ('ru' !~? v:lang || 'russian' !~? v:lang) && 'ru' !~? &helplang + finish +endif + +" ПодÑветка руÑÑких гиперÑÑылок +syntax match helpHyperTextJump "\\\@<!|[^"*~# |]\+|" contains=helpBar +syntax match helpHyperTextEntry "\*[^"*|]\+\*\s"he=e-1 contains=helpStar +syntax match helpHyperTextEntry "\*[^"*|]\+\*$" contains=helpStar + +" Заголовок Ñтатьи, раздела и Ñ‚. п. +syntax match helpHeadline "^[Ð-ЯÐ]\{2}[ .]\=[-,Ð-ЯÐA-Z0-9 .()]*" + +" Ðаименование Ñправочника +" новый заголовок +" syntax match helpVim "\<СПРÐВОЧÐИК ПО РЕДÐКТОРУ VIM\>" +"Ñтарый заголовок +syntax match helpVim "\<СПРÐВОЧÐИК ПО .*" +" новый заголовок +"syntax match helpVim "\<РУКОВОДСТВО ПОЛЬЗОВÐТЕЛЯ РЕДÐКТОРОМ VIM\>" +"syntax match helpVim "\<автор\%[Ñ‹:] .*$" +"Ñтарый заголовок +syntax match helpVim "\<РУКОВОДСТВО ПОЛЬЗОВÐТЕЛЯ .*" +" ПодÑветка примечаний в текÑте, начала примеров и Ñ‚.п. +syntax keyword helpNote Примечание. Совет. Пример. Примеры: +syntax keyword helpWarning Внимание! +" в Ñтарой верÑии документации +syntax keyword helpNote Замечание: +" в Ñтарой верÑии документации +syntax keyword helpWarning Ð’ÐИМÐÐИЕ! Предупреждение: +" ПодÑветка Ex-команд в документации Vim +syntax match helpCommand "\":[A-Za-z!]\+\""hs=s+1,he=e-1 +" ПодÑветка Ñпециальных обозначений +syntax match helpSpecial "{[-а-ÑÑ‘Ð-ЯÐ0-9'":%#=[\]<>.,]\+}" +syntax match helpSpecial "{[-а-ÑÑ‘Ð-ЯÐ0-9'"*+/:%#=[\]<>.,]\+}" +syntax match helpSpecial "\s\[[-а-ÑÑ‘^Ð-ЯÐ0-9_]\{2,}]"ms=s+1 +syntax match helpSpecial "<[-а-ÑÑ‘Ð-ЯÐ0-9_]\+>" +syntax match helpSpecial "\[диапазон]" +syntax match helpSpecial "\[Ñчётчик]" +syntax match helpSpecial "\[чиÑло]" +syntax match helpSpecial "\[+чиÑло]" +syntax match helpSpecial "\[-чиÑло]" +syntax match helpSpecial "\[кол-во]" +syntax match helpSpecial "\[Ñтрока]" +syntax match helpSpecial "\[Ñмещение]" +syntax match helpSpecial "\[параметр]" +syntax match helpSpecial "\[параметры]" +syntax match helpSpecial "CTRL-{Ñимвол}" +syntax region helpNotVi start="{ДоÑтупно только" start="{Ð’ редкторе Vim" start="{Ð’ редакторе Vi" end="}" contains=helpLeadBlank,helpHyperTextJump +" ПодÑветка примечаний переводчика +syntax region helpTrnsNote start="\[Прим. перевод." end="]" contains=helpComment +" Определение группы подÑветки Ex-команд в документации Vim +"hi def link helpCommand vimCommand +" Определение группы подÑветки примечаний переводчика +hi def link helpTrnsNote Comment +" hi def link helpTrnsNote Comment +" +" vim: ts=8 sw=2 diff --git a/runtime/syntax/hog.vim b/runtime/syntax/hog.vim index 7206815202..24aa2035ba 100644 --- a/runtime/syntax/hog.vim +++ b/runtime/syntax/hog.vim @@ -1,8 +1,9 @@ " Vim syntax file " Language: hog (Snort.conf + .rules) " Maintainer: Victor Roemer, <vroemer@badsec.org>. -" Last Change: 2015 Oct 24 -> Rename syntax items from Snort -> Hog +" Last Change: 2019 Sep 22 " 2012 Oct 24 -> Originalish release +" 2019 Sep 22 -> included PR 3069 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -91,7 +92,7 @@ syn match HogOpRange ":" contained " Rules syn keyword HogRuleAction activate alert drop block dynamic log pass reject sdrop sblock skipwhite nextgroup=HogRuleProto,HogRuleBlock -syn keyword HogRuleProto ip tcp udp icmp skipwhite contained nextgroup=HogRuleSrcIP +syn keyword HogRuleProto ip tcp tcp-pkt tcp-stream udp icmp http ftp tls smb dns dcerpc ssh smtp imap msn modbus dnp3 enip nfs ikev2 ntp skipwhite contained nextgroup=HogRuleSrcIP syn match HogRuleSrcIP "\S\+" transparent skipwhite contained contains=HogIPVarList,HogIPAddr,HogVar,HogOpNot nextgroup=HogRuleSrcPort syn match HogRuleSrcPort "\S\+" transparent skipwhite contained contains=HogPortVarList,HogVar,HogPort,HogOpRange,HogOpNot nextgroup=HogRuleDir syn match HogRuleDir "->\|<>" skipwhite contained nextgroup=HogRuleDstIP @@ -100,13 +101,21 @@ syn match HogRuleDstPort "\S\+" transparent skipwhite contained contain syn region HogRuleBlock start="(" end=")" transparent skipwhite contained contains=HogRuleOption,HogComment fold ",HogString,HogComment,HogVar,HogOptNot "syn region HogRuleOption start="\<gid\|sid\|rev\|depth\|offset\|distance\|within\>" end="\ze;" skipwhite contained contains=HogNumber -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP msg gid sid rev classtype priority metadata content nocase rawbytes -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP depth offset distance within http_client_body http_cookie http_raw_cookie http_header -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_raw_header http_method http_uri http_raw_uri http_stat_code http_stat_msg -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP fast_pattern uricontent urilen isdataat pcre pkt_data file_data base64_decode base64_data -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP byte_test byte_jump byte_extract ftpbounce asn1 cvs dce_iface dce_opnum dce_stub_data +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP msg gid sid rev classtype priority metadata target content nocase rawbytes +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP depth startswith offset distance within http_client_body http_cookie http_raw_cookie http_header +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_raw_header http_request_line http_method http_uri http_raw_uri http_protocol http_response_line http_stat_code http_stat_msg +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_user_agent http_accept http_accept_enc http_accept_lang http_connection http_content_type http_content_len +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP http_referer http_start http_header_names http_server_body http_host http_raw_host +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP filename fileext filemagic filestore filemd5 filesha1 filesha256 filesize +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP dns_query tls_cert_subject tls_cert_issuer tls_cert_serial tls_cert_fingerprint +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP tls_sni tls_cert_notbefore tls_cert_notafter tls_cert_expired tls_cert_valid +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP tls.version tls.subject tls.issuerdn tls.fingerprint tls.store ja3_hash ja3_string +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP modbus dnp3_func dnp3_ind dnp3_obj dnp3_data enip_command cip_service +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP app-layer-protocol app-layer-event xbits iprep lua luajit +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP fast_pattern prefilter uricontent urilen isdataat pcre pkt_data file_data base64_decode base64_data +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP byte_test byte_jump byte_extract ftpdata_command ftpbounce asn1 cvs dce_iface dce_opnum dce_stub_data syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP sip_method sip_stat_code sip_header sip_body gtp_type gtp_info gtp_version ssl_version -syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP ssl_state fragoffset ttl tos id ipopts fragbits dsize flags flow flowbits seq ack window +syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP ssl_state fragoffset ttl tos id ipopts geoip fragbits dsize flags flow flowbits flowint seq ack window syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP itype icode icmp_id icmp_seq rpc ip_proto sameip stream_reassemble stream_size syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP logto session resp react tag activates activated_by count replace detection_filter syn keyword HogRuleOption skipwhite contained nextgroup=HogRuleSROP threshold reference sd_pattern file_type file_group diff --git a/runtime/syntax/hollywood.vim b/runtime/syntax/hollywood.vim index 34fbb45c54..ce5ba29553 100644 --- a/runtime/syntax/hollywood.vim +++ b/runtime/syntax/hollywood.vim @@ -1,8 +1,8 @@ " Vim syntax file -" Language: Hollywood 8.0 +" Language: Hollywood 9.0 " Maintainer: Tom Crecelius <holly@net-eclipse.net> " First Author: Tom Crecelius <holly@net-eclipse.net> -" Last Change: 2018 May 18 +" Last Change: 2021 April 13 " Highlighting Issues: " Depending on your colour schema, Strings or Comments might be highlighted in " a way, you don't like. If so, try one of the following settings after @@ -30,7 +30,7 @@ let s:cpo_save = &cpo set cpo&vim if !exists("hw_version") - let hw_version = 8 + let hw_version = 9 let hw_subversion = 0 elseif !exists("hw_subversion") let hw_subversion = 0 @@ -109,12 +109,11 @@ syn match hwOperator "\%(&\|\*\|+\|-\|\.\||\|//\|/\|:\|<\|=\|>\|<>\|<=\|=>\|\^\| syn keyword hwConstant Nil syn keyword hwConstant True False " predefined preprocessing commands -syn match hwPreProcessor "@\<\%(BGPIC\|BRUSH\|ANIM\|SPRITE\|SAMPLE\|MUSIC\|FILE\|FONT\|VIDEO\|VERSION\|APPTITLE\|APPAUTHOR\|APPCOPYRIGHT\|APPDESCRIPTION\|APPVERSION\|APPICON\|BACKFILL\|SCREEN\|DISPLAY\|INCLUDE\|OPTIONS\|REQUIRE\|MENU\|APPIDENTIFIER\|WARNING\|ERROR\|IF\|ELSEIF\|ELSE\|ENDIF\)\>"ms=s+1 +syn match hwPreProcessor "@\<\%(ANIM\|APPAUTHOR\|APPCOPYRIGHT\|APPDESCRIPTION\|APPICON\|APPIDENTIFIER\|APPTITLE\|APPVERSION\|BACKFILL\|BGPIC\|BRUSH\|CATALOG\|DIRECTORY\|DISPLAY\|ELSE\|ELSEIF\|ENDIF\|ERROR\|FILE\|FONT\|ICON\|IF\|INCLUDE\|LINKER\|MENU\|MUSIC\|OPTIONS\|PALETTE\|REQUIRE\|SAMPLE\|SCREEN\|SPRITE\|VERSION\|VIDEO\|WARNING\)\>"ms=s+1 " predefined constants -syn match hwConstant "#\<\%(ERR_PORTNOTAVAIL\|SEEK_END\|ERR_CREATESHORTCUT\|PURPLE\|ERR_ALLOCCHANNEL\|PRGTYPE_SCRIPT\|ERR_NORETVAL\|ERR_DDRECVIDEO\|ERR_FINDPATH\|LANGUAGE_RUNDI\|ERR_STRINGCST\|COUNTRY_COLOMBIA\|LANGUAGE_KOREAN\|ERR_USERABORT\|ERR_WENDWOWHILE\|FONT\|FILEATTR_WRITE_OTH\|ERR_MODIFYABGPIC\|COUNTRY_DRCONGO\|LANGUAGE_KIRGHIZ\|LANGUAGE_ROMANSH\|FILEATTR_EXECUTE_GRP\|ERR_READVIDEOPIXELS\|SCROLLTOP\|ERR_ANIMDISK\|COUNTRY_IVORYCOAST\|LANGUAGE_GUJARATI\|SHORT\|COUNTRY_SOUTHAFRICA\|VIDEO\|ERR_BLKWOENDBLK\|ERR_WRONGHEX\|SPRITE_VS_BRUSH\|LANGUAGE_HIRIMOTU\|ZOOMSOUTHEAST\|COUNTRY_SLOVAKIA\|COUNTRY_GIBRALTAR\|ERR_INVALIDDATE\|RTS_ON\|PIXELZOOM1\|ATTRFRAMEDELAY\|AQUA\|ATTRFONTSCALABLE\|FILEATTR_NORMAL\|COUNTRY_ALBANIA\|COUNTRY_JAMAICA\|FONTWEIGHT_MEDIUM\|ERR_MALFORMPAT1\|COUNTRY_FRENCHGUIANA\|ERR_MAXPARAMS\|ERR_FORWONEXT\|COUNTRY_CONGO\|COUNTRY_GAMBIA\|UPNDOWN\|COUNTRY_ANDORRA\|BRUSH\|ERR_SELECTALPHACHANNEL\|MODLCOMMAND\|CLIENT\|COUNTRY_TRINIDADANDTOBAGO\|DIRECTORY\|LANGUAGE_ESPERANTO\|ATTRRAWHEIGHT\|COUNTRY_DENMARK\|FILETYPE_SOUND\|CLIPBOARD_TEXT\|LANGUAGE_FULAH\|ATTRPOSITION\|PLUGINCAPS_CONVERT\|ERR_APPLETVERSION\|COUNTRY_VANUATU\|COUNTDIRECTORIES\|ATTRNOHIDE\|VSTRIPES64\|AMIGAICON_SETPOSITION\|PUSHBOTTOM\|ERR_BACKFILL\|COUNTRY_MOROCCO\|ERR_FILEFORMAT\|COUNTRY_CHILE\|ATTRHOSTSCALEY\|ERR_AHI\|HW_VERSION\|ERR_ALRDYDECLRD\|ATTRRAWWIDTH\|ERR_PIXELFORMAT\|IMGFMT_PLUGIN\|LANGUAGE_HEBREW\|ERR_SETMENU\|ERR_NOLAYERS\|CRUSHTOP\|ERR_MAXLINES\|ATTRHASMASK\|LEFT\|ERR_SELECTANIM\|WALLPAPERLEFT\|TEXTOBJECT\|ERR_AFILEPROP\|LANGUAGE_CZECH\|LANGUAGE_XHOSA\|ERR_PIPE\|LANGUAGE_MANX\|ERR_EXECUTE\|ERR_ENDDOUBLEBUFFER\|ATTRGROUP\|ERR_NAMETOOLONG\|ATTRBORDERRIGHT\|COUNTRY_BOSNIAANDHERZEGOVINA\|ATTRMARGINRIGHT\|RTS_OFF\|LANGUAGE_MARSHALLESE\|LANGUAGE_AZERBAIJANI\|LANGUAGE_TAHITIAN\|JOINMITER\|ATTRNOCLOSE\|REQICON_WARNING\|ERR_NOTPROTRACKER\|LANGUAGE_LAO\|ERR_EMPTYPATH\|ERR_NOCALLBACK\|COUNTRY_UGANDA\|ERR_READFUNC\|IMGFMT_UNKNOWN\|ADF_ANIM\|ERR_LAYERSWITCH\|ERR_RECVCLOSED\|ERR_CTRLSTRUCT\|ERR_TABLEOVERFLOW\|SCROLLBOTTOM\|VSTRIPES\|ERR_VAREXPECTED\|ERR_NOTIGER\|BEEPSYSTEM\|ERR_LOWFREQ\|COUNTFILES\|COUNTRY_MONACO\|BLUE\|ERR_VFONT\|STRUDEL\|REQ_GALLERY\|ERR_NOCOORDCST\|MENU\|HSTRIPES64\|COUNTRY_COCOSISLANDS\|LANGUAGE_SOUTHNDEBELE\|COUNTRY_FALKLANDISLANDS\|COUNTRY_UAE\|LANGUAGE_KANNADA\|ERR_VIDRECMULTI\|FILETYPE_VIDEO\|LANGUAGE_ESTONIAN\|COUNTRY_CAYMANISLANDS\|ERR_BADINTEGER\|MONO16\|COUNTRY_CAMEROON\|COUNTRY_GUAM\|ERR_DISPLAYDESKTOP\|ERR_SETENV\|ERR_INTERNAL\|MASKVISIBLE\|ERR_OPENFONT\|LANGUAGE_WELSH\|ATTRRAWXPOS\|LANGUAGE_THAI\|ATTRHOSTMONITORS\|LANGUAGE_GALICIAN\|COUNTRY_GUATEMALA\|ATTRYPOS\|COUNTRY_UZBEKISTAN\|ERR_ELSEIFAFTERELSE\|MODRCONTROL\|BAUD_4800\|JOYDOWNRIGHT\|COUNTRY_LUXEMBOURG\|COUNTRY_MOZAMBIQUE\|ERR_PAKFORMAT\|LANGUAGE_TAJIK\|LANGUAGE_PANJABI\|ERR_MISSINGFIELD\|PLUGINCAPS_LIBRARY\|ERR_FUNCARGS\|LANGUAGE_MALAY\|COUNTRY_PORTUGAL\|COUNTRY_JAPAN\|ERR_ICONPARMS\|COUNTRY_NEWCALEDONIA\|REMOVELAYER\|MOVEWINDOW\|ATTRFONTASCENDER\|PLUGINCAPS_DIRADAPTER\|ERR_VARLENGTH\|ATTRSIZEABLE\|ERR_SENDUNKNOWN\|MENUITEM_RADIO\|COUNTRY_BELIZE\|ERR_LABELDOUBLE\|QUADRECT\|VBLINDS8\|ERR_UNKNOWNCMD\|SCROLLEAST\|ONBUTTONCLICKALL\|RECTNORTHEAST\|FONTWEIGHT_EXTRABOLD\|COUNTRY_SAINTKITTSANDNEVIS\|ERR_CLOSEDDISPLAY\|PLUGINCAPS_SAVEANIM\|ERR_WINDOW\|LANGUAGE_ZHUANG\|CAPROUND\|ERR_OUTOFRANGE\|REQ_CAMERA\|ERR_WARPOS\|COUNTRY_ELSALVADOR\|ERR_GROUPNAMEUSED\|COUNTRY_GUYANA\|ERR_ALREADYASYNC\|COUNTRY_PALESTINE\|DISPMODE_FAKEFULLSCREEN\|ERR_SYNTAXLEVELS\|ERR_BADPLATFORM\|ERR_VERSION\|ATTRVISIBLE\|HSTRETCHCENTER\|COUNTRY_REUNION\|COUNTRY_INDIA\|STRETCHLEFT\|ERR_ZERODIVISION\|LANGUAGE_NORTHERNSAMI\|SIMPLEBUTTON\|ERR_FINDMENU\|ERR_EMPTYOBJ\|LANGUAGE_BIHARI\|LANGUAGE_LIMBURGAN\|LANGUAGE_BOSNIAN\|ERR_SYSTOOOLD\|ERR_WRITEJPEG\|STOP_1\|COPYFILE_OVERWRITE\|ERR_REVDWORD\|PLUGINCAPS_ANIM\|ERR_ASSERTFAILED\|ERR_BRACEOPEN\|ERR_NEEDMORPHOS2\|BLACK\|LANGUAGE_SWEDISH\|ERR_DBLENCODING\|COPYFILE_STATUS\|ERR_WRONGOPCST\|ERR_BADIP\|ERR_UNKNOWNSEQ\|LANGUAGE_LUXEMBOURGISH\|ERR_WITHWOENDWITH\|ERR_LABINIF\|LANGUAGE_TATAR\|ERR_VIDEOLAYERDRV\|ERR_LEGACYPTMOD\|ERR_SAVEPNG\|NOTRANSPARENCY\|ATTRMASKMODE\|LANGUAGE_VENDA\|ERR_NEWHWPLUGIN\|LANGUAGE_LATIN\|LANGUAGE_EWE\|MENUITEM_TOGGLE\|ERR_BRACKETOPEN\|JOYUP\|COUNTRY_SENEGAL\|LANGUAGE_CHURCHSLAVIC\|ERR_ZLIBIO\|RECTBACKNORTHWEST\|MOVELIST\|ERR_TEXTARG\|ONBUTTONOVER\|VIDDRV_HOLLYWOOD\|IMGFMT_JPEG\|REQ_MULTISELECT\|COUNTRY_NIGERIA\|LANGUAGE_GUARANI\|LANGUAGE_POLISH\|ERR_ICONSTANDARD\|REQ_HIDEICONS\|LANGUAGE_CORSICAN\|DISPMODE_MODEREQUESTER\|ERR_NOABSPATH\|LANGUAGE_GERMAN\|ERR_RANDOMIZE\|ERR_ARGS\|PLUGINCAPS_AUDIOADAPTER\|IMAGETYPE_VECTOR\|LANGUAGE_GREEK\|COUNTRY_HOLYSEE\|COUNTRY_NORTHKOREA\|LANGUAGE_MALAYALAM\|COUNTRY_BOTSWANA\|LANGUAGE_CREE\|ATTRNUMENTRIES\|REQICON_ERROR\|IMGFMT_GIF\|FTPBINARY\|WORD\|VIDDRV_OS\|ATTRDURATION\|LANGUAGE_AKAN\|ERR_FTPERROR\|PLUGINCAPS_VIDEO\|ERR_EXAMINE\|HSTRIPES8\|COUNTRY_OMAN\|CIRCLE\|ERR_BRUSHLINK\|ERR_STREAMASSAMPLE\|ERR_DISPLAYSIZE\|ERR_WRONGFLOAT\|PLUGINCAPS_FILEADAPTER\|ERR_UNSUPPORTEDFEAT\|DISPLAY\|ERR_MUSPAUSED\|INTEGER\|COUNTRY_BOLIVIA\|ERR_RECVTIMEOUT\|ATTRMONITOR\|LANGUAGE_INUKTITUT\|ATTRPAUSED\|LANGUAGE_LITHUANIAN\|DATEYEAR\|JOYUPRIGHT\|ERR_LAYERSOFF\|ERR_EMPTYSCRIPT\|LIGHTUSERDATA\|ERR_FINDTIMER\|ALPHACHANNEL\|LANGUAGE_WALLOON\|ERR_ADFWRONGDISP\|ERR_HTTPERROR\|ERR_REWINDDIR\|ERR_LOCKEDOBJ\|COUNTRY_NEPAL\|HSTRIPES2\|RECTSOUTH\|ERR_UNKPROTOCOL\|COUNTRY_CANADA\|COUNTRY_VENEZUELA\|COUNTRY_MALDIVES\|ERR_SQBRACKETCLOSE\|ERR_HTTPTE\|VSTRIPES2\|COUNTRY_NORWAY\|ERR_FIRSTPREPROC\|SNAPDESKTOP\|LANGUAGE_FINNISH\|COUNTRY_TURKEY\|LANGUAGE_VIETNAMESE\|VBLINDS64\|ERR_FONTFORMAT\|ERR_PIXELRANGE\|LANGUAGE_AVESTAN\|ERR_SYSIMAGE\|BIGSINE\|CLIPBOARD_EMPTY\|ERR_WRONGCLIPREG\|AMIGAICON_NONE\|FONTWEIGHT_EXTRABLACK\|LANGUAGE_IDO\|ATTRFORMAT\|ERR_FUNCJMP\|PARITY_NONE\|ATTRHOSTDEPTH\|ERR_RENDERCALLBACK\|ERR_FINDPORT\|LANGUAGE_NEPALI\|COUNTRY_AMERICANSAMOA\|ERR_MISSINGSEPARTR\|MODRALT\|COUNTRY_BESISLANDS\|LANGUAGE_AVARIC\|ERR_VIDNOTPAUSED\|TOPOUT\|ERR_VALUEEXPECTED\|ERR_WRONGUSAGE\|TURNDOWNLEFT\|ERR_ICONDIMS\|LANGUAGE_HAUSA\|ERR_TRANSBGMOBILE\|SEEK_CURRENT\|ERR_MONITORRANGE\|COUNTRY_FAROEISLANDS\|SHAPE\|COUNTRY_SOLOMONISLANDS\|NAVY\|ERR_PREPROCSYM\|COUNTRY_GEORGIA\|LANGUAGE_OSSETIAN\|ERR_THREAD\|DATA_5\|ERR_INISYNTAX\|ERR_MUSFMTSUPPORT\|LANGUAGE_YIDDISH\|ATTRLAYERS\|SMOOTHOUT\|LANGUAGE_KONGO\|COUNTRY_KYRGYZSTAN\|ATTRDOUBLEBUFFER\|TOP\|ERR_SYSBUTTON\|ERR_DATATYPESAVE\|COUNTRY_LIBYA\|ERR_FUNCWOENDFUNC\|ANIMSTREAM\|ATTRUSERDATA\|LANGUAGE_NORTHNDEBELE\|UDPCLIENT\|ERR_MUSNOTPLYNG\|FILEATTR_READ_OTH\|ERR_EVNTEXPCTED\|ERR_BADDIMENSIONS\|ATTROUTPUTDEVICE\|LANGUAGE_BULGARIAN\|LANGUAGE_SPANISH\|DISPMODE_FULLSCREENSCALE\|LANGUAGE_INTERLINGUE\|FASTSPEED\|ERR_NODISPMODES\|LANGUAGE_CHAMORRO\|ATTRACTIVE\|COUNTRY_TOGO\|INACTIVEWINDOW\|ERR_CREATEEVENT\|COUNTRY_SAUDIARABIA\|FILEATTR_EXECUTE_OTH\|IPAUTO\|SHDWNORTHEAST\|MEMORY\|ERR_XF86VIDMODEEXT\|ARC\|TIMER\|COUNTRY_ICELAND\|FUCHSIA\|NETWORKUDP\|ERR_FINDCLIPREGION\|NETWORKSERVER\|NETWORKCONNECTION\|ATTRFONTNAME\|UDPOBJECT\|ERR_UNTERMINTDSTR\|LANGUAGE_NORWEGIANNYNORSK\|RECTBACKCENTER\|COUNTRY_BANGLADESH\|UPLOADFILE_RESPONSE\|COUNTRY_ITALY\|MASKINVISIBLE\|UPLOADFILE_STATUS\|ERR_FOREVERWOREPEAT\|STRETCHBOTTOM\|STRETCHRIGHT\|MOVEFILE_COPY\|FTPASCII\|RECEIVELINE\|RECEIVEBYTES\|ERR_DRAWPATH\|ATTRFONTAA\|VSTRANGEPUSH\|ERR_BADBASE64\|ERR_NOCLIPREG\|SCROLLNORTHWEST\|RECEIVEALL\|ERR_PLUGINARCH\|DTR_OFF\|HEXNUMERICAL\|FLOW_XON_XOFF\|ERR_LAYERSUPPORT2\|FLOW_HARDWARE\|LANGUAGE_GAELIC\|FLOW_OFF\|COUNTRY_ANTARCTICA\|ERR_REQAUTH\|STOP_2\|SERIF\|ERR_FINDANIM\|PARITY_ODD\|DATA_8\|VSTRIPES32\|COUNTRY_FRANCE\|DATA_6\|BAUD_460800\|HKEY_CURRENT_USER\|COUNTRY_BELARUS\|BAUD_115200\|BAUD_57600\|BAUD_38400\|BAUD_19200\|VSTRIPES4\|COUNTRY_ALANDISLANDS\|LANGUAGE_UKRAINIAN\|ERR_ICONSIZE\|BAUD_9600\|COUNTRY_SYRIA\|COUNTRY_NICARAGUA\|COUNTRY_PERU\|ERR_SIGNAL\|BAUD_2400\|JOYDOWN\|BAUD_300\|FILLRULEEVENODD\|ERR_COMMODITY\|ERR_UNKNOWN\|LANGUAGE_CORNISH\|FONTWEIGHT_LIGHT\|ERR_BAD8SVX\|ONBUTTONOVERALL\|CROSSFADE\|CAPSQUARE\|CAPBUTT\|ERR_STRORNUM\|LANGUAGE_SINDHI\|BEEPQUESTION\|JOINBEVEL\|ERR_PLUGINDOUBLET\|JOINROUND\|LANGUAGE_WESTERNFRISIAN\|ERR_PROTMETATABLE\|LANGUAGE_TURKISH\|BOTTOM\|ZOOMNORTH\|ERR_DATATYPEALPHA\|ERR_FINDUDPOBJECT\|SUN\|TURNDOWNRIGHT\|UDPSERVER\|MODRCOMMAND\|LANGUAGE_SWATI\|COUNTRY_MALAWI\|KEEPASPRAT\|DEFAULTICON\|LANGUAGE_TONGA\|ERR_NUMCALLBACK\|STRING\|ATTRPITCH\|ERR_ELSEWOIF\|COUNTRY_SAMOA\|LANGUAGE_PASHTO\|CARDTOP\|DENSITY_NONE\|ITALIC\|PLUGINCAPS_DISPLAYADAPTER\|FILEATTR_READ_USR\|LANGUAGE_UIGHUR\|ERR_EMPTYTABLE\|COUNTRY_CAPEVERDE\|ERR_FGRABVIDSTATE\|ERR_LOCK2\|LANGUAGE_ICELANDIC\|LIME\|ATTRCURSUBSONG\|CENTER\|ERR_VECGFXPLUGIN\|THREAD\|SLIDERIGHT\|NORMALSPEED\|SELMODE_LAYERS\|SLIDELEFT\|HLOWFLIPCOIN\|HFLIPCOIN\|VLOWFLIPCOIN\|ERR_INVCAPIDX\|VFLIPCOIN\|ASYNCDRAW\|ERR_INCOMPATBRUSH\|RECTBACKWEST\|FILEATTR_WRITE_USR\|ATTRONSCREEN\|CRUSHRIGHT\|LANGUAGE_BRETON\|ERR_REPEATWOUNTIL\|ERR_NOLOOP\|ATTRDISPLAY\|ERR_FILENOTFOUND\|ATTRDENSITY\|ERR_GETMONITORINFO\|ERR_POINTERFORMAT\|ZOOMIN\|PIXELZOOM2\|HSTRANGEPUSH\|FILEATTR_SYSTEM\|ERR_COLORSPACE\|LANGUAGE_ZULU\|ATTRHOSTWIDTH\|LANGUAGE_SANGO\|ERR_SOCKET\|STAR\|ERR_FINDBUTTON\|CLOCKWIPE\|FILLCOLOR\|USELAYERPOSITION\|LANGUAGE_BELARUSIAN\|COUNTRY_MICRONESIA\|COPYFILE_UNPROTECT\|DISSOLVE\|UNDERLINED\|WATER4\|COUNTRY_BURKINAFASO\|LANGUAGE_LINGALA\|WATER3\|MASK\|ATTRNOMODESWITCH\|ERR_SETFILEATTR\|LANGUAGE_KASHMIRI\|FILEATTR_HIDDEN\|DELETEFILE_UNPROTECT\|COUNTRY_CUBA\|HKEY_USERS\|ATTRKEYBOARD\|COUNTBOTH\|ROLLLEFT\|HSTRIPES\|CRUSHBOTTOM\|RECTBACKSOUTHWEST\|LANGUAGE_TSONGA\|RECTBACKSOUTH\|ERR_DIFFDEPTH\|RECTBACKSOUTHEAST\|RECTBACKEAST\|ERR_TRIALLIMIT\|ERR_FINDMOVE\|ERR_SCREEN\|ERR_FINDPLUGIN\|LANGUAGE_ITALIAN\|ERR_MULTIBGPIC\|ERR_BADLAYERTYPE\|JUSTIFIED\|ERR_ADDAPPWIN\|LANGUAGE_NAURU\|ERR_UNKNOWNFILTER\|RECTBACKNORTHEAST\|JOYDOWNLEFT\|RECTBACKNORTH\|WALLPAPERTOP\|ROLLTOP\|ERR_NOFALLTHROUGH\|BRUSH_VS_BOX\|USERDATA\|RANDOMPARAMETER\|IMAGETYPE_RASTER\|NATIVE\|DIAGONAL\|COUNTRY_SUDAN\|PUZZLE\|ERR_ENDIFWOIF\|ERR_MEM\|ERR_OPENSERIAL\|PUSHRIGHT\|NEXTFRAME\|DOSTYPE_FILE\|PUSHLEFT\|ERR_SORTFUNC\|ENCODING_ISO8859_1\|VOPENGATE\|ERR_XFIXES\|HCLOSEGATE\|ZOOMSOUTHWEST\|HOPENGATE\|VFLOWRIGHT\|ERR_BADBYTECODE\|VFLOWLEFT\|HFLOWBOTTOM\|HFLOWTOP\|ERR_DLOPEN\|ZOOMNORTHWEST\|ZOOMWEST\|ERR_NODOUBLEBUFFER\|ZOOMSOUTH\|ZOOMEAST\|ZOOMNORTHEAST\|COUNTRY_UK\|ZOOMCENTER\|ERR_FINDMEMBLK\|ERR_BGPICBUTTON\|VSTRETCHCENTER\|ERR_FREEABGPIC\|STRETCHTOP\|SCROLLNORTHEAST\|ATTRFUNCTION\|ERR_TABLEINDEX\|ERR_MULDISMOBILE\|COUNTRY_INDONESIA\|SCROLLSOUTHEAST\|NOCOLOR\|ERR_SELECTBGPIC2\|JOYUPLEFT\|MASKAND\|CLIPBOARD_SOUND\|SCROLLSOUTH\|SCROLLNORTH\|ERR_NOMENU\|ERR_NOANMLAYER\|SCROLLWEST\|ERR_CHANNELRANGE\|ERR_STRTABLEARG\|SCROLLRIGHT\|SCROLLLEFT\|RECTNORTHWEST\|ERR_BEGINREFRESH\|COUNTRY_SPAIN\|RECTSOUTHWEST\|COUNTRY_PHILIPPINES\|RECTSOUTHEAST\|ERR_LOADSOUND\|RECTEAST\|RECTNORTH\|LANGUAGE_ARABIC\|COUNTRY_JORDAN\|RECTCENTER\|ERR_TRANSBRUSH\|BLEND\|ERR_PLUGINVER\|RANDOMEFFECT\|FILLRULEWINDING\|ANMFMT_GIF\|VLINES\|ERR_LABINFOR\|DISPMODE_SYSTEMSCALE\|VLINES2\|ERR_NOARGBVISUAL\|COUNTRY_YEMEN\|HSTRIPES32\|ERR_SAVESAMPLE\|ERR_CHRCSTEMPTY\|LANGUAGE_CATALAN\|ERR_SEEK\|SANS\|LANGUAGE_JAVANESE\|ATTRLAYERID\|ERR_BRACECLOSE\|ERR_CONSOLEARG\|ATTRXPOS\|PLUGINCAPS_REQUESTERADAPTER\|REVEALRIGHT\|ERR_FINDFONT2\|REVEALLEFT\|LANGUAGE_DUTCH\|ERR_CHRCSTLEN\|HCLOSECURTAIN\|ERR_SELECTBGPIC\|ERR_MAGICKEY\|SELMODE_COMBO\|HOPENCURTAIN\|ERR_ZLIBSTREAM\|CARDBOTTOM\|VBLINDS16\|HBLINDS128\|HBLINDS64\|DURATION_SHORT\|COUNTRY_GREECE\|COUNTRY_MARSHALLISLANDS\|LANGUAGE_KAZAKH\|ERR_BADCONSTANT\|MODLCONTROL\|HBLINDS16\|COUNTRY_NAURU\|HBLINDS8\|SILVER\|DATA_7\|DAMPED\|ATTRORIENTATION\|COUNTRY_UNKNOWN\|COUNTRY_CZECHREPUBLIC\|LANGUAGE_INDONESIAN\|LANGUAGE_NAVAJO\|ERR_NOBLOCKBREAK\|ERR_8OR16BITONLY\|BOLD\|VSTRIPES8\|ERR_FUNCEXPECTED\|COUNTRY_AZERBAIJAN\|COUNTRY_KAZAKHSTAN\|ERR_FINDFONT\|QUARTERS\|WATER1\|HSTRIPES4\|COUNTRY_BRUNEI\|VOPENCURTAIN\|MONO8\|ERR_ICONENTRY\|PLUGINCAPS_VECTOR\|ATTRFIXED\|ALPHABETICAL\|VANILLACOPY\|MASKOR\|MASKXOR\|ERR_STAT\|SMPFMT_WAVE\|HSPLIT\|LANGUAGE_ABKHAZIAN\|COUNTRY_GABON\|ERR_ADDSYSEVENT\|ERR_INTEXPECTED\|COUNTRY_ECUADOR\|STEREO16\|ERR_UPDATEICON\|ERR_LABELDECLA\|MENUITEM_DISABLED\|ERR_FILEEXIST\|LANGUAGE_DIVEHI\|ATTRHOSTTASKBAR\|ERR_FINDOBJECTDATA\|ERR_BADENCODING\|ERR_GTK\|DENSITY_MEDIUM\|DENSITY_LOW\|VSPLIT\|ORIENTATION_LANDSCAPEREV\|TEAL\|ERR_COMMENTSTRUCT\|ORIENTATION_LANDSCAPE\|ERR_FT2\|ORIENTATION_PORTRAITREV\|DATELOCALNATIVE\|ERR_MAXLOCALS\|POLYGON\|BRUSHPART\|COUNTRY_CHINA\|ORIENTATION_NONE\|ERR_FIELDINIT\|CLIPREGION\|ERR_DELETEFILE\|LANGUAGE_SLOVENIAN\|SCALEMODE_LAYER\|MILLISECONDS\|COUNTRY_MALI\|SCALEMODE_AUTO\|LAYERBUTTON\|ERR_LOADICON\|COUNTRY_AUSTRIA\|ERR_NOFUNCTION\|COUNTRY_MALTA\|HLINES\|ERR_NUMSTRCMP\|ERR_SQBRACKETOPEN\|ERR_MODIFYABG\|LANGUAGE_GEORGIAN\|DISPMODE_ASK\|ERR_READRANGE\|ERR_UNTILWOREPEAT\|DISPMODE_WINDOWED\|FONTWEIGHT_REGULAR\|LANGUAGE_QUECHUA\|DISPSTATE_MINIMIZED\|DISPSTATE_CLOSED\|DISPSTATE_OPEN\|ERR_FREECURPOINTER\|DEINTERLACE_DOUBLE\|DEINTERLACE_DEFAULT\|ENCODING_AMIGA\|ENCODING_UTF8\|ENCODING_RAW\|FONTSLANT_OBLIQUE\|ERR_STRTOOSHORT\|ANMFMT_MJPEG\|ERR_CLIPWRITE\|FONTSLANT_ROMAN\|PERMREQ_READEXTERNAL\|TURNDOWNBOTTOM\|FONTWEIGHT_HEAVY\|ATTRPLAYING\|FONTWEIGHT_ULTRABOLD\|LANGUAGE_RUSSIAN\|FONTWEIGHT_BOLD\|FONTWEIGHT_DEMIBOLD\|REQICON_QUESTION\|COUNTRY_TANZANIA\|COUNTRY_SAINTBARTHELEMY\|DISPMODE_FULLSCREEN\|FONTWEIGHT_NORMAL\|ERR_GUIGFX\|ERR_LOADFRAME\|HIDELAYER\|COUNTRY_SAOTOMEANDPRINCIPE\|FONTWEIGHT_ULTRALIGHT\|ERR_GRABSCREEN\|SPIRAL\|FONTWEIGHT_THIN\|FONTENGINE_INBUILT\|COUNTRY_TIMOR\|ATTRDRIVER\|MONOSPACE\|ERR_SYNTAXERROR\|PRGTYPE_APPLET\|COUNTRY_URUGUAY\|PARITY_EVEN\|COUNTRY_ERITREA\|MODE_READ\|LANGUAGE_CENTRALKHMER\|ERR_SHORTIF\|BITMAP_DEFAULT\|ERR_ESCREPLACE\|ERR_FINDMUSIC\|ERR_MEMCODE\|ATTRMENU\|ERR_DISPMINIMIZED\|JOYNODIR\|ATTRMODE\|ERR_FINDDISPLAY\|ERR_BADWAVE\|LANGUAGE_PERSIAN\|SHDWSOUTHWEST\|ERR_ADDTASK\|ERR_NAMEUSED\|ERR_CLIPREAD\|LANGUAGE_TSWANA\|ATTRBORDERBOTTOM\|SPRITE\|ERR_DOUBLEMENU\|ERR_TOKENEXPECTED\|EDGE\|FILLTEXTURE\|IO_BUFFERED\|ERR_JAVAMETHOD\|GRAY\|NUMERICAL\|ERR_VFONTTYPE\|COUNTRY_LIECHTENSTEIN\|COUNTRY_GHANA\|ERR_LAYERSON\|LANGUAGE_BASQUE\|SERIAL\|ALL\|ERR_SELECTMASK\|COUNTRY_CYPRUS\|LANGUAGE_MAORI\|ERR_DBTRANSWIN\|ATTRID\|ERR_NUMBEREXPECTED\|ANTIALIAS\|SCROLLSOUTHWEST\|ERR_PLUGINSUPPORT\|ERR_WRONGID\|COUNTRY_SRILANKA\|ERR_SENDTIMEOUT\|ERR_EQUALEXPECTED\|ERR_SERIALIO\|COUNTRY_LESOTHO\|ERR_CREATEDOCKY\|ERR_INITSERIAL\|COUNTRY_SLOVENIA\|COUNTRY_AFGHANISTAN\|ERR_FUNCDECLA\|HW_REVISION\|ERR_MALFORMPAT2\|ERR_RENDERER\|COUNTRY_KUWAIT\|ERR_SURFACE\|ERR_FINDARRAY\|ERR_MULTIDISPLAYS\|ERR_TEXTSYNTAX\|ERR_ICONVECTOR\|ERR_BRACKETCLOSE\|SELMODE_NORMAL\|SCALEMODE_NONE\|LANGUAGE_KINYARWANDA\|ERR_CORETEXT\|COUNTRY_MONTENEGRO\|ERR_VIDEOINIT\|LANGUAGE_LUBAKATANGA\|ERR_TRIALINCLUDE\|ERR_READFILE\|ERR_TRIALSAVEVID\|ERR_ATSUI\|ERR_TRIALCOMPILE\|ERR_RADIOTOGGLEMENU\|LANGUAGE_MALAGASY\|COUNTRY_ALGERIA\|ERR_TABEXPECTED3\|LANGUAGE_TIBETAN\|ERR_ELSETWICE\|ERR_FINDSELECTOR\|ERR_FRAMEGRABBER\|ERR_COREFOUNDATION\|COUNTRY_HONDURAS\|ERR_FINDICON\|FILEATTR_READONLY\|ERR_INVALIDUTF8ARG\|ERR_DIFFENCODING\|COUNTRY_BARBADOS\|ERR_INVALIDUTF8\|ERR_INVREPLACE\|ERR_COMPLEXPATTERN\|ERR_AMIGAGUIDE\|LANGUAGE_AFRIKAANS\|ERR_LINKPLUGIN\|ERR_STACK\|MASKVANILLACOPY\|MODE_READWRITE\|ERR_FILESIZE\|ERR_MUSPLAYING\|ERR_VIDNOTPLAYING\|COUNTRY_DJIBOUTI\|ERR_ALLOCMASK\|ERR_ALLOCALPHA\|ERR_KEYFILE\|ERR_VISUALINFO\|ERR_FINDCLIENT\|ERR_SENDDATA\|LANGUAGE_NDONGA\|COUNTRY_DOMINICANREPUBLIC\|ERR_UNEXPECTEDSYM\|ERR_FULLSCREEN\|ERR_SCREENMODE\|ATTRBORDERLEFT\|COUNTRY_SWEDEN\|ERR_TFIMAGE\|ERR_LOCKBMAP\|ERR_FINDMONITOR\|COUNTRY_ROMANIA\|ATTRCURSORX\|ERR_NOCONTEXTMENU\|ERR_ACCELERATOR\|ERR_VECTORBRUSH\|FILEATTR_ARCHIVE\|ERR_ENDWITHWOWITH\|ERR_CONTEXTMENU\|SHDWNORTH\|SHDWNORTHWEST\|ERR_EMPTYMENUTREE\|ERR_FINDMENUITEM\|COUNTRY_RUSSIA\|ERR_DEFFONT\|ERR_CREATEMENU\|ANIM\|COUNTRY_ETHIOPIA\|ERR_MENUCOMPLEXITY\|MODLALT\|ERR_WRONGCMDRECVIDEO\|ERR_REGISTRYWRITE\|HIDEBRUSH\|ERR_SENDMESSAGE\|COUNTRY_LIBERIA\|ERR_FINDAPPLICATION\|ERR_NEEDAPPLICATION\|ERR_COORDSRANGE\|JOYRIGHT\|ERR_UNKNOWNATTR\|ERR_APPLICATION\|COUNTRY_FIJI\|ERR_SEEKFILE\|ERR_TABLEDECLA\|ERR_FINDDIR\|AMIGAICON_DRAWER\|COUNTRY_COMOROS\|ERR_MODIFYSPRITE\|STEREO8\|ERR_DDMOBILE\|ERR_HWBMCLOSEDISP\|ERR_HWDBFREEDISP\|BOTTOMOUT\|ERR_FINDBGPIC\|ERR_RETWOGOSUB\|ERR_BITMAP\|ERR_REQUIREPLUGIN\|ERR_DISPLAYADAPTERSUPPORT\|ERR_SOCKNAME\|RED\|ERR_SCRPIXFMT\|PI\|ERR_FINDSPRITE\|LANGUAGE_OJIBWA\|ERR_REQUIREFIELD\|COUNTRY_TAJIKISTAN\|ERR_WRITEONLY\|ERR_VIDLAYERFUNC\|ERR_VIDSTOPPED\|ERR_VIDEOLAYER\|ERR_CMDASVAR\|ERR_REGCLASS\|AMIGAICON_TOOL\|RECTWEST\|ERR_FINDACTIVITY\|ERR_JAVA\|ERR_UDEXPECTED\|LANGUAGE_CHICHEWA\|ERR_NOMIMEVIEWER\|ACTIVEWINDOW\|FILEATTR_SCRIPT\|ERR_GETSHORTCUT\|IMGFMT_PNG\|LAYER_VS_BOX\|LANGUAGE_MALTESE\|ATTRXSERVER\|ERR_CREATEICON\|LANGUAGE_DANISH\|ERR_SATFREEDISP\|ERR_PERCENTFORMATSTR\|COUNTRY_BELGIUM\|ERR_VIDPLAYING\|ERR_VIDPAUSED\|SECONDS\|ERR_SAVERALPHA\|ATTRMAXWIDTH\|ERR_HWBRUSHFUNC\|COUNTRY_ARGENTINA\|LANGUAGE_TIGRINYA\|SLOWSPEED\|LANGUAGE_NORWEGIAN\|ERR_HWBRUSH\|COUNTRY_BENIN\|DENSITY_HIGH\|ERR_PLUGINSYMBOL\|BARS\|ERR_UNKNOWNSMPOUT\|ERR_SAVEANIM\|ERR_FINDPOINTER\|ERR_UNKNOWNANMOUT\|LANGUAGE_FRENCH\|ERR_SAVEIMAGE\|ATTRSCALEMODE\|ERR_UNKNOWNIMGOUT\|CONICAL\|ERR_NOFMBHANDLER\|ERR_NOMUSICCB\|FILETYPE_ANIM\|LANGUAGE_SOMALI\|ATTRFONTSIZE\|COUNTRY_PARAGUAY\|COUNTRY_TURKMENISTAN\|ERR_SEEKFORMAT\|ERR_DBVIDEOLAYER\|LANGUAGE_IRISH\|COUNTRY_MAYOTTE\|ERR_BADCALLBACKRET\|YELLOW\|ERR_MODIFYPSMP\|DELETEFILE_STATUS\|ERR_DSOUNDNOTIPOS\|ERR_READONLY\|ERR_MOBILE\|ERR_MONITORFULLSCREEN\|ERR_WRONGDTYPE\|COUNTRY_CHAD\|LINEAR\|ONKEYDOWNALL\|ERR_INVNEXTKEY\|WHITE\|ATTRSIZE\|ATTRMAXHEIGHT\|ERR_FINDSERIAL\|LITTLEENDIAN\|ERR_NOCOLON\|ERR_LOADPLUGIN\|ERR_VIDEOTRANS\|COUNTRY_TUNISIA\|ERR_WRITE\|COUNTRY_PALAU\|ERR_SELECTBG\|ERR_VIDEOFRAME\|LANGUAGE_BURMESE\|SWISS\|COUNTRY_GREENLAND\|ERR_VIDATTACHED\|PLOT\|ERR_SOCKOPT\|ERR_QUICKTIME\|LANGUAGE_ARMENIAN\|REQICON_INFORMATION\|ERR_OLDAPPLET\|ERR_LOADVIDEO\|ERR_MOVEFILE\|ERR_ENDBLKWOBLK\|ERR_NOTENOUGHPIXELS\|ATTRSCALEHEIGHT\|LANGUAGE_SAMOAN\|VCLOSECURTAIN\|COUNTRY_IRELAND\|ERR_OPENAUDIO\|ERR_NOFILTERNAME\|ATTRMAXIMIZED\|ADF_FX\|COUNTRY_SAINTVINCENT\|RECEIVEDATA_PACKET\|COUNTRY_ARUBA\|ERR_UNSETENV\|ERR_ALSAPCM\|ERR_XCURSOR\|LANGUAGE_ALBANIAN\|HLINES2\|LANGUAGE_KURDISH\|ERR_CREATEGC\|ERR_TOOSMALL2\|COUNTRY_TUVALU\|BIGENDIAN\|LANGUAGE_GREENLANDIC\|ERR_UPLOADFORBIDDEN\|ERR_DINPUT\|TICKS\|ERR_NOCOMPRESS\|ERR_BADURL\|ERR_NOLOOPCONT\|ERR_HOSTNAME\|ERR_PEERNAME\|DOUBLE\|ERR_FINDSERVER\|ERR_OPENSOCKET\|ATTRHOSTSCALE\|ERR_XDISPLAY\|ERR_TFVBRUSH\|ERR_TOOMANYARGS\|DATELOCAL\|ERR_DEMO\|ERR_NOJOYATPORT\|COUNTRY_USA\|ERR_RENDERADLAYER\|ERR_OPENLIB\|COUNTRY_EGYPT\|DTR_ON\|FADE\|COUNTRY_MARTINIQUE\|HKEY_CLASSES_ROOT\|ERR_NOACCESS\|ERR_TFVBGPICBRUSH\|ERR_CLOSEFILE\|ERR_BGPICTYPE\|LANGUAGE_AFAR\|ERR_DEMO2\|VCLOSEGATE\|ERR_LINKFONT\|ERR_FTPAUTH\|ERR_WRONGSPRITESIZE\|ERR_SPRITELINK\|ERR_ADFFREEDISP\|ERR_MONITORDIR\|ERR_REGISTRYREAD\|ERR_REMADLAYER\|ERR_FINDINTERVAL\|ATTRSTATE\|ERR_FINDLAYER\|FONTSLANT_ITALIC\|ERR_SCALEBGPIC\|SHDWSOUTHEAST\|ERR_CLIPOPEN\|ERR_BRUSHTYPE\|ERR_CLIPFORMAT\|ERR_LOADPICTURE2\|ERR_OPENSOUND2\|ATTRZPOS\|ERR_OPENANIM2\|ERR_NEEDOS41\|LANGUAGE_JAPANESE\|ERR_TABEXPECTED\|ATTRTEXT\|ERR_FINDBRUSH\|COUNTRY_BRAZIL\|COUNTRY_SINGAPORE\|LANGUAGE_SANSKRIT\|ERR_ADDAPPICON\|LOWERCURVE\|ERR_FREEADISPLAY\|ERR_ARRAYDECLA\|ERR_SMODEALPHA\|ERR_FINDANIMSTREAM\|ATTRSCALEWIDTH\|ERR_MODIFYAANIM\|CLIPBOARD_UNKNOWN\|ERR_FONTPATH\|COUNTRY_BAHAMAS\|ERR_NEGCOORDS\|ERR_JOYSTICK\|ERR_CASECST\|LANGUAGE_TAGALOG\|LANGUAGE_KANURI\|COUNTRY_PITCAIRN\|NONE\|ERR_WRONGVSTRATEGY\|ERR_APPLET\|ERR_VIDEOSTRATEGY\|ERR_READTABLE\|COUNTRY_SWAZILAND\|BEEPWARNING\|BOUNCE\|LANGUAGE_SLOVAK\|LANGUAGE_SERBIAN\|ERR_FINDASYNCDRAW\|ERR_SPRITEONSCREEN2\|ERR_NOHWFUNC\|ERR_POINTERIMG\|ERR_MUSNOTPLYNG2\|ERR_NODISLAYERS\|ERR_NUMCONCAT\|COUNTRY_PUERTORICO\|ERR_DDAUTOSCALE\|ERR_DIRECTSHOW\|ATTRALPHAINTENSITY\|FILLNONE\|SHDWSOUTH\|ERR_ZLIBVERSION\|IMGFMT_BMP\|LANGUAGE_BENGALI\|COUNTRY_HAITI\|COUNTRY_GRENADA\|VBLINDS128\|ERR_TABCALLBACK\|FILETYPE_IMAGE\|BOOLEAN\|ERR_TEXTCONVERT\|ERR_MSGPORT\|ERR_LOADPICTURE\|VSTRIPES16\|ERR_SEMAPHORE\|ERR_MASKNALPHA\|ERR_TIMER\|PRINT\|ERR_HEXPOINT\|ERR_NODIRPATTERN\|ONBUTTONRIGHTCLICKALL\|ERR_NOTXTLAYER\|ERR_STRCALLBACK\|ERR_CONCAT\|ERR_COMPLEXWHILE\|REQ_NORMAL\|ERR_NOCHANNEL\|FONTWEIGHT_EXTRALIGHT\|COUNTRY_FRENCHPOLYNESIA\|FILEATTR_PURE\|ERR_SETFILEDATE\|HSTRIPES16\|COUNTRY_SEYCHELLES\|ERR_DEMO3\|COUNTRY_HONGKONG\|FASTMEMORY\|ERR_KEYNOTFOUND\|FONTWEIGHT_BOOK\|ERR_DATATYPESAVE2\|ERR_ZLIBDATA\|TEXTOUT\|ATTRCOUNT\|SHDWWEST\|ERR_RENAME\|ERR_CMPUNSUPPORTED\|COUNTRY_MAURITIUS\|ERR_DSOUNDPLAY\|ERR_UNIMPLCMD\|AMIGAICON_DISK\|ERR_NOREXX\|COUNTRY_LAOS\|LANGUAGE_ENGLISH\|ERR_ANTIALIAS\|ERR_MENUATTACHED\|COUNTRY_MAURITANIA\|LANGUAGE_TAMIL\|ERR_UNKTEXTFMT\|ERR_NOTADIR\|ERR_REQUIRETAGFMT\|COUNTRY_CROATIA\|ERR_CACHEERROR\|ERR_TASKSETUP\|LANGUAGE_YORUBA\|ERR_CSTDOUBLEDEF\|NATIVEENDIAN\|ATTRNUMFRAMES\|ATTRSTANDARD\|LANGUAGE_SICHUANYI\|LANGUAGE_WOLOF\|LANGUAGE_SHONA\|ONKEYDOWN\|VOID\|COUNTRY_NIUE\|ERR_UNKNOWNMUSFMT\|ATTRSPRITES\|ERR_MIXMUSMOD\|ERR_SEEKRANGE\|COUNTRY_NEWZEALAND\|LANGUAGE_PALI\|FILLGRADIENT\|ERR_NOKEYWORDS\|ERR_UNKNOWNTAG\|COUNTRY_MYANMAR\|STDPTR_BUSY\|RIGHTOUT\|COUNTRY_JERSEY\|MOVEFILE_UNPROTECT\|IPUNKNOWN\|ERR_FUNCREMOVED\|MENUITEM_SELECTED\|COUNTRY_NORFOLKISLAND\|ERR_OPENANIM\|CHIPMEMORY\|COUNTRY_MADAGASCAR\|ERR_NUMTABLEARG\|ATTRCLIPREGION\|LANGUAGE_SUNDANESE\|ERR_TOOMANYCAPTURES\|ERR_NOALPHA\|ERR_BADSIGNATURE\|ERR_BADUPVALUES\|FILEATTR_DELETE_USR\|COUNTRY_LATVIA\|REQ_SAVEMODE\|ERR_VMMISMATCH\|ERR_NUMEXPECTED\|ERR_UNEXPECTEDEOF\|ERR_UNKNOWNCOND\|ERR_STRINGEXPECTED\|DURATION_LONG\|LANGUAGE_GANDA\|PRGTYPE_PROGRAM\|COUNTRY_CENTRALAFRICANREPUBLIC\|CLIPBOARD_IMAGE\|ERR_LOCK\|ERR_INVINSERT\|ERR_LAYERSUPPORT\|LANGUAGE_ASSAMESE\|COUNTRY_ANTIGUAANDBARBUDA\|FLOAT\|COUNTRY_RWANDA\|FILEATTR_READ_GRP\|LANGUAGE_TELUGU\|COUNTRY_GUINEABISSAU\|JOYLEFT\|SHDWEAST\|BGPIC\|ERR_VARSYNTAX\|ATTRNUMSUBSONGS\|PLUGINCAPS_TIMERADAPTER\|ERR_UNMPARENTHESES\|ERR_ERRORCALLED\|ERR_PERCENTFORMAT\|COUNTRY_GERMANY\|LANGUAGE_BISLAMA\|UNDO\|ERR_FINDFILE\|LANGUAGE_URDU\|PLUGINCAPS_REQUIRE\|SINE\|ERR_FINDTEXTOBJECT\|LANGUAGE_AMHARIC\|REVEALTOP\|COUNTRY_SAINTLUCIA\|ERR_DIRLOCK\|MODE_WRITE\|LANGUAGE_TURKMEN\|ERR_VIDRECTRANS\|LINE\|COUNTRY_NAMIBIA\|FILETYPEFLAGS_SAVE\|LANGUAGE_SARDINIAN\|ERR_NOMASKBRUSH\|ERR_MUSNOTPAUSED\|IPV4\|ERR_UNKNUMFMT\|ERR_DOUBLEDECLA\|ERR_INVPATCAP\|LANGUAGE_HUNGARIAN\|COUNTRY_MONTSERRAT\|LANGUAGE_FAROESE\|LANGUAGE_DZONGKHA\|ERR_LOOPRANGE\|ATTRHASALPHA\|ERR_ENDSWCHWOSWCH\|POINTER\|COUNTRY_BOUVETISLAND\|BYTE\|FILE\|ATTRRAWYPOS\|FONTWEIGHT_ULTRABLACK\|ERR_EXETYPE\|ERR_UNBALANCEDPAT\|COUNTRY_NIGER\|EOF\|ERR_LABMAINBLK\|RIGHT\|LANGUAGE_KUANYAMA\|KEEPPOSITION\|ERR_BRUSHSIZE\|LANGUAGE_KIKUYU\|CLOSEWINDOW\|ERR_CREATEPORT\|ZOOMOUT\|ERR_MODIFYABR\|IMGFMT_TIFF\|ERR_MISSINGPARAMTR\|NORMAL\|STDPTR_CUSTOM\|ERR_MEMRANGE\|LEFTOUT\|LANGUAGE_CHECHEN\|COUNTRY_BERMUDA\|MOVEFILE_DELETE\|SPRITE_VS_BOX\|LANGUAGE_BASHKIR\|ERR_SPRITEONSCREEN\|ERR_SETADAPTER\|LANGUAGE_INUPIAQ\|ALPHANUMERICAL\|COUNTRY_MACEDONIA\|COUNTRY_KENYA\|COUNTRY_PAKISTAN\|BGPICPART\|IO_UNBUFFERED\|FILETYPEFLAGS_ALPHA\|COUNTRY_ZAMBIA\|ERR_STREXPECTED\|ATTRTITLE\|UPPERCURVE\|ERR_MEMCST\|ERR_SELECTBRUSH\|ERR_NOTRANSPARENCY\|COUNTRY_SWITZERLAND\|ERR_INTERNAL1\|LANGUAGE_SINHALA\|ERR_UNKNOWNSEC\|ATTRCANSEEK\|COUNTRY_ISRAEL\|COUNTRY_SANMARINO\|VECTORPATH\|ERR_PLUGINTYPE\|ERR_CONFIG2\|ERR_SWCHWOENDSWCH\|DOUBLEBUFFER\|ERR_TABLEORNIL\|DOSTYPE_DIRECTORY\|MAROON\|ATTRBORDERTOP\|SAMPLE\|ATTRBGPIC\|PLUGINCAPS_SAVESAMPLE\|ERR_SCREENSIZE\|AMIGAICON_PROJECT\|SNAPDISPLAY\|COUNTRY_GUINEA\|SHADOW\|ERR_MAXUPVALS\|ORIENTATION_PORTRAIT\|COUNTRY_CAMBODIA\|ERR_TABEXPECTED2\|ERR_NOCHAR\|ERR_DSOUNDNOTIFY\|ERR_UNFINISHEDCAPTURE\|ATTRBITRATE\|ERR_NOCOMMA\|ERR_IFWOENDIF\|STDPTR_SYSTEM\|LANGUAGE_IGBO\|HKEY_CURRENT_CONFIG\|LANGUAGE_INTERLINGUA\|AMIGAICON_SHOW\|IPV6\|ERR_CONFIG\|ERR_COMPLEXEXPR\|ERR_FINDSAMPLE\|MODLSHIFT\|ERR_ENDFUNCWOFUNC\|PLUGINCAPS_IMAGE\|UDPNONE\|LANGUAGE_OROMO\|ERR_NEEDCOMPOSITE\|ATTRBORDERLESS\|ERR_SETFILECOMMENT\|LANGUAGE_MARATHI\|ERR_LFSYNTAX\|COUNTRY_BULGARIA\|ERR_FINDTIMEOUT\|ERR_RECVUNKNOWN\|ERR_RENDER\|ERR_CREATEDIR\|WATER2\|SLIDETOP\|ERR_PALSCREEN\|CRUSHLEFT\|COUNTRY_UKRAINE\|RADIAL\|ERR_WRONGOP\|COUNTRY_CURACAO\|ERR_NOCONSTANTS\|COUNTRY_IRAN\|FONTWEIGHT_BLACK\|REVEALBOTTOM\|ERR_PLAYERCOMP\|COUNTRY_PANAMA\|COUNTRY_ARMENIA\|INSERTBRUSH\|LANGUAGE_KOMI\|DATEDAY\|TABLE\|ATTRHARDWARE\|ONBUTTONRIGHTCLICK\|AMIGAICON_HIDE\|ERR_OPENSOUND\|SIZEWINDOW\|ATTRHOSTSCALEX\|FONTENGINE_NATIVE\|COUNTRY_IRAQ\|COUNTRY_ISLEOFMAN\|NUMBER\|HOLLYWOOD\|COUNTRY_SERBIA\|AMIGAICON_SETTITLE\|ERR_NEXTWOFOR\|FUNCTION\|ERR_GETDISKOBJ\|MODRSHIFT\|ERR_WRITEFILE\|LANGUAGE_ARAGONESE\|FILEATTR_WRITE_GRP\|LANGUAGE_UNKNOWN\|ERR_KICKSTART\|ERR_KEYWORD\|PLUGINCAPS_SAVEIMAGE\|FREESPACE\|COUNTRY_BHUTAN\|ERR_AUDIOCONVERTER\|TIMEOUT\|PERMREQ_WRITEEXTERNAL\|ERR_FINDCST\|ATTRTYPE\|ATTRHOSTTITLEBARHEIGHT\|ERR_TEXTURE\|OLIVE\|ERR_SATELLITE\|USEDSPACE\|LANGUAGE_HAITIAN\|COUNTRY_SOUTHSUDAN\|ERR_LABINWHILE\|COUNTRY_BAHRAIN\|ERR_WHILEWOWEND\|LANGUAGE_CROATIAN\|LANGUAGE_TWI\|ERR_NOAPPLET\|COUNTRY_QATAR\|ONBUTTONCLICK\|PUSHTOP\|ERR_READ\|BOX\|ADF_MOVEOBJECT\|COUNTRY_COSTARICA\|COUNTRY_POLAND\|ERR_NONE\|INTERVAL\|SLIDEBOTTOM\|HBLINDS32\|LANGUAGE_CHUVASH\|VBLINDS32\|BEEPINFORMATION\|COUNTRY_NETHERLANDS\|BEEPERROR\|FILETYPEFLAGS_FPS\|ATTRADAPTER\|COUNTRY_TONGA\|LANGUAGE_HINDI\|ERR_UNKNOWNMIMETYPE\|ERR_ANIMFRAME\|ERR_NOSPRITES\|IMGFMT_NATIVE\|LAYER\|MUSIC\|COUNTRY_LITHUANIA\|PLUGINCAPS_SOUND\|ELLIPSE\|COUNTRY_VIETNAM\|LANGUAGE_NORWEGIANBOKMAL\|ERR_IMAGEERROR\|REQICON_NONE\|FONTWEIGHT_SEMIBOLD\|SNAPWINDOW\|ATTRLOADER\|ATTRCURFRAME\|LANGUAGE_PORTUGUESE\|NEXTFRAME2\|COUNTRY_SURINAME\|ATTRXDPI\|LANGUAGE_CHINESE\|DATEMONTH\|ATTRMARGINLEFT\|COUNTRY_SOMALIA\|ERR_CONITEMS\|LANGUAGE_FIJIAN\|COUNTRY_SIERRALEONE\|LANGUAGE_OCCITAN\|LANGUAGE_SOUTHERNSOTHO\|COUNTRY_DOMINICA\|LANGUAGE_HERERO\|LANGUAGE_SWAHILI\|COUNTRY_PAPUANEWGUINEA\|COUNTRY_COOKISLANDS\|ATTRFONTDESCENDER\|COUNTRY_HUNGARY\|ERR_MODIFYSPRITE2\|DEFAULTSPEED\|TRUETYPE_DEFAULT\|LANGUAGE_AYMARA\|COUNTRY_MONGOLIA\|ATTRCURSORY\|COUNTRY_MOLDOVA\|COUNTRY_MEXICO\|ERR_PUBSCREEN\|ERR_LAYERRANGE\|ATTRLAYERSON\|DOWNLOADFILE_STATUS\|NIL\|COUNTRY_MALAYSIA\|LONG\|COUNTRY_MACAO\|LANGUAGE_LATVIAN\|COUNTRY_LEBANON\|SERVER\|COUNTRY_SOUTHKOREA\|COUNTRY_KIRIBATI\|COUNTRY_ESTONIA\|COUNTRY_ANGUILLA\|COUNTRY_TAIWAN\|ERR_TAGEXPECTED\|ATTRHEIGHT\|ERR_TFVBRUSHBGPIC\|ATTRYDPI\|COUNTRY_EQUATORIALGUINEA\|DATETIME\|LANGUAGE_BAMBARA\|EVENTHANDLER\|ATTRPOINTER\|FILETYPEFLAGS_QUALITY\|ERR_FINDVIDEO\|TURNDOWNTOP\|COUNTRY_CHRISTMASISLAND\|COUNTRY_BURUNDI\|COUNTRY_FINLAND\|ERR_MISSINGBRACKET\|LANGUAGE_ORIYA\|LANGUAGE_MONGOLIAN\|COUNTRY_THAILAND\|HKEY_LOCAL_MACHINE\|ATTRTRANSPARENTCOLOR\|COUNTRY_AUSTRALIA\|LANGUAGE_UZBEK\|ERR_SMPRANGE\|ATTRHOSTHEIGHT\|LANGUAGE_ROMANIAN\|LANGUAGE_MACEDONIAN\|COUNTRY_ANGOLA\|SEEK_BEGINNING\|IMGFMT_ILBM\|COUNTRY_GUADELOUPE\|DATEUTC\|ERR_REXXERR\|ATTRWIDTH\|FILEATTR_EXECUTE_USR\|COUNTRY_SAINTHELENA\|ICON\|ERR_LABINFUNC\|ATTRPUBSCREEN\|COUNTRY_GUERNSEY\|ERR_FINDLAYERDATA\|GREEN\|ERR_MISSINGOPBRACK\|HW_AMIGA\|HW_MACOS\|HW_LINUX\|HW_WINDOWS\|HW_ANDROID\|HW_IOS\|HW_LITTLE_ENDIAN\|HW_64BIT\|HW_AMIGAOS4\|HW_MORPHOS\|HW_AROS\|HW_WARPOS\|HW_AMIGAOS3\)\>" - +syn match hwConstant "#\<\%(ACTIVEWINDOW\|ADF_ANIM\|ADF_FX\|ADF_MOVEOBJECT\|ALL\|ALPHABETICAL\|ALPHACHANNEL\|ALPHANUMERICAL\|AMIGAICON_DEVICE\|AMIGAICON_DISK\|AMIGAICON_DRAWER\|AMIGAICON_GARBAGE\|AMIGAICON_HIDE\|AMIGAICON_KICKSTART\|AMIGAICON_NONE\|AMIGAICON_PROJECT\|AMIGAICON_SETPOSITION\|AMIGAICON_SETTITLE\|AMIGAICON_SHOW\|AMIGAICON_TOOL\|ANIM\|ANIMSTREAM\|ANIMTYPE_RASTER\|ANIMTYPE_VECTOR\|ANMFMT_GIF\|ANMFMT_IFF\|ANMFMT_MJPEG\|ANTIALIAS\|AQUA\|ARC\|ASYNCDRAW\|ASYNCOBJ\|ATTRACTIVE\|ATTRADAPTER\|ATTRALPHAINTENSITY\|ATTRBGPIC\|ATTRBITRATE\|ATTRBORDERBOTTOM\|ATTRBORDERLEFT\|ATTRBORDERLESS\|ATTRBORDERPEN\|ATTRBORDERRIGHT\|ATTRBORDERTOP\|ATTRBULLETPEN\|ATTRCANSEEK\|ATTRCLIPREGION\|ATTRCOUNT\|ATTRCURFRAME\|ATTRCURSORX\|ATTRCURSORY\|ATTRCURSUBSONG\|ATTRCYCLE\|ATTRDENSITY\|ATTRDEPTH\|ATTRDISPLAY\|ATTRDITHERMODE\|ATTRDOUBLEBUFFER\|ATTRDRIVER\|ATTRDURATION\|ATTRELAPSE\|ATTRENCODING\|ATTRFIXED\|ATTRFONTAA\|ATTRFONTASCENDER\|ATTRFONTCHARMAP\|ATTRFONTDEPTH\|ATTRFONTDESCENDER\|ATTRFONTENGINE\|ATTRFONTNAME\|ATTRFONTPALETTE\|ATTRFONTSCALABLE\|ATTRFONTSIZE\|ATTRFONTTRANSPARENTPEN\|ATTRFONTTYPE\|ATTRFORMAT\|ATTRFRAMEDELAY\|ATTRFUNCTION\|ATTRGROUP\|ATTRHARDWARE\|ATTRHASALPHA\|ATTRHASMASK\|ATTRHEIGHT\|ATTRHOSTDEPTH\|ATTRHOSTHEIGHT\|ATTRHOSTMONITORS\|ATTRHOSTSCALE\|ATTRHOSTSCALEX\|ATTRHOSTSCALEY\|ATTRHOSTTASKBAR\|ATTRHOSTTITLEBARHEIGHT\|ATTRHOSTWIDTH\|ATTRID\|ATTRIMMERSIVEMODE\|ATTRINTERPOLATE\|ATTRKEYBOARD\|ATTRLAYERID\|ATTRLAYERS\|ATTRLAYERSON\|ATTRLOADER\|ATTRMARGINLEFT\|ATTRMARGINRIGHT\|ATTRMASKMODE\|ATTRMAXHEIGHT\|ATTRMAXIMIZED\|ATTRMAXWIDTH\|ATTRMENU\|ATTRMODE\|ATTRMONITOR\|ATTRNOCLOSE\|ATTRNOHIDE\|ATTRNOMODESWITCH\|ATTRNUMENTRIES\|ATTRNUMFRAMES\|ATTRNUMSUBSONGS\|ATTRONSCREEN\|ATTRORIENTATION\|ATTROUTPUTDEVICE\|ATTRPALETTE\|ATTRPALETTEMODE\|ATTRPAUSED\|ATTRPEN\|ATTRPITCH\|ATTRPLAYING\|ATTRPOINTER\|ATTRPOSITION\|ATTRPUBSCREEN\|ATTRRAWHEIGHT\|ATTRRAWWIDTH\|ATTRRAWXPOS\|ATTRRAWYPOS\|ATTRSCALEHEIGHT\|ATTRSCALEMODE\|ATTRSCALESWITCH\|ATTRSCALEWIDTH\|ATTRSHADOWPEN\|ATTRSIZE\|ATTRSIZEABLE\|ATTRSPRITES\|ATTRSTANDARD\|ATTRSTATE\|ATTRSYSTEMBARS\|ATTRTEXT\|ATTRTITLE\|ATTRTRANSPARENTCOLOR\|ATTRTRANSPARENTPEN\|ATTRTYPE\|ATTRUSERDATA\|ATTRVISIBLE\|ATTRWIDTH\|ATTRXDPI\|ATTRXPOS\|ATTRXSERVER\|ATTRYDPI\|ATTRYPOS\|ATTRZPOS\|BARS\|BAUD_115200\|BAUD_1200\|BAUD_19200\|BAUD_2400\|BAUD_300\|BAUD_38400\|BAUD_460800\|BAUD_4800\|BAUD_57600\|BAUD_600\|BAUD_9600\|BEEPERROR\|BEEPINFORMATION\|BEEPQUESTION\|BEEPSYSTEM\|BEEPWARNING\|BGPIC\|BGPICPART\|BIGENDIAN\|BIGSINE\|BITMAP_DEFAULT\|BLACK\|BLEND\|BLUE\|BOLD\|BOOLEAN\|BORDER\|BOTTOM\|BOTTOMOUT\|BOUNCE\|BOX\|BRUSH\|BRUSH_VS_BOX\|BRUSHPART\|BULLET_ARROW\|BULLET_BOX\|BULLET_CHECKMARK\|BULLET_CIRCLE\|BULLET_CROSS\|BULLET_DASH\|BULLET_DIAMOND\|BULLET_LALPHA\|BULLET_LALPHADOUBLE\|BULLET_LALPHASINGLE\|BULLET_LROMAN\|BULLET_LROMANDOUBLE\|BULLET_LROMANSINGLE\|BULLET_NONE\|BULLET_NUMERIC\|BULLET_NUMERICDOUBLE\|BULLET_NUMERICSINGLE\|BULLET_UALPHA\|BULLET_UALPHADOUBLE\|BULLET_UALPHASINGLE\|BULLET_UROMAN\|BULLET_UROMANDOUBLE\|BULLET_UROMANSINGLE\|BYTE\|CAPBUTT\|CAPROUND\|CAPSQUARE\|CARDBOTTOM\|CARDTOP\|CENTER\|CHARMAP_ADOBECUSTOM\|CHARMAP_ADOBEEXPERT\|CHARMAP_ADOBELATIN1\|CHARMAP_ADOBESTANDARD\|CHARMAP_APPLEROMAN\|CHARMAP_BIG5\|CHARMAP_DEFAULT\|CHARMAP_JOHAB\|CHARMAP_MSSYMBOL\|CHARMAP_OLDLATIN2\|CHARMAP_SJIS\|CHARMAP_UNICODE\|CHARMAP_WANSUNG\|CHIPMEMORY\|CIRCLE\|CLIENT\|CLIPBOARD_EMPTY\|CLIPBOARD_IMAGE\|CLIPBOARD_SOUND\|CLIPBOARD_TEXT\|CLIPBOARD_UNKNOWN\|CLIPREGION\|CLOCKWIPE\|CLOSEWINDOW\|CONICAL\|COPYFILE_FAILED\|COPYFILE_OVERWRITE\|COPYFILE_STATUS\|COPYFILE_UNPROTECT\|COUNTBOTH\|COUNTDIRECTORIES\|COUNTFILES\|COUNTRY_AFGHANISTAN\|COUNTRY_ALANDISLANDS\|COUNTRY_ALBANIA\|COUNTRY_ALGERIA\|COUNTRY_AMERICANSAMOA\|COUNTRY_ANDORRA\|COUNTRY_ANGOLA\|COUNTRY_ANGUILLA\|COUNTRY_ANTARCTICA\|COUNTRY_ANTIGUAANDBARBUDA\|COUNTRY_ARGENTINA\|COUNTRY_ARMENIA\|COUNTRY_ARUBA\|COUNTRY_AUSTRALIA\|COUNTRY_AUSTRIA\|COUNTRY_AZERBAIJAN\|COUNTRY_BAHAMAS\|COUNTRY_BAHRAIN\|COUNTRY_BANGLADESH\|COUNTRY_BARBADOS\|COUNTRY_BELARUS\|COUNTRY_BELGIUM\|COUNTRY_BELIZE\|COUNTRY_BENIN\|COUNTRY_BERMUDA\|COUNTRY_BESISLANDS\|COUNTRY_BHUTAN\|COUNTRY_BOLIVIA\|COUNTRY_BOSNIAANDHERZEGOVINA\|COUNTRY_BOTSWANA\|COUNTRY_BOUVETISLAND\|COUNTRY_BRAZIL\|COUNTRY_BRUNEI\|COUNTRY_BULGARIA\|COUNTRY_BURKINAFASO\|COUNTRY_BURUNDI\|COUNTRY_CAMBODIA\|COUNTRY_CAMEROON\|COUNTRY_CANADA\|COUNTRY_CAPEVERDE\|COUNTRY_CAYMANISLANDS\|COUNTRY_CENTRALAFRICANREPUBLIC\|COUNTRY_CHAD\|COUNTRY_CHILE\|COUNTRY_CHINA\|COUNTRY_CHRISTMASISLAND\|COUNTRY_COCOSISLANDS\|COUNTRY_COLOMBIA\|COUNTRY_COMOROS\|COUNTRY_CONGO\|COUNTRY_COOKISLANDS\|COUNTRY_COSTARICA\|COUNTRY_CROATIA\|COUNTRY_CUBA\|COUNTRY_CURACAO\|COUNTRY_CYPRUS\|COUNTRY_CZECHREPUBLIC\|COUNTRY_DENMARK\|COUNTRY_DJIBOUTI\|COUNTRY_DOMINICA\|COUNTRY_DOMINICANREPUBLIC\|COUNTRY_DRCONGO\|COUNTRY_ECUADOR\|COUNTRY_EGYPT\|COUNTRY_ELSALVADOR\|COUNTRY_EQUATORIALGUINEA\|COUNTRY_ERITREA\|COUNTRY_ESTONIA\|COUNTRY_ETHIOPIA\|COUNTRY_FALKLANDISLANDS\|COUNTRY_FAROEISLANDS\|COUNTRY_FIJI\|COUNTRY_FINLAND\|COUNTRY_FRANCE\|COUNTRY_FRENCHGUIANA\|COUNTRY_FRENCHPOLYNESIA\|COUNTRY_GABON\|COUNTRY_GAMBIA\|COUNTRY_GEORGIA\|COUNTRY_GERMANY\|COUNTRY_GHANA\|COUNTRY_GIBRALTAR\|COUNTRY_GREECE\|COUNTRY_GREENLAND\|COUNTRY_GRENADA\|COUNTRY_GUADELOUPE\|COUNTRY_GUAM\|COUNTRY_GUATEMALA\|COUNTRY_GUERNSEY\|COUNTRY_GUINEA\|COUNTRY_GUINEABISSAU\|COUNTRY_GUYANA\|COUNTRY_HAITI\|COUNTRY_HOLYSEE\|COUNTRY_HONDURAS\|COUNTRY_HONGKONG\|COUNTRY_HUNGARY\|COUNTRY_ICELAND\|COUNTRY_INDIA\|COUNTRY_INDONESIA\|COUNTRY_IRAN\|COUNTRY_IRAQ\|COUNTRY_IRELAND\|COUNTRY_ISLEOFMAN\|COUNTRY_ISRAEL\|COUNTRY_ITALY\|COUNTRY_IVORYCOAST\|COUNTRY_JAMAICA\|COUNTRY_JAPAN\|COUNTRY_JERSEY\|COUNTRY_JORDAN\|COUNTRY_KAZAKHSTAN\|COUNTRY_KENYA\|COUNTRY_KIRIBATI\|COUNTRY_KUWAIT\|COUNTRY_KYRGYZSTAN\|COUNTRY_LAOS\|COUNTRY_LATVIA\|COUNTRY_LEBANON\|COUNTRY_LESOTHO\|COUNTRY_LIBERIA\|COUNTRY_LIBYA\|COUNTRY_LIECHTENSTEIN\|COUNTRY_LITHUANIA\|COUNTRY_LUXEMBOURG\|COUNTRY_MACAO\|COUNTRY_MACEDONIA\|COUNTRY_MADAGASCAR\|COUNTRY_MALAWI\|COUNTRY_MALAYSIA\|COUNTRY_MALDIVES\|COUNTRY_MALI\|COUNTRY_MALTA\|COUNTRY_MARSHALLISLANDS\|COUNTRY_MARTINIQUE\|COUNTRY_MAURITANIA\|COUNTRY_MAURITIUS\|COUNTRY_MAYOTTE\|COUNTRY_MEXICO\|COUNTRY_MICRONESIA\|COUNTRY_MOLDOVA\|COUNTRY_MONACO\|COUNTRY_MONGOLIA\|COUNTRY_MONTENEGRO\|COUNTRY_MONTSERRAT\|COUNTRY_MOROCCO\|COUNTRY_MOZAMBIQUE\|COUNTRY_MYANMAR\|COUNTRY_NAMIBIA\|COUNTRY_NAURU\|COUNTRY_NEPAL\|COUNTRY_NETHERLANDS\|COUNTRY_NEWCALEDONIA\|COUNTRY_NEWZEALAND\|COUNTRY_NICARAGUA\|COUNTRY_NIGER\|COUNTRY_NIGERIA\|COUNTRY_NIUE\|COUNTRY_NORFOLKISLAND\|COUNTRY_NORTHKOREA\|COUNTRY_NORWAY\|COUNTRY_OMAN\|COUNTRY_PAKISTAN\|COUNTRY_PALAU\|COUNTRY_PALESTINE\|COUNTRY_PANAMA\|COUNTRY_PAPUANEWGUINEA\|COUNTRY_PARAGUAY\|COUNTRY_PERU\|COUNTRY_PHILIPPINES\|COUNTRY_PITCAIRN\|COUNTRY_POLAND\|COUNTRY_PORTUGAL\|COUNTRY_PUERTORICO\|COUNTRY_QATAR\|COUNTRY_REUNION\|COUNTRY_ROMANIA\|COUNTRY_RUSSIA\|COUNTRY_RWANDA\|COUNTRY_SAINTBARTHELEMY\|COUNTRY_SAINTHELENA\|COUNTRY_SAINTKITTSANDNEVIS\|COUNTRY_SAINTLUCIA\|COUNTRY_SAINTVINCENT\|COUNTRY_SAMOA\|COUNTRY_SANMARINO\|COUNTRY_SAOTOMEANDPRINCIPE\|COUNTRY_SAUDIARABIA\|COUNTRY_SENEGAL\|COUNTRY_SERBIA\|COUNTRY_SEYCHELLES\|COUNTRY_SIERRALEONE\|COUNTRY_SINGAPORE\|COUNTRY_SLOVAKIA\|COUNTRY_SLOVENIA\|COUNTRY_SOLOMONISLANDS\|COUNTRY_SOMALIA\|COUNTRY_SOUTHAFRICA\|COUNTRY_SOUTHKOREA\|COUNTRY_SOUTHSUDAN\|COUNTRY_SPAIN\|COUNTRY_SRILANKA\|COUNTRY_SUDAN\|COUNTRY_SURINAME\|COUNTRY_SWAZILAND\|COUNTRY_SWEDEN\|COUNTRY_SWITZERLAND\|COUNTRY_SYRIA\|COUNTRY_TAIWAN\|COUNTRY_TAJIKISTAN\|COUNTRY_TANZANIA\|COUNTRY_THAILAND\|COUNTRY_TIMOR\|COUNTRY_TOGO\|COUNTRY_TONGA\|COUNTRY_TRINIDADANDTOBAGO\|COUNTRY_TUNISIA\|COUNTRY_TURKEY\|COUNTRY_TURKMENISTAN\|COUNTRY_TUVALU\|COUNTRY_UAE\|COUNTRY_UGANDA\|COUNTRY_UK\|COUNTRY_UKRAINE\|COUNTRY_UNKNOWN\|COUNTRY_URUGUAY\|COUNTRY_USA\|COUNTRY_UZBEKISTAN\|COUNTRY_VANUATU\|COUNTRY_VENEZUELA\|COUNTRY_VIETNAM\|COUNTRY_YEMEN\|COUNTRY_ZAMBIA\|COUNTSEPARATE\|CR_DEAD\|CR_RUNNING\|CR_SUSPENDED\|CROSSFADE\|CRUSHBOTTOM\|CRUSHLEFT\|CRUSHRIGHT\|CRUSHTOP\|DAMPED\|DATA_5\|DATA_6\|DATA_7\|DATA_8\|DATEDAY\|DATELOCAL\|DATELOCALNATIVE\|DATEMONTH\|DATETIME\|DATEUTC\|DATEYEAR\|DEFAULTICON\|DEFAULTSPEED\|DEINTERLACE_DEFAULT\|DEINTERLACE_DOUBLE\|DELETEFILE_FAILED\|DELETEFILE_STATUS\|DELETEFILE_UNPROTECT\|DENSITY_HIGH\|DENSITY_LOW\|DENSITY_MEDIUM\|DENSITY_NONE\|DIAGONAL\|DIRECTORY\|DIRMONITOR_ADD\|DIRMONITOR_CHANGE\|DIRMONITOR_REMOVE\|DISPLAY\|DISPMODE_ASK\|DISPMODE_FAKEFULLSCREEN\|DISPMODE_FULLSCREEN\|DISPMODE_FULLSCREENSCALE\|DISPMODE_MODEREQUESTER\|DISPMODE_MODESWITCH\|DISPMODE_SYSTEMSCALE\|DISPMODE_WINDOWED\|DISPSTATE_CLOSED\|DISPSTATE_MINIMIZED\|DISPSTATE_OPEN\|DISSOLVE\|DITHERMODE_FLOYDSTEINBERG\|DITHERMODE_NONE\|DOSTYPE_DIRECTORY\|DOSTYPE_FILE\|DOUBLE\|DOUBLEBUFFER\|DOWNLOADFILE_STATUS\|DTR_OFF\|DTR_ON\|DURATION_LONG\|DURATION_SHORT\|EDGE\|ELLIPSE\|ENCODING_AMIGA\|ENCODING_ISO8859_1\|ENCODING_RAW\|ENCODING_UTF8\|EOF\|ERR_8OR16BITONLY\|ERR_ACCELERATOR\|ERR_ADDAPPICON\|ERR_ADDAPPWIN\|ERR_ADDSYSEVENT\|ERR_ADDTASK\|ERR_ADFFREEDISP\|ERR_ADFWRONGDISP\|ERR_AFILEPROP\|ERR_AHI\|ERR_ALLOCALPHA\|ERR_ALLOCCHANNEL\|ERR_ALLOCCHUNKY\|ERR_ALLOCMASK\|ERR_ALRDYDECLRD\|ERR_ALREADYASYNC\|ERR_ALSAPCM\|ERR_AMIGAGUIDE\|ERR_ANIMDISK\|ERR_ANIMFRAME\|ERR_ANTIALIAS\|ERR_APPLET\|ERR_APPLETVERSION\|ERR_APPLICATION\|ERR_ARGS\|ERR_ARRAYDECLA\|ERR_ASSERTFAILED\|ERR_ATSUI\|ERR_AUDIOCONVERTER\|ERR_BACKFILL\|ERR_BAD8SVX\|ERR_BADBASE64\|ERR_BADBYTECODE\|ERR_BADCALLBACKRET\|ERR_BADCONSTANT\|ERR_BADDIMENSIONS\|ERR_BADENCODING\|ERR_BADINTEGER\|ERR_BADIP\|ERR_BADLAYERTYPE\|ERR_BADPLATFORM\|ERR_BADSIGNATURE\|ERR_BADUPVALUES\|ERR_BADURL\|ERR_BADWAVE\|ERR_BADYIELD\|ERR_BEGINREFRESH\|ERR_BGPICBUTTON\|ERR_BGPICPALETTE\|ERR_BGPICTYPE\|ERR_BITMAP\|ERR_BLKWOENDBLK\|ERR_BRACECLOSE\|ERR_BRACEOPEN\|ERR_BRACKETCLOSE\|ERR_BRACKETOPEN\|ERR_BRUSHLINK\|ERR_BRUSHSIZE\|ERR_BRUSHTYPE\|ERR_CACHEERROR\|ERR_CASECST\|ERR_CHANGEDIR\|ERR_CHANNELRANGE\|ERR_CHRCSTEMPTY\|ERR_CHRCSTLEN\|ERR_CLIPFORMAT\|ERR_CLIPOPEN\|ERR_CLIPREAD\|ERR_CLIPWRITE\|ERR_CLOSEDDISPLAY\|ERR_CLOSEFILE\|ERR_CMDASVAR\|ERR_CMPUNSUPPORTED\|ERR_COLORSPACE\|ERR_COMMENTSTRUCT\|ERR_COMMODITY\|ERR_COMPLEXEXPR\|ERR_COMPLEXPATTERN\|ERR_COMPLEXWHILE\|ERR_CONCAT\|ERR_CONFIG\|ERR_CONFIG2\|ERR_CONITEMS\|ERR_CONSOLEARG\|ERR_CONTEXTMENU\|ERR_COORDSRANGE\|ERR_COREFOUNDATION\|ERR_CORETEXT\|ERR_CREATEDIR\|ERR_CREATEDOCKY\|ERR_CREATEEVENT\|ERR_CREATEGC\|ERR_CREATEICON\|ERR_CREATEMENU\|ERR_CREATEPORT\|ERR_CREATESHORTCUT\|ERR_CSTDOUBLEDEF\|ERR_CTRLSTRUCT\|ERR_CYIELD\|ERR_DATATYPEALPHA\|ERR_DATATYPESAVE\|ERR_DATATYPESAVE2\|ERR_DBLENCODING\|ERR_DBPALETTE\|ERR_DBTRANSWIN\|ERR_DBVIDEOLAYER\|ERR_DDAUTOSCALE\|ERR_DDMOBILE\|ERR_DDRECVIDEO\|ERR_DEADRESUME\|ERR_DEFFONT\|ERR_DELETEFILE\|ERR_DEMO\|ERR_DEMO2\|ERR_DEMO3\|ERR_DEPTHMISMATCH\|ERR_DEPTHRANGE\|ERR_DESERIALIZE\|ERR_DIFFDEPTH\|ERR_DIFFENCODING\|ERR_DINPUT\|ERR_DIRECTSHOW\|ERR_DIRLOCK\|ERR_DISPLAYADAPTERSUPPORT\|ERR_DISPLAYDESKTOP\|ERR_DISPLAYDESKTOPPAL\|ERR_DISPLAYSIZE\|ERR_DISPMINIMIZED\|ERR_DLOPEN\|ERR_DOUBLEDECLA\|ERR_DOUBLEMENU\|ERR_DRAWPATH\|ERR_DSOUNDNOTIFY\|ERR_DSOUNDNOTIPOS\|ERR_DSOUNDPLAY\|ERR_ELSEIFAFTERELSE\|ERR_ELSETWICE\|ERR_ELSEWOIF\|ERR_EMPTYMENUTREE\|ERR_EMPTYOBJ\|ERR_EMPTYPATH\|ERR_EMPTYSCRIPT\|ERR_EMPTYTABLE\|ERR_ENDBLKWOBLK\|ERR_ENDDOUBLEBUFFER\|ERR_ENDFUNCWOFUNC\|ERR_ENDIFWOIF\|ERR_ENDSWCHWOSWCH\|ERR_ENDWITHWOWITH\|ERR_EQUALEXPECTED\|ERR_ERRORCALLED\|ERR_ESCREPLACE\|ERR_EVNTEXPCTED\|ERR_EXAMINE\|ERR_EXECUTE\|ERR_EXETYPE\|ERR_FGRABVIDSTATE\|ERR_FIELDINIT\|ERR_FILEEXIST\|ERR_FILEFORMAT\|ERR_FILENOTFOUND\|ERR_FILESIZE\|ERR_FINDACTIVITY\|ERR_FINDANIM\|ERR_FINDANIMSTREAM\|ERR_FINDAPPLICATION\|ERR_FINDARRAY\|ERR_FINDASYNCDRAW\|ERR_FINDASYNCOBJ\|ERR_FINDBGPIC\|ERR_FINDBRUSH\|ERR_FINDBUTTON\|ERR_FINDCLIENT\|ERR_FINDCLIPREGION\|ERR_FINDCST\|ERR_FINDDIR\|ERR_FINDDISPLAY\|ERR_FINDFILE\|ERR_FINDFONT\|ERR_FINDFONT2\|ERR_FINDICON\|ERR_FINDINTERVAL\|ERR_FINDLAYER\|ERR_FINDLAYERDATA\|ERR_FINDMEMBLK\|ERR_FINDMENU\|ERR_FINDMENUITEM\|ERR_FINDMONITOR\|ERR_FINDMOVE\|ERR_FINDMUSIC\|ERR_FINDOBJECTDATA\|ERR_FINDPALETTE\|ERR_FINDPATH\|ERR_FINDPLUGIN\|ERR_FINDPOINTER\|ERR_FINDPORT\|ERR_FINDSAMPLE\|ERR_FINDSELECTOR\|ERR_FINDSERIAL\|ERR_FINDSERVER\|ERR_FINDSPRITE\|ERR_FINDTEXTOBJECT\|ERR_FINDTIMEOUT\|ERR_FINDTIMER\|ERR_FINDUDPOBJECT\|ERR_FINDVIDEO\|ERR_FIRSTPREPROC\|ERR_FONTFORMAT\|ERR_FONTPATH\|ERR_FONTPATH2\|ERR_FORBIDMODAL\|ERR_FOREVERWOREPEAT\|ERR_FORWONEXT\|ERR_FRAMEGRABBER\|ERR_FREEABGPIC\|ERR_FREEADISPLAY\|ERR_FREECURPOINTER\|ERR_FT2\|ERR_FTPAUTH\|ERR_FTPERROR\|ERR_FULLSCREEN\|ERR_FUNCARGS\|ERR_FUNCDECLA\|ERR_FUNCEXPECTED\|ERR_FUNCJMP\|ERR_FUNCREMOVED\|ERR_FUNCTABLEARG\|ERR_FUNCWOENDFUNC\|ERR_GETDISKOBJ\|ERR_GETIFADDRS\|ERR_GETMONITORINFO\|ERR_GETSHORTCUT\|ERR_GRABSCREEN\|ERR_GROUPNAMEUSED\|ERR_GTK\|ERR_GUIGFX\|ERR_HEXPOINT\|ERR_HOSTNAME\|ERR_HTTPERROR\|ERR_HTTPTE\|ERR_HWBMCLOSEDISP\|ERR_HWBRUSH\|ERR_HWBRUSHFUNC\|ERR_HWDBFREEDISP\|ERR_ICONDIMS\|ERR_ICONENTRY\|ERR_ICONPARMS\|ERR_ICONSIZE\|ERR_ICONSTANDARD\|ERR_ICONVECTOR\|ERR_IFWOENDIF\|ERR_IMAGEERROR\|ERR_INCOMPATBRUSH\|ERR_INISYNTAX\|ERR_INITSERIAL\|ERR_INTERNAL\|ERR_INTERNAL1\|ERR_INTEXPECTED\|ERR_INVALIDDATE\|ERR_INVALIDUTF8\|ERR_INVALIDUTF8ARG\|ERR_INVCAPIDX\|ERR_INVINSERT\|ERR_INVNEXTKEY\|ERR_INVPATCAP\|ERR_INVREPLACE\|ERR_JAVA\|ERR_JAVAMETHOD\|ERR_JOYSTICK\|ERR_KEYFILE\|ERR_KEYNOTFOUND\|ERR_KEYWORD\|ERR_KICKSTART\|ERR_LABELDECLA\|ERR_LABELDOUBLE\|ERR_LABINFOR\|ERR_LABINFUNC\|ERR_LABINIF\|ERR_LABINWHILE\|ERR_LABMAINBLK\|ERR_LAYERRANGE\|ERR_LAYERSOFF\|ERR_LAYERSON\|ERR_LAYERSUPPORT\|ERR_LAYERSUPPORT2\|ERR_LAYERSWITCH\|ERR_LEGACYPTMOD\|ERR_LFSYNTAX\|ERR_LINKFONT\|ERR_LINKPLUGIN\|ERR_LOADFRAME\|ERR_LOADICON\|ERR_LOADPICTURE\|ERR_LOADPICTURE2\|ERR_LOADPLUGIN\|ERR_LOADSOUND\|ERR_LOADVIDEO\|ERR_LOCK\|ERR_LOCK2\|ERR_LOCKBMAP\|ERR_LOCKEDOBJ\|ERR_LOOPRANGE\|ERR_LOWFREQ\|ERR_MAGICKEY\|ERR_MALFORMPAT1\|ERR_MALFORMPAT2\|ERR_MASKNALPHA\|ERR_MAXLINES\|ERR_MAXLOCALS\|ERR_MAXPARAMS\|ERR_MAXUPVALS\|ERR_MEDIAFOUNDATION\|ERR_MEM\|ERR_MEMCODE\|ERR_MEMCST\|ERR_MEMRANGE\|ERR_MENUATTACHED\|ERR_MENUCOMPLEXITY\|ERR_MISSINGBRACKET\|ERR_MISSINGFIELD\|ERR_MISSINGOPBRACK\|ERR_MISSINGPARAMTR\|ERR_MISSINGSEPARTR\|ERR_MIXMUSMOD\|ERR_MOBILE\|ERR_MODIFYAANIM\|ERR_MODIFYABG\|ERR_MODIFYABGPIC\|ERR_MODIFYABR\|ERR_MODIFYPSMP\|ERR_MODIFYSPRITE\|ERR_MODIFYSPRITE2\|ERR_MONITORDIR\|ERR_MONITORFULLSCREEN\|ERR_MONITORRANGE\|ERR_MOVEFILE\|ERR_MSGPORT\|ERR_MULDISMOBILE\|ERR_MULTIBGPIC\|ERR_MULTIDISPLAYS\|ERR_MUSFMTSUPPORT\|ERR_MUSNOTPAUSED\|ERR_MUSNOTPLYNG\|ERR_MUSNOTPLYNG2\|ERR_MUSPAUSED\|ERR_MUSPLAYING\|ERR_NAMETOOLONG\|ERR_NAMEUSED\|ERR_NEEDAPPLICATION\|ERR_NEEDCOMPOSITE\|ERR_NEEDMORPHOS2\|ERR_NEEDOS41\|ERR_NEEDPALETTEIMAGE\|ERR_NEGCOORDS\|ERR_NEWHWPLUGIN\|ERR_NEXTWOFOR\|ERR_NOABSPATH\|ERR_NOACCESS\|ERR_NOALPHA\|ERR_NOANMLAYER\|ERR_NOAPPLET\|ERR_NOARGBVISUAL\|ERR_NOBLOCKBREAK\|ERR_NOCALLBACK\|ERR_NOCHANNEL\|ERR_NOCHAR\|ERR_NOCLIPREG\|ERR_NOCOLON\|ERR_NOCOMMA\|ERR_NOCOMPRESS\|ERR_NOCONSTANTS\|ERR_NOCONTEXTMENU\|ERR_NOCOORDCST\|ERR_NODIRPATTERN\|ERR_NODISLAYERS\|ERR_NODISPMODES\|ERR_NODOUBLEBUFFER\|ERR_NOFALLTHROUGH\|ERR_NOFILTERNAME\|ERR_NOFMBHANDLER\|ERR_NOFUNCTION\|ERR_NOHWFUNC\|ERR_NOJOYATPORT\|ERR_NOKEYWORDS\|ERR_NOLAYERS\|ERR_NOLOOP\|ERR_NOLOOPCONT\|ERR_NOMASKBRUSH\|ERR_NOMENU\|ERR_NOMIMEVIEWER\|ERR_NOMUSICCB\|ERR_NONE\|ERR_NONSUSPENDEDRESUME\|ERR_NOPALETTE\|ERR_NOPALETTEIMAGE\|ERR_NOPALETTEMODE\|ERR_NORETVAL\|ERR_NOREXX\|ERR_NOSPRITES\|ERR_NOTADIR\|ERR_NOTENOUGHPIXELS\|ERR_NOTIGER\|ERR_NOTPROTRACKER\|ERR_NOTRANSPARENCY\|ERR_NOTXTLAYER\|ERR_NUMBEREXPECTED\|ERR_NUMCALLBACK\|ERR_NUMCONCAT\|ERR_NUMEXPECTED\|ERR_NUMSTRCMP\|ERR_NUMTABLEARG\|ERR_OLDAPPLET\|ERR_OPENANIM\|ERR_OPENANIM2\|ERR_OPENAUDIO\|ERR_OPENFONT\|ERR_OPENLIB\|ERR_OPENSERIAL\|ERR_OPENSOCKET\|ERR_OPENSOUND\|ERR_OPENSOUND2\|ERR_OUTOFRANGE\|ERR_PAKFORMAT\|ERR_PALETTEFILL\|ERR_PALETTEMODE\|ERR_PALSCREEN\|ERR_PEERNAME\|ERR_PENRANGE\|ERR_PERCENTFORMAT\|ERR_PERCENTFORMATSTR\|ERR_PIPE\|ERR_PIXELFORMAT\|ERR_PIXELRANGE\|ERR_PLAYERCOMP\|ERR_PLAYVIDEO\|ERR_PLUGINARCH\|ERR_PLUGINDOUBLET\|ERR_PLUGINSUPPORT\|ERR_PLUGINSYMBOL\|ERR_PLUGINTYPE\|ERR_PLUGINVER\|ERR_POINTERFORMAT\|ERR_POINTERIMG\|ERR_PORTNOTAVAIL\|ERR_PREPROCSYM\|ERR_PROTMETATABLE\|ERR_PUBSCREEN\|ERR_QUICKTIME\|ERR_RADIOTOGGLEMENU\|ERR_RANDOMIZE\|ERR_READ\|ERR_READFILE\|ERR_READFUNC\|ERR_READONLY\|ERR_READRANGE\|ERR_READTABLE\|ERR_READVIDEOPIXELS\|ERR_RECVCLOSED\|ERR_RECVTIMEOUT\|ERR_RECVUNKNOWN\|ERR_REGCLASS\|ERR_REGISTRYREAD\|ERR_REGISTRYWRITE\|ERR_REMADLAYER\|ERR_RENAME\|ERR_RENDER\|ERR_RENDERADLAYER\|ERR_RENDERCALLBACK\|ERR_RENDERER\|ERR_REPEATWOUNTIL\|ERR_REQAUTH\|ERR_REQUIREFIELD\|ERR_REQUIREPLUGIN\|ERR_REQUIRETAGFMT\|ERR_RETWOGOSUB\|ERR_REVDWORD\|ERR_REWINDDIR\|ERR_REXXERR\|ERR_SATELLITE\|ERR_SATFREEDISP\|ERR_SAVEANIM\|ERR_SAVEICON\|ERR_SAVEIMAGE\|ERR_SAVEPNG\|ERR_SAVERALPHA\|ERR_SAVESAMPLE\|ERR_SCALEBGPIC\|ERR_SCREEN\|ERR_SCREENMODE\|ERR_SCREENSIZE\|ERR_SCRPIXFMT\|ERR_SEEK\|ERR_SEEKFILE\|ERR_SEEKFORMAT\|ERR_SEEKRANGE\|ERR_SELECTALPHACHANNEL\|ERR_SELECTANIM\|ERR_SELECTBG\|ERR_SELECTBGPIC\|ERR_SELECTBGPIC2\|ERR_SELECTBRUSH\|ERR_SELECTMASK\|ERR_SEMAPHORE\|ERR_SENDDATA\|ERR_SENDMESSAGE\|ERR_SENDTIMEOUT\|ERR_SENDUNKNOWN\|ERR_SERIALIO\|ERR_SERIALIZE\|ERR_SERIALIZETYPE\|ERR_SETADAPTER\|ERR_SETENV\|ERR_SETFILEATTR\|ERR_SETFILECOMMENT\|ERR_SETFILEDATE\|ERR_SETMENU\|ERR_SHORTIF\|ERR_SIGNAL\|ERR_SMODEALPHA\|ERR_SMPRANGE\|ERR_SOCKET\|ERR_SOCKNAME\|ERR_SOCKOPT\|ERR_SORTFUNC\|ERR_SPRITELINK\|ERR_SPRITEONSCREEN\|ERR_SPRITEONSCREEN2\|ERR_SQBRACKETCLOSE\|ERR_SQBRACKETOPEN\|ERR_STACK\|ERR_STAT\|ERR_STRCALLBACK\|ERR_STREAMASSAMPLE\|ERR_STREXPECTED\|ERR_STRINGCST\|ERR_STRINGEXPECTED\|ERR_STRORNUM\|ERR_STRTABLEARG\|ERR_STRTOOSHORT\|ERR_SURFACE\|ERR_SWCHWOENDSWCH\|ERR_SYNTAXERROR\|ERR_SYNTAXLEVELS\|ERR_SYSBUTTON\|ERR_SYSIMAGE\|ERR_SYSTOOOLD\|ERR_TABCALLBACK\|ERR_TABEXPECTED\|ERR_TABEXPECTED2\|ERR_TABEXPECTED3\|ERR_TABLEDECLA\|ERR_TABLEINDEX\|ERR_TABLEORNIL\|ERR_TABLEOVERFLOW\|ERR_TAGEXPECTED\|ERR_TASKSETUP\|ERR_TEXTARG\|ERR_TEXTCONVERT\|ERR_TEXTCONVERT2\|ERR_TEXTSYNTAX\|ERR_TEXTURE\|ERR_TFIMAGE\|ERR_TFVANIM\|ERR_TFVBGPICBRUSH\|ERR_TFVBRUSH\|ERR_TFVBRUSHBGPIC\|ERR_THREAD\|ERR_THREADEXPECTED\|ERR_TIMER\|ERR_TOKENEXPECTED\|ERR_TOOMANYARGS\|ERR_TOOMANYCAPTURES\|ERR_TOOSMALL2\|ERR_TRANSBGMOBILE\|ERR_TRANSBRUSH\|ERR_TRAYICON\|ERR_TRIALCOMPILE\|ERR_TRIALINCLUDE\|ERR_TRIALLIMIT\|ERR_TRIALSAVEVID\|ERR_UDEXPECTED\|ERR_UNBALANCEDPAT\|ERR_UNEXPECTEDEOF\|ERR_UNEXPECTEDSYM\|ERR_UNFINISHEDCAPTURE\|ERR_UNIMPLCMD\|ERR_UNKNOWN\|ERR_UNKNOWNANMOUT\|ERR_UNKNOWNATTR\|ERR_UNKNOWNCMD\|ERR_UNKNOWNCOND\|ERR_UNKNOWNFILTER\|ERR_UNKNOWNICNOUT\|ERR_UNKNOWNIMGOUT\|ERR_UNKNOWNMIMETYPE\|ERR_UNKNOWNMUSFMT\|ERR_UNKNOWNPALETTE\|ERR_UNKNOWNSEC\|ERR_UNKNOWNSEQ\|ERR_UNKNOWNSMPOUT\|ERR_UNKNOWNTAG\|ERR_UNKNUMFMT\|ERR_UNKPROTOCOL\|ERR_UNKTEXTFMT\|ERR_UNMPARENTHESES\|ERR_UNSETENV\|ERR_UNSUPPORTEDFEAT\|ERR_UNTERMINTDSTR\|ERR_UNTILWOREPEAT\|ERR_UPDATEICON\|ERR_UPLOADFORBIDDEN\|ERR_USERABORT\|ERR_VALUEEXPECTED\|ERR_VAREXPECTED\|ERR_VARLENGTH\|ERR_VARSYNTAX\|ERR_VECGFXPLUGIN\|ERR_VECTORANIM\|ERR_VECTORBRUSH\|ERR_VERSION\|ERR_VFONT\|ERR_VFONTTYPE\|ERR_VIDATTACHED\|ERR_VIDEOFRAME\|ERR_VIDEOINIT\|ERR_VIDEOLAYER\|ERR_VIDEOLAYERDRV\|ERR_VIDEOSTRATEGY\|ERR_VIDEOTRANS\|ERR_VIDLAYERFUNC\|ERR_VIDNOTPAUSED\|ERR_VIDNOTPLAYING\|ERR_VIDPAUSED\|ERR_VIDPLAYING\|ERR_VIDRECMULTI\|ERR_VIDRECTRANS\|ERR_VIDSTOPPED\|ERR_VISUALINFO\|ERR_VMMISMATCH\|ERR_WARPOS\|ERR_WENDWOWHILE\|ERR_WHILEWOWEND\|ERR_WINDOW\|ERR_WITHWOENDWITH\|ERR_WRITE\|ERR_WRITEFILE\|ERR_WRITEJPEG\|ERR_WRITEONLY\|ERR_WRONGCLIPREG\|ERR_WRONGCMDRECVIDEO\|ERR_WRONGDTYPE\|ERR_WRONGFLOAT\|ERR_WRONGHEX\|ERR_WRONGID\|ERR_WRONGOP\|ERR_WRONGOPCST\|ERR_WRONGSPRITESIZE\|ERR_WRONGUSAGE\|ERR_WRONGVSTRATEGY\|ERR_XCURSOR\|ERR_XDISPLAY\|ERR_XF86VIDMODEEXT\|ERR_XFIXES\|ERR_YIELD\|ERR_ZERODIVISION\|ERR_ZLIBDATA\|ERR_ZLIBIO\|ERR_ZLIBSTREAM\|ERR_ZLIBVERSION\|EVENTHANDLER\|FADE\|FASTMEMORY\|FASTSPEED\|FILE\|FILEATTR_ARCHIVE\|FILEATTR_DELETE_USR\|FILEATTR_EXECUTE_GRP\|FILEATTR_EXECUTE_OTH\|FILEATTR_EXECUTE_USR\|FILEATTR_HIDDEN\|FILEATTR_NORMAL\|FILEATTR_PURE\|FILEATTR_READ_GRP\|FILEATTR_READ_OTH\|FILEATTR_READ_USR\|FILEATTR_READONLY\|FILEATTR_SCRIPT\|FILEATTR_SYSTEM\|FILEATTR_WRITE_GRP\|FILEATTR_WRITE_OTH\|FILEATTR_WRITE_USR\|FILETYPE_ANIM\|FILETYPE_ICON\|FILETYPE_IMAGE\|FILETYPE_SOUND\|FILETYPE_VIDEO\|FILETYPEFLAGS_ALPHA\|FILETYPEFLAGS_FPS\|FILETYPEFLAGS_QUALITY\|FILETYPEFLAGS_SAVE\|FILLCOLOR\|FILLGRADIENT\|FILLNONE\|FILLRULEEVENODD\|FILLRULEWINDING\|FILLTEXTURE\|FLOAT\|FLOW_HARDWARE\|FLOW_OFF\|FLOW_XON_XOFF\|FONT\|FONTENGINE_INBUILT\|FONTENGINE_NATIVE\|FONTSLANT_ITALIC\|FONTSLANT_OBLIQUE\|FONTSLANT_ROMAN\|FONTTYPE_BITMAP\|FONTTYPE_COLOR\|FONTTYPE_VECTOR\|FONTWEIGHT_BLACK\|FONTWEIGHT_BOLD\|FONTWEIGHT_BOOK\|FONTWEIGHT_DEMIBOLD\|FONTWEIGHT_EXTRABLACK\|FONTWEIGHT_EXTRABOLD\|FONTWEIGHT_EXTRALIGHT\|FONTWEIGHT_HEAVY\|FONTWEIGHT_LIGHT\|FONTWEIGHT_MEDIUM\|FONTWEIGHT_NORMAL\|FONTWEIGHT_REGULAR\|FONTWEIGHT_SEMIBOLD\|FONTWEIGHT_THIN\|FONTWEIGHT_ULTRABLACK\|FONTWEIGHT_ULTRABOLD\|FONTWEIGHT_ULTRALIGHT\|FRAMEMODE_FULL\|FRAMEMODE_SINGLE\|FREESPACE\|FTPASCII\|FTPBINARY\|FUCHSIA\|FUNCTION\|GRAY\|GREEN\|HBLINDS128\|HBLINDS16\|HBLINDS32\|HBLINDS64\|HBLINDS8\|HCLOSECURTAIN\|HCLOSEGATE\|HEXNUMERICAL\|HFLIPCOIN\|HFLOWBOTTOM\|HFLOWTOP\|HIDEBRUSH\|HIDELAYER\|HKEY_CLASSES_ROOT\|HKEY_CURRENT_CONFIG\|HKEY_CURRENT_USER\|HKEY_LOCAL_MACHINE\|HKEY_USERS\|HLINES\|HLINES2\|HLOWFLIPCOIN\|HOLLYWOOD\|HOPENCURTAIN\|HOPENGATE\|HSPLIT\|HSTRANGEPUSH\|HSTRETCHCENTER\|HSTRIPES\|HSTRIPES16\|HSTRIPES2\|HSTRIPES32\|HSTRIPES4\|HSTRIPES64\|HSTRIPES8\|HW_64BIT\|HW_AMIGA\|HW_AMIGAOS3\|HW_AMIGAOS4\|HW_ANDROID\|HW_AROS\|HW_IOS\|HW_LINUX\|HW_LITTLE_ENDIAN\|HW_MACOS\|HW_MORPHOS\|HW_REVISION\|HW_VERSION\|HW_WARPOS\|HW_WINDOWS\|ICNFMT_HOLLYWOOD\|ICON\|IMAGETYPE_RASTER\|IMAGETYPE_VECTOR\|IMGFMT_BMP\|IMGFMT_GIF\|IMGFMT_ILBM\|IMGFMT_JPEG\|IMGFMT_NATIVE\|IMGFMT_PLUGIN\|IMGFMT_PNG\|IMGFMT_TIFF\|IMGFMT_UNKNOWN\|IMMERSIVE_LEANBACK\|IMMERSIVE_NONE\|IMMERSIVE_NORMAL\|IMMERSIVE_STICKY\|INACTIVEWINDOW\|INF\|INSERTBRUSH\|INTEGER\|INTERVAL\|IO_BUFFERED\|IO_FAKE64\|IO_LITTLEENDIAN\|IO_SIGNED\|IO_UNBUFFERED\|IO_UNSIGNED\|IPAUTO\|IPUNKNOWN\|IPV4\|IPV6\|ITALIC\|JOINBEVEL\|JOINMITER\|JOINROUND\|JOYDOWN\|JOYDOWNLEFT\|JOYDOWNRIGHT\|JOYLEFT\|JOYNODIR\|JOYRIGHT\|JOYUP\|JOYUPLEFT\|JOYUPRIGHT\|JUSTIFIED\|KEEPASPRAT\|KEEPPOSITION\|LANGUAGE_ABKHAZIAN\|LANGUAGE_AFAR\|LANGUAGE_AFRIKAANS\|LANGUAGE_AKAN\|LANGUAGE_ALBANIAN\|LANGUAGE_AMHARIC\|LANGUAGE_ARABIC\|LANGUAGE_ARAGONESE\|LANGUAGE_ARMENIAN\|LANGUAGE_ASSAMESE\|LANGUAGE_AVARIC\|LANGUAGE_AVESTAN\|LANGUAGE_AYMARA\|LANGUAGE_AZERBAIJANI\|LANGUAGE_BAMBARA\|LANGUAGE_BASHKIR\|LANGUAGE_BASQUE\|LANGUAGE_BELARUSIAN\|LANGUAGE_BENGALI\|LANGUAGE_BIHARI\|LANGUAGE_BISLAMA\|LANGUAGE_BOSNIAN\|LANGUAGE_BRETON\|LANGUAGE_BULGARIAN\|LANGUAGE_BURMESE\|LANGUAGE_CATALAN\|LANGUAGE_CENTRALKHMER\|LANGUAGE_CHAMORRO\|LANGUAGE_CHECHEN\|LANGUAGE_CHICHEWA\|LANGUAGE_CHINESE\|LANGUAGE_CHURCHSLAVIC\|LANGUAGE_CHUVASH\|LANGUAGE_CORNISH\|LANGUAGE_CORSICAN\|LANGUAGE_CREE\|LANGUAGE_CROATIAN\|LANGUAGE_CZECH\|LANGUAGE_DANISH\|LANGUAGE_DIVEHI\|LANGUAGE_DUTCH\|LANGUAGE_DZONGKHA\|LANGUAGE_ENGLISH\|LANGUAGE_ESPERANTO\|LANGUAGE_ESTONIAN\|LANGUAGE_EWE\|LANGUAGE_FAROESE\|LANGUAGE_FIJIAN\|LANGUAGE_FINNISH\|LANGUAGE_FRENCH\|LANGUAGE_FULAH\|LANGUAGE_GAELIC\|LANGUAGE_GALICIAN\|LANGUAGE_GANDA\|LANGUAGE_GEORGIAN\|LANGUAGE_GERMAN\|LANGUAGE_GREEK\|LANGUAGE_GREENLANDIC\|LANGUAGE_GUARANI\|LANGUAGE_GUJARATI\|LANGUAGE_HAITIAN\|LANGUAGE_HAUSA\|LANGUAGE_HEBREW\|LANGUAGE_HERERO\|LANGUAGE_HINDI\|LANGUAGE_HIRIMOTU\|LANGUAGE_HUNGARIAN\|LANGUAGE_ICELANDIC\|LANGUAGE_IDO\|LANGUAGE_IGBO\|LANGUAGE_INDONESIAN\|LANGUAGE_INTERLINGUA\|LANGUAGE_INTERLINGUE\|LANGUAGE_INUKTITUT\|LANGUAGE_INUPIAQ\|LANGUAGE_IRISH\|LANGUAGE_ITALIAN\|LANGUAGE_JAPANESE\|LANGUAGE_JAVANESE\|LANGUAGE_KANNADA\|LANGUAGE_KANURI\|LANGUAGE_KASHMIRI\|LANGUAGE_KAZAKH\|LANGUAGE_KIKUYU\|LANGUAGE_KINYARWANDA\|LANGUAGE_KIRGHIZ\|LANGUAGE_KOMI\|LANGUAGE_KONGO\|LANGUAGE_KOREAN\|LANGUAGE_KUANYAMA\|LANGUAGE_KURDISH\|LANGUAGE_LAO\|LANGUAGE_LATIN\|LANGUAGE_LATVIAN\|LANGUAGE_LIMBURGAN\|LANGUAGE_LINGALA\|LANGUAGE_LITHUANIAN\|LANGUAGE_LUBAKATANGA\|LANGUAGE_LUXEMBOURGISH\|LANGUAGE_MACEDONIAN\|LANGUAGE_MALAGASY\|LANGUAGE_MALAY\|LANGUAGE_MALAYALAM\|LANGUAGE_MALTESE\|LANGUAGE_MANX\|LANGUAGE_MAORI\|LANGUAGE_MARATHI\|LANGUAGE_MARSHALLESE\|LANGUAGE_MONGOLIAN\|LANGUAGE_NAURU\|LANGUAGE_NAVAJO\|LANGUAGE_NDONGA\|LANGUAGE_NEPALI\|LANGUAGE_NORTHERNSAMI\|LANGUAGE_NORTHNDEBELE\|LANGUAGE_NORWEGIAN\|LANGUAGE_NORWEGIANBOKMAL\|LANGUAGE_NORWEGIANNYNORSK\|LANGUAGE_OCCITAN\|LANGUAGE_OJIBWA\|LANGUAGE_ORIYA\|LANGUAGE_OROMO\|LANGUAGE_OSSETIAN\|LANGUAGE_PALI\|LANGUAGE_PANJABI\|LANGUAGE_PASHTO\|LANGUAGE_PERSIAN\|LANGUAGE_POLISH\|LANGUAGE_PORTUGUESE\|LANGUAGE_QUECHUA\|LANGUAGE_ROMANIAN\|LANGUAGE_ROMANSH\|LANGUAGE_RUNDI\|LANGUAGE_RUSSIAN\|LANGUAGE_SAMOAN\|LANGUAGE_SANGO\|LANGUAGE_SANSKRIT\|LANGUAGE_SARDINIAN\|LANGUAGE_SERBIAN\|LANGUAGE_SHONA\|LANGUAGE_SICHUANYI\|LANGUAGE_SINDHI\|LANGUAGE_SINHALA\|LANGUAGE_SLOVAK\|LANGUAGE_SLOVENIAN\|LANGUAGE_SOMALI\|LANGUAGE_SOUTHERNSOTHO\|LANGUAGE_SOUTHNDEBELE\|LANGUAGE_SPANISH\|LANGUAGE_SUNDANESE\|LANGUAGE_SWAHILI\|LANGUAGE_SWATI\|LANGUAGE_SWEDISH\|LANGUAGE_TAGALOG\|LANGUAGE_TAHITIAN\|LANGUAGE_TAJIK\|LANGUAGE_TAMIL\|LANGUAGE_TATAR\|LANGUAGE_TELUGU\|LANGUAGE_THAI\|LANGUAGE_TIBETAN\|LANGUAGE_TIGRINYA\|LANGUAGE_TONGA\|LANGUAGE_TSONGA\|LANGUAGE_TSWANA\|LANGUAGE_TURKISH\|LANGUAGE_TURKMEN\|LANGUAGE_TWI\|LANGUAGE_UIGHUR\|LANGUAGE_UKRAINIAN\|LANGUAGE_UNKNOWN\|LANGUAGE_URDU\|LANGUAGE_UZBEK\|LANGUAGE_VENDA\|LANGUAGE_VIETNAMESE\|LANGUAGE_WALLOON\|LANGUAGE_WELSH\|LANGUAGE_WESTERNFRISIAN\|LANGUAGE_WOLOF\|LANGUAGE_XHOSA\|LANGUAGE_YIDDISH\|LANGUAGE_YORUBA\|LANGUAGE_ZHUANG\|LANGUAGE_ZULU\|LAYER\|LAYER_VS_BOX\|LAYERBUTTON\|LEFT\|LEFTOUT\|LIGHTUSERDATA\|LIME\|LINE\|LINEAR\|LITTLEENDIAN\|LONG\|LOWERCURVE\|MAROON\|MASK\|MASKAND\|MASKINVISIBLE\|MASKOR\|MASKVANILLACOPY\|MASKVISIBLE\|MASKXOR\|MEMORY\|MENU\|MENUITEM_DISABLED\|MENUITEM_RADIO\|MENUITEM_SELECTED\|MENUITEM_TOGGLE\|MILLISECONDS\|MODE_READ\|MODE_READWRITE\|MODE_WRITE\|MODLALT\|MODLCOMMAND\|MODLCONTROL\|MODLSHIFT\|MODRALT\|MODRCOMMAND\|MODRCONTROL\|MODRSHIFT\|MONO16\|MONO8\|MONOSPACE\|MOVEFILE_COPY\|MOVEFILE_COPYFAILED\|MOVEFILE_DELETE\|MOVEFILE_DELETEFAILED\|MOVEFILE_UNPROTECT\|MOVELIST\|MOVEWINDOW\|MUSIC\|NAN\|NATIVE\|NATIVEENDIAN\|NAVY\|NETWORKCONNECTION\|NETWORKSERVER\|NETWORKUDP\|NEXTFRAME\|NEXTFRAME2\|NIL\|NOCOLOR\|NONE\|NOPEN\|NORMAL\|NORMALSPEED\|NOTRANSPARENCY\|NUMBER\|NUMERICAL\|OLIVE\|ONBUTTONCLICK\|ONBUTTONCLICKALL\|ONBUTTONOVER\|ONBUTTONOVERALL\|ONBUTTONRIGHTCLICK\|ONBUTTONRIGHTCLICKALL\|ONKEYDOWN\|ONKEYDOWNALL\|ORIENTATION_LANDSCAPE\|ORIENTATION_LANDSCAPEREV\|ORIENTATION_NONE\|ORIENTATION_PORTRAIT\|ORIENTATION_PORTRAITREV\|PALETTE\|PALETTE_AGA\|PALETTE_CGA\|PALETTE_DEFAULT\|PALETTE_EGA\|PALETTE_GRAY128\|PALETTE_GRAY16\|PALETTE_GRAY256\|PALETTE_GRAY32\|PALETTE_GRAY4\|PALETTE_GRAY64\|PALETTE_GRAY8\|PALETTE_MACINTOSH\|PALETTE_MONOCHROME\|PALETTE_OCS\|PALETTE_WINDOWS\|PALETTE_WORKBENCH\|PALETTEMODE_PEN\|PALETTEMODE_REMAP\|PARITY_EVEN\|PARITY_NONE\|PARITY_ODD\|PERMREQ_READEXTERNAL\|PERMREQ_WRITEEXTERNAL\|PI\|PIXELZOOM1\|PIXELZOOM2\|PLOT\|PLUGINCAPS_ANIM\|PLUGINCAPS_AUDIOADAPTER\|PLUGINCAPS_CONVERT\|PLUGINCAPS_DIRADAPTER\|PLUGINCAPS_DISPLAYADAPTER\|PLUGINCAPS_EXTENSION\|PLUGINCAPS_FILEADAPTER\|PLUGINCAPS_ICON\|PLUGINCAPS_IMAGE\|PLUGINCAPS_IPCADAPTER\|PLUGINCAPS_LIBRARY\|PLUGINCAPS_NETWORKADAPTER\|PLUGINCAPS_REQUESTERADAPTER\|PLUGINCAPS_REQUIRE\|PLUGINCAPS_SAVEANIM\|PLUGINCAPS_SAVEICON\|PLUGINCAPS_SAVEIMAGE\|PLUGINCAPS_SAVESAMPLE\|PLUGINCAPS_SERIALIZE\|PLUGINCAPS_SOUND\|PLUGINCAPS_TIMERADAPTER\|PLUGINCAPS_VECTOR\|PLUGINCAPS_VIDEO\|POINTER\|POLYGON\|PRGTYPE_APPLET\|PRGTYPE_PROGRAM\|PRGTYPE_SCRIPT\|PRINT\|PURPLE\|PUSHBOTTOM\|PUSHLEFT\|PUSHRIGHT\|PUSHTOP\|PUZZLE\|QUADRECT\|QUARTERS\|RADIAL\|RANDOMEFFECT\|RANDOMPARAMETER\|RECEIVEALL\|RECEIVEBYTES\|RECEIVEDATA_PACKET\|RECEIVELINE\|RECTBACKCENTER\|RECTBACKEAST\|RECTBACKNORTH\|RECTBACKNORTHEAST\|RECTBACKNORTHWEST\|RECTBACKSOUTH\|RECTBACKSOUTHEAST\|RECTBACKSOUTHWEST\|RECTBACKWEST\|RECTCENTER\|RECTEAST\|RECTNORTH\|RECTNORTHEAST\|RECTNORTHWEST\|RECTSOUTH\|RECTSOUTHEAST\|RECTSOUTHWEST\|RECTWEST\|RED\|REMOVELAYER\|REQ_CAMERA\|REQ_GALLERY\|REQ_HIDEICONS\|REQ_MULTISELECT\|REQ_NORMAL\|REQ_SAVEMODE\|REQICON_ERROR\|REQICON_INFORMATION\|REQICON_NONE\|REQICON_QUESTION\|REQICON_WARNING\|REVEALBOTTOM\|REVEALLEFT\|REVEALRIGHT\|REVEALTOP\|RIGHT\|RIGHTOUT\|ROLLLEFT\|ROLLTOP\|RTS_OFF\|RTS_ON\|SAMPLE\|SANS\|SCALEMODE_AUTO\|SCALEMODE_LAYER\|SCALEMODE_NONE\|SCROLLBOTTOM\|SCROLLEAST\|SCROLLLEFT\|SCROLLNORTH\|SCROLLNORTHEAST\|SCROLLNORTHWEST\|SCROLLRIGHT\|SCROLLSOUTH\|SCROLLSOUTHEAST\|SCROLLSOUTHWEST\|SCROLLTOP\|SCROLLWEST\|SECONDS\|SEEK_BEGINNING\|SEEK_CURRENT\|SEEK_END\|SELMODE_COMBO\|SELMODE_LAYERS\|SELMODE_NORMAL\|SERIAL\|SERIF\|SERVER\|SHADOW\|SHAPE\|SHDWEAST\|SHDWNORTH\|SHDWNORTHEAST\|SHDWNORTHWEST\|SHDWSOUTH\|SHDWSOUTHEAST\|SHDWSOUTHWEST\|SHDWWEST\|SHORT\|SILVER\|SIMPLEBUTTON\|SINE\|SIZEWINDOW\|SLIDEBOTTOM\|SLIDELEFT\|SLIDERIGHT\|SLIDETOP\|SLOWSPEED\|SMOOTHOUT\|SMPFMT_WAVE\|SNAPDESKTOP\|SNAPDISPLAY\|SNAPWINDOW\|SPIRAL\|SPRITE\|SPRITE_VS_BOX\|SPRITE_VS_BRUSH\|STAR\|STDERR\|STDIN\|STDOUT\|STDPTR_BUSY\|STDPTR_CUSTOM\|STDPTR_SYSTEM\|STEREO16\|STEREO8\|STOP_1\|STOP_2\|STRETCHBOTTOM\|STRETCHLEFT\|STRETCHRIGHT\|STRETCHTOP\|STRING\|STRUDEL\|SUN\|SWISS\|TABLE\|TEAL\|TEXTOBJECT\|TEXTOUT\|THREAD\|TICKS\|TIMEOUT\|TIMER\|TOP\|TOPOUT\|TRUETYPE_DEFAULT\|TURNDOWNBOTTOM\|TURNDOWNLEFT\|TURNDOWNRIGHT\|TURNDOWNTOP\|UDPCLIENT\|UDPNONE\|UDPOBJECT\|UDPSERVER\|UNDERLINED\|UNDO\|UPLOADFILE_RESPONSE\|UPLOADFILE_STATUS\|UPNDOWN\|UPPERCURVE\|USEDSPACE\|USELAYERPOSITION\|USERDATA\|VANILLACOPY\|VBLINDS128\|VBLINDS16\|VBLINDS32\|VBLINDS64\|VBLINDS8\|VCLOSECURTAIN\|VCLOSEGATE\|VECTORPATH\|VFLIPCOIN\|VFLOWLEFT\|VFLOWRIGHT\|VIDDRV_HOLLYWOOD\|VIDDRV_OS\|VIDEO\|VIEWMODE_DATE\|VIEWMODE_ICONS\|VIEWMODE_NAME\|VIEWMODE_NONE\|VIEWMODE_SIZE\|VIEWMODE_TYPE\|VLINES\|VLINES2\|VLOWFLIPCOIN\|VOID\|VOPENCURTAIN\|VOPENGATE\|VSPLIT\|VSTRANGEPUSH\|VSTRETCHCENTER\|VSTRIPES\|VSTRIPES16\|VSTRIPES2\|VSTRIPES32\|VSTRIPES4\|VSTRIPES64\|VSTRIPES8\|WALLPAPERLEFT\|WALLPAPERTOP\|WATER1\|WATER2\|WATER3\|WATER4\|WHITE\|WORD\|YELLOW\|ZOOMCENTER\|ZOOMEAST\|ZOOMIN\|ZOOMNORTH\|ZOOMNORTHEAST\|ZOOMNORTHWEST\|ZOOMOUT\|ZOOMSOUTH\|ZOOMSOUTHEAST\|ZOOMSOUTHWEST\|ZOOMWEST\)\>" " Hollywood Functions -syn keyword hwFunction LowerStr UpperStr Val StrStr UnrightStr UnleftStr Chr MidStr RightStr LeftStr FindStr AddStr HexStr Asc StrLen ReplaceStr BinStr SplitStr PadNum StrToArray TrimStr ToString ToNumber UnmidStr CountStr InsertStr RepeatStr MD5Str CRC32Str FormatStr PatternFindStr PatternReplaceStr Eval PatternFindStrDirect PatternFindStrShort ArrayToStr Base64Str ToUserData ByteOffset CharOffset CharWidth ValidateStr ConvertStr ReverseStr ByteLen IsAlNum IsAlpha IsCntrl IsDigit IsGraph IsLower IsPrint IsPunct IsSpace IsUpper IsXDigit CompareStr ByteAsc ByteChr StartsWith EndsWith StripStr EmptyStr ByteVal ByteStrStr Abs Sin Cos Tan ASin ACos ATan ATan2 Ceil Floor Mod FrExp LdExp Sqrt Min Max Log Ld Ln Exp Deg Pow Rad Rnd RndF Add Sub Div Mul Round Int Frac Shr Shl Rt Wrap Limit BitSet BitTest BitClear BitXor BitComplement Sgn Sar Ror Rol Cast Hypot EndianSwap RndStrong Red Green Blue RGB ARGB MovePointer HidePointer SetPointer ShowPointer GetAttribute GetPen VWait SetFPSLimit GetFPSLimit IsPicture GetRealColor SaveSnapshot MixRGB CreateClipRegion SetClipRegion FreeClipRegion CreatePointer FreePointer AsyncDrawFrame CancelAsyncDraw FinishAsyncDraw DumpVideoTime GetRandomColor SetDrawTagsDefault BeginRefresh EndRefresh Intersection Box Plot Ellipse Line Circle Polygon SetFillStyle ReadPixel Cls Arc SetFormStyle SetLineWidth GetFillStyle GetFormStyle GetLineWidth MoveBrush MoveAnim MoveTextObject MoveLayer MoveSprite OpenFile Eof ReadChr ReadLine ReadString Seek WriteChr WriteLine WriteString Exists FileSize PathPart FilePart MakeDirectory GetVolumeInfo DeleteFile Execute Run ChangeDirectory GetVolumeName CloseFile ReadDirectory FullPath CopyFile Rename IsDirectory CRC32 WriteShort WriteInt WriteFloat ReadShort ReadInt ReadFloat FilePos MatchPattern FlushFile SetIOMode GetFileAttributes SetFileAttributes GetTempFileName FileLength CompressFile DecompressFile OpenDirectory CloseDirectory NextDirectoryEntry WriteFunction ReadFunction DefineVirtualFile ReadTable WriteTable GetCurrentDirectory ApplyPatch DefineVirtualFileFromString UndefineVirtualStringFile FileToString StringToFile GetEnv SetEnv UnsetEnv MD5 FileLines FileAttributes GetAsset ReadByte WriteByte ReadBytes WriteBytes DirectoryItems MoveFile UseCarriageReturn HaveVolume GetDirectoryEntry RewindDirectory CountDirectoryEntries MonitorDirectory WaitLeftMouse WaitRightMouse WaitKeyDown IsKeyDown WhileRightMouseDown WhileMouseDown WhileKeyDown IsLeftMouse IsRightMouse BreakWhileMouseOn SetEventTimeout GetEventCode LeftMouseQuit EscapeQuit CtrlCQuit EnableEvent DisableEvent RemoveButton RemoveKeyDown ModifyButton ModifyKeyDown WhileMouseOn CreateButton CreateKeyDown FreeEventCache ClearEvents CheckEvent WaitEvent MouseX MouseY MakeButton DeleteButton DisableButton EnableButton InstallEventHandler SetInterval SetTimeout ClearInterval ClearTimeout ChangeInterval DumpButtons WaitMidMouse IsMidMouse ResetKeyStates JoyDir JoyFire CountJoysticks BreakEventHandler CheckEvents CreatePort SendMessage ShowKeyboard HideKeyboard Wait OpenCatalog CloseCatalog GetCatalogString GetDate GetTime GetWeekday GetDateNum GetTimer PauseTimer ResumeTimer StartTimer StopTimer SystemRequest GetMemoryInfo End GetErrorName Sort DebugStr DebugVal DebugPrint ExitOnError GetLastError DebugOutput GetType IIf InsertItem RemoveItem ListItems StringRequest Unpack SetMetaTable GetMetaTable RawEqual RawGet RawSet GCInfo CollectGarbage Error WaitTimer FileRequest PathRequest IPairs Pairs NextItem GetVersion GetCommandLine GetProgramInfo ResetTimer GetConstant SetClipboard GetClipboard PeekClipboard ClearClipboard CompareDates OpenURL CopyTable FontRequest ListRequest ColorRequest GetSystemLanguage GetSystemCountry DebugPrompt GetFileArgument Assert ForEach ForEachI Concat GetObjectType GetObjectData SetObjectData ClearObjectData CopyObjectData HaveObjectData GetObjects RaiseOnError HaveObject GetPlugins IsNil HaveItem DisablePlugin EnablePlugin LoadPlugin HavePlugin GetSystemInfo LegacyControl DisableLineHook EnableLineHook IncreasePointer DecreasePointer GetApplicationInfo DebugPrintNR TableItems IsTableEmpty LoadPrefs SavePrefs DeletePrefs IsUnicode GetTimestamp GetCountryInfo GetLanguageInfo GetTimeZone TimestampToDate DateToTimestamp ParseDate MakeDate DateToUTC UTCToDate ValidateDate Pack ConsolePrint ConsolePrintNR ConsolePrompt Beep ShowNotification GetIconProperties SetIconProperties SetWBIcon OpenAmigaGuide CloseAmigaGuide ShowRinghioMessage GetApplicationList SendApplicationMessage ChangeApplicationIcon ReadRegistryKey WriteRegistryKey CreateShortcut SetTrayIcon GetShortcutPath ShowToast PerformSelector OpenResourceMonitor CloseResourceMonitor ImageRequest PermissionRequest Vibrate CallJavaMethod Undo EnableLayers DisableLayers SwapLayers InsertLayer ShowLayer HideLayer RemoveLayer SetLayerTransparency SetLayerLight SetLayerTint AddMove ClearMove DoMove FreeLayers NextFrame SetLayerName Collision DumpLayers ScaleLayer RotateLayer SetLayerStyle GetLayerStyle TransformLayer SetLayerAnchor LayerExists SetLayerZPos TranslateLayer SelectLayer CreateLayer ModifyLayerFrames GetLayerAtPos SetLayerShadow SetLayerFilter SetLayerBorder LayerToFront LayerToBack PlayLayer StopLayer PauseLayer ResumeLayer SeekLayer SetLayerVolume RemoveLayers SetFont SetFontColor TextHeight TextWidth ResetTabs AddTab Locate SetMargins SetFontStyle Print NPrint TextOut CreateTextObject DisplayTextObject FreeTextObject InKeyStr TextExtent ScaleTextObject CopyTextObject RotateTextObject OpenFont CloseFont UseFont GetAvailableFonts FreeGlyphCache SetDefaultEncoding AddFontPath GetKerningPair GetDefaultEncoding GetFontColor GetFontStyle PlayAnim FreeAnim ScaleAnim PlayAnimDisk LoadAnimFrame LoadAnim IsAnim CreateAnim CopyAnim GetAnimFrame DisplayAnimFrame ModifyAnimFrames SelectAnim SaveAnim BeginAnimStream WriteAnimFrame FinishAnimStream SetAnimFrameDelay ChangeDisplaySize SetTitle MoveDisplay HideDisplay ShowDisplay SetDisplayAttributes CreateDisplay FreeDisplay OpenDisplay CloseDisplay SelectDisplay ActivateDisplay ChangeDisplayMode GetDisplayModes GetMonitors CreateMenu FreeMenu SelectMenuItem DeselectMenuItem IsMenuItemSelected DisableMenuItem EnableMenuItem IsMenuItemDisabled GetPubScreens ShowScreen HideScreen SetScreenTitle GetFrontScreen SetSubtitle FreeSample LoadSample IsSound GetPatternPosition GetSongPosition PlaySubsong WaitPatternPosition WaitSongPosition WaitSampleEnd IsSamplePlaying SetVolume SetPitch SetPanning StopSample PlaySample SetMasterVolume IsSample CreateSample OpenMusic CloseMusic PlayMusic StopMusic PauseMusic ResumeMusic SeekMusic SetMusicVolume IsMusic IsMusicPlaying PlayModule StopModule PauseModule ResumeModule LoadModule FreeModule IsModule SaveSample GetSampleData CreateMusic FillMusicBuffer MixSample CopySample InsertSample FlushMusicBuffer IsChannelPlaying HaveFreeChannel StopChannel GetChannels SetChannelVolume OpenAudio CloseAudio ForceSound CreateBrush DisplayBrush DisplayBrushPart ScaleBrush FreeBrush TintBrush ReplaceColors InvertBrush FlipBrush MixBrush BrushToGray RotateBrush GetBrushLink SelectBrush CopyBrush SetBrushTransparency LoadBrush SelectMask SetMaskMode SaveBrush SelectAlphaChannel SetAlphaIntensity DeleteAlphaChannel CropBrush InvertMask InvertAlphaChannel FloodFill DeleteMask BeginDoubleBuffer EndDoubleBuffer Flip ConvertToBrush GrabDesktop TransformBrush TrimBrush RasterizeBrush BlurBrush EmbossBrush EdgeBrush SharpenBrush SolarizeBrush GammaBrush ContrastBrush ModulateBrush SepiaToneBrush CharcoalBrush SwirlBrush PixelateBrush BrushToMonochrome ChangeBrushTransparency CreateShadowBrush CreateBorderBrush WaterRippleBrush OilPaintBrush BrushToRGBArray RGBArrayToBrush PerspectiveDistortBrush ArcDistortBrush PolarDistortBrush BarrelDistortBrush CreateGradientBrush CreateTexturedBrush ReadBrushPixel WriteBrushPixel QuantizeBrush ReduceAlphaChannel IsBrushEmpty DisplayBGPic DisplayBGPicPart ScaleBGPic CreateGradientBGPic CreateRainbowBGPic CreateTexturedBGPic BrushToBGPic BGPicToBrush CreateBGPic FreeBGPic LoadBGPic SelectBGPic EndSelect CopyBGPic DisplayBrushFX DisplayTextObjectFX DisplayTransitionFX DisplayBGPicPartFX UndoFX ShowLayerFX HideLayerFX RemoveLayerFX GetRandomFX ClearScreen CreateSprite DisplaySprite RemoveSprite FreeSprite LoadSprite ScaleSprite CopySprite FlipSprite RemoveSprites SetSpriteZPos AllocMem FreeMem Poke Peek FillMem CopyMem ReadMem WriteMem DumpMem MemToTable TableToMem GetMemPointer GetMemString AllocMemFromPointer AllocMemFromVirtualFile MoveTo LineTo CurveTo RelMoveTo RelLineTo RelCurveTo DrawPath StartPath StartSubPath ClosePath AddArcToPath AddCircleToPath AddEllipseToPath AddBoxToPath SetLineJoin SetLineCap SetDash SetFillRule FreePath ClearPath IsPathEmpty GetCurrentPoint GetPathExtents CopyPath AppendPath AddTextToPath TranslatePath NormalizePath ForcePathUse SetVectorEngine PathItems PathToBrush GetFillRule GetLineJoin GetLineCap GetDash SetMiterLimit GetMiterLimit CreateIcon FreeIcon LoadIcon SaveIcon AddIconImage RemoveIconImage SetStandardIconImage OpenSerialPort CloseSerialPort ReadSerialData WriteSerialData FlushSerialPort SetBaudRate SetStopBits SetDataBits SetParity SetFlowControl SetDTR SetRTS GetBaudRate GetStopBits GetDataBits GetParity GetFlowControl GetDTR GetRTS PollSerialQueue ClearSerialQueue OpenConnection CloseConnection CreateServer CloseServer SendData ReceiveData GetConnectionIP GetConnectionPort GetHostName ToIP ToHostName DownloadFile UploadFile SetNetworkTimeout GetLocalIP GetLocalPort CreateUDPObject CloseUDPObject SendUDPData ReceiveUDPData IsOnline GetMACAddress GetConnectionProtocol GetLocalProtocol SetNetworkProtocol ResolveHostName OpenVideo CloseVideo PlayVideo StopVideo PauseVideo ResumeVideo SeekVideo IsVideo SetVideoSize SetVideoPosition SetVideoVolume GetVideoFrame IsVideoPlaying ForceVideoMode ForceVideoDriver DumpVideo DisplayVideoFrame SendRexxCommand RunRexxScript CreateRexxPort +syn keyword hwFunction ACos ARGB ASin ATan ATan2 Abs ActivateDisplay Add AddArcToPath AddBoxToPath AddCircleToPath AddEllipseToPath AddFontPath AddIconImage AddMove AddStr AddTab AddTextToPath AllocMem AllocMemFromPointer AllocMemFromVirtualFile AppendPath ApplyPatch Arc ArcDistortBrush ArrayToStr Asc Assert AsyncDrawFrame BGPicToBrush BarrelDistortBrush Base64Str Beep BeginAnimStream BeginDoubleBuffer BeginRefresh BinStr BitClear BitComplement BitSet BitTest BitXor Blue BlurBrush Box BreakEventHandler BreakWhileMouseOn BrushToBGPic BrushToGray BrushToMonochrome BrushToPenArray BrushToRGBArray ByteAsc ByteChr ByteLen ByteOffset ByteStrStr ByteVal CRC32 CRC32Str CallJavaMethod CancelAsyncDraw CancelAsyncOperation CanonizePath Cast Ceil ChangeApplicationIcon ChangeBrushTransparency ChangeDirectory ChangeDisplayMode ChangeDisplaySize ChangeInterval CharOffset CharWidth CharcoalBrush CheckEvent CheckEvents Chr Circle ClearClipboard ClearEvents ClearInterval ClearMove ClearObjectData ClearPath ClearScreen ClearSerialQueue ClearTimeout CloseAmigaGuide CloseAnim CloseAudio CloseCatalog CloseConnection CloseDirectory CloseDisplay CloseFile CloseFont CloseMusic ClosePath CloseResourceMonitor CloseSerialPort CloseServer CloseUDPObject CloseVideo Cls CollectGarbage Collision ColorRequest CompareDates CompareStr CompressFile Concat ConsolePrint ConsolePrintNR ConsolePrompt ContinueAsyncOperation ContrastBrush ContrastPalette ConvertStr ConvertToBrush CopyAnim CopyBGPic CopyBrush CopyFile CopyMem CopyObjectData CopyPalette CopyPath CopyPens CopySample CopySprite CopyTable CopyTextObject Cos CountDirectoryEntries CountJoysticks CountStr CreateAnim CreateBGPic CreateBorderBrush CreateBrush CreateButton CreateClipRegion CreateCoroutine CreateDisplay CreateGradientBGPic CreateGradientBrush CreateIcon CreateKeyDown CreateLayer CreateList CreateMenu CreateMusic CreatePalette CreatePointer CreatePort CreateRainbowBGPic CreateRexxPort CreateSample CreateServer CreateShadowBrush CreateShortcut CreateSprite CreateTextObject CreateTexturedBGPic CreateTexturedBrush CreateUDPObject CropBrush CtrlCQuit CurveTo CyclePalette DateToTimestamp DateToUTC DebugOutput DebugPrint DebugPrintNR DebugPrompt DebugStr DebugVal DecompressFile DecreasePointer DefineVirtualFile DefineVirtualFileFromString Deg DeleteAlphaChannel DeleteButton DeleteFile DeleteMask DeletePrefs DeselectMenuItem DeserializeTable DirectoryItems DisableButton DisableEvent DisableLayers DisableLineHook DisableMenuItem DisablePlugin DisableVWait DisplayAnimFrame DisplayBGPic DisplayBGPicPart DisplayBGPicPartFX DisplayBrush DisplayBrushFX DisplayBrushPart DisplaySprite DisplayTextObject DisplayTextObjectFX DisplayTransitionFX DisplayVideoFrame Div DoMove DownloadFile DrawPath DumpButtons DumpLayers DumpMem DumpVideo DumpVideoTime EdgeBrush Ellipse EmbossBrush EmptyStr EnableButton EnableEvent EnableLayers EnableLineHook EnableMenuItem EnablePlugin EnableVWait End EndDoubleBuffer EndRefresh EndSelect EndianSwap EndsWith Eof Error EscapeQuit Eval Execute Exists ExitOnError Exp ExtractPalette FileAttributes FileLength FileLines FilePart FilePos FileRequest FileSize FileToString FillMem FillMusicBuffer FindStr FinishAnimStream FinishAsyncDraw Flip FlipBrush FlipSprite FloodFill Floor FlushFile FlushMusicBuffer FlushSerialPort FontRequest ForEach ForEachI ForcePathUse ForceSound ForceVideoDriver ForceVideoMode FormatStr FrExp Frac FreeAnim FreeBGPic FreeBrush FreeClipRegion FreeDisplay FreeEventCache FreeGlyphCache FreeIcon FreeLayers FreeMem FreeMenu FreeModule FreePalette FreePath FreePointer FreeSample FreeSprite FreeTextObject FullPath GCInfo GammaBrush GammaPalette GetAnimFrame GetApplicationInfo GetApplicationList GetAsset GetAttribute GetAvailableFonts GetBaudRate GetBestPen GetBrushLink GetBrushPen GetBulletColor GetCatalogString GetChannels GetCharMaps GetClipboard GetCommandLine GetConnectionIP GetConnectionPort GetConnectionProtocol GetConstant GetCoroutineStatus GetCountryInfo GetCurrentDirectory GetCurrentPoint GetDTR GetDash GetDataBits GetDate GetDateNum GetDefaultEncoding GetDirectoryEntry GetDisplayModes GetEnv GetErrorName GetEventCode GetFPSLimit GetFileArgument GetFileAttributes GetFillRule GetFillStyle GetFlowControl GetFontColor GetFontStyle GetFormStyle GetFrontScreen GetHostName GetIconProperties GetItem GetKerningPair GetLanguageInfo GetLastError GetLayerAtPos GetLayerPen GetLayerStyle GetLineCap GetLineJoin GetLineWidth GetLocalIP GetLocalInterfaces GetLocalPort GetLocalProtocol GetMACAddress GetMemPointer GetMemString GetMemoryInfo GetMetaTable GetMiterLimit GetMonitors GetObjectData GetObjectType GetObjects GetPalettePen GetParity GetPathExtents GetPatternPosition GetPen GetPlugins GetProgramDirectory GetProgramInfo GetPubScreens GetRTS GetRandomColor GetRandomFX GetRealColor GetSampleData GetShortcutPath GetSongPosition GetStartDirectory GetStopBits GetSystemCountry GetSystemInfo GetSystemLanguage GetTempFileName GetTime GetTimeZone GetTimer GetTimestamp GetType GetVersion GetVideoFrame GetVolumeInfo GetVolumeName GetWeekday GrabDesktop Green HaveFreeChannel HaveItem HaveObject HaveObjectData HavePlugin HaveVolume HexStr HideDisplay HideKeyboard HideLayer HideLayerFX HidePointer HideScreen Hypot IIf IPairs IgnoreCase ImageRequest InKeyStr IncreasePointer InsertItem InsertLayer InsertSample InsertStr InstallEventHandler Int Intersection InvertAlphaChannel InvertBrush InvertMask InvertPalette IsAbsolutePath IsAlNum IsAlpha IsAnim IsBrushEmpty IsChannelPlaying IsCntrl IsDigit IsDirectory IsFinite IsGraph IsInf IsKeyDown IsLeftMouse IsLower IsMenuItemDisabled IsMenuItemSelected IsMidMouse IsModule IsMusic IsMusicPlaying IsNan IsNil IsOnline IsPathEmpty IsPicture IsPrint IsPunct IsRightMouse IsSample IsSamplePlaying IsSound IsSpace IsTableEmpty IsUnicode IsUpper IsVideo IsVideoPlaying IsXDigit JoyDir JoyFire LayerExists LayerToBack LayerToFront Ld LdExp LeftMouseQuit LeftStr LegacyControl Limit Line LineTo ListItems ListRequest Ln LoadAnim LoadAnimFrame LoadBGPic LoadBrush LoadIcon LoadModule LoadPalette LoadPlugin LoadPrefs LoadSample LoadSprite Locate Log LowerStr MD5 MD5Str MakeButton MakeDate MakeDirectory MakeHostPath MatchPattern Max MemToTable MidStr Min MixBrush MixRGB MixSample Mod ModifyAnimFrames ModifyButton ModifyKeyDown ModifyLayerFrames ModulateBrush ModulatePalette MonitorDirectory MouseX MouseY MoveAnim MoveBrush MoveDisplay MoveFile MoveLayer MovePointer MoveSprite MoveTextObject MoveTo Mul NPrint NextDirectoryEntry NextFrame NextItem NormalizePath OilPaintBrush OpenAmigaGuide OpenAnim OpenAudio OpenCatalog OpenConnection OpenDirectory OpenDisplay OpenFile OpenFont OpenMusic OpenResourceMonitor OpenSerialPort OpenURL OpenVideo Pack PadNum Pairs PaletteToGray ParseDate PathItems PathPart PathRequest PathToBrush PatternFindStr PatternFindStrDirect PatternFindStrShort PatternReplaceStr PauseLayer PauseModule PauseMusic PauseTimer PauseVideo Peek PeekClipboard PenArrayToBrush PerformSelector PermissionRequest PerspectiveDistortBrush Pi PixelateBrush PlayAnim PlayAnimDisk PlayLayer PlayModule PlayMusic PlaySample PlaySubsong PlayVideo Plot Poke PolarDistortBrush PollSerialQueue Polygon Pow Print QuantizeBrush RGB RGBArrayToBrush Rad RaiseOnError RasterizeBrush RawDiv RawEqual RawGet RawSet ReadBrushPixel ReadByte ReadBytes ReadChr ReadDirectory ReadFloat ReadFunction ReadInt ReadLine ReadMem ReadPen ReadPixel ReadRegistryKey ReadSerialData ReadShort ReadString ReadTable ReceiveData ReceiveUDPData Red ReduceAlphaChannel RefreshDisplay RelCurveTo RelLineTo RelMoveTo RemapBrush RemoveBrushPalette RemoveButton RemoveIconImage RemoveItem RemoveKeyDown RemoveLayer RemoveLayerFX RemoveLayers RemoveSprite RemoveSprites Rename RepeatStr ReplaceColors ReplaceStr ResetKeyStates ResetTabs ResetTimer ResolveHostName ResumeCoroutine ResumeLayer ResumeModule ResumeMusic ResumeTimer ResumeVideo ReverseFindStr ReverseStr RewindDirectory RightStr Rnd RndF RndStrong Rol Ror RotateBrush RotateLayer RotateTextObject Round Rt Run RunCallback RunRexxScript Sar SaveAnim SaveBrush SaveIcon SavePalette SavePrefs SaveSample SaveSnapshot ScaleAnim ScaleBGPic ScaleBrush ScaleLayer ScaleSprite ScaleTextObject Seek SeekLayer SeekMusic SeekVideo SelectAlphaChannel SelectAnim SelectBGPic SelectBrush SelectDisplay SelectLayer SelectMask SelectMenuItem SelectPalette SendApplicationMessage SendData SendMessage SendRexxCommand SendUDPData SepiaToneBrush SerializeTable SetAlphaIntensity SetAnimFrameDelay SetBaudRate SetBorderPen SetBrushDepth SetBrushPalette SetBrushPen SetBrushTransparency SetBrushTransparentPen SetBulletColor SetBulletPen SetChannelVolume SetClipRegion SetClipboard SetCycleTable SetDTR SetDash SetDataBits SetDefaultEncoding SetDepth SetDisplayAttributes SetDitherMode SetDrawPen SetDrawTagsDefault SetEnv SetEventTimeout SetFPSLimit SetFileAttributes SetFileEncoding SetFillRule SetFillStyle SetFlowControl SetFont SetFontColor SetFontStyle SetFormStyle SetGradientPalette SetIOMode SetIconProperties SetInterval SetLayerAnchor SetLayerBorder SetLayerDepth SetLayerFilter SetLayerLight SetLayerName SetLayerPalette SetLayerPen SetLayerShadow SetLayerStyle SetLayerTint SetLayerTransparency SetLayerTransparentPen SetLayerVolume SetLayerZPos SetLineCap SetLineJoin SetLineWidth SetListItems SetMargins SetMaskMode SetMasterVolume SetMetaTable SetMiterLimit SetMusicVolume SetNetworkProtocol SetNetworkTimeout SetObjectData SetPalette SetPaletteDepth SetPaletteMode SetPalettePen SetPaletteTransparentPen SetPanning SetParity SetPen SetPitch SetPointer SetRTS SetScreenTitle SetShadowPen SetSpriteZPos SetStandardIconImage SetStandardPalette SetStopBits SetSubtitle SetTimeout SetTimerElapse SetTitle SetTransparentPen SetTransparentThreshold SetTrayIcon SetVectorEngine SetVideoPosition SetVideoSize SetVideoVolume SetVolume SetWBIcon Sgn SharpenBrush Shl ShowDisplay ShowKeyboard ShowLayer ShowLayerFX ShowNotification ShowPointer ShowRinghioMessage ShowScreen ShowToast Shr Sin SolarizeBrush SolarizePalette Sort SplitStr Sqrt StartPath StartSubPath StartTimer StartsWith StopChannel StopLayer StopModule StopMusic StopSample StopTimer StopVideo StrLen StrStr StrToArray StringRequest StringToFile StripStr Sub SwapLayers SwirlBrush SystemRequest TableItems TableToMem Tan TextExtent TextHeight TextOut TextWidth TimerElapsed TimestampToDate TintBrush TintPalette ToHostName ToIP ToNumber ToString ToUserData TransformBrush TransformLayer TranslateLayer TranslatePath TrimBrush TrimStr UTCToDate UndefineVirtualStringFile Undo UndoFX UnleftStr UnmidStr Unpack UnrightStr UnsetEnv UploadFile UpperStr UseCarriageReturn UseFont VWait Val ValidateDate ValidateStr Vibrate Wait WaitEvent WaitKeyDown WaitLeftMouse WaitMidMouse WaitPatternPosition WaitRightMouse WaitSampleEnd WaitSongPosition WaitTimer WaterRippleBrush WhileKeyDown WhileMouseDown WhileMouseOn WhileRightMouseDown Wrap WriteAnimFrame WriteBrushPixel WriteByte WriteBytes WriteChr WriteFloat WriteFunction WriteInt WriteLine WriteMem WritePen WriteRegistryKey WriteSerialData WriteShort WriteString WriteTable YieldCoroutine " user-defined constants syn match hwUserConstant "#\<\u\+\>" diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim index d16ee1817f..8ccb5574e7 100644 --- a/runtime/syntax/html.vim +++ b/runtime/syntax/html.vim @@ -1,10 +1,11 @@ " Vim syntax file " Language: HTML -" Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net> +" Previous Maintainer: Jorge Maldonado Ventura <jorgesumle@freakspot.net> " Previous Maintainer: Claudio Fleiner <claudio@fleiner.com> " Repository: https://notabug.org/jorgesumle/vim-html-syntax -" Last Change: 2018 Apr 7 -" Included patch from Jorge Maldonado Ventura to fix rendering +" Last Change: 2021 Mar 02 +" Included patch #7900 to fix comments +" Included patch #7916 to fix a few more things " " Please check :help html.vim for some comments and a description of the options @@ -57,11 +58,12 @@ syn keyword htmlTagName contained object optgroup q s tbody tfoot thead " new html 5 tags syn keyword htmlTagName contained article aside audio bdi canvas data -syn keyword htmlTagName contained datalist details embed figcaption figure -syn keyword htmlTagName contained footer header hgroup keygen main mark -syn keyword htmlTagName contained menuitem meter nav output picture +syn keyword htmlTagName contained datalist details dialog embed figcaption +syn keyword htmlTagName contained figure footer header hgroup keygen main +syn keyword htmlTagName contained mark menuitem meter nav output picture syn keyword htmlTagName contained progress rb rp rt rtc ruby section -syn keyword htmlTagName contained slot source template time track video wbr +syn keyword htmlTagName contained slot source summary template time track +syn keyword htmlTagName contained video wbr " legal arg names syn keyword htmlArg contained action @@ -78,26 +80,16 @@ syn keyword htmlArg contained usemap ismap valign value vlink vspace width wrap syn match htmlArg contained "\<\(http-equiv\|href\|title\)="me=e-1 " aria attributes -syn match htmlArg contained "\<\(aria-activedescendant\|aria-atomic\)\>" -syn match htmlArg contained "\<\(aria-autocomplete\|aria-busy\|aria-checked\)\>" -syn match htmlArg contained "\<\(aria-colcount\|aria-colindex\|aria-colspan\)\>" -syn match htmlArg contained "\<\(aria-controls\|aria-current\)\>" -syn match htmlArg contained "\<\(aria-describedby\|aria-details\)\>" -syn match htmlArg contained "\<\(aria-disabled\|aria-dropeffect\)\>" -syn match htmlArg contained "\<\(aria-errormessage\|aria-expanded\)\>" -syn match htmlArg contained "\<\(aria-flowto\|aria-grabbed\|aria-haspopup\)\>" -syn match htmlArg contained "\<\(aria-hidden\|aria-invalid\)\>" -syn match htmlArg contained "\<\(aria-keyshortcuts\|aria-label\)\>" -syn match htmlArg contained "\<\(aria-labelledby\|aria-level\|aria-live\)\>" -syn match htmlArg contained "\<\(aria-modal\|aria-multiline\)\>" -syn match htmlArg contained "\<\(aria-multiselectable\|aria-orientation\)\>" -syn match htmlArg contained "\<\(aria-owns\|aria-placeholder\|aria-posinset\)\>" -syn match htmlArg contained "\<\(aria-pressed\|aria-readonly\|aria-relevant\)\>" -syn match htmlArg contained "\<\(aria-required\|aria-roledescription\)\>" -syn match htmlArg contained "\<\(aria-rowcount\|aria-rowindex\|aria-rowspan\)\>" -syn match htmlArg contained "\<\(aria-selected\|aria-setsize\|aria-sort\)\>" -syn match htmlArg contained "\<\(aria-valuemax\|aria-valuemin\)\>" -syn match htmlArg contained "\<\(aria-valuenow\|aria-valuetext\)\>" +exe 'syn match htmlArg contained "\<aria-\%(' . join([ + \ 'activedescendant', 'atomic', 'autocomplete', 'busy', 'checked', 'colcount', + \ 'colindex', 'colspan', 'controls', 'current', 'describedby', 'details', + \ 'disabled', 'dropeffect', 'errormessage', 'expanded', 'flowto', 'grabbed', + \ 'haspopup', 'hidden', 'invalid', 'keyshortcuts', 'label', 'labelledby', 'level', + \ 'live', 'modal', 'multiline', 'multiselectable', 'orientation', 'owns', + \ 'placeholder', 'posinset', 'pressed', 'readonly', 'relevant', 'required', + \ 'roledescription', 'rowcount', 'rowindex', 'rowspan', 'selected', 'setsize', + \ 'sort', 'valuemax', 'valuemin', 'valuenow', 'valuetext' + \ ], '\|') . '\)\>"' syn keyword htmlArg contained role " Netscape extensions @@ -123,11 +115,11 @@ syn keyword htmlArg contained summary tabindex valuetype version " html 5 arg names syn keyword htmlArg contained allowfullscreen async autocomplete autofocus syn keyword htmlArg contained autoplay challenge contenteditable contextmenu -syn keyword htmlArg contained controls crossorigin default dialog dirname -syn keyword htmlArg contained download draggable dropzone form formaction -syn keyword htmlArg contained formenctype formmethod formnovalidate formtarget -syn keyword htmlArg contained hidden high icon inputmode keytype kind list loop -syn keyword htmlArg contained low max min minlength muted nonce novalidate open +syn keyword htmlArg contained controls crossorigin default dirname download +syn keyword htmlArg contained draggable dropzone form formaction formenctype +syn keyword htmlArg contained formmethod formnovalidate formtarget hidden +syn keyword htmlArg contained high icon inputmode keytype kind list loop low +syn keyword htmlArg contained max min minlength muted nonce novalidate open syn keyword htmlArg contained optimum pattern placeholder poster preload syn keyword htmlArg contained radiogroup required reversed sandbox spellcheck syn keyword htmlArg contained sizes srcset srcdoc srclang step title translate @@ -138,13 +130,19 @@ syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};" " Comments (the real ones or the old netscape ones) if exists("html_wrong_comments") - syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell + syn region htmlComment start=+<!--+ end=+--\s*>+ contains=@Spell else - syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentPart,htmlCommentError,@Spell - syn match htmlCommentError contained "[^><!]" - syn region htmlCommentPart contained start=+--+ end=+--\s*+ contains=@htmlPreProc,@Spell + " The HTML 5.2 syntax 8.2.4.41: bogus comment is parser error; browser skips until next > + syn region htmlComment start=+<!+ end=+>+ contains=htmlCommentError keepend + " Idem 8.2.4.42,51: Comment starts with <!-- and ends with --> + " Idem 8.2.4.43,44: Except <!--> and <!---> are parser errors + " Idem 8.2.4.52: dash-dash-bang (--!>) is error ignored by parser, also closes comment + syn region htmlComment matchgroup=htmlComment start=+<!--\%(-\?>\)\@!+ end=+--!\?>+ contains=htmlCommentNested,@htmlPreProc,@Spell keepend + " Idem 8.2.4.49: nested comment is parser error, except <!--> is all right + syn match htmlCommentNested contained "<!-->\@!" + syn match htmlCommentError contained "[^><!]" endif -syn region htmlComment start=+<!DOCTYPE+ keepend end=+>+ +syn region htmlComment start=+<!DOCTYPE+ end=+>+ keepend " server-parsed commands syn region htmlPreProc start=+<!--#+ end=+-->+ contains=htmlPreStmt,htmlPreError,htmlPreAttr @@ -265,7 +263,7 @@ hi def link htmlEndTag Identifier hi def link htmlArg Type hi def link htmlTagName htmlStatement hi def link htmlSpecialTagName Exception -hi def link htmlValue String +hi def link htmlValue String hi def link htmlSpecialChar Special if !exists("html_no_rendering") @@ -309,13 +307,10 @@ hi def link htmlPreProc PreProc hi def link htmlPreAttr String hi def link htmlPreProcAttrName PreProc hi def link htmlPreProcAttrError Error -hi def link htmlSpecial Special -hi def link htmlSpecialChar Special hi def link htmlString String hi def link htmlStatement Statement hi def link htmlComment Comment -hi def link htmlCommentPart Comment -hi def link htmlValue String +hi def link htmlCommentNested htmlError hi def link htmlCommentError htmlError hi def link htmlTagError htmlError hi def link htmlEvent javaScript diff --git a/runtime/syntax/ia64.vim b/runtime/syntax/ia64.vim index 544fcd402c..ad12f563fb 100644 --- a/runtime/syntax/ia64.vim +++ b/runtime/syntax/ia64.vim @@ -1,10 +1,9 @@ " Vim syntax file -" Language: IA-64 (Itanium) assembly language -" Maintainer: Parth Malwankar <pmalwankar@yahoo.com> -" URL: http://www.geocities.com/pmalwankar (Home Page with link to my Vim page) -" http://www.geocities.com/pmalwankar/vim.htm (for VIM) -" File Version: 0.7 -" Last Change: 2006 Sep 08 +" Language: IA-64 (Itanium) assembly language +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Parth Malwankar <pmalwankar@yahoo.com> +" File Version: 0.8 +" Last Change: 2020 Sep 25 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -15,16 +14,16 @@ endif "ignore case for assembly syn case ignore -" Identifier Keyword characters (defines \k) -setlocal iskeyword=@,48-57,#,$,.,:,?,@-@,_,~ - syn sync minlines=5 " Read the MASM syntax to start with " This is needed as both IA-64 as well as IA-32 instructions are supported source <sfile>:p:h/masm.vim -syn region ia64Comment start="//" end="$" contains=ia64Todo +" Identifier Keyword characters (defines \k) +syn iskeyword @,48-57,#,$,.,:,?,@-@,_,~ + +syn region ia64Comment start="//" end="$" contains=ia64Todo syn region ia64Comment start="/\*" end="\*/" contains=ia64Todo syn match ia64Identifier "[a-zA-Z_$][a-zA-Z0-9_$]*" @@ -266,22 +265,22 @@ syn match ia64data "stringz\=\(\(\(\.ua\)\=\(\.msb\|\.lsb\)\=\)\|\(\(\.msb\|\.ls "put masm groups with our groups hi def link masmOperator ia64operator hi def link masmDirective ia64Directive -hi def link masmOpcode ia64Opcode +hi def link masmOpcode ia64Opcode hi def link masmIdentifier ia64Identifier -hi def link masmFloat ia64Float +hi def link masmFloat ia64Float "ia64 specific stuff -hi def link ia64Label Define -hi def link ia64Comment Comment +hi def link ia64Label Define +hi def link ia64Comment Comment hi def link ia64Directive Type -hi def link ia64opcode Statement +hi def link ia64opcode Statement hi def link ia64registers Operator -hi def link ia64string String +hi def link ia64string String hi def link ia64Hex Number -hi def link ia64Binary Number -hi def link ia64Octal Number -hi def link ia64Float Float -hi def link ia64Decimal Number +hi def link ia64Binary Number +hi def link ia64Octal Number +hi def link ia64Float Float +hi def link ia64Decimal Number hi def link ia64Identifier Identifier hi def link ia64data Type hi def link ia64delimiter Delimiter diff --git a/runtime/syntax/initng.vim b/runtime/syntax/initng.vim index 1a912c1d05..5d7685cde1 100644 --- a/runtime/syntax/initng.vim +++ b/runtime/syntax/initng.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: initng .i files -" Maintainer: Elan Ruusamäe <glen@pld-linux.org> +" Maintainer: Elan Ruusamäe <glen@pld-linux.org> " URL: http://glen.alkohol.ee/pld/initng/ " License: GPL v2 " Version: 0.13 diff --git a/runtime/syntax/inittab.vim b/runtime/syntax/inittab.vim index 82bf660105..fc5adfc348 100644 --- a/runtime/syntax/inittab.vim +++ b/runtime/syntax/inittab.vim @@ -1,9 +1,8 @@ " Vim syntax file -" This is a GENERATED FILE. Please always refer to source file at the URI below. " Language: SysV-compatible init process control file `inittab' -" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz> -" Last Change: 2002-09-13 -" URL: http://physics.muni.cz/~yeti/download/syntax/inittab.vim +" Maintainer: Donovan Keohane <donovan.keohane@gmail.com> +" Previous Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz> +" Last Change: 2019-11-19 " Setup " quit when a syntax file was already loaded @@ -25,7 +24,7 @@ syn region inittabShString start=+"+ end=+"+ skip=+\\\\\|\\\"+ contained syn region inittabShString start=+'+ end=+'+ contained syn match inittabShOption "\s[-+][[:alnum:]]\+"ms=s+1 contained syn match inittabShOption "\s--[:alnum:][-[:alnum:]]*"ms=s+1 contained -syn match inittabShCommand "/\S\+" contained +syn match inittabShCommand "\S\+" contained syn cluster inittabSh add=inittabShOption,inittabShString,inittabShCommand " Keywords @@ -39,7 +38,7 @@ syn match inittabColonAction ":" contained nextgroup=inittabAction,inittabError syn match inittabAction "\w\+" contained nextgroup=inittabColonProcess,inittabError contains=inittabActionName syn match inittabColonProcess ":" contained nextgroup=inittabProcessPlus,inittabProcess,inittabError syn match inittabProcessPlus "+" contained nextgroup=inittabProcess,inittabError -syn region inittabProcess start="/" end="$" transparent oneline contained contains=@inittabSh,inittabComment +syn region inittabProcess start="\S" end="$" transparent oneline contained contains=@inittabSh,inittabComment " Define the default highlighting diff --git a/runtime/syntax/iss.vim b/runtime/syntax/iss.vim index e58c618b7f..e41de5db5a 100644 --- a/runtime/syntax/iss.vim +++ b/runtime/syntax/iss.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Inno Setup File (iss file) and My InnoSetup extension " Maintainer: Jason Mills (jmills@cs.mun.ca) -" Previous Maintainer: Dominique Stéphan (dominique@mggen.com) -" Last Change: 2004 Dec 14 +" Previous Maintainer: Dominique Stéphan (dominique@mggen.com) +" Last Change: 2019 Sep 27 " " Todo: " - The paramter String: is matched as flag string (because of case ignore). @@ -45,13 +45,13 @@ syn match issParam "Components:\|Description:\|GroupDescription:\|Types:\|Extra syn match issParam "StatusMsg:\|RunOnceId:\|Tasks:" syn match issParam "MessagesFile:\|LicenseFile:\|InfoBeforeFile:\|InfoAfterFile:" -syn match issComment "^\s*;.*$" +syn match issComment "^\s*;.*$" contains=@Spell " folder constant -syn match issFolder "{[^{]*}" +syn match issFolder "{[^{]*}" contains=@NoSpell " string -syn region issString start=+"+ end=+"+ contains=issFolder +syn region issString start=+"+ end=+"+ contains=issFolder,@Spell " [Dirs] syn keyword issDirsFlags deleteafterinstall uninsalwaysuninstall uninsneveruninstall diff --git a/runtime/syntax/j.vim b/runtime/syntax/j.vim index 4912942e8b..a694cb2f1a 100644 --- a/runtime/syntax/j.vim +++ b/runtime/syntax/j.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: J -" Maintainer: David Bürgin <676c7473@gmail.com> -" URL: https://github.com/glts/vim-j -" Last Change: 2015-01-11 +" Maintainer: David Bürgin <dbuergin@gluet.ch> +" URL: https://gitlab.com/glts/vim-j +" Last Change: 2019-11-12 if exists('b:current_syntax') finish @@ -23,10 +23,10 @@ syntax match jControl /\<\%(for\|goto\|label\)_\a\k*\./ " Standard library names. A few names need to be defined with ":syntax match" " because they would otherwise take precedence over the corresponding jControl " and jDefineExpression items. -syntax keyword jStdlibNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFIOS IFJCDROID IFJHS IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCMPX JFL JINT JPTR JSIZES JSTR JTYPES JVERSION LF LF2 TAB UNAME UNXLIB dbhelp libjqt +syntax keyword jStdlibNoun ARGV BINPATH CR CRLF DEL Debug EAV EMPTY FF FHS IF64 IFBE IFIOS IFJA IFJHS IFJNET IFQT IFRASPI IFUNIX IFWIN IFWINCE IFWINE IFWOW64 JB01 JBOXED JCHAR JCHAR2 JCHAR4 JCMPX JFL JINT JLIB JPTR JSB JSIZES JSTR JSTR2 JSTR4 JTYPES JVERSION LF LF2 LIBFILE TAB UNAME UNXLIB dbhelp libjqt syntax keyword jStdlibAdverb define each every fapplylines inv inverse items leaf rows rxapply rxmerge table syntax keyword jStdlibConjunction bind cuts def on -syntax keyword jStdlibVerb AND Endian IFDEF OR XOR anddf android_exec_am android_exec_host andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring cleartags clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert compare coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dberm dberr dbg dbjmp dblocals dblxq dblxs dbnxt dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcompare fcompares fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getalpha getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf8 jcwdpath joinstring jpath jpathsep jsystemdefs launch list ljust load loadd loadtags mema memf memr memw nameclass namelist names nc nl pick quote require rjust rplc rxE rxall rxcomp rxcut rxeq rxerror rxfirst rxfree rxfrom rxhandles rxin rxindex rxinfo rxmatch rxmatches rxrplc rxutf8 script scriptd scripts setalpha setbreak shell show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid startupconsole startupide stderr stdin stdout stringreplace symdat symget symset ta tagcp tagopen tagselect take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep xedit +syntax keyword jStdlibVerb AND Endian IFDEF OR XOR abspath anddf android_exec_am android_exec_host android_getdisplaymetrics andunzip apply boxopen boxxopen bx calendar cd cdcb cder cderx cdf charsub chopstring clear coclass cocreate cocurrent codestroy coerase cofind cofindv cofullname coinfo coinsert compare coname conames conew conl conouns conounsx copath copathnl copathnlx coreset costate cut cutLF cutopen cutpara datatype dbctx dbcut dberm dberr dbg dbinto dbjmp dblocals dblxq dblxs dbnxt dbout dbover dbq dbr dbret dbrr dbrrx dbrun dbs dbsig dbsq dbss dbst dbstack dbstk dbstop dbstopme dbstopnext dbstops dbtrace dbview deb debc delstring detab dfh dir dircompare dircompares dirfind dirpath dirss dirssrplc dirtree dirused dlb dltb dltbs dquote drop dropafter dropto dtb dtbs echo empty endian erase evtloop exit expand f2utf8 fappend fappends fboxname fc fcompare fcompares fcopynew fdir ferase fetch fexist fexists fgets file2url fixdotdot fliprgb fmakex foldpara foldtext fpathcreate fpathname fputs fread freadblock freadr freads frename freplace fsize fss fssrplc fstamp fstringreplace ftype fview fwrite fwritenew fwrites getalpha getargs getdate getenv getqtbin hfd hostpathsep ic install iospath isatty isotimestamp isutf16 isutf8 jcwdpath joinstring jpath jpathsep jsystemdefs launch list ljust load loadd mema memf memr memu memw nameclass namelist names nc nl pick quote require rjust rplc rxE rxall rxcomp rxcut rxeq rxerror rxfirst rxfree rxfrom rxhandles rxin rxindex rxinfo rxmatch rxmatches rxrplc rxutf8 script scriptd scripts setalpha setbreak shell show sign sminfo smoutput sort split splitnostring splitstring ss startupandroid stderr stdin stdout stringreplace symdat symget symset take takeafter taketo timespacex timestamp timex tmoutput toCRLF toHOST toJ todate todayno tolist tolower topara toupper tsdiff tsrep tstamp type ucp ucpcount undquote unxlib usleep utf8 uucp valdate wcsize weekday weeknumber weeksinyear winpathsep xedit syntax match jStdlibNoun /\<\%(adverb\|conjunction\|dyad\|monad\|noun\|verb\)\>/ syntax match jStdlibVerb /\<\%(Note\|\%(assert\|break\|do\)\.\@!\)\>/ diff --git a/runtime/syntax/jargon.vim b/runtime/syntax/jargon.vim index 415f2bc972..c4b017d9e6 100644 --- a/runtime/syntax/jargon.vim +++ b/runtime/syntax/jargon.vim @@ -1,23 +1,24 @@ " Vim syntax file " Language: Jargon File -" Maintainer: <rms@poczta.onet.pl> -" Last Change: 2001 May 26 +" Maintainer: Dan Church (https://github.com/h3xx) +" Last Change: 2020 Mar 16 " " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif -syn match jargonChaptTitle /:[^:]*:/ -syn match jargonEmailAddr /[^<@ ^I]*@[^ ^I>]*/ -syn match jargonUrl +\(http\|ftp\)://[^\t )"]*+ -syn match jargonMark /{[^}]*}/ +syn region jargonHeader start="^:" end="$" contains=jargonChaptTitle +syn match jargonChaptTitle /:[^:]*:/ contained +syn match jargonEmailAddr /[+._A-Za-z0-9-]\+@[+._A-Za-z0-9-]\+/ +syn match jargonUrl +\(https\?\|ftp\)://[^\t )"]*+ +syn region jargonMark start="{[^\t {}]" end="}" " Define the default highlighting. " Only when an item doesn't have highlighting yet -hi def link jargonChaptTitle Title -hi def link jargonEmailAddr Comment -hi def link jargonUrl Comment -hi def link jargonMark Label +hi def link jargonChaptTitle Title +hi def link jargonEmailAddr Comment +hi def link jargonUrl Comment +hi def link jargonMark Label let b:current_syntax = "jargon" diff --git a/runtime/syntax/javascript.vim b/runtime/syntax/javascript.vim index 8a5e10b261..1ab1c2db11 100644 --- a/runtime/syntax/javascript.vim +++ b/runtime/syntax/javascript.vim @@ -7,7 +7,7 @@ " (ss) repaired several quoting and grouping glitches " (ss) fixed regex parsing issue with multiple qualifiers [gi] " (ss) additional factoring of keywords, globals, and members -" Last Change: 2020 May 14 +" Last Change: 2021 Mar 30 " 2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke) " 2018 Apr 14: adjusted javaScriptRegexpString (LongJohnCoder) @@ -41,6 +41,7 @@ syn region javaScriptEmbed start=+${+ end=+}+ contains=@javaScriptEmbed syn match javaScriptSpecialCharacter "'\\.'" syn match javaScriptNumber "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>" +syn match javaScriptNumber "-\=\<\d\+\%(_\d\+\)*\>" syn region javaScriptRegexpString start=+[,(=+]\s*/[^/*]+ms=e-1,me=e-1 skip=+\\\\\|\\/+ end=+/[gimuys]\{0,2\}\s*$+ end=+/[gimuys]\{0,2\}\s*[+;.,)\]}]+me=e-1 end=+/[gimuys]\{0,2\}\s\+\/+me=e-1 contains=@htmlPreproc,javaScriptComment oneline syn keyword javaScriptConditional if else switch diff --git a/runtime/syntax/json.vim b/runtime/syntax/json.vim index e3210a9702..3f49b0c5ea 100644 --- a/runtime/syntax/json.vim +++ b/runtime/syntax/json.vim @@ -2,7 +2,7 @@ " Language: JSON " Maintainer: vacancy " Previous Maintainer: Eli Parra <eli@elzr.com> -" Last Change: 2019 Jul 08 +" Last Change: 2019 Sep 17 " Version: 0.12 if !exists("main_syntax") @@ -20,7 +20,7 @@ syntax match jsonNoise /\%(:\|,\)/ " Syntax: JSON Keywords " Separated into a match and region because a region by itself is always greedy syn match jsonKeywordMatch /"\([^"]\|\\\"\)\+"[[:blank:]\r\n]*\:/ contains=jsonKeyword -if has('conceal') +if has('conceal') && (!exists("g:vim_json_conceal") || g:vim_json_conceal==1) syn region jsonKeyword matchgroup=jsonQuote start=/"/ end=/"\ze[[:blank:]\r\n]*\:/ concealends contained else syn region jsonKeyword matchgroup=jsonQuote start=/"/ end=/"\ze[[:blank:]\r\n]*\:/ contained @@ -31,7 +31,7 @@ endif " Needs to come after keywords or else a json encoded string will break the " syntax syn match jsonStringMatch /"\([^"]\|\\\"\)\+"\ze[[:blank:]\r\n]*[,}\]]/ contains=jsonString -if has('conceal') +if has('conceal') && (!exists("g:vim_json_conceal") || g:vim_json_conceal==1) syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ concealends contains=jsonEscape contained else syn region jsonString oneline matchgroup=jsonQuote start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=jsonEscape contained diff --git a/runtime/syntax/ld.vim b/runtime/syntax/ld.vim index 22949d9759..6a117ee87b 100644 --- a/runtime/syntax/ld.vim +++ b/runtime/syntax/ld.vim @@ -48,7 +48,7 @@ syn match ldSpecSections '\.\%(text\|data\|bss\|symver\)\>' syn match ldNumber display '\<0[xX]\x\+\>' syn match ldNumber display '\d\+[KM]\>' contains=ldNumberMult -syn match ldNumberMult display '[KM]\>' +syn match ldNumberMult display '\(\d\+\)\@<=[KM]\>' syn match ldOctal contained display '\<0\o\+\>' \ contains=ldOctalZero syn match ldOctalZero contained display '\<0' diff --git a/runtime/syntax/less.vim b/runtime/syntax/less.vim index 5cc8c6d7bd..c44f0775f2 100644 --- a/runtime/syntax/less.vim +++ b/runtime/syntax/less.vim @@ -2,14 +2,13 @@ " Language: less " Maintainer: Alessandro Vioni <jenoma@gmail.com> " URL: https://github.com/genoma/vim-less -" Last Change: 2014 November 24 +" Last Change: 2020 Sep 29 if exists("b:current_syntax") finish endif runtime! syntax/css.vim -runtime! after/syntax/css.vim syn case ignore diff --git a/runtime/syntax/lex.vim b/runtime/syntax/lex.vim index 560aa44be3..82197adbed 100644 --- a/runtime/syntax/lex.vim +++ b/runtime/syntax/lex.vim @@ -1,22 +1,19 @@ " Vim syntax file -" Language: Lex -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> -" Last Change: Aug 31, 2016 -" Version: 16 -" URL: http://mysite.verizon.net/astronaut/vim/index.html#SYNTAX_LEX -" -" Option: -" lex_uses_cpp : if this variable exists, then C++ is loaded rather than C +" Language: Lex and Flex +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> +" Contributor: Robert A. van Engelen <engelen@acm.org> +" Last Change: Apr 24, 2020 +" Version: 18 " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif -" Read the C/C++ syntax to start with -let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:lex_uses_cpp")? "/cpp.vim" : "/c.vim")) +" Read the C++ syntax to start with +let s:Cpath= fnameescape(expand("<sfile>:p:h")."/cpp.vim") if !filereadable(s:Cpath) - for s:Cpath in split(globpath(&rtp,(exists("g:lex_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n") + for s:Cpath in split(globpath(&rtp,"syntax/cpp.vim"),"\n") if filereadable(fnameescape(s:Cpath)) let s:Cpath= fnameescape(s:Cpath) break @@ -29,115 +26,163 @@ exe "syn include @lexCcode ".s:Cpath " --- Lex stuff --- " --- ========= --- -" Options Section -syn match lexOptions '^%\s*option\>.*$' contains=lexPatString +" Definitions +" %% +" Rules +" %% +" User Code +" +" --- ======= --- +" --- Example --- +" --- ======= --- +" +" // this is a valid lex file +" // indented initial code block +" #include <stdlib.h> +" %{ +" // initial code block +" #include <stdio.h> +" const char *sep = ""; +" %} +" %option outfile="scanner.c" noyywrap nodefault +" %x COMMENT +" id [A-Za-z_][A-Za-z0-9_]* +" %% +" // indented initial action code block +" printf("BEGIN"); +" {id} printf("%s%s", sep, yytext); sep = ""; +" . | +" \n { sep = "\n"; } +" "/*" { BEGIN COMMENT; } +" "//".* { } +" <COMMENT>{ +" "*/" { BEGIN INITIAL; } +" .|\n +" } +" <*><<EOF>> { // end of file +" printf("\nEND\n"); +" yyterminate(); +" } +" %% +" void scan() +" { +" while (yylex()) +" continue; +" } +" /* main program */ +" int main() +" { +" scan(); +" } -" Abbreviations Section +" Definitions Section with initial code blocks, abbreviations, options, states if has("folding") - syn region lexAbbrvBlock fold start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState + syn region lexAbbrvBlock fold start="^\S" end="^\ze%%" skipnl nextgroup=lexPatBlock contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState else - syn region lexAbbrvBlock start="^\(\h\+\s\|%{\)" end="^\ze%%$" skipnl nextgroup=lexPatBlock contains=lexAbbrv,lexInclude,lexAbbrvComment,lexStartState + syn region lexAbbrvBlock start="^\S" end="^\ze%%" skipnl nextgroup=lexPatBlock contains=lexOptions,lexAbbrv,lexInitialCodeBlock,lexInclude,lexAbbrvComment,lexStartState endif -syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvRegExp -syn match lexAbbrv "^%[sx]" contained -syn match lexAbbrvRegExp "\s\S.*$"lc=1 contained nextgroup=lexAbbrv,lexInclude +syn match lexOptions "^%\a\+\(\s.*\|[^{]*\)$" contains=lexOptionsEq,lexPatString,lexSlashQuote,lexBrace,lexSlashBrace +syn match lexOptionsEq "=" skipwhite contained +syn match lexAbbrv "^\I\i*\s"me=e-1 skipwhite contained nextgroup=lexAbbrvPat +syn match lexAbbrvPat "\s\S.*$"lc=1 contained contains=lexPatAbbrv,lexPatString,lexSlashQuote,lexBrace,lexSlashBrace nextgroup=lexAbbrv,lexInclude +syn match lexStartState "^%\(xs\?\|s\)\(t\(a\(t\(e\?\)\?\)\?\)\?\)\?\(\s\+\I\i*\)\+\s*$" contained contains=lexStartStateCmd +syn match lexStartStateCmd '^%\(xs\?\|s\)\(t\(a\(t\(e\?\)\?\)\?\)\?\)\?' contained if has("folding") - syn region lexInclude fold matchgroup=lexSep start="^%{" end="%}" contained contains=@lexCcode - syn region lexAbbrvComment fold start="^\s\+/\*" end="\*/" contains=@Spell - syn region lexAbbrvComment fold start="\%^/\*" end="\*/" contains=@Spell - syn region lexStartState fold matchgroup=lexAbbrv start="^%\a\+" end="$" contained + syn region lexInitialCodeBlock fold start="^\s\+" end="^\S"me=e-1 contains=@lexCcode + syn region lexInclude fold matchgroup=lexSep start="^%\a*{" end="^%\?}" contained contains=@lexCcode,lexCFunctions + syn region lexAbbrvComment fold start="^\s*//" end="$" contains=@Spell + syn region lexAbbrvComment fold start="^\s*/\*" end="\*/" contains=@Spell else - syn region lexInclude matchgroup=lexSep start="^%{" end="%}" contained contains=@lexCcode - syn region lexAbbrvComment start="^\s\+/\*" end="\*/" contains=@Spell - syn region lexAbbrvComment start="\%^/\*" end="\*/" contains=@Spell - syn region lexStartState matchgroup=lexAbbrv start="^%\a\+" end="$" contained + syn region lexInitialCodeBlock start="^\s\+" end="^\S"me=e-1 contains=@lexCcode + syn region lexInclude matchgroup=lexSep start="^%\a*{" end="^%\?}" contained contains=@lexCcode,lexCFunctions + syn region lexAbbrvComment start="^\s*//" end="$" contains=@Spell + syn region lexAbbrvComment start="^\s*/\*" end="\*/" contains=@Spell endif -"%% : Patterns {Actions} +" Rules Section with patterns and actions if has("folding") - syn region lexPatBlock fold matchgroup=Todo start="^%%$" matchgroup=Todo end="^%\ze%$" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude - syn region lexPat fold start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace - syn region lexPatInclude fold matchgroup=lexSep start="^%{" end="%}" contained contains=lexPatCode - syn region lexBrace fold start="\[" skip=+\\\\\|\\+ end="]" contained - syn region lexPatString fold matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained + syn region lexPatBlock fold matchgroup=Todo start="^%%" matchgroup=Todo end="^\ze%%" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude + syn region lexPat fold start="\S" skip="\\\\\|\\\s" end="\ze\(\s*$\|\s\+\(\h\|{\W\|{$\|[-+*]\|//\|/\*\)\)" skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPatEnd contains=lexPatTag,lexPatString,lexSlashQuote,lexPatAbbrv,lexBrace,lexSlashBrace + syn region lexPatInclude fold matchgroup=lexSep start="^%{" end="^%}" contained contains=@lexCcode + syn region lexBrace fold matchgroup=Character start="\[" skip="\\.\|\[:\a\+:\]\|\[\.\a\+\.\]\|\[=.=\]" end="\]" contained + syn region lexPatString fold matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained else - syn region lexPatBlock matchgroup=Todo start="^%%$" matchgroup=Todo end="^%%$" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude - syn region lexPat start=+\S+ skip="\\\\\|\\." end="\s"me=e-1 skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace - syn region lexPatInclude matchgroup=lexSep start="^%{" end="%}" contained contains=lexPatCode - syn region lexBrace start="\[" skip=+\\\\\|\\+ end="]" contained - syn region lexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained + syn region lexPatBlock matchgroup=Todo start="^%%" matchgroup=Todo end="^\ze%%" skipnl skipwhite nextgroup=lexFinalCodeBlock contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude + syn region lexPat start="\S" skip="\\\\\|\\\s" end="\ze\(\s*$\|\s\+\(\h\|{\W\|{$\|[-+*]\|//\|/\*\)\)" skipwhite contained nextgroup=lexMorePat,lexPatSep,lexPatEnd contains=lexPatTag,lexPatString,lexSlashQuote,lexPatAbbrv,lexBrace,lexSlashBrace + syn region lexPatInclude matchgroup=lexSep start="^%{" end="^%}" contained contains=@lexCcode + syn region lexBrace matchgroup=Character start="\[" skip="\\.\|\[:\a\+:\]\|\[\.\a\+\.\]\|\[=.=\]" end="\]" contained + syn region lexPatString matchgroup=String start=+"+ skip=+\\\\\|\\"+ matchgroup=String end=+"+ contained endif -syn match lexPatTag "^<\I\i*\(,\I\i*\)*>" contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep -syn match lexPatTagZone "^<\I\i*\(,\I\i*\)*>\s\+\ze{" contained nextgroup=lexPatTagZoneStart -syn match lexPatTag +^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+ contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep - -" Lex Patterns -syn region lexPattern start='[^ \t{}]' end="$" contained contains=lexPatRange -syn region lexPatRange matchgroup=Delimiter start='\[' skip='\\\\\|\\.' end='\]' contains=lexEscape -syn match lexEscape '\%(\\\\\)*\\.' contained +syn match lexPatAbbrv "{\I\i*}"hs=s+1,he=e-1 contained +syn match lexPatTag "^<\^\?\(\I\i*\|\*\)\(,\^\?\(\I\i*\|\*\)\)*>" contained nextgroup=lexPat,lexMorePat,lexPatSep,lexPatEnd +syn match lexPatTagZone "^<\^\?\(\I\i*\|\*\)\(,\^\?\(\I\i*\|\*\)\)*>\s*{$"me=e-1 contained nextgroup=lexPatTagZoneStart if has("folding") - syn region lexPatTagZoneStart matchgroup=lexPatTag fold start='{' end='}' contained contains=lexPat,lexPatComment - syn region lexPatComment start="\s\+/\*" end="\*/" fold skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell + syn region lexPatTagZoneStart fold matchgroup=lexPatTag start='{$' end='^}' skipnl skipwhite contained contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude + syn region lexPatComment fold start="//" end="$" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell + syn region lexPatComment fold start="/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell else - syn region lexPatTagZoneStart matchgroup=lexPatTag start='{' end='}' contained contains=lexPat,lexPatComment - syn region lexPatComment start="\s\+/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell + syn region lexPatTagZoneStart matchgroup=lexPatTag start='{' end='^}' skipnl skipwhite contained contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatSep,lexPatInclude + syn region lexPatComment start="//" end="$" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell + syn region lexPatComment start="/\*" end="\*/" skipnl contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell endif -syn match lexPatCodeLine "[^{\[].*" contained contains=@lexCcode -syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment -syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine +syn match lexPatEnd "\s*$" skipnl contained +syn match lexPatCodeLine "[^{\[].*" contained contains=@lexCcode,lexCFunctions +syn match lexMorePat "\s*|\s*$" skipnl contained nextgroup=lexPat,lexPatTag,lexPatComment +syn match lexPatSep "\s\+" contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine syn match lexSlashQuote +\(\\\\\)*\\"+ contained +syn match lexSlashBrace +\(\\\\\)*\\\[+ contained if has("folding") - syn region lexPatCode matchgroup=Delimiter start="{" end="}" fold skipnl contained contains=@lexCcode,lexCFunctions + syn region lexPatCode fold matchgroup=Delimiter start="{" end="}" skipnl contained contains=@lexCcode,lexCFunctions else - syn region lexPatCode matchgroup=Delimiter start="{" end="}" skipnl contained contains=@lexCcode,lexCFunctions + syn region lexPatCode matchgroup=Delimiter start="{" end="}" skipnl contained contains=@lexCcode,lexCFunctions endif -" Lex "functions" which may appear in C/C++ code blocks -syn keyword lexCFunctions BEGIN input unput woutput yyleng yylook yytext -syn keyword lexCFunctions ECHO output winput wunput yyless yymore yywrap +" User Code Section with final code block +syn region lexFinalCodeBlock matchgroup=Todo start="^%%" end="\%$" contained contains=@lexCcode -" %% -" lexAbbrevBlock -" %% -" lexPatBlock -" %% -" lexFinalCodeBlock -syn region lexFinalCodeBlock matchgroup=Todo start="%$"me=e-1 end="\%$" contained contains=@lexCcode +" Lex macros which may appear in C/C++ code blocks +syn keyword lexCFunctions BEGIN ECHO REJECT yytext YYText yyleng YYLeng yymore yyless yywrap yylook +syn keyword lexCFunctions yyrestart yyterminate yylineno yycolumno yyin yyout +syn keyword lexCFunctions input unput output winput wunput woutput +syn keyword lexCFunctions yyinput yyunput yyoutput yywinput yywunput yywoutput " <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups -syn cluster cParenGroup add=lex.* +syn cluster cParenGroup add=lex.* syn cluster cDefineGroup add=lex.* syn cluster cPreProcGroup add=lex.* -syn cluster cMultiGroup add=lex.* +syn cluster cMultiGroup add=lex.* " Synchronization syn sync clear syn sync minlines=500 syn sync match lexSyncPat grouphere lexPatBlock "^%[a-zA-Z]" syn sync match lexSyncPat groupthere lexPatBlock "^<$" -syn sync match lexSyncPat groupthere lexPatBlock "^%%$" +syn sync match lexSyncPat groupthere lexPatBlock "^%%" " The default highlighting. if !exists("skip_lex_syntax_inits") hi def link lexAbbrvComment lexPatComment - hi def link lexAbbrvRegExp Macro - hi def link lexAbbrv SpecialChar - hi def link lexBrace lexPat - hi def link lexCFunctions Function - hi def link lexCstruct cStructure - hi def link lexMorePat SpecialChar - hi def link lexOptions PreProc + hi def link lexAbbrvPat lexPat + hi def link lexAbbrv Special + hi def link lexBrace lexPat + hi def link lexCFunctions PreProc + hi def link lexMorePat Special + hi def link lexOptions PreProc + hi def link lexOptionsEq Operator hi def link lexPatComment Comment hi def link lexPat Function - hi def link lexPatString Function - hi def link lexPatTag Special + hi def link lexPatString lexPat + hi def link lexPatAbbrv Special + hi def link lexPatTag Statement hi def link lexPatTagZone lexPatTag hi def link lexSep Delimiter hi def link lexSlashQuote lexPat - hi def link lexStartState Statement + hi def link lexSlashBrace lexPat + hi def link lexStartState lexPatTag + hi def link lexStartStateCmd Special endif let b:current_syntax = "lex" -" vim:ts=10 +" vim:ts=8 diff --git a/runtime/syntax/lhaskell.vim b/runtime/syntax/lhaskell.vim index 0a8a076ff4..cf1f126a3c 100644 --- a/runtime/syntax/lhaskell.vim +++ b/runtime/syntax/lhaskell.vim @@ -1,11 +1,11 @@ " Vim syntax file " Language: Haskell with literate comments, Bird style, -" TeX style and plain text surrounding +" Markdown style, TeX style and plain text surrounding " \begin{code} \end{code} blocks " Maintainer: Haskell Cafe mailinglist <haskell-cafe@haskell.org> " Original Author: Arthur van Leeuwen <arthurvl@cs.uu.nl> -" Last Change: 2010 Apr 11 -" Version: 1.04 +" Last Change: 2020 Feb 25 +" Version: 1.05 " " Thanks to Ian Lynagh for thoughtful comments on initial versions and " for the inspiration for writing this in the first place. @@ -44,8 +44,8 @@ endif " First off, see if we can inherit a user preference for lhs_markup if !exists("b:lhs_markup") if exists("lhs_markup") - if lhs_markup =~ '\<\%(tex\|none\)\>' - let b:lhs_markup = matchstr(lhs_markup,'\<\%(tex\|none\)\>') + if lhs_markup =~ '\<\%(tex\|md\|none\)\>' + let b:lhs_markup = matchstr(lhs_markup,'\<\%(tex\|md\|none\)\>') else echohl WarningMsg | echo "Unknown value of lhs_markup" | echohl None let b:lhs_markup = "unknown" @@ -54,7 +54,7 @@ if !exists("b:lhs_markup") let b:lhs_markup = "unknown" endif else - if b:lhs_markup !~ '\<\%(tex\|none\)\>' + if b:lhs_markup !~ '\<\%(tex\|md\|none\)\>' let b:lhs_markup = "unknown" endif endif @@ -74,6 +74,8 @@ call cursor(1,1) if b:lhs_markup == "unknown" if search('\\documentclass\|\\begin{\(code}\)\@!\|\\\(sub\)*section\|\\chapter|\\part','W') != 0 let b:lhs_markup = "tex" + elseif search('```haskell','W') != 0 + let b:lhs_markup = "md" else let b:lhs_markup = "plain" endif @@ -86,6 +88,10 @@ if b:lhs_markup == "tex" " Tex.vim removes "_" from 'iskeyword', but we need it for Haskell. setlocal isk+=_ syntax cluster lhsTeXContainer contains=tex.*Zone,texAbstract +elseif b:lhs_markup == "md" + runtime! syntax/markdown.vim + unlet b:current_syntax + syntax cluster lhsTeXContainer contains=markdown.* else syntax cluster lhsTeXContainer contains=.* endif @@ -96,9 +102,12 @@ syntax include @haskellTop syntax/haskell.vim syntax region lhsHaskellBirdTrack start="^>" end="\%(^[^>]\)\@=" contains=@haskellTop,lhsBirdTrack containedin=@lhsTeXContainer syntax region lhsHaskellBeginEndBlock start="^\\begin{code}\s*$" matchgroup=NONE end="\%(^\\end{code}.*$\)\@=" contains=@haskellTop,beginCodeBegin containedin=@lhsTeXContainer +syntax region lhsHaskellMDBlock start="^```haskell$" matchgroup=NONE end="^```$" keepend contains=@haskellTop,lhsMarkdownCode containedin=@lhsTeXContainer syntax match lhsBirdTrack "^>" contained +syntax match lhsMarkdownCode "^\(```haskell\|^```\)$" contained + syntax match beginCodeBegin "^\\begin" nextgroup=beginCodeCode contained syntax region beginCodeCode matchgroup=texDelimiter start="{" end="}" @@ -107,6 +116,8 @@ syntax region beginCodeCode matchgroup=texDelimiter start="{" end="}" hi def link lhsBirdTrack Comment +hi def link lhsMarkdownCode Comment + hi def link beginCodeBegin texCmdName hi def link beginCodeCode texSection diff --git a/runtime/syntax/lisp.vim b/runtime/syntax/lisp.vim index 17c54d1a4f..434150ab26 100644 --- a/runtime/syntax/lisp.vim +++ b/runtime/syntax/lisp.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Lisp -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Jul 11, 2019 -" Version: 29 +" Version: 30 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_LISP " " Thanks to F Xavier Noria for a list of 978 Common Lisp symbols taken from HyperSpec diff --git a/runtime/syntax/lout.vim b/runtime/syntax/lout.vim index 30c87fce51..b26a7bcc46 100644 --- a/runtime/syntax/lout.vim +++ b/runtime/syntax/lout.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: Lout -" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> +" Maintainer: Christian V. J. Brüssow <cvjb@cvjb.de> " Last Change: So 12 Feb 2012 15:15:03 CET " Filenames: *.lout,*.lt " URL: http://www.cvjb.de/comp/vim/lout.vim diff --git a/runtime/syntax/m3build.vim b/runtime/syntax/m3build.vim new file mode 100644 index 0000000000..1a378e8175 --- /dev/null +++ b/runtime/syntax/m3build.vim @@ -0,0 +1,177 @@ +" Vim syntax file +" Language: Modula-3 Makefile +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 April 15 + +if exists("b:current_syntax") + finish +endif + +runtime! syntax/m3quake.vim + +" Identifiers +syn match m3buildPredefinedVariable "\<\%(TARGET\|OS_TYPE\|BUILD_DIR\|PKG_USE\|WDROOT\)\>" + +" Build Procedures {{{1 +" Generated from cm3/m3-sys/cm3/src/M3Build.m3 +syn keyword m3buildProcedure HasCBackend + +" (* packages & locations *) +syn keyword m3buildProcedure Pkg +syn keyword m3buildProcedure override +syn keyword m3buildProcedure path_of +syn keyword m3buildProcedure pkg_subdir + +" (* names *) +syn keyword m3buildProcedure program_name +syn keyword m3buildProcedure library_name + +" (* calls in the generated .M3EXPORT files *) +syn keyword m3buildProcedure _define_lib +syn keyword m3buildProcedure _define_pgm +syn keyword m3buildProcedure _import_template +syn keyword m3buildProcedure _import_m3lib +syn keyword m3buildProcedure _import_otherlib +syn keyword m3buildProcedure _map_add_interface +syn keyword m3buildProcedure _map_add_generic_interface +syn keyword m3buildProcedure _map_add_module +syn keyword m3buildProcedure _map_add_generic_module +syn keyword m3buildProcedure _map_add_c +syn keyword m3buildProcedure _map_add_h +syn keyword m3buildProcedure _map_add_s + +" (* compiler options *) +syn keyword m3buildProcedure m3_debug +syn keyword m3buildProcedure m3_optimize +syn keyword m3buildProcedure build_shared +syn keyword m3buildProcedure build_standalone + +" (* derived files *) +syn keyword m3buildProcedure m3_compile_only +syn keyword m3buildProcedure m3_finish_up + +" (* predefined system libraries *) +syn keyword m3buildProcedure import_sys_lib + +" (* options *) +syn keyword m3buildProcedure m3_option +syn keyword m3buildProcedure remove_m3_option + +" (* deleting *) +syn keyword m3buildProcedure deriveds + +" (* imports *) +syn keyword m3buildProcedure include_dir +syn keyword m3buildProcedure include_pkg +syn keyword m3buildProcedure import +syn keyword m3buildProcedure import_version +syn keyword m3buildProcedure import_obj +syn keyword m3buildProcedure import_lib + +" (* objects *) +syn keyword m3buildProcedure pgm_object + +" (* sources *) +syn keyword m3buildProcedure source +syn keyword m3buildProcedure pgm_source +syn keyword m3buildProcedure interface +syn keyword m3buildProcedure Interface +syn keyword m3buildProcedure implementation +syn keyword m3buildProcedure module +syn keyword m3buildProcedure Module +syn keyword m3buildProcedure h_source +syn keyword m3buildProcedure c_source +syn keyword m3buildProcedure s_source +syn keyword m3buildProcedure ship_source + +" (* generics *) +syn keyword m3buildProcedure generic_interface +syn keyword m3buildProcedure Generic_interface +syn keyword m3buildProcedure generic_implementation +syn keyword m3buildProcedure Generic_implementation +syn keyword m3buildProcedure generic_module +syn keyword m3buildProcedure Generic_module +syn keyword m3buildProcedure build_generic_intf +syn keyword m3buildProcedure build_generic_impl + +" (* derived sources *) +syn keyword m3buildProcedure derived_interface +syn keyword m3buildProcedure derived_implementation +syn keyword m3buildProcedure derived_c +syn keyword m3buildProcedure derived_h + +" (* hiding/exporting *) +syn keyword m3buildProcedure hide_interface +syn keyword m3buildProcedure hide_generic_interface +syn keyword m3buildProcedure hide_generic_implementation +syn keyword m3buildProcedure export_interface +syn keyword m3buildProcedure export_generic_interface +syn keyword m3buildProcedure export_generic_implementation + +" (* templates *) +syn keyword m3buildProcedure template + +" (* library building *) +syn keyword m3buildProcedure library +syn keyword m3buildProcedure Library + +" (* program building *) +syn keyword m3buildProcedure program +syn keyword m3buildProcedure Program +syn keyword m3buildProcedure c_program +syn keyword m3buildProcedure C_program + +" (* man pages *) +syn keyword m3buildProcedure manPage +syn keyword m3buildProcedure ManPage + +" (* emacs *) +syn keyword m3buildProcedure Gnuemacs +syn keyword m3buildProcedure CompiledGnuemacs + +" (* "-find" support *) +syn keyword m3buildProcedure find_unit +syn keyword m3buildProcedure enum_units + +" (* export functions *) +syn keyword m3buildProcedure install_sources +syn keyword m3buildProcedure install_derived +syn keyword m3buildProcedure install_derived_link +syn keyword m3buildProcedure install_derived_symbolic_link +syn keyword m3buildProcedure install_derived_hard_link +syn keyword m3buildProcedure install_link_to_derived +syn keyword m3buildProcedure install_symbolic_link_to_derived +syn keyword m3buildProcedure install_hard_link_to_derived +syn keyword m3buildProcedure install_symbolic_link +syn keyword m3buildProcedure install_file + +" (* installation functions *) +syn keyword m3buildProcedure BindExport +syn keyword m3buildProcedure BinExport +syn keyword m3buildProcedure LibdExport +syn keyword m3buildProcedure LibExport +syn keyword m3buildProcedure EmacsdExport +syn keyword m3buildProcedure EmacsExport +syn keyword m3buildProcedure DocdExport +syn keyword m3buildProcedure DocExport +syn keyword m3buildProcedure MandExport +syn keyword m3buildProcedure ManExport +syn keyword m3buildProcedure HtmlExport +syn keyword m3buildProcedure RootExport +syn keyword m3buildProcedure RootdExport + +" (* misc *) +syn keyword m3buildProcedure gen_m3exports +syn keyword m3buildProcedure generate_tfile +syn keyword m3buildProcedure delete_file +syn keyword m3buildProcedure link_file +syn keyword m3buildProcedure symbolic_link_file +syn keyword m3buildProcedure hard_link_file +" }}} + +hi def link m3buildPredefinedVariable Identifier +hi def link m3buildProcedure Function + +let b:current_syntax = "m3build" + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/syntax/m3quake.vim b/runtime/syntax/m3quake.vim new file mode 100644 index 0000000000..c202d90e74 --- /dev/null +++ b/runtime/syntax/m3quake.vim @@ -0,0 +1,74 @@ +" Vim syntax file +" Language: Modula-3 Quake +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Last Change: 2021 April 15 + +if exists("b:current_syntax") + finish +endif + +" Keywords +syn keyword m3quakeKeyword else end foreach if in is local or proc readonly +syn keyword m3quakeKeyword return + +" Builtin procedures {{{ +" Generated from m3-sys/m3quake/src/QMachine.m3 +syn keyword m3quakeProcedure arglist cp_if defined empty equal error escape +syn keyword m3quakeProcedure exec cm3_exec file format include make_dir +syn keyword m3quakeProcedure normalize path stale try_exec try_cm3_exec +syn keyword m3quakeProcedure unlink_file write datetime date datestamp +syn keyword m3quakeProcedure TRACE_INSTR eval_func hostname + +syn keyword m3quakeProcedure pushd popd cd getwd + +syn keyword m3quakeProcedure quake + +syn keyword m3quakeProcedure q_exec q_exec_put q_exec_get + +syn keyword m3quakeProcedure fs_exists fs_readable fs_writable fs_executable +syn keyword m3quakeProcedure fs_isdir fs_isfile fs_contents fs_putfile +syn keyword m3quakeProcedure fs_mkdir fs_touch fs_lsdirs fs_lsfiles fs_rmdir +syn keyword m3quakeProcedure fs_rmfile fs_rmrec fs_cp + +syn keyword m3quakeProcedure pn_valid pn_decompose pn_compose pn_absolute +syn keyword m3quakeProcedure pn_prefix pn_last pn_base pn_lastbase pn_lastext +syn keyword m3quakeProcedure pn_join pn_join2 pn_replace_ext pn_parent +syn keyword m3quakeProcedure pn_current + +syn keyword m3quakeProcedure len + +syn keyword m3quakeProcedure split sub skipl skipr squeeze compress pos +syn keyword m3quakeProcedure tcontains bool encode decode subst_chars +syn keyword m3quakeProcedure del_chars subst subst_env add_prefix add_suffix +" }}} + +" Identifiers +syn match m3quakeEnvVariable "$\h\w\+" + +" Operators +syn match m3quakeOperator "&" +syn match m3quakeOperator "\<\%(contains\|not\|and\|or\)\>" + +" Strings +syn match m3quakeEscape "\\[\\nrtbf"]" contained display +syn region m3quakeString start=+"+ end=+"+ contains=m3quakeEscape + +" Comments +syn keyword m3quakeTodo TODO FIXME XXX contained +syn region m3quakeComment start="%" end="$" contains=m3quakeTodo,@Spell +syn region m3quakeComment start="/\*" end="\*/" contains=m3quakeTodo,@Spell + +" Default highlighting +hi def link m3quakeCommand Statement +hi def link m3quakeComment Comment +hi def link m3quakeEnvVariable Identifier +hi def link m3quakeEscape Special +hi def link m3quakeKeyword Keyword +hi def link m3quakeOperator Operator +hi def link m3quakeProcedure Function +hi def link m3quakeString String +hi def link m3quakeTodo Todo + +let b:current_syntax = "m3quake" + +" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/syntax/make.vim b/runtime/syntax/make.vim index 377e4450d9..d0d7f1523b 100644 --- a/runtime/syntax/make.vim +++ b/runtime/syntax/make.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: Makefile -" Maintainer: Roland Hieber <rohieb+vim-iR0jGdkV@rohieb.name> +" Maintainer: Roland Hieber <rohieb+vim-iR0jGdkV@rohieb.name>, <https://github.com/rohieb> " Previous Maintainer: Claudio Fleiner <claudio@fleiner.com> -" URL: https://github.com/vim/vim/syntax/make.vim -" Last Change: 2019 Apr 02 +" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim +" Last Change: 2020 May 03 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -13,35 +13,27 @@ endif let s:cpo_save = &cpo set cpo&vim - " some special characters syn match makeSpecial "^\s*[@+-]\+" syn match makeNextLine "\\\n\s*" -" some directives -syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)" -syn match makeInclude "^ *[-s]\=include" -syn match makeStatement "^ *vpath" -syn match makeExport "^ *\(export\|unexport\)\>" -syn match makeOverride "^ *override" -hi link makeOverride makeStatement -hi link makeExport makeStatement - " catch unmatched define/endef keywords. endef only matches it is by itself on a line, possibly followed by a commend -syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" contains=makeStatement,makeIdent,makePreCondit,makeDefine +syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" + \ contains=makeStatement,makeIdent,makePreCondit,makeDefine " Microsoft Makefile specials syn case ignore -syn match makeInclude "^!\s*include" +syn match makeInclude "^!\s*include\s.*$" syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>" syn case match " identifiers -syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent,makeSString,makeDString -syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent,makeSString,makeDString +syn region makeIdent start="\$(" skip="\\)\|\\\\" end=")" contains=makeStatement,makeIdent +syn region makeIdent start="\${" skip="\\}\|\\\\" end="}" contains=makeStatement,makeIdent syn match makeIdent "\$\$\w*" syn match makeIdent "\$[^({]" syn match makeIdent "^ *[^:#= \t]*\s*[:+?!*]="me=e-2 +syn match makeIdent "^ *[^:#= \t]*\s*::="me=e-3 syn match makeIdent "^ *[^:#= \t]*\s*="me=e-1 syn match makeIdent "%" @@ -49,21 +41,39 @@ syn match makeIdent "%" syn match makeConfig "@[A-Za-z0-9_]\+@" " make targets -" syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>" -syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource -syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource - -syn region makeTarget transparent matchgroup=makeTarget start="^[~A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands -syn match makeTarget "^[~A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget,makeComment skipnl nextgroup=makeCommands,makeCommandError - -syn region makeSpecTarget transparent matchgroup=makeSpecTarget start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands -syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*::\=\s*$" contains=makeIdent,makeComment skipnl nextgroup=makeCommands,makeCommandError +syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 +syn match makeImplicit "^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 + +syn region makeTarget transparent matchgroup=makeTarget + \ start="^[~A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 + \ end=";"re=e-1,me=e-1 end="[^\\]$" + \ keepend contains=makeIdent,makeSpecTarget,makeNextLine,makeComment,makeDString + \ skipnl nextGroup=makeCommands +syn match makeTarget "^[~A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" + \ contains=makeIdent,makeSpecTarget,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError + +syn region makeSpecTarget transparent matchgroup=makeSpecTarget + \ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1 + \ end="[^\\]$" keepend + \ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands +syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>\s*::\=\s*$" + \ contains=makeIdent,makeComment + \ skipnl nextgroup=makeCommands,makeCommandError syn match makeCommandError "^\s\+\S.*" contained -syn region makeCommands start=";"hs=s+1 start="^\t" end="^[^\t#]"me=e-1,re=e-1 end="^$" contained contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString nextgroup=makeCommandError +syn region makeCommands contained start=";"hs=s+1 start="^\t" + \ end="^[^\t#]"me=e-1,re=e-1 end="^$" + \ contains=makeCmdNextLine,makeSpecial,makeComment,makeIdent,makePreCondit,makeDefine,makeDString,makeSString + \ nextgroup=makeCommandError syn match makeCmdNextLine "\\\n."he=e-1 contained - +" some directives +syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)" +syn match makeInclude "^ *[-s]\=include\s.*$" +syn match makeStatement "^ *vpath" +syn match makeExport "^ *\(export\|unexport\)\>" +syn match makeOverride "^ *override\>" " Statements / Functions (GNU make) syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1 @@ -84,8 +94,8 @@ syn keyword makeTodo TODO FIXME XXX contained syn match makeEscapedChar "\\[^$]" -syn region makeDString start=+\(\\\)\@<!"+ skip=+\\.+ end=+"+ contains=makeIdent -syn region makeSString start=+\(\\\)\@<!'+ skip=+\\.+ end=+'+ contains=makeIdent +syn region makeDString start=+\(\\\)\@<!"+ skip=+\\.+ end=+"+ contained contains=makeIdent +syn region makeSString start=+\(\\\)\@<!'+ skip=+\\.+ end=+'+ contained contains=makeIdent syn region makeBString start=+\(\\\)\@<!`+ skip=+\\.+ end=+`+ contains=makeIdent,makeSString,makeDString,makeNextLine " Syncing @@ -103,6 +113,9 @@ syn sync match makeCommandSync groupthere makeCommands "^[A-Za-z0-9_./$()%-][A-Z hi def link makeNextLine makeSpecial hi def link makeCmdNextLine makeSpecial +hi link makeOverride makeStatement +hi link makeExport makeStatement + hi def link makeSpecTarget Statement if !exists("make_no_commands") hi def link makeCommands Number diff --git a/runtime/syntax/man.vim b/runtime/syntax/man.vim index 7ac02c3f63..a01bd1c0e7 100644 --- a/runtime/syntax/man.vim +++ b/runtime/syntax/man.vim @@ -8,11 +8,11 @@ endif syntax case ignore syntax match manReference display '[^()[:space:]]\+([0-9nx][a-z]*)' syntax match manSectionHeading display '^\S.*$' -syntax match manTitle display '^\%1l.*$' +syntax match manHeader display '^\%1l.*$' syntax match manSubHeading display '^ \{3\}\S.*$' syntax match manOptionDesc display '^\s\+\%(+\|-\)\S\+' -highlight default link manTitle Title +highlight default link manHeader Title highlight default link manSectionHeading Statement highlight default link manOptionDesc Constant highlight default link manReference PreProc diff --git a/runtime/syntax/maple.vim b/runtime/syntax/maple.vim index f14cf79cf4..78f2b4e09e 100644 --- a/runtime/syntax/maple.vim +++ b/runtime/syntax/maple.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Maple V (based on release 4) -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Mar 26, 2019 -" Version: 16 +" Version: 17 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_MAPLE " " Package Function Selection: {{{1 diff --git a/runtime/syntax/masm.vim b/runtime/syntax/masm.vim index bb3c9681bc..c3b2a9bd63 100644 --- a/runtime/syntax/masm.vim +++ b/runtime/syntax/masm.vim @@ -2,8 +2,7 @@ " Language: Microsoft Macro Assembler (80x86) " Orig Author: Rob Brady <robb@datatone.com> " Maintainer: Wu Yongwei <wuyongwei@gmail.com> -" Last Change: $Date: 2013/11/13 11:49:24 $ -" $Revision: 1.48 $ +" Last Change: 2020-05-09 22:55:38 +0800 " Quit when a syntax file was already loaded if exists("b:current_syntax") @@ -13,10 +12,12 @@ endif let s:cpo_save = &cpo set cpo&vim +syn iskeyword @,48-57,_,36,60,62,63,@-@ + syn case ignore -syn match masmIdentifier "[@a-z_$?][@a-z0-9_$?]*" +syn match masmIdentifier "[@a-z_$?][@a-z0-9_$?<>]*" syn match masmLabel "^\s*[@a-z_$?][@a-z0-9_$?]*:"he=e-1 syn match masmDecimal "[-+]\?\d\+[dt]\?" diff --git a/runtime/syntax/meson.vim b/runtime/syntax/meson.vim new file mode 100644 index 0000000000..78de2ab89e --- /dev/null +++ b/runtime/syntax/meson.vim @@ -0,0 +1,165 @@ +" Vim syntax file +" Language: Meson +" License: VIM License +" Maintainer: Nirbheek Chauhan <nirbheek.chauhan@gmail.com> +" Last Change: 2019 Oct 18 +" Credits: Zvezdan Petkovic <zpetkovic@acm.org> +" Neil Schemenauer <nas@meson.ca> +" Dmitry Vasiliev +" +" This version is copied and edited from python.vim +" It's very basic, and doesn't do many things I'd like it to +" For instance, it should show errors for syntax that is valid in +" Python but not in Meson. +" +" Optional highlighting can be controlled using these variables. +" +" let meson_space_error_highlight = 1 +" + +" For version 5.x: Clear all syntax items. +" For version 6.x: Quit when a syntax file was already loaded. +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif + +" We need nocompatible mode in order to continue lines with backslashes. +" Original setting will be restored. +let s:cpo_save = &cpo +set cpo&vim + +" http://mesonbuild.com/Syntax.html +syn keyword mesonConditional elif else if endif +syn keyword mesonRepeat foreach endforeach +syn keyword mesonOperator and not or + +syn match mesonComment "#.*$" contains=mesonTodo,@Spell +syn keyword mesonTodo FIXME NOTE NOTES TODO XXX contained + +" Strings can either be single quoted or triple counted across multiple lines, +" but always with a ' +syn region mesonString + \ start="\z('\)" end="\z1" skip="\\\\\|\\\z1" + \ contains=mesonEscape,@Spell +syn region mesonString + \ start="\z('''\)" end="\z1" keepend + \ contains=mesonEscape,mesonSpaceError,@Spell + +syn match mesonEscape "\\[abfnrtv'\\]" contained +syn match mesonEscape "\\\o\{1,3}" contained +syn match mesonEscape "\\x\x\{2}" contained +syn match mesonEscape "\%(\\u\x\{4}\|\\U\x\{8}\)" contained +" Meson allows case-insensitive Unicode IDs: http://www.unicode.org/charts/ +syn match mesonEscape "\\N{\a\+\%(\s\a\+\)*}" contained +syn match mesonEscape "\\$" + +" Meson only supports integer numbers +" http://mesonbuild.com/Syntax.html#numbers +syn match mesonNumber "\<\d\+\>" + +" booleans +syn keyword mesonConstant false true + +" Built-in functions +syn keyword mesonBuiltin + \ add_global_arguments + \ add_global_link_arguments + \ add_languages + \ add_project_arguments + \ add_project_link_arguments + \ add_test_setup + \ alias_target + \ assert + \ benchmark + \ both_libraries + \ build_machine + \ build_target + \ configuration_data + \ configure_file + \ custom_target + \ declare_dependency + \ dependency + \ disabler + \ environment + \ error + \ executable + \ files + \ find_library + \ find_program + \ generator + \ get_option + \ get_variable + \ gettext + \ host_machine + \ import + \ include_directories + \ install_data + \ install_headers + \ install_man + \ install_subdir + \ is_disabler + \ is_variable + \ jar + \ join_paths + \ library + \ meson + \ message + \ option + \ project + \ run_command + \ run_target + \ set_variable + \ shared_library + \ shared_module + \ static_library + \ subdir + \ subdir_done + \ subproject + \ target_machine + \ test + \ vcs_tag + \ warning + +if exists("meson_space_error_highlight") + " trailing whitespace + syn match mesonSpaceError display excludenl "\s\+$" + " mixed tabs and spaces + syn match mesonSpaceError display " \+\t" + syn match mesonSpaceError display "\t\+ " +endif + +if version >= 508 || !exists("did_meson_syn_inits") + if version <= 508 + let did_meson_syn_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + " The default highlight links. Can be overridden later. + HiLink mesonStatement Statement + HiLink mesonConditional Conditional + HiLink mesonRepeat Repeat + HiLink mesonOperator Operator + HiLink mesonComment Comment + HiLink mesonTodo Todo + HiLink mesonString String + HiLink mesonEscape Special + HiLink mesonNumber Number + HiLink mesonBuiltin Function + HiLink mesonConstant Number + if exists("meson_space_error_highlight") + HiLink mesonSpaceError Error + endif + + delcommand HiLink +endif + +let b:current_syntax = "meson" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim:set sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/messages.vim b/runtime/syntax/messages.vim index c22e4e8d0c..8b970aaa7f 100644 --- a/runtime/syntax/messages.vim +++ b/runtime/syntax/messages.vim @@ -4,6 +4,7 @@ " Latest Revision: 2008-06-29 " Changes: 2008-06-29 support for RFC3339 tuimestamps James Vega " 2016 Jan 19: messagesDate changed by Bram +" 2021 Jan 27: messagesHourRFC3339 changed from #946 if exists("b:current_syntax") finish @@ -26,7 +27,7 @@ syn match messagesDateRFC3339 contained display '\d\{4}-\d\d-\d\d' syn match messagesRFC3339T contained display '\cT' \ nextgroup=messagesHourRFC3339 -syn match messagesHourRFC3339 contained display '\c\d\d:\d\d:\d\d\(\.\d\+\)\=\([+-]\d\d:\d\d\|Z\)' +syn match messagesHourRFC3339 contained display '\c\d\d:\d\d:\d\d\(\.\d\+\)\=\([+-]\d\d:\d\d\|Z\)\s*' \ nextgroup=messagesHost syn match messagesHost contained display '\S*\s*' diff --git a/runtime/syntax/mmix.vim b/runtime/syntax/mmix.vim index 39e209336e..0590767f2d 100644 --- a/runtime/syntax/mmix.vim +++ b/runtime/syntax/mmix.vim @@ -1,6 +1,6 @@ " Vim syntax file " Language: MMIX -" Maintainer: Dirk Hüsken, <huesken@informatik.uni-tuebingen.de> +" Maintainer: Dirk Hüsken, <huesken@informatik.uni-tuebingen.de> " Last Change: 2012 Jun 01 " (Dominique Pelle added @Spell) " Filenames: *.mms diff --git a/runtime/syntax/modula3.vim b/runtime/syntax/modula3.vim index d9b89ca7ce..b179303799 100644 --- a/runtime/syntax/modula3.vim +++ b/runtime/syntax/modula3.vim @@ -1,59 +1,96 @@ " Vim syntax file -" Language: Modula-3 -" Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se> -" Last Change: 2001 May 10 +" Language: Modula-3 +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainer: Timo Pedersen <dat97tpe@ludat.lth.se> +" Last Change: 2021 Apr 08 -" Basic things only... -" Based on the modula 2 syntax file - -" quit when a syntax file was already loaded if exists("b:current_syntax") finish endif -" Modula-3 is case-sensitive -" syn case ignore - " Modula-3 keywords -syn keyword modula3Keyword ABS ADDRES ADR ADRSIZE AND ANY -syn keyword modula3Keyword ARRAY AS BITS BITSIZE BOOLEAN BRANDED BY BYTESIZE -syn keyword modula3Keyword CARDINAL CASE CEILING CHAR CONST DEC DEFINITION -syn keyword modula3Keyword DISPOSE DIV -syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION -syn keyword modula3Keyword EXIT EXPORTS EXTENDED FALSE FINALLY FIRST FLOAT -syn keyword modula3Keyword FLOOR FROM GENERIC IMPORT -syn keyword modula3Keyword IN INC INTEGER ISTYPE LAST LOCK -syn keyword modula3Keyword LONGREAL LOOPHOLE MAX METHOD MIN MOD MUTEX -syn keyword modula3Keyword NARROW NEW NIL NOT NULL NUMBER OF OR ORD RAISE -syn keyword modula3Keyword RAISES READONLY REAL RECORD REF REFANY -syn keyword modula3Keyword RETURN ROOT -syn keyword modula3Keyword ROUND SET SUBARRAY TEXT TRUE TRUNC TRY TYPE -syn keyword modula3Keyword TYPECASE TYPECODE UNSAFE UNTRACED VAL VALUE VAR WITH +syn keyword modula3Keyword ANY ARRAY AS BITS BRANDED BY CASE CONST DEFINITION +syn keyword modula3Keyword EVAL EXIT EXCEPT EXCEPTION EXIT EXPORTS FINALLY +syn keyword modula3Keyword FROM GENERIC IMPORT LOCK METHOD OF RAISE RAISES +syn keyword modula3Keyword READONLY RECORD REF RETURN SET TRY TYPE TYPECASE +syn keyword modula3Keyword UNSAFE VALUE VAR WITH + +syn match modula3keyword "\<UNTRACED\>" " Special keywords, block delimiters etc syn keyword modula3Block PROCEDURE FUNCTION MODULE INTERFACE REPEAT THEN syn keyword modula3Block BEGIN END OBJECT METHODS OVERRIDES RECORD REVEAL syn keyword modula3Block WHILE UNTIL DO TO IF FOR ELSIF ELSE LOOP -" Comments -syn region modula3Comment start="(\*" end="\*)" +" Reserved identifiers +syn keyword modula3Identifier ABS ADR ADRSIZE BITSIZE BYTESIZE CEILING DEC +syn keyword modula3Identifier DISPOSE FIRST FLOAT FLOOR INC ISTYPE LAST +syn keyword modula3Identifier LOOPHOLE MAX MIN NARROW NEW NUMBER ORD ROUND +syn keyword modula3Identifier SUBARRAY TRUNC TYPECODE VAL + +" Predefined types +syn keyword modula3Type ADDRESS BOOLEAN CARDINAL CHAR EXTENDED INTEGER +syn keyword modula3Type LONGCARD LONGINT LONGREAL MUTEX NULL REAL REFANY TEXT +syn keyword modula3Type WIDECHAR + +syn match modula3Type "\<\%(UNTRACED\s\+\)\=ROOT\>" + +" Operators +syn keyword modulaOperator DIV MOD IN AND OR NOT + +if exists("modula3_operators") + syn match modula3Operator "\^" + syn match modula3Operator "+\|-\|\*\|/\|&" + " TODO: need to exclude = in procedure definitions + syn match modula3Operator "<=\|<\|>=\|>\|:\@<!=\|#" +endif + +" Booleans +syn keyword modula3Boolean TRUE FALSE + +" Nil +syn keyword modula3Nil NIL + +" Integers +syn match modula3Integer "\<\d\+L\=\>" +syn match modula3Integer "\<\d\d\=_\x\+L\=\>" + +" Reals +syn match modula3Real "\c\<\d\+\.\d\+\%([EDX][+-]\=\d\+\)\=\>" + +" String escape sequences +syn match modula3Escape "\\['"ntrf]" contained display +syn match modula3Escape "\\\o\{3}" contained display +syn match modula3Escape "\\\\" contained display + +" Characters +syn match modula3Character "'\%([^']\|\\.\|\\\o\{3}\)'" contains=modula3Escape " Strings -syn region modula3String start=+"+ end=+"+ -syn region modula3String start=+'+ end=+'+ +syn region modula3String start=+"+ end=+"+ contains=modula3Escape -" Define the default highlighting. -" Only when an item doesn't have highlighting yet +" Pragmas +syn region modula3Pragma start="<\*" end="\*>" -" The default methods for highlighting. Can be overridden later -hi def link modula3Keyword Statement -hi def link modula3Block PreProc -hi def link modula3Comment Comment -hi def link modula3String String +" Comments +syn region modula3Comment start="(\*" end="\*)" contains=modula3Comment,@Spell +" Default highlighting +hi def link modula3Block Statement +hi def link modula3Boolean Boolean +hi def link modula3Character Character +hi def link modula3Comment Comment +hi def link modula3Escape Special +hi def link modula3Identifier Keyword +hi def link modula3Integer Number +hi def link modula3Keyword Statement +hi def link modula3Nil Constant +hi def link modula3Operator Operator +hi def link modula3Pragma PreProc +hi def link modula3Real Float +hi def link modula3String String +hi def link modula3Type Type let b:current_syntax = "modula3" -"I prefer to use this... -"set ai -"vim: ts=8 +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/moo.vim b/runtime/syntax/moo.vim index 617058f8e3..6f2dd59e84 100644 --- a/runtime/syntax/moo.vim +++ b/runtime/syntax/moo.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: MOO " Maintainer: Timo Frenay <timo@frenay.net> -" Last Change: 2001 Oct 06 +" Last Change: 2020 Oct 19 " Note: Requires Vim 6.0 or above " quit when a syntax file was already loaded @@ -95,7 +95,7 @@ if exists("moo_unknown_builtin_functions") syn keyword mooKnownBuiltinFunction abs acos add_property add_verb asin atan binary_hash boot_player buffered_output_length callers caller_perms call_function ceil children chparent clear_property connected_players connected_seconds connection_name connection_option connection_options cos cosh create crypt ctime db_disk_size decode_binary delete_property delete_verb disassemble dump_database encode_binary equal eval exp floatstr floor flush_input force_input function_info idle_seconds index is_clear_property is_member is_player kill_task length listappend listdelete listen listeners listinsert listset log log10 match max max_object memory_usage min move notify object_bytes open_network_connection output_delimiters parent pass players properties property_info queued_tasks queue_info raise random read recycle renumber reset_max_object resume rindex rmatch seconds_left server_log server_version setadd setremove set_connection_option set_player_flag set_property_info set_task_perms set_verb_args set_verb_code set_verb_info shutdown sin sinh sqrt strcmp string_hash strsub substitute suspend tan tanh task_id task_stack ticks_left time tofloat toint toliteral tonum toobj tostr trunc typeof unlisten valid value_bytes value_hash verbs verb_args verb_code verb_info contained endif -" Enclosed expressions +" Enclosed expressions syn match mooUnenclosedError display ~[')\]|}]~ syn match mooParenthesesError display ~[';\]|}]~ contained syn region mooParentheses start=~(~ end=~)~ transparent contains=@mooEnclosedContents,mooParenthesesError diff --git a/runtime/syntax/named.vim b/runtime/syntax/named.vim index 210d387ece..292d1b2bbf 100644 --- a/runtime/syntax/named.vim +++ b/runtime/syntax/named.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: BIND configuration file " Maintainer: Nick Hibma <nick@van-laarhoven.org> -" Last Change: 2007-01-30 +" Last Change: 2019 Oct 08 " Filenames: named.conf, rndc.conf " Location: http://www.van-laarhoven.org/vim/syntax/named.vim " @@ -54,7 +54,7 @@ syn match namedIntIdent contained /"\=\k\+"\=/ nextgroup=namedIntSection skipwhi syn region namedSection contained start=+{+ end=+};+ contains=namedSection,namedIntKeyword " --- IntSection: section that does not contain other sections -syn region namedIntSection contained start=+{+ end=+}+ contains=namedIntKeyword,namedError +syn region namedIntSection contained start=+{+ end=+}+ contains=namedIntKeyword,namedError,namedComment " --- IntKeyword: keywords contained within `{ ... }' sections only " + these keywords are contained within `key' and `acl' sections diff --git a/runtime/syntax/nasm.vim b/runtime/syntax/nasm.vim index 4f70a0f334..d763033225 100644 --- a/runtime/syntax/nasm.vim +++ b/runtime/syntax/nasm.vim @@ -3,7 +3,7 @@ " Maintainer: Andrii Sokolov <andriy145@gmail.com> " Original Author: Manuel M.H. Stol <Manuel.Stol@allieddata.nl> " Former Maintainer: Manuel M.H. Stol <Manuel.Stol@allieddata.nl> -" Contributors: Leonard König <leonard.r.koenig@gmail.com> (C string highlighting) +" Contributors: Leonard König <leonard.r.koenig@gmail.com> (C string highlighting), Peter Stanhope <dev.rptr@gmail.com> (Add missing 64-bit mode registers) " Last Change: 2017 Jan 23 " NASM Home: http://www.nasm.us/ @@ -240,7 +240,8 @@ syn cluster nasmGrpPreProcs contains=nasmMacroDef,@nasmGrpInMacros,@nasmGrpPreCo syn match nasmGen08Register "\<[A-D][HL]\>" syn match nasmGen16Register "\<\([A-D]X\|[DS]I\|[BS]P\)\>" syn match nasmGen32Register "\<E\([A-D]X\|[DS]I\|[BS]P\)\>" -syn match nasmGen64Register "\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>" +syn match nasmGen64Register "\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WDB]\|1[0-5][WDB]\)\>" +syn match nasmExtRegister "\<\([SB]PL\|[SD]IL\)\>" syn match nasmSegRegister "\<[C-GS]S\>" syn match nasmSpcRegister "\<E\=IP\>" syn match nasmFpuRegister "\<ST\o\>" diff --git a/runtime/syntax/neomuttrc.vim b/runtime/syntax/neomuttrc.vim index 7ff89879d9..bd73de49ea 100644 --- a/runtime/syntax/neomuttrc.vim +++ b/runtime/syntax/neomuttrc.vim @@ -1,10 +1,11 @@ " Vim syntax file " Language: NeoMutt setup files -" Maintainer: Guillaume Brogi <gui-gui@netcourrier.com> -" Last Change: 2018-03-25 +" Maintainer: Richard Russon <rich@flatcap.org> +" Previous Maintainer: Guillaume Brogi <gui-gui@netcourrier.com> +" Last Change: 2020-06-21 " Original version based on syntax/muttrc.vim -" This file covers NeoMutt 2018-03-23 +" This file covers NeoMutt 2020-06-19 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -18,23 +19,22 @@ set cpo&vim setlocal isk=@,48-57,_,- " handling optional variables -syntax match muttrcComment "^# .*$" contains=@Spell -syntax match muttrcComment "^#[^ ].*$" -syntax match muttrcComment "^#$" -syntax match muttrcComment "[^\\]#.*$"lc=1 +syntax match muttrcComment "^# .*$" contains=@Spell +syntax match muttrcComment "^#[^ ].*$" +syntax match muttrcComment "^#$" +syntax match muttrcComment "[^\\]#.*$"lc=1 " Escape sequences (back-tick and pipe goes here too) -syntax match muttrcEscape +\\[#tnr"'Cc ]+ -syntax match muttrcEscape +[`|]+ -syntax match muttrcEscape +\\$+ +syntax match muttrcEscape +\\[#tnr"'Cc ]+ +syntax match muttrcEscape +[`|]+ +syntax match muttrcEscape +\\$+ " The variables takes the following arguments -"syn match muttrcString contained "=\s*[^ #"'`]\+"lc=1 contains=muttrcEscape -syntax region muttrcString contained keepend start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcCommand,muttrcAction,muttrcShellString -syntax region muttrcString contained keepend start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcCommand,muttrcAction +syntax region muttrcString contained keepend start=+"+ms=e skip=+\\"+ end=+"+ contains=muttrcEscape,muttrcCommand,muttrcAction,muttrcShellString +syntax region muttrcString contained keepend start=+'+ms=e skip=+\\'+ end=+'+ contains=muttrcEscape,muttrcCommand,muttrcAction syntax match muttrcStringNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcString,muttrcStringNL -syntax region muttrcShellString matchgroup=muttrcEscape keepend start=+`+ skip=+\\`+ end=+`+ contains=muttrcVarStr,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcCommand,muttrcVarDeprecatedStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad +syntax region muttrcShellString matchgroup=muttrcEscape keepend start=+`+ skip=+\\`+ end=+`+ contains=muttrcVarStr,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcCommand syntax match muttrcRXChars contained /[^\\][][.*?+]\+/hs=s+1 syntax match muttrcRXChars contained /[][|()][.*?+]*/ @@ -44,54 +44,53 @@ syntax match muttrcRXChars contained /\\/ " Why does muttrcRXString2 work with one \ when muttrcRXString requires two? syntax region muttrcRXString contained skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXChars syntax region muttrcRXString contained skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXChars -syntax region muttrcRXString contained skipwhite start=+[^ "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXChars +syntax region muttrcRXString contained skipwhite start=+[^ "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXChars " For some reason, skip refuses to match backslashes here... syntax region muttrcRXString contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXChars syntax region muttrcRXString contained matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXChars syntax region muttrcRXString2 contained skipwhite start=+'+ skip=+\'+ end=+'+ contains=muttrcRXChars syntax region muttrcRXString2 contained skipwhite start=+"+ skip=+\"+ end=+"+ contains=muttrcRXChars -" these must be kept synchronized with muttrcRXString, but are intended for -" muttrcRXHooks +" these must be kept synchronized with muttrcRXString, but are intended for muttrcRXHooks syntax region muttrcRXHookString contained keepend skipwhite start=+'+ skip=+\\'+ end=+'+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL syntax region muttrcRXHookString contained keepend skipwhite start=+"+ skip=+\\"+ end=+"+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL -syntax region muttrcRXHookString contained keepend skipwhite start=+[^ "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL +syntax region muttrcRXHookString contained keepend skipwhite start=+[^ "'^]+ skip=+\\\s+ end=+\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL syntax region muttrcRXHookString contained keepend skipwhite start=+\^+ end=+[^\\]\s+re=e-1 contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL syntax region muttrcRXHookString contained keepend matchgroup=muttrcRXChars skipwhite start=+\^+ end=+$\s+ contains=muttrcRXString nextgroup=muttrcString,muttrcStringNL -syntax match muttrcRXHookStringNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcRXHookString,muttrcRXHookStringNL +syntax match muttrcRXHookStringNL contained skipwhite skipnl "\s*\\$" nextgroup=muttrcRXHookString,muttrcRXHookStringNL " these are exclusively for args lists (e.g. -rx pat pat pat ...) -syntax region muttrcRXPat contained keepend skipwhite start=+'+ skip=+\\'+ end=+'\s*+ contains=muttrcRXString nextgroup=muttrcRXPat -syntax region muttrcRXPat contained keepend skipwhite start=+"+ skip=+\\"+ end=+"\s*+ contains=muttrcRXString nextgroup=muttrcRXPat -syntax match muttrcRXPat contained /[^-'"#!]\S\+/ skipwhite contains=muttrcRXChars nextgroup=muttrcRXPat -syntax match muttrcRXDef contained "-rx\s\+" skipwhite nextgroup=muttrcRXPat - -syntax match muttrcSpecial +\(['"]\)!\1+ - -syntax match muttrcSetStrAssignment contained skipwhite /=\s*\%(\\\?\$\)\?[0-9A-Za-z_-]\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcVariable,muttrcEscapedVariable -syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*"+hs=s+1 end=+"+ skip=+\\"+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcString -syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*'+hs=s+1 end=+'+ skip=+\\'+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcString -syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcVariable,muttrcEscapedVariable -syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetBoolAssignment contained skipwhite /=\s*"\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetBoolAssignment contained skipwhite /=\s*'\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcVariable,muttrcEscapedVariable -syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\%(ask-\)\?\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetQuadAssignment contained skipwhite /=\s*"\%(ask-\)\?\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetQuadAssignment contained skipwhite /=\s*'\%(ask-\)\?\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetNumAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr contains=muttrcVariable,muttrcEscapedVariable -syntax match muttrcSetNumAssignment contained skipwhite /=\s*\d\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetNumAssignment contained skipwhite /=\s*"\d\+"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax match muttrcSetNumAssignment contained skipwhite /=\s*'\d\+'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax region muttrcRXPat contained keepend skipwhite start=+'+ skip=+\\'+ end=+'\s*+ contains=muttrcRXString nextgroup=muttrcRXPat +syntax region muttrcRXPat contained keepend skipwhite start=+"+ skip=+\\"+ end=+"\s*+ contains=muttrcRXString nextgroup=muttrcRXPat +syntax match muttrcRXPat contained /[^-'"#!]\S\+/ skipwhite contains=muttrcRXChars nextgroup=muttrcRXPat +syntax match muttrcRXDef contained "-rx\s\+" skipwhite nextgroup=muttrcRXPat + +syntax match muttrcSpecial +\(['"]\)!\1+ + +syntax match muttrcSetStrAssignment contained skipwhite /=\s*\%(\\\?\$\)\?[0-9A-Za-z_-]\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable +syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*"+hs=s+1 end=+"+ skip=+\\"+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcString +syntax region muttrcSetStrAssignment contained skipwhite keepend start=+=\s*'+hs=s+1 end=+'+ skip=+\\'+ nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcString +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*"\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetBoolAssignment contained skipwhite /=\s*'\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*\%(ask-\)\?\%(yes\|no\)/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*"\%(ask-\)\?\%(yes\|no\)"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetQuadAssignment contained skipwhite /=\s*'\%(ask-\)\?\%(yes\|no\)'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetNumAssignment contained skipwhite /=\s*\\\?\$\w\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr contains=muttrcVariable,muttrcEscapedVariable +syntax match muttrcSetNumAssignment contained skipwhite /=\s*\d\+/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetNumAssignment contained skipwhite /=\s*"\d\+"/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax match muttrcSetNumAssignment contained skipwhite /=\s*'\d\+'/hs=s+1 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr " Now catch some email addresses and headers (purified version from mail.vim) -syntax match muttrcEmail "[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+" -syntax match muttrcHeader "\<\c\%(From\|To\|C[Cc]\|B[Cc][Cc]\|Reply-To\|Subject\|Return-Path\|Received\|Date\|Replied\|Attach\)\>:\=" +syntax match muttrcEmail "[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+" +syntax match muttrcHeader "\<\c\%(From\|To\|C[Cc]\|B[Cc][Cc]\|Reply-To\|Subject\|Return-Path\|Received\|Date\|Replied\|Attach\)\>:\=" syntax match muttrcKeySpecial contained +\%(\\[Cc'"]\|\^\|\\[01]\d\{2}\)+ -syntax match muttrcKey contained "\S\+" contains=muttrcKeySpecial,muttrcKeyName -syntax region muttrcKey contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=muttrcKeySpecial,muttrcKeyName -syntax region muttrcKey contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=muttrcKeySpecial,muttrcKeyName +syntax match muttrcKey contained "\S\+" contains=muttrcKeySpecial,muttrcKeyName +syntax region muttrcKey contained start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=muttrcKeySpecial,muttrcKeyName +syntax region muttrcKey contained start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=muttrcKeySpecial,muttrcKeyName syntax match muttrcKeyName contained "\\[trne]" syntax match muttrcKeyName contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|Next\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>" syntax match muttrcKeyName contained "\c<F\d\+>" @@ -102,90 +101,84 @@ syntax match muttrcStrftimeEscapes contained /%[AaBbCcDdeFGgHhIjklMmnpRrSsTtUuVv syntax match muttrcStrftimeEscapes contained /%E[cCxXyY]/ syntax match muttrcStrftimeEscapes contained /%O[BdeHImMSuUVwWy]/ -syntax region muttrcIndexFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcIndexFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcGroupIndexFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcGroupIndexFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcSidebarFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcSidebarFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcQueryFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcAliasFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAliasFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcAliasFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAliasFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcAttachFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcAttachFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcComposeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcComposeFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcComposeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcComposeFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcFolderFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcFolderFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcMixFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcMixFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPCmdFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPCmdFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcStatusFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcStatusFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPGetKeysFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPGetKeysFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcPGPGetKeysFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPGetKeysFormatEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcSmimeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcSmimeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcStrftimeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -syntax region muttrcStrftimeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax region muttrcAliasFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAliasFormatEscapes,muttrcAliasFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcAliasFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAliasFormatEscapes,muttrcAliasFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcAttachFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcAttachFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcAttachFormatEscapes,muttrcAttachFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcComposeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcComposeFormatEscapes,muttrcComposeFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcComposeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcComposeFormatEscapes,muttrcComposeFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcFolderFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcFolderFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcFolderFormatEscapes,muttrcFolderFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcGroupIndexFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcGroupIndexFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcGroupIndexFormatEscapes,muttrcGroupIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcIndexFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcIndexFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcIndexFormatEscapes,muttrcIndexFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcMixFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcMixFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcMixFormatEscapes,muttrcMixFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcPGPCmdFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcPGPCmdFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPCmdFormatEscapes,muttrcPGPCmdFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcPGPFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcPGPFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPGPFormatEscapes,muttrcPGPFormatConditionals,muttrcFormatErrors,muttrcPGPTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcQueryFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcQueryFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcQueryFormatEscapes,muttrcQueryFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcSidebarFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcSidebarFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSidebarFormatEscapes,muttrcSidebarFormatConditionals,muttrcFormatErrors,muttrcTimeEscapes nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcSmimeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcSmimeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcSmimeFormatEscapes,muttrcSmimeFormatConditionals,muttrcVariable,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcStatusFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcStatusFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStatusFormatEscapes,muttrcStatusFormatConditionals,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcStrftimeFormatStr contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax region muttrcStrftimeFormatStr contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcStrftimeEscapes,muttrcFormatErrors nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr " Format escapes and conditionals syntax match muttrcFormatConditionals2 contained /[^?]*?/ -function! s:escapesConditionals(baseName, sequence, alignment, secondary) +function! s:escapesConditionals(baseName, sequence, padding, conditional) exec 'syntax match muttrc' . a:baseName . 'Escapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?\%(' . a:sequence . '\|%\)/' - if a:alignment + if a:padding exec 'syntax match muttrc' . a:baseName . 'Escapes contained /%[>|*]./' endif - if a:secondary + if a:conditional exec 'syntax match muttrc' . a:baseName . 'Conditionals contained /%?\%(' . a:sequence . '\)?/ nextgroup=muttrcFormatConditionals2' else exec 'syntax match muttrc' . a:baseName . 'Conditionals contained /%?\%(' . a:sequence . '\)?/' endif endfunction -" CHECKED 2018-04-18 -" Ref: index_format_str() in hdrline.c -call s:escapesConditionals('IndexFormat', '[AaBbCcDdEeFfgHIiJKLlMmNnOPqRrSsTtuvWXxYyZz(<[{]\|G[a-zA-Z]\+', 1, 1) -" Ref: alias_format_str() in addrbook.c -syntax match muttrcAliasFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[afnrt%]/ -" Ref: group_index_format_str() in browser.c -call s:escapesConditionals('GroupIndexFormat', '[CdfMNns]', 1, 1) -" Ref: sidebar_format_str() in sidebar.c -call s:escapesConditionals('SidebarFormat', '[BdFLNnSt!]', 1, 1) -" Ref: query_format_str() in query.c -call s:escapesConditionals('QueryFormat', '[acent]', 0, 1) +" CHECKED 2020-06-21 +" Ref: alias_format_str() in alias/dlgalias.c +call s:escapesConditionals('AliasFormat', '[acfnrt]', 1, 0) " Ref: attach_format_str() in recvattach.c call s:escapesConditionals('AttachFormat', '[CcDdeFfIMmnQsTtuX]', 1, 1) " Ref: compose_format_str() in compose.c -syntax match muttrcComposeFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[ahlv%]/ -syntax match muttrcComposeFormatEscapes contained /%[>|*]./ +call s:escapesConditionals('ComposeFormat', '[ahlv]', 1, 1) " Ref: folder_format_str() in browser.c -call s:escapesConditionals('FolderFormat', '[CDdFfglmNnstu]', 1, 0) +call s:escapesConditionals('FolderFormat', '[CDdFfgilmNnstu]', 1, 0) +" Ref: group_index_format_str() in browser.c +call s:escapesConditionals('GroupIndexFormat', '[CdfMNns]', 1, 1) +" Ref: index_format_str() in hdrline.c +call s:escapesConditionals('IndexFormat', '[AaBbCDdEefgHIiJKLlMmNnOPqRrSsTtuvWXxYyZ(<[{]\|@\i\+@\|G[a-zA-Z]\+\|Fp\=\|z[cst]\|cr\=', 1, 1) " Ref: mix_format_str() in remailer.c -call s:escapesConditionals('MixFormat', '[acns]', 0, 0) -" Ref: status_format_str() in status.c -call s:escapesConditionals('StatusFormat', '[bdFfhLlMmnoPpRrSstuVv]', 1, 1) -" Ref: fmt_smime_command() in ncrypt/smime.c -call s:escapesConditionals('SmimeFormat', '[aCcdfiks]', 0, 1) +call s:escapesConditionals('MixFormat', '[acns]', 1, 0) +" Ref: pgp_command_format_str() in ncrypt/pgpinvoke.c +call s:escapesConditionals('PGPCmdFormat', '[afprs]', 0, 1) " Ref: crypt_format_str() in ncrypt/crypt_gpgme.c -" Ref: pgp_entry_fmt() in ncrypt/pgpkey.c +" Ref: pgp_entry_format_str() in ncrypt/pgpkey.c " Note: crypt_format_str() supports 'p', but pgp_entry_fmt() does not -call s:escapesConditionals('PGPFormat', '[acfklnptu[]', 0, 0) -" Ref: fmt_pgp_command() ncrypt/pgpinvoke.c -call s:escapesConditionals('PGPCmdFormat', '[afprs]', 0, 1) - -" This matches the documentation, but directly contradicts the code -" (according to the code, this should be identical to the muttrcPGPCmdFormatEscapes -syntax match muttrcPGPGetKeysFormatEscapes contained /%\%(\%(-\?[0-9]\+\)\?\%(\.[0-9]\+\)\?\)\?[:_]\?[acfklntu[%]/ +call s:escapesConditionals('PGPFormat', '[AaCcFfKkLlnptu[]', 0, 0) +" Ref: query_format_str() in alias/dlgquery.c +call s:escapesConditionals('QueryFormat', '[acent]', 1, 1) +" Ref: sidebar_format_str() in sidebar.c +call s:escapesConditionals('SidebarFormat', '[!BDdFLNnorStZ]', 1, 1) +" Ref: smime_command_format_str() in ncrypt/smime.c +call s:escapesConditionals('SmimeFormat', '[aCcdfiks]', 0, 1) +" Ref: status_format_str() in status.c +call s:escapesConditionals('StatusFormat', '[bDdFfhLlMmnoPpRrSstuVv]', 1, 1) -syntax region muttrcTimeEscapes contained start=+%{+ end=+}+ contains=muttrcStrftimeEscapes -syntax region muttrcTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes -syntax region muttrcTimeEscapes contained start=+%(+ end=+)+ contains=muttrcStrftimeEscapes -syntax region muttrcTimeEscapes contained start=+%<+ end=+>+ contains=muttrcStrftimeEscapes syntax region muttrcPGPTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes +syntax region muttrcTimeEscapes contained start=+%(+ end=+)+ contains=muttrcStrftimeEscapes +syntax region muttrcTimeEscapes contained start=+%<+ end=+>+ contains=muttrcStrftimeEscapes +syntax region muttrcTimeEscapes contained start=+%\[+ end=+\]+ contains=muttrcStrftimeEscapes +syntax region muttrcTimeEscapes contained start=+%{+ end=+}+ contains=muttrcStrftimeEscapes syntax match muttrcVarEqualsAliasFmt contained skipwhite "=" nextgroup=muttrcAliasFormatStr syntax match muttrcVarEqualsAttachFmt contained skipwhite "=" nextgroup=muttrcAttachFormatStr @@ -196,29 +189,20 @@ syntax match muttrcVarEqualsIdxFmt contained skipwhite "=" nextgroup=mutt syntax match muttrcVarEqualsMixFmt contained skipwhite "=" nextgroup=muttrcMixFormatStr syntax match muttrcVarEqualsPGPCmdFmt contained skipwhite "=" nextgroup=muttrcPGPCmdFormatStr syntax match muttrcVarEqualsPGPFmt contained skipwhite "=" nextgroup=muttrcPGPFormatStr -syntax match muttrcVarEqualsPGPGetKeysFmt contained skipwhite "=" nextgroup=muttrcPGPGetKeysFormatStr syntax match muttrcVarEqualsQueryFmt contained skipwhite "=" nextgroup=muttrcQueryFormatStr syntax match muttrcVarEqualsSdbFmt contained skipwhite "=" nextgroup=muttrcSidebarFormatStr syntax match muttrcVarEqualsSmimeFmt contained skipwhite "=" nextgroup=muttrcSmimeFormatStr syntax match muttrcVarEqualsStatusFmt contained skipwhite "=" nextgroup=muttrcStatusFormatStr syntax match muttrcVarEqualsStrftimeFmt contained skipwhite "=" nextgroup=muttrcStrftimeFormatStr -syntax match muttrcVPrefix contained /[?&]/ nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax match muttrcVPrefix contained /[?&]/ nextgroup=muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr -" CHECKED 2018-04-18 -" List of the different screens in mutt +" CHECKED 2020-06-21 +" List of the different screens in mutt (see Menus in keymap.c) syntax keyword muttrcMenu contained alias attach browser compose editor generic index key_select_pgp key_select_smime mix pager pgp postpone query smime syntax match muttrcMenuList "\S\+" contained contains=muttrcMenu syntax match muttrcMenuCommas /,/ contained -" CHECKED 2018-04-18 -" List of hooks in Commands in init.h -syntax keyword muttrcHooks contained skipwhite - \ account-hook append-hook close-hook crypt-hook fcc-hook fcc-save-hook - \ folder-hook iconv-hook mbox-hook message-hook open-hook pgp-hook - \ reply-hook save-hook send-hook send2-hook -syntax keyword muttrcHooks skipwhite shutdown-hook startup-hook timeout-hook nextgroup=muttrcCommand - syntax region muttrcSpamPattern contained skipwhite keepend start=+'+ skip=+\\'+ end=+'+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL syntax region muttrcSpamPattern contained skipwhite keepend start=+"+ skip=+\\"+ end=+"+ contains=muttrcPattern nextgroup=muttrcString,muttrcStringNL @@ -232,17 +216,17 @@ syntax match muttrcAttachmentsLine "^\s*\%(un\)\?attachments\s\+" skipwhite next syntax match muttrcUnHighlightSpace contained "\%(\s\+\|\\$\)" syntax keyword muttrcAsterisk contained * + syntax keyword muttrcListsKeyword lists skipwhite nextgroup=muttrcGroupDef,muttrcComment syntax keyword muttrcListsKeyword unlists skipwhite nextgroup=muttrcAsterisk,muttrcComment -syntax keyword muttrcSubscribeKeyword subscribe nextgroup=muttrcGroupDef,muttrcComment -syntax keyword muttrcSubscribeKeyword unsubscribe nextgroup=muttrcAsterisk,muttrcComment +syntax keyword muttrcSubscribeKeyword subscribe skipwhite nextgroup=muttrcGroupDef,muttrcComment +syntax keyword muttrcSubscribeKeyword unsubscribe skipwhite nextgroup=muttrcAsterisk,muttrcComment syntax keyword muttrcAlternateKeyword contained alternates unalternates syntax region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment -" muttrcVariable includes a prefix because partial strings are considered -" valid. +" muttrcVariable includes a prefix because partial strings are considered valid. syntax match muttrcVariable contained "\\\@<![a-zA-Z_-]*\$[a-zA-Z_-]\+" contains=muttrcVariableInner syntax match muttrcVariableInner contained "\$[a-zA-Z_-]\+" syntax match muttrcEscapedVariable contained "\\\$[a-zA-Z_-]\+" @@ -250,15 +234,19 @@ syntax match muttrcEscapedVariable contained "\\\$[a-zA-Z_-]\+" syntax match muttrcBadAction contained "[^<>]\+" contains=muttrcEmail syntax match muttrcAction contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName +" CHECKED 2020-06-21 " First, functions that take regular expressions: syntax match muttrcRXHookNot contained /!\s*/ skipwhite nextgroup=muttrcRXHookString,muttrcRXHookStringNL syntax match muttrcRXHooks /\<\%(account\|append\|close\|crypt\|folder\|mbox\|open\|pgp\)-hook\>/ skipwhite nextgroup=muttrcRXHookNot,muttrcRXHookString,muttrcRXHookStringNL " Now, functions that take patterns syntax match muttrcPatHookNot contained /!\s*/ skipwhite nextgroup=muttrcPattern -syntax match muttrcPatHooks /\<\%(charset\|iconv\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcPattern +syntax match muttrcPatHooks /\<\%(charset\|iconv\|index-format\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcPattern syntax match muttrcPatHooks /\<\%(message\|reply\|send\|send2\|save\|fcc\|fcc-save\)-hook\>/ skipwhite nextgroup=muttrcPatHookNot,muttrcOptPattern +" Global hooks that take a command +syntax keyword muttrcHooks skipwhite shutdown-hook startup-hook timeout-hook nextgroup=muttrcCommand + syntax match muttrcBindFunction contained /\S\+\>/ skipwhite contains=muttrcFunction syntax match muttrcBindFunctionNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcBindFunction,muttrcBindFunctionNL syntax match muttrcBindKey contained /\S\+/ skipwhite contains=muttrcKey nextgroup=muttrcBindFunction,muttrcBindFunctionNL @@ -271,8 +259,8 @@ syntax region muttrcMacroDescr contained keepend skipwhite start=+'+ms=e skip=+\ syntax region muttrcMacroDescr contained keepend skipwhite start=+"+ms=e skip=+\\"+ end=+"+me=s syntax match muttrcMacroDescrNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroDescr,muttrcMacroDescrNL syntax region muttrcMacroBody contained skipwhite start="\S" skip='\\ \|\\$' end=' \|$' contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcCommand,muttrcAction nextgroup=muttrcMacroDescr,muttrcMacroDescrNL -syntax region muttrcMacroBody matchgroup=Type contained skipwhite start=+'+ms=e skip=+\\'+ end=+'\|\%(\%(\\\\\)\@<!$\)+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcSpam,muttrcNoSpam,muttrcCommand,muttrcAction,muttrcVariable nextgroup=muttrcMacroDescr,muttrcMacroDescrNL -syntax region muttrcMacroBody matchgroup=Type contained skipwhite start=+"+ms=e skip=+\\"+ end=+"\|\%(\%(\\\\\)\@<!$\)+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcSpam,muttrcNoSpam,muttrcCommand,muttrcAction,muttrcVariable nextgroup=muttrcMacroDescr,muttrcMacroDescrNL +syntax region muttrcMacroBody matchgroup=Type contained skipwhite start=+'+ms=e skip=+\\'+ end=+'\|\%(\%(\\\\\)\@<!$\)+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcSpam,muttrcNoSpam,muttrcCommand,muttrcAction,muttrcVariable nextgroup=muttrcMacroDescr,muttrcMacroDescrNL +syntax region muttrcMacroBody matchgroup=Type contained skipwhite start=+"+ms=e skip=+\\"+ end=+"\|\%(\%(\\\\\)\@<!$\)+me=s contains=muttrcEscape,muttrcSet,muttrcUnset,muttrcReset,muttrcToggle,muttrcSpam,muttrcNoSpam,muttrcCommand,muttrcAction,muttrcVariable nextgroup=muttrcMacroDescr,muttrcMacroDescrNL syntax match muttrcMacroBodyNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroBody,muttrcMacroBodyNL syntax match muttrcMacroKey contained /\S\+/ skipwhite contains=muttrcKey nextgroup=muttrcMacroBody,muttrcMacroBodyNL syntax match muttrcMacroKeyNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcMacroKey,muttrcMacroKeyNL @@ -282,7 +270,7 @@ syntax match muttrcMacroMenuListNL contained /\s*\\$/ skipwhite skipnl nextgroup syntax match muttrcAddrContent contained "[a-zA-Z0-9._-]\+@[a-zA-Z0-9./-]\+\s*" skipwhite contains=muttrcEmail nextgroup=muttrcAddrContent syntax region muttrcAddrContent contained start=+'+ end=+'\s*+ skip=+\\'+ skipwhite contains=muttrcEmail nextgroup=muttrcAddrContent syntax region muttrcAddrContent contained start=+"+ end=+"\s*+ skip=+\\"+ skipwhite contains=muttrcEmail nextgroup=muttrcAddrContent -syntax match muttrcAddrDef contained "-addr\s\+" skipwhite nextgroup=muttrcAddrContent +syntax match muttrcAddrDef contained "-addr\s\+" skipwhite nextgroup=muttrcAddrContent syntax match muttrcGroupFlag contained "-group" syntax region muttrcGroupDef contained start="-group\s\+" skip="\\$" end="\s" skipwhite keepend contains=muttrcGroupFlag,muttrcUnHighlightSpace @@ -307,20 +295,29 @@ syntax match muttrcAliasNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrc syntax match muttrcUnAliasKey contained "\s*\w\+\s*" skipwhite nextgroup=muttrcUnAliasKey,muttrcUnAliasNL syntax match muttrcUnAliasNL contained /\s*\\$/ skipwhite skipnl nextgroup=muttrcUnAliasKey,muttrcUnAliasNL -syntax match muttrcSimplePat contained "!\?\^\?[~][ADEFgGklNOpPQRSTuUvV=$]" +" CHECKED 2020-06-21 +" List of letters in Flags in pattern.c +" Parameter: none +syntax match muttrcSimplePat contained "!\?\^\?[~][ADEFGgklNOPpQRSTuUvV#$=]" +" Parameter: range syntax match muttrcSimplePat contained "!\?\^\?[~][mnXz]\s*\%([<>-][0-9]\+[kM]\?\|[0-9]\+[kM]\?[-]\%([0-9]\+[kM]\?\)\?\)" +" Parameter: date syntax match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable -syntax match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatRXContainer +" Parameter: regex +syntax match muttrcSimplePat contained "!\?\^\?[~][BbCcefHhIiLMstwxYy]\s*" nextgroup=muttrcSimplePatRXContainer +" Parameter: pattern syntax match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString +" Parameter: pattern syntax match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString syntax region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat + "syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString syntax region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+ syntax region muttrcSimplePatString contained keepend start=+'+ end=+'+ skip=+\\'+ -syntax region muttrcSimplePatString contained keepend start=+[^ "']+ skip=+\\ + end=+\s+re=e-1 +syntax region muttrcSimplePatString contained keepend start=+[^ "']+ skip=+\\ + end=+\s+re=e-1 syntax region muttrcSimplePatRXContainer contained keepend start=+"+ end=+"+ skip=+\\"+ contains=muttrcRXString syntax region muttrcSimplePatRXContainer contained keepend start=+'+ end=+'+ skip=+\\'+ contains=muttrcRXString -syntax region muttrcSimplePatRXContainer contained keepend start=+[^ "']+ skip=+\\ + end=+\s+re=e-1 contains=muttrcRXString +syntax region muttrcSimplePatRXContainer contained keepend start=+[^ "']+ skip=+\\ + end=+\s+re=e-1 contains=muttrcRXString syntax match muttrcSimplePatMetas contained /[(|)]/ syntax match muttrcOptSimplePat contained skipwhite /[~=%!(^].*/ contains=muttrcSimplePat,muttrcSimplePatMetas @@ -349,12 +346,12 @@ syntax keyword muttrcColor contained brightblack brightblue brightcyan brightdef syntax match muttrcColor contained "\<\%(bright\)\=color\d\{1,3}\>" " Now for the structure of the color line syntax match muttrcColorRXNL contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL -syntax match muttrcColorBG contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL +syntax match muttrcColorBG contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL syntax match muttrcColorBGNL contained skipnl "\s*\\$" nextgroup=muttrcColorBG,muttrcColorBGNL -syntax match muttrcColorFG contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL +syntax match muttrcColorFG contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorBG,muttrcColorBGNL syntax match muttrcColorFGNL contained skipnl "\s*\\$" nextgroup=muttrcColorFG,muttrcColorFGNL -syntax match muttrcColorContext contained /\s*[$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace,muttrcColorCompose nextgroup=muttrcColorFG,muttrcColorFGNL -syntax match muttrcColorNL contained skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL,muttrcColorCompose +syntax match muttrcColorContext contained /\s*[$]\?\w\+/ contains=muttrcColorField,muttrcVariable,muttrcUnHighlightSpace,muttrcColorCompose nextgroup=muttrcColorFG,muttrcColorFGNL +syntax match muttrcColorNL contained skipnl "\s*\\$" nextgroup=muttrcColorContext,muttrcColorNL,muttrcColorCompose syntax match muttrcColorKeyword contained /^\s*color\s\+/ nextgroup=muttrcColorContext,muttrcColorNL,muttrcColorCompose " And now color's brother: syntax region muttrcUnColorPatterns contained skipwhite start=+\s*'+ end=+'+ skip=+\\'+ contains=muttrcPattern nextgroup=muttrcUnColorPatterns,muttrcUnColorPatNL @@ -372,28 +369,27 @@ syntax keyword muttrcMonoAttrib contained bold none normal reverse standout unde syntax keyword muttrcMono contained mono skipwhite nextgroup=muttrcColorField,muttrcColorCompose syntax match muttrcMonoLine "^\s*mono\s\+\S\+" skipwhite nextgroup=muttrcMonoAttrib contains=muttrcMono -" CHECKED 2018-04-18 +" CHECKED 2020-06-21 " List of fields in Fields in color.c syntax keyword muttrcColorField skipwhite contained - \ attachment attach_headers body bold error hdrdefault header index - \ index_author index_collapsed index_date index_flags index_label - \ index_number index_size index_subject index_tag index_tags indicator - \ markers message normal progress prompt quoted search sidebar_divider - \ sidebar_flagged sidebar_highlight sidebar_indicator sidebar_new - \ sidebar_ordinary sidebar_spoolfile signature status tilde tree underline - \ nextgroup=muttrcColor + \ attachment attach_headers body bold error hdrdefault header index index_author + \ index_collapsed index_date index_flags index_label index_number index_size index_subject + \ index_tag index_tags indicator markers message normal options progress prompt quoted + \ search sidebar_divider sidebar_flagged sidebar_highlight sidebar_indicator sidebar_new + \ sidebar_ordinary sidebar_spoolfile sidebar_unread signature status tilde tree underline + \ warning nextgroup=muttrcColor + syntax match muttrcColorField contained "\<quoted\d\=\>" syntax match muttrcColorCompose skipwhite contained /\s*compose\s*/ nextgroup=muttrcColorComposeField -" CHECKED 2018-04-18 +" CHECKED 2020-06-21 " List of fields in ComposeFields in color.c syntax keyword muttrcColorComposeField skipwhite contained - \ header security_both security_encrypt security_none security_sign - \ nextgroup=muttrcColorFG,muttrcColorFGNL + \ header security_both security_encrypt security_none security_sign + \ nextgroup=muttrcColorFG,muttrcColorFGNL syntax region muttrcColorLine keepend start=/^\s*color\s\+/ skip=+\\$+ end=+$+ contains=muttrcColorKeyword,muttrcComment,muttrcUnHighlightSpace - function! s:boolQuadGen(type, vars, deprecated) let l:novars = copy(a:vars) call map(l:novars, '"no" . v:val') @@ -403,643 +399,459 @@ function! s:boolQuadGen(type, vars, deprecated) let l:orig_type = copy(a:type) if a:deprecated let l:type = 'Deprecated' . a:type + exec 'syntax keyword muttrcVar' . l:type . ' ' . join(a:vars) + exec 'syntax keyword muttrcVar' . l:type . ' ' . join(l:novars) + exec 'syntax keyword muttrcVar' . l:type . ' ' . join(l:invvars) else let l:type = a:type + exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(a:vars) . ' nextgroup=muttrcSet' . l:orig_type . 'Assignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr' + exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:novars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr' + exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:invvars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr' endif - exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(a:vars) . ' nextgroup=muttrcSet' . l:orig_type . 'Assignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr' - exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:novars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr' - exec 'syntax keyword muttrcVar' . l:type . ' skipwhite contained ' . join(l:invvars) . ' nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr' endfunction -" CHECKED 2018-04-18 -" List of DT_BOOL in MuttVars in init.h +" CHECKED 2020-06-21 +" List of DT_BOOL in MuttVars in mutt_config.c call s:boolQuadGen('Bool', [ - \ 'allow_8bit', 'allow_ansi', 'arrow_cursor', 'ascii_chars', 'askbcc', - \ 'askcc', 'ask_follow_up', 'ask_x_comment_to', 'attach_split', 'autoedit', - \ 'auto_tag', 'beep', 'beep_new', 'bounce_delivered', 'braille_friendly', - \ 'change_folder_next', 'check_mbox_size', 'check_new', 'collapse_all', - \ 'collapse_flagged', 'collapse_unread', 'confirmappend', 'confirmcreate', - \ 'crypt_autoencrypt', 'crypt_autopgp', 'crypt_autosign', 'crypt_autosmime', - \ 'crypt_confirmhook', 'crypt_opportunistic_encrypt', 'crypt_replyencrypt', - \ 'crypt_replysign', 'crypt_replysignencrypted', 'crypt_timestamp', - \ 'crypt_use_gpgme', 'crypt_use_pka', 'delete_untag', 'digest_collapse', - \ 'duplicate_threads', 'edit_headers', 'encode_from', 'fast_reply', - \ 'fcc_clear', 'flag_safe', 'followup_to', 'force_name', 'forward_decode', - \ 'forward_decrypt', 'forward_quote', 'forward_references', 'hdrs', - \ 'header', 'header_cache_compress', 'header_color_partial', 'help', - \ 'hidden_host', 'hide_limited', 'hide_missing', 'hide_thread_subject', - \ 'hide_top_limited', 'hide_top_missing', 'history_remove_dups', - \ 'honor_disposition', 'idn_decode', 'idn_encode', 'ignore_list_reply_to', - \ 'imap_check_subscribed', 'imap_idle', 'imap_list_subscribed', - \ 'imap_passive', 'imap_peek', 'imap_servernoise', 'implicit_autoview', - \ 'include_onlyfirst', 'keep_flagged', 'mailcap_sanitize', - \ 'maildir_check_cur', 'maildir_header_cache_verify', 'maildir_trash', - \ 'mail_check_recent', 'mail_check_stats', 'markers', 'mark_old', - \ 'menu_move_off', 'menu_scroll', 'message_cache_clean', 'meta_key', - \ 'metoo', 'mh_purge', 'mime_forward_decode', 'mime_subject', - \ 'mime_type_query_first', 'narrow_tree', 'nm_record', 'nntp_listgroup', - \ 'nntp_load_description', 'pager_stop', 'pgp_autoinline', - \ 'pgp_auto_decode', 'pgp_check_exit', 'pgp_ignore_subkeys', 'pgp_long_ids', - \ 'pgp_replyinline', 'pgp_retainable_sigs', 'pgp_self_encrypt', - \ 'pgp_show_unusable', 'pgp_strict_enc', 'pgp_use_gpg_agent', 'pipe_decode', - \ 'pipe_split', 'pop_auth_try_all', 'pop_last', 'postpone_encrypt', - \ 'print_decode', 'print_split', 'prompt_after', 'read_only', - \ 'reflow_space_quotes', 'reflow_text', 'reply_self', 'reply_with_xorig', - \ 'resolve', 'resume_draft_files', 'resume_edited_draft_files', - \ 'reverse_alias', 'reverse_name', 'reverse_realname', 'rfc2047_parameters', - \ 'save_address', 'save_empty', 'save_name', 'save_unsubscribed', 'score', - \ 'show_new_news', 'show_only_unread', 'sidebar_folder_indent', - \ 'sidebar_new_mail_only', 'sidebar_next_new_wrap', 'sidebar_on_right', - \ 'sidebar_short_path', 'sidebar_visible', 'sig_dashes', 'sig_on_top', - \ 'smart_wrap', 'smime_ask_cert_label', 'smime_decrypt_use_default_key', - \ 'smime_is_default', 'smime_self_encrypt', 'sort_re', 'ssl_force_tls', - \ 'ssl_usesystemcerts', 'ssl_use_sslv2', 'ssl_use_sslv3', 'ssl_use_tlsv1', - \ 'ssl_use_tlsv1_1', 'ssl_use_tlsv1_2', 'ssl_verify_dates', - \ 'ssl_verify_host', 'ssl_verify_partial_chains', 'status_on_top', - \ 'strict_threads', 'suspend', 'text_flowed', 'thorough_search', - \ 'thread_received', 'tilde', 'ts_enabled', 'uncollapse_jump', - \ 'uncollapse_new', 'user_agent', 'use_8bitmime', 'use_domain', - \ 'use_envelope_from', 'use_from', 'use_ipv6', 'virtual_spoolfile', - \ 'wait_key', 'weed', 'wrap_search', 'write_bcc', 'x_comment_to' - \ ], 0) - -" CHECKED 2018-04-18 + \ 'abort_backspace', 'allow_8bit', 'allow_ansi', 'arrow_cursor', 'ascii_chars', 'askbcc', + \ 'askcc', 'ask_follow_up', 'ask_x_comment_to', 'attach_save_without_prompting', + \ 'attach_split', 'autocrypt', 'autocrypt_reply', 'autoedit', 'auto_subscribe', 'auto_tag', + \ 'beep', 'beep_new', 'bounce_delivered', 'braille_friendly', + \ 'browser_abbreviate_mailboxes', 'change_folder_next', 'check_mbox_size', 'check_new', + \ 'collapse_all', 'collapse_flagged', 'collapse_unread', 'confirmappend', 'confirmcreate', + \ 'crypt_autoencrypt', 'crypt_autopgp', 'crypt_autosign', 'crypt_autosmime', + \ 'crypt_confirmhook', 'crypt_opportunistic_encrypt', + \ 'crypt_opportunistic_encrypt_strong_keys', 'crypt_protected_headers_read', + \ 'crypt_protected_headers_save', 'crypt_protected_headers_write', 'crypt_replyencrypt', + \ 'crypt_replysign', 'crypt_replysignencrypted', 'crypt_timestamp', 'crypt_use_gpgme', + \ 'crypt_use_pka', 'delete_untag', 'digest_collapse', 'duplicate_threads', 'edit_headers', + \ 'encode_from', 'fast_reply', 'fcc_before_send', 'fcc_clear', 'flag_safe', 'followup_to', + \ 'force_name', 'forward_decode', 'forward_decrypt', 'forward_quote', 'forward_references', + \ 'hdrs', 'header', 'header_color_partial', 'help', 'hidden_host', 'hide_limited', + \ 'hide_missing', 'hide_thread_subject', 'hide_top_limited', 'hide_top_missing', + \ 'history_remove_dups', 'honor_disposition', 'idn_decode', 'idn_encode', + \ 'ignore_list_reply_to', 'imap_check_subscribed', 'imap_condstore', 'imap_deflate', + \ 'imap_idle', 'imap_list_subscribed', 'imap_passive', 'imap_peek', 'imap_qresync', + \ 'imap_rfc5161', 'imap_servernoise', 'implicit_autoview', 'include_encrypted', + \ 'include_onlyfirst', 'keep_flagged', 'mailcap_sanitize', 'maildir_check_cur', + \ 'maildir_header_cache_verify', 'maildir_trash', 'mail_check_recent', 'mail_check_stats', + \ 'markers', 'mark_old', 'menu_move_off', 'menu_scroll', 'message_cache_clean', 'meta_key', + \ 'metoo', 'mh_purge', 'mime_forward_decode', 'mime_subject', 'mime_type_query_first', + \ 'narrow_tree', 'nm_record', 'nntp_listgroup', 'nntp_load_description', 'pager_stop', + \ 'pgp_autoinline', 'pgp_auto_decode', 'pgp_check_exit', 'pgp_check_gpg_decrypt_status_fd', + \ 'pgp_ignore_subkeys', 'pgp_long_ids', 'pgp_replyinline', 'pgp_retainable_sigs', + \ 'pgp_self_encrypt', 'pgp_show_unusable', 'pgp_strict_enc', 'pgp_use_gpg_agent', + \ 'pipe_decode', 'pipe_split', 'pop_auth_try_all', 'pop_last', 'postpone_encrypt', + \ 'print_decode', 'print_split', 'prompt_after', 'read_only', 'reflow_space_quotes', + \ 'reflow_text', 'reply_self', 'reply_with_xorig', 'resolve', 'resume_draft_files', + \ 'resume_edited_draft_files', 'reverse_alias', 'reverse_name', 'reverse_realname', + \ 'rfc2047_parameters', 'save_address', 'save_empty', 'save_name', 'save_unsubscribed', + \ 'score', 'show_new_news', 'show_only_unread', 'sidebar_folder_indent', + \ 'sidebar_new_mail_only', 'sidebar_next_new_wrap', 'sidebar_non_empty_mailbox_only', + \ 'sidebar_on_right', 'sidebar_short_path', 'sidebar_visible', 'sig_dashes', 'sig_on_top', + \ 'size_show_bytes', 'size_show_fractions', 'size_show_mb', 'size_units_on_left', + \ 'smart_wrap', 'smime_ask_cert_label', 'smime_decrypt_use_default_key', 'smime_is_default', + \ 'smime_self_encrypt', 'sort_re', 'ssl_force_tls', 'ssl_usesystemcerts', 'ssl_use_sslv2', + \ 'ssl_use_sslv3', 'ssl_use_tlsv1', 'ssl_use_tlsv1_1', 'ssl_use_tlsv1_2', 'ssl_use_tlsv1_3', + \ 'ssl_verify_dates', 'ssl_verify_host', 'ssl_verify_partial_chains', 'status_on_top', + \ 'strict_threads', 'suspend', 'text_flowed', 'thorough_search', 'thread_received', 'tilde', + \ 'ts_enabled', 'uncollapse_jump', 'uncollapse_new', 'user_agent', 'use_8bitmime', + \ 'use_domain', 'use_envelope_from', 'use_from', 'use_ipv6', 'virtual_spoolfile', + \ 'wait_key', 'weed', 'wrap_search', 'write_bcc', 'x_comment_to' + \ ], 0) + +" CHECKED 2020-06-21 " Deprecated Bools -" List of DT_SYNONYM synonyms of Bools in MuttVars in init.h +" List of DT_SYNONYM or DT_DEPRECATED Bools in MuttVars in mutt_config.c call s:boolQuadGen('Bool', [ - \ 'edit_hdrs', 'envelope_from', 'forw_decode', 'forw_decrypt', - \ 'forw_quote', 'ignore_linear_white_space', 'pgp_autoencrypt', - \ 'pgp_autosign', 'pgp_auto_traditional', 'pgp_create_traditional', - \ 'pgp_replyencrypt', 'pgp_replysign', 'pgp_replysignencrypted', - \ 'xterm_set_titles' - \ ], 1) - -" CHECKED 2018-04-18 -" List of DT_QUAD in MuttVars in init.h + \ 'edit_hdrs', 'envelope_from', 'forw_decode', 'forw_decrypt', 'forw_quote', + \ 'header_cache_compress', 'ignore_linear_white_space', 'pgp_autoencrypt', 'pgp_autosign', + \ 'pgp_auto_traditional', 'pgp_create_traditional', 'pgp_replyencrypt', 'pgp_replysign', + \ 'pgp_replysignencrypted', 'xterm_set_titles' + \ ], 1) + +" CHECKED 2020-06-21 +" List of DT_QUAD in MuttVars in mutt_config.c call s:boolQuadGen('Quad', [ - \ 'abort_noattach', 'abort_nosubject', 'abort_unmodified', 'bounce', - \ 'catchup_newsgroup', 'copy', 'crypt_verify_sig', 'delete', 'fcc_attach', - \ 'followup_to_poster', 'forward_edit', 'honor_followup_to', 'include', - \ 'mime_forward', 'mime_forward_rest', 'move', 'pgp_mime_auto', - \ 'pop_delete', 'pop_reconnect', 'postpone', 'post_moderated', 'print', - \ 'quit', 'recall', 'reply_to', 'ssl_starttls' - \ ], 0) - -" CHECKED 2018-04-18 + \ 'abort_noattach', 'abort_nosubject', 'abort_unmodified', 'bounce', 'catchup_newsgroup', + \ 'copy', 'crypt_verify_sig', 'delete', 'fcc_attach', 'followup_to_poster', + \ 'forward_attachments', 'forward_edit', 'honor_followup_to', 'include', 'mime_forward', + \ 'mime_forward_rest', 'move', 'pgp_mime_auto', 'pop_delete', 'pop_reconnect', 'postpone', + \ 'post_moderated', 'print', 'quit', 'recall', 'reply_to', 'ssl_starttls', + \ ], 0) + +" CHECKED 2020-06-21 " Deprecated Quads -" List of DT_SYNONYM synonyms of Quads in MuttVars in init.h +" List of DT_SYNONYM or DT_DEPRECATED Quads in MuttVars in mutt_config.c call s:boolQuadGen('Quad', [ - \ 'mime_fwd', 'pgp_encrypt_self', 'pgp_verify_sig', 'smime_encrypt_self' - \ ], 1) + \ 'mime_fwd', 'pgp_encrypt_self', 'pgp_verify_sig', 'smime_encrypt_self' + \ ], 1) -" CHECKED 2018-04-18 -" List of DT_NUMBER in MuttVars in init.h +" CHECKED 2020-06-21 +" List of DT_NUMBER or DT_LONG in MuttVars in mutt_config.c syntax keyword muttrcVarNum skipwhite contained - \ connect_timeout debug_level history imap_keepalive imap_pipeline_depth - \ imap_poll_timeout mail_check mail_check_stats_interval menu_context - \ net_inc nm_db_limit nm_open_timeout nm_query_window_current_position - \ nm_query_window_duration nntp_context nntp_poll pager_context - \ pager_index_lines pgp_timeout pop_checkinterval read_inc reflow_wrap - \ save_history score_threshold_delete score_threshold_flag - \ score_threshold_read search_context sendmail_wait sidebar_component_depth - \ sidebar_width skip_quoted_offset sleep_time smime_timeout - \ ssl_min_dh_prime_bits timeout time_inc wrap wrap_headers write_inc - \ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr + \ connect_timeout debug_level header_cache_compress_level history + \ imap_fetch_chunk_size imap_keepalive imap_pipeline_depth imap_poll_timeout mail_check + \ mail_check_stats_interval menu_context net_inc nm_db_limit nm_open_timeout + \ nm_query_window_current_position nm_query_window_duration nntp_context nntp_poll + \ pager_context pager_index_lines pgp_timeout pop_checkinterval read_inc reflow_wrap + \ save_history score_threshold_delete score_threshold_flag score_threshold_read + \ search_context sendmail_wait sidebar_component_depth sidebar_width skip_quoted_offset + \ sleep_time smime_timeout ssl_min_dh_prime_bits timeout time_inc toggle_quoted_show_levels + \ wrap wrap_headers write_inc + \ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr syntax keyword muttrcVarDeprecatedNum contained skipwhite - \ wrapmargin - \ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr + \ header_cache_pagesize wrapmargin + \ nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr -" CHECKED 2018-04-18 -" List of DT_STRING in MuttVars in init.h +" CHECKED 2020-06-21 +" List of DT_STRING in MuttVars in mutt_config.c " Special cases first, and all the rest at the end " Formats themselves must be updated in their respective groups " See s:escapesConditionals -syntax match muttrcVarStr contained skipwhite 'my_[a-zA-Z0-9_]\+' nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax match muttrcVarStr contained skipwhite 'my_[a-zA-Z0-9_]\+' nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr syntax keyword muttrcVarStr contained skipwhite alias_format nextgroup=muttrcVarEqualsAliasFmt syntax keyword muttrcVarStr contained skipwhite attach_format nextgroup=muttrcVarEqualsAttachFmt syntax keyword muttrcVarStr contained skipwhite compose_format nextgroup=muttrcVarEqualsComposeFmt syntax keyword muttrcVarStr contained skipwhite folder_format vfolder_format nextgroup=muttrcVarEqualsFolderFmt -syntax keyword muttrcVarStr contained skipwhite attribution index_format message_format pager_format nextgroup=muttrcVarEqualsIdxFmt -" Deprecated format -syntax keyword muttrcVarDeprecatedStr contained skipwhite hdr_format msg_format nextgroup=muttrcVarEqualsIdxFmt +syntax keyword muttrcVarStr contained skipwhite attribution forward_format index_format message_format pager_format nextgroup=muttrcVarEqualsIdxFmt syntax keyword muttrcVarStr contained skipwhite mix_entry_format nextgroup=muttrcVarEqualsMixFmt syntax keyword muttrcVarStr contained skipwhite - \ pgp_clearsign_command pgp_decode_command pgp_decrypt_command - \ pgp_encrypt_only_command pgp_encrypt_sign_command pgp_export_command - \ pgp_import_command pgp_list_pubring_command pgp_list_secring_command - \ pgp_sign_command pgp_verify_command pgp_verify_key_command - \ nextgroup=muttrcVarEqualsPGPCmdFmt + \ pgp_clearsign_command pgp_decode_command pgp_decrypt_command + \ pgp_encrypt_only_command pgp_encrypt_sign_command pgp_export_command pgp_getkeys_command + \ pgp_import_command pgp_list_pubring_command pgp_list_secring_command + \ pgp_sign_command pgp_verify_command pgp_verify_key_command + \ nextgroup=muttrcVarEqualsPGPCmdFmt syntax keyword muttrcVarStr contained skipwhite pgp_entry_format nextgroup=muttrcVarEqualsPGPFmt -syntax keyword muttrcVarStr contained skipwhite pgp_getkeys_command nextgroup=muttrcVarEqualsPGPGetKeysFmt syntax keyword muttrcVarStr contained skipwhite query_format nextgroup=muttrcVarEqualsQueryFmt syntax keyword muttrcVarStr contained skipwhite - \ smime_decrypt_command smime_encrypt_command smime_get_cert_command - \ smime_get_cert_email_command smime_get_signer_cert_command - \ smime_import_cert_command smime_pk7out_command smime_sign_command - \ smime_verify_command smime_verify_opaque_command - \ nextgroup=muttrcVarEqualsSmimeFmt -syntax keyword muttrcVarStr contained skipwhite ts_icon_format ts_status_format status_format nextgroup=muttrcVarEqualsStatusFmt -" Deprecated format -syntax keyword muttrcVarDeprecatedStr contained skipwhite xterm_icon xterm_title nextgroup=muttrcVarEqualsStatusFmt + \ smime_decrypt_command smime_encrypt_command smime_get_cert_command + \ smime_get_cert_email_command smime_get_signer_cert_command + \ smime_import_cert_command smime_pk7out_command smime_sign_command + \ smime_verify_command smime_verify_opaque_command + \ nextgroup=muttrcVarEqualsSmimeFmt +syntax keyword muttrcVarStr contained skipwhite status_format ts_icon_format ts_status_format nextgroup=muttrcVarEqualsStatusFmt syntax keyword muttrcVarStr contained skipwhite date_format nextgroup=muttrcVarEqualsStrftimeFmt syntax keyword muttrcVarStr contained skipwhite group_index_format nextgroup=muttrcVarEqualsGrpIdxFmt syntax keyword muttrcVarStr contained skipwhite sidebar_format nextgroup=muttrcVarEqualsSdbFmt syntax keyword muttrcVarStr contained skipwhite - \ assumed_charset attach_charset attach_sep attribution_locale charset - \ config_charset content_type default_hook dsn_notify dsn_return - \ empty_subject escape forward_attribution_intro forward_attribution_trailer - \ forward_format header_cache_pagesize hidden_tags hostname - \ imap_authenticators imap_delim_chars imap_headers imap_login imap_pass - \ imap_user indent_string mailcap_path mark_macro_prefix mh_seq_flagged - \ mh_seq_replied mh_seq_unseen mime_type_query_command newsgroups_charset - \ news_server nm_default_uri nm_exclude_tags nm_query_type - \ nm_query_window_current_search nm_query_window_timebase nm_record_tags - \ nm_unread_tag nntp_authenticators nntp_pass nntp_user pgp_default_key - \ pgp_sign_as pipe_sep pop_authenticators pop_host pop_pass pop_user - \ postpone_encrypt_as post_indent_string preconnect realname send_charset - \ show_multipart_alternative sidebar_delim_chars sidebar_divider_char - \ sidebar_indent_string simple_search smime_default_key smime_encrypt_with - \ smime_sign_as smime_sign_digest_alg smtp_authenticators smtp_pass smtp_url - \ spam_separator ssl_ciphers tunnel - \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr + \ abort_key arrow_string assumed_charset attach_charset attach_sep attribution_locale + \ autocrypt_acct_format charset config_charset content_type crypt_protected_headers_subject + \ default_hook dsn_notify dsn_return empty_subject escape forward_attribution_intro + \ forward_attribution_trailer header_cache_backend header_cache_compress_method hidden_tags + \ hostname imap_authenticators imap_delim_chars imap_headers imap_login imap_pass imap_user + \ indent_string mailcap_path mark_macro_prefix mh_seq_flagged mh_seq_replied mh_seq_unseen + \ newsgroups_charset news_server nm_default_url nm_exclude_tags nm_flagged_tag nm_query_type + \ nm_query_window_current_search nm_query_window_timebase nm_record_tags nm_replied_tag + \ nm_unread_tag nntp_authenticators nntp_pass nntp_user pgp_default_key pgp_sign_as pipe_sep + \ pop_authenticators pop_host pop_pass pop_user postpone_encrypt_as post_indent_string + \ preconnect preferred_languages realname send_charset show_multipart_alternative + \ sidebar_delim_chars sidebar_divider_char sidebar_indent_string simple_search + \ smime_default_key smime_encrypt_with smime_sign_as smime_sign_digest_alg + \ smtp_authenticators smtp_pass smtp_url smtp_user spam_separator ssl_ciphers + \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr + " Deprecated strings -syntax keyword muttrcVarDeprecatedStr contained skipwhite - \ forw_format indent_str pgp_self_encrypt_as post_indent_str - \ smime_self_encrypt_as - \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax keyword muttrcVarDeprecatedStr + \ abort_noattach_regexp attach_keyword forw_format hdr_format indent_str msg_format + \ nm_default_uri pgp_self_encrypt_as post_indent_str print_cmd quote_regexp reply_regexp + \ smime_self_encrypt_as xterm_icon xterm_title -" CHECKED 2018-04-18 +" CHECKED 2020-06-21 " List of DT_ADDRESS -syntax keyword muttrcVarStr contained skipwhite envelope_from_address from nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -" List of DT_HCACHE -syntax keyword muttrcVarStr contained skipwhite header_cache_backend nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -" List of DT_MAGIC -syntax keyword muttrcVarStr contained skipwhite mbox_type nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax keyword muttrcVarStr contained skipwhite envelope_from_address from nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +" List of DT_ENUM +syntax keyword muttrcVarStr contained skipwhite mbox_type nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr " List of DT_MBTABLE -syntax keyword muttrcVarStr contained skipwhite flag_chars from_chars status_chars to_chars nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax keyword muttrcVarStr contained skipwhite crypt_chars flag_chars from_chars status_chars to_chars nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr -" CHECKED 2018-04-18 +" CHECKED 2020-06-21 " List of DT_PATH syntax keyword muttrcVarStr contained skipwhite - \ alias_file certificate_file debug_file display_filter editor entropy_file - \ folder header_cache history_file inews ispell mbox message_cachedir mixmaster - \ new_mail_command news_cache_dir newsrc pager postponed print_command - \ query_command record sendmail shell signature smime_ca_location - \ smime_certificates smime_keys spoolfile ssl_ca_certificates_file - \ ssl_client_cert tmpdir trash visual - \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr - -" CHECKED 2018-04-18 + \ alias_file attach_save_dir autocrypt_dir certificate_file debug_file + \ entropy_file folder header_cache history_file mbox message_cachedir newsrc + \ news_cache_dir postponed record signature smime_ca_location + \ smime_certificates smime_keys spoolfile ssl_ca_certificates_file + \ ssl_client_cert tmpdir trash + \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +" List of DT_COMMAND (excluding pgp_*_command and smime_*_command) +syntax keyword muttrcVarStr contained skipwhite + \ display_filter editor inews ispell mixmaster new_mail_command pager + \ print_command query_command sendmail shell visual external_search_command + \ imap_oauth_refresh_command pop_oauth_refresh_command + \ mime_type_query_command smtp_oauth_refresh_command tunnel + \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr + +" CHECKED 2020-06-21 " List of DT_REGEX syntax keyword muttrcVarStr contained skipwhite - \ abort_noattach_regex gecos_mask mask pgp_decryption_okay pgp_good_sign - \ quote_regex reply_regex smileys - \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -" List of deprecated DT_PATH -syntax keyword muttrcVarDeprecatedStr contained skipwhite print_cmd nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr -" List of deprecated DT_REGEX -syntax keyword muttrcVarDeprecatedStr contained skipwhite abort_noattach_regexp attach_keyword quote_regexp reply_regexp nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr + \ abort_noattach_regex gecos_mask mask pgp_decryption_okay pgp_good_sign + \ quote_regex reply_regex smileys + \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr " List of DT_SORT syntax keyword muttrcVarStr contained skipwhite - \ pgp_sort_keys sidebar_sort_method sort sort_alias sort_aux sort_browser - \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr + \ pgp_sort_keys sidebar_sort_method sort sort_alias sort_aux sort_browser + \ nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr -" CHECKED 2018-04-18 -" List of commands in Commands in init.h +" CHECKED 2020-06-21 +" List of commands in Commands in mutt_config.c " Remember to remove hooks, they have already been dealt with -syntax keyword muttrcCommand skipwhite charset-hook nextgroup=muttrcRXString -syntax keyword muttrcCommand skipwhite unhook nextgroup=muttrcHooks -syntax keyword muttrcCommand skipwhite spam nextgroup=muttrcSpamPattern -syntax keyword muttrcCommand skipwhite nospam nextgroup=muttrcNoSpamPattern -syntax keyword muttrcCommand skipwhite bind nextgroup=muttrcBindMenuList,muttrcBindMenuListNL -syntax keyword muttrcCommand skipwhite macro nextgroup=muttrcMacroMenuList,muttrcMacroMenuListNL syntax keyword muttrcCommand skipwhite alias nextgroup=muttrcAliasGroupDef,muttrcAliasKey,muttrcAliasNL -syntax keyword muttrcCommand skipwhite unalias nextgroup=muttrcUnAliasKey,muttrcUnAliasNL -syntax keyword muttrcCommand skipwhite set unset reset toggle nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr,muttrcVarDeprecatedBool,muttrcVarDeprecatedQuad,muttrcVarDeprecatedStr +syntax keyword muttrcCommand skipwhite bind nextgroup=muttrcBindMenuList,muttrcBindMenuListNL syntax keyword muttrcCommand skipwhite exec nextgroup=muttrcFunction +syntax keyword muttrcCommand skipwhite macro nextgroup=muttrcMacroMenuList,muttrcMacroMenuListNL +syntax keyword muttrcCommand skipwhite nospam nextgroup=muttrcNoSpamPattern +syntax keyword muttrcCommand skipwhite set unset reset toggle nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr +syntax keyword muttrcCommand skipwhite spam nextgroup=muttrcSpamPattern +syntax keyword muttrcCommand skipwhite unalias nextgroup=muttrcUnAliasKey,muttrcUnAliasNL +syntax keyword muttrcCommand skipwhite unhook nextgroup=muttrcHooks syntax keyword muttrcCommand skipwhite - \ alternative_order attachments auto_view finish hdr_order ifdef ifndef - \ ignore lua lua-source mailboxes mailto_allow mime_lookup my_hdr push score - \ setenv sidebar_whitelist source subjectrx subscribe-to tag-formats - \ tag-transforms unalternative_order unattachments unauto_view uncolor - \ unhdr_order unignore unmailboxes unmailto_allow unmime_lookup unmono - \ unmy_hdr unscore unsetenv unsidebar_whitelist unsubjectrx unsubscribe-from - \ unvirtual-mailboxes virtual-mailboxes - -" CHECKED 2018-04-18 -" List of functions in functions.h -syntax match muttrcFunction contained "\<accept\>" -syntax match muttrcFunction contained "\<append\>" -syntax match muttrcFunction contained "\<attach-file\>" -syntax match muttrcFunction contained "\<attach-key\>" -syntax match muttrcFunction contained "\<attach-message\>" -syntax match muttrcFunction contained "\<attach-news-message\>" -syntax match muttrcFunction contained "\<backspace\>" -syntax match muttrcFunction contained "\<backward-char\>" -syntax match muttrcFunction contained "\<backward-word\>" -syntax match muttrcFunction contained "\<bol\>" -syntax match muttrcFunction contained "\<bottom-page\>" -syntax match muttrcFunction contained "\<bottom\>" -syntax match muttrcFunction contained "\<bounce-message\>" -syntax match muttrcFunction contained "\<break-thread\>" -syntax match muttrcFunction contained "\<buffy-cycle\>" -syntax match muttrcFunction contained "\<buffy-list\>" -syntax match muttrcFunction contained "\<capitalize-word\>" -syntax match muttrcFunction contained "\<catchup\>" -syntax match muttrcFunction contained "\<chain-next\>" -syntax match muttrcFunction contained "\<chain-prev\>" -syntax match muttrcFunction contained "\<change-dir\>" -syntax match muttrcFunction contained "\<change-folder-readonly\>" -syntax match muttrcFunction contained "\<change-folder\>" -syntax match muttrcFunction contained "\<change-newsgroup-readonly\>" -syntax match muttrcFunction contained "\<change-newsgroup\>" -syntax match muttrcFunction contained "\<change-vfolder\>" -syntax match muttrcFunction contained "\<check-new\>" -syntax match muttrcFunction contained "\<check-traditional-pgp\>" -syntax match muttrcFunction contained "\<clear-flag\>" -syntax match muttrcFunction contained "\<collapse-all\>" -syntax match muttrcFunction contained "\<collapse-parts\>" -syntax match muttrcFunction contained "\<collapse-thread\>" -syntax match muttrcFunction contained "\<complete-query\>" -syntax match muttrcFunction contained "\<complete\>" -syntax match muttrcFunction contained "\<compose-to-sender\>" -syntax match muttrcFunction contained "\<copy-file\>" -syntax match muttrcFunction contained "\<copy-message\>" -syntax match muttrcFunction contained "\<create-alias\>" -syntax match muttrcFunction contained "\<create-mailbox\>" -syntax match muttrcFunction contained "\<current-bottom\>" -syntax match muttrcFunction contained "\<current-middle\>" -syntax match muttrcFunction contained "\<current-top\>" -syntax match muttrcFunction contained "\<decode-copy\>" -syntax match muttrcFunction contained "\<decode-save\>" -syntax match muttrcFunction contained "\<decrypt-copy\>" -syntax match muttrcFunction contained "\<decrypt-save\>" -syntax match muttrcFunction contained "\<delete-char\>" -syntax match muttrcFunction contained "\<delete-entry\>" -syntax match muttrcFunction contained "\<delete-mailbox\>" -syntax match muttrcFunction contained "\<delete-message\>" -syntax match muttrcFunction contained "\<delete-pattern\>" -syntax match muttrcFunction contained "\<delete-subthread\>" -syntax match muttrcFunction contained "\<delete-thread\>" -syntax match muttrcFunction contained "\<delete\>" -syntax match muttrcFunction contained "\<detach-file\>" -syntax match muttrcFunction contained "\<display-address\>" -syntax match muttrcFunction contained "\<display-filename\>" -syntax match muttrcFunction contained "\<display-message\>" -syntax match muttrcFunction contained "\<display-toggle-weed\>" -syntax match muttrcFunction contained "\<downcase-word\>" -syntax match muttrcFunction contained "\<edit-bcc\>" -syntax match muttrcFunction contained "\<edit-cc\>" -syntax match muttrcFunction contained "\<edit-description\>" -syntax match muttrcFunction contained "\<edit-encoding\>" -syntax match muttrcFunction contained "\<edit-fcc\>" -syntax match muttrcFunction contained "\<edit-file\>" -syntax match muttrcFunction contained "\<edit-followup-to\>" -syntax match muttrcFunction contained "\<edit-from\>" -syntax match muttrcFunction contained "\<edit-headers\>" -syntax match muttrcFunction contained "\<edit-label\>" -syntax match muttrcFunction contained "\<edit-message\>" -syntax match muttrcFunction contained "\<edit-mime\>" -syntax match muttrcFunction contained "\<edit-newsgroups\>" -syntax match muttrcFunction contained "\<edit-or-view-raw-message\>" -syntax match muttrcFunction contained "\<edit-raw-message\>" -syntax match muttrcFunction contained "\<edit-reply-to\>" -syntax match muttrcFunction contained "\<edit-subject\>" -syntax match muttrcFunction contained "\<edit-to\>" -syntax match muttrcFunction contained "\<edit-type\>" -syntax match muttrcFunction contained "\<edit-x-comment-to\>" -syntax match muttrcFunction contained "\<edit\>" -syntax match muttrcFunction contained "\<end-cond\>" -syntax match muttrcFunction contained "\<enter-command\>" -syntax match muttrcFunction contained "\<enter-mask\>" -syntax match muttrcFunction contained "\<entire-thread\>" -syntax match muttrcFunction contained "\<eol\>" -syntax match muttrcFunction contained "\<exit\>" -syntax match muttrcFunction contained "\<extract-keys\>" -syntax match muttrcFunction contained "\<fetch-mail\>" -syntax match muttrcFunction contained "\<filter-entry\>" -syntax match muttrcFunction contained "\<first-entry\>" -syntax match muttrcFunction contained "\<flag-message\>" -syntax match muttrcFunction contained "\<followup-message\>" -syntax match muttrcFunction contained "\<forget-passphrase\>" -syntax match muttrcFunction contained "\<forward-char\>" -syntax match muttrcFunction contained "\<forward-message\>" -syntax match muttrcFunction contained "\<forward-to-group\>" -syntax match muttrcFunction contained "\<forward-word\>" -syntax match muttrcFunction contained "\<get-attachment\>" -syntax match muttrcFunction contained "\<get-children\>" -syntax match muttrcFunction contained "\<get-message\>" -syntax match muttrcFunction contained "\<get-parent\>" -syntax match muttrcFunction contained "\<goto-folder\>" -syntax match muttrcFunction contained "\<goto-parent\>" -syntax match muttrcFunction contained "\<group-reply\>" -syntax match muttrcFunction contained "\<half-down\>" -syntax match muttrcFunction contained "\<half-up\>" -syntax match muttrcFunction contained "\<help\>" -syntax match muttrcFunction contained "\<history-down\>" -syntax match muttrcFunction contained "\<history-search\>" -syntax match muttrcFunction contained "\<history-up\>" -syntax match muttrcFunction contained "\<imap-fetch-mail\>" -syntax match muttrcFunction contained "\<imap-logout-all\>" -syntax match muttrcFunction contained "\<insert\>" -syntax match muttrcFunction contained "\<ispell\>" -syntax match muttrcFunction contained "\<jump\>" -syntax match muttrcFunction contained "\<kill-eol\>" -syntax match muttrcFunction contained "\<kill-eow\>" -syntax match muttrcFunction contained "\<kill-line\>" -syntax match muttrcFunction contained "\<kill-word\>" -syntax match muttrcFunction contained "\<last-entry\>" -syntax match muttrcFunction contained "\<limit-current-thread\>" -syntax match muttrcFunction contained "\<limit\>" -syntax match muttrcFunction contained "\<link-threads\>" -syntax match muttrcFunction contained "\<list-reply\>" -syntax match muttrcFunction contained "\<mail-key\>" -syntax match muttrcFunction contained "\<mail\>" -syntax match muttrcFunction contained "\<mark-as-new\>" -syntax match muttrcFunction contained "\<mark-message\>" -syntax match muttrcFunction contained "\<middle-page\>" -syntax match muttrcFunction contained "\<mix\>" -syntax match muttrcFunction contained "\<modify-labels-then-hide\>" -syntax match muttrcFunction contained "\<modify-labels\>" -syntax match muttrcFunction contained "\<modify-tags-then-hide\>" -syntax match muttrcFunction contained "\<modify-tags\>" -syntax match muttrcFunction contained "\<new-mime\>" -syntax match muttrcFunction contained "\<next-entry\>" -syntax match muttrcFunction contained "\<next-line\>" -syntax match muttrcFunction contained "\<next-new-then-unread\>" -syntax match muttrcFunction contained "\<next-new\>" -syntax match muttrcFunction contained "\<next-page\>" -syntax match muttrcFunction contained "\<next-subthread\>" -syntax match muttrcFunction contained "\<next-thread\>" -syntax match muttrcFunction contained "\<next-undeleted\>" -syntax match muttrcFunction contained "\<next-unread-mailbox\>" -syntax match muttrcFunction contained "\<next-unread\>" -syntax match muttrcFunction contained "\<noop\>" -syntax match muttrcFunction contained "\<parent-message\>" -syntax match muttrcFunction contained "\<pgp-menu\>" -syntax match muttrcFunction contained "\<pipe-entry\>" -syntax match muttrcFunction contained "\<pipe-message\>" -syntax match muttrcFunction contained "\<post-message\>" -syntax match muttrcFunction contained "\<postpone-message\>" -syntax match muttrcFunction contained "\<previous-entry\>" -syntax match muttrcFunction contained "\<previous-line\>" -syntax match muttrcFunction contained "\<previous-new-then-unread\>" -syntax match muttrcFunction contained "\<previous-new\>" -syntax match muttrcFunction contained "\<previous-page\>" -syntax match muttrcFunction contained "\<previous-subthread\>" -syntax match muttrcFunction contained "\<previous-thread\>" -syntax match muttrcFunction contained "\<previous-undeleted\>" -syntax match muttrcFunction contained "\<previous-unread\>" -syntax match muttrcFunction contained "\<print-entry\>" -syntax match muttrcFunction contained "\<print-message\>" -syntax match muttrcFunction contained "\<purge-message\>" -syntax match muttrcFunction contained "\<purge-thread\>" -syntax match muttrcFunction contained "\<quasi-delete\>" -syntax match muttrcFunction contained "\<query-append\>" -syntax match muttrcFunction contained "\<query\>" -syntax match muttrcFunction contained "\<quit\>" -syntax match muttrcFunction contained "\<quote-char\>" -syntax match muttrcFunction contained "\<read-subthread\>" -syntax match muttrcFunction contained "\<read-thread\>" -syntax match muttrcFunction contained "\<recall-message\>" -syntax match muttrcFunction contained "\<reconstruct-thread\>" -syntax match muttrcFunction contained "\<redraw-screen\>" -syntax match muttrcFunction contained "\<refresh\>" -syntax match muttrcFunction contained "\<reload-active\>" -syntax match muttrcFunction contained "\<rename-attachment\>" -syntax match muttrcFunction contained "\<rename-file\>" -syntax match muttrcFunction contained "\<rename-mailbox\>" -syntax match muttrcFunction contained "\<reply\>" -syntax match muttrcFunction contained "\<resend-message\>" -syntax match muttrcFunction contained "\<root-message\>" -syntax match muttrcFunction contained "\<save-entry\>" -syntax match muttrcFunction contained "\<save-message\>" -syntax match muttrcFunction contained "\<search-next\>" -syntax match muttrcFunction contained "\<search-opposite\>" -syntax match muttrcFunction contained "\<search-reverse\>" -syntax match muttrcFunction contained "\<search-toggle\>" -syntax match muttrcFunction contained "\<search\>" -syntax match muttrcFunction contained "\<select-entry\>" -syntax match muttrcFunction contained "\<select-new\>" -syntax match muttrcFunction contained "\<send-message\>" -syntax match muttrcFunction contained "\<set-flag\>" -syntax match muttrcFunction contained "\<shell-escape\>" -syntax match muttrcFunction contained "\<show-limit\>" -syntax match muttrcFunction contained "\<show-log-messages\>" -syntax match muttrcFunction contained "\<show-version\>" -syntax match muttrcFunction contained "\<sidebar-next-new\>" -syntax match muttrcFunction contained "\<sidebar-next\>" -syntax match muttrcFunction contained "\<sidebar-open\>" -syntax match muttrcFunction contained "\<sidebar-page-down\>" -syntax match muttrcFunction contained "\<sidebar-page-up\>" -syntax match muttrcFunction contained "\<sidebar-prev-new\>" -syntax match muttrcFunction contained "\<sidebar-prev\>" -syntax match muttrcFunction contained "\<sidebar-toggle-virtual\>" -syntax match muttrcFunction contained "\<sidebar-toggle-visible\>" -syntax match muttrcFunction contained "\<skip-quoted\>" -syntax match muttrcFunction contained "\<smime-menu\>" -syntax match muttrcFunction contained "\<sort-mailbox\>" -syntax match muttrcFunction contained "\<sort-reverse\>" -syntax match muttrcFunction contained "\<sort\>" -syntax match muttrcFunction contained "\<subscribe-pattern\>" -syntax match muttrcFunction contained "\<subscribe\>" -syntax match muttrcFunction contained "\<sync-mailbox\>" -syntax match muttrcFunction contained "\<tag-entry\>" -syntax match muttrcFunction contained "\<tag-message\>" -syntax match muttrcFunction contained "\<tag-pattern\>" -syntax match muttrcFunction contained "\<tag-prefix-cond\>" -syntax match muttrcFunction contained "\<tag-prefix\>" -syntax match muttrcFunction contained "\<tag-subthread\>" -syntax match muttrcFunction contained "\<tag-thread\>" -syntax match muttrcFunction contained "\<toggle-disposition\>" -syntax match muttrcFunction contained "\<toggle-mailboxes\>" -syntax match muttrcFunction contained "\<toggle-new\>" -syntax match muttrcFunction contained "\<toggle-quoted\>" -syntax match muttrcFunction contained "\<toggle-read\>" -syntax match muttrcFunction contained "\<toggle-recode\>" -syntax match muttrcFunction contained "\<toggle-subscribed\>" -syntax match muttrcFunction contained "\<toggle-unlink\>" -syntax match muttrcFunction contained "\<toggle-write\>" -syntax match muttrcFunction contained "\<top-page\>" -syntax match muttrcFunction contained "\<top\>" -syntax match muttrcFunction contained "\<transpose-chars\>" -syntax match muttrcFunction contained "\<uncatchup\>" -syntax match muttrcFunction contained "\<undelete-entry\>" -syntax match muttrcFunction contained "\<undelete-message\>" -syntax match muttrcFunction contained "\<undelete-pattern\>" -syntax match muttrcFunction contained "\<undelete-subthread\>" -syntax match muttrcFunction contained "\<undelete-thread\>" -syntax match muttrcFunction contained "\<unsubscribe-pattern\>" -syntax match muttrcFunction contained "\<unsubscribe\>" -syntax match muttrcFunction contained "\<untag-pattern\>" -syntax match muttrcFunction contained "\<upcase-word\>" -syntax match muttrcFunction contained "\<update-encoding\>" -syntax match muttrcFunction contained "\<verify-key\>" -syntax match muttrcFunction contained "\<vfolder-from-query\>" -syntax match muttrcFunction contained "\<vfolder-window-backward\>" -syntax match muttrcFunction contained "\<vfolder-window-forward\>" -syntax match muttrcFunction contained "\<view-attachments\>" -syntax match muttrcFunction contained "\<view-attach\>" -syntax match muttrcFunction contained "\<view-file\>" -syntax match muttrcFunction contained "\<view-mailcap\>" -syntax match muttrcFunction contained "\<view-name\>" -syntax match muttrcFunction contained "\<view-raw-message\>" -syntax match muttrcFunction contained "\<view-text\>" -syntax match muttrcFunction contained "\<what-key\>" -syntax match muttrcFunction contained "\<write-fcc\>" - + \ alternative_order attachments auto_view finish hdr_order ifdef ifndef + \ ignore lua lua-source mailboxes mailto_allow mime_lookup my_hdr push score + \ setenv sidebar_whitelist source subjectrx subscribe-to tag-formats + \ tag-transforms unalternative_order unattachments unauto_view uncolor + \ unhdr_order unignore unmailboxes unmailto_allow unmime_lookup unmono + \ unmy_hdr unscore unsetenv unsidebar_whitelist unsubjectrx unsubscribe-from + \ unvirtual-mailboxes virtual-mailboxes named-mailboxes + \ echo unbind unmacro + +function! s:genFunctions(functions) + for f in a:functions + exec 'syntax match muttrcFunction contained "\<' . l:f . '\>"' + endfor +endfunction +" CHECKED 2020-06-21 +" List of functions in functions.c +" Note: 'noop' is included but is elsewhere in the source +call s:genFunctions(['noop', + \ 'accept', 'append', 'attach-file', 'attach-key', 'attach-message', 'attach-news-message', + \ 'autocrypt-acct-menu', 'autocrypt-menu', 'backspace', 'backward-char', 'backward-word', + \ 'bol', 'bottom-page', 'bottom', 'bounce-message', 'break-thread', 'buffy-cycle', + \ 'buffy-list', 'capitalize-word', 'catchup', 'chain-next', 'chain-prev', 'change-dir', + \ 'change-folder-readonly', 'change-folder', 'change-newsgroup-readonly', + \ 'change-newsgroup', 'change-vfolder', 'check-new', 'check-stats', + \ 'check-traditional-pgp', 'clear-flag', 'collapse-all', 'collapse-parts', + \ 'collapse-thread', 'complete-query', 'complete', 'compose-to-sender', 'copy-file', + \ 'copy-message', 'create-account', 'create-alias', 'create-mailbox', 'current-bottom', + \ 'current-middle', 'current-top', 'decode-copy', 'decode-save', 'decrypt-copy', + \ 'decrypt-save', 'delete-account', 'delete-char', 'delete-entry', 'delete-mailbox', + \ 'delete-message', 'delete-pattern', 'delete-subthread', 'delete-thread', 'delete', + \ 'descend-directory', 'detach-file', 'display-address', 'display-filename', + \ 'display-message', 'display-toggle-weed', 'downcase-word', 'edit-bcc', 'edit-cc', + \ 'edit-description', 'edit-encoding', 'edit-fcc', 'edit-file', 'edit-followup-to', + \ 'edit-from', 'edit-headers', 'edit-label', 'edit-language', 'edit-message', 'edit-mime', + \ 'edit-newsgroups', 'edit-or-view-raw-message', 'edit-raw-message', 'edit-reply-to', + \ 'edit-subject', 'edit-to', 'edit-type', 'edit-x-comment-to', 'edit', 'end-cond', + \ 'enter-command', 'enter-mask', 'entire-thread', 'eol', 'exit', 'extract-keys', + \ 'fetch-mail', 'filter-entry', 'first-entry', 'flag-message', 'followup-message', + \ 'forget-passphrase', 'forward-char', 'forward-message', 'forward-to-group', + \ 'forward-word', 'get-attachment', 'get-children', 'get-message', 'get-parent', + \ 'goto-folder', 'goto-parent', 'group-alternatives', 'group-chat-reply', + \ 'group-multilingual', 'group-reply', 'half-down', 'half-up', 'help', 'history-down', + \ 'history-search', 'history-up', 'imap-fetch-mail', 'imap-logout-all', 'insert', 'ispell', + \ 'jump', 'kill-eol', 'kill-eow', 'kill-line', 'kill-word', 'last-entry', + \ 'limit-current-thread', 'limit', 'link-threads', 'list-reply', 'mail-key', + \ 'mailbox-cycle', 'mailbox-list', 'mail', 'mark-as-new', 'mark-message', 'middle-page', + \ 'mix', 'modify-labels-then-hide', 'modify-labels', 'modify-tags-then-hide', + \ 'modify-tags', 'move-down', 'move-up', 'new-mime', 'next-entry', 'next-line', + \ 'next-new-then-unread', 'next-new', 'next-page', 'next-subthread', 'next-thread', + \ 'next-undeleted', 'next-unread-mailbox', 'next-unread', 'parent-message', 'pgp-menu', + \ 'pipe-entry', 'pipe-message', 'post-message', 'postpone-message', 'previous-entry', + \ 'previous-line', 'previous-new-then-unread', 'previous-new', 'previous-page', + \ 'previous-subthread', 'previous-thread', 'previous-undeleted', 'previous-unread', + \ 'print-entry', 'print-message', 'purge-message', 'purge-thread', 'quasi-delete', + \ 'query-append', 'query', 'quit', 'quote-char', 'read-subthread', 'read-thread', + \ 'recall-message', 'reconstruct-thread', 'redraw-screen', 'refresh', 'reload-active', + \ 'rename-attachment', 'rename-file', 'rename-mailbox', 'reply', 'resend-message', + \ 'root-message', 'save-entry', 'save-message', 'search-next', 'search-opposite', + \ 'search-reverse', 'search-toggle', 'search', 'select-entry', 'select-new', + \ 'send-message', 'set-flag', 'shell-escape', 'show-limit', 'show-log-messages', + \ 'show-version', 'sidebar-next-new', 'sidebar-first', 'sidebar-last', 'sidebar-next', + \ 'sidebar-open', 'sidebar-page-down', 'sidebar-page-up', 'sidebar-prev-new', + \ 'sidebar-prev', 'sidebar-toggle-virtual', 'sidebar-toggle-visible', 'skip-quoted', + \ 'smime-menu', 'sort-mailbox', 'sort-reverse', 'sort', 'subscribe-pattern', + \ 'sync-mailbox', 'tag-entry', 'tag-message', 'tag-pattern', 'tag-prefix-cond', + \ 'tag-prefix', 'tag-subthread', 'tag-thread', 'toggle-active', 'toggle-disposition', + \ 'toggle-mailboxes', 'toggle-new', 'toggle-prefer-encrypt', 'toggle-quoted', + \ 'toggle-read', 'toggle-recode', 'toggle-subscribed', 'toggle-unlink', 'toggle-write', + \ 'top-page', 'top', 'transpose-chars', 'uncatchup', 'undelete-entry', 'undelete-message', + \ 'undelete-pattern', 'undelete-subthread', 'undelete-thread', 'unsubscribe-pattern', + \ 'untag-pattern', 'upcase-word', 'update-encoding', 'verify-key', + \ 'vfolder-from-query-readonly', 'vfolder-from-query', 'vfolder-window-backward', + \ 'vfolder-window-forward', 'view-attachments', 'view-attach', 'view-file', 'view-mailcap', + \ 'view-name', 'view-raw-message', 'view-text', 'what-key', 'write-fcc' + \ ]) " Define the default highlighting. " Only when an item doesn't have highlighting yet -highlight def link muttrcComment Comment -highlight def link muttrcEscape SpecialChar -highlight def link muttrcRXChars SpecialChar -highlight def link muttrcString String -highlight def link muttrcRXString String -highlight def link muttrcRXString2 String -highlight def link muttrcSpecial Special -highlight def link muttrcHooks Type -highlight def link muttrcGroupFlag Type -highlight def link muttrcGroupDef Macro -highlight def link muttrcAddrDef muttrcGroupFlag -highlight def link muttrcRXDef muttrcGroupFlag -highlight def link muttrcRXPat String -highlight def link muttrcAliasGroupName Macro -highlight def link muttrcAliasKey Identifier -highlight def link muttrcUnAliasKey Identifier -highlight def link muttrcAliasEncEmail Identifier -highlight def link muttrcAliasParens Type -highlight def link muttrcSetNumAssignment Number highlight def link muttrcSetBoolAssignment Boolean highlight def link muttrcSetQuadAssignment Boolean -highlight def link muttrcSetStrAssignment String -highlight def link muttrcEmail Special -highlight def link muttrcVariableInner Special -highlight def link muttrcEscapedVariable String -highlight def link muttrcHeader Type -highlight def link muttrcKeySpecial SpecialChar -highlight def link muttrcKey Type -highlight def link muttrcKeyName SpecialChar + +highlight def link muttrcComment Comment + +highlight def link muttrcAlternatesLine Error +highlight def link muttrcBadAction Error +highlight def link muttrcBindFunction Error +highlight def link muttrcBindMenuList Error +highlight def link muttrcColorBG Error +highlight def link muttrcColorBGH Error +highlight def link muttrcColorBGI Error +highlight def link muttrcColorContext Error +highlight def link muttrcColorFG Error +highlight def link muttrcColorFGH Error +highlight def link muttrcColorFGI Error +highlight def link muttrcColorLine Error +highlight def link muttrcFormatErrors Error +highlight def link muttrcGroupLine Error +highlight def link muttrcListsLine Error +highlight def link muttrcPattern Error +highlight def link muttrcSubscribeLine Error +highlight def link muttrcUnColorLine Error +highlight def link muttrcVarDeprecatedBool Error +highlight def link muttrcVarDeprecatedQuad Error +highlight def link muttrcVarDeprecatedStr Error + +highlight def link muttrcAliasEncEmail Identifier +highlight def link muttrcAliasKey Identifier +highlight def link muttrcColorCompose Identifier +highlight def link muttrcColorComposeField Identifier +highlight def link muttrcColorContextH Identifier +highlight def link muttrcColorContextI Identifier +highlight def link muttrcColorField Identifier +highlight def link muttrcMenu Identifier +highlight def link muttrcSimplePat Identifier +highlight def link muttrcUnAliasKey Identifier +highlight def link muttrcUnColorIndex Identifier highlight def link muttrcVarBool Identifier -highlight def link muttrcVarQuad Identifier highlight def link muttrcVarNum Identifier +highlight def link muttrcVarQuad Identifier highlight def link muttrcVarStr Identifier -highlight def link muttrcMenu Identifier + highlight def link muttrcCommand Keyword -highlight def link muttrcMacroDescr String + highlight def link muttrcAction Macro -highlight def link muttrcBadAction Error -highlight def link muttrcBindFunction Error -highlight def link muttrcBindMenuList Error +highlight def link muttrcAliasGroupName Macro highlight def link muttrcFunction Macro -highlight def link muttrcGroupKeyword muttrcCommand -highlight def link muttrcGroupLine Error -highlight def link muttrcSubscribeKeyword muttrcCommand -highlight def link muttrcSubscribeLine Error -highlight def link muttrcListsKeyword muttrcCommand -highlight def link muttrcListsLine Error +highlight def link muttrcGroupDef Macro +highlight def link muttrcSimplePatString Macro + +highlight def link muttrcMonoAttrib muttrcColor + highlight def link muttrcAlternateKeyword muttrcCommand -highlight def link muttrcAlternatesLine Error highlight def link muttrcAttachmentsLine muttrcCommand -highlight def link muttrcAttachmentsFlag Type -highlight def link muttrcAttachmentsMimeType String -highlight def link muttrcColorLine Error -highlight def link muttrcColorContext Error -highlight def link muttrcColorContextI Identifier -highlight def link muttrcColorContextH Identifier highlight def link muttrcColorKeyword muttrcCommand -highlight def link muttrcColorField Identifier -highlight def link muttrcColorCompose Identifier -highlight def link muttrcColorComposeField Identifier -highlight def link muttrcColor Type -highlight def link muttrcColorFG Error -highlight def link muttrcColorFGI Error -highlight def link muttrcColorFGH Error -highlight def link muttrcColorBG Error -highlight def link muttrcColorBGI Error -highlight def link muttrcColorBGH Error -highlight def link muttrcMonoAttrib muttrcColor +highlight def link muttrcGroupKeyword muttrcCommand +highlight def link muttrcListsKeyword muttrcCommand highlight def link muttrcMono muttrcCommand -highlight def link muttrcSimplePat Identifier -highlight def link muttrcSimplePatString Macro -highlight def link muttrcSimplePatMetas Special -highlight def link muttrcPattern Error -highlight def link muttrcUnColorLine Error -highlight def link muttrcUnColorKeyword muttrcCommand -highlight def link muttrcUnColorIndex Identifier -highlight def link muttrcShellString muttrcEscape -highlight def link muttrcRXHooks muttrcCommand -highlight def link muttrcRXHookNot Type highlight def link muttrcPatHooks muttrcCommand -highlight def link muttrcPatHookNot Type -highlight def link muttrcFormatConditionals2 Type -highlight def link muttrcIndexFormatStr muttrcString -highlight def link muttrcIndexFormatEscapes muttrcEscape -highlight def link muttrcIndexFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcAliasFormatStr muttrcString +highlight def link muttrcRXHooks muttrcCommand +highlight def link muttrcSubscribeKeyword muttrcCommand +highlight def link muttrcUnColorKeyword muttrcCommand + highlight def link muttrcAliasFormatEscapes muttrcEscape -highlight def link muttrcAttachFormatStr muttrcString highlight def link muttrcAttachFormatEscapes muttrcEscape -highlight def link muttrcAttachFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcComposeFormatStr muttrcString highlight def link muttrcComposeFormatEscapes muttrcEscape -highlight def link muttrcFolderFormatStr muttrcString highlight def link muttrcFolderFormatEscapes muttrcEscape -highlight def link muttrcFolderFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcMixFormatStr muttrcString +highlight def link muttrcGroupIndexFormatEscapes muttrcEscape +highlight def link muttrcIndexFormatEscapes muttrcEscape highlight def link muttrcMixFormatEscapes muttrcEscape -highlight def link muttrcMixFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcPGPFormatStr muttrcString -highlight def link muttrcPGPFormatEscapes muttrcEscape -highlight def link muttrcPGPFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcPGPCmdFormatStr muttrcString highlight def link muttrcPGPCmdFormatEscapes muttrcEscape -highlight def link muttrcPGPCmdFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcStatusFormatStr muttrcString +highlight def link muttrcPGPFormatEscapes muttrcEscape +highlight def link muttrcPGPTimeEscapes muttrcEscape +highlight def link muttrcQueryFormatEscapes muttrcEscape +highlight def link muttrcShellString muttrcEscape +highlight def link muttrcSidebarFormatEscapes muttrcEscape +highlight def link muttrcSmimeFormatEscapes muttrcEscape highlight def link muttrcStatusFormatEscapes muttrcEscape +highlight def link muttrcTimeEscapes muttrcEscape + +highlight def link muttrcAliasFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcAttachFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcComposeFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcFolderFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcIndexFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcMixFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcPGPCmdFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcPGPFormatConditionals muttrcFormatConditionals2 +highlight def link muttrcSmimeFormatConditionals muttrcFormatConditionals2 highlight def link muttrcStatusFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcPGPGetKeysFormatStr muttrcString -highlight def link muttrcPGPGetKeysFormatEscapes muttrcEscape + +highlight def link muttrcAddrDef muttrcGroupFlag +highlight def link muttrcRXDef muttrcGroupFlag + +highlight def link muttrcAliasFormatStr muttrcString +highlight def link muttrcAttachFormatStr muttrcString +highlight def link muttrcComposeFormatStr muttrcString +highlight def link muttrcFolderFormatStr muttrcString +highlight def link muttrcGroupIndexFormatStr muttrcString +highlight def link muttrcIndexFormatStr muttrcString +highlight def link muttrcMixFormatStr muttrcString +highlight def link muttrcPGPCmdFormatStr muttrcString +highlight def link muttrcPGPFormatStr muttrcString +highlight def link muttrcQueryFormatStr muttrcString +highlight def link muttrcSidebarFormatStr muttrcString highlight def link muttrcSmimeFormatStr muttrcString -highlight def link muttrcSmimeFormatEscapes muttrcEscape -highlight def link muttrcSmimeFormatConditionals muttrcFormatConditionals2 -highlight def link muttrcTimeEscapes muttrcEscape -highlight def link muttrcPGPTimeEscapes muttrcEscape -highlight def link muttrcStrftimeEscapes Type +highlight def link muttrcStatusFormatStr muttrcString highlight def link muttrcStrftimeFormatStr muttrcString -highlight def link muttrcFormatErrors Error +highlight def link muttrcSetNumAssignment Number + +highlight def link muttrcEmail Special +highlight def link muttrcSimplePatMetas Special +highlight def link muttrcSpecial Special +highlight def link muttrcVariableInner Special + +highlight def link muttrcAliasEncEmailNL SpecialChar +highlight def link muttrcAliasENNL SpecialChar +highlight def link muttrcAliasGroupDefNL SpecialChar +highlight def link muttrcAliasNameNL SpecialChar +highlight def link muttrcAliasNL SpecialChar highlight def link muttrcBindFunctionNL SpecialChar highlight def link muttrcBindKeyNL SpecialChar highlight def link muttrcBindMenuListNL SpecialChar -highlight def link muttrcMacroDescrNL SpecialChar -highlight def link muttrcMacroBodyNL SpecialChar -highlight def link muttrcMacroKeyNL SpecialChar -highlight def link muttrcMacroMenuListNL SpecialChar +highlight def link muttrcColorBGNL SpecialChar +highlight def link muttrcColorFGNL SpecialChar highlight def link muttrcColorMatchCountNL SpecialChar highlight def link muttrcColorNL SpecialChar highlight def link muttrcColorRXNL SpecialChar -highlight def link muttrcColorBGNL SpecialChar -highlight def link muttrcColorFGNL SpecialChar -highlight def link muttrcAliasNameNL SpecialChar -highlight def link muttrcAliasENNL SpecialChar -highlight def link muttrcAliasNL SpecialChar -highlight def link muttrcUnAliasNL SpecialChar -highlight def link muttrcAliasGroupDefNL SpecialChar -highlight def link muttrcAliasEncEmailNL SpecialChar +highlight def link muttrcEscape SpecialChar +highlight def link muttrcKeyName SpecialChar +highlight def link muttrcKeySpecial SpecialChar +highlight def link muttrcMacroBodyNL SpecialChar +highlight def link muttrcMacroDescrNL SpecialChar +highlight def link muttrcMacroKeyNL SpecialChar +highlight def link muttrcMacroMenuListNL SpecialChar highlight def link muttrcPatternNL SpecialChar -highlight def link muttrcUnColorPatNL SpecialChar +highlight def link muttrcRXChars SpecialChar +highlight def link muttrcStringNL SpecialChar +highlight def link muttrcUnAliasNL SpecialChar highlight def link muttrcUnColorAPNL SpecialChar highlight def link muttrcUnColorIndexNL SpecialChar -highlight def link muttrcStringNL SpecialChar +highlight def link muttrcUnColorPatNL SpecialChar -highlight def link muttrcVarDeprecatedBool Error -highlight def link muttrcVarDeprecatedQuad Error -highlight def link muttrcVarDeprecatedStr Error +highlight def link muttrcAttachmentsMimeType String +highlight def link muttrcEscapedVariable String +highlight def link muttrcMacroDescr String +highlight def link muttrcRXPat String +highlight def link muttrcRXString String +highlight def link muttrcRXString2 String +highlight def link muttrcSetStrAssignment String +highlight def link muttrcString String +highlight def link muttrcAliasParens Type +highlight def link muttrcAttachmentsFlag Type +highlight def link muttrcColor Type +highlight def link muttrcFormatConditionals2 Type +highlight def link muttrcGroupFlag Type +highlight def link muttrcHeader Type +highlight def link muttrcHooks Type +highlight def link muttrcKey Type +highlight def link muttrcPatHookNot Type +highlight def link muttrcRXHookNot Type +highlight def link muttrcStrftimeEscapes Type let b:current_syntax = "neomuttrc" diff --git a/runtime/syntax/netrw.vim b/runtime/syntax/netrw.vim index 83ae17445d..1f02bbef78 100644 --- a/runtime/syntax/netrw.vim +++ b/runtime/syntax/netrw.vim @@ -105,7 +105,7 @@ if !exists("did_drchip_netrwlist_syntax") " special syntax highlighting (see :he g:netrw_special_syntax) hi default link netrwCoreDump WarningMsg - hi default link netrwData DiffChange + hi default link netrwData Folded hi default link netrwHdr netrwPlain hi default link netrwLex netrwPlain hi default link netrwLib DiffChange diff --git a/runtime/syntax/nroff.vim b/runtime/syntax/nroff.vim index 3a8cf95856..5667042515 100644 --- a/runtime/syntax/nroff.vim +++ b/runtime/syntax/nroff.vim @@ -1,16 +1,9 @@ " VIM syntax file " Language: nroff/groff -" Maintainer: Pedro Alejandro López-Valencia <palopezv@gmail.com> -" URL: http://vorbote.wordpress.com/ -" Last Change: 2012 Feb 2 -" -" {{{1 Acknowledgements -" -" ACKNOWLEDGEMENTS: -" -" My thanks to Jérôme Plût <Jerome.Plut@ens.fr>, who was the -" creator and maintainer of this syntax file for several years. -" May I be as good at it as he has been. +" Maintainer: John Marshall <jmarshall@hey.com> +" Previous Maintainer: Pedro Alejandro López-Valencia <palopezv@gmail.com> +" Previous Maintainer: Jérôme Plût <Jerome.Plut@ens.fr> +" Last Change: 2021 Mar 28 " " {{{1 Todo " @@ -31,6 +24,13 @@ endif let s:cpo_save = &cpo set cpo&vim +if exists("nroff_is_groff") + let b:nroff_is_groff = 1 +endif + +syn spell toplevel +syn case match + " " {{{1 plugin settings... " @@ -48,7 +48,7 @@ endif " setlocal paragraphs+=XP " -" {{{2 Activate navigation to preporcessor sections. +" {{{2 Activate navigation to preprocessor sections. " if exists("b:preprocs_as_sections") setlocal sections=EQTSPS[\ G1GS @@ -169,9 +169,9 @@ endif " <jp /> syn region nroffEquation start=/^\.\s*EQ\>/ end=/^\.\s*EN\>/ -syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ +syn region nroffTable start=/^\.\s*TS\>/ end=/^\.\s*TE\>/ contains=@Spell syn region nroffPicture start=/^\.\s*PS\>/ end=/^\.\s*PE\>/ -syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ +syn region nroffRefer start=/^\.\s*\[\>/ end=/^\.\s*\]\>/ contains=@Spell syn region nroffGrap start=/^\.\s*G1\>/ end=/^\.\s*G2\>/ syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/ @@ -179,11 +179,11 @@ syn region nroffGremlin start=/^\.\s*GS\>/ end=/^\.\s*GE|GF\>/ " ------------------------------------------------------------ syn region nroffIgnore start=/^[.']\s*ig/ end=/^['.]\s*\./ -syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo -syn match nroffComment /^'''.*/ contains=nroffTodo +syn match nroffComment /\(^[.']\s*\)\=\\".*/ contains=nroffTodo,@Spell +syn match nroffComment /^'''.*/ contains=nroffTodo,@Spell if exists("b:nroff_is_groff") - syn match nroffComment "\\#.*$" contains=nroffTodo + syn match nroffComment "\\#.*$" contains=nroffTodo,@Spell endif syn keyword nroffTodo TODO XXX FIXME contained @@ -198,7 +198,7 @@ syn keyword nroffTodo TODO XXX FIXME contained " hi def link nroffEscChar nroffSpecialChar -hi def link nroffEscCharAr nroffSpecialChar +hi def link nroffEscCharArg nroffSpecialChar hi def link nroffSpecialChar SpecialChar hi def link nroffSpace Delimiter @@ -211,7 +211,7 @@ hi def link nroffEscPar nroffEscape hi def link nroffEscRegPar nroffEscape hi def link nroffEscArg nroffEscape hi def link nroffSize nroffEscape -hi def link nroffEscape Preproc +hi def link nroffEscape PreProc hi def link nroffIgnore Comment hi def link nroffComment Comment diff --git a/runtime/syntax/objc.vim b/runtime/syntax/objc.vim index 9d7b20ecd0..b29313a3cf 100644 --- a/runtime/syntax/objc.vim +++ b/runtime/syntax/objc.vim @@ -1,7 +1,8 @@ " Vim syntax file " Language: Objective-C " Maintainer: Kazunobu Kuriyama <kazunobu.kuriyama@gmail.com> -" Last Change: 2015 Dec 14 +" Last Change: 2020 Jun 07 +" Last Change By Maintainer: 2015 Dec 14 """ Preparation for loading ObjC stuff if exists("b:current_syntax") @@ -24,7 +25,7 @@ syn keyword objcUsefulTerm nil Nil NO YES " Preprocessor Directives syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ -syn match objcImported display contained "\(<\h[-a-zA-Z0-9_/]*\.h>\|<[a-z0-9]\+>\)" +syn match objcImported display contained "\(<\h[-+a-zA-Z0-9_/]*\.h>\|<[a-z0-9]\+>\)" syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported " ObjC Compiler Directives diff --git a/runtime/syntax/ocaml.vim b/runtime/syntax/ocaml.vim index 42913f228e..af3efd3dab 100644 --- a/runtime/syntax/ocaml.vim +++ b/runtime/syntax/ocaml.vim @@ -4,7 +4,7 @@ " Maintainers: Markus Mottl <markus.mottl@gmail.com> " Karl-Heinz Sylla <Karl-Heinz.Sylla@gmd.de> " Issac Trotts <ijtrotts@ucdavis.edu> -" URL: https://github.com/rgrinberg/vim-ocaml +" URL: https://github.com/ocaml/vim-ocaml " Last Change: " 2018 Nov 08 - Improved highlighting of operators (Maëlan) " 2018 Apr 22 - Improved support for PPX (Andrey Popp) @@ -18,14 +18,20 @@ " can be distinguished from begin/end, which is used for indentation, " and folding. (David Baelde) -" quit when a syntax file was already loaded +" Quit when a syntax file was already loaded if exists("b:current_syntax") && b:current_syntax == "ocaml" finish endif +let s:keepcpo = &cpo +set cpo&vim + " ' can be used in OCaml identifiers setlocal iskeyword+=' +" ` is part of the name of polymorphic variants +setlocal iskeyword+=` + " OCaml is case sensitive. syn case match @@ -123,7 +129,7 @@ syn region ocamlSig matchgroup=ocamlSigEncl start="\<sig\>" matchgroup=ocamlSi syn region ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr " "open" -syn region ocamlNone matchgroup=ocamlKeyword start="\<open\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\( *\. *\u\(\w\|'\)*\)*\>" contains=@ocamlAllErrs,ocamlComment +syn match ocamlKeyword "\<open\>" skipwhite skipempty nextgroup=ocamlFullMod " "include" syn match ocamlKeyword "\<include\>" skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod @@ -225,7 +231,18 @@ syn match ocamlStar "*" syn match ocamlAngle "<" syn match ocamlAngle ">" " Custom indexing operators: -syn match ocamlIndexingOp "\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\(()\|\[]\|{}\)\(<-\)\?" +syn region ocamlIndexing matchgroup=ocamlIndexingOp + \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*(" + \ end=")\(\_s*<-\)\?" + \ contains=ALLBUT,@ocamlContained,ocamlParenErr +syn region ocamlIndexing matchgroup=ocamlIndexingOp + \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*\[" + \ end="]\(\_s*<-\)\?" + \ contains=ALLBUT,@ocamlContained,ocamlBrackErr +syn region ocamlIndexing matchgroup=ocamlIndexingOp + \ start="\.[~?!:|&$%=>@^/*+-][~?!.:|&$%<=>@^*/+-]*\_s*{" + \ end="}\(\_s*<-\)\?" + \ contains=ALLBUT,@ocamlContained,ocamlBraceErr " Extension operators (has to be declared before regular infix operators): syn match ocamlExtensionOp "#[#~?!.:|&$%<=>@^*/+-]\+" " Infix and prefix operators: @@ -283,7 +300,6 @@ syn sync match ocamlSigSync grouphere ocamlSig "\<sig\>" syn sync match ocamlSigSync groupthere ocamlSig "\<end\>" " Define the default highlighting. -" Only when an item doesn't have highlighting yet hi def link ocamlBraceErr Error hi def link ocamlBrackErr Error @@ -308,14 +324,17 @@ hi def link ocamlModPath Include hi def link ocamlObject Include hi def link ocamlModule Include hi def link ocamlModParam1 Include +hi def link ocamlGenMod Include hi def link ocamlModType Include hi def link ocamlMPRestr3 Include hi def link ocamlFullMod Include +hi def link ocamlFuncWith Include +hi def link ocamlModParam Include hi def link ocamlModTypeRestr Include hi def link ocamlWith Include hi def link ocamlMTDef Include -hi def link ocamlSigEncl ocamlModule -hi def link ocamlStructEncl ocamlModule +hi def link ocamlSigEncl ocamlModule +hi def link ocamlStructEncl ocamlModule hi def link ocamlScript Include @@ -326,24 +345,25 @@ hi def link ocamlModPreRHS Keyword hi def link ocamlMPRestr2 Keyword hi def link ocamlKeyword Keyword hi def link ocamlMethod Include +hi def link ocamlArrow Keyword hi def link ocamlKeyChar Keyword hi def link ocamlAnyVar Keyword hi def link ocamlTopStop Keyword -hi def link ocamlRefAssign ocamlKeyChar -hi def link ocamlEqual ocamlKeyChar -hi def link ocamlStar ocamlInfixOp -hi def link ocamlAngle ocamlInfixOp -hi def link ocamlCons ocamlInfixOp +hi def link ocamlRefAssign ocamlKeyChar +hi def link ocamlEqual ocamlKeyChar +hi def link ocamlStar ocamlInfixOp +hi def link ocamlAngle ocamlInfixOp +hi def link ocamlCons ocamlInfixOp -hi def link ocamlPrefixOp ocamlOperator -hi def link ocamlInfixOp ocamlOperator -hi def link ocamlExtensionOp ocamlOperator -hi def link ocamlIndexingOp ocamlOperator +hi def link ocamlPrefixOp ocamlOperator +hi def link ocamlInfixOp ocamlOperator +hi def link ocamlExtensionOp ocamlOperator +hi def link ocamlIndexingOp ocamlOperator if exists("ocaml_highlight_operators") hi def link ocamlInfixOpKeyword ocamlOperator - hi def link ocamlOperator Operator + hi def link ocamlOperator Operator else hi def link ocamlInfixOpKeyword Keyword endif @@ -353,7 +373,7 @@ hi def link ocamlCharacter Character hi def link ocamlNumber Number hi def link ocamlFloat Float hi def link ocamlString String -hi def link ocamlQuotedStringDelim Identifier +hi def link ocamlQuotedStringDelim Identifier hi def link ocamlLabel Identifier @@ -363,8 +383,11 @@ hi def link ocamlTodo Todo hi def link ocamlEncl Keyword -hi def link ocamlPpxEncl ocamlEncl +hi def link ocamlPpxEncl ocamlEncl let b:current_syntax = "ocaml" +let &cpo = s:keepcpo +unlet s:keepcpo + " vim: ts=8 diff --git a/runtime/syntax/opam.vim b/runtime/syntax/opam.vim new file mode 100644 index 0000000000..9ac1d41ce7 --- /dev/null +++ b/runtime/syntax/opam.vim @@ -0,0 +1,38 @@ +" Vim syntax file +" Language: OPAM - OCaml package manager +" Maintainer: Markus Mottl <markus.mottl@gmail.com> +" URL: https://github.com/ocaml/vim-ocaml +" Last Change: +" 2020 Dec 31 - Added header (Markus Mottl) + +if exists("b:current_syntax") + finish +endif + +" need %{vars}% +" env: [[CAML_LD_LIBRARY_PATH = "%{lib}%/stublibs"]] +syn keyword opamKeyword1 remove depends pin-depends depopts conflicts env packages patches version maintainer tags license homepage authors doc install author available name depexts substs synopsis description +syn match opamKeyword2 "\v(bug-reports|post-messages|ocaml-version|opam-version|dev-repo|build-test|build-doc|build)" + +syn keyword opamTodo FIXME NOTE NOTES TODO XXX contained +syn match opamComment "#.*$" contains=opamTodo,@Spell +syn match opamOperator ">\|<\|=\|<=\|>=" + +syn region opamInterpolate start=/%{/ end=/}%/ contained +syn region opamString start=/"/ end=/"/ contains=opamInterpolate +syn region opamSeq start=/\[/ end=/\]/ contains=ALLBUT,opamKeyword1,opamKeyword2 +syn region opamExp start=/{/ end=/}/ contains=ALLBUT,opamKeyword1,opamKeyword2 + +hi link opamKeyword1 Keyword +hi link opamKeyword2 Keyword + +hi link opamString String +hi link opamExp Function +hi link opamSeq Statement +hi link opamOperator Operator +hi link opamComment Comment +hi link opamInterpolate Identifier + +let b:current_syntax = "opam" + +" vim: ts=2 sw=2 diff --git a/runtime/syntax/pamconf.vim b/runtime/syntax/pamconf.vim index 10d667bdf5..29132848a9 100644 --- a/runtime/syntax/pamconf.vim +++ b/runtime/syntax/pamconf.vim @@ -1,7 +1,8 @@ " Vim syntax file " Language: pam(8) configuration file " Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2011-08-03 +" Latest Revision: 2020/08/04 +" Changes By: Haochen Tong if exists("b:current_syntax") @@ -11,23 +12,32 @@ endif let s:cpo_save = &cpo set cpo&vim -syn match pamconfService '^[[:graph:]]\+' - \ nextgroup=pamconfType, - \ pamconfServiceLineCont skipwhite +let s:has_service_field = exists("b:pamconf_has_service_field") + \ ? b:pamconf_has_service_field + \ : expand('%:t') == 'pam.conf' ? 1 : 0 + +syn match pamconfType '-\?[[:alpha:]]\+' + \ contains=pamconfTypeKeyword + \ nextgroup=pamconfControl, + \ pamconfTypeLineCont skipwhite + +syn keyword pamconfTypeKeyword contained account auth password session + +if s:has_service_field + syn match pamconfService '^[[:graph:]]\+' + \ nextgroup=pamconfType, + \ pamconfServiceLineCont skipwhite + + syn match pamconfServiceLineCont contained '\\$' + \ nextgroup=pamconfType, + \ pamconfServiceLineCont skipwhite skipnl +endif syn keyword pamconfTodo contained TODO FIXME XXX NOTE syn region pamconfComment display oneline start='#' end='$' \ contains=pamconfTodo,@Spell -syn match pamconfServiceLineCont contained '\\$' - \ nextgroup=pamconfType, - \ pamconfServiceLineCont skipwhite skipnl - -syn keyword pamconfType account auth password session - \ nextgroup=pamconfControl, - \ pamconfTypeLineCont skipwhite - syn match pamconfTypeLineCont contained '\\$' \ nextgroup=pamconfControl, \ pamconfTypeLineCont skipwhite skipnl @@ -98,7 +108,8 @@ hi def link pamconfTodo Todo hi def link pamconfComment Comment hi def link pamconfService Statement hi def link pamconfServiceLineCont Special -hi def link pamconfType Type +hi def link pamconfType Special +hi def link pamconfTypeKeyword Type hi def link pamconfTypeLineCont pamconfServiceLineCont hi def link pamconfControl Macro hi def link pamconfControlBegin Delimiter diff --git a/runtime/syntax/pamenv.vim b/runtime/syntax/pamenv.vim new file mode 100644 index 0000000000..90359daa61 --- /dev/null +++ b/runtime/syntax/pamenv.vim @@ -0,0 +1,28 @@ +" Vim syntax file +" Language: pam_env.conf(5) configuration file +" Latest Revision: 2020-05-10 + +if exists("b:current_syntax") + finish +endif + +syn keyword pamenvTodo contained TODO FIXME XXX NOTE +syn region pamenvComment start='^#' end='$' display oneline contains=pamenvTodo,@Spells + +syn match pamenvVars '^[A-Z_][A-Z_0-9]*' nextgroup=pamenvKeywords skipwhite + +syn keyword pamenvKeywords contained DEFAULT OVERRIDE nextgroup=pamenvVarEq + +syn match pamenvVarEq contained '=' nextgroup=pamenvValue,pamenvValueWithQuote + +syn match pamenvValue contained '[^ \t]*' skipwhite nextgroup=pamenvKeywords +syn region pamenvValueWithQuote contained start='"' end='"' skipwhite nextgroup=pamenvKeywords + +hi def link pamenvTodo Todo +hi def link pamenvComment Comment +hi def link pamenvKeywords Keyword +hi def link pamenvVars Identifier +hi def link pamenvValue String +hi def link pamenvValueWithQuote String + +let b:current_syntax = "pamenv" diff --git a/runtime/syntax/pascal.vim b/runtime/syntax/pascal.vim index 2a58ee43f6..3ab5c2e661 100644 --- a/runtime/syntax/pascal.vim +++ b/runtime/syntax/pascal.vim @@ -1,16 +1,16 @@ " Vim syntax file -" Language: Pascal -" Version: 2.8 -" Last Change: 2004/10/17 17:47:30 -" Maintainer: Xavier Crégut <xavier.cregut@enseeiht.fr> -" Previous Maintainer: Mario Eusebio <bio@dq.fct.unl.pt> +" Language: Pascal +" Maintainer: Doug Kearns <dougkearns@gmail.com> +" Previous Maintainers: Xavier Crégut <xavier.cregut@enseeiht.fr> +" Mario Eusebio <bio@dq.fct.unl.pt> +" Last Change: 2021 Apr 23 " Contributors: Tim Chase <tchase@csc.com>, -" Stas Grabois <stsi@vtrails.com>, -" Mazen NEIFER <mazen.neifer.2001@supaero.fr>, -" Klaus Hast <Klaus.Hast@arcor.net>, -" Austin Ziegler <austin@halostatue.ca>, -" Markus Koenig <markus@stber-koenig.de> +" Stas Grabois <stsi@vtrails.com>, +" Mazen NEIFER <mazen.neifer.2001@supaero.fr>, +" Klaus Hast <Klaus.Hast@arcor.net>, +" Austin Ziegler <austin@halostatue.ca>, +" Markus Koenig <markus@stber-koenig.de> " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -25,10 +25,10 @@ syn keyword pascalBoolean true false syn keyword pascalConditional if else then syn keyword pascalConstant nil maxint syn keyword pascalLabel case goto label -syn keyword pascalOperator and div downto in mod not of or packed with +syn keyword pascalOperator and div downto in mod not of or packed syn keyword pascalRepeat do for do repeat while to until syn keyword pascalStatement procedure function -syn keyword pascalStatement program begin end const var type +syn keyword pascalStatement program begin end const var type with syn keyword pascalStruct record syn keyword pascalType array boolean char integer file pointer real set syn keyword pascalType string text variant @@ -40,12 +40,12 @@ syn keyword pascalTodo contained TODO FIXME XXX DEBUG NOTE " 20010723az: When wanted, highlight the trailing whitespace -- this is " based on c_space_errors; to enable, use "pascal_space_errors". if exists("pascal_space_errors") - if !exists("pascal_no_trail_space_error") - syn match pascalSpaceError "\s\+$" - endif - if !exists("pascal_no_tab_space_error") - syn match pascalSpaceError " \+\t"me=e-1 - endif + if !exists("pascal_no_trail_space_error") + syn match pascalSpaceError "\s\+$" + endif + if !exists("pascal_no_tab_space_error") + syn match pascalSpaceError " \+\t"me=e-1 + endif endif @@ -98,9 +98,24 @@ if exists("pascal_symbol_operator") endif syn match pascalNumber "-\=\<\d\+\>" +if !exists("pascal_traditional") + syn match pascalHexNumber "\$\x\+\>" +endif +if exists("pascal_fpc") + syn match pascalOctNumber "&\o\+\>" + syn match pascalBinNumber "%[01]\+\>" +endif +if exists("pascal_gpc") + syn match pascalExtendedNumber "\%([2-9]\|[12]\d\|3[0-6]\)#[[:alnum:]]\+\>" +endif + syn match pascalFloat "-\=\<\d\+\.\d\+\>" syn match pascalFloat "-\=\<\d\+\.\d\+[eE]-\=\d\+\>" -syn match pascalHexNumber "\$[0-9a-fA-F]\+\>" + +if !exists("pascal_traditional") + " allow leading zeros + syn match pascalControlCharacter "#\%([01]\=\d\=\d\|2[0-4]\d\|25[0-5]\)\>" +endif if exists("pascal_no_tabs") syn match pascalShowTab "\t" @@ -142,7 +157,7 @@ if !exists("pascal_traditional") syn keyword pascalStatement interface unit uses syn keyword pascalModifier absolute assembler external far forward inline syn keyword pascalModifier interrupt near virtual - syn keyword pascalAcces private public + syn keyword pascalAccess private public strict syn keyword pascalStruct object syn keyword pascalOperator shl shr xor @@ -157,6 +172,7 @@ if !exists("pascal_traditional") syn keyword pascalType Single Double Extended Comp syn keyword pascalType PChar + syn keyword pascalPredefined self if !exists ("pascal_fpc") syn keyword pascalPredefined Result @@ -166,11 +182,11 @@ if !exists("pascal_traditional") syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError syn keyword pascalStatement fail otherwise operator syn keyword pascalDirective popstack - syn keyword pascalPredefined self syn keyword pascalType ShortString AnsiString WideString endif if exists("pascal_gpc") + syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError syn keyword pascalType SmallInt syn keyword pascalType AnsiChar syn keyword pascalType PAnsiChar @@ -178,6 +194,8 @@ if !exists("pascal_traditional") if exists("pascal_delphi") syn region pascalComment start="//" end="$" contains=pascalTodo,pascalSpaceError + syn region pascalDocumentation start="///" end="$" contains=pascalTodo,pascalSpaceError + syn region pascalDocumentation start="{!" end="}" contains=pascalTodo,pascalSpaceError syn keyword pascalType SmallInt Int64 syn keyword pascalType Real48 Currency syn keyword pascalType AnsiChar WideChar @@ -192,11 +210,11 @@ if !exists("pascal_traditional") syn keyword pascalStatement initialization finalization uses exports syn keyword pascalStatement property out resourcestring threadvar syn keyword pascalModifier contains - syn keyword pascalModifier overridden reintroduce abstract + syn keyword pascalModifier overridden reintroduce abstract sealed syn keyword pascalModifier override export dynamic name message syn keyword pascalModifier dispid index stored default nodefault readonly syn keyword pascalModifier writeonly implements overload requires resident - syn keyword pascalAcces protected published automated + syn keyword pascalAccess protected published automated syn keyword pascalDirective register pascal cvar cdecl stdcall safecall syn keyword pascalOperator as is endif @@ -319,37 +337,43 @@ endif " Define the default highlighting. " Only when an item doesn't have highlighting yet -hi def link pascalAcces pascalStatement +hi def link pascalAccess pascalStatement hi def link pascalBoolean Boolean hi def link pascalComment Comment -hi def link pascalConditional Conditional +hi def link pascalDocumentation Comment +hi def link pascalConditional Conditional hi def link pascalConstant Constant -hi def link pascalDelimiter Identifier -hi def link pascalDirective pascalStatement -hi def link pascalException Exception -hi def link pascalFloat Float +hi def link pascalControlCharacter Character +hi def link pascalDelimiter Identifier +hi def link pascalDirective pascalStatement +hi def link pascalException Exception +hi def link pascalFloat Float hi def link pascalFunction Function -hi def link pascalLabel Label +hi def link pascalLabel Label hi def link pascalMatrixDelimiter Identifier hi def link pascalModifier Type hi def link pascalNumber Number +hi def link pascalExtendedNumber Number +hi def link pascalBinNumber pascalNumber +hi def link pascalHexNumber pascalNumber +hi def link pascalOctNumber pascalNumber hi def link pascalOperator Operator -hi def link pascalPredefined pascalStatement +hi def link pascalPredefined pascalStatement hi def link pascalPreProc PreProc hi def link pascalRepeat Repeat -hi def link pascalSpaceError Error -hi def link pascalStatement Statement +hi def link pascalSpaceError Error +hi def link pascalStatement Statement hi def link pascalString String -hi def link pascalStringEscape Special +hi def link pascalStringEscape Special hi def link pascalStringEscapeGPC Special -hi def link pascalStringError Error +hi def link pascalStringError Error hi def link pascalStruct pascalStatement hi def link pascalSymbolOperator pascalOperator -hi def link pascalTodo Todo -hi def link pascalType Type -hi def link pascalUnclassified pascalStatement +hi def link pascalTodo Todo +hi def link pascalType Type +hi def link pascalUnclassified pascalStatement " hi def link pascalAsm Assembler -hi def link pascalError Error +hi def link pascalError Error hi def link pascalAsmKey pascalStatement hi def link pascalShowTab Error @@ -357,4 +381,4 @@ hi def link pascalShowTab Error let b:current_syntax = "pascal" -" vim: ts=8 sw=2 +" vim: nowrap sw=2 sts=2 ts=8 noet: diff --git a/runtime/syntax/pbtxt.vim b/runtime/syntax/pbtxt.vim new file mode 100644 index 0000000000..92a75560ef --- /dev/null +++ b/runtime/syntax/pbtxt.vim @@ -0,0 +1,44 @@ +" Vim syntax file +" Language: Protobuf Text Format +" Maintainer: Lakshay Garg <lakshayg@outlook.in> +" Last Change: 2020 Nov 17 +" Homepage: https://github.com/lakshayg/vim-pbtxt + +if exists("b:current_syntax") + finish +endif + +let s:cpo_save = &cpo +set cpo&vim + +syn case ignore + +syn keyword pbtxtTodo TODO FIXME contained +syn keyword pbtxtBool true false contained + +syn match pbtxtInt display "\<\(0\|[1-9]\d*\)\>" +syn match pbtxtHex display "\<0[xX]\x\+\>" +syn match pbtxtFloat display "\(0\|[1-9]\d*\)\=\.\d*" +syn match pbtxtMessage display "^\s*\w\+\s*{"me=e-1 +syn match pbtxtField display "^\s*\w\+:"me=e-1 +syn match pbtxtEnum display ":\s*\a\w\+"ms=s+1 contains=pbtxtBool +syn region pbtxtString start=+"+ skip=+\\"+ end=+"+ contains=@Spell +syn region pbtxtComment start="#" end="$" keepend contains=pbtxtTodo,@Spell + +hi def link pbtxtTodo Todo +hi def link pbtxtBool Boolean +hi def link pbtxtInt Number +hi def link pbtxtHex Number +hi def link pbtxtFloat Float +hi def link pbtxtMessage Structure +hi def link pbtxtField Identifier +hi def link pbtxtEnum Define +hi def link pbtxtString String +hi def link pbtxtComment Comment + +let b:current_syntax = "pbtxt" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: nowrap sw=2 sts=2 ts=8 noet diff --git a/runtime/syntax/perl.vim b/runtime/syntax/perl.vim index 6ac28f6915..f4f9520de5 100644 --- a/runtime/syntax/perl.vim +++ b/runtime/syntax/perl.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: Perl 5 " Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl/tree/master -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2017-09-12 +" Homepage: https://github.com/vim-perl/vim-perl/tree/master +" Bugs/requests: https://github.com/vim-perl/vim-perl/issues +" Last Change: 2020 Apr 15 " Contributors: Andy Lester <andy@petdance.com> " Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> " Lukas Mai <l.mai.web.de> diff --git a/runtime/syntax/perl6.vim b/runtime/syntax/perl6.vim deleted file mode 100644 index 3bcd9ff0e9..0000000000 --- a/runtime/syntax/perl6.vim +++ /dev/null @@ -1,2242 +0,0 @@ -" Vim syntax file -" Language: Perl 6 -" Maintainer: vim-perl <vim-perl@googlegroups.com> -" Homepage: http://github.com/vim-perl/vim-perl/tree/master -" Bugs/requests: http://github.com/vim-perl/vim-perl/issues -" Last Change: 2013-07-21 - -" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org> -" Moritz Lenz <moritz@faui2k3.org> -" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> -" -" This is a big undertaking. Perl 6 is the sort of language that only Perl -" can parse. But I'll do my best to get vim to. -" -" You can associate the extension ".pl" with the filetype "perl6" by setting -" autocmd BufNewFile,BufRead *.pl setf perl6 -" in your ~/.vimrc. But that will infringe on Perl 5, so you might want to -" put a modeline near the beginning or end of your Perl 6 files instead: -" # vim: filetype=perl6 - -" TODO: -" * Deal with s:Perl5// -" * m:s// is a match, not a substitution -" * Make these highlight as strings, not operators: -" <==> <=:=> <===> <=~> <« »> «>» «<» -" * Allow more keywords to match as function calls(leave() is export(), etc) -" * Optimization: use nextgroup instead of lookaround (:help syn-nextgroup) -" * Fix s''' substitutions being matched as package names -" * Match s/// and m/// better, so things like "$s/" won't match -" * Add more support for folding (:help syn-fold) -" * Add more syntax syncing hooks (:help syn-sync) -" * Q//: -" :to, :heredoc -" interpolate \q:s{$scalar} (though the spec isn't very clear on it) -" -" Impossible TODO?: -" * Unspace -" * Unicode bracketing characters for quoting (there are so many) -" * Various tricks depending on context. I.e. we can't know when Perl -" expects «*» to be a string or a hyperoperator. The latter is presumably -" more common, so that's what we assume. -" * Selective highlighting of Pod formatting codes with the :allow option -" * Arbitrary number, order, and negation of adverbs to Q//, q//, qq//. -" Currently only the first adverb is considered significant. Anything -" more would require an exponential amount of regexes, making this -" already slow syntax file even slower. -" -" If you want to have Pir code inside Q:PIR// strings highlighted, do: -" let perl6_embedded_pir=1 -" -" The above requires pir.vim, which you can find in Parrot's repository: -" https://svn.parrot.org/parrot/trunk/editor/ -" -" Some less than crucial things have been made optional to speed things up. -" Look at the comments near the if/else branches in this file to see exactly -" which features are affected. "perl6_extended_all" enables everything. -" -" The defaults are: -" -" unlet perl6_extended_comments -" unlet perl6_extended_q -" unlet perl6_extended_all - -" quit when a syntax file was already loaded -if exists("b:current_syntax") - finish -endif -let s:keepcpo= &cpo -set cpo&vim - -" identifiers -syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*" - -" This is used in the for loops below -" Don't use the "syn keyword" construct because that always has higher -" priority than matches/regions, so the words can't be autoquoted with -" the "=>" and "p5=>" operators. All the lookaround stuff is to make sure -" we don't match them as part of some other identifier. -let s:before_keyword = " display \"\\%(\\k\\|\\K\\@<=[-']\\)\\@<!\\%(" -let s:after_keyword = "\\)\\%(\\k\\|[-']\\K\\@=\\)\\@!\"" - -" Billions of keywords -let s:keywords = { - \ "p6Attention": [ - \ "ACHTUNG ATTN ATTENTION FIXME NB TODO TBD WTF XXX NOTE", - \ ], - \ "p6DeclareRoutine": [ - \ "macro sub submethod method multi proto only rule token regex category", - \ ], - \ "p6Module": [ - \ "module class role package enum grammar slang subset", - \ ], - \ "p6Variable": [ - \ "self", - \ ], - \ "p6Include": [ - \ "use require", - \ ], - \ "p6Conditional": [ - \ "if else elsif unless", - \ ], - \ "p6VarStorage": [ - \ "let my our state temp has constant", - \ ], - \ "p6Repeat": [ - \ "for loop repeat while until gather given", - \ ], - \ "p6FlowControl": [ - \ "take do when next last redo return contend maybe defer", - \ "default exit make continue break goto leave async lift", - \ ], - \ "p6TypeConstraint": [ - \ "is as but trusts of returns handles where augment supersede", - \ ], - \ "p6ClosureTrait": [ - \ "BEGIN CHECK INIT START FIRST ENTER LEAVE KEEP", - \ "UNDO NEXT LAST PRE POST END CATCH CONTROL TEMP", - \ ], - \ "p6Exception": [ - \ "die fail try warn", - \ ], - \ "p6Property": [ - \ "prec irs ofs ors export deep binary unary reparsed rw parsed cached", - \ "readonly defequiv will ref copy inline tighter looser equiv assoc", - \ "required", - \ ], - \ "p6Number": [ - \ "NaN Inf", - \ ], - \ "p6Pragma": [ - \ "oo fatal", - \ ], - \ "p6Type": [ - \ "Object Any Junction Whatever Capture Match", - \ "Signature Proxy Matcher Package Module Class", - \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag", - \ "Pair List Seq Range Set Bag Mapping Void Undef", - \ "Failure Exception Code Block Routine Sub Macro", - \ "Method Submethod Regex Str Blob Char Byte", - \ "Codepoint Grapheme StrPos StrLen Version Num", - \ "Complex num complex Bit bit bool True False", - \ "Increasing Decreasing Ordered Callable AnyChar", - \ "Positional Associative Ordering KeyExtractor", - \ "Comparator OrderingPair IO KitchenSink Role", - \ "Int int int1 int2 int4 int8 int16 int32 int64", - \ "Rat rat rat1 rat2 rat4 rat8 rat16 rat32 rat64", - \ "Buf buf buf1 buf2 buf4 buf8 buf16 buf32 buf64", - \ "UInt uint uint1 uint2 uint4 uint8 uint16 uint32", - \ "uint64 Abstraction utf8 utf16 utf32", - \ ], - \ "p6Operator": [ - \ "div x xx mod also leg cmp before after eq ne le lt", - \ "gt ge eqv ff fff and andthen Z X or xor", - \ "orelse extra m mm rx s tr", - \ ], -\ } - -for [group, words] in items(s:keywords) - let s:words_space = join(words, " ") - let s:temp = split(s:words_space) - let s:words = join(s:temp, "\\|") - exec "syn match ". group ." ". s:before_keyword . s:words . s:after_keyword -endfor -unlet s:keywords s:words_space s:temp s:words - -" More operators -" Don't put a "\+" at the end of the character class. That makes it so -" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil, -" among other things -syn match p6Operator display "[-+/*~?|=^!%&,<>.;\\]" -syn match p6Operator display "\%(:\@<!::\@!\|::=\|\.::\)" -" these require whitespace on the left side -syn match p6Operator display "\%(\s\|^\)\@<=\%(xx=\|p5=>\)" -" "i" requires a digit to the left, and no keyword char to the right -syn match p6Operator display "\d\@<=i\k\@!" -" index overloading -syn match p6Operator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)" - -" all infix operators except nonassocative ones -let s:infix_a = [ - \ "div % mod +& +< +> \\~& ?& \\~< \\~> +| +\\^ \\~| \\~\\^ ?| ?\\^ xx x", - \ "\\~ && & also <== ==> <<== ==>> == != < <= > >= \\~\\~ eq ne lt le gt", - \ "ge =:= === eqv before after \\^\\^ min max \\^ff ff\\^ \\^ff\\^", - \ "\\^fff fff\\^ \\^fff\\^ fff ff ::= := \\.= => , : p5=> Z minmax", - \ "\\.\\.\\. and andthen or orelse xor \\^ += -= /= \\*= \\~= //= ||=", - \ "+ - \\*\\* \\* // / \\~ || |", -\ ] -" nonassociative infix operators -let s:infix_n = "but does <=> leg cmp \\.\\. \\.\\.\\^\\^ \\^\\.\\. \\^\\.\\.\\^" - -let s:infix_a_long = join(s:infix_a, " ") -let s:infix_a_words = split(s:infix_a_long) -let s:infix_a_pattern = join(s:infix_a_words, "\\|") - -let s:infix_n_words = split(s:infix_n) -let s:infix_n_pattern = join(s:infix_n_words, "\\|") - -let s:both = [s:infix_a_pattern, s:infix_n_pattern] -let s:infix = join(s:both, "\\|") - -let s:infix_assoc = "!\\?\\%(" . s:infix_a_pattern . "\\)" -let s:infix = "!\\?\\%(" . s:infix . "\\)" - -unlet s:infix_a s:infix_a_long s:infix_a_words s:infix_a_pattern -unlet s:infix_n s:infix_n_pattern s:both - -" [+] reduce -exec "syn match p6ReduceOp display \"\\k\\@<!\\[[R\\\\]\\?!\\?". s:infix_assoc ."]\\%(«\\|<<\\)\\?\"" -unlet s:infix_assoc - -" Reverse and cross operators (Rop, Xop) -exec "syn match p6ReverseCrossOp display \"[RX]". s:infix ."\"" - -" q() or whatever() is always a function call -syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*(\@=" - -" basically all builtins that can be followed by parentheses -let s:routines = [ - \ "eager hyper substr index rindex grep map sort join lines hints chmod", - \ "split reduce min max reverse truncate zip cat roundrobin classify", - \ "first sum keys values pairs defined delete exists elems end kv any", - \ "all one wrap shape key value name pop push shift splice unshift floor", - \ "ceiling abs exp log log10 rand sign sqrt sin cos tan round strand", - \ "roots cis unpolar polar atan2 pick chop p5chop chomp p5chomp lc", - \ "lcfirst uc ucfirst capitalize normalize pack unpack quotemeta comb", - \ "samecase sameaccent chars nfd nfc nfkd nfkc printf sprintf caller", - \ "evalfile run runinstead nothing want bless chr ord gmtime time eof", - \ "localtime gethost getpw chroot getlogin getpeername kill fork wait", - \ "perl graphs codes bytes clone print open read write readline say seek", - \ "close opendir readdir slurp pos fmt vec link unlink symlink uniq pair", - \ "asin atan sec cosec cotan asec acosec acotan sinh cosh tanh asinh", - \ "acos acosh atanh sech cosech cotanh sech acosech acotanh asech ok", - \ "plan_ok dies_ok lives_ok skip todo pass flunk force_todo use_ok isa_ok", - \ "diag is_deeply isnt like skip_rest unlike cmp_ok eval_dies_ok nok_error", - \ "eval_lives_ok approx is_approx throws_ok version_lt plan eval succ pred", - \ "times nonce once signature new connect operator undef undefine sleep", - \ "from to infix postfix prefix circumfix postcircumfix minmax lazy count", - \ "unwrap getc pi e context void quasi body each contains rewinddir subst", - \ "can isa flush arity assuming rewind callwith callsame nextwith nextsame", - \ "attr eval_elsewhere none srand trim trim_start trim_end lastcall WHAT", - \ "WHERE HOW WHICH VAR WHO WHENCE ACCEPTS REJECTS does not true iterator by", - \ "re im invert flip", -\ ] - -" we want to highlight builtins like split() though, so this comes afterwards -" TODO: check if this would be faster as one big regex -let s:words_space = join(s:routines, " ") -let s:temp = split(s:words_space) -let s:words = join(s:temp, "\\|") -exec "syn match p6Routine ". s:before_keyword . s:words . s:after_keyword -unlet s:before_keyword s:after_keyword s:words_space s:temp s:words s:routines - -" packages, must come after all the keywords -syn match p6Normal display "\%(::\)\@<=\K\%(\k\|[-']\K\@=\)*" -syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*\%(::\)\@=" - -" some standard packages -syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Order\%(::Same\|::Increase\|::Decrease\)\?\)\%(\k\|[-']\K\@=\)\@!" -syn match p6Type display "\%(::\|\k\|\K\@<=[-']\)\@<!\%(Bool\%(::True\|::False\)\?\)\%(\k\|[-']\K\@=\)\@!" - - -syn match p6Shebang display "\%^#!.*" -syn match p6BlockLabel display "\%(^\s*\)\@<=\h\w*\s*::\@!\_s\@=" -syn match p6Number display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<!\%([eE]_\@!+\?\%(\d\|_\)\+\)\?_\@<!" -syn match p6Float display "\k\@<!_\@!\%(\d\|__\@!\)\+_\@<![eE]_\@!-\%(\d\|_\)\+" -syn match p6Float display "\k\@<!_\@<!\%(\d\|__\@!\)*_\@<!\.\@<!\._\@!\.\@!\a\@!\%(\d\|_\)\+_\@<!\%([eE]_\@!\%(\d\|_\)\+\)\?" - -syn match p6NumberBase display "[obxd]" contained -syn match p6Number display "\<0\%(o[0-7][0-7_]*\)\@=" nextgroup=p6NumberBase -syn match p6Number display "\<0\%(b[01][01_]*\)\@=" nextgroup=p6NumberBase -syn match p6Number display "\<0\%(x\x[[:xdigit:]_]*\)\@=" nextgroup=p6NumberBase -syn match p6Number display "\<0\%(d\d[[:digit:]_]*\)\@=" nextgroup=p6NumberBase -syn match p6Number display "\%(\<0o\)\@<=[0-7][0-7_]*" -syn match p6Number display "\%(\<0b\)\@<=[01][01_]*" -syn match p6Number display "\%(\<0x\)\@<=\x[[:xdigit:]_]*" -syn match p6Number display "\%(\<0d\)\@<=\d[[:digit:]_]*" - -syn match p6Version display "\<v\d\@=" nextgroup=p6VersionNum -syn match p6VersionNum display "\d\+" nextgroup=p6VersionDot contained -syn match p6VersionDot display "\.\%(\d\|\*\)\@=" nextgroup=p6VersionNum contained - -" try to distinguish the "is" function from the "is" trail auxiliary -syn match p6Routine display "\%(\%(\S\k\@<!\|^\)\s*\)\@<=is\>" - -" does is a type constraint sometimes -syn match p6TypeConstraint display "does\%(\s*\%(\k\|[-']\K\@=\)\)\@=" - -" int is a type sometimes -syn match p6Type display "\<int\>\%(\s*(\|\s\+\d\)\@!" - -" these Routine names are also Properties, if preceded by "is" -syn match p6Property display "\%(is\s\+\)\@<=\%(signature\|context\|also\|shape\)" - -" The sigil in ::*Package -syn match p6PackageTwigil display "\%(::\)\@<=\*" - -" $<match> -syn region p6MatchVarSigil - \ matchgroup=p6Variable - \ start="\$\%(<<\@!\)\@=" - \ end=">\@<=" - \ contains=p6MatchVar - -syn region p6MatchVar - \ matchgroup=p6Twigil - \ start="<" - \ end=">" - \ contained - -" Contextualizers -syn match p6Context display "\<\%(item\|list\|slice\|hash\)\>" -syn match p6Context display "\%(\$\|@\|%\|&\|@@\)(\@=" - -" the "$" placeholder in "$var1, $, var2 = @list" -syn match p6Placeholder display "\%(,\s*\)\@<=\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!" -syn match p6Placeholder display "\$\%(\K\|\%([.^*?=!~]\|:\@<!::\@!\)\)\@!\%(,\s*\)\@=" - -" Quoting - -" one cluster for every quote adverb -syn cluster p6Interp_s - \ add=p6InterpScalar -syn cluster p6Interp_scalar - \ add=p6InterpScalar - -syn cluster p6Interp_a - \ add=p6InterpArray -syn cluster p6Interp_array - \ add=p6InterpArray - -syn cluster p6Interp_h - \ add=p6InterpHash -syn cluster p6Interp_hash - \ add=p6InterpHash - -syn cluster p6Interp_f - \ add=p6InterpFunction -syn cluster p6Interp_f - \ add=p6InterpFunction - -syn cluster p6Interp_c - \ add=p6InterpClosure -syn cluster p6Interp_closure - \ add=p6InterpClosure - - -if exists("perl6_extended_q") || exists("perl6_extended_all") - syn cluster p6Interp_ww - \ add=p6StringSQ - \ add=p6StringDQ - syn cluster p6Interp_quotewords - \ add=p6StringSQ - \ add=p6StringDQ -endif - -syn cluster p6Interp_q - \ add=p6EscQQ - \ add=p6EscBackSlash -syn cluster p6Interp_single - \ add=p6EscQQ - \ add=p6EscBackSlash - -syn cluster p6Interp_b - \ add=@p6Interp_q - \ add=p6Escape - \ add=p6EscOpenCurly - \ add=p6EscCodePoint - \ add=p6EscHex - \ add=p6EscOct - \ add=p6EscOctOld - \ add=p6EscNull -syn cluster p6Interp_backslash - \ add=@p6Interp_q - \ add=p6Escape - \ add=p6EscOpenCurly - \ add=p6EscCodePoint - \ add=p6EscHex - \ add=p6EscOct - \ add=p6EscOctOld - \ add=p6EscNull - -syn cluster p6Interp_qq - \ add=@p6Interp_scalar - \ add=@p6Interp_array - \ add=@p6Interp_hash - \ add=@p6Interp_function - \ add=@p6Interp_closure - \ add=@p6Interp_backslash -syn cluster p6Interp_double - \ add=@p6Interp_scalar - \ add=@p6Interp_array - \ add=@p6Interp_hash - \ add=@p6Interp_function - \ add=@p6Interp_closure - \ add=@p6Interp_backslash - -syn region p6InterpScalar - \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" - \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\|\%(\d\+\|!\|/\|¢\)\)\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend - -syn region p6InterpScalar - \ matchgroup=p6Context - \ start="\$\ze()\@!" - \ skip="([^)]*)" - \ end=")\zs" - \ contained - \ contains=TOP - -syn region p6InterpArray - \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend - -syn region p6InterpArray - \ matchgroup=p6Context - \ start="@\ze()\@!" - \ start="@@\ze()\@!" - \ skip="([^)]*)" - \ end=")\zs" - \ contained - \ contains=TOP - -syn region p6InterpHash - \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\)\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend - -syn region p6InterpHash - \ matchgroup=p6Context - \ start="%\ze()\@!" - \ skip="([^)]*)" - \ end=")\zs" - \ contained - \ contains=TOP - -syn region p6InterpFunction - \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\@=\)\?\K\%(\k\|[-']\K\@=\)*\%(\.\%(\K\%(\k\|[-']\K\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend - -syn region p6InterpFunction - \ matchgroup=p6Context - \ start="&\ze()\@!" - \ skip="([^)]*)" - \ end=")\zs" - \ contained - \ contains=TOP - -syn region p6InterpClosure - \ start="\\\@<!{}\@!" - \ skip="{[^}]*}" - \ end="}" - \ contained - \ contains=TOP - \ keepend - -" generic escape -syn match p6Escape display "\\\S" contained - -" escaped closing delimiters -syn match p6EscQuote display "\\'" contained -syn match p6EscDoubleQuote display "\\\"" contained -syn match p6EscCloseAngle display "\\>" contained -syn match p6EscCloseFrench display "\\»" contained -syn match p6EscBackTick display "\\`" contained -syn match p6EscForwardSlash display "\\/" contained -syn match p6EscVerticalBar display "\\|" contained -syn match p6EscExclamation display "\\!" contained -syn match p6EscComma display "\\," contained -syn match p6EscDollar display "\\\$" contained -syn match p6EscCloseCurly display "\\}" contained -syn match p6EscCloseBracket display "\\\]" contained - -" misc escapes -syn match p6EscOctOld display "\\\d\{1,3}" contained -syn match p6EscNull display "\\0\d\@!" contained -syn match p6EscCodePoint display "\%(\\c\)\@<=\%(\d\|\S\|\[\)\@=" contained nextgroup=p6CodePoint -syn match p6EscHex display "\%(\\x\)\@<=\%(\x\|\[\)\@=" contained nextgroup=p6HexSequence -syn match p6EscOct display "\%(\\o\)\@<=\%(\o\|\[\)\@=" contained nextgroup=p6OctSequence -syn match p6EscQQ display "\\qq" contained nextgroup=p6QQSequence -syn match p6EscOpenCurly display "\\{" contained -syn match p6EscHash display "\\#" contained -syn match p6EscBackSlash display "\\\\" contained - -syn region p6QQSequence - \ matchgroup=p6Escape - \ start="\[" - \ skip="\[[^\]]*]" - \ end="]" - \ contained - \ transparent - \ contains=@p6Interp_qq - -syn match p6CodePoint display "\%(\d\+\|\S\)" contained -syn region p6CodePoint - \ matchgroup=p6Escape - \ start="\[" - \ end="]" - \ contained - -syn match p6HexSequence display "\x\+" contained -syn region p6HexSequence - \ matchgroup=p6Escape - \ start="\[" - \ end="]" - \ contained - -syn match p6OctSequence display "\o\+" contained -syn region p6OctSequence - \ matchgroup=p6Escape - \ start="\[" - \ end="]" - \ contained - -" matches :key, :!key, :$var, :key<var>, etc -" Since we don't know in advance how the adverb ends, we use a trick. -" Consume nothing with the start pattern (\ze at the beginning), -" while capturing the whole adverb into \z1 and then putting it before -" the match start (\zs) of the end pattern. -syn region p6Adverb - \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)" - \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend - -" <words> -" FIXME: not sure how to distinguish this from the "less than" operator -" in all cases. For now, it matches if any of the following is true: -" -" * There is whitespace missing on either side of the "<", since -" people tend to put spaces around "less than" -" * It comes after "enum", "for", "any", "all", or "none" -" * It's the first or last thing on a line (ignoring whitespace) -" * It's preceded by "= " -" -" It never matches when: -" -" * Preceded by [<+~=] (e.g. <<foo>>, =<$foo>) -" * Followed by [-=] (e.g. <--, <=, <==) -syn region p6StringAngle - \ matchgroup=p6Quote - \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" - \ start="\%(\s\|[<+~=]\)\@<!<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" - \ start="[<+~=]\@<!<\%(\s\|<\|=>\|[-=]\{1,2}>\@!\)\@!" - \ start="\%(^\s*\)\@<=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" - \ start="[<+~=]\@<!<\%(\s*$\)\@=" - \ start="\%(=\s\+\)\@=<\%(<\|=>\|[-=]\{1,2}>\@!\)\@!" - \ skip="\\\@<!\\>" - \ end=">" - \ contains=p6InnerAnglesOne,p6EscBackSlash,p6EscCloseAngle - -syn region p6InnerAnglesOne - \ matchgroup=p6StringAngle - \ start="<" - \ skip="\\\@<!\\>" - \ end=">" - \ transparent - \ contained - \ contains=p6InnerAnglesOne - -" <<words>> -syn region p6StringAngles - \ matchgroup=p6Quote - \ start="<<=\@!" - \ skip="\\\@<!\\>" - \ end=">>" - \ contains=p6InnerAnglesTwo,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseAngle,p6Adverb,p6StringSQ,p6StringDQ - -syn region p6InnerAnglesTwo - \ matchgroup=p6StringAngles - \ start="<<" - \ skip="\\\@<!\\>" - \ end=">>" - \ transparent - \ contained - \ contains=p6InnerAnglesTwo - -" «words» -syn region p6StringFrench - \ matchgroup=p6Quote - \ start="«" - \ skip="\\\@<!\\»" - \ end="»" - \ contains=p6InnerFrench,@p6Interp_qq,p6Comment,p6EscHash,p6EscCloseFrench,p6Adverb,p6StringSQ,p6StringDQ - -syn region p6InnerFrench - \ matchgroup=p6StringFrench - \ start="«" - \ skip="\\\@<!\\»" - \ end="»" - \ transparent - \ contained - \ contains=p6InnerFrench - -" 'string' -syn region p6StringSQ - \ matchgroup=p6Quote - \ start="'" - \ skip="\\\@<!\\'" - \ end="'" - \ contains=@p6Interp_q,p6EscQuote - -" "string" -syn region p6StringDQ - \ matchgroup=p6Quote - \ start=+"+ - \ skip=+\\\@<!\\"+ - \ end=+"+ - \ contains=@p6Interp_qq,p6EscDoubleQuote - -" Q// and friends. - -syn match p6QuoteQ display "\%([Qq]\%(ww\|to\|[qwxsahfcb]\)\?\)\>" nextgroup=p6QPairs skipwhite skipempty -syn match p6QPairs contained transparent skipwhite skipempty nextgroup=p6StringQ,p6StringQ_PIR "\%(\_s*:!\?\K\%(\k\|[-']\K\@=\)*\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)*" - -if exists("perl6_embedded_pir") - syn include @p6PIR syntax/pir.vim -endif - -" hardcoded set of delimiters -let s:delims = [ - \ ["\\\"", "\\\"", "p6EscDoubleQuote", "\\\\\\@<!\\\\\\\""], - \ ["'", "'", "p6EscQuote", "\\\\\\@<!\\\\'"], - \ ["/", "/", "p6EscForwardSlash", "\\\\\\@<!\\\\/"], - \ ["`", "`", "p6EscBackTick", "\\\\\\@<!\\\\`"], - \ ["|", "|", "p6EscVerticalBar", "\\\\\\@<!\\\\|"], - \ ["!", "!", "p6EscExclamation", "\\\\\\@<!\\\\!"], - \ [",", ",", "p6EscComma", "\\\\\\@<!\\\\,"], - \ ["\\$", "\\$", "p6EscDollar", "\\\\\\@<!\\\\\\$"], - \ ["{", "}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}\\|{[^}]*}\\)"], - \ ["<", ">", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>\\|<[^>]*>\\)"], - \ ["«", "»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»\\|«[^»]*»\\)"], - \ ["\\\[", "]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]\\|\\[^\\]]*]\\)"], - \ ["\\s\\@<=(", ")", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)\\|([^)]*)\\)"], -\ ] - -" double and triple delimiters too -if exists("perl6_extended_q") || exists("perl6_extended_all") - call add(s:delims, ["««", "»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»\\|««\\%([^»]\\|»»\\@!\\)*»»\\)"]) - call add(s:delims, ["«««", "»»»", "p6EscCloseFrench", "\\%(\\\\\\@<!\\\\»»»\\|«««\\%([^»]\\|»\\%(»»\\)\\@!\\)*»»»\\)"]) - call add(s:delims, ["{{", "}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}\\|{{\\%([^}]\\|}}\\@!\\)*}}\\)"]) - call add(s:delims, ["{{{", "}}}", "p6EscCloseCurly", "\\%(\\\\\\@<!\\\\}}}\\|{{{\\%([^}]\\|}\\%(}}\\)\\@!\\)*}}}\\)"]) - call add(s:delims, ["\\\[\\\[", "]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]\\|\\[\\[\\%([^\\]]\\|]]\\@!\\)*]]\\)"]) - call add(s:delims, ["\\\[\\\[\\\[", "]]]", "p6EscCloseBracket", "\\%(\\\\\\@<!\\\\]]]\\|\\[\\[\\[\\%([^\\]]\\|]\\%(]]\\)\\@!\\)*]]]\\)"]) - call add(s:delims, ["\\s\\@<=((", "))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\))\\|((\\%([^)]\\|))\\@!\\)*))\\)"]) - call add(s:delims, ["\\s\\@<=(((", ")))", "p6EscCloseParen", "\\%(\\\\\\@<!\\\\)))\\|(((\\%([^)]\\|)\\%())\\)\\@!\\)*)))\\)"]) - call add(s:delims, ["\\s\\@<=<<", ">>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>\\|<<\\%([^>]\\|>>\\@!\\)*>>\\)"]) - call add(s:delims, ["\\s\\@<=<<<", ">>>", "p6EscCloseAngle", "\\%(\\\\\\@<!\\\\>>>\\|<<<\\%([^>]\\|>\\%(>>\\)\\@!\\)*>>>\\)"]) -endif - -if !exists("perl6_extended_q") && !exists("perl6_extended_all") - " simple version, no special highlighting within the string - for [start_delim, end_delim, end_group, skip] in s:delims - exec "syn region p6StringQ matchgroup=p6Quote start=\"".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=".end_group." contained" - endfor - - if exists("perl6_embedded_pir") - " highlight embedded PIR code - for [start_delim, end_delim, end_group, skip] in s:delims - exec "syn region p6StringQ_PIR matchgroup=p6Quote start=\"\\%(Q\\s*:PIR\\s*\\)\\@<=".start_delim."\" skip=\"".skip."\" end=\"".end_delim."\" contains=@p6PIR,".end_group." contained" - endfor - endif -else - let s:before = "syn region p6StringQ matchgroup=p6Quote start=\"\\%(" - let s:after = "\\%(\\_s*:!\\?\\K\\%(\\k\\|[-']\\K\\@=\\)*\\%(([^)]*)\\|\\[[^\\]]*]\\|<[^>]*>\\|«[^»]*»\\|{[^}]*}\\)\\?\\)*\\_s*\\)\\@<=" - - let s:adverbs = [ - \ ["s", "scalar"], - \ ["a", "array"], - \ ["h", "hash"], - \ ["f", "function"], - \ ["c", "closure"], - \ ["b", "backslash"], - \ ["w", "words"], - \ ["ww", "quotewords"], - \ ["x", "exec"], - \ ] - - " these can't be conjoined with q and qq (e.g. as qqq and qqqq) - let s:q_adverbs = [ - \ ["q", "single"], - \ ["qq", "double"], - \ ] - - for [start_delim, end_delim, end_group, skip] in s:delims - " Q, q, and qq with any number of (ignored) adverbs - exec s:before ."Q". s:after .start_delim."\" end=\"". end_delim ."\""." contained" - exec s:before ."q". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q"." contained" - exec s:before ."qq". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq"." contained" - - for [short, long] in s:adverbs - " Qs, qs, qqs, Qa, qa, qqa, etc, with ignored adverbs - exec s:before ."Q".short. s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained" - exec s:before ."q".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained" - exec s:before ."qq".short. s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained" - - " Q, q, and qq, with one significant adverb - exec s:before ."Q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long." contained" - for [q_short, q_long] in s:q_adverbs - exec s:before ."Q\\s*:\\%(".q_short."\\|".q_long."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".q_long." contained" - endfor - exec s:before ."q\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long." contained" - exec s:before ."qq\\s*:\\%(".short."\\|".long."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long." contained" - - for [short2, long2] in s:adverbs - " Qs, qs, qqs, Qa, qa, qqa, etc, with one significant adverb - exec s:before ."Q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".long2." contained" - for [q_short2, q_long2] in s:q_adverbs - exec s:before ."Q".short."\\s*:\\%(".q_short2."\\|".q_long2."\\)". s:after .start_delim ."\" end=\"". end_delim ."\" contains=@p6Interp_".long.",@p6Interp_".q_long2." contained" - endfor - exec s:before ."q".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_q,@p6Interp_".long.",@p6Interp_".long2." contained" - exec s:before ."qq".short."\\s*:\\%(".short2."\\|".long2."\\)". s:after .start_delim ."\" skip=\"". skip ."\" end=\"". end_delim ."\" contains=". end_group .",@p6Interp_qq,@p6Interp_".long.",@p6Interp_".long2." contained" - endfor - endfor - endfor - unlet s:before s:after s:adverbs s:q_adverbs -endif -unlet s:delims - -" Match these so something else above can't. E.g. the "q" in "role q { }" -" should not be considered a string -syn match p6Normal display "\%(\<\%(role\|grammar\|slang\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" - -" :key -syn match p6Operator display ":\@<!::\@!!\?" nextgroup=p6Key -syn match p6Key display "\k\%(\k\|[-']\K\@=\)*" contained - -" => and p5=> autoquoting -syn match p6StringP5Auto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+p5=>" -syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\%(p5\)\@<!=>" -syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*\ze\s\+=>" -syn match p6StringAuto display "\K\%(\k\|[-']\K\@=\)*p5\ze=>" - -" Hyperoperators. Needs to come after the quoting operators (<>, «», etc) -exec "syn match p6HyperOp display \"»" .s:infix."»\\?\"" -exec "syn match p6HyperOp display \"«\\?".s:infix."«\"" -exec "syn match p6HyperOp display \"»" .s:infix."«\"" -exec "syn match p6HyperOp display \"«" .s:infix. "»\"" - -exec "syn match p6HyperOp display \">>" .s:infix."\\%(>>\\)\\?\"" -exec "syn match p6HyperOp display \"\\%(<<\\)\\?".s:infix."<<\"" -exec "syn match p6HyperOp display \">>" .s:infix."<<\"" -exec "syn match p6HyperOp display \"<<" .s:infix.">>\"" -unlet s:infix - -" Regexes and grammars - -syn match p6RegexName display "\%(\<\%(regex\|rule\|token\)\s\+\)\@<=\K\%(\k\|[-']\K\@=\)*" nextgroup=p6RegexBlockCrap skipwhite skipempty -syn match p6RegexBlockCrap "[^{]*" nextgroup=p6RegexBlock skipwhite skipempty transparent contained - -syn region p6RegexBlock - \ matchgroup=p6Normal - \ start="{" - \ end="}" - \ contained - \ contains=@p6Regexen,@p6Variables - -" Perl 6 regex bits - -syn cluster p6Regexen - \ add=p6RxMeta - \ add=p6RxEscape - \ add=p6EscHex - \ add=p6EscOct - \ add=p6EscNull - \ add=p6RxAnchor - \ add=p6RxCapture - \ add=p6RxGroup - \ add=p6RxAlternation - \ add=p6RxAdverb - \ add=p6RxAdverbArg - \ add=p6RxStorage - \ add=p6RxAssertion - \ add=p6RxQuoteWords - \ add=p6RxClosure - \ add=p6RxStringSQ - \ add=p6RxStringDQ - \ add=p6Comment - -syn match p6RxMeta display contained ".\%(\k\|\s\)\@<!" -syn match p6RxAnchor display contained "[$^]" -syn match p6RxEscape display contained "\\\S" -syn match p6RxCapture display contained "[()]" -syn match p6RxAlternation display contained "|" -syn match p6RxRange display contained "\.\." - -syn region p6RxClosure - \ matchgroup=p6Normal - \ start="{" - \ end="}" - \ contained - \ containedin=p6RxClosure - \ contains=TOP -syn region p6RxGroup - \ matchgroup=p6StringSpecial2 - \ start="\[" - \ end="]" - \ contained - \ contains=@p6Regexen,@p6Variables -syn region p6RxAssertion - \ matchgroup=p6StringSpecial2 - \ start="<" - \ end=">" - \ contained - \ contains=@p6Regexen,@p6Variables,p6RxCharClass,p6RxAssertCall -syn region p6RxAssertCall - \ matchgroup=p6Normal - \ start="\%(::\|\%(\K\%(\k\|[-']\K\@=\)*\)\)\@<=(\@=" - \ end=")\@<=" - \ contained - \ contains=TOP -syn region p6RxCharClass - \ matchgroup=p6StringSpecial2 - \ start="\%(<[-!+?]\?\)\@<=\[" - \ skip="\\]" - \ end="]" - \ contained - \ contains=p6RxRange,p6RxEscape,p6EscHex,p6EscOct,p6EscNull -syn region p6RxQuoteWords - \ matchgroup=p6StringSpecial2 - \ start="< " - \ end=">" - \ contained -syn region p6RxAdverb - \ start="\ze\z(:!\?\K\%(\k\|[-']\K\@=\)*\)" - \ end="\z1\zs" - \ contained - \ contains=TOP - \ keepend -syn region p6RxAdverbArg - \ start="\%(:!\?\K\%(\k\|[-']\K\@=\)*\)\@<=(" - \ skip="([^)]*)" - \ end=")" - \ contained - \ contains=TOP -syn region p6RxStorage - \ matchgroup=p6Operator - \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@=" - \ end="$" - \ contains=TOP - \ contained - -" Perl 5 regex bits - -syn cluster p6RegexP5Base - \ add=p6RxP5Escape - \ add=p6RxP5Oct - \ add=p6RxP5Hex - \ add=p6RxP5EscMeta - \ add=p6RxP5CodePoint - \ add=p6RxP5Prop - -" normal regex stuff -syn cluster p6RegexP5 - \ add=@p6RegexP5Base - \ add=p6RxP5Quantifier - \ add=p6RxP5Meta - \ add=p6RxP5QuoteMeta - \ add=p6RxP5ParenMod - \ add=p6RxP5Verb - \ add=p6RxP5Count - \ add=p6RxP5Named - \ add=p6RxP5ReadRef - \ add=p6RxP5WriteRef - \ add=p6RxP5CharClass - \ add=p6RxP5Anchor - -" inside character classes -syn cluster p6RegexP5Class - \ add=@p6RegexP5Base - \ add=p6RxP5Posix - \ add=p6RxP5Range - -syn match p6RxP5Escape display contained "\\\S" -syn match p6RxP5CodePoint display contained "\\c\S\@=" nextgroup=p6RxP5CPId -syn match p6RxP5CPId display contained "\S" -syn match p6RxP5Oct display contained "\\\%(\o\{1,3}\)\@=" nextgroup=p6RxP5OctSeq -syn match p6RxP5OctSeq display contained "\o\{1,3}" -syn match p6RxP5Anchor display contained "[\^$]" -syn match p6RxP5Hex display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=p6RxP5HexSeq -syn match p6RxP5HexSeq display contained "\x\{1,2}" -syn region p6RxP5HexSeq - \ matchgroup=p6RxP5Escape - \ start="{" - \ end="}" - \ contained -syn region p6RxP5Named - \ matchgroup=p6RxP5Escape - \ start="\%(\\N\)\@<={" - \ end="}" - \ contained -syn match p6RxP5Quantifier display contained "\%([+*]\|(\@<!?\)" -syn match p6RxP5ReadRef display contained "\\[1-9]\d\@!" -syn match p6RxP5ReadRef display contained "\\k<\@=" nextgroup=p6RxP5ReadRefId -syn region p6RxP5ReadRefId - \ matchgroup=p6RxP5Escape - \ start="<" - \ end=">" - \ contained -syn match p6RxP5WriteRef display contained "\\g\%(\d\|{\)\@=" nextgroup=p6RxP5WriteRefId -syn match p6RxP5WriteRefId display contained "\d\+" -syn region p6RxP5WriteRefId - \ matchgroup=p6RxP5Escape - \ start="{" - \ end="}" - \ contained -syn match p6RxP5Prop display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=p6RxP5PropId -syn match p6RxP5PropId display contained "\a" -syn region p6RxP5PropId - \ matchgroup=p6RxP5Escape - \ start="{" - \ end="}" - \ contained -syn match p6RxP5Meta display contained "[(|).]" -syn match p6RxP5ParenMod display contained "(\@<=?\@=" nextgroup=p6RxP5Mod,p6RxP5ModName,p6RxP5Code -syn match p6RxP5Mod display contained "?\%(<\?=\|<\?!\|[#:|]\)" -syn match p6RxP5Mod display contained "?-\?[impsx]\+" -syn match p6RxP5Mod display contained "?\%([-+]\?\d\+\|R\)" -syn match p6RxP5Mod display contained "?(DEFINE)" -syn match p6RxP5Mod display contained "?\%(&\|P[>=]\)" nextgroup=p6RxP5ModDef -syn match p6RxP5ModDef display contained "\h\w*" -syn region p6RxP5ModName - \ matchgroup=p6StringSpecial - \ start="?'" - \ end="'" - \ contained -syn region p6RxP5ModName - \ matchgroup=p6StringSpecial - \ start="?P\?<" - \ end=">" - \ contained -syn region p6RxP5Code - \ matchgroup=p6StringSpecial - \ start="??\?{" - \ end="})\@=" - \ contained - \ contains=TOP -syn match p6RxP5EscMeta display contained "\\[?*.{}()[\]|\^$]" -syn match p6RxP5Count display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=p6RxP5CountId -syn region p6RxP5CountId - \ matchgroup=p6RxP5Escape - \ start="{" - \ end="}" - \ contained -syn match p6RxP5Verb display contained "(\@<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)" -syn region p6RxP5QuoteMeta - \ matchgroup=p6RxP5Escape - \ start="\\Q" - \ end="\\E" - \ contained - \ contains=@p6Variables,p6EscBackSlash -syn region p6RxP5CharClass - \ matchgroup=p6StringSpecial - \ start="\[\^\?" - \ skip="\\]" - \ end="]" - \ contained - \ contains=@p6RegexP5Class -syn region p6RxP5Posix - \ matchgroup=p6RxP5Escape - \ start="\[:" - \ end=":]" - \ contained -syn match p6RxP5Range display contained "-" - -" 'string' inside a regex -syn region p6RxStringSQ - \ matchgroup=p6Quote - \ start="'" - \ skip="\\\@<!\\'" - \ end="'" - \ contained - \ contains=p6EscQuote,p6EscBackSlash - -" "string" inside a regex -syn region p6RxStringDQ - \ matchgroup=p6Quote - \ start=+"+ - \ skip=+\\\@<!\\"+ - \ end=+"+ - \ contained - \ contains=p6EscDoubleQuote,p6EscBackSlash - -" $!, $var, $!var, $::var, $package::var $*::package::var, etc -" Thus must come after the matches for the "$" regex anchor, but before -" the match for the $ regex delimiter -syn cluster p6Variables - \ add=p6VarSlash - \ add=p6VarExclam - \ add=p6VarMatch - \ add=p6VarNum - \ add=p6Variable - -syn match p6VarSlash display "\$/" -syn match p6VarExclam display "\$!" -syn match p6VarMatch display "\$¢" -syn match p6VarNum display "\$\d\+" -syn match p6Variable display "\%(@@\|[@&$%]\$*\)\%(::\|\%(\%([.^*?=!~]\|:\@<!::\@!\)\K\)\|\K\)\@=" nextgroup=p6Twigil,p6VarName,p6PackageScope -syn match p6VarName display "\K\%(\k\|[-']\K\@=\)*" contained -syn match p6Twigil display "\%([.^*?=!~]\|:\@<!::\@!\)\K\@=" nextgroup=p6PackageScope,p6VarName contained -syn match p6PackageScope display "\%(\K\%(\k\|[-']\K\@=\)*\)\?::" nextgroup=p6PackageScope,p6VarName contained - -" Perl 6 regex regions - -" /foo/ -" Below some hacks to recognise the // variant. This is virtually impossible -" to catch in all cases as the / is used in so many other ways, but these -" should be the most obvious ones. -" TODO: mostly stolen from perl.vim, might need more work -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!" - \ start="^//\@!" - \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+ - \ skip="\\/" - \ end="/" - \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - -" m/foo/, mm/foo/, rx/foo/ -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!" - \ skip="\\/" - \ end="/" - \ keepend - \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - -" m!foo!, mm!foo!, rx!foo! -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!" - \ skip="\\!" - \ end="!" - \ keepend - \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum - -" m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!" - \ skip="\\\z1" - \ end="\z1" - \ keepend - \ contains=@p6Regexen,@p6Variables - -" m (foo), mm (foo), rx (foo) -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!" - \ skip="\\)" - \ end=")" - \ contains=@p6Regexen,@p6Variables - -" m[foo], mm[foo], rx[foo] -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!" - \ skip="\\]" - \ end="]" - \ contains=@p6Regexen,@p6Variables - -" m{foo}, mm{foo}, rx{foo} -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!" - \ skip="\\}" - \ end="}" - \ contains=@p6Regexen,@p6Variables - -" m<foo>, mm<foo>, rx<foo> -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!" - \ skip="\\>" - \ end=">" - \ contains=@p6Regexen,@p6Variables - -" m«foo», mm«foo», rx«foo» -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!" - \ skip="\\»" - \ end="»" - \ contains=@p6Regexen,@p6Variables - -" Substitutions - -" s/foo/bar/ -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/" - \ skip="\\/" - \ end="/"me=e-1 - \ keepend - \ contains=@p6Regexen,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - \ nextgroup=p6Substitution - -syn region p6Substitution - \ matchgroup=p6Quote - \ start="/" - \ skip="\\/" - \ end="/" - \ contained - \ keepend - \ contains=@p6Interp_qq - -" s!foo!bar! -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!" - \ skip="\\!" - \ end="!"me=e-1 - \ keepend - \ contains=@p6Regexen,p6Variable,p6VarSlash,p6VarMatch,p6VarNum - \ nextgroup=p6Substitution - -syn region p6Substitution - \ matchgroup=p6Quote - \ start="!" - \ skip="\\!" - \ end="!" - \ contained - \ keepend - \ contains=@p6Interp_qq - -" s$foo$bar$, s|foo|bar, etc -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)" - \ skip="\\\z1" - \ end="\z1"me=e-1 - \ keepend - \ contains=@p6Regexen,@p6Variables - \ nextgroup=p6Substitution - -syn region p6Substitution - \ matchgroup=p6Quote - \ start="\z([\"'`|,$]\)" - \ skip="\\\z1" - \ end="\z1" - \ contained - \ keepend - \ contains=@p6Interp_qq - -" s{foo} -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!" - \ skip="\\}" - \ end="}" - \ contains=@p6Regexen,@p6Variables - -" s[foo] -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!" - \ skip="\\]" - \ end="]" - \ contains=@p6Regexen,@p6Variables - -" s<foo> -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!" - \ skip="\\>" - \ end=">" - \ contains=@p6Regexen,@p6Variables - -" s«foo» -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!" - \ skip="\\»" - \ end="»" - \ contains=@p6Regexen,@p6Variables - -" s (foo) -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!" - \ skip="\\)" - \ end=")" - \ contains=@p6Regexen,@p6Variables - -" Perl 5 regex regions - -" m:P5// -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/" - \ skip="\\/" - \ end="/" - \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum - -" m:P5!! -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!" - \ skip="\\!" - \ end="!" - \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum - -" m:P5$$, m:P5||, etc -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)" - \ skip="\\\z1" - \ end="\z1" - \ contains=@p6RegexP5,@p6Variables - -" m:P5 () -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!" - \ skip="\\)" - \ end=")" - \ contains=@p6RegexP5,@p6Variables - -" m:P5[] -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!" - \ skip="\\]" - \ end="]" - \ contains=@p6RegexP5,@p6Variables - -" m:P5{} -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!" - \ skip="\\}" - \ end="}" - \ contains=@p6RegexP5,p6Variables - -" m:P5<> -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!" - \ skip="\\>" - \ end=">" - \ contains=@p6RegexP5,p6Variables - -" m:P5«» -syn region p6Match - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!" - \ skip="\\»" - \ end="»" - \ contains=@p6RegexP5,p6Variables - -" Transliteration - -" tr/foo/bar/, tr|foo|bar, etc -syn region p6String - \ matchgroup=p6Quote - \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)" - \ skip="\\\z1" - \ end="\z1"me=e-1 - \ contains=p6RxRange - \ nextgroup=p6Transliteration - -syn region p6Transliteration - \ matchgroup=p6Quote - \ start="\z([/\"'`|!,$]\)" - \ skip="\\\z1" - \ end="\z1" - \ contained - \ contains=@p6Interp_qq - -" Comments - -" normal end-of-line comment -syn match p6Comment display "#.*" contains=p6Attention - -" Multiline comments. Arbitrary numbers of opening brackets are allowed, -" but we only define regions for 1 to 3 -syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#(" - \ skip="([^)]*)" - \ end=")" - \ matchgroup=p6Error - \ start="^#(" - \ contains=p6Attention,p6Comment -syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#\[" - \ skip="\[[^\]]*]" - \ end="]" - \ matchgroup=p6Error - \ start="^#\[" - \ contains=p6Attention,p6Comment -syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#{" - \ skip="{[^}]*}" - \ end="}" - \ matchgroup=p6Error - \ start="^#{" - \ contains=p6Attention,p6Comment -syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#<" - \ skip="<[^>]*>" - \ end=">" - \ matchgroup=p6Error - \ start="^#<" - \ contains=p6Attention,p6Comment -syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#«" - \ skip="«[^»]*»" - \ end="»" - \ matchgroup=p6Error - \ start="^#«" - \ contains=p6Attention,p6Comment - -" double and triple delimiters -if exists("perl6_extended_comments") || exists("perl6_extended_all") - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#((" - \ skip="((\%([^)\|))\@!]\)*))" - \ end="))" - \ matchgroup=p6Error - \ start="^#((" - \ contains=p6Attention,p6Comment - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#(((" - \ skip="(((\%([^)]\|)\%())\)\@!\)*)))" - \ end=")))" - \ matchgroup=p6Error - \ start="^#(((" - \ contains=p6Attention,p6Comment - - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#\[\[" - \ skip="\[\[\%([^\]]\|]]\@!\)*]]" - \ end="]]" - \ matchgroup=p6Error - \ start="^#\[\[" - \ contains=p6Attention,p6Comment - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#\[\[\[" - \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]" - \ end="]]]" - \ matchgroup=p6Error - \ start="^#\[\[\[" - \ contains=p6Attention,p6Comment - - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#{{" - \ skip="{{\%([^}]\|}}\@!\)*}}" - \ end="}}" - \ matchgroup=p6Error - \ start="^#{{" - \ contains=p6Attention,p6Comment - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#{{{" - \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}" - \ end="}}}" - \ matchgroup=p6Error - \ start="^#{{{" - \ contains=p6Attention,p6Comment - - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#<<" - \ skip="<<\%([^>]\|>>\@!\)*>>" - \ end=">>" - \ matchgroup=p6Error - \ start="^#<<" - \ contains=p6Attention,p6Comment - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#<<<" - \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>" - \ end=">>>" - \ matchgroup=p6Error - \ start="^#<<<" - \ contains=p6Attention,p6Comment - - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#««" - \ skip="««\%([^»]\|»»\@!\)*»»" - \ end="»»" - \ matchgroup=p6Error - \ start="^#««" - \ contains=p6Attention,p6Comment - syn region p6Comment - \ matchgroup=p6Comment - \ start="^\@<!#«««" - \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»" - \ end="»»»" - \ matchgroup=p6Error - \ start="^#«««" - \ contains=p6Attention,p6Comment -endif - -" Pod - -" Abbreviated blocks (implicit code forbidden) -syn region p6PodAbbrRegion - \ matchgroup=p6PodPrefix - \ start="^=\ze\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodAbbrNoCodeType - \ keepend - -syn region p6PodAbbrNoCodeType - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodName,p6PodAbbrNoCode - -syn match p6PodName contained ".\+" contains=@p6PodFormat -syn match p6PodComment contained ".\+" - -syn region p6PodAbbrNoCode - \ start="^" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=@p6PodFormat - -" Abbreviated blocks (everything is code) -syn region p6PodAbbrRegion - \ matchgroup=p6PodPrefix - \ start="^=\zecode\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodAbbrCodeType - \ keepend - -syn region p6PodAbbrCodeType - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodName,p6PodAbbrCode - -syn region p6PodAbbrCode - \ start="^" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - -" Abbreviated blocks (everything is a comment) -syn region p6PodAbbrRegion - \ matchgroup=p6PodPrefix - \ start="^=\zecomment\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodAbbrCommentType - \ keepend - -syn region p6PodAbbrCommentType - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodComment,p6PodAbbrNoCode - -" Abbreviated blocks (implicit code allowed) -syn region p6PodAbbrRegion - \ matchgroup=p6PodPrefix - \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodAbbrType - \ keepend - -syn region p6PodAbbrType - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodName,p6PodAbbr - -syn region p6PodAbbr - \ start="^" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=@p6PodFormat,p6PodImplicitCode - -" Abbreviated block to end-of-file -syn region p6PodAbbrRegion - \ matchgroup=p6PodPrefix - \ start="^=\zeEND\>" - \ end="\%$" - \ contains=p6PodAbbrEOFType - \ keepend - -syn region p6PodAbbrEOFType - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="\%$" - \ contained - \ contains=p6PodName,p6PodAbbrEOF - -syn region p6PodAbbrEOF - \ start="^" - \ end="\%$" - \ contained - \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Directives -syn region p6PodDirectRegion - \ matchgroup=p6PodPrefix - \ start="^=\%(config\|use\)\>" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contains=p6PodDirectArgRegion - \ keepend - -syn region p6PodDirectArgRegion - \ matchgroup=p6PodType - \ start="\S\+" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contained - \ contains=p6PodDirectConfigRegion - -syn region p6PodDirectConfigRegion - \ start="" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contained - \ contains=@p6PodConfig - -" =encoding is a special directive -syn region p6PodDirectRegion - \ matchgroup=p6PodPrefix - \ start="^=encoding\>" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contains=p6PodEncodingArgRegion - \ keepend - -syn region p6PodEncodingArgRegion - \ matchgroup=p6PodName - \ start="\S\+" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contained - -" Paragraph blocks (implicit code forbidden) -syn region p6PodParaRegion - \ matchgroup=p6PodPrefix - \ start="^=for\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodParaNoCodeTypeRegion - \ keepend - \ extend - -syn region p6PodParaNoCodeTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodParaNoCode,p6PodParaConfigRegion - -syn region p6PodParaConfigRegion - \ start="" - \ end="^\ze\%([^=]\|=\k\@<!\)" - \ contained - \ contains=@p6PodConfig - -syn region p6PodParaNoCode - \ start="^[^=]" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=@p6PodFormat - -" Paragraph blocks (everything is code) -syn region p6PodParaRegion - \ matchgroup=p6PodPrefix - \ start="^=for\>\ze\s*code\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodParaCodeTypeRegion - \ keepend - \ extend - -syn region p6PodParaCodeTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodParaCode,p6PodParaConfigRegion - -syn region p6PodParaCode - \ start="^[^=]" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - -" Paragraph blocks (implicit code allowed) -syn region p6PodParaRegion - \ matchgroup=p6PodPrefix - \ start="^=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" - \ end="^\ze\%(\s*$\|=\K\)" - \ contains=p6PodParaTypeRegion - \ keepend - \ extend - -syn region p6PodParaTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=p6PodPara,p6PodParaConfigRegion - -syn region p6PodPara - \ start="^[^=]" - \ end="^\ze\%(\s*$\|=\K\)" - \ contained - \ contains=@p6PodFormat,p6PodImplicitCode - -" Paragraph block to end-of-file -syn region p6PodParaRegion - \ matchgroup=p6PodPrefix - \ start="^=for\>\ze\s\+END\>" - \ end="\%$" - \ contains=p6PodParaEOFTypeRegion - \ keepend - \ extend - -syn region p6PodParaEOFTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="\%$" - \ contained - \ contains=p6PodParaEOF,p6PodParaConfigRegion - -syn region p6PodParaEOF - \ start="^[^=]" - \ end="\%$" - \ contained - \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Delimited blocks (implicit code forbidden) -syn region p6PodDelimRegion - \ matchgroup=p6PodPrefix - \ start="^=begin\>" - \ end="^=end\>" - \ contains=p6PodDelimNoCodeTypeRegion - \ keepend - \ extend - -syn region p6PodDelimNoCodeTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze=end\>" - \ contained - \ contains=p6PodDelimNoCode,p6PodDelimConfigRegion - -syn region p6PodDelimConfigRegion - \ start="" - \ end="^\ze\%([^=]\|=\K\|\s*$\)" - \ contained - \ contains=@p6PodConfig - -syn region p6PodDelimNoCode - \ start="^" - \ end="^\ze=end\>" - \ contained - \ contains=@p6PodNestedBlocks,@p6PodFormat - -" Delimited blocks (everything is code) -syn region p6PodDelimRegion - \ matchgroup=p6PodPrefix - \ start="^=begin\>\ze\s*code\>" - \ end="^=end\>" - \ contains=p6PodDelimCodeTypeRegion - \ keepend - \ extend - -syn region p6PodDelimCodeTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze=end\>" - \ contained - \ contains=p6PodDelimCode,p6PodDelimConfigRegion - -syn region p6PodDelimCode - \ start="^" - \ end="^\ze=end\>" - \ contained - \ contains=@p6PodNestedBlocks - -" Delimited blocks (implicit code allowed) -syn region p6PodDelimRegion - \ matchgroup=p6PodPrefix - \ start="^=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" - \ end="^=end\>" - \ contains=p6PodDelimTypeRegion - \ keepend - \ extend - -syn region p6PodDelimTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="^\ze=end\>" - \ contained - \ contains=p6PodDelim,p6PodDelimConfigRegion - -syn region p6PodDelim - \ start="^" - \ end="^\ze=end\>" - \ contained - \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -" Delimited block to end-of-file -syn region p6PodDelimRegion - \ matchgroup=p6PodPrefix - \ start="^=begin\>\ze\s\+END\>" - \ end="\%$" - \ contains=p6PodDelimEOFTypeRegion - \ extend - -syn region p6PodDelimEOFTypeRegion - \ matchgroup=p6PodType - \ start="\K\k*" - \ end="\%$" - \ contained - \ contains=p6PodDelimEOF,p6PodDelimConfigRegion - -syn region p6PodDelimEOF - \ start="^" - \ end="\%$" - \ contained - \ contains=@p6PodNestedBlocks,@p6PodFormat,p6PodImplicitCode - -syn cluster p6PodConfig - \ add=p6PodConfigOperator - \ add=p6PodExtraConfig - \ add=p6StringAuto - \ add=p6PodAutoQuote - \ add=p6StringSQ - -syn region p6PodParens - \ start="(" - \ end=")" - \ contained - \ contains=p6Number,p6StringSQ - -syn match p6PodAutoQuote display contained "=>" -syn match p6PodConfigOperator display contained ":!\?" nextgroup=p6PodConfigOption -syn match p6PodConfigOption display contained "[^[:space:](<]\+" nextgroup=p6PodParens,p6StringAngle -syn match p6PodExtraConfig display contained "^=" -syn match p6PodVerticalBar display contained "|" -syn match p6PodColon display contained ":" -syn match p6PodSemicolon display contained ";" -syn match p6PodComma display contained "," -syn match p6PodImplicitCode display contained "^\s.*" - -syn region p6PodDelimEndRegion - \ matchgroup=p6PodType - \ start="\%(^=end\>\)\@<=" - \ end="\K\k*" - -" These may appear inside delimited blocks -syn cluster p6PodNestedBlocks - \ add=p6PodAbbrRegion - \ add=p6PodDirectRegion - \ add=p6PodParaRegion - \ add=p6PodDelimRegion - \ add=p6PodDelimEndRegion - -" Pod formatting codes - -syn cluster p6PodFormat - \ add=p6PodFormatOne - \ add=p6PodFormatTwo - \ add=p6PodFormatThree - \ add=p6PodFormatFrench - -" Balanced angles found inside formatting codes. Ensures proper nesting. - -syn region p6PodFormatAnglesOne - \ matchgroup=p6PodFormat - \ start="<" - \ skip="<[^>]*>" - \ end=">" - \ transparent - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne - -syn region p6PodFormatAnglesTwo - \ matchgroup=p6PodFormat - \ start="<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ transparent - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo - -syn region p6PodFormatAnglesThree - \ matchgroup=p6PodFormat - \ start="<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ transparent - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree - -syn region p6PodFormatAnglesFrench - \ matchgroup=p6PodFormat - \ start="«" - \ skip="«[^»]*»" - \ end="»" - \ transparent - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatAnglesOne,p6PodFormatAnglesTwo,p6PodFormatAnglesThree - -" All formatting codes - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="\u<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="\u<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="\u<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="\u«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree - -" C<> and V<> don't allow nested formatting formatting codes - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="[CV]<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="[CV]<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="[CV]<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="[CV]«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench - -" L<> can have a "|" separator - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="L<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="L<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="L<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="L«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar - -" E<> can have a ";" separator - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="E<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodSemiColon - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="E<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodSemiColon - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="E<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="E«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodSemiColon - -" M<> can have a ":" separator - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="M<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodColon - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="M<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodColon - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="M<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="M«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodColon - -" D<> can have "|" and ";" separators - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="D<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="D<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAngleTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="D<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="D«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon - -" X<> can have "|", "," and ";" separators - -syn region p6PodFormatOne - \ matchgroup=p6PodFormatCode - \ start="X<" - \ skip="<[^>]*>" - \ end=">" - \ contained - \ contains=p6PodFormatAnglesOne,p6PodFormatFrench,p6PodFormatOne,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatTwo - \ matchgroup=p6PodFormatCode - \ start="X<<" - \ skip="<<[^>]*>>" - \ end=">>" - \ contained - \ contains=p6PodFormatAnglesTwo,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatThree - \ matchgroup=p6PodFormatCode - \ start="X<<<" - \ skip="<<<[^>]*>>>" - \ end=">>>" - \ contained - \ contains=p6PodFormatAnglesThree,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -syn region p6PodFormatFrench - \ matchgroup=p6PodFormatCode - \ start="X«" - \ skip="«[^»]*»" - \ end="»" - \ contained - \ contains=p6PodFormatAnglesFrench,p6PodFormatFrench,p6PodFormatOne,p6PodFormatTwo,p6PodFormatThree,p6PodVerticalBar,p6PodSemiColon,p6PodComma - -" Define the default highlighting. -" Only when an item doesn't have highlighting yet - -hi def link p6EscOctOld p6Error -hi def link p6PackageTwigil p6Twigil -hi def link p6StringAngle p6String -hi def link p6StringFrench p6String -hi def link p6StringAngles p6String -hi def link p6StringSQ p6String -hi def link p6StringDQ p6String -hi def link p6StringQ p6String -hi def link p6RxStringSQ p6String -hi def link p6RxStringDQ p6String -hi def link p6Substitution p6String -hi def link p6Transliteration p6String -hi def link p6StringAuto p6String -hi def link p6StringP5Auto p6String -hi def link p6Key p6String -hi def link p6Match p6String -hi def link p6RegexBlock p6String -hi def link p6RxP5CharClass p6String -hi def link p6RxP5QuoteMeta p6String -hi def link p6RxCharClass p6String -hi def link p6RxQuoteWords p6String -hi def link p6ReduceOp p6Operator -hi def link p6ReverseCrossOp p6Operator -hi def link p6HyperOp p6Operator -hi def link p6QuoteQ p6Operator -hi def link p6RxRange p6StringSpecial -hi def link p6RxAnchor p6StringSpecial -hi def link p6RxP5Anchor p6StringSpecial -hi def link p6CodePoint p6StringSpecial -hi def link p6RxMeta p6StringSpecial -hi def link p6RxP5Range p6StringSpecial -hi def link p6RxP5CPId p6StringSpecial -hi def link p6RxP5Posix p6StringSpecial -hi def link p6RxP5Mod p6StringSpecial -hi def link p6RxP5HexSeq p6StringSpecial -hi def link p6RxP5OctSeq p6StringSpecial -hi def link p6RxP5WriteRefId p6StringSpecial -hi def link p6HexSequence p6StringSpecial -hi def link p6OctSequence p6StringSpecial -hi def link p6RxP5Named p6StringSpecial -hi def link p6RxP5PropId p6StringSpecial -hi def link p6RxP5Quantifier p6StringSpecial -hi def link p6RxP5CountId p6StringSpecial -hi def link p6RxP5Verb p6StringSpecial -hi def link p6Escape p6StringSpecial2 -hi def link p6EscNull p6StringSpecial2 -hi def link p6EscHash p6StringSpecial2 -hi def link p6EscQQ p6StringSpecial2 -hi def link p6EscQuote p6StringSpecial2 -hi def link p6EscDoubleQuote p6StringSpecial2 -hi def link p6EscBackTick p6StringSpecial2 -hi def link p6EscForwardSlash p6StringSpecial2 -hi def link p6EscVerticalBar p6StringSpecial2 -hi def link p6EscExclamation p6StringSpecial2 -hi def link p6EscDollar p6StringSpecial2 -hi def link p6EscOpenCurly p6StringSpecial2 -hi def link p6EscCloseCurly p6StringSpecial2 -hi def link p6EscCloseBracket p6StringSpecial2 -hi def link p6EscCloseAngle p6StringSpecial2 -hi def link p6EscCloseFrench p6StringSpecial2 -hi def link p6EscBackSlash p6StringSpecial2 -hi def link p6RxEscape p6StringSpecial2 -hi def link p6RxCapture p6StringSpecial2 -hi def link p6RxAlternation p6StringSpecial2 -hi def link p6RxP5 p6StringSpecial2 -hi def link p6RxP5ReadRef p6StringSpecial2 -hi def link p6RxP5Oct p6StringSpecial2 -hi def link p6RxP5Hex p6StringSpecial2 -hi def link p6RxP5EscMeta p6StringSpecial2 -hi def link p6RxP5Meta p6StringSpecial2 -hi def link p6RxP5Escape p6StringSpecial2 -hi def link p6RxP5CodePoint p6StringSpecial2 -hi def link p6RxP5WriteRef p6StringSpecial2 -hi def link p6RxP5Prop p6StringSpecial2 - -hi def link p6Property Tag -hi def link p6Attention Todo -hi def link p6Type Type -hi def link p6Error Error -hi def link p6BlockLabel Label -hi def link p6Float Float -hi def link p6Normal Normal -hi def link p6Package Normal -hi def link p6PackageScope Normal -hi def link p6Number Number -hi def link p6VersionNum Number -hi def link p6String String -hi def link p6Repeat Repeat -hi def link p6Keyword Keyword -hi def link p6Pragma Keyword -hi def link p6Module Keyword -hi def link p6DeclareRoutine Keyword -hi def link p6VarStorage Special -hi def link p6FlowControl Special -hi def link p6NumberBase Special -hi def link p6Twigil Special -hi def link p6StringSpecial2 Special -hi def link p6VersionDot Special -hi def link p6Comment Comment -hi def link p6Include Include -hi def link p6Shebang PreProc -hi def link p6ClosureTrait PreProc -hi def link p6Routine Function -hi def link p6Operator Operator -hi def link p6Version Operator -hi def link p6Context Operator -hi def link p6Quote Delimiter -hi def link p6TypeConstraint PreCondit -hi def link p6Exception Exception -hi def link p6Placeholder Identifier -hi def link p6Variable Identifier -hi def link p6VarSlash Identifier -hi def link p6VarNum Identifier -hi def link p6VarExclam Identifier -hi def link p6VarMatch Identifier -hi def link p6VarName Identifier -hi def link p6MatchVar Identifier -hi def link p6RxP5ReadRefId Identifier -hi def link p6RxP5ModDef Identifier -hi def link p6RxP5ModName Identifier -hi def link p6Conditional Conditional -hi def link p6StringSpecial SpecialChar - -hi def link p6PodAbbr p6Pod -hi def link p6PodAbbrEOF p6Pod -hi def link p6PodAbbrNoCode p6Pod -hi def link p6PodAbbrCode p6PodCode -hi def link p6PodPara p6Pod -hi def link p6PodParaEOF p6Pod -hi def link p6PodParaNoCode p6Pod -hi def link p6PodParaCode p6PodCode -hi def link p6PodDelim p6Pod -hi def link p6PodDelimEOF p6Pod -hi def link p6PodDelimNoCode p6Pod -hi def link p6PodDelimCode p6PodCode -hi def link p6PodImplicitCode p6PodCode -hi def link p6PodExtraConfig p6PodPrefix -hi def link p6PodVerticalBar p6PodFormatCode -hi def link p6PodColon p6PodFormatCode -hi def link p6PodSemicolon p6PodFormatCode -hi def link p6PodComma p6PodFormatCode -hi def link p6PodFormatOne p6PodFormat -hi def link p6PodFormatTwo p6PodFormat -hi def link p6PodFormatThree p6PodFormat -hi def link p6PodFormatFrench p6PodFormat - -hi def link p6PodType Type -hi def link p6PodConfigOption String -hi def link p6PodCode PreProc -hi def link p6Pod Comment -hi def link p6PodComment Comment -hi def link p6PodAutoQuote Operator -hi def link p6PodConfigOperator Operator -hi def link p6PodPrefix Statement -hi def link p6PodName Identifier -hi def link p6PodFormatCode SpecialChar -hi def link p6PodFormat SpecialComment - - -" Syncing to speed up processing -"syn sync match p6SyncPod groupthere p6PodAbbrRegion "^=\K\k*\>" -"syn sync match p6SyncPod groupthere p6PodDirectRegion "^=\%(config\|use\|encoding\)\>" -"syn sync match p6SyncPod groupthere p6PodParaRegion "^=for\>" -"syn sync match p6SyncPod groupthere p6PodDelimRegion "^=begin\>" -"syn sync match p6SyncPod groupthere p6PodDelimEndRegion "^=end\>" - -" Let's just sync whole file, the other methods aren't reliable (or I don't -" know how to use them reliably) -syn sync fromstart - -setlocal foldmethod=syntax - -let b:current_syntax = "perl6" - -let &cpo = s:keepcpo -unlet s:keepcpo - -" vim:ts=8:sts=4:sw=4:expandtab:ft=vim diff --git a/runtime/syntax/php.vim b/runtime/syntax/php.vim index 30d13581c3..7b0085cd6e 100644 --- a/runtime/syntax/php.vim +++ b/runtime/syntax/php.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: php PHP 3/4/5/7/8 " Maintainer: Tyson Andre <tysonandre775@hotmail.com> -" Last Change: Sep 07, 2020 -" URL: https://github.com/TysonAndre/vim-syntax +" Last Change: Dec 22, 2020 +" URL: https://github.com/TysonAndre/php-vim-syntax " Former Maintainers: " Jason Woofenden <jason@jasonwoof.com> " Peter Hodge <toomuchphp-vim@yahoo.com> @@ -149,7 +149,7 @@ syn keyword phpFunctions domxml_new_doc domxml_open_file domxml_open_mem domxml_ syn keyword phpMethods name specified value create_attribute create_cdata_section create_comment create_element_ns create_element create_entity_reference create_processing_instruction create_text_node doctype document_element dump_file dump_mem get_element_by_id get_elements_by_tagname html_dump_mem xinclude entities internal_subset name notations public_id system_id get_attribute_node get_attribute get_elements_by_tagname has_attribute remove_attribute set_attribute tagname add_namespace append_child append_sibling attributes child_nodes clone_node dump_node first_child get_content has_attributes has_child_nodes insert_before is_blank_node last_child next_sibling node_name node_type node_value owner_document parent_node prefix previous_sibling remove_child replace_child replace_node set_content set_name set_namespace unlink_node data target process result_dump_file result_dump_mem contained syn keyword phpFunctions dotnet_load contained syn keyword phpFunctions debug_backtrace debug_print_backtrace error_log error_reporting restore_error_handler set_error_handler trigger_error user_error contained -syn keyword phpFunctions enchant_broker_describe enchant_broker_dict_exists enchant_broker_free enchant_broker_free_dict enchant_broker_get_dict_path enchant_broker_get_error enchant_broker_init enchant_broker_list_dicts enchant_broker_request_dict enchant_broker_request_pwl_dict enchant_broker_set_dict_path enchant_broker_set_ordering enchant_dict_add_to_personal enchant_dict_add_to_session enchant_dict_check enchant_dict_describe enchant_dict_get_error enchant_dict_is_in_session enchant_dict_quick_check enchant_dict_store_replacement enchant_dict_suggest contained +syn keyword phpFunctions enchant_broker_describe enchant_broker_dict_exists enchant_broker_free enchant_broker_free_dict enchant_broker_get_dict_path enchant_broker_get_error enchant_broker_init enchant_broker_list_dicts enchant_broker_request_dict enchant_broker_request_pwl_dict enchant_broker_set_dict_path enchant_broker_set_ordering enchant_dict_add enchant_dict_add_to_personal enchant_dict_add_to_session enchant_dict_check enchant_dict_describe enchant_dict_get_error enchant_dict_is_added enchant_dict_is_in_session enchant_dict_quick_check enchant_dict_store_replacement enchant_dict_suggest contained syn keyword phpFunctions escapeshellarg escapeshellcmd exec passthru proc_close proc_get_status proc_nice proc_open proc_terminate shell_exec system contained syn keyword phpFunctions fam_cancel_monitor fam_close fam_monitor_collection fam_monitor_directory fam_monitor_file fam_next_event fam_open fam_pending fam_resume_monitor fam_suspend_monitor contained syn keyword phpFunctions fbsql_affected_rows fbsql_autocommit fbsql_change_user fbsql_close fbsql_commit fbsql_connect fbsql_create_blob fbsql_create_clob fbsql_create_db fbsql_data_seek fbsql_database_password fbsql_database fbsql_db_query fbsql_db_status fbsql_drop_db fbsql_errno fbsql_error fbsql_fetch_array fbsql_fetch_assoc fbsql_fetch_field fbsql_fetch_lengths fbsql_fetch_object fbsql_fetch_row fbsql_field_flags fbsql_field_len fbsql_field_name fbsql_field_seek fbsql_field_table fbsql_field_type fbsql_free_result fbsql_get_autostart_info fbsql_hostname fbsql_insert_id fbsql_list_dbs fbsql_list_fields fbsql_list_tables fbsql_next_result fbsql_num_fields fbsql_num_rows fbsql_password fbsql_pconnect fbsql_query fbsql_read_blob fbsql_read_clob fbsql_result fbsql_rollback fbsql_select_db fbsql_set_lob_mode fbsql_set_transaction fbsql_start_db fbsql_stop_db fbsql_tablename fbsql_username fbsql_warnings contained @@ -171,11 +171,11 @@ syn keyword phpFunctions ibase_add_user ibase_affected_rows ibase_blob_add ibase syn keyword phpFunctions iconv_get_encoding iconv_mime_decode_headers iconv_mime_decode iconv_mime_encode iconv_set_encoding iconv_strlen iconv_strpos iconv_strrpos iconv_substr iconv ob_iconv_handler contained syn keyword phpFunctions ifx_affected_rows ifx_blobinfile_mode ifx_byteasvarchar ifx_close ifx_connect ifx_copy_blob ifx_create_blob ifx_create_char ifx_do ifx_error ifx_errormsg ifx_fetch_row ifx_fieldproperties ifx_fieldtypes ifx_free_blob ifx_free_char ifx_free_result ifx_get_blob ifx_get_char ifx_getsqlca ifx_htmltbl_result ifx_nullformat ifx_num_fields ifx_num_rows ifx_pconnect ifx_prepare ifx_query ifx_textasvarchar ifx_update_blob ifx_update_char ifxus_close_slob ifxus_create_slob ifxus_free_slob ifxus_open_slob ifxus_read_slob ifxus_seek_slob ifxus_tell_slob ifxus_write_slob contained syn keyword phpFunctions igbinary_serialize igbinary_unserialize contained -syn keyword phpFunctions exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data exif_tagname imageaffine imageaffinematrixconcat imageaffinematrixget imagebmp imageconvolution imagecreatefrombmp imagecreatefromtga imagecrop imagecropauto imagefilter imageflip imagegetclip imagelayereffect imageopenpolygon imagepalettetotruecolor imageresolution imagescale imagesetclip imagesetinterpolation imagexbm contained +syn keyword phpFunctions exif_imagetype exif_read_data exif_thumbnail gd_info getimagesize image_type_to_mime_type image2wbmp imagealphablending imageantialias imagearc imagechar imagecharup imagecolorallocate imagecolorallocatealpha imagecolorat imagecolorclosest imagecolorclosestalpha imagecolorclosesthwb imagecolordeallocate imagecolorexact imagecolorexactalpha imagecolormatch imagecolorresolve imagecolorresolvealpha imagecolorset imagecolorsforindex imagecolorstotal imagecolortransparent imagecopy imagecopymerge imagecopymergegray imagecopyresampled imagecopyresized imagecreate imagecreatefromgd2 imagecreatefromgd2part imagecreatefromgd imagecreatefromgif imagecreatefromjpeg imagecreatefrompng imagecreatefromstring imagecreatefromwbmp imagecreatefromxbm imagecreatefromxpm imagecreatetruecolor imagedashedline imagedestroy imageellipse imagefill imagefilledarc imagefilledellipse imagefilledpolygon imagefilledrectangle imagefilltoborder imagefontheight imagefontwidth imageftbbox imagefttext imagegammacorrect imagegd2 imagegd imagegif imageinterlace imageistruecolor imagejpeg imageline imageloadfont imagepalettecopy imagepng imagepolygon imagepsbbox imagepscopyfont imagepsencodefont imagepsextendfont imagepsfreefont imagepsloadfont imagepsslantfont imagepstext imagerectangle imagerotate imagesavealpha imagesetbrush imagesetpixel imagesetstyle imagesetthickness imagesettile imagestring imagestringup imagesx imagesy imagetruecolortopalette imagettfbbox imagettftext imagetypes imagewbmp iptcembed iptcparse jpeg2wbmp png2wbmp read_exif_data exif_tagname imageaffine imageaffinematrixconcat imageaffinematrixget imagebmp imageconvolution imagecreatefrombmp imagecreatefromtga imagecrop imagecropauto imagefilter imageflip imagegetclip imagegetinterpolation imagelayereffect imageopenpolygon imagepalettetotruecolor imageresolution imagescale imagesetclip imagesetinterpolation imagexbm contained syn keyword phpFunctions imap_8bit imap_alerts imap_append imap_base64 imap_binary imap_body imap_bodystruct imap_check imap_clearflag_full imap_close imap_createmailbox imap_delete imap_deletemailbox imap_errors imap_expunge imap_fetch_overview imap_fetchbody imap_fetchheader imap_fetchstructure imap_get_quota imap_get_quotaroot imap_getacl imap_getmailboxes imap_getsubscribed imap_header imap_headerinfo imap_headers imap_last_error imap_list imap_listmailbox imap_listscan imap_listsubscribed imap_lsub imap_mail_compose imap_mail_copy imap_mail_move imap_mail imap_mailboxmsginfo imap_mime_header_decode imap_msgno imap_num_msg imap_num_recent imap_open imap_ping imap_qprint imap_renamemailbox imap_reopen imap_rfc822_parse_adrlist imap_rfc822_parse_headers imap_rfc822_write_address imap_scanmailbox imap_search imap_set_quota imap_setacl imap_setflag_full imap_sort imap_status imap_subscribe imap_thread imap_timeout imap_uid imap_undelete imap_unsubscribe imap_utf7_decode imap_utf7_encode imap_utf8 contained syn keyword phpFunctions assert_options assert dl extension_loaded get_cfg_var get_current_user get_defined_constants get_extension_funcs get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime get_required_files getenv getlastmod getmygid getmyinode getmypid getmyuid getopt getrusage ini_alter ini_get_all ini_get ini_restore ini_set main memory_get_usage php_ini_scanned_files php_logo_guid php_sapi_name php_uname phpcredits phpinfo phpversion putenv restore_include_path set_include_path set_magic_quotes_runtime set_time_limit version_compare zend_logo_guid zend_version contained syn keyword phpFunctions ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback contained -syn keyword phpFunctions collator_asort collator_compare collator_create collator_get_attribute collator_get_error_code collator_get_error_message collator_get_locale collator_get_sort_key collator_get_strength collator_set_attribute collator_set_strength collator_sort collator_sort_with_sort_keys datefmt_create datefmt_format datefmt_format_object datefmt_get_calendar datefmt_get_calendar_object datefmt_get_datetype datefmt_get_error_code datefmt_get_error_message datefmt_get_locale datefmt_get_pattern datefmt_get_timetype datefmt_get_timezone datefmt_get_timezone_id datefmt_is_lenient datefmt_localtime datefmt_parse datefmt_set_calendar datefmt_set_lenient datefmt_set_pattern datefmt_set_timezone grapheme_extract grapheme_stripos grapheme_stristr grapheme_strlen grapheme_strpos grapheme_strripos grapheme_strrpos grapheme_strstr grapheme_substr idn_to_ascii idn_to_utf8 intl_error_name intl_get_error_code intl_get_error_message intl_is_failure intlcal_add intlcal_after intlcal_before intlcal_clear intlcal_create_instance intlcal_equals intlcal_field_difference intlcal_from_date_time intlcal_get intlcal_get_actual_maximum intlcal_get_actual_minimum intlcal_get_available_locales intlcal_get_day_of_week_type intlcal_get_error_code intlcal_get_error_message intlcal_get_first_day_of_week intlcal_get_greatest_minimum intlcal_get_keyword_values_for_locale intlcal_get_least_maximum intlcal_get_locale intlcal_get_maximum intlcal_get_minimal_days_in_first_week intlcal_get_minimum intlcal_get_now intlcal_get_repeated_wall_time_option intlcal_get_skipped_wall_time_option intlcal_get_time intlcal_get_time_zone intlcal_get_type intlcal_get_weekend_transition intlcal_in_daylight_time intlcal_is_equivalent_to intlcal_is_lenient intlcal_is_set intlcal_is_weekend intlcal_roll intlcal_set intlcal_set_first_day_of_week intlcal_set_lenient intlcal_set_minimal_days_in_first_week intlcal_set_repeated_wall_time_option intlcal_set_skipped_wall_time_option intlcal_set_time intlcal_set_time_zone intlcal_to_date_time intlgregcal_create_instance intlgregcal_get_gregorian_change intlgregcal_is_leap_year intlgregcal_set_gregorian_change intltz_count_equivalent_ids intltz_create_default intltz_create_enumeration intltz_create_time_zone intltz_create_time_zone_id_enumeration intltz_from_date_time_zone intltz_get_canonical_id intltz_get_display_name intltz_get_dst_savings intltz_get_equivalent_id intltz_get_error_code intltz_get_error_message intltz_get_gmt intltz_get_id intltz_get_offset intltz_get_raw_offset intltz_get_region intltz_get_tz_data_version intltz_get_unknown intltz_has_same_rules intltz_to_date_time_zone intltz_use_daylight_time locale_accept_from_http locale_canonicalize locale_compose locale_filter_matches locale_get_all_variants locale_get_default locale_get_display_language locale_get_display_name locale_get_display_region locale_get_display_script locale_get_display_variant locale_get_keywords locale_get_primary_language locale_get_region locale_get_script locale_lookup locale_parse locale_set_default msgfmt_create msgfmt_format msgfmt_format_message msgfmt_get_error_code msgfmt_get_error_message msgfmt_get_locale msgfmt_get_pattern msgfmt_parse msgfmt_parse_message msgfmt_set_pattern normalizer_is_normalized normalizer_normalize numfmt_create numfmt_format numfmt_format_currency numfmt_get_attribute numfmt_get_error_code numfmt_get_error_message numfmt_get_locale numfmt_get_pattern numfmt_get_symbol numfmt_get_text_attribute numfmt_parse numfmt_parse_currency numfmt_set_attribute numfmt_set_pattern numfmt_set_symbol numfmt_set_text_attribute resourcebundle_count resourcebundle_create resourcebundle_get resourcebundle_get_error_code resourcebundle_get_error_message resourcebundle_locales transliterator_create transliterator_create_from_rules transliterator_create_inverse transliterator_get_error_code transliterator_get_error_message transliterator_list_ids transliterator_transliterate contained +syn keyword phpFunctions collator_asort collator_compare collator_create collator_get_attribute collator_get_error_code collator_get_error_message collator_get_locale collator_get_sort_key collator_get_strength collator_set_attribute collator_set_strength collator_sort collator_sort_with_sort_keys datefmt_create datefmt_format datefmt_format_object datefmt_get_calendar datefmt_get_calendar_object datefmt_get_datetype datefmt_get_error_code datefmt_get_error_message datefmt_get_locale datefmt_get_pattern datefmt_get_timetype datefmt_get_timezone datefmt_get_timezone_id datefmt_is_lenient datefmt_localtime datefmt_parse datefmt_set_calendar datefmt_set_lenient datefmt_set_pattern datefmt_set_timezone grapheme_extract grapheme_stripos grapheme_stristr grapheme_strlen grapheme_strpos grapheme_strripos grapheme_strrpos grapheme_strstr grapheme_substr idn_to_ascii idn_to_utf8 intl_error_name intl_get_error_code intl_get_error_message intl_is_failure intlcal_add intlcal_after intlcal_before intlcal_clear intlcal_create_instance intlcal_equals intlcal_field_difference intlcal_from_date_time intlcal_get intlcal_get_actual_maximum intlcal_get_actual_minimum intlcal_get_available_locales intlcal_get_day_of_week_type intlcal_get_error_code intlcal_get_error_message intlcal_get_first_day_of_week intlcal_get_greatest_minimum intlcal_get_keyword_values_for_locale intlcal_get_least_maximum intlcal_get_locale intlcal_get_maximum intlcal_get_minimal_days_in_first_week intlcal_get_minimum intlcal_get_now intlcal_get_repeated_wall_time_option intlcal_get_skipped_wall_time_option intlcal_get_time intlcal_get_time_zone intlcal_get_type intlcal_get_weekend_transition intlcal_in_daylight_time intlcal_is_equivalent_to intlcal_is_lenient intlcal_is_set intlcal_is_weekend intlcal_roll intlcal_set intlcal_set_first_day_of_week intlcal_set_lenient intlcal_set_minimal_days_in_first_week intlcal_set_repeated_wall_time_option intlcal_set_skipped_wall_time_option intlcal_set_time intlcal_set_time_zone intlcal_to_date_time intlgregcal_create_instance intlgregcal_get_gregorian_change intlgregcal_is_leap_year intlgregcal_set_gregorian_change intltz_count_equivalent_ids intltz_create_default intltz_create_enumeration intltz_create_time_zone intltz_create_time_zone_id_enumeration intltz_from_date_time_zone intltz_get_canonical_id intltz_get_display_name intltz_get_dst_savings intltz_get_equivalent_id intltz_get_error_code intltz_get_error_message intltz_get_id_for_windows_id intltz_get_windows_id intltz_get_gmt intltz_get_id intltz_get_offset intltz_get_raw_offset intltz_get_region intltz_get_tz_data_version intltz_get_unknown intltz_has_same_rules intltz_to_date_time_zone intltz_use_daylight_time locale_accept_from_http locale_canonicalize locale_compose locale_filter_matches locale_get_all_variants locale_get_default locale_get_display_language locale_get_display_name locale_get_display_region locale_get_display_script locale_get_display_variant locale_get_keywords locale_get_primary_language locale_get_region locale_get_script locale_lookup locale_parse locale_set_default msgfmt_create msgfmt_format msgfmt_format_message msgfmt_get_error_code msgfmt_get_error_message msgfmt_get_locale msgfmt_get_pattern msgfmt_parse msgfmt_parse_message msgfmt_set_pattern normalizer_get_raw_decomposition normalizer_is_normalized normalizer_normalize numfmt_create numfmt_format numfmt_format_currency numfmt_get_attribute numfmt_get_error_code numfmt_get_error_message numfmt_get_locale numfmt_get_pattern numfmt_get_symbol numfmt_get_text_attribute numfmt_parse numfmt_parse_currency numfmt_set_attribute numfmt_set_pattern numfmt_set_symbol numfmt_set_text_attribute resourcebundle_count resourcebundle_create resourcebundle_get resourcebundle_get_error_code resourcebundle_get_error_message resourcebundle_locales transliterator_create transliterator_create_from_rules transliterator_create_inverse transliterator_get_error_code transliterator_get_error_message transliterator_list_ids transliterator_transliterate contained syn keyword phpFunctions ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois contained syn keyword phpFunctions java_last_exception_clear java_last_exception_get contained syn keyword phpFunctions json_decode json_encode json_last_error json_last_error_msg contained @@ -212,13 +212,13 @@ syn keyword phpFunctions aggregate_info aggregate_methods_by_list aggregate_meth syn keyword phpFunctions ocibindbyname ocicancel ocicloselob ocicollappend ocicollassign ocicollassignelem ocicollgetelem ocicollmax ocicollsize ocicolltrim ocicolumnisnull ocicolumnname ocicolumnprecision ocicolumnscale ocicolumnsize ocicolumntype ocicolumntyperaw ocicommit ocidefinebyname ocierror ociexecute ocifetch ocifetchinto ocifetchstatement ocifreecollection ocifreecursor ocifreedesc ocifreestatement ociinternaldebug ociloadlob ocilogoff ocilogon ocinewcollection ocinewcursor ocinewdescriptor ocinlogon ocinumcols ociparse ociplogon ociresult ocirollback ocirowcount ocisavelob ocisavelobfile ociserverversion ocisetprefetch ocistatementtype ociwritelobtofile ociwritetemporarylob contained syn keyword phpFunctions odbc_autocommit odbc_binmode odbc_close_all odbc_close odbc_columnprivileges odbc_columns odbc_commit odbc_connect odbc_cursor odbc_data_source odbc_do odbc_error odbc_errormsg odbc_exec odbc_execute odbc_fetch_array odbc_fetch_into odbc_fetch_object odbc_fetch_row odbc_field_len odbc_field_name odbc_field_num odbc_field_precision odbc_field_scale odbc_field_type odbc_foreignkeys odbc_free_result odbc_gettypeinfo odbc_longreadlen odbc_next_result odbc_num_fields odbc_num_rows odbc_pconnect odbc_prepare odbc_primarykeys odbc_procedurecolumns odbc_procedures odbc_result_all odbc_result odbc_rollback odbc_setoption odbc_specialcolumns odbc_statistics odbc_tableprivileges odbc_tables contained syn keyword phpFunctions opcache_reset opcache_invalidate opcache_compile_file opcache_is_script_cached opcache_get_configuration opcache_get_status contained -syn keyword phpFunctions openssl_cipher_iv_length openssl_csr_export_to_file openssl_csr_export openssl_csr_get_public_key openssl_csr_get_subject openssl_csr_new openssl_csr_sign openssl_decrypt openssl_dh_compute_key openssl_digest openssl_encrypt openssl_error_string openssl_free_key openssl_get_cert_locations openssl_get_cipher_methods openssl_get_md_methods openssl_get_privatekey openssl_get_publickey openssl_open openssl_pbkdf2 openssl_pkcs12_export_to_file openssl_pkcs12_export openssl_pkcs12_read openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_free openssl_pkey_get_details openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_random_pseudo_bytes openssl_seal openssl_sign openssl_spki_export_challenge openssl_spki_export openssl_spki_new openssl_spki_verify openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_fingerprint openssl_x509_free openssl_x509_parse openssl_x509_read openssl_get_curve_names openssl_pkcs7_read openssl_pkey_derive openssl_x509_verify contained +syn keyword phpFunctions openssl_cipher_iv_length openssl_cms_decrypt openssl_cms_encrypt openssl_cms_read openssl_cms_sign openssl_cms_verify openssl_csr_export_to_file openssl_csr_export openssl_csr_get_public_key openssl_csr_get_subject openssl_csr_new openssl_csr_sign openssl_decrypt openssl_dh_compute_key openssl_digest openssl_encrypt openssl_error_string openssl_free_key openssl_get_cert_locations openssl_get_cipher_methods openssl_get_md_methods openssl_get_privatekey openssl_get_publickey openssl_open openssl_pbkdf2 openssl_pkcs12_export_to_file openssl_pkcs12_export openssl_pkcs12_read openssl_pkcs7_decrypt openssl_pkcs7_encrypt openssl_pkcs7_sign openssl_pkcs7_verify openssl_pkey_export_to_file openssl_pkey_export openssl_pkey_free openssl_pkey_get_details openssl_pkey_get_private openssl_pkey_get_public openssl_pkey_new openssl_private_decrypt openssl_private_encrypt openssl_public_decrypt openssl_public_encrypt openssl_random_pseudo_bytes openssl_seal openssl_sign openssl_spki_export_challenge openssl_spki_export openssl_spki_new openssl_spki_verify openssl_verify openssl_x509_check_private_key openssl_x509_checkpurpose openssl_x509_export_to_file openssl_x509_export openssl_x509_fingerprint openssl_x509_free openssl_x509_parse openssl_x509_read openssl_get_curve_names openssl_pkcs7_read openssl_pkey_derive openssl_x509_verify contained syn keyword phpFunctions ora_bind ora_close ora_columnname ora_columnsize ora_columntype ora_commit ora_commitoff ora_commiton ora_do ora_error ora_errorcode ora_exec ora_fetch_into ora_fetch ora_getcolumn ora_logoff ora_logon ora_numcols ora_numrows ora_open ora_parse ora_plogon ora_rollback contained syn keyword phpFunctions flush ob_clean ob_end_clean ob_end_flush ob_flush ob_get_clean ob_get_contents ob_get_flush ob_get_length ob_get_level ob_get_status ob_gzhandler ob_implicit_flush ob_list_handlers ob_start output_add_rewrite_var output_reset_rewrite_vars contained syn keyword phpFunctions overload contained syn keyword phpFunctions ovrimos_close ovrimos_commit ovrimos_connect ovrimos_cursor ovrimos_exec ovrimos_execute ovrimos_fetch_into ovrimos_fetch_row ovrimos_field_len ovrimos_field_name ovrimos_field_num ovrimos_field_type ovrimos_free_result ovrimos_longreadlen ovrimos_num_fields ovrimos_num_rows ovrimos_prepare ovrimos_result_all ovrimos_result ovrimos_rollback contained syn keyword phpFunctions pcntl_exec pcntl_fork pcntl_signal pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig pcntl_alarm pcntl_async_signals pcntl_errno pcntl_get_last_error pcntl_getpriority pcntl_setpriority pcntl_signal_dispatch pcntl_signal_get_handler pcntl_sigprocmask pcntl_sigtimedwait pcntl_sigwaitinfo pcntl_strerror pcntl_unshare pcntl_wait pcntl_wifcontinued contained -syn keyword phpFunctions preg_filter preg_grep preg_last_error preg_match_all preg_match preg_quote preg_replace_callback preg_replace_callback_array preg_replace preg_split contained +syn keyword phpFunctions preg_filter preg_grep preg_last_error preg_last_error_msg preg_match_all preg_match preg_quote preg_replace_callback preg_replace_callback_array preg_replace preg_split contained syn keyword phpFunctions pdo_drivers contained syn keyword phpFunctions pdf_add_annotation pdf_add_bookmark pdf_add_launchlink pdf_add_locallink pdf_add_note pdf_add_outline pdf_add_pdflink pdf_add_thumbnail pdf_add_weblink pdf_arc pdf_arcn pdf_attach_file pdf_begin_page pdf_begin_pattern pdf_begin_template pdf_circle pdf_clip pdf_close_image pdf_close_pdi_page pdf_close_pdi pdf_close pdf_closepath_fill_stroke pdf_closepath_stroke pdf_closepath pdf_concat pdf_continue_text pdf_curveto pdf_delete pdf_end_page pdf_end_pattern pdf_end_template pdf_endpath pdf_fill_stroke pdf_fill pdf_findfont pdf_get_buffer pdf_get_font pdf_get_fontname pdf_get_fontsize pdf_get_image_height pdf_get_image_width pdf_get_majorversion pdf_get_minorversion pdf_get_parameter pdf_get_pdi_parameter pdf_get_pdi_value pdf_get_value pdf_initgraphics pdf_lineto pdf_makespotcolor pdf_moveto pdf_new pdf_open_CCITT pdf_open_file pdf_open_gif pdf_open_image_file pdf_open_image pdf_open_jpeg pdf_open_memory_image pdf_open_pdi_page pdf_open_pdi pdf_open_png pdf_open_tiff pdf_open pdf_place_image pdf_place_pdi_page pdf_rect pdf_restore pdf_rotate pdf_save pdf_scale pdf_set_border_color pdf_set_border_dash pdf_set_border_style pdf_set_char_spacing pdf_set_duration pdf_set_font pdf_set_horiz_scaling pdf_set_info_author pdf_set_info_creator pdf_set_info_keywords pdf_set_info_subject pdf_set_info_title pdf_set_info pdf_set_leading pdf_set_parameter pdf_set_text_matrix pdf_set_text_pos pdf_set_text_rendering pdf_set_text_rise pdf_set_value pdf_set_word_spacing pdf_setcolor pdf_setdash pdf_setflat pdf_setfont pdf_setgray_fill pdf_setgray_stroke pdf_setgray pdf_setlinecap pdf_setlinejoin pdf_setlinewidth pdf_setmatrix pdf_setmiterlimit pdf_setpolydash pdf_setrgbcolor_fill pdf_setrgbcolor_stroke pdf_setrgbcolor pdf_show_boxed pdf_show_xy pdf_show pdf_skew pdf_stringwidth pdf_stroke pdf_translate contained syn keyword phpFunctions pfpro_cleanup pfpro_init pfpro_process_raw pfpro_process pfpro_version contained @@ -242,13 +242,14 @@ syn keyword phpFunctions class_implements class_parents class_uses iterator_appl syn keyword phpFunctions sqlite_array_query sqlite_busy_timeout sqlite_changes sqlite_close sqlite_column sqlite_create_aggregate sqlite_create_function sqlite_current sqlite_error_string sqlite_escape_string sqlite_fetch_array sqlite_fetch_single sqlite_fetch_string sqlite_field_name sqlite_has_more sqlite_last_error sqlite_last_insert_rowid sqlite_libencoding sqlite_libversion sqlite_next sqlite_num_fields sqlite_num_rows sqlite_open sqlite_popen sqlite_query sqlite_rewind sqlite_seek sqlite_udf_decode_binary sqlite_udf_encode_binary sqlite_unbuffered_query contained syn keyword phpFunctions stream_context_create stream_context_get_options stream_context_set_option stream_context_set_params stream_copy_to_stream stream_filter_append stream_filter_prepend stream_filter_register stream_get_contents stream_get_filters stream_get_line stream_get_meta_data stream_get_transports stream_get_wrappers stream_register_wrapper stream_select stream_set_blocking stream_set_timeout stream_set_write_buffer stream_socket_accept stream_socket_client stream_socket_get_name stream_socket_recvfrom stream_socket_sendto stream_socket_server stream_wrapper_register contained syn keyword phpFunctions addcslashes addslashes bin2hex chop chr chunk_split convert_cyr_string count_chars crc32 crypt explode fprintf get_html_translation_table hebrev hebrevc html_entity_decode htmlentities htmlspecialchars implode join levenshtein localeconv ltrim md5_file md5 metaphone money_format nl_langinfo nl2br number_format ord parse_str print printf quoted_printable_decode quotemeta rtrim setlocale sha1_file sha1 similar_text soundex sprintf sscanf str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpos strrchr strrev strripos strrpos strspn strstr strtok strtolower strtoupper strtr substr_compare substr_count substr_replace substr trim ucfirst ucwords vprintf vsprintf wordwrap contained +syn keyword phpFunctions fdiv get_debug_type getdir str_contains str_ends_with str_starts_with syn keyword phpFunctions swf_actiongeturl swf_actiongotoframe swf_actiongotolabel swf_actionnextframe swf_actionplay swf_actionprevframe swf_actionsettarget swf_actionstop swf_actiontogglequality swf_actionwaitforframe swf_addbuttonrecord swf_addcolor swf_closefile swf_definebitmap swf_definefont swf_defineline swf_definepoly swf_definerect swf_definetext swf_endbutton swf_enddoaction swf_endshape swf_endsymbol swf_fontsize swf_fontslant swf_fonttracking swf_getbitmapinfo swf_getfontinfo swf_getframe swf_labelframe swf_lookat swf_modifyobject swf_mulcolor swf_nextid swf_oncondition swf_openfile swf_ortho2 swf_ortho swf_perspective swf_placeobject swf_polarview swf_popmatrix swf_posround swf_pushmatrix swf_removeobject swf_rotate swf_scale swf_setfont swf_setframe swf_shapearc swf_shapecurveto3 swf_shapecurveto swf_shapefillbitmapclip swf_shapefillbitmaptile swf_shapefilloff swf_shapefillsolid swf_shapelinesolid swf_shapelineto swf_shapemoveto swf_showframe swf_startbutton swf_startdoaction swf_startshape swf_startsymbol swf_textwidth swf_translate swf_viewport contained syn keyword phpFunctions sybase_affected_rows sybase_close sybase_connect sybase_data_seek sybase_deadlock_retry_count sybase_fetch_array sybase_fetch_assoc sybase_fetch_field sybase_fetch_object sybase_fetch_row sybase_field_seek sybase_free_result sybase_get_last_message sybase_min_client_severity sybase_min_error_severity sybase_min_message_severity sybase_min_server_severity sybase_num_fields sybase_num_rows sybase_pconnect sybase_query sybase_result sybase_select_db sybase_set_message_handler sybase_unbuffered_query contained syn keyword phpFunctions tidy_access_count tidy_clean_repair tidy_config_count tidy_diagnose tidy_error_count tidy_get_body tidy_get_config tidy_get_error_buffer tidy_get_head tidy_get_html_ver tidy_get_html tidy_get_output tidy_get_release tidy_get_root tidy_get_status tidy_getopt tidy_is_xhtml tidy_load_config tidy_parse_file tidy_parse_string tidy_repair_file tidy_repair_string tidy_reset_config tidy_save_config tidy_set_encoding tidy_setopt tidy_warning_count tidy_is_xml tidy_get_opt_doc contained syn keyword phpMethods attributes children get_attr get_nodes has_children has_siblings is_asp is_comment is_html is_jsp is_jste is_text is_xhtml is_xml next prev tidy_node contained syn keyword phpFunctions token_get_all token_name contained syn keyword phpFunctions base64_decode base64_encode get_meta_tags http_build_query parse_url rawurldecode rawurlencode urldecode urlencode contained -syn keyword phpFunctions doubleval empty floatval get_defined_vars get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained +syn keyword phpFunctions doubleval empty floatval get_defined_vars get_resource_id get_resource_type gettype import_request_variables intval is_array is_bool is_callable is_double is_float is_int is_integer is_long is_null is_numeric is_object is_real is_resource is_scalar is_string isset print_r serialize settype strval unserialize unset var_dump var_export contained syn keyword phpFunctions get_called_class property_exists interface_exists trait_exists class_alias get_mangled_object_vars set_exception_handler restore_exception_handler get_declared_traits get_declared_interfaces get_resources gc_mem_caches gc_collect_cycles gc_enabled gc_enable gc_disable gc_status contained syn keyword phpFunctions vpopmail_add_alias_domain_ex vpopmail_add_alias_domain vpopmail_add_domain_ex vpopmail_add_domain vpopmail_add_user vpopmail_alias_add vpopmail_alias_del_domain vpopmail_alias_del vpopmail_alias_get_all vpopmail_alias_get vpopmail_auth_user vpopmail_del_domain_ex vpopmail_del_domain vpopmail_del_user vpopmail_error vpopmail_passwd vpopmail_set_user_quota contained syn keyword phpFunctions w32api_deftype w32api_init_dtype w32api_invoke_function w32api_register_function w32api_set_call_method contained @@ -282,7 +283,7 @@ syn keyword phpStatement return break continue exit goto yield contained syn keyword phpKeyword var const contained " Type -syn keyword phpType void bool boolean int integer real double float string array object NULL callable iterable contained +syn keyword phpType void bool boolean int integer real double float string array object NULL callable iterable mixed contained " Structure syn keyword phpStructure namespace extends implements instanceof parent self contained @@ -296,6 +297,7 @@ syn match phpOperator "&&\|\<and\>" contained display syn match phpOperator "||\|\<x\=or\>" contained display syn match phpRelation "[!=<>]=" contained display syn match phpRelation "[<>]" contained display +syn match phpRelation "<=>" contained display " PHP 8.0 adds the nullsafe operator ?-> for property access and method calls. syn match phpMemberSelector "?\?->" contained display syn match phpVarSelector "\$" contained display @@ -313,10 +315,14 @@ syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contain syn match phpInterpSimpleError "?\?->[^a-zA-Z_]" contained display " make sure these stay above the correct DollarCurlies so they don't take priority syn match phpInterpBogusDollarCurley "${[^}]*}" contained display " fallback (if nothing else matches) - syn match phpinterpSimpleBracketsInner "\w\+" contained - syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner - syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner - syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner + syn match phpInterpSimpleBracketsInner "\w\+" contained + syn match phpInterpSimpleBracketsInner "\$\h\w*" contained + syn match phpInterpSimpleBrackets "\[\$\?\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner + " -0x1 and -123 refer to the string offsets '-0x1' and '-123' of array keys + " TODO: Support [1_2], [-0b1_10_1], etc (also literal strings). + syn match phpInterpSimpleBrackets "\[-\?\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner + syn match phpInterpSimpleBrackets "\[-\?0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner + syn match phpInterpSimpleBrackets "\[-\?0[bB][01]\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|?\?->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display syn match phpInterpVarname "\h\w*" contained syn match phpInterpMethodName "\h\w*" contained " default color @@ -515,7 +521,10 @@ syntax keyword phpSpecialFunction containedin=ALLBUT,phpComment,phpStringDouble, hi def link phpSpecialFunction phpOperator " Highlighting for PHP5's built-in classes -" - built-in classes harvested from get_declared_classes() in 5.1.4 +" Note: Some of the names have inconsistent cases. +" Those are probably the actual name in reflection and should not be changed in +" this file. +" (CURLFile and CurlShareHandle, XMLReader and XmlParser, etc) syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStringSingle,phpIdentifier,phpMethodsVar \ stdClass __PHP_Incomplete_Class php_user_filter AssertionError Directory ArrayObject \ Exception ErrorException LogicException BadFunctionCallException BadMethodCallException DomainException @@ -527,22 +536,34 @@ syntax keyword phpClasses containedin=ALLBUT,phpComment,phpStringDouble,phpStrin \ RecursiveRegexIterator RecursiveTreeIterator RegexIterator SplDoublyLinkedList \ SplFixedArray SplHeap SplMaxHeap SplMinHeap SplPriorityQueue SplQueue SplStack \ InvalidArgumentException LengthException OutOfRangeException RuntimeException OutOfBoundsException + \ Attribute InternalIterator Stringable UnhandledMatchError ValueError WeakMap \ OverflowException RangeException UnderflowException UnexpectedValueException \ PDO PDOException PDOStatement PDORow \ Reflection ReflectionFunction ReflectionParameter ReflectionMethod ReflectionClass \ ReflectionObject ReflectionProperty ReflectionExtension ReflectionException \ ReflectionClassConstant ReflectionFunctionAbstract ReflectionGenerator ReflectionNamedType \ ReflectionReference ReflectionType ReflectionZendExtension + \ ReflectionAttribute ReflectionUnionType \ SplFileInfo SplFileObject SplTempFileObject SplObjectStorage \ XMLWriter LibXMLError XMLReader SimpleXMLElement SimpleXMLIterator + \ XmlParser + \ DeflateContext InflateContext \ DOMException DOMStringList DOMNameList DOMDomError DOMErrorHandler \ DOMImplementation DOMImplementationList DOMImplementationSource \ DOMNode DOMNameSpaceNode DOMDocumentFragment DOMDocument DOMNodeList DOMNamedNodeMap \ DOMCharacterData DOMAttr DOMElement DOMText DOMComment DOMTypeinfo DOMUserDataHandler \ DOMLocator DOMConfiguration DOMCdataSection DOMDocumentType DOMNotation DOMEntity \ DOMEntityReference DOMProcessingInstruction DOMStringExtend DOMXPath + \ DOMChildNode DOMParentNode + \ EnchantBroker EnchantDictionary + \ GdImage + \ OpenSSLAsymmetricKey OpenSSLCertificate OpenSSLCertificateSigningRequest + \ Shmop + \ AddressInfo Socket + \ SysvMessageQueue SysvSemaphore SysvSharedMemory + \ PhpToken \ APCIterator APCuIterator - \ CURLFile + \ CURLFile CurlHandle CurlMultiHandle CurlShareHandle \ DateInterval DatePeriod DateTime DateTimeImmutable DateTimeZone \ finfo \ GMP @@ -566,7 +587,6 @@ syntax keyword phpInterfaces containedin=ALLBUT,phpComment,phpStringDouble,phpSt \ Iterator IteratorAggregate RecursiveIterator OuterIterator SeekableIterator \ Traversable ArrayAccess Serializable Countable SplObserver SplSubject Reflector \ Throwable DateTimeInterface JsonSerializable SessionHandlerInterface SessionIdInterface SessionUpdateTimestampHandlerInterface - \ hi def link phpInterfaces phpConstant @@ -604,6 +624,7 @@ if php_alt_comparisons " highlight comparison operators differently syntax match phpComparison "\v[=!]\=\=?" contained containedin=phpRegion syntax match phpComparison "\v[=<>-]@<![<>]\=?[<>]@!" contained containedin=phpRegion + syntax match phpComparison "<=>" contained containedin=phpRegion " highlight the 'instanceof' operator as a comparison operator rather than a structure syntax case ignore diff --git a/runtime/syntax/poke.vim b/runtime/syntax/poke.vim new file mode 100644 index 0000000000..4a07a77d6c --- /dev/null +++ b/runtime/syntax/poke.vim @@ -0,0 +1,151 @@ +" Copyright (C) 2021 Matthew T. Ihlenfield. +" +" This program is free software: you can redistribute it and/or modify +" it under the terms of the GNU General Public License as published by +" the Free Software Foundation, either version 3 of the License, or +" (at your option) any later version. +" +" This program is distributed in the hope that it will be useful, +" but WITHOUT ANY WARRANTY; without even the implied warranty of +" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +" GNU General Public License for more details. +" +" You should have received a copy of the GNU General Public License +" along with this program. If not, see <http://www.gnu.org/licenses/>. +" +" Vim syntax file +" Language: Poke +" Maintainer: Matt Ihlenfield <mtihlenfield@protonmail.com> +" Filenames: *.pk +" Latest Revision: 10 March 2021 + +if exists('b:current_syntax') + finish +endif + +" Poke statement +syn keyword pokeStatement assert break continue return +syn keyword pokeStatement type unit fun method nextgroup=pokeFunction skipwhite +syn keyword pokeStatement var nextgroup=pokeVar skipWhite + +" Identifiers +syn match pokeVar '\h\w*' display contained + +" User defined functions +syn match pokeFunction '\h\w*' display contained + +" Poke operators +syn keyword pokeOperator in sizeof as isa unmap + +" Conditionals +syn keyword pokeConditional if else where + +" Structures, unions, etc... +syn keyword pokeStructure struct union pinned + +" Loops +syn keyword pokeRepeat while for + +" Imports +syn keyword pokeLoad load + +" Exceptions +syn keyword pokeException try catch until raise + +" Exception types +syn keyword pokeExceptionType Exception E_generic E_out_of_bounds +syn keyword pokeExceptionType E_eof E_elem E_constraint +syn keyword pokeExceptionType E_conv E_map_bounds E_map +syn keyword pokeExceptionType E_div_by_zero E_no_ios E_no_return +syn keyword pokeExceptionType E_io E_io_flags E_assert E_overflow + +" Exception codes +syn keyword pokeExceptionCode EC_generic EC_out_of_bounds +syn keyword pokeExceptionCode EC_eof EC_elem EC_constraint +syn keyword pokeExceptionCode EC_conv EC_map_bounds EC_map +syn keyword pokeExceptionCode EC_div_by_zero EC_no_ios EC_no_return +syn keyword pokeExceptionCode EC_io EC_io_flags EC_assert EC_overflow + +" Poke builtin types +syn keyword pokeBuiltinType string void int uint bit nibble +syn keyword pokeBuiltinType byte char ushort short ulong long +syn keyword pokeBuiltinType uint8 uint16 uint32 uint64 +syn keyword pokeBuiltinType off64 uoff64 offset +syn keyword pokeBuiltinType Comparator POSIX_Time32 POSIX_Time64 +syn keyword pokeBuiltinType big little any + +" Poke constants +syn keyword pokeConstant ENDIAN_LITTLE ENDIAN_BIG +syn keyword pokeConstant IOS_F_READ IOS_F_WRITE IOS_F_TRUNCATE IOS_F_CREATE +syn keyword pokeConstant IOS_M_RDONLY IOS_M_WRONLY IOS_M_RDWR +syn keyword pokeConstant load_path NULL OFFSET + +" Poke std lib +syn keyword pokeBuiltinFunction print printf catos stoca atoi ltos reverse +syn keyword pokeBuiltinFunction ltrim rtrim strchr qsort crc32 alignto +syn keyword pokeBuiltinFunction open close flush get_ios set_ios iosize +syn keyword pokeBuiltinFunction rand get_endian set_endian strace exit +syn keyword pokeBuiltinFunction getenv + +" Formats + +" Special chars +syn match pokeSpecial "\\\([nt\\]\|\o\{1,3}\)" display contained + +" Chars +syn match pokeChar "'[^']*'" contains=pokeSpecial + +" Attributes +syn match pokeAttribute "\h\w*'\h\w" + +" Strings +syn region pokeString skip=+\\\\\|\\"+ start=+"+ end=+"+ contains=pokeSpecial + +" Integer literals +syn match pokeInteger "\<\d\+_*\d*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" +syn match pokeInteger "\<0[Xx]\x\+_*\x*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" +syn match pokeInteger "\<0[Oo]\o\+_*\o*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" +syn match pokeInteger "\<0[Bb][01]\+_*[01]*\([LlHhBbNn]\=[Uu]\=\|[Uu]\=[LlHhBbNn]\=\)\>" + +" Units +syn keyword pokeBuiltinUnit b M B +syn keyword pokeBuiltinUnit Kb KB Mb MB Gb GB +syn keyword pokeBuiltinUnit Kib KiB Mib MiB Gib GiB + +" Offsets +syn match pokeOffset "#\h\w*" contains=pokeBuiltinUnit + +" Comments +syn keyword pokeCommentTodo TODO FIXME XXX TBD contained +syn match pokeLineComment "\/\/.*" contains=pokeCommentTodo,@Spell extend +syn region pokeComment start="/\*" end="\*/" contains=pokeCommentTodo,@Spell fold extend + +" Allow folding of blocks +syn region pokeBlock start="{" end="}" transparent fold + +" Highlight groups +hi def link pokeBuiltinFunction Function +hi def link pokeBuiltinType Type +hi def link pokeBuiltinUnit Keyword +hi def link pokeChar Character +hi def link pokeComment Comment +hi def link pokeCommentTodo Todo +hi def link pokeConditional Conditional +hi def link pokeConstant Constant +hi def link pokeException Exception +hi def link pokeExceptionCode Constant +hi def link pokeExceptionType Type +hi def link pokeFunction Function +hi def link pokeInteger Number +hi def link pokeLineComment Comment +hi def link pokeLoad Include +hi def link pokeOffset StorageClass +hi def link pokeOperator Operator +hi def link pokeSpecial SpecialChar +hi def link pokeStatement Statement +hi def link pokeString String +hi def link pokeStructure Structure +hi def link pokeRepeat Repeat +hi def link pokeVar Identifier + +let b:current_syntax = 'poke' diff --git a/runtime/syntax/prolog.vim b/runtime/syntax/prolog.vim index 58b279b029..93aba4dc19 100644 --- a/runtime/syntax/prolog.vim +++ b/runtime/syntax/prolog.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: PROLOG " Maintainer: Anton Kochkov <anton.kochkov@gmail.com> -" Last Change: 2019 Aug 29 +" Last Change: 2021 Jan 05 " There are two sets of highlighting in here: " If the "prolog_highlighting_clean" variable exists, it is rather sparse. @@ -21,16 +21,16 @@ syn case match " Very simple highlighting for comments, clause heads and " character codes. It respects prolog strings and atoms. -syn region prologCComment start=+/\*+ end=+\*/+ -syn match prologComment +%.*+ +syn region prologCComment start=+/\*+ end=+\*/+ contains=@Spell +syn match prologComment +%.*+ contains=@Spell if !exists("prolog_highlighting_no_keyword") syn keyword prologKeyword module meta_predicate multifile dynamic endif syn match prologCharCode +0'\\\=.+ -syn region prologString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region prologString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell syn region prologAtom start=+'+ skip=+\\\\\|\\'+ end=+'+ -syn region prologClause matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause +syn region prologClause matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause contains=@NoSpell if !exists("prolog_highlighting_clean") diff --git a/runtime/syntax/proto.vim b/runtime/syntax/proto.vim index 4615e0ca0e..0d2d2f259e 100644 --- a/runtime/syntax/proto.vim +++ b/runtime/syntax/proto.vim @@ -1,26 +1,36 @@ -" syntax file for Protocol Buffers - Google's data interchange format -" +" Protocol Buffers - Google's data interchange format " Copyright 2008 Google Inc. All rights reserved. +" https://developers.google.com/protocol-buffers/ " -" Permission is hereby granted, free of charge, to any person obtaining a copy -" of this software and associated documentation files (the "Software"), to deal -" in the Software without restriction, including without limitation the rights -" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -" copies of the Software, and to permit persons to whom the Software is -" furnished to do so, subject to the following conditions: -" -" The above copyright notice and this permission notice shall be included in -" all copies or substantial portions of the Software. +" Redistribution and use in source and binary forms, with or without +" modification, are permitted provided that the following conditions are +" met: " -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -" THE SOFTWARE. +" * Redistributions of source code must retain the above copyright +" notice, this list of conditions and the following disclaimer. +" * Redistributions in binary form must reproduce the above +" copyright notice, this list of conditions and the following disclaimer +" in the documentation and/or other materials provided with the +" distribution. +" * Neither the name of Google Inc. nor the names of its +" contributors may be used to endorse or promote products derived from +" this software without specific prior written permission. " -" http://code.google.com/p/protobuf/ +" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +" "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +" LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +" A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +" OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +" OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +" This is the Vim syntax file for Google Protocol Buffers as found at +" https://github.com/protocolbuffers/protobuf +" Last update: 2020 Oct 29 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -33,10 +43,10 @@ syn keyword protoTodo contained TODO FIXME XXX syn cluster protoCommentGrp contains=protoTodo syn keyword protoSyntax syntax import option -syn keyword protoStructure package message group +syn keyword protoStructure package message group oneof syn keyword protoRepeat optional required repeated syn keyword protoDefault default -syn keyword protoExtend extend extensions to max +syn keyword protoExtend extend extensions to max reserved syn keyword protoRPC service rpc returns syn keyword protoType int32 int64 uint32 uint64 sint32 sint64 @@ -48,10 +58,10 @@ syn keyword protoBool true false syn match protoInt /-\?\<\d\+\>/ syn match protoInt /\<0[xX]\x+\>/ syn match protoFloat /\<-\?\d*\(\.\d*\)\?/ -syn region protoComment start="\/\*" end="\*\/" contains=@protoCommentGrp -syn region protoComment start="//" skip="\\$" end="$" keepend contains=@protoCommentGrp -syn region protoString start=/"/ skip=/\\./ end=/"/ -syn region protoString start=/'/ skip=/\\./ end=/'/ +syn region protoComment start="\/\*" end="\*\/" contains=@pbCommentGrp,@Spell +syn region protoComment start="//" skip="\\$" end="$" keepend contains=@pbCommentGrp,@Spell +syn region protoString start=/"/ skip=/\\./ end=/"/ contains=@Spell +syn region protoString start=/'/ skip=/\\./ end=/'/ contains=@Spell hi def link protoTodo Todo diff --git a/runtime/syntax/ps1.vim b/runtime/syntax/ps1.vim new file mode 100644 index 0000000000..e8f6b2f8ed --- /dev/null +++ b/runtime/syntax/ps1.vim @@ -0,0 +1,182 @@ +" Vim syntax file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2020 Nov 24 +" +" The following settings are available for tuning syntax highlighting: +" let ps1_nofold_blocks = 1 +" let ps1_nofold_sig = 1 +" let ps1_nofold_region = 1 + +if exists("b:current_syntax") + finish +endif + +" Operators contain dashes +setlocal iskeyword+=- + +" PowerShell doesn't care about case +syn case ignore + +" Sync-ing method +syn sync minlines=100 + +" Certain tokens can't appear at the top level of the document +syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1FunctionDeclaration + +" Comments and special comment words +syn keyword ps1CommentTodo TODO FIXME XXX TBD HACK NOTE contained +syn match ps1CDocParam /.*/ contained +syn match ps1CommentDoc /^\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained +syn match ps1CommentDoc /#\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained +syn match ps1Comment /#.*/ contains=ps1CommentTodo,ps1CommentDoc,@Spell +syn region ps1Comment start="<#" end="#>" contains=ps1CommentTodo,ps1CommentDoc,@Spell + +" Language keywords and elements +syn keyword ps1Conditional if else elseif switch default +syn keyword ps1Repeat while for do until break continue foreach in +syn match ps1Repeat /\<foreach\>/ nextgroup=ps1Block skipwhite +syn match ps1Keyword /\<while\>/ nextgroup=ps1Block skipwhite +syn match ps1Keyword /\<where\>/ nextgroup=ps1Block skipwhite + +syn keyword ps1Exception begin process end exit inlinescript parallel sequence +syn keyword ps1Keyword try catch finally throw +syn keyword ps1Keyword return filter in trap param data dynamicparam +syn keyword ps1Constant $true $false $null +syn match ps1Constant +\$?+ +syn match ps1Constant +\$_+ +syn match ps1Constant +\$\$+ +syn match ps1Constant +\$^+ + +" Keywords reserved for future use +syn keyword ps1Keyword class define from using var + +" Function declarations +syn keyword ps1Keyword function nextgroup=ps1Function skipwhite +syn keyword ps1Keyword filter nextgroup=ps1Function skipwhite +syn keyword ps1Keyword workflow nextgroup=ps1Function skipwhite +syn keyword ps1Keyword configuration nextgroup=ps1Function skipwhite +syn keyword ps1Keyword class nextgroup=ps1Function skipwhite +syn keyword ps1Keyword enum nextgroup=ps1Function skipwhite + +" Function declarations and invocations +syn match ps1Cmdlet /\v(add|clear|close|copy|enter|exit|find|format|get|hide|join|lock|move|new|open|optimize|pop|push|redo|remove|rename|reset|search|select|Set|show|skip|split|step|switch|undo|unlock|watch)(-\w+)+/ contained +syn match ps1Cmdlet /\v(connect|disconnect|read|receive|send|write)(-\w+)+/ contained +syn match ps1Cmdlet /\v(backup|checkpoint|compare|compress|convert|convertfrom|convertto|dismount|edit|expand|export|group|import|initialize|limit|merge|mount|out|publish|restore|save|sync|unpublish|update)(-\w+)+/ contained +syn match ps1Cmdlet /\v(debug|measure|ping|repair|resolve|test|trace)(-\w+)+/ contained +syn match ps1Cmdlet /\v(approve|assert|build|complete|confirm|deny|deploy|disable|enable|install|invoke|register|request|restart|resume|start|stop|submit|suspend|uninstall|unregister|wait)(-\w+)+/ contained +syn match ps1Cmdlet /\v(block|grant|protect|revoke|unblock|unprotect)(-\w+)+/ contained +syn match ps1Cmdlet /\v(use)(-\w+)+/ contained + +" Other functions +syn match ps1Function /\w\+\(-\w\+\)\+/ contains=ps1Cmdlet + +" Type declarations +syn match ps1Type /\[[a-z_][a-z0-9_.,\[\]]\+\]/ + +" Variable references +syn match ps1ScopeModifier /\(global:\|local:\|private:\|script:\)/ contained +syn match ps1Variable /\$\w\+\(:\w\+\)\?/ contains=ps1ScopeModifier +syn match ps1Variable /\${\w\+\(:\?[[:alnum:]_()]\+\)\?}/ contains=ps1ScopeModifier + +" Operators +syn keyword ps1Operator -eq -ne -ge -gt -lt -le -like -notlike -match -notmatch -replace -split -contains -notcontains +syn keyword ps1Operator -ieq -ine -ige -igt -ile -ilt -ilike -inotlike -imatch -inotmatch -ireplace -isplit -icontains -inotcontains +syn keyword ps1Operator -ceq -cne -cge -cgt -clt -cle -clike -cnotlike -cmatch -cnotmatch -creplace -csplit -ccontains -cnotcontains +syn keyword ps1Operator -in -notin +syn keyword ps1Operator -is -isnot -as -join +syn keyword ps1Operator -and -or -not -xor -band -bor -bnot -bxor +syn keyword ps1Operator -f +syn match ps1Operator /!/ +syn match ps1Operator /=/ +syn match ps1Operator /+=/ +syn match ps1Operator /-=/ +syn match ps1Operator /\*=/ +syn match ps1Operator /\/=/ +syn match ps1Operator /%=/ +syn match ps1Operator /+/ +syn match ps1Operator /-\(\s\|\d\|\.\|\$\|(\)\@=/ +syn match ps1Operator /\*/ +syn match ps1Operator /\// +syn match ps1Operator /|/ +syn match ps1Operator /%/ +syn match ps1Operator /&/ +syn match ps1Operator /::/ +syn match ps1Operator /,/ +syn match ps1Operator /\(^\|\s\)\@<=\. \@=/ + +" Regular Strings +" These aren't precisely correct and could use some work +syn region ps1String start=/"/ skip=/`"/ end=/"/ contains=@ps1StringSpecial,@Spell +syn region ps1String start=/'/ skip=/''/ end=/'/ + +" Here-Strings +syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial,@Spell +syn region ps1String start=/@'$/ end=/^'@/ + +" Interpolation +syn match ps1Escape /`./ +syn region ps1Interpolation matchgroup=ps1InterpolationDelimiter start="$(" end=")" contained contains=ALLBUT,@ps1NotTop +syn region ps1NestedParentheses start="(" skip="\\\\\|\\)" matchgroup=ps1Interpolation end=")" transparent contained +syn cluster ps1StringSpecial contains=ps1Escape,ps1Interpolation,ps1Variable,ps1Boolean,ps1Constant,ps1BuiltIn,@Spell + +" Numbers +syn match ps1Number "\(\<\|-\)\@<=\(0[xX]\x\+\|\d\+\)\([KMGTP][B]\)\=\(\>\|-\)\@=" +syn match ps1Number "\(\(\<\|-\)\@<=\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[dD]\=" +syn match ps1Number "\<\d\+[eE][-+]\=\d\+[dD]\=\>" +syn match ps1Number "\<\d\+\([eE][-+]\=\d\+\)\=[dD]\>" + +" Constants +syn match ps1Boolean "$\%(true\|false\)\>" +syn match ps1Constant /\$null\>/ +syn match ps1BuiltIn "$^\|$?\|$_\|$\$" +syn match ps1BuiltIn "$\%(args\|error\|foreach\|home\|input\)\>" +syn match ps1BuiltIn "$\%(match\(es\)\?\|myinvocation\|host\|lastexitcode\)\>" +syn match ps1BuiltIn "$\%(ofs\|shellid\|stacktrace\)\>" + +" Named Switch +syn match ps1Label /\s-\w\+/ + +" Folding blocks +if !exists('g:ps1_nofold_blocks') + syn region ps1Block start=/{/ end=/}/ transparent fold +endif + +if !exists('g:ps1_nofold_region') + syn region ps1Region start=/#region/ end=/#endregion/ transparent fold keepend extend +endif + +if !exists('g:ps1_nofold_sig') + syn region ps1Signature start=/# SIG # Begin signature block/ end=/# SIG # End signature block/ transparent fold +endif + +" Setup default color highlighting +hi def link ps1Number Number +hi def link ps1Block Block +hi def link ps1Region Region +hi def link ps1Exception Exception +hi def link ps1Constant Constant +hi def link ps1String String +hi def link ps1Escape SpecialChar +hi def link ps1InterpolationDelimiter Delimiter +hi def link ps1Conditional Conditional +hi def link ps1Cmdlet Function +hi def link ps1Function Identifier +hi def link ps1Variable Identifier +hi def link ps1Boolean Boolean +hi def link ps1Constant Constant +hi def link ps1BuiltIn StorageClass +hi def link ps1Type Type +hi def link ps1ScopeModifier StorageClass +hi def link ps1Comment Comment +hi def link ps1CommentTodo Todo +hi def link ps1CommentDoc Tag +hi def link ps1CDocParam Identifier +hi def link ps1Operator Operator +hi def link ps1Repeat Repeat +hi def link ps1RepeatAndCmdlet Repeat +hi def link ps1Keyword Keyword +hi def link ps1KeywordAndCmdlet Keyword +hi def link ps1Label Label + +let b:current_syntax = "ps1" diff --git a/runtime/syntax/ps1xml.vim b/runtime/syntax/ps1xml.vim new file mode 100644 index 0000000000..6ca9ed0d1b --- /dev/null +++ b/runtime/syntax/ps1xml.vim @@ -0,0 +1,51 @@ +" Vim syntax file +" Language: Windows PowerShell +" URL: https://github.com/PProvost/vim-ps1 +" Last Change: 2013 Jun 24 + +if exists("b:current_syntax") + finish +endif + +let s:ps1xml_cpo_save = &cpo +set cpo&vim + +doau syntax xml +unlet b:current_syntax + +syn case ignore +syn include @ps1xmlScriptBlock <sfile>:p:h/ps1.vim +unlet b:current_syntax + +syn region ps1xmlScriptBlock + \ matchgroup=xmlTag start="<Script>" + \ matchgroup=xmlEndTag end="</Script>" + \ fold + \ contains=@ps1xmlScriptBlock + \ keepend +syn region ps1xmlScriptBlock + \ matchgroup=xmlTag start="<ScriptBlock>" + \ matchgroup=xmlEndTag end="</ScriptBlock>" + \ fold + \ contains=@ps1xmlScriptBlock + \ keepend +syn region ps1xmlScriptBlock + \ matchgroup=xmlTag start="<GetScriptBlock>" + \ matchgroup=xmlEndTag end="</GetScriptBlock>" + \ fold + \ contains=@ps1xmlScriptBlock + \ keepend +syn region ps1xmlScriptBlock + \ matchgroup=xmlTag start="<SetScriptBlock>" + \ matchgroup=xmlEndTag end="</SetScriptBlock>" + \ fold + \ contains=@ps1xmlScriptBlock + \ keepend + +syn cluster xmlRegionHook add=ps1xmlScriptBlock + +let b:current_syntax = "ps1xml" + +let &cpo = s:ps1xml_cpo_save +unlet s:ps1xml_cpo_save + diff --git a/runtime/syntax/psl.vim b/runtime/syntax/psl.vim new file mode 100644 index 0000000000..ff6e833bc2 --- /dev/null +++ b/runtime/syntax/psl.vim @@ -0,0 +1,83 @@ +" Vim syntax file +" Language: Property Specification Language (PSL) +" Maintainer: Daniel Kho <daniel.kho@logik.haus> +" Last Changed: 2021 Apr 17 by Daniel Kho + +" quit when a syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +" Read in VHDL syntax files +runtime! syntax/vhdl.vim +unlet b:current_syntax + +let s:cpo_save = &cpo +set cpo&vim + +" case is not significant +syn case ignore + +" Add ! character to keyword recognition. +setlocal iskeyword+=33 + +" PSL keywords +syn keyword pslOperator A AF AG AX +syn keyword pslOperator E EF EG EX +syn keyword pslOperator F G U W X X! +syn keyword pslOperator abort always assert assume async_abort +syn keyword pslOperator before before! before!_ before_ bit bitvector boolean +syn keyword pslOperator clock const countones cover +syn keyword pslOperator default +syn keyword pslOperator ended eventually! +syn keyword pslOperator fairness fell for forall +syn keyword pslOperator hdltype +syn keyword pslOperator in inf inherit isunknown +syn keyword pslOperator mutable +syn keyword pslOperator never next next! next_a next_a! next_e next_e! next_event next_event! next_event_a next_event_a! next_event_e next_event_e! nondet nondet_vector numeric +syn keyword pslOperator onehot onehot0 +syn keyword pslOperator property prev +syn keyword pslOperator report restrict restrict! rose +syn keyword pslOperator sequence stable string strong sync_abort +syn keyword pslOperator union until until! until!_ until_ +syn keyword pslOperator vmode vpkg vprop vunit +syn keyword pslOperator within +"" Common keywords with VHDL +"syn keyword pslOperator and is not or to + +" PSL operators +syn match pslOperator "=>\||=>" +syn match pslOperator "<-\|->" +syn match pslOperator "@" + + +"Modify the following as needed. The trade-off is performance versus functionality. +syn sync minlines=600 + +" Define the default highlighting. +" Only when an item doesn't have highlighting yet + +hi def link pslSpecial Special +hi def link pslStatement Statement +hi def link pslCharacter Character +hi def link pslString String +hi def link pslVector Number +hi def link pslBoolean Number +hi def link pslTodo Todo +hi def link pslFixme Fixme +hi def link pslComment Comment +hi def link pslNumber Number +hi def link pslTime Number +hi def link pslType Type +hi def link pslOperator Operator +hi def link pslError Error +hi def link pslAttribute Special +hi def link pslPreProc PreProc + + +let b:current_syntax = "psl" + +let &cpo = s:cpo_save +unlet s:cpo_save + +" vim: ts=8 diff --git a/runtime/syntax/python.vim b/runtime/syntax/python.vim index 5aec2fe3d2..3427aa06c8 100644 --- a/runtime/syntax/python.vim +++ b/runtime/syntax/python.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Python " Maintainer: Zvezdan Petkovic <zpetkovic@acm.org> -" Last Change: 2016 Oct 29 +" Last Change: 2021 Feb 15 " Credits: Neil Schemenauer <nas@python.ca> " Dmitry Vasiliev " @@ -71,30 +71,17 @@ endif " Keep Python keywords in alphabetical order inside groups for easy " comparison with the table in the 'Python Language Reference' -" https://docs.python.org/2/reference/lexical_analysis.html#keywords, -" https://docs.python.org/3/reference/lexical_analysis.html#keywords. +" https://docs.python.org/reference/lexical_analysis.html#keywords. " Groups are in the order presented in NAMING CONVENTIONS in syntax.txt. " Exceptions come last at the end of each group (class and def below). " -" Keywords 'with' and 'as' are new in Python 2.6 -" (use 'from __future__ import with_statement' in Python 2.5). +" The list can be checked using: " -" Some compromises had to be made to support both Python 3 and 2. -" We include Python 3 features, but when a definition is duplicated, -" the last definition takes precedence. -" -" - 'False', 'None', and 'True' are keywords in Python 3 but they are -" built-ins in 2 and will be highlighted as built-ins below. -" - 'exec' is a built-in in Python 3 and will be highlighted as -" built-in below. -" - 'nonlocal' is a keyword in Python 3 and will be highlighted. -" - 'print' is a built-in in Python 3 and will be highlighted as -" built-in below (use 'from __future__ import print_function' in 2) -" - async and await were added in Python 3.5 and are soft keywords. +" python3 -c 'import keyword, pprint; pprint.pprint(keyword.kwlist, compact=True)' " syn keyword pythonStatement False None True -syn keyword pythonStatement as assert break continue del exec global -syn keyword pythonStatement lambda nonlocal pass print return with yield +syn keyword pythonStatement as assert break continue del global +syn keyword pythonStatement lambda nonlocal pass return with yield syn keyword pythonStatement class def nextgroup=pythonFunction skipwhite syn keyword pythonConditional elif else if syn keyword pythonRepeat for while @@ -103,7 +90,7 @@ syn keyword pythonException except finally raise try syn keyword pythonInclude from import syn keyword pythonAsync async await -" Decorators (new in Python 2.4) +" Decorators " A dot must be allowed because of @MyClass.myfunc decorators. syn match pythonDecorator "@" display contained syn match pythonDecoratorName "@\s*\h\%(\w\|\.\)*" display contains=pythonDecorator @@ -168,8 +155,7 @@ syn match pythonEscape "\\$" " - 08e0 or 08j are highlighted, " " and so on, as specified in the 'Python Language Reference'. -" https://docs.python.org/2/reference/lexical_analysis.html#numeric-literals -" https://docs.python.org/3/reference/lexical_analysis.html#numeric-literals +" https://docs.python.org/reference/lexical_analysis.html#numeric-literals if !exists("python_no_number_highlight") " numbers (including longs and complex) syn match pythonNumber "\<0[oO]\=\o\+[Ll]\=\>" @@ -186,37 +172,37 @@ endif " Group the built-ins in the order in the 'Python Library Reference' for " easier comparison. -" https://docs.python.org/2/library/constants.html -" https://docs.python.org/3/library/constants.html -" http://docs.python.org/2/library/functions.html -" http://docs.python.org/3/library/functions.html -" http://docs.python.org/2/library/functions.html#non-essential-built-in-functions -" http://docs.python.org/3/library/functions.html#non-essential-built-in-functions +" https://docs.python.org/library/constants.html +" http://docs.python.org/library/functions.html " Python built-in functions are in alphabetical order. +" +" The list can be checked using: +" +" python3 -c 'import builtins, pprint; pprint.pprint(dir(builtins), compact=True)' +" +" The constants added by the `site` module are not listed below because they +" should not be used in programs, only in interactive interpreter. +" Similarly for some other attributes and functions `__`-enclosed from the +" output of the above command. +" if !exists("python_no_builtin_highlight") " built-in constants " 'False', 'True', and 'None' are also reserved words in Python 3 syn keyword pythonBuiltin False True None syn keyword pythonBuiltin NotImplemented Ellipsis __debug__ + " constants added by the `site` module + syn keyword pythonBuiltin quit exit copyright credits license " built-in functions - syn keyword pythonBuiltin abs all any bin bool bytearray callable chr - syn keyword pythonBuiltin classmethod compile complex delattr dict dir - syn keyword pythonBuiltin divmod enumerate eval filter float format - syn keyword pythonBuiltin frozenset getattr globals hasattr hash - syn keyword pythonBuiltin help hex id input int isinstance + syn keyword pythonBuiltin abs all any ascii bin bool breakpoint bytearray + syn keyword pythonBuiltin bytes callable chr classmethod compile complex + syn keyword pythonBuiltin delattr dict dir divmod enumerate eval exec + syn keyword pythonBuiltin filter float format frozenset getattr globals + syn keyword pythonBuiltin hasattr hash help hex id input int isinstance syn keyword pythonBuiltin issubclass iter len list locals map max syn keyword pythonBuiltin memoryview min next object oct open ord pow syn keyword pythonBuiltin print property range repr reversed round set - syn keyword pythonBuiltin setattr slice sorted staticmethod str - syn keyword pythonBuiltin sum super tuple type vars zip __import__ - " Python 2 only - syn keyword pythonBuiltin basestring cmp execfile file - syn keyword pythonBuiltin long raw_input reduce reload unichr - syn keyword pythonBuiltin unicode xrange - " Python 3 only - syn keyword pythonBuiltin ascii bytes exec - " non-essential built-in functions; Python 2 only - syn keyword pythonBuiltin apply buffer coerce intern + syn keyword pythonBuiltin setattr slice sorted staticmethod str sum super + syn keyword pythonBuiltin tuple type vars zip __import__ " avoid highlighting attributes as builtins syn match pythonAttribute /\.\h\w*/hs=s+1 \ contains=ALLBUT,pythonBuiltin,pythonFunction,pythonAsync @@ -224,28 +210,27 @@ if !exists("python_no_builtin_highlight") endif " From the 'Python Library Reference' class hierarchy at the bottom. -" http://docs.python.org/2/library/exceptions.html -" http://docs.python.org/3/library/exceptions.html +" http://docs.python.org/library/exceptions.html if !exists("python_no_exception_highlight") " builtin base exceptions (used mostly as base classes for other exceptions) syn keyword pythonExceptions BaseException Exception - syn keyword pythonExceptions ArithmeticError BufferError - syn keyword pythonExceptions LookupError - " builtin base exceptions removed in Python 3 - syn keyword pythonExceptions EnvironmentError StandardError + syn keyword pythonExceptions ArithmeticError BufferError LookupError " builtin exceptions (actually raised) - syn keyword pythonExceptions AssertionError AttributeError - syn keyword pythonExceptions EOFError FloatingPointError GeneratorExit - syn keyword pythonExceptions ImportError IndentationError - syn keyword pythonExceptions IndexError KeyError KeyboardInterrupt - syn keyword pythonExceptions MemoryError NameError NotImplementedError - syn keyword pythonExceptions OSError OverflowError ReferenceError - syn keyword pythonExceptions RuntimeError StopIteration SyntaxError + syn keyword pythonExceptions AssertionError AttributeError EOFError + syn keyword pythonExceptions FloatingPointError GeneratorExit ImportError + syn keyword pythonExceptions IndentationError IndexError KeyError + syn keyword pythonExceptions KeyboardInterrupt MemoryError + syn keyword pythonExceptions ModuleNotFoundError NameError + syn keyword pythonExceptions NotImplementedError OSError OverflowError + syn keyword pythonExceptions RecursionError ReferenceError RuntimeError + syn keyword pythonExceptions StopAsyncIteration StopIteration SyntaxError syn keyword pythonExceptions SystemError SystemExit TabError TypeError - syn keyword pythonExceptions UnboundLocalError UnicodeError - syn keyword pythonExceptions UnicodeDecodeError UnicodeEncodeError + syn keyword pythonExceptions UnboundLocalError UnicodeDecodeError + syn keyword pythonExceptions UnicodeEncodeError UnicodeError syn keyword pythonExceptions UnicodeTranslateError ValueError syn keyword pythonExceptions ZeroDivisionError + " builtin exception aliases for OSError + syn keyword pythonExceptions EnvironmentError IOError WindowsError " builtin OS exceptions in Python 3 syn keyword pythonExceptions BlockingIOError BrokenPipeError syn keyword pythonExceptions ChildProcessError ConnectionAbortedError @@ -253,18 +238,13 @@ if !exists("python_no_exception_highlight") syn keyword pythonExceptions ConnectionResetError FileExistsError syn keyword pythonExceptions FileNotFoundError InterruptedError syn keyword pythonExceptions IsADirectoryError NotADirectoryError - syn keyword pythonExceptions PermissionError ProcessLookupError - syn keyword pythonExceptions RecursionError StopAsyncIteration - syn keyword pythonExceptions TimeoutError - " builtin exceptions deprecated/removed in Python 3 - syn keyword pythonExceptions IOError VMSError WindowsError + syn keyword pythonExceptions PermissionError ProcessLookupError TimeoutError " builtin warnings syn keyword pythonExceptions BytesWarning DeprecationWarning FutureWarning syn keyword pythonExceptions ImportWarning PendingDeprecationWarning - syn keyword pythonExceptions RuntimeWarning SyntaxWarning UnicodeWarning + syn keyword pythonExceptions ResourceWarning RuntimeWarning + syn keyword pythonExceptions SyntaxWarning UnicodeWarning syn keyword pythonExceptions UserWarning Warning - " builtin warnings in Python 3 - syn keyword pythonExceptions ResourceWarning endif if exists("python_space_error_highlight") diff --git a/runtime/syntax/r.vim b/runtime/syntax/r.vim index 9e25dae363..a8100cfded 100644 --- a/runtime/syntax/r.vim +++ b/runtime/syntax/r.vim @@ -5,7 +5,7 @@ " Tom Payne <tom@tompayne.org> " Contributor: Johannes Ranke <jranke@uni-bremen.de> " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Wed Aug 01, 2018 10:10PM +" Last Change: Sun Mar 28, 2021 01:47PM " Filenames: *.R *.r *.Rhistory *.Rt " " NOTE: The highlighting of R functions might be defined in @@ -53,12 +53,12 @@ syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):" syn match rTodoParen contained "\(BUG\|FIXME\|NOTE\|TODO\)\s*(.\{-})\s*:" contains=rTodoKeyw,rTodoInfo transparent syn keyword rTodoKeyw BUG FIXME NOTE TODO contained syn match rTodoInfo "(\zs.\{-}\ze)" contained -syn match rComment contains=@Spell,rCommentTodo,rTodoParen,rOBlock "#.*" +syn match rComment contains=@Spell,rCommentTodo,rTodoParen "#.*" " Roxygen if g:r_syntax_hl_roxygen " A roxygen block can start at the beginning of a file (first version) and - " after a blank line (second version). It ends when a line that does not + " after a blank line (second version). It ends when a line appears that does not " contain a roxygen comment. In the following comments, any line containing " a roxygen comment marker (one or two hash signs # followed by a single " quote ' and preceded only by whitespace) is called a roxygen line. A @@ -71,6 +71,12 @@ if g:r_syntax_hl_roxygen syn match rOTitleBlock "\%^\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag syn match rOTitleBlock "^\s*\n\(\s*#\{1,2}' .*\n\)\{1,}" contains=rOCommentKey,rOTitleTag + " A title as part of a block is always at the beginning of the block, i.e. + " either at the start of a file or after a completely empty line. + syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag + syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag + syn match rOTitleTag contained "@title" + " When a roxygen block has a title and additional content, the title " consists of one or more roxygen lines (as little as possible are matched), " followed either by an empty roxygen line @@ -87,16 +93,15 @@ if g:r_syntax_hl_roxygen syn region rOBlockNoTitle start="\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold syn region rOBlockNoTitle start="^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*\n\(\s*#\{1,2}'.*\n\)\{-}\s*#\{1,2}' @describeIn" end="^\s*\(#\{1,2}'\)\@!" contains=rOTag,rOExamples,@Spell keepend fold - " A title as part of a block is always at the beginning of the block, i.e. - " either at the start of a file or after a completely empty line. - syn match rOTitle "\%^\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag - syn match rOTitle "^\s*\n\(\s*#\{1,2}' .*\n\)\{-1,}\s*#\{1,2}'\s*$" contained contains=rOCommentKey,rOTitleTag - syn match rOTitleTag contained "@title" - syn match rOCommentKey "^\s*#\{1,2}'" contained - syn region rOExamples start="^#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold + syn region rOExamples start="^\s*#\{1,2}' @examples.*"rs=e+1,hs=e+1 end="^\(#\{1,2}' @.*\)\@=" end="^\(#\{1,2}'\)\@!" contained contains=rOTag fold + + " R6 classes may contain roxygen lines independent of roxygen blocks + syn region rOR6Class start=/R6Class(/ end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold + syn match rOR6Block "#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained + syn match rOR6Block "^\s*#\{1,2}'.*" contains=rOTag,rOExamples,@Spell containedin=rOR6Class contained - " rOTag list generated from the lists in + " rOTag list originally generated from the lists that were available in " https://github.com/klutometis/roxygen/R/rd.R and " https://github.com/klutometis/roxygen/R/namespace.R " using s/^ \([A-Za-z0-9]*\) = .*/ syn match rOTag contained "@\1"/ @@ -155,7 +160,10 @@ if g:r_syntax_hl_roxygen syn match rOTag contained "@S3method" syn match rOTag contained "@useDynLib" " other + syn match rOTag contained "@eval" syn match rOTag contained "@include" + syn match rOTag contained "@includeRmd" + syn match rOTag contained "@order" endif @@ -186,6 +194,11 @@ syn match rSpecial display contained "\\U\x\{1,8}" syn match rSpecial display contained "\\u{\x\{1,4}}" syn match rSpecial display contained "\\U{\x\{1,8}}" +" Raw string +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)(/ end=/)\z2\z1/ keepend +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\){/ end=/}\z2\z1/ keepend +syn region rRawString matchgroup=rRawStrDelim start=/[rR]\z(['"]\)\z(-*\)\[/ end=/\]\z2\z1/ keepend + " Statement syn keyword rStatement break next return syn keyword rConditional if else @@ -354,6 +367,8 @@ hi def link rOperator Operator hi def link rOpError Error hi def link rParenError Error hi def link rPreProc PreProc +hi def link rRawString String +hi def link rRawStrDelim Delimiter hi def link rRepeat Repeat hi def link rSpecial SpecialChar hi def link rStatement Statement @@ -366,6 +381,7 @@ if g:r_syntax_hl_roxygen hi def link rOTitleBlock Title hi def link rOBlock Comment hi def link rOBlockNoTitle Comment + hi def link rOR6Block Comment hi def link rOTitle Title hi def link rOCommentKey Comment hi def link rOExamples SpecialComment diff --git a/runtime/syntax/raku.vim b/runtime/syntax/raku.vim new file mode 100644 index 0000000000..1bf9b4994c --- /dev/null +++ b/runtime/syntax/raku.vim @@ -0,0 +1,1971 @@ +" Vim syntax file +" Language: Raku +" Maintainer: vim-perl <vim-perl@googlegroups.com> +" Homepage: https://github.com/Raku/vim-raku +" Bugs/requests: https://github.com/Raku/vim-raku/issues +" Last Change: 2021-04-16 + +" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org> +" Moritz Lenz <moritz@faui2k3.org> +" Hinrik Örn Sigurðsson <hinrik.sig@gmail.com> +" +" This is a big undertaking. +" +" The ftdetect/raku.vim file in this repository takes care of setting the +" right filetype for Raku files. To set it explicitly you can also add this +" line near the bottom of your source file: +" # vim: filetype=raku + +" TODO: +" * Go over the list of keywords/types to see what's deprecated/missing +" * Add more support for folding (:help syn-fold) +" +" If you want to have Pir code inside Q:PIR// strings highlighted, do: +" let raku_embedded_pir=1 +" +" The above requires pir.vim, which you can find in Parrot's repository: +" https://github.com/parrot/parrot/tree/master/editor +" +" To highlight Perl 5 regexes (m:P5//): +" let raku_perl5_regexes=1 +" +" To enable folding: +" let raku_fold=1 + +if version < 704 | throw "raku.vim uses regex syntax which Vim <7.4 doesn't support. Try 'make fix_old_vim' in the vim-perl repository." | endif + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") + finish +endif +let s:keepcpo= &cpo +set cpo&vim + +" Patterns which will be interpolated by the preprocessor (tools/preproc.pl): +" +" @@IDENT_NONDIGIT@@ "[A-Za-z_\xC0-\xFF]" +" @@IDENT_CHAR@@ "[A-Za-z_\xC0-\xFF0-9]" +" @@IDENTIFIER@@ "\%(@@IDENT_NONDIGIT@@\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\@=\)*\)" +" @@IDENTIFIER_START@@ "@@IDENT_CHAR@@\@1<!\%(@@IDENT_NONDIGIT@@[-']\)\@2<!" +" @@IDENTIFIER_END@@ "\%(@@IDENT_CHAR@@\|[-']@@IDENT_NONDIGIT@@\)\@!" +" @@METAOP@@ #\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+# +" @@ADVERBS@@ "\%(\_s*:!\?@@IDENTIFIER@@\%(([^)]*)\)\?\)*" +" +" Same but escaped, for use in string eval +" @@IDENT_NONDIGIT_Q@@ "[A-Za-z_\\xC0-\\xFF]" +" @@IDENT_CHAR_Q@@ "[A-Za-z_\\xC0-\\xFF0-9]" +" @@IDENTIFIER_Q@@ "\\%(@@IDENT_NONDIGIT_Q@@\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\@=\\)*\\)" +" @@IDENTIFIER_START_Q@@ "@@IDENT_CHAR_Q@@\\@1<!\\%(@@IDENT_NONDIGIT_Q@@[-']\\)\\@2<!" +" @@IDENTIFIER_END_Q@@ "\\%(@@IDENT_CHAR_Q@@\\|[-']@@IDENT_NONDIGIT_Q@@\\)\\@!" + +" Identifiers (subroutines, methods, constants, classes, roles, etc) +syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + +let s:keywords = { + \ "rakuInclude": [ + \ "use require import unit", + \ ], + \ "rakuConditional": [ + \ "if else elsif unless with orwith without once", + \ ], + \ "rakuVarStorage": [ + \ "let my our state temp has constant", + \ ], + \ "rakuRepeat": [ + \ "for loop repeat while until gather given", + \ "supply react race hyper lazy quietly", + \ ], + \ "rakuFlowControl": [ + \ "take take-rw do when next last redo return return-rw", + \ "start default exit make continue break goto leave", + \ "proceed succeed whenever emit done", + \ ], + \ "rakuClosureTrait": [ + \ "BEGIN CHECK INIT FIRST ENTER LEAVE KEEP", + \ "UNDO NEXT LAST PRE POST END CATCH CONTROL", + \ "DOC QUIT CLOSE COMPOSE", + \ ], + \ "rakuException": [ + \ "die fail try warn", + \ ], + \ "rakuPragma": [ + \ "MONKEY-GUTS MONKEY-SEE-NO-EVAL MONKEY-TYPING MONKEY", + \ "experimental fatal isms lib newline nqp precompilation", + \ "soft strict trace variables worries", + \ ], + \ "rakuOperator": [ + \ "div xx x mod also leg cmp before after eq ne le lt not", + \ "gt ge eqv ff fff and andthen or xor orelse lcm gcd o", + \ "unicmp notandthen minmax", + \ ], + \ "rakuType": [ + \ "int int1 int2 int4 int8 int16 int32 int64", + \ "rat rat1 rat2 rat4 rat8 rat16 rat32 rat64", + \ "buf buf1 buf2 buf4 buf8 buf16 buf32 buf64", + \ "blob blob1 blob2 blob4 blob8 blob16 blob32 blob64", + \ "uint uint1 uint2 uint4 uint8 uint16 uint32 bit bool", + \ "uint64 utf8 utf16 utf32 bag set mix complex", + \ "num num32 num64 long longlong Pointer size_t str void", + \ "ulong ulonglong ssize_t atomicint", + \ ], +\ } + +" These can be immediately followed by parentheses +let s:types = [ + \ "Object Any Cool Junction Whatever Capture Match", + \ "Signature Proxy Matcher Package Module Class", + \ "Grammar Scalar Array Hash KeyHash KeySet KeyBag", + \ "Pair List Seq Range Set Bag Map Mapping Void Undef", + \ "Failure Exception Code Block Routine Sub Macro", + \ "Method Submethod Regex Str Blob Char Byte Parcel", + \ "Codepoint Grapheme StrPos StrLen Version Num", + \ "Complex Bit True False Order Same Less More", + \ "Increasing Decreasing Ordered Callable AnyChar", + \ "Positional Associative Ordering KeyExtractor", + \ "Comparator OrderingPair IO KitchenSink Role", + \ "Int Rat Buf UInt Abstraction Numeric Real", + \ "Nil Mu SeekFromBeginning SeekFromEnd SeekFromCurrent", +\ ] + +" We explicitly enumerate the alphanumeric infix operators allowed after [RSXZ] +" to avoid matching package names that start with those letters. +let s:alpha_metaops = [ + \ "div mod gcd lcm xx x does but cmp leg eq ne gt ge lt le before after eqv", + \ "min max not so andthen and or orelse unicmp coll minmax", +\ ] +let s:words_space = join(s:alpha_metaops, " ") +let s:temp = split(s:words_space) +let s:alpha_metaops_or = join(s:temp, "\\|") + +" We don't use "syn keyword" here because that always has higher priority +" than matches/regions, which would prevent these words from matching as +" autoquoted strings before "=>". +syn match rakuKeywordStart display "\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!\)\@=[A-Za-z_\xC0-\xFF0-9]\@1<!\%([A-Za-z_\xC0-\xFF][-']\)\@2<!" + \ nextgroup=rakuAttention,rakuVariable,rakuInclude,rakuConditional,rakuVarStorage,rakuRepeat,rakuFlowControl,rakuClosureTrait,rakuException,rakuNumber,rakuPragma,rakuType,rakuOperator,rakuIdentifier + +for [s:group, s:words_list] in items(s:keywords) + let s:words_space = join(s:words_list, " ") + let s:temp = split(s:words_space) + let s:words = join(s:temp, "\\|") + exec "syn match ". s:group ." display \"[.^]\\@1<!\\%(". s:words . "\\)(\\@!\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" +endfor + +let s:words_space = join(s:types, " ") +let s:temp = split(s:words_space) +let s:words = join(s:temp, "\\|") +exec "syn match rakuType display \"\\%(". s:words . "\\)\\%([A-Za-z_\\xC0-\\xFF0-9]\\|[-'][A-Za-z_\\xC0-\\xFF]\\)\\@!\" contained" +unlet s:group s:words_list s:keywords s:types s:words_space s:temp s:words + +syn match rakuPreDeclare display "[.^]\@1<!\<\%(multi\|proto\|only\)\>" nextgroup=rakuDeclare,rakuIdentifier skipwhite skipempty +syn match rakuDeclare display "[.^]\@1<!\<\%(macro\|sub\|submethod\|method\|module\|class\|role\|package\|enum\|grammar\|slang\|subset\)\>" nextgroup=rakuIdentifier skipwhite skipempty +syn match rakuDeclareRegex display "[.^]\@1<!\<\%(regex\|rule\|token\)\>" nextgroup=rakuRegexName skipwhite skipempty + +syn match rakuTypeConstraint display "\%([.^]\|^\s*\)\@<!\a\@=\%(does\|as\|but\|trusts\|of\|returns\|handles\|where\|augment\|supersede\)\>" +syn match rakuTypeConstraint display "\%([.^]\|^\s*\)\@<![A-Za-z_\xC0-\xFF0-9]\@1<!\%([A-Za-z_\xC0-\xFF][-']\)\@2<!is\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuProperty +syn match rakuProperty display "\a\@=\%(signature\|context\|also\|shape\|prec\|irs\|ofs\|ors\|export\|deep\|binary\|unary\|reparsed\|rw\|parsed\|cached\|readonly\|defequiv\|will\|ref\|copy\|inline\|tighter\|looser\|equiv\|assoc\|required\|DEPRECATED\|raw\|repr\|dynamic\|hidden-from-backtrace\|nodal\|pure\)" contained + +" packages, must come after all the keywords +syn match rakuIdentifier display "\%(::\)\@2<=\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)*" +syn match rakuIdentifier display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(::\)\@=" + +" The sigil in ::*Package +syn match rakuPackageTwigil display "\%(::\)\@2<=\*" + +" some standard packages +syn match rakuType display "\%(::\)\@2<!\%(SeekType\%(::SeekFromBeginning\|::SeekFromCurrent\|::SeekFromEnd\)\|Order\%(::Same\|::More\|::Less\)\?\|Bool\%(::True\|::False\)\?\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" + +" Don't put a "\+" at the end of the character class. That makes it so +" greedy that the "%" " in "+%foo" won't be allowed to match as a sigil, +" among other things +syn match rakuOperator display "[-+/*~?|=^!%&,<>».;\\∈∉∋∌∩∪≼≽⊂⊃⊄⊅⊆⊇⊈⊉âŠâŠŽâŠ–âˆ…âˆ˜]" +syn match rakuOperator display "\%(:\@1<!::\@2!\|::=\|\.::\)" +" these require whitespace on the left side +syn match rakuOperator display "\%(\s\|^\)\@1<=\%(xx=\)" +" index overloading +syn match rakuOperator display "\%(&\.(\@=\|@\.\[\@=\|%\.{\@=\)" + +" Reduce metaoperators like [+] +syn match rakuReduceOp display "\%(^\|\s\|(\)\@1<=!*\%([RSXZ\[]\)*[&RSXZ]\?\[\+(\?\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+)\?]\+" +syn match rakuSetOp display "R\?(\%([-^.+|&]\|[<>][=+]\?\|cont\|elem\))" + +" Reverse, cross, and zip metaoperators +exec "syn match rakuRSXZOp display \"[RSXZ]:\\@!\\%(\\a\\@=\\%(". s:alpha_metaops_or . "\\)\\>\\|[[:alnum:]]\\@!\\%([.,]\\|[^[,.[:alnum:][:space:]]\\)\\+\\|\\s\\@=\\|$\\)\"" + +syn match rakuBlockLabel display "^\s*\zs\h\w*\s*::\@!\_s\@=" + +syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?Inf\|NaN\)" +syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?\%(\%(\d\|__\@!\)*[._]\@1<!\.\)\?_\@!\%(\d\|_\)\+_\@1<!\%([eE]-\?_\@!\%(\d\|_\)\+\)\?i\?" +syn match rakuNumber display "[A-Za-z_\xC0-\xFF0-9]\@1<!\%(\%(\_^\|\s\|[^*\a]\)\@1<=[-+]\)\?0[obxd]\@=" nextgroup=rakuOctBase,rakuBinBase,rakuHexBase,rakuDecBase +syn match rakuOctBase display "o" contained nextgroup=rakuOctNumber +syn match rakuBinBase display "b" contained nextgroup=rakuBinNumber +syn match rakuHexBase display "x" contained nextgroup=rakuHexNumber +syn match rakuDecBase display "d" contained nextgroup=rakuDecNumber +syn match rakuOctNumber display "[0-7][0-7_]*" contained +syn match rakuBinNumber display "[01][01_]*" contained +syn match rakuHexNumber display "\x[[:xdigit:]_]*" contained +syn match rakuDecNumber display "\d[[:digit:]_]*" contained + +syn match rakuVersion display "\<v\d\+\%(\.\%(\*\|\d\+\)\)*+\?" + +" Contextualizers +syn match rakuContext display "\<\%(item\|list\|slice\|hash\)\>" +syn match rakuContext display "\%(\$\|@\|%\|&\)(\@=" + +" Quoting + +" one cluster for every quote adverb +syn cluster rakuInterp_scalar + \ add=rakuInterpScalar + +syn cluster rakuInterp_array + \ add=rakuInterpArray + +syn cluster rakuInterp_hash + \ add=rakuInterpHash + +syn cluster rakuInterp_function + \ add=rakuInterpFunction + +syn cluster rakuInterp_closure + \ add=rakuInterpClosure + +syn cluster rakuInterp_q + \ add=rakuEscQQ + \ add=rakuEscBackSlash + +syn cluster rakuInterp_backslash + \ add=@rakuInterp_q + \ add=rakuEscape + \ add=rakuEscOpenCurly + \ add=rakuEscCodePoint + \ add=rakuEscHex + \ add=rakuEscOct + \ add=rakuEscOctOld + \ add=rakuEscNull + +syn cluster rakuInterp_qq + \ add=@rakuInterp_scalar + \ add=@rakuInterp_array + \ add=@rakuInterp_hash + \ add=@rakuInterp_function + \ add=@rakuInterp_closure + \ add=@rakuInterp_backslash + \ add=rakuMatchVarSigil + +syn region rakuInterpScalar + \ start="\ze\z(\$\%(\%(\%(\d\+\|!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" + \ start="\ze\z(\$\%(\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\|\%(\d\+\|!\|/\|¢\)\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP + +syn region rakuInterpScalar + \ matchgroup=rakuContext + \ start="\$\ze()\@!" + \ skip="([^)]*)" + \ end=")\zs" + \ contained + \ contains=TOP + +syn region rakuInterpArray + \ start="\ze\z(@\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP + +syn region rakuInterpArray + \ matchgroup=rakuContext + \ start="@\ze()\@!" + \ skip="([^)]*)" + \ end=")\zs" + \ contained + \ contains=TOP + +syn region rakuInterpHash + \ start="\ze\z(%\$*\%(\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP + +syn region rakuInterpHash + \ matchgroup=rakuContext + \ start="%\ze()\@!" + \ skip="([^)]*)" + \ end=")\zs" + \ contained + \ contains=TOP + +syn region rakuInterpFunction + \ start="\ze\z(&\%(\%(!\|/\|¢\)\|\%(\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=\)\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(\.\^\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\|\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)*\)\.\?\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP + +syn region rakuInterpFunction + \ matchgroup=rakuContext + \ start="&\ze()\@!" + \ skip="([^)]*)" + \ end=")\zs" + \ contained + \ contains=TOP + +syn region rakuInterpClosure + \ start="\\\@1<!{}\@!" + \ skip="{[^}]*}" + \ end="}" + \ contained keepend + \ contains=TOP + +" generic escape +syn match rakuEscape display "\\\S" contained + +" escaped closing delimiters +syn match rakuEscQuote display "\\'" contained +syn match rakuEscDoubleQuote display "\\\"" contained +syn match rakuEscCloseAngle display "\\>" contained +syn match rakuEscCloseFrench display "\\»" contained +syn match rakuEscBackTick display "\\`" contained +syn match rakuEscForwardSlash display "\\/" contained +syn match rakuEscVerticalBar display "\\|" contained +syn match rakuEscExclamation display "\\!" contained +syn match rakuEscComma display "\\," contained +syn match rakuEscDollar display "\\\$" contained +syn match rakuEscCloseCurly display "\\}" contained +syn match rakuEscCloseBracket display "\\\]" contained + +" matches :key, :!key, :$var, :key<var>, etc +" Since we don't know in advance how the adverb ends, we use a trick. +" Consume nothing with the start pattern (\ze at the beginning), +" while capturing the whole adverb into \z1 and then putting it before +" the match start (\zs) of the end pattern. +syn region rakuAdverb + \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\|\[[^\]]*]\|<[^>]*>\|«[^»]*»\|{[^}]*}\)\?\)" + \ start="\ze\z(:!\?[@$%]\$*\%(::\|\%(\$\@1<=\d\+\|!\|/\|¢\)\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP + +" <words> +" Distinguishing this from the "less than" operator is tricky. For now, +" it matches if any of the following is true: +" +" * There is whitespace missing on either side of the "<", since +" people tend to put spaces around "less than". We make an exception +" for " = < ... >" assignments though. +" * It comes after "enum", "for", "any", "all", or "none" +" * It's the first or last thing on a line (ignoring whitespace) +" * It's preceded by "(\s*" or "=\s\+" +" * It's empty and terminated on the same line (e.g. <> and < >) +" +" It never matches when: +" +" * Preceded by [<+~=!] (e.g. <<foo>>, =<$foo>, * !< 3) +" * Followed by [-=] (e.g. <--, <=, <==, <->) +syn region rakuStringAngle + \ matchgroup=rakuQuote + \ start="\%(\<\%(enum\|for\|any\|all\|none\)\>\s*(\?\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" + \ start="\%(\s\|[<+~=!]\)\@<!<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" + \ start="[<+~=!]\@1<!<\%(\s\|<\|=>\|\%([=-]\{1,2}>\|[=-]\{1,2}\)\)\@!" + \ start="\%(^\s*\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" + \ start="[<+~=!]\@1<!<\%(\s*$\)\@=" + \ start="\%((\s*\|=\s\+\)\@<=<\%(<\|=>\|\%([=-]\{1,2}>\|[=-]\{2}\)\)\@!" + \ start="<\%(\s*>\)\@=" + \ skip="\\\@1<!\\>" + \ end=">" + \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle + +syn region rakuStringAngleFixed + \ matchgroup=rakuQuote + \ start="<" + \ skip="\\\@1<!\\>" + \ end=">" + \ contains=rakuInnerAnglesOne,rakuEscBackSlash,rakuEscCloseAngle + \ contained + +syn region rakuInnerAnglesOne + \ matchgroup=rakuStringAngle + \ start="\\\@1<!<" + \ skip="\\\@1<!\\>" + \ end=">" + \ transparent contained + \ contains=rakuInnerAnglesOne + +" <<words>> +syn region rakuStringAngles + \ matchgroup=rakuQuote + \ start="<<=\@!" + \ skip="\\\@1<!\\>" + \ end=">>" + \ contains=rakuInnerAnglesTwo,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseAngle,rakuAdverb,rakuStringSQ,rakuStringDQ + +syn region rakuInnerAnglesTwo + \ matchgroup=rakuStringAngles + \ start="<<" + \ skip="\\\@1<!\\>" + \ end=">>" + \ transparent contained + \ contains=rakuInnerAnglesTwo + +" «words» +syn region rakuStringFrench + \ matchgroup=rakuQuote + \ start="«" + \ skip="\\\@1<!\\»" + \ end="»" + \ contains=rakuInnerFrench,@rakuInterp_qq,rakuComment,rakuBracketComment,rakuEscHash,rakuEscCloseFrench,rakuAdverb,rakuStringSQ,rakuStringDQ + +syn region rakuInnerFrench + \ matchgroup=rakuStringFrench + \ start="\\\@1<!«" + \ skip="\\\@1<!\\»" + \ end="»" + \ transparent contained + \ contains=rakuInnerFrench + +" Hyperops. They need to come after "<>" and "«»" strings in order to override +" them, but before other types of strings, to avoid matching those delimiters +" as parts of hyperops. +syn match rakuHyperOp display #[^[:digit:][{('",:[:space:]][^[{('",:[:space:]]*\%(«\|<<\)# +syn match rakuHyperOp display "«\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+[«»]" +syn match rakuHyperOp display "»\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(«\|»\?\)" +syn match rakuHyperOp display "<<\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|>>\)" +syn match rakuHyperOp display ">>\%(\d\|[@%$][.?^=[:alpha:]]\)\@!\%(\.\|[^[{('".[:space:]]\)\+\%(<<\|\%(>>\)\?\)" + +" 'string' +syn region rakuStringSQ + \ matchgroup=rakuQuote + \ start="'" + \ skip="\\\@1<!\\'" + \ end="'" + \ contains=@rakuInterp_q,rakuEscQuote + \ keepend extend + +" "string" +syn region rakuStringDQ + \ matchgroup=rakuQuote + \ start=+"+ + \ skip=+\\\@1<!\\"+ + \ end=+"+ + \ contains=@rakuInterp_qq,rakuEscDoubleQuote + \ keepend extend + +" Q// and friends + +syn match rakuQuoteQStart display "\%(:\|\%(sub\|role\)\s\)\@5<![Qq]\@=" nextgroup=rakuQuoteQ,rakuQuoteQ_q,rakuQuoteQ_qww,rakuQuoteQ_qq,rakuQuoteQ_to,rakuQuoteQ_qto,rakuQuoteQ_qqto,rakuIdentifier +syn match rakuQuoteQ display "Q\%(qq\|ww\|[abcfhpsqvwx]\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ skipwhite skipempty contained +syn match rakuQuoteQ_q display "q[abcfhpsvwx]\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_q skipwhite skipempty contained +syn match rakuQuoteQ_qww display "qww[A-Za-z(]\@!" nextgroup=rakuPairsQ_qww skipwhite skipempty contained +syn match rakuQuoteQ_qq display "qq\%([pwx]\|ww\)\?[A-Za-z(]\@!" nextgroup=rakuPairsQ_qq skipwhite skipempty contained +syn match rakuQuoteQ_to display "Qto[A-Za-z(]\@!" nextgroup=rakuStringQ_to skipwhite skipempty contained +syn match rakuQuoteQ_qto display "qto[A-Za-z(]\@!" nextgroup=rakuStringQ_qto skipwhite skipempty contained +syn match rakuQuoteQ_qqto display "qqto[A-Za-z(]\@!" nextgroup=rakuStringQ_qqto skipwhite skipempty contained +syn match rakuQuoteQ_qto display "q\_s*\%(\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*:\%(to\|heredoc\)\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*(\@!\)\@=" nextgroup=rakuPairsQ_qto skipwhite skipempty contained +syn match rakuQuoteQ_qqto display "qq\_s*\%(\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*:\%(to\|heredoc\)\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*(\@!\)\@=" nextgroup=rakuPairsQ_qqto skipwhite skipempty contained +syn match rakuPairsQ "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ +syn match rakuPairsQ_q "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_q +syn match rakuPairsQ_qww "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qww +syn match rakuPairsQ_qq "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qq +syn match rakuPairsQ_qto "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qto +syn match rakuPairsQ_qqto "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuStringQ_qqto + + +if exists("raku_embedded_pir") || exists("raku_extended_all") + syn include @rakuPIR syntax/pir.vim + syn match rakuQuote_QPIR display "Q[A-Za-z(]\@!\%(\_s*:PIR\)\@=" nextgroup=rakuPairsQ_PIR skipwhite skipempty + syn match rakuPairs_QPIR contained "\_s*:PIR" transparent skipwhite skipempty nextgroup=rakuStringQ_PIR +endif + +" hardcoded set of delimiters +let s:plain_delims = [ + \ ["DQ", "\\\"", "\\\"", "rakuEscDoubleQuote", "\\\\\\@1<!\\\\\\\""], + \ ["SQ", "'", "'", "rakuEscQuote", "\\\\\\@1<!\\\\'"], + \ ["Slash", "/", "/", "rakuEscForwardSlash", "\\\\\\@1<!\\\\/"], + \ ["BackTick", "`", "`", "rakuEscBackTick", "\\\\\\@1<!\\\\`"], + \ ["Bar", "|", "|", "rakuEscVerticalBar", "\\\\\\@1<!\\\\|"], + \ ["Exclamation", "!", "!", "rakuEscExclamation", "\\\\\\@1<!\\\\!"], + \ ["Comma", ",", ",", "rakuEscComma", "\\\\\\@1<!\\\\,"], + \ ["Dollar", "\\$", "\\$", "rakuEscDollar", "\\\\\\@1<!\\\\\\$"], +\ ] +let s:bracketing_delims = [ + \ ["Curly", "{", "}", "rakuEscCloseCurly", "\\%(\\\\\\@1<!\\\\}\\|{[^}]*}\\)"], + \ ["Angle", "<", ">", "rakuEscCloseAngle", "\\%(\\\\\\@1<!\\\\>\\|<[^>]*>\\)"], + \ ["French", "«", "»", "rakuEscCloseFrench", "\\%(\\\\\\@1<!\\\\»\\|«[^»]*»\\)"], + \ ["Bracket", "\\\[", "]", "rakuEscCloseBracket", "\\%(\\\\\\@1<!\\\\]\\|\\[^\\]]*]\\)"], + \ ["Paren", "\\s\\@1<=(", ")", "rakuEscCloseParen", "\\%(\\\\\\@1<!\\\\)\\|([^)]*)\\)"], +\ ] +let s:all_delims = s:plain_delims + s:bracketing_delims + +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:all_delims + exec "syn region rakuStringQ matchgroup=rakuQuote start=\"".s:start_delim."\" end=\"".s:end_delim."\" contained" + exec "syn region rakuStringQ_q matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_q,".s:end_group." contained" + exec "syn region rakuStringQ_qww matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_q,rakuStringSQ,rakuStringDQ".s:end_group." contained" + exec "syn region rakuStringQ_qq matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuInterp_qq,".s:end_group." contained" + exec "syn region rakuStringQ_to matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" end=\"^\\s*\\z1$\" contained" + exec "syn region rakuStringQ_qto matchgroup=rakuQuote start=\"".s:start_delim."\\z([^".s:end_delim."]\\+\\)".s:end_delim."\" skip=\"".s:skip."\" end=\"^\\s*\\z1$\" contains=@rakuInterp_q,".s:end_group." contained" + exec "syn region rakuStringQ_qqto matchgroup=rakuQuote start=\"".s:start_delim."\\z(\[^".s:end_delim."]\\+\\)".s:end_delim."\" skip=\"".s:skip."\" end=\"^\\s*\\z1$\" contains=@rakuInterp_qq,".s:end_group." contained" + + if exists("raku_embedded_pir") || exists("raku_extended_all") + exec "syn region rakuStringQ_PIR matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contains=@rakuPIR,".s:end_group." contained" + endif +endfor +unlet s:name s:start_delim s:end_delim s:end_group s:skip s:plain_delims s:all_delims + +" :key +syn match rakuOperator display ":\@1<!::\@!!\?" nextgroup=rakuKey,rakuStringAngleFixed,rakuStringAngles,rakuStringFrench +syn match rakuKey display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" contained nextgroup=rakuStringAngleFixed,rakuStringAngles,rakuStringFrench + +" Regexes and grammars + +syn match rakuRegexName display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?" nextgroup=rakuRegexBlockCrap skipwhite skipempty contained +syn match rakuRegexBlockCrap "[^{]*" nextgroup=rakuRegexBlock skipwhite skipempty transparent contained + +syn region rakuRegexBlock + \ matchgroup=rakuNormal + \ start="{" + \ end="}" + \ contained + \ contains=@rakuRegexen,@rakuVariables + +" Perl 6 regex bits + +syn cluster rakuRegexen + \ add=rakuRxMeta + \ add=rakuRxEscape + \ add=rakuEscCodePoint + \ add=rakuEscHex + \ add=rakuEscOct + \ add=rakuEscNull + \ add=rakuRxAnchor + \ add=rakuRxCapture + \ add=rakuRxGroup + \ add=rakuRxAlternation + \ add=rakuRxBoundary + \ add=rakuRxAdverb + \ add=rakuRxAdverbArg + \ add=rakuRxStorage + \ add=rakuRxAssertion + \ add=rakuRxAssertGroup + \ add=rakuRxQuoteWords + \ add=rakuRxClosure + \ add=rakuRxStringSQ + \ add=rakuRxStringDQ + \ add=rakuComment + \ add=rakuBracketComment + \ add=rakuMatchVarSigil + +syn match rakuRxMeta display contained ".\%([A-Za-z_\xC0-\xFF0-9]\|\s\)\@1<!" +syn match rakuRxAnchor display contained "[$^]" +syn match rakuRxEscape display contained "\\\S" +syn match rakuRxCapture display contained "[()]" +syn match rakuRxAlternation display contained "|" +syn match rakuRxRange display contained "\.\." + +" misc escapes +syn match rakuEscOctOld display "\\[1-9]\d\{1,2}" contained +syn match rakuEscNull display "\\0\d\@!" contained +syn match rakuEscCodePoint display "\\[cC]" contained nextgroup=rakuCodePoint +syn match rakuEscHex display "\\[xX]" contained nextgroup=rakuHexSequence +syn match rakuEscOct display "\\o" contained nextgroup=rakuOctSequence +syn match rakuEscQQ display "\\qq" contained nextgroup=rakuQQSequence +syn match rakuEscOpenCurly display "\\{" contained +syn match rakuEscHash display "\\#" contained +syn match rakuEscBackSlash display "\\\\" contained + +syn region rakuQQSequence + \ matchgroup=rakuEscape + \ start="\[" + \ skip="\[[^\]]*]" + \ end="]" + \ contained transparent + \ contains=@rakuInterp_qq + +syn match rakuCodePoint display "\%(\d\+\|\S\)" contained +syn region rakuCodePoint + \ matchgroup=rakuEscape + \ start="\[" + \ end="]" + \ contained + +syn match rakuHexSequence display "\x\+" contained +syn region rakuHexSequence + \ matchgroup=rakuEscape + \ start="\[" + \ end="]" + \ contained + +syn match rakuOctSequence display "\o\+" contained +syn region rakuOctSequence + \ matchgroup=rakuEscape + \ start="\[" + \ end="]" + \ contained + +" $<match>, @<match> +syn region rakuMatchVarSigil + \ matchgroup=rakuVariable + \ start="[$@]\%(<<\@!\)\@=" + \ end=">\@1<=" + \ contains=rakuMatchVar + +syn region rakuMatchVar + \ matchgroup=rakuTwigil + \ start="<" + \ end=">" + \ contained + +syn region rakuRxClosure + \ matchgroup=rakuNormal + \ start="{" + \ end="}" + \ contained + \ containedin=rakuRxClosure + \ contains=TOP +syn region rakuRxGroup + \ matchgroup=rakuStringSpecial2 + \ start="\[" + \ end="]" + \ contained + \ contains=@rakuRegexen,@rakuVariables,rakuMatchVarSigil +syn region rakuRxAssertion + \ matchgroup=rakuStringSpecial2 + \ start="<\%(?\?\%(before\|after\)\|\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\)\|[+?*]\)\?" + \ end=">" + \ contained + \ contains=@rakuRegexen,rakuIdentifier,@rakuVariables,rakuRxCharClass,rakuRxAssertCall +syn region rakuRxAssertGroup + \ matchgroup=rakuStringSpecial2 + \ start="<\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)=\[" + \ skip="\\\@1<!\\]" + \ end="]" + \ contained +syn match rakuRxAssertCall display "\%(::\|\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" contained nextgroup=rakuRxAssertArgs +syn region rakuRxAssertArgs + \ start="(" + \ end=")" + \ contained keepend + \ contains=TOP +syn region rakuRxAssertArgs + \ start=":" + \ end="\ze>" + \ contained keepend + \ contains=TOP +syn match rakuRxBoundary display contained "\%([«»]\|<<\|>>\)" +syn region rakuRxCharClass + \ matchgroup=rakuStringSpecial2 + \ start="\%(<[-!+?]\?\)\@2<=\[" + \ skip="\\]" + \ end="]" + \ contained + \ contains=rakuRxRange,rakuRxEscape,rakuEscHex,rakuEscOct,rakuEscCodePoint,rakuEscNull +syn region rakuRxQuoteWords + \ matchgroup=rakuStringSpecial2 + \ start="<\s" + \ end="\s\?>" + \ contained +syn region rakuRxAdverb + \ start="\ze\z(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)" + \ end="\z1\zs" + \ contained keepend + \ contains=TOP +syn region rakuRxAdverbArg + \ start="\%(:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\)\@<=(" + \ skip="([^)]\{-})" + \ end=")" + \ contained + \ keepend + \ contains=TOP +syn region rakuRxStorage + \ matchgroup=rakuOperator + \ start="\%(^\s*\)\@<=:\%(my\>\|temp\>\)\@=" + \ end="$" + \ contains=TOP + \ contained + \ keepend + +" 'string' inside a regex +syn region rakuRxStringSQ + \ matchgroup=rakuQuote + \ start="'" + \ skip="\\\@1<!\\'" + \ end="'" + \ contained + \ contains=rakuEscQuote,rakuEscBackSlash + +" "string" inside a regex +syn region rakuRxStringDQ + \ matchgroup=rakuQuote + \ start=+"+ + \ skip=+\\\@1<!\\"+ + \ end=+"+ + \ contained + \ contains=rakuEscDoubleQuote,rakuEscBackSlash,@rakuInterp_qq + +" $!, $var, $!var, $::var, $package::var $*::package::var, etc +" Thus must come after the matches for the "$" regex anchor, but before +" the match for the $ regex delimiter +syn cluster rakuVariables + \ add=rakuVarSlash + \ add=rakuVarExclam + \ add=rakuVarMatch + \ add=rakuVarNum + \ add=rakuVariable + +syn match rakuBareSigil display "[@$%&]\%(\s*\%([,)}=]\|where\>\)\)\@=" +syn match rakuVarSlash display "\$/" +syn match rakuVarExclam display "\$!" +syn match rakuVarMatch display "\$¢" +syn match rakuVarNum display "\$\d\+" +syn match rakuVariable display "self" +syn match rakuVariable display "[@$%&]\?[@&$%]\$*\%(::\|\%(\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\)\|[A-Za-z_\xC0-\xFF]\)\@=" nextgroup=rakuTwigil,rakuVarName,rakuPackageScope +syn match rakuVarName display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" nextgroup=rakuPostHyperOp contained +syn match rakuClose display "[\])]" transparent nextgroup=rakuPostHyperOp +syn match rakuPostHyperOp display "\%(»\|>>\)" contained +syn match rakuTwigil display "\%([.^*?=!~]\|:\@1<!::\@!\)[A-Za-z_\xC0-\xFF]\@=" nextgroup=rakuPackageScope,rakuVarName contained +syn match rakuPackageScope display "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\?::" nextgroup=rakuPackageScope,rakuVarName contained + +" Perl 6 regex regions + +syn match rakuMatchStart_m display "\.\@1<!\<\%(mm\?\|rx\)\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_m +syn match rakuMatchStart_s display "\.\@1<!\<[sS]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_s +syn match rakuMatchStart_tr display "\.\@1<!\<tr\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\)\@!" skipwhite skipempty nextgroup=rakuMatchAdverbs_tr +syn match rakuMatchAdverbs_m "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuMatch +syn match rakuMatchAdverbs_s "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuSubstitution +syn match rakuMatchAdverbs_tr "\%(\_s*:!\?\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\%(([^)]*)\)\?\)*" contained transparent skipwhite skipempty nextgroup=rakuTransliteration + +" /foo/ +syn region rakuMatchBare + \ matchgroup=rakuQuote + \ start="/\@1<!\%(\%(\_^\|[!\[,=~|&/:({]\|\^\?fff\?\^\?\|=>\|\<\%(if\|unless\|while\|when\|where\|so\)\)\s*\)\@<=/[/=]\@!" + \ skip="\\/" + \ end="/" + \ contains=@rakuRegexen,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum + +" m/foo/, m$foo$, m!foo!, etc +syn region rakuMatch + \ matchgroup=rakuQuote + \ start=+\z([/!$,|`"]\)+ + \ skip="\\\z1" + \ end="\z1" + \ contained + \ contains=@rakuRegexen,rakuVariable,rakuVarNum + +" m<foo>, m«foo», m{foo}, etc +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims + exec "syn region rakuMatch matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables" +endfor +unlet s:name s:start_delim s:end_delim s:end_group s:skip + +" Substitutions + +" s/foo//, s$foo$$, s!foo!!, etc +syn region rakuSubstitution + \ matchgroup=rakuQuote + \ start=+\z([/!$,|`"]\)+ + \ skip="\\\z1" + \ end="\z1"me=e-1 + \ contained + \ contains=@rakuRegexen,rakuVariable,rakuVarNum + \ nextgroup=rakuReplacement + +syn region rakuReplacement + \ matchgroup=rakuQuote + \ start="\z(.\)" + \ skip="\\\z1" + \ end="\z1" + \ contained + \ contains=@rakuInterp_qq + +" s<foo><bar>, s«foo»«bar», s{foo}{bar}, etc +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims + exec "syn region rakuSubstitution matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuRegexen,@rakuVariables nextgroup=rakuRepl".s:name + exec "syn region rakuRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq" +endfor +unlet s:name s:start_delim s:end_delim s:end_group s:skip + +" Transliteration + +" tr/foo/bar/, tr|foo|bar, etc +syn region rakuTransliteration + \ matchgroup=rakuQuote + \ start=+\z([/!$,|`"]\)+ + \ skip="\\\z1" + \ end="\z1"me=e-1 + \ contained + \ contains=rakuRxRange + \ nextgroup=rakuTransRepl + +syn region rakuTransRepl + \ matchgroup=rakuQuote + \ start="\z(.\)" + \ skip="\\\z1" + \ end="\z1" + \ contained + \ contains=@rakuInterp_qq,rakuRxRange + +" tr<foo><bar>, tr«foo»«bar», tr{foo}{bar}, etc +for [s:name, s:start_delim, s:end_delim, s:end_group, s:skip] in s:bracketing_delims + exec "syn region rakuTransliteration matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=rakuRxRange nextgroup=rakuTransRepl".s:name + exec "syn region rakuTransRepl".s:name." matchgroup=rakuQuote start=\"".s:start_delim."\" skip=\"".s:skip."\" end=\"".s:end_delim."\" contained keepend contains=@rakuInterp_qq,rakuRxRange" +endfor +unlet s:name s:start_delim s:end_delim s:end_group s:skip s:bracketing_delims + +if exists("raku_perl5_regexes") || exists("raku_extended_all") + +" Perl 5 regex regions + +syn cluster rakuRegexP5Base + \ add=rakuRxP5Escape + \ add=rakuRxP5Oct + \ add=rakuRxP5Hex + \ add=rakuRxP5EscMeta + \ add=rakuRxP5CodePoint + \ add=rakuRxP5Prop + +" normal regex stuff +syn cluster rakuRegexP5 + \ add=@rakuRegexP5Base + \ add=rakuRxP5Quantifier + \ add=rakuRxP5Meta + \ add=rakuRxP5QuoteMeta + \ add=rakuRxP5ParenMod + \ add=rakuRxP5Verb + \ add=rakuRxP5Count + \ add=rakuRxP5Named + \ add=rakuRxP5ReadRef + \ add=rakuRxP5WriteRef + \ add=rakuRxP5CharClass + \ add=rakuRxP5Anchor + +" inside character classes +syn cluster rakuRegexP5Class + \ add=@rakuRegexP5Base + \ add=rakuRxP5Posix + \ add=rakuRxP5Range + +syn match rakuRxP5Escape display contained "\\\S" +syn match rakuRxP5CodePoint display contained "\\c\S\@=" nextgroup=rakuRxP5CPId +syn match rakuRxP5CPId display contained "\S" +syn match rakuRxP5Oct display contained "\\\%(\o\{1,3}\)\@=" nextgroup=rakuRxP5OctSeq +syn match rakuRxP5OctSeq display contained "\o\{1,3}" +syn match rakuRxP5Anchor display contained "[\^$]" +syn match rakuRxP5Hex display contained "\\x\%({\x\+}\|\x\{1,2}\)\@=" nextgroup=rakuRxP5HexSeq +syn match rakuRxP5HexSeq display contained "\x\{1,2}" +syn region rakuRxP5HexSeq + \ matchgroup=rakuRxP5Escape + \ start="{" + \ end="}" + \ contained +syn region rakuRxP5Named + \ matchgroup=rakuRxP5Escape + \ start="\%(\\N\)\@2<={" + \ end="}" + \ contained +syn match rakuRxP5Quantifier display contained "\%([+*]\|(\@1<!?\)" +syn match rakuRxP5ReadRef display contained "\\[1-9]\d\@!" +syn match rakuRxP5ReadRef display contained "\[A-Za-z_\xC0-\xFF0-9]<\@=" nextgroup=rakuRxP5ReadRefId +syn region rakuRxP5ReadRefId + \ matchgroup=rakuRxP5Escape + \ start="<" + \ end=">" + \ contained +syn match rakuRxP5WriteRef display contained "\\g\%(\d\|{\)\@=" nextgroup=rakuRxP5WriteRefId +syn match rakuRxP5WriteRefId display contained "\d\+" +syn region rakuRxP5WriteRefId + \ matchgroup=rakuRxP5Escape + \ start="{" + \ end="}" + \ contained +syn match rakuRxP5Prop display contained "\\[pP]\%(\a\|{\)\@=" nextgroup=rakuRxP5PropId +syn match rakuRxP5PropId display contained "\a" +syn region rakuRxP5PropId + \ matchgroup=rakuRxP5Escape + \ start="{" + \ end="}" + \ contained +syn match rakuRxP5Meta display contained "[(|).]" +syn match rakuRxP5ParenMod display contained "(\@1<=?\@=" nextgroup=rakuRxP5Mod,rakuRxP5ModName,rakuRxP5Code +syn match rakuRxP5Mod display contained "?\%(<\?=\|<\?!\|[#:|]\)" +syn match rakuRxP5Mod display contained "?-\?[impsx]\+" +syn match rakuRxP5Mod display contained "?\%([-+]\?\d\+\|R\)" +syn match rakuRxP5Mod display contained "?(DEFINE)" +syn match rakuRxP5Mod display contained "?\%(&\|P[>=]\)" nextgroup=rakuRxP5ModDef +syn match rakuRxP5ModDef display contained "\h\w*" +syn region rakuRxP5ModName + \ matchgroup=rakuStringSpecial + \ start="?'" + \ end="'" + \ contained +syn region rakuRxP5ModName + \ matchgroup=rakuStringSpecial + \ start="?P\?<" + \ end=">" + \ contained +syn region rakuRxP5Code + \ matchgroup=rakuStringSpecial + \ start="??\?{" + \ end="})\@=" + \ contained + \ contains=TOP +syn match rakuRxP5EscMeta display contained "\\[?*.{}()[\]|\^$]" +syn match rakuRxP5Count display contained "\%({\d\+\%(,\%(\d\+\)\?\)\?}\)\@=" nextgroup=rakuRxP5CountId +syn region rakuRxP5CountId + \ matchgroup=rakuRxP5Escape + \ start="{" + \ end="}" + \ contained +syn match rakuRxP5Verb display contained "(\@1<=\*\%(\%(PRUNE\|SKIP\|THEN\)\%(:[^)]*\)\?\|\%(MARK\|\):[^)]*\|COMMIT\|F\%(AIL\)\?\|ACCEPT\)" +syn region rakuRxP5QuoteMeta + \ matchgroup=rakuRxP5Escape + \ start="\\Q" + \ end="\\E" + \ contained + \ contains=@rakuVariables,rakuEscBackSlash +syn region rakuRxP5CharClass + \ matchgroup=rakuStringSpecial + \ start="\[\^\?" + \ skip="\\]" + \ end="]" + \ contained + \ contains=@rakuRegexP5Class +syn region rakuRxP5Posix + \ matchgroup=rakuRxP5Escape + \ start="\[:" + \ end=":]" + \ contained +syn match rakuRxP5Range display contained "-" + +" m:P5// +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/" + \ skip="\\/" + \ end="/" + \ contains=@rakuRegexP5,rakuVariable,rakuVarExclam,rakuVarMatch,rakuVarNum + +" m:P5!! +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!" + \ skip="\\!" + \ end="!" + \ contains=@rakuRegexP5,rakuVariable,rakuVarSlash,rakuVarMatch,rakuVarNum + +" m:P5$$, m:P5||, etc +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)" + \ skip="\\\z1" + \ end="\z1" + \ contains=@rakuRegexP5,@rakuVariables + +" m:P5 () +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!" + \ skip="\\)" + \ end=")" + \ contains=@rakuRegexP5,@rakuVariables + +" m:P5[] +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!" + \ skip="\\]" + \ end="]" + \ contains=@rakuRegexP5,@rakuVariables + +" m:P5{} +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!" + \ skip="\\}" + \ end="}" + \ contains=@rakuRegexP5,rakuVariables + +" m:P5<> +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!" + \ skip="\\>" + \ end=">" + \ contains=@rakuRegexP5,rakuVariables + +" m:P5«» +syn region rakuMatch + \ matchgroup=rakuQuote + \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@2<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!" + \ skip="\\»" + \ end="»" + \ contains=@rakuRegexP5,rakuVariables + +endif + +" Comments + +syn match rakuAttention display "\<\%(ACHTUNG\|ATTN\|ATTENTION\|FIXME\|NB\|TODO\|TBD\|WTF\|XXX\|NOTE\)" contained + +" normal end-of-line comment +syn match rakuComment display "#.*" contains=rakuAttention + +" Multiline comments. Arbitrary numbers of opening brackets are allowed, +" but we only define regions for 1 to 3 +syn region rakuBracketComment + \ start="#[`|=](" + \ skip="([^)]*)" + \ end=")" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ start="#[`|=]\[" + \ skip="\[[^\]]*]" + \ end="]" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ start="#[`|=]{" + \ skip="{[^}]*}" + \ end="}" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ start="#[`|=]<" + \ skip="<[^>]*>" + \ end=">" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ start="#[`|=]«" + \ skip="«[^»]*»" + \ end="»" + \ contains=rakuAttention,rakuBracketComment + +" Comments with double and triple delimiters +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]((" + \ skip="((\%([^)\|))\@!]\)*))" + \ end="))" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=](((" + \ skip="(((\%([^)]\|)\%())\)\@!\)*)))" + \ end=")))" + \ contains=rakuAttention,rakuBracketComment + +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]\[\[" + \ skip="\[\[\%([^\]]\|]]\@!\)*]]" + \ end="]]" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]\[\[\[" + \ skip="\[\[\[\%([^\]]\|]\%(]]\)\@!\)*]]]" + \ end="]]]" + \ contains=rakuAttention,rakuBracketComment + +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]{{" + \ skip="{{\%([^}]\|}}\@!\)*}}" + \ end="}}" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]{{{" + \ skip="{{{\%([^}]\|}\%(}}\)\@!\)*}}}" + \ end="}}}" + \ contains=rakuAttention,rakuBracketComment + +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]<<" + \ skip="<<\%([^>]\|>>\@!\)*>>" + \ end=">>" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]<<<" + \ skip="<<<\%([^>]\|>\%(>>\)\@!\)*>>>" + \ end=">>>" + \ contains=rakuAttention,rakuBracketComment + +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]««" + \ skip="««\%([^»]\|»»\@!\)*»»" + \ end="»»" + \ contains=rakuAttention,rakuBracketComment +syn region rakuBracketComment + \ matchgroup=rakuBracketComment + \ start="#[`|=]«««" + \ skip="«««\%([^»]\|»\%(»»\)\@!\)*»»»" + \ end="»»»" + \ contains=rakuAttention,rakuBracketComment + +syn match rakuShebang display "\%^#!.*" + +" => autoquoting +syn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\%(p5\)\@2<![RSXZ]\@1<!=>" +syn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\ze\s\+=>" +syn match rakuStringAuto display "\.\@1<!\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)p5\ze=>" + +" Pod + +" Abbreviated blocks (implicit code forbidden) +syn region rakuPodAbbrRegion + \ matchgroup=rakuPodPrefix + \ start="^\s*\zs=\ze\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodAbbrNoCodeType + \ keepend + +syn region rakuPodAbbrNoCodeType + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodName,rakuPodAbbrNoCode + +syn match rakuPodName contained ".\+" contains=@rakuPodFormat +syn match rakuPodComment contained ".\+" + +syn region rakuPodAbbrNoCode + \ start="^" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=@rakuPodFormat + +" Abbreviated blocks (everything is code) +syn region rakuPodAbbrRegion + \ matchgroup=rakuPodPrefix + \ start="^\s*\zs=\zecode\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodAbbrCodeType + \ keepend + +syn region rakuPodAbbrCodeType + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodName,rakuPodAbbrCode + +syn region rakuPodAbbrCode + \ start="^" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + +" Abbreviated blocks (everything is a comment) +syn region rakuPodAbbrRegion + \ matchgroup=rakuPodPrefix + \ start="^=\zecomment\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodAbbrCommentType + \ keepend + +syn region rakuPodAbbrCommentType + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodComment,rakuPodAbbrNoCode + +" Abbreviated blocks (implicit code allowed) +syn region rakuPodAbbrRegion + \ matchgroup=rakuPodPrefix + \ start="^=\ze\%(pod\|item\|nested\|\u\+\)\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodAbbrType + \ keepend + +syn region rakuPodAbbrType + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodName,rakuPodAbbr + +syn region rakuPodAbbr + \ start="^" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=@rakuPodFormat,rakuPodImplicitCode + +" Abbreviated block to end-of-file +syn region rakuPodAbbrRegion + \ matchgroup=rakuPodPrefix + \ start="^=\zeEND\>" + \ end="\%$" + \ contains=rakuPodAbbrEOFType + \ keepend + +syn region rakuPodAbbrEOFType + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="\%$" + \ contained + \ contains=rakuPodName,rakuPodAbbrEOF + +syn region rakuPodAbbrEOF + \ start="^" + \ end="\%$" + \ contained + \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode + +" Directives +syn region rakuPodDirectRegion + \ matchgroup=rakuPodPrefix + \ start="^=\%(config\|use\)\>" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contains=rakuPodDirectArgRegion + \ keepend + +syn region rakuPodDirectArgRegion + \ matchgroup=rakuPodType + \ start="\S\+" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contained + \ contains=rakuPodDirectConfigRegion + +syn region rakuPodDirectConfigRegion + \ start="" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contained + \ contains=@rakuPodConfig + +" =encoding is a special directive +syn region rakuPodDirectRegion + \ matchgroup=rakuPodPrefix + \ start="^=encoding\>" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contains=rakuPodEncodingArgRegion + \ keepend + +syn region rakuPodEncodingArgRegion + \ matchgroup=rakuPodName + \ start="\S\+" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contained + +" Paragraph blocks (implicit code forbidden) +syn region rakuPodParaRegion + \ matchgroup=rakuPodPrefix + \ start="^\s*\zs=for\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodParaNoCodeTypeRegion + \ keepend extend + +syn region rakuPodParaNoCodeTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodParaNoCode,rakuPodParaConfigRegion + +syn region rakuPodParaConfigRegion + \ start="" + \ end="^\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\@1<!\)" + \ contained + \ contains=@rakuPodConfig + +syn region rakuPodParaNoCode + \ start="^[^=]" + \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=@rakuPodFormat + +" Paragraph blocks (everything is code) +syn region rakuPodParaRegion + \ matchgroup=rakuPodPrefix + \ start="^\s*\zs=for\>\ze\s*code\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodParaCodeTypeRegion + \ keepend extend + +syn region rakuPodParaCodeTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodParaCode,rakuPodParaConfigRegion + +syn region rakuPodParaCode + \ start="^[^=]" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + +" Paragraph blocks (implicit code allowed) +syn region rakuPodParaRegion + \ matchgroup=rakuPodPrefix + \ start="^\s*\zs=for\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" + \ end="^\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contains=rakuPodParaTypeRegion + \ keepend extend + +syn region rakuPodParaTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=rakuPodPara,rakuPodParaConfigRegion + +syn region rakuPodPara + \ start="^[^=]" + \ end="^\s*\zs\ze\%(\s*$\|=[A-Za-z_\xC0-\xFF]\)" + \ contained + \ contains=@rakuPodFormat,rakuPodImplicitCode + +" Paragraph block to end-of-file +syn region rakuPodParaRegion + \ matchgroup=rakuPodPrefix + \ start="^=for\>\ze\s\+END\>" + \ end="\%$" + \ contains=rakuPodParaEOFTypeRegion + \ keepend extend + +syn region rakuPodParaEOFTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="\%$" + \ contained + \ contains=rakuPodParaEOF,rakuPodParaConfigRegion + +syn region rakuPodParaEOF + \ start="^[^=]" + \ end="\%$" + \ contained + \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode + +" Delimited blocks (implicit code forbidden) +syn region rakuPodDelimRegion + \ matchgroup=rakuPodPrefix + \ start="^\z(\s*\)\zs=begin\>" + \ end="^\z1\zs=end\>" + \ contains=rakuPodDelimNoCodeTypeRegion + \ keepend extend skipwhite + \ nextgroup=rakuPodType + +syn region rakuPodDelimNoCodeTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=rakuPodDelimNoCode,rakuPodDelimConfigRegion + +syn region rakuPodDelimConfigRegion + \ start="" + \ end="^\s*\zs\ze\%([^=]\|=[A-Za-z_\xC0-\xFF]\|\s*$\)" + \ contained + \ contains=@rakuPodConfig + +syn region rakuPodDelimNoCode + \ start="^" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=@rakuPodNestedBlocks,@rakuPodFormat + +" Delimited blocks (everything is code) +syn region rakuPodDelimRegion + \ matchgroup=rakuPodPrefix + \ start="^\z(\s*\)\zs=begin\>\ze\s*code\>" + \ end="^\z1\zs=end\>" + \ contains=rakuPodDelimCodeTypeRegion + \ keepend extend skipwhite + \ nextgroup=rakuPodType + +syn region rakuPodDelimCodeTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=rakuPodDelimCode,rakuPodDelimConfigRegion + +syn region rakuPodDelimCode + \ start="^" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=@rakuPodNestedBlocks + +" Delimited blocks (implicit code allowed) +syn region rakuPodDelimRegion + \ matchgroup=rakuPodPrefix + \ start="^\z(\s*\)\zs=begin\>\ze\s*\%(pod\|item\|nested\|\u\+\)\>" + \ end="^\z1\zs=end\>" + \ contains=rakuPodDelimTypeRegion + \ keepend extend skipwhite + \ nextgroup=rakuPodType + +syn region rakuPodDelimTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=rakuPodDelim,rakuPodDelimConfigRegion + +syn region rakuPodDelim + \ start="^" + \ end="^\s*\zs\ze=end\>" + \ contained + \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode + +" Delimited block to end-of-file +syn region rakuPodDelimRegion + \ matchgroup=rakuPodPrefix + \ start="^=begin\>\ze\s\+END\>" + \ end="\%$" + \ extend + \ contains=rakuPodDelimEOFTypeRegion + +syn region rakuPodDelimEOFTypeRegion + \ matchgroup=rakuPodType + \ start="\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + \ end="\%$" + \ contained + \ contains=rakuPodDelimEOF,rakuPodDelimConfigRegion + +syn region rakuPodDelimEOF + \ start="^" + \ end="\%$" + \ contained + \ contains=@rakuPodNestedBlocks,@rakuPodFormat,rakuPodImplicitCode + +syn cluster rakuPodConfig + \ add=rakuPodConfigOperator + \ add=rakuPodExtraConfig + \ add=rakuStringAuto + \ add=rakuPodAutoQuote + \ add=rakuStringSQ + +syn region rakuPodParens + \ start="(" + \ end=")" + \ contained + \ contains=rakuNumber,rakuStringSQ + +syn match rakuPodAutoQuote display contained "=>" +syn match rakuPodConfigOperator display contained ":!\?" nextgroup=rakuPodConfigOption +syn match rakuPodConfigOption display contained "[^[:space:](<]\+" nextgroup=rakuPodParens,rakuStringAngle +syn match rakuPodExtraConfig display contained "^=" +syn match rakuPodVerticalBar display contained "|" +syn match rakuPodColon display contained ":" +syn match rakuPodSemicolon display contained ";" +syn match rakuPodComma display contained "," +syn match rakuPodImplicitCode display contained "^\s.*" +syn match rakuPodType display contained "\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)" + +" These may appear inside delimited blocks +syn cluster rakuPodNestedBlocks + \ add=rakuPodAbbrRegion + \ add=rakuPodDirectRegion + \ add=rakuPodParaRegion + \ add=rakuPodDelimRegion + +" Pod formatting codes + +syn cluster rakuPodFormat + \ add=rakuPodFormatOne + \ add=rakuPodFormatTwo + \ add=rakuPodFormatThree + \ add=rakuPodFormatFrench + +" Balanced angles found inside formatting codes. Ensures proper nesting. + +syn region rakuPodFormatAnglesOne + \ matchgroup=rakuPodFormat + \ start="<" + \ skip="<[^>]*>" + \ end=">" + \ transparent contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne + +syn region rakuPodFormatAnglesTwo + \ matchgroup=rakuPodFormat + \ start="<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ transparent contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo + +syn region rakuPodFormatAnglesThree + \ matchgroup=rakuPodFormat + \ start="<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ transparent contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree + +syn region rakuPodFormatAnglesFrench + \ matchgroup=rakuPodFormat + \ start="«" + \ skip="«[^»]*»" + \ end="»" + \ transparent contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatAnglesOne,rakuPodFormatAnglesTwo,rakuPodFormatAnglesThree + +" All formatting codes + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="\u<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="\u<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="\u<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="\u«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree + +" C<> and V<> don't allow nested formatting formatting codes + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="[CV]<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="[CV]<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="[CV]<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="[CV]«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench + +" L<> can have a "|" separator + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="L<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="L<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="L<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="L«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar + +" E<> can have a ";" separator + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="E<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodSemiColon + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="E<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodSemiColon + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="E<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="E«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodSemiColon + +" M<> can have a ":" separator + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="M<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodColon + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="M<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodColon + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="M<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="M«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodColon + +" D<> can have "|" and ";" separators + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="D<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="D<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAngleTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="D<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="D«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon + +" X<> can have "|", "," and ";" separators + +syn region rakuPodFormatOne + \ matchgroup=rakuPodFormatCode + \ start="X<" + \ skip="<[^>]*>" + \ end=">" + \ contained + \ contains=rakuPodFormatAnglesOne,rakuPodFormatFrench,rakuPodFormatOne,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma + +syn region rakuPodFormatTwo + \ matchgroup=rakuPodFormatCode + \ start="X<<" + \ skip="<<[^>]*>>" + \ end=">>" + \ contained + \ contains=rakuPodFormatAnglesTwo,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma + +syn region rakuPodFormatThree + \ matchgroup=rakuPodFormatCode + \ start="X<<<" + \ skip="<<<[^>]*>>>" + \ end=">>>" + \ contained + \ contains=rakuPodFormatAnglesThree,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma + +syn region rakuPodFormatFrench + \ matchgroup=rakuPodFormatCode + \ start="X«" + \ skip="«[^»]*»" + \ end="»" + \ contained + \ contains=rakuPodFormatAnglesFrench,rakuPodFormatFrench,rakuPodFormatOne,rakuPodFormatTwo,rakuPodFormatThree,rakuPodVerticalBar,rakuPodSemiColon,rakuPodComma + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_raku_syntax_inits") + if version < 508 + let did_raku_syntax_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink rakuEscOctOld rakuError + HiLink rakuPackageTwigil rakuTwigil + HiLink rakuStringAngle rakuString + HiLink rakuStringAngleFixed rakuString + HiLink rakuStringFrench rakuString + HiLink rakuStringAngles rakuString + HiLink rakuStringSQ rakuString + HiLink rakuStringDQ rakuString + HiLink rakuStringQ rakuString + HiLink rakuStringQ_q rakuString + HiLink rakuStringQ_qww rakuString + HiLink rakuStringQ_qq rakuString + HiLink rakuStringQ_to rakuString + HiLink rakuStringQ_qto rakuString + HiLink rakuStringQ_qqto rakuString + HiLink rakuRxStringSQ rakuString + HiLink rakuRxStringDQ rakuString + HiLink rakuReplacement rakuString + HiLink rakuReplCurly rakuString + HiLink rakuReplAngle rakuString + HiLink rakuReplFrench rakuString + HiLink rakuReplBracket rakuString + HiLink rakuReplParen rakuString + HiLink rakuTransliteration rakuString + HiLink rakuTransRepl rakuString + HiLink rakuTransReplCurly rakuString + HiLink rakuTransReplAngle rakuString + HiLink rakuTransReplFrench rakuString + HiLink rakuTransReplBracket rakuString + HiLink rakuTransReplParen rakuString + HiLink rakuStringAuto rakuString + HiLink rakuKey rakuString + HiLink rakuMatch rakuString + HiLink rakuSubstitution rakuString + HiLink rakuMatchBare rakuString + HiLink rakuRegexBlock rakuString + HiLink rakuRxP5CharClass rakuString + HiLink rakuRxP5QuoteMeta rakuString + HiLink rakuRxCharClass rakuString + HiLink rakuRxQuoteWords rakuString + HiLink rakuReduceOp rakuOperator + HiLink rakuSetOp rakuOperator + HiLink rakuRSXZOp rakuOperator + HiLink rakuHyperOp rakuOperator + HiLink rakuPostHyperOp rakuOperator + HiLink rakuQuoteQ rakuQuote + HiLink rakuQuoteQ_q rakuQuote + HiLink rakuQuoteQ_qww rakuQuote + HiLink rakuQuoteQ_qq rakuQuote + HiLink rakuQuoteQ_to rakuQuote + HiLink rakuQuoteQ_qto rakuQuote + HiLink rakuQuoteQ_qqto rakuQuote + HiLink rakuQuoteQ_PIR rakuQuote + HiLink rakuMatchStart_m rakuQuote + HiLink rakuMatchStart_s rakuQuote + HiLink rakuMatchStart_tr rakuQuote + HiLink rakuBareSigil rakuVariable + HiLink rakuRxRange rakuStringSpecial + HiLink rakuRxAnchor rakuStringSpecial + HiLink rakuRxBoundary rakuStringSpecial + HiLink rakuRxP5Anchor rakuStringSpecial + HiLink rakuCodePoint rakuStringSpecial + HiLink rakuRxMeta rakuStringSpecial + HiLink rakuRxP5Range rakuStringSpecial + HiLink rakuRxP5CPId rakuStringSpecial + HiLink rakuRxP5Posix rakuStringSpecial + HiLink rakuRxP5Mod rakuStringSpecial + HiLink rakuRxP5HexSeq rakuStringSpecial + HiLink rakuRxP5OctSeq rakuStringSpecial + HiLink rakuRxP5WriteRefId rakuStringSpecial + HiLink rakuHexSequence rakuStringSpecial + HiLink rakuOctSequence rakuStringSpecial + HiLink rakuRxP5Named rakuStringSpecial + HiLink rakuRxP5PropId rakuStringSpecial + HiLink rakuRxP5Quantifier rakuStringSpecial + HiLink rakuRxP5CountId rakuStringSpecial + HiLink rakuRxP5Verb rakuStringSpecial + HiLink rakuRxAssertGroup rakuStringSpecial2 + HiLink rakuEscape rakuStringSpecial2 + HiLink rakuEscNull rakuStringSpecial2 + HiLink rakuEscHash rakuStringSpecial2 + HiLink rakuEscQQ rakuStringSpecial2 + HiLink rakuEscQuote rakuStringSpecial2 + HiLink rakuEscDoubleQuote rakuStringSpecial2 + HiLink rakuEscBackTick rakuStringSpecial2 + HiLink rakuEscForwardSlash rakuStringSpecial2 + HiLink rakuEscVerticalBar rakuStringSpecial2 + HiLink rakuEscExclamation rakuStringSpecial2 + HiLink rakuEscDollar rakuStringSpecial2 + HiLink rakuEscOpenCurly rakuStringSpecial2 + HiLink rakuEscCloseCurly rakuStringSpecial2 + HiLink rakuEscCloseBracket rakuStringSpecial2 + HiLink rakuEscCloseAngle rakuStringSpecial2 + HiLink rakuEscCloseFrench rakuStringSpecial2 + HiLink rakuEscBackSlash rakuStringSpecial2 + HiLink rakuEscCodePoint rakuStringSpecial2 + HiLink rakuEscOct rakuStringSpecial2 + HiLink rakuEscHex rakuStringSpecial2 + HiLink rakuRxEscape rakuStringSpecial2 + HiLink rakuRxCapture rakuStringSpecial2 + HiLink rakuRxAlternation rakuStringSpecial2 + HiLink rakuRxP5 rakuStringSpecial2 + HiLink rakuRxP5ReadRef rakuStringSpecial2 + HiLink rakuRxP5Oct rakuStringSpecial2 + HiLink rakuRxP5Hex rakuStringSpecial2 + HiLink rakuRxP5EscMeta rakuStringSpecial2 + HiLink rakuRxP5Meta rakuStringSpecial2 + HiLink rakuRxP5Escape rakuStringSpecial2 + HiLink rakuRxP5CodePoint rakuStringSpecial2 + HiLink rakuRxP5WriteRef rakuStringSpecial2 + HiLink rakuRxP5Prop rakuStringSpecial2 + + HiLink rakuProperty Tag + HiLink rakuAttention Todo + HiLink rakuType Type + HiLink rakuError Error + HiLink rakuBlockLabel Label + HiLink rakuNormal Normal + HiLink rakuIdentifier Normal + HiLink rakuPackage Normal + HiLink rakuPackageScope Normal + HiLink rakuNumber Number + HiLink rakuOctNumber Number + HiLink rakuBinNumber Number + HiLink rakuHexNumber Number + HiLink rakuDecNumber Number + HiLink rakuString String + HiLink rakuRepeat Repeat + HiLink rakuPragma Keyword + HiLink rakuPreDeclare Keyword + HiLink rakuDeclare Keyword + HiLink rakuDeclareRegex Keyword + HiLink rakuVarStorage Special + HiLink rakuFlowControl Special + HiLink rakuOctBase Special + HiLink rakuBinBase Special + HiLink rakuHexBase Special + HiLink rakuDecBase Special + HiLink rakuTwigil Special + HiLink rakuStringSpecial2 Special + HiLink rakuVersion Special + HiLink rakuComment Comment + HiLink rakuBracketComment Comment + HiLink rakuInclude Include + HiLink rakuShebang PreProc + HiLink rakuClosureTrait PreProc + HiLink rakuOperator Operator + HiLink rakuContext Operator + HiLink rakuQuote Delimiter + HiLink rakuTypeConstraint PreCondit + HiLink rakuException Exception + HiLink rakuVariable Identifier + HiLink rakuVarSlash Identifier + HiLink rakuVarNum Identifier + HiLink rakuVarExclam Identifier + HiLink rakuVarMatch Identifier + HiLink rakuVarName Identifier + HiLink rakuMatchVar Identifier + HiLink rakuRxP5ReadRefId Identifier + HiLink rakuRxP5ModDef Identifier + HiLink rakuRxP5ModName Identifier + HiLink rakuConditional Conditional + HiLink rakuStringSpecial SpecialChar + + HiLink rakuPodAbbr rakuPod + HiLink rakuPodAbbrEOF rakuPod + HiLink rakuPodAbbrNoCode rakuPod + HiLink rakuPodAbbrCode rakuPodCode + HiLink rakuPodPara rakuPod + HiLink rakuPodParaEOF rakuPod + HiLink rakuPodParaNoCode rakuPod + HiLink rakuPodParaCode rakuPodCode + HiLink rakuPodDelim rakuPod + HiLink rakuPodDelimEOF rakuPod + HiLink rakuPodDelimNoCode rakuPod + HiLink rakuPodDelimCode rakuPodCode + HiLink rakuPodImplicitCode rakuPodCode + HiLink rakuPodExtraConfig rakuPodPrefix + HiLink rakuPodVerticalBar rakuPodFormatCode + HiLink rakuPodColon rakuPodFormatCode + HiLink rakuPodSemicolon rakuPodFormatCode + HiLink rakuPodComma rakuPodFormatCode + HiLink rakuPodFormatOne rakuPodFormat + HiLink rakuPodFormatTwo rakuPodFormat + HiLink rakuPodFormatThree rakuPodFormat + HiLink rakuPodFormatFrench rakuPodFormat + + HiLink rakuPodType Type + HiLink rakuPodConfigOption String + HiLink rakuPodCode PreProc + HiLink rakuPod Comment + HiLink rakuPodComment Comment + HiLink rakuPodAutoQuote Operator + HiLink rakuPodConfigOperator Operator + HiLink rakuPodPrefix Statement + HiLink rakuPodName Identifier + HiLink rakuPodFormatCode SpecialChar + HiLink rakuPodFormat SpecialComment + + delcommand HiLink +endif + +if exists("raku_fold") || exists("raku_extended_all") + setl foldmethod=syntax + syn region rakuBlockFold + \ start="^\z(\s*\)\%(my\|our\|augment\|multi\|proto\|only\)\?\s*\%(\%([A-Za-z_\xC0-\xFF]\%([A-Za-z_\xC0-\xFF0-9]\|[-'][A-Za-z_\xC0-\xFF]\@=\)*\)\s\+\)\?\<\%(CATCH\|try\|ENTER\|LEAVE\|CHECK\|INIT\|BEGIN\|END\|KEEP\|UNDO\|PRE\|POST\|module\|package\|enum\|subset\|class\|sub\%(method\)\?\|multi\|method\|slang\|grammar\|regex\|token\|rule\)\>[^{]\+\%({\s*\%(#.*\)\?\)\?$" + \ end="^\z1}" + \ transparent fold keepend extend +endif + +let b:current_syntax = "raku" + +let &cpo = s:keepcpo +unlet s:keepcpo + +" vim:ts=8:sts=4:sw=4:expandtab:ft=vim diff --git a/runtime/syntax/ratpoison.vim b/runtime/syntax/ratpoison.vim index af8676c43d..2322e856a4 100644 --- a/runtime/syntax/ratpoison.vim +++ b/runtime/syntax/ratpoison.vim @@ -2,10 +2,9 @@ " Language: Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc ) " Maintainer: Magnus Woldrich <m@japh.se> " URL: http://github.com/trapd00r/vim-syntax-ratpoison -" Last Change: 2011 Apr 11 +" Last Change: 2021-04-12 13:46:04 " Previous Maintainer: Doug Kearns <djkea2@gus.gscit.monash.edu.au> -" quit when a syntax file was already loaded if exists("b:current_syntax") finish endif @@ -38,7 +37,7 @@ syn keyword ratpoisonCommandArg select set setenv sfdump shrink contained syn keyword ratpoisonCommandArg source sselect startup_message time title contained syn keyword ratpoisonCommandArg tmpwm unalias undefinekey undo unmanage contained syn keyword ratpoisonCommandArg unsetenv verbexec version vsplit warp contained -syn keyword ratpoisonCommandArg windows contained +syn keyword ratpoisonCommandArg windows framefmt infofmt contained syn match ratpoisonGravityArg "\<\(n\|north\)\>" contained syn match ratpoisonGravityArg "\<\(nw\|northwest\)\>" contained @@ -92,19 +91,27 @@ syn keyword ratpoisonSetArg barpadding contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg bgcolor syn keyword ratpoisonSetArg border contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg fgcolor +syn keyword ratpoisonSetArg framefmt contained nextgroup=ratpoisonWinFmtArg syn keyword ratpoisonSetArg fwcolor +syn keyword ratpoisonSetArg framemsgwait contained nextgroup=ratpoisonNumberArg +syn keyword ratpoisonSetArg gravity contained nextgroup=ratpoisonGravityArg syn keyword ratpoisonSetArg bwcolor +syn keyword ratpoisonSetArg gravity contained nextgroup=ratpoisonGravityArg syn keyword ratpoisonSetArg historysize syn keyword ratpoisonSetArg historycompaction syn keyword ratpoisonSetArg historyexpansion +syn keyword ratpoisonSetArg infofmt contained nextgroup=ratpoisonWinFmtArg syn keyword ratpoisonSetArg topkmap syn keyword ratpoisonSetArg barinpadding syn keyword ratpoisonSetArg font syn keyword ratpoisonSetArg framesels +syn keyword ratpoisonSetArg maxundos syn keyword ratpoisonSetArg inputwidth contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg maxsizegravity contained nextgroup=ratpoisonGravityArg +syn keyword ratpoisonSetArg msgwait contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg padding contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg resizeunit contained nextgroup=ratpoisonNumberArg +syn keyword ratpoisonSetArg startup_message syn keyword ratpoisonSetArg transgravity contained nextgroup=ratpoisonGravityArg syn keyword ratpoisonSetArg waitcursor contained nextgroup=ratpoisonNumberArg syn keyword ratpoisonSetArg winfmt contained nextgroup=ratpoisonWinFmtArg @@ -113,6 +120,8 @@ syn keyword ratpoisonSetArg winliststyle contained nextgroup=ratpoisonWinListArg syn keyword ratpoisonSetArg winname contained nextgroup=ratpoisonWinNameArg syn match ratpoisonWinFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite +syn match ratpoisonFrameFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite +syn match ratpoisonInfoFmtArg "%[nstacil]" contained nextgroup=ratpoisonWinFmtArg skipwhite syn match ratpoisonWinListArg "\<\(row\|column\)\>" contained @@ -126,6 +135,7 @@ syn match ratpoisonDefCommand "^\s*defbgcolor\s*" syn match ratpoisonDefCommand "^\s*defborder\s*" nextgroup=ratpoisonNumberArg syn match ratpoisonDefCommand "^\s*deffgcolor\s*" syn match ratpoisonDefCommand "^\s*deffont\s*" +syn match ratpoisonDefCommand "^\s*defframefmt\s*" nextgroup=ratpoisonWinFmtArg syn match ratpoisonDefCommand "^\s*defframesels\s*" syn match ratpoisonDefCommand "^\s*definputwidth\s*" nextgroup=ratpoisonNumberArg syn match ratpoisonDefCommand "^\s*defmaxsizegravity\s*" nextgroup=ratpoisonGravityArg @@ -243,14 +253,13 @@ syn match ratpoisonVoidCommand "^\s*\zsversion\ze\s*$" syn match ratpoisonVoidCommand "^\s*\zsvsplit\ze\s*$" syn match ratpoisonVoidCommand "^\s*\zswindows\ze\s*$" -" Define the default highlighting. -" Only when an item doesn't have highlighting yet - hi def link ratpoisonBooleanArg Boolean hi def link ratpoisonCommandArg Keyword hi def link ratpoisonComment Comment hi def link ratpoisonDefCommand Identifier +hi def link ratpoisonFrameFmtArg Special hi def link ratpoisonGravityArg Constant +hi def link ratpoisonInfoFmtArg Special hi def link ratpoisonKeySeqArg Special hi def link ratpoisonNumberArg Number hi def link ratpoisonSetArg Keyword @@ -261,7 +270,6 @@ hi def link ratpoisonWinFmtArg Special hi def link ratpoisonWinNameArg Constant hi def link ratpoisonWinListArg Constant - let b:current_syntax = "ratpoison" " vim: ts=8 diff --git a/runtime/syntax/rego.vim b/runtime/syntax/rego.vim new file mode 100644 index 0000000000..a04fc7007b --- /dev/null +++ b/runtime/syntax/rego.vim @@ -0,0 +1,89 @@ +" Vim syntax file +" Language: rego policy language +" Maintainer: Matt Dunford (zenmatic@gmail.com) +" URL: https://github.com/zenmatic/vim-syntax-rego +" Last Change: 2019 Dec 12 + +" https://www.openpolicyagent.org/docs/latest/policy-language/ + +" quit when a (custom) syntax file was already loaded +if exists("b:current_syntax") + finish +endif + +syn case match + +syn keyword regoDirective package import allow deny +syn keyword regoKeywords as default else false not null true with some + +syn keyword regoFuncAggregates count sum product max min sort all any +syn match regoFuncArrays "\<array\.\(concat\|slice\)\>" +syn keyword regoFuncSets intersection union + +syn keyword regoFuncStrings concat /\<contains\>/ endswith format_int indexof lower replace split sprintf startswith substring trim trim_left trim_prefix trim_right trim_suffix trim_space upper +syn match regoFuncStrings2 "\<strings\.replace_n\>" +syn match regoFuncStrings3 "\<contains\>" + +syn keyword regoFuncRegex re_match +syn match regoFuncRegex2 "\<regex\.\(split\|globs_match\|template_match\|find_n\|find_all_string_submatch_n\)\>" + +syn match regoFuncGlob "\<glob\.\(match\|quote_meta\)\>" +syn match regoFuncUnits "\<units\.parse_bytes\>" +syn keyword regoFuncTypes is_number is_string is_boolean is_array is_set is_object is_null type_name +syn match regoFuncEncoding1 "\<\(base64\|base64url\)\.\(encode\|decode\)\>" +syn match regoFuncEncoding2 "\<urlquery\.\(encode\|decode\|encode_object\)\>" +syn match regoFuncEncoding3 "\<\(json\|yaml\)\.\(marshal\|unmarshal\)\>" +syn match regoFuncTokenSigning "\<io\.jwt\.\(encode_sign_raw\|encode_sign\)\>" +syn match regoFuncTokenVerification "\<io\.jwt\.\(verify_rs256\|verify_ps256\|verify_es256\|verify_hs256\|decode\|decode_verify\)\>" +syn match regoFuncTime "\<time\.\(now_ns\|parse_ns\|parse_rfc3339_ns\|parse_duration_ns\|date\|clock\|weekday\)\>" +syn match regoFuncCryptography "\<crypto\.x509\.parse_certificates\>" +syn keyword regoFuncGraphs walk +syn match regoFuncHttp "\<http\.send\>" +syn match regoFuncNet "\<net\.\(cidr_contains\|cidr_intersects\)\>" +syn match regoFuncRego "\<rego\.parse_module\>" +syn match regoFuncOpa "\<opa\.runtime\>" +syn keyword regoFuncDebugging trace + +hi def link regoDirective Statement +hi def link regoKeywords Statement +hi def link regoFuncAggregates Statement +hi def link regoFuncArrays Statement +hi def link regoFuncSets Statement +hi def link regoFuncStrings Statement +hi def link regoFuncStrings2 Statement +hi def link regoFuncStrings3 Statement +hi def link regoFuncRegex Statement +hi def link regoFuncRegex2 Statement +hi def link regoFuncGlob Statement +hi def link regoFuncUnits Statement +hi def link regoFuncTypes Statement +hi def link regoFuncEncoding1 Statement +hi def link regoFuncEncoding2 Statement +hi def link regoFuncEncoding3 Statement +hi def link regoFuncTokenSigning Statement +hi def link regoFuncTokenVerification Statement +hi def link regoFuncTime Statement +hi def link regoFuncCryptography Statement +hi def link regoFuncGraphs Statement +hi def link regoFuncHttp Statement +hi def link regoFuncNet Statement +hi def link regoFuncRego Statement +hi def link regoFuncOpa Statement +hi def link regoFuncDebugging Statement + +" https://www.openpolicyagent.org/docs/latest/policy-language/#strings +syn region regoString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region regoRawString start=+`+ end=+`+ + +hi def link regoString String +hi def link regoRawString String + +" Comments; their contents +syn keyword regoTodo contained TODO FIXME XXX BUG +syn cluster regoCommentGroup contains=regoTodo +syn region regoComment start="#" end="$" contains=@regoCommentGroup,@Spell + +hi def link regoComment Comment +hi def link regoTodo Todo + +let b:current_syntax = 'rego' diff --git a/runtime/syntax/reva.vim b/runtime/syntax/reva.vim index f605992190..39ad88dd85 100644 --- a/runtime/syntax/reva.vim +++ b/runtime/syntax/reva.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: Reva Forth " Version: 2011.2 -" Last Change: 2012/02/13 +" Last Change: 2019 Sep 27 " Maintainer: Ron Aaron <ron@ronware.org> " URL: http://ronware.org/reva/ " Filetypes: *.rf *.frt @@ -150,7 +150,7 @@ syn match revaInclude '\<\(include\|needs\)\s\+\S\+' " Define the default highlighting. if !exists("did_reva_syntax_inits") let did_reva_syntax_inits=1 - " The default methods for highlighting. Can be overriden later. + " The default methods for highlighting. Can be overridden later. hi def link revaEOF cIf0 hi def link revaHelpStuff special hi def link revaHelpDesc Comment diff --git a/runtime/syntax/rmd.vim b/runtime/syntax/rmd.vim index d852d225bc..cccd4110f5 100644 --- a/runtime/syntax/rmd.vim +++ b/runtime/syntax/rmd.vim @@ -1,7 +1,7 @@ " markdown Text with R statements " Language: markdown with R code chunks " Homepage: https://github.com/jalvesaq/R-Vim-runtime -" Last Change: Thu Apr 18, 2019 09:17PM +" Last Change: Wed Apr 21, 2021 09:55AM " " For highlighting pandoc extensions to markdown like citations and TeX and " many other advanced features like folding of markdown sections, it is @@ -13,27 +13,45 @@ if exists("b:current_syntax") finish endif -" Configuration if not using pandoc syntax: -" Add syntax highlighting of YAML header -let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1) -" Add syntax highlighting of citation keys -let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1) -" Highlight the header of the chunk of R code -let g:rmd_syn_hl_chunk = get(g:, 'g:rmd_syn_hl_chunk', 0) +" Highlight the header of the chunks as R code +let g:rmd_syn_hl_chunk = get(g:, 'rmd_syn_hl_chunk', 0) " Pandoc-syntax has more features, but it is slower. " https://github.com/vim-pandoc/vim-pandoc-syntax let g:pandoc#syntax#codeblocks#embeds#langs = get(g:, 'pandoc#syntax#codeblocks#embeds#langs', ['r']) runtime syntax/pandoc.vim if exists("b:current_syntax") - " Fix recognition of R code - syn region pandocDelimitedCodeBlock_r start=/^```{r\>.*}$/ end=/^```$/ contained containedin=pandocDelimitedCodeBlock contains=@R + " Recognize inline R code syn region rmdrInline matchgroup=rmdInlineDelim start="`r " end="`" contains=@R containedin=pandocLaTeXRegion,yamlFlowString keepend hi def link rmdInlineDelim Delimiter + + " Fix recognition of language chunks (code adapted from pandoc, 2021-03-28) + " Knitr requires braces in the block's header + for s:lng in g:pandoc#syntax#codeblocks#embeds#langs + let s:nm = matchstr(s:lng, '^[^=]*') + exe 'syn clear pandocDelimitedCodeBlock_'.s:nm + exe 'syn clear pandocDelimitedCodeBlockinBlockQuote_'.s:nm + if g:rmd_syn_hl_chunk + exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@R' + exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@'.toupper(s:nm) + else + exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@'.toupper(s:nm) + endif + endfor + unlet s:lng + unlet s:nm + hi def link rmdInlineDelim Delimiter + hi def link rmdCodeDelim Delimiter let b:current_syntax = "rmd" finish endif +" Configuration if not using pandoc syntax: +" Add syntax highlighting of YAML header +let g:rmd_syn_hl_yaml = get(g:, 'rmd_syn_hl_yaml', 1) +" Add syntax highlighting of citation keys +let g:rmd_syn_hl_citations = get(g:, 'rmd_syn_hl_citations', 1) + let s:cpo_save = &cpo set cpo&vim @@ -63,15 +81,17 @@ for s:type in g:rmd_fenced_languages unlet! b:current_syntax exe 'syn include @Rmd'.s:nm.' syntax/'.s:ft.'.vim' if g:rmd_syn_hl_chunk - exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@Rmd'.s:nm + exe 'syn region rmd'.s:nm.'ChunkDelim matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>" matchgroup=rmdCodeDelim end="}$" keepend containedin=rmd'.s:nm.'Chunk contains=@Rmdr' exe 'syn region rmd'.s:nm.'Chunk start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=rmd'.s:nm.'ChunkDelim,@Rmd'.s:nm else exe 'syn region rmd'.s:nm.'Chunk matchgroup=rmdCodeDelim start="^\s*```\s*{\s*'.s:nm.'\>.*$" matchgroup=rmdCodeDelim end="^\s*```\ze\s*$" keepend contains=@Rmd'.s:nm endif - exe 'syn region rmd'.s:nm.'Inline matchgroup=rmdInlineDelim start="`'.s:nm.' " end="`" contains=@Rmd'.s:nm.' keepend' endfor unlet! s:type +" Recognize inline R code +syn region rmdrInline matchgroup=rmdInlineDelim start="`r " end="`" contains=@Rmdr keepend + hi def link rmdInlineDelim Delimiter hi def link rmdCodeDelim Delimiter diff --git a/runtime/syntax/rnoweb.vim b/runtime/syntax/rnoweb.vim index b2ba17d68d..749860a3fe 100644 --- a/runtime/syntax/rnoweb.vim +++ b/runtime/syntax/rnoweb.vim @@ -33,8 +33,8 @@ syn cluster texParaGroup add=@rnoweb " Highlighting of R code using an existing r.vim syntax file if available {{{1 syn include @rnowebR syntax/r.vim -syn region rnowebChunk matchgroup=rnowebDelimiter start="^<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend -syn match rnowebChunkReference "^<<.*>>$" contained +syn region rnowebChunk matchgroup=rnowebDelimiter start="^\s*<<.*>>=" matchgroup=rnowebDelimiter end="^@" contains=@rnowebR,rnowebChunkReference,rnowebChunk fold keepend +syn match rnowebChunkReference "^\s*<<.*>>$" contained syn region rnowebSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter end="}" contains=@rnowebR contained " Sweave options command {{{1 diff --git a/runtime/syntax/robots.vim b/runtime/syntax/robots.vim index 396bf52b25..fcb9b0275d 100644 --- a/runtime/syntax/robots.vim +++ b/runtime/syntax/robots.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: "Robots.txt" files " Robots.txt files indicate to WWW robots which parts of a web site should not be accessed. -" Maintainer: Dominique Stéphan (dominique@mggen.com) +" Maintainer: Dominique Stéphan (dominique@mggen.com) " URL: http://www.mggen.com/vim/syntax/robots.zip " Last change: 2001 May 09 diff --git a/runtime/syntax/rpcgen.vim b/runtime/syntax/rpcgen.vim index 08183d43a4..60c9b8cdda 100644 --- a/runtime/syntax/rpcgen.vim +++ b/runtime/syntax/rpcgen.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: rpcgen -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 12 +" Version: 13 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_RPCGEN if exists("b:current_syntax") diff --git a/runtime/syntax/rpl.vim b/runtime/syntax/rpl.vim index f339f7ae6e..28c250b7c4 100644 --- a/runtime/syntax/rpl.vim +++ b/runtime/syntax/rpl.vim @@ -2,7 +2,7 @@ " Language: RPL/2 " Version: 0.15.15 against RPL/2 version 4.00pre7i " Last Change: 2012 Feb 03 by Thilo Six -" Maintainer: Joël BERTRAND <rpl2@free.fr> +" Maintainer: Joël BERTRAND <rpl2@free.fr> " URL: http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim " Credits: Nothing diff --git a/runtime/syntax/rst.vim b/runtime/syntax/rst.vim index c865cf6905..a90c90be21 100644 --- a/runtime/syntax/rst.vim +++ b/runtime/syntax/rst.vim @@ -1,9 +1,9 @@ -" Vim syntax file +" Vim reST syntax file " Language: reStructuredText documentation format " Maintainer: Marshall Ward <marshall.ward@gmail.com> " Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Website: https://github.com/marshallward/vim-restructuredtext -" Latest Revision: 2018-12-29 +" Latest Revision: 2020-03-31 if exists("b:current_syntax") finish @@ -21,7 +21,7 @@ syn cluster rstCruft contains=rstEmphasis,rstStrongEmphasis, \ rstInlineInternalTargets,rstFootnoteReference,rstHyperlinkReference syn region rstLiteralBlock matchgroup=rstDelimiter - \ start='::\_s*\n\ze\z(\s\+\)' skip='^$' end='^\z1\@!' + \ start='\(^\z(\s*\).*\)\@<=::\n\s*\n' skip='^\s*$' end='^\(\z1\s\+\)\@!' \ contains=@NoSpell syn region rstQuotedLiteralBlock matchgroup=rstDelimiter @@ -90,16 +90,28 @@ execute 'syn match rstSubstitutionDefinition contained' . \ ' /|.*|\_s\+/ nextgroup=@rstDirectives' function! s:DefineOneInlineMarkup(name, start, middle, end, char_left, char_right) + " Only escape the first char of a multichar delimiter (e.g. \* inside **) + if a:start[0] == '\' + let first = a:start[0:1] + else + let first = a:start[0] + endif + + execute 'syn match rstEscape'.a:name.' +\\\\\|\\'.first.'+'.' contained' + execute 'syn region rst' . a:name . \ ' start=+' . a:char_left . '\zs' . a:start . \ '\ze[^[:space:]' . a:char_right . a:start[strlen(a:start) - 1] . ']+' . \ a:middle . - \ ' end=+\S' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' + \ ' end=+' . a:end . '\ze\%($\|\s\|[''"’)\]}>/:.,;!?\\-]\)+' . + \ ' contains=rstEscape' . a:name + + execute 'hi def link rstEscape'.a:name.' Special' endfunction function! s:DefineInlineMarkup(name, start, middle, end) let middle = a:middle != "" ? - \ (' skip=+\\\\\|\\' . a:middle . '+') : + \ (' skip=+\\\\\|\\' . a:middle . '\|\s' . a:middle . '+') : \ "" call s:DefineOneInlineMarkup(a:name, a:start, middle, a:end, "'", "'") @@ -161,7 +173,7 @@ syn match rstStandaloneHyperlink contains=@NoSpell \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]" syn region rstCodeBlock contained matchgroup=rstDirective - \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s\+.*\_s*\n\ze\z(\s\+\)+ + \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s*\(\S*\)\?\s*\n\%(\s*:.*:\s*.*\s*\n\)*\n\ze\z(\s\+\)+ \ skip=+^$+ \ end=+^\z1\@!+ \ contains=@NoSpell diff --git a/runtime/syntax/rtf.vim b/runtime/syntax/rtf.vim index c856f9ffcf..f8e031ba21 100644 --- a/runtime/syntax/rtf.vim +++ b/runtime/syntax/rtf.vim @@ -7,7 +7,7 @@ " .hlp (windows help files) use compiled rtf files " rtf documentation at http://night.primate.wisc.edu/software/RTF/ " -" Maintainer: Dominique Stéphan (dominique@mggen.com) +" Maintainer: Dominique Stéphan (dominique@mggen.com) " URL: http://www.mggen.com/vim/syntax/rtf.zip " Last change: 2001 Mai 02 diff --git a/runtime/syntax/ruby.vim b/runtime/syntax/ruby.vim index 8b88378e60..0de63d0ef3 100644 --- a/runtime/syntax/ruby.vim +++ b/runtime/syntax/ruby.vim @@ -3,7 +3,7 @@ " Maintainer: Doug Kearns <dougkearns@gmail.com> " URL: https://github.com/vim-ruby/vim-ruby " Release Coordinator: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2018 Jul 09 +" Last Change: 2019 Jul 13 " ---------------------------------------------------------------------------- " " Previous Maintainer: Mirko Nasato @@ -19,6 +19,11 @@ endif let s:cpo_sav = &cpo set cpo&vim +" eRuby Config {{{1 +if exists('main_syntax') && main_syntax == 'eruby' + let b:ruby_no_expensive = 1 +endif + " Folding Config {{{1 if has("folding") && exists("ruby_fold") setlocal foldmethod=syntax @@ -33,6 +38,10 @@ let s:foldable_groups = split( \ ) function! s:foldable(...) abort + if index(s:foldable_groups, 'NONE') > -1 + return 0 + endif + if index(s:foldable_groups, 'ALL') > -1 return 1 endif @@ -44,9 +53,20 @@ function! s:foldable(...) abort endfor return 0 -endfunction " }}} +endfunction + +function! s:run_syntax_fold(args) abort + let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)') + if call('s:foldable', split(groups)) + let cmd .= ' fold' + endif + exe cmd +endfunction + +com! -nargs=* SynFold call s:run_syntax_fold(<q-args>) -syn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo,rubyModuleName,rubyClassName,rubySymbolDelimiter +" Not-Top Cluster {{{1 +syn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses " Whitespace Errors {{{1 if exists("ruby_space_errors") @@ -59,427 +79,400 @@ if exists("ruby_space_errors") endif " Operators {{{1 -if exists("ruby_operators") - syn match rubyOperator "[~!^|*/%+-]\|&\.\@!\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@1<!>\|\*\*\|\.\.\.\|\.\.\|::" - syn match rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=" - syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@2<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop -endif -" Expression Substitution and Backslash Notation {{{1 -syn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display -syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display -syn match rubyQuoteEscape "\\[\\']" contained display +syn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>" + +if exists("ruby_operators") || exists("ruby_pseudo_operators") + syn match rubyDotOperator "\.\|&\." + + syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:" + syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!" + syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>" + syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|<<\|>>" + syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||" + syn match rubyRangeOperator "\.\.\.\=" + syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" + syn match rubyAssignmentOperator "=>\@!" containedin=rubyBlockParameterList " TODO: this is inelegant + syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" + + syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop + + syn match rubyScopeOperator "::" + syn match rubySuperClassOperator "<" contained + syn match rubyEigenClassOperator "<<" contained + syn match rubyLambdaOperator "->" + syn match rubySplatOperator "\%([[{(|,=]\_s*\)\@<=\*" + syn match rubySplatOperator "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@=" + syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*" + syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@=" + syn match rubyProcOperator "\%([[(|,]\_s*\)\@<=&" + syn match rubyProcOperator "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@=" + + syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator + syn cluster rubyClassOperator contains=rubyEigenClassOperator,rubySuperClassOperator + syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator + syn cluster rubyOperator contains=ruby.*Operator +endif +" String Interpolation and Backslash Notation {{{1 syn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop -syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable -syn match rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained -syn match rubyInterpolation "#\$\%(-\w\|\W\)" display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable -syn match rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained -syn region rubyNoInterpolation start="\\#{" end="}" contained -syn match rubyNoInterpolation "\\#{" display contained -syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained -syn match rubyNoInterpolation "\\#\$\W" display contained +syn match rubyInterpolation "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable +syn match rubyInterpolation "#@@\=\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable +syn match rubyInterpolationDelimiter "#\ze[$@]" display contained + +syn match rubyStringEscape "\\\_." contained display +syn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display +syn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)" contained display +syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display + +syn match rubyBackslashEscape "\\\\" contained display +syn match rubyQuoteEscape "\\'" contained display +syn match rubySpaceEscape "\\ " contained display -syn match rubyDelimiterEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE +syn match rubyParenthesisEscape "\\[()]" contained display +syn match rubyCurlyBraceEscape "\\[{}]" contained display +syn match rubyAngleBracketEscape "\\[<>]" contained display +syn match rubySquareBracketEscape "\\[[\]]" contained display syn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained syn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained syn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained syn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained +syn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape +syn cluster rubyNestedBrackets contains=rubyNested.\+ +syn cluster rubyStringSpecial contains=rubyInterpolation,rubyStringEscape +syn cluster rubyStringNotTop contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape + " Regular Expression Metacharacters {{{1 -" These are mostly Oniguruma ready -syn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\)" end=")" contained -syn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)" end=")" contained transparent contains=@rubyRegexpSpecial -syn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline -syn match rubyRegexpCharClass "\\[DdHhSsWw]" contained display -syn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained -syn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained -syn match rubyRegexpQuantifier "[*?+][?+]\=" contained display -syn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display -syn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display -syn match rubyRegexpDot "\." contained display -syn match rubyRegexpSpecial "|" contained display -syn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display -syn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display -syn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display -syn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display -syn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display - -syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape -syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets -syn cluster rubyRegexpSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment - -" Numbers and ASCII Codes {{{1 -syn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" -syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display -syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display -syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display -syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display -syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display -syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)r\=i\=\>" display +syn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\\\\|\\)" end=")" contained +syn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)" end=")" contained transparent contains=@rubyRegexpSpecial +syn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline +syn match rubyRegexpCharClass "\\[DdHhRSsWw]" contained display +syn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained +syn match rubyRegexpCharClass "\\[pP]{^\=.\{-}}" contained display +syn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained " see commit e477f10 +syn match rubyRegexpQuantifier "[*?+][?+]\=" contained display +syn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display +syn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display +syn match rubyRegexpDot "\.\|\\X" contained display +syn match rubyRegexpIntersection "&&" contained display +syn match rubyRegexpSpecial "\\K" contained display +syn match rubyRegexpSpecial "|" contained display +syn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display +syn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display +syn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display +syn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display +syn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display + +syn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection + +" Numbers {{{1 +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display +syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display +syn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display +syn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)i\=\>" display " Identifiers {{{1 -syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent -syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent - -syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained -syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained -syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" -syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display -syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display -syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" -syn match rubySymbolDelimiter ":" contained -syn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter -syn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter -syn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter -syn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter - -if s:foldable(':') - syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold -else - syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial +syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained +syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained +syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" +syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display +syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display +syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" +syn match rubySymbolDelimiter ":" contained +syn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter +syn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter +syn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter +syn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter + +SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape,rubyBackslashEscape +SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial + +syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@=" + +syn region rubyParentheses start="(" end=")" contains=ALLBUT,@rubyNotTop containedin=rubyBlockParameterList +syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator + +if exists('ruby_global_variable_error') + syn match rubyGlobalVariableError "$[^A-Za-z_]" display + syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display endif -syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@=" - -syn match rubyBlockParameter "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained -syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter - -syn match rubyInvalidVariable "$[^ A-Za-z_-]" -syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]# -syn match rubyPredefinedVariable "$\d\+" display -syn match rubyPredefinedVariable "$_\>" display -syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display -syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display -syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display -syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|FALSE\|NIL\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" +syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]# +syn match rubyPredefinedVariable "$\d\+" display +syn match rubyPredefinedVariable "$_\>" display +syn match rubyPredefinedVariable "$-[0FIWadilpvw]\>" display +syn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>" display +syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display +syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\)\>\%(\s*(\)\@!" syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!" -" Normal Regular Expression {{{1 -if s:foldable('/') - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold -else - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial -endif - -" Generalized Regular Expression {{{1 -if s:foldable('%') - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial fold - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold -else - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial - syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial -endif - -" Normal String {{{1 +" Deprecated/removed in 1.9 +syn match rubyPredefinedVariable "$=" +syn match rubyPredefinedVariable "$-K\>" display +syn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display +syn match rubyPredefinedVariable "$KCODE\>" display +" Deprecated/removed in 2.4 +syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!" + +syn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError + +" Normal Regular Expressions {{{1 +SynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite +SynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite + +" Generalized Regular Expressions {{{1 +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial +SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial + +" Characters {{{1 +syn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\[[:space:]]\|\\\=[^[:space:]]\)\)" +syn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)" + +" Normal Strings {{{1 let s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' -exe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" ' . - \ (s:foldable('%') ? 'fold' : '') . ' contains=@rubyStringSpecial' . s:spell_cluster -exe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" ' . - \ (s:foldable('%') ? 'fold' : '') . ' contains=rubyQuoteEscape' . s:spell_cluster +let s:fold_arg = s:foldable('string') ? ' fold' : '' +exe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial' . s:spell_cluster . s:fold_arg +exe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg +unlet s:spell_cluster s:fold_arg " Shell Command Output {{{1 -if s:foldable('%') - syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold -else - syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial -endif +SynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial -" Generalized Single Quoted String, Symbol and Array of Strings {{{1 -if s:foldable('%') - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold -else - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" -endif +" Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1 -" Generalized Double Quoted String and Array of Strings and Shell Command Output {{{1 -" Note: %= is not matched here as the beginning of a double quoted string -if s:foldable('%') - syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold - syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold -else - syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape - syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial -endif +" Non-bracket punctuation delimiters {{{2 +let s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret', + \ '&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar', + \ '\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period', + \ '?': 'QuestionMark', '/': 'ForwardSlash' } -" Array of Symbols {{{1 -if s:foldable('%') - " Array of Symbols - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape - - " Array of interpolated Symbols - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold -else - " Array of Symbols - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape - - " Array of interpolated Symbols - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape - syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape -endif +for s:delimiter in keys(s:names) + let s:group = 'ruby' . s:names[s:delimiter] . 'Escape' -" Here Document {{{1 -syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop -syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop -syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop -syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop - -if s:foldable('<<') - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend - - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart fold keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend -else - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend - - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend - syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend -endif + if s:delimiter =~ '[\"]' + let s:delimiter = '\' . s:delimiter + endif -" eRuby Config {{{1 -if exists('main_syntax') && main_syntax == 'eruby' - let b:ruby_no_expensive = 1 -endif + exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display' + exe 'syn cluster rubySingleCharEscape add=' . s:group + exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%q' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' + exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%w' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' + exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%s' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' + exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%i' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' + exe 'hi def link ' . s:group . ' rubyStringEscape' +endfor + +unlet s:delimiter s:group s:names +" }}}2 + +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape + +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses + +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses +SynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape + +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses + +" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1 +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="=" skip="\\\\\|\\=" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses +SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial + +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets +SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses + +" Here Documents {{{1 +syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop + +syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop +syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop +syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop + +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend + +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend +SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend " Module, Class, Method and Alias Declarations {{{1 -syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite -syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable -syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable -syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyOperator -syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyOperator -syn match rubyMethodName "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration -syn match rubyMethodName "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 -syn match rubyMethodName "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration +syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite +syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable +syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable +syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite skipnl +syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyScopeOperator + +syn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!" contained containedin=rubyMethodDeclaration +syn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 +syn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration -syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName,rubyBlockParameter +syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName " Keywords {{{1 -" Note: the following keywords have already been defined: -" begin case class def do end for if module unless until while -syn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!" -syn match rubyOperator "\<defined?" display -syn match rubyKeyword "\<\%(super\|yield\)\>[?!]\@!" -syn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!" -syn match rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__dir__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise -syn match rubyBeginEnd "\<\%(BEGIN\|END\)\>[?!]\@!" +" TODO: reorganise +syn match rubyControl "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>" +syn match rubyKeyword "\%#=1\<\%(super\|yield\)\>" +syn match rubyBoolean "\%#=1\<\%(true\|false\)\>[?!]\@!" +syn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!" +syn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" +syn match rubyBeginEnd "\%#=1\<\%(BEGIN\|END\)\>" " Expensive Mode {{{1 " Match 'end' with the appropriate opening keyword for syntax based folding " and special highlighting of module/class/method definitions if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") - syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl - syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl - syn match rubyDefine "\<undef\>" nextgroup=rubyMethodName skipwhite skipnl - syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl - syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl - - if s:foldable('def') - syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop - endif - - if s:foldable('class') - syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop - endif + syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl + syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl + syn match rubyDefine "\<undef\>" nextgroup=rubyMethodName skipwhite skipnl + syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl + syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl - if s:foldable('module') - syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop - endif + SynFold 'def' syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop + SynFold 'class' syn region rubyClassBlock start="\<class\>" matchgroup=rubyClass skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop + SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop " modifiers - syn match rubyLineContinuation "\\$" nextgroup=rubyConditionalModifier,rubyRepeatModifier skipwhite skipnl + syn match rubyLineContinuation "\\$" nextgroup=@rubyModifier skipwhite skipnl syn match rubyConditionalModifier "\<\%(if\|unless\)\>" syn match rubyRepeatModifier "\<\%(while\|until\)\>" + syn match rubyRescueModifier "\<rescue\>" - if s:foldable('do') - syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop - endif + syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier - " curly bracket block or hash literal - if s:foldable('{') - syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop - endif + SynFold 'do' syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop - if s:foldable('[') - syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold - endif + " curly bracket block or hash literal + SynFold '{' syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop + SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop " statements without 'do' - if s:foldable('begin') - syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop - endif + SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop + SynFold 'case' syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop - if s:foldable('case') - syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop - endif + SynFold 'if' syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\<then\s\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop - if s:foldable('if') - syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold - else - syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop - endif + syn match rubyConditional "\<\%(then\|else\|when\)\>" contained containedin=rubyCaseExpression + syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression - syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression - syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression - - syn match rubyExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression - syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock + syn match rubyExceptionHandler "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock + syn match rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock + syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler2 " statements with optional 'do' - syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop + syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\<do\>" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop - if s:foldable('for') - syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold - else - syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine - endif + SynFold 'for' syn region rubyRepeatExpression start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine if !exists("ruby_minlines") let ruby_minlines = 500 endif - exec "syn sync minlines=" . ruby_minlines + exe "syn sync minlines=" . ruby_minlines else - syn match rubyControl "\<def\>[?!]\@!" nextgroup=rubyMethodDeclaration skipwhite skipnl - syn match rubyControl "\<class\>[?!]\@!" nextgroup=rubyClassDeclaration skipwhite skipnl - syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl - syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!" - syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!" + syn match rubyControl "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl + syn match rubyControl "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl + syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl + syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>" + syn match rubyKeyword "\<\%(alias\|undef\)\>" endif " Special Methods {{{1 if !exists("ruby_no_special_methods") - syn keyword rubyAccess public protected private public_class_method private_class_method public_constant private_constant module_function - " attr is a common variable name - syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" - syn keyword rubyAttribute attr_accessor attr_reader attr_writer - syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)" - syn keyword rubyEval eval class_eval instance_eval module_eval - syn keyword rubyException raise fail catch throw - syn keyword rubyInclude autoload gem load require require_relative - syn keyword rubyKeyword callcc caller lambda proc - " false positive with 'include?' - syn match rubyMacro "\<include\>[?!]\@!" - syn keyword rubyMacro extend prepend refine using - syn keyword rubyMacro alias_method define_method define_singleton_method remove_method undef_method + syn match rubyAccess "\<\%(public\|protected\|private\)\>" " use re=2 + syn match rubyAccess "\%#=1\<\%(public\|private\)_class_method\>" + syn match rubyAccess "\%#=1\<\%(public\|private\)_constant\>" + syn match rubyAccess "\%#=1\<module_function\>" + syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name + syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>" + syn match rubyControl "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" + syn match rubyEval "\%#=1\<eval\>" + syn match rubyEval "\%#=1\<\%(class\|instance\|module\)_eval\>" + syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>" + syn match rubyInclude "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>" + syn match rubyKeyword "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>" + syn match rubyMacro "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>" + syn match rubyMacro "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>" endif " Comments and Documentation {{{1 -syn match rubySharpBang "\%^#!.*" display -syn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained -syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell +syn match rubySharpBang "\%^#!.*" display +syn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained +syn match rubyEncoding "[[:alnum:]-]\+" contained display +syn match rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):" contained nextgroup=rubyEncoding skipwhite +syn match rubyMagicComment "\c\%<10l#\s*\zs\%(frozen_string_literal\|warn_indent\|warn_past_scope\):" contained nextgroup=rubyBoolean skipwhite +syn match rubyComment "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell + +syn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment +syn cluster rubyCommentNotTop contains=@rubyCommentSpecial,rubyEncoding + if !exists("ruby_no_comment_fold") && s:foldable('#') syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend - syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold + syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold else - syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell + syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell endif +" {{{1 Useless Line Continuations +syn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty +syn match rubyUselessLineContinuation "\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty contained + " Keyword Nobbling {{{1 -" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver -syn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\<\%(BEGIN\|END\)\>\)" transparent contains=NONE -syn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*[?!]" transparent contains=NONE +" prevent methods with keyword names being highlighted as keywords when called +syn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator -" More Symbols {{{1 -syn match rubySymbol "\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1 -syn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1 -syn match rubySymbol "\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1 -syn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1 +" Bang and Predicate Methods and Operators {{{1 +syn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]" -" __END__ Directive {{{1 -if s:foldable('__END__') - syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold -else - syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" +if !exists("ruby_no_special_methods") + syn match rubyControl "\%#=1\<exit!" display endif +syn match rubyDefinedOperator "\%#=1\<defined?" display + +" 1.9-style Hash Keys and Keyword Parameters {{{1 +syn match rubySymbol "\%([{(|,]\_s*\)\@<=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1 +syn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1 +syn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1 + +" __END__ Directive {{{1 +SynFold '__END__' syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" " Default Highlighting {{{1 hi def link rubyClass rubyDefine hi def link rubyModule rubyDefine -hi def link rubyMethodExceptional rubyDefine +hi def link rubyExceptionHandler2 rubyDefine hi def link rubyDefine Define hi def link rubyAccess rubyMacro hi def link rubyAttribute rubyMacro @@ -488,14 +481,15 @@ hi def link rubyMethodName rubyFunction hi def link rubyFunction Function hi def link rubyConditional Conditional hi def link rubyConditionalModifier rubyConditional -hi def link rubyExceptional rubyConditional +hi def link rubyExceptionHandler rubyConditional +hi def link rubyRescueModifier rubyExceptionHandler hi def link rubyRepeat Repeat hi def link rubyRepeatModifier rubyRepeat hi def link rubyOptionalDo rubyRepeat hi def link rubyControl Statement hi def link rubyInclude Include hi def link rubyInteger Number -hi def link rubyASCIICode Character +hi def link rubyCharacter Character hi def link rubyFloat Float hi def link rubyBoolean Boolean hi def link rubyException Exception @@ -515,39 +509,80 @@ hi def link rubyPredefinedConstant rubyPredefinedIdentifier hi def link rubyPredefinedVariable rubyPredefinedIdentifier hi def link rubySymbol Constant hi def link rubyKeyword Keyword + hi def link rubyOperator Operator +hi def link rubyDefinedOperator rubyOperator +hi def link rubyEnglishBooleanOperator rubyOperator +if exists("ruby_operators") + hi def link rubyTernaryOperator rubyOperator + hi def link rubyArithmeticOperator rubyOperator + hi def link rubyComparisonOperator rubyOperator + hi def link rubyBitwiseOperator rubyOperator + hi def link rubyBooleanOperator rubyOperator + hi def link rubyRangeOperator rubyOperator + hi def link rubyAssignmentOperator rubyOperator + hi def link rubyEqualityOperator rubyOperator +endif + +if exists("ruby_pseudo_operators") + hi def link rubyPseudoOperator Special + hi def link rubyDotOperator rubyPseudoOperator + hi def link rubyScopeOperator rubyPseudoOperator + hi def link rubySuperClassOperator rubyPseudoOperator + hi def link rubyEigenClassOperator rubyPseudoOperator + hi def link rubyLambdaOperator rubyPseudoOperator + hi def link rubyDoubleSplatOperator rubyPseudoOperator + hi def link rubySplatOperator rubyPseudoOperator + hi def link rubyProcOperator rubyPseudoOperator +endif + hi def link rubyBeginEnd Statement hi def link rubyEval Statement hi def link rubyPseudoVariable Constant -hi def link rubyCapitalizedMethod rubyLocalVariableOrMethod +hi def link rubyCapitalizedMethod NONE hi def link rubyComment Comment +hi def link rubyEncoding Constant +hi def link rubyMagicComment SpecialComment hi def link rubyData Comment hi def link rubyDataDirective Delimiter hi def link rubyDocumentation Comment hi def link rubyTodo Todo +hi def link rubyBackslashEscape rubyStringEscape hi def link rubyQuoteEscape rubyStringEscape +hi def link rubySpaceEscape rubyStringEscape +hi def link rubyParenthesisEscape rubyStringEscape +hi def link rubyCurlyBraceEscape rubyStringEscape +hi def link rubyAngleBracketEscape rubyStringEscape +hi def link rubySquareBracketEscape rubyStringEscape hi def link rubyStringEscape Special + hi def link rubyInterpolationDelimiter Delimiter -hi def link rubyNoInterpolation rubyString hi def link rubySharpBang PreProc +hi def link rubyStringDelimiter Delimiter +hi def link rubyHeredocDelimiter rubyStringDelimiter +hi def link rubyPercentRegexpDelimiter rubyRegexpDelimiter +hi def link rubyPercentStringDelimiter rubyStringDelimiter +hi def link rubyPercentSymbolDelimiter rubySymbolDelimiter hi def link rubyRegexpDelimiter rubyStringDelimiter hi def link rubySymbolDelimiter rubySymbol -hi def link rubyStringDelimiter Delimiter -hi def link rubyHeredoc rubyString hi def link rubyString String hi def link rubyRegexpEscape rubyRegexpSpecial hi def link rubyRegexpQuantifier rubyRegexpSpecial hi def link rubyRegexpAnchor rubyRegexpSpecial hi def link rubyRegexpDot rubyRegexpCharClass hi def link rubyRegexpCharClass rubyRegexpSpecial +hi def link rubyRegexpIntersection rubyRegexpSpecial hi def link rubyRegexpSpecial Special hi def link rubyRegexpComment Comment hi def link rubyRegexp rubyString -hi def link rubyInvalidVariable Error hi def link rubyError Error +if exists("ruby_line_continuation_error") + hi def link rubyUselessLineContinuation rubyError +endif +hi def link rubyGlobalVariableError rubyError hi def link rubySpaceError rubyError " Postscript {{{1 @@ -556,4 +591,6 @@ let b:current_syntax = "ruby" let &cpo = s:cpo_sav unlet! s:cpo_sav +delc SynFold + " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: diff --git a/runtime/syntax/sass.vim b/runtime/syntax/sass.vim index d075c8736e..b51a0ae26b 100644 --- a/runtime/syntax/sass.vim +++ b/runtime/syntax/sass.vim @@ -2,7 +2,7 @@ " Language: Sass " Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Filenames: *.sass -" Last Change: 2016 Aug 29 +" Last Change: 2019 Dec 05 if exists("b:current_syntax") finish @@ -21,8 +21,7 @@ syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation -syn match sassDefault "!default\>" contained -syn match sassVariable "!\%(important\>\|default\>\)\@![[:alnum:]_-]\+" +syn match sassFlag "!\%(default\|global\|optional\)\>" contained syn match sassVariable "$[[:alnum:]_-]\+" syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite @@ -42,7 +41,6 @@ syn match sassMixin "\%([{};]\s*\|^\s*\)\@<=@mixin" nextgroup=sassMixinName s syn match sassMixing "^\s\+\zs+" nextgroup=sassMixinName syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend" -syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%" nextgroup=sassMixinName skipwhite syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function" nextgroup=sassFunctionName skipwhite @@ -52,6 +50,7 @@ syn match sassEscape "^\s*\zs\\" syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId syn match sassId "[[:alnum:]_-]\+" contained syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass +syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%" nextgroup=sassClass syn match sassClass "[[:alnum:]_-]\+" contained syn match sassAmpersand "&" @@ -75,12 +74,12 @@ syn match sassEndOfLineComment "//.*" contains=sassComment,sassTodo,@Spell hi def link sassEndOfLineComment sassComment hi def link sassCssComment sassComment hi def link sassComment Comment -hi def link sassDefault cssImportant +hi def link sassFlag cssImportant hi def link sassVariable Identifier hi def link sassFunction Function hi def link sassMixing PreProc hi def link sassMixin PreProc -hi def link sassPlaceholder PreProc +hi def link sassPlaceholder sassClassChar hi def link sassExtend PreProc hi def link sassFunctionDecl PreProc hi def link sassReturn PreProc diff --git a/runtime/syntax/scss.vim b/runtime/syntax/scss.vim index 6fb9691527..9d79dc5cb6 100644 --- a/runtime/syntax/scss.vim +++ b/runtime/syntax/scss.vim @@ -2,7 +2,7 @@ " Language: SCSS " Maintainer: Tim Pope <vimNOSPAM@tpope.org> " Filenames: *.scss -" Last Change: 2010 Jul 26 +" Last Change: 2019 Dec 05 if exists("b:current_syntax") finish @@ -10,10 +10,15 @@ endif runtime! syntax/sass.vim +syn clear sassComment +syn clear sassCssComment +syn clear sassEndOfLineComment + syn match scssComment "//.*" contains=sassTodo,@Spell -syn region scssComment start="/\*" end="\*/" contains=sassTodo,@Spell +syn region scssCssComment start="/\*" end="\*/" contains=sassTodo,@Spell -hi def link scssComment sassComment +hi def link scssCssComment scssComment +hi def link scssComment Comment let b:current_syntax = "scss" diff --git a/runtime/syntax/sexplib.vim b/runtime/syntax/sexplib.vim new file mode 100644 index 0000000000..55dd3fb494 --- /dev/null +++ b/runtime/syntax/sexplib.vim @@ -0,0 +1,88 @@ +" Vim syntax file +" Language: S-expressions as used in Sexplib +" Filenames: *.sexp +" Maintainers: Markus Mottl <markus.mottl@gmail.com> +" URL: https://github.com/ocaml/vim-ocaml +" Last Change: 2020 Dec 31 - Updated header for Vim contribution (MM) +" 2017 Apr 11 - Improved matching of negative numbers (MM) +" 2012 Jun 20 - Fixed a block comment highlighting bug (MM) + +" For version 5.x: Clear all syntax items +" For version 6.x: Quit when a syntax file was already loaded +if version < 600 + syntax clear +elseif exists("b:current_syntax") && b:current_syntax == "sexplib" + finish +endif + +" Sexplib is case sensitive. +syn case match + +" Comments +syn keyword sexplibTodo contained TODO FIXME XXX NOTE +syn region sexplibBlockComment matchgroup=sexplibComment start="#|" matchgroup=sexplibComment end="|#" contains=ALLBUT,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibEncl,sexplibComment +syn match sexplibSexpComment "#;" skipwhite skipempty nextgroup=sexplibQuotedAtomComment,sexplibUnquotedAtomComment,sexplibListComment,sexplibComment +syn region sexplibQuotedAtomComment start=+"+ skip=+\\\\\|\\"+ end=+"+ contained +syn match sexplibUnquotedAtomComment /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/ contained +syn region sexplibListComment matchgroup=sexplibComment start="(" matchgroup=sexplibComment end=")" contained contains=ALLBUT,sexplibEncl,sexplibString,sexplibQuotedAtom,sexplibUnquotedAtom,sexplibTodo,sexplibNumber,sexplibFloat +syn match sexplibComment ";.*" contains=sexplibTodo + +" Atoms +syn match sexplibUnquotedAtom /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*/ +syn region sexplibQuotedAtom start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn match sexplibNumber "-\=\<\d\(_\|\d\)*[l|L|n]\?\>" +syn match sexplibNumber "-\=\<0[x|X]\(\x\|_\)\+[l|L|n]\?\>" +syn match sexplibNumber "-\=\<0[o|O]\(\o\|_\)\+[l|L|n]\?\>" +syn match sexplibNumber "-\=\<0[b|B]\([01]\|_\)\+[l|L|n]\?\>" +syn match sexplibFloat "-\=\<\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>" + +" Lists +syn region sexplibEncl transparent matchgroup=sexplibEncl start="(" matchgroup=sexplibEncl end=")" contains=ALLBUT,sexplibParenErr + +" Errors +syn match sexplibUnquotedAtomErr /\([^;()" \t#|]\|#[^;()" \t|]\||[^;()" \t#]\)[^;()" \t]*\(#|\||#\)[^;()" \t]*/ +syn match sexplibParenErr ")" + +" Synchronization +syn sync minlines=50 +syn sync maxlines=500 + +" Define the default highlighting. +" For version 5.7 and earlier: only when not done already +" For version 5.8 and later: only when an item doesn't have highlighting yet +if version >= 508 || !exists("did_sexplib_syntax_inits") + if version < 508 + let did_sexplib_syntax_inits = 1 + command -nargs=+ HiLink hi link <args> + else + command -nargs=+ HiLink hi def link <args> + endif + + HiLink sexplibParenErr Error + HiLink sexplibUnquotedAtomErr Error + + HiLink sexplibComment Comment + HiLink sexplibSexpComment Comment + HiLink sexplibQuotedAtomComment Include + HiLink sexplibUnquotedAtomComment Comment + HiLink sexplibBlockComment Comment + HiLink sexplibListComment Comment + + HiLink sexplibBoolean Boolean + HiLink sexplibCharacter Character + HiLink sexplibNumber Number + HiLink sexplibFloat Float + HiLink sexplibUnquotedAtom Identifier + HiLink sexplibEncl Identifier + HiLink sexplibQuotedAtom Keyword + + HiLink sexplibTodo Todo + + HiLink sexplibEncl Keyword + + delcommand HiLink +endif + +let b:current_syntax = "sexplib" + +" vim: ts=8 diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index ae62e195a4..48a0024b00 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -1,12 +1,12 @@ " Vim syntax file " Language: shell (sh) Korn shell (ksh) bash (sh) -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int> -" Last Change: Jun 16, 2019 -" Version: 188 +" Last Change: Nov 24, 2020 +" Version: 196 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH " For options and settings, please use: :help ft-sh-syntax -" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) +" This file includes many ideas from Eric Brunet (eric.brunet@ens.fr) and heredoc fixes from Felipe Contreras " quit when a syntax file was already loaded {{{1 if exists("b:current_syntax") @@ -20,8 +20,8 @@ if getline(1) =~ '\<ksh$' elseif getline(1) =~ '\<bash$' let b:is_bash = 1 elseif getline(1) =~ '\<dash$' - let b:is_posix = 1 -elseif !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh") + let b:is_dash = 1 +elseif !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh") && !exists("g:is_dash") let s:shell = "" if executable("/bin/sh") let s:shell = resolve("/bin/sh") @@ -33,7 +33,7 @@ elseif !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix" elseif s:shell =~ 'bash$' let b:is_bash = 1 elseif s:shell =~ 'dash$' - let b:is_posix = 1 + let b:is_dash = 1 endif unlet s:shell endif @@ -45,7 +45,7 @@ endif " So, when the user sets "g:is_bash", "g:is_kornshell", " or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell, " respectively. -if !exists("b:is_kornshell") && !exists("b:is_bash") +if !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_dash") if exists("g:is_posix") && !exists("g:is_kornshell") let g:is_kornshell= g:is_posix endif @@ -59,11 +59,21 @@ if !exists("b:is_kornshell") && !exists("b:is_bash") if exists("b:is_sh") unlet b:is_sh endif + elseif exists("g:is_dash") + let b:is_dash= 1 + if exists("b:is_sh") + unlet b:is_sh + endif else let b:is_sh= 1 endif endif +" if b:is_dash, set b:is_posix too +if exists("b:is_dash") + let b:is_posix= 1 +endif + " set up default g:sh_fold_enabled {{{1 " ================================ if !exists("g:sh_fold_enabled") @@ -124,29 +134,36 @@ syn cluster shErrorList contains=shDoError,shIfError,shInError,shCaseError,shEsa if exists("b:is_kornshell") || exists("b:is_bash") syn cluster ErrorList add=shDTestError endif -syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shHereString,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor +syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shComment,shDeref,shDo,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shHereString,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement,shIf,shFor,shFunctionKey,shFunctionOne,shFunctionTwo syn cluster shArithList contains=@shArithParenList,shParenError syn cluster shCaseEsacList contains=shCaseStart,shCaseLabel,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange -syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSubBQ,shComment,shDo,shEcho,shExpr,shFor,shForPP,shHereDoc,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq +syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSubBQ,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq +if exists("b:is_kornshell") || exists("b:is_bash") + syn cluster shCaseList add=shForPP +endif syn cluster shCommandSubList contains=shAlias,shArithmetic,shCmdParenRegion,shCommandSub,shComment,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shHereString,shRedir,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable syn cluster shCurlyList contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial -syn cluster shDblQuoteList contains=shArithmetic,shCommandSub,shCommandSubBQ,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial,shSpecialDQ +" COMBAK: removing shEscape fromshDblQuoteList fails ksh04:43 +syn cluster shDblQuoteList contains=shArithmetic,shCommandSub,shCommandSubBQ,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial,shSpecialDQ syn cluster shDerefList contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPSR,shDerefPPS -syn cluster shDerefVarList contains=shDerefOff,shDerefOp,shDerefVarArray,shDerefOpError +syn cluster shDerefVarList contains=shDerefOffset,shDerefOp,shDerefVarArray,shDerefOpError syn cluster shEchoList contains=shArithmetic,shCommandSub,shCommandSubBQ,shDeref,shDerefSimple,shEscape,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote syn cluster shExprList1 contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq syn cluster shExprList2 contains=@shExprList1,@shCaseList,shTest syn cluster shFunctionList contains=@shCommandSubList,shCaseEsac,shColon,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq if exists("b:is_kornshell") || exists("b:is_bash") - syn cluster shFunctionList add=shRepeat - syn cluster shFunctionList add=shDblBrace,shDblParen + syn cluster shFunctionList add=shRepeat,shDblBrace,shDblParen,shForPP endif syn cluster shHereBeginList contains=@shCommandSubList syn cluster shHereList contains=shBeginHere,shHerePayload syn cluster shHereListDQ contains=shBeginHere,@shDblQuoteList,shHerePayload syn cluster shIdList contains=shCommandSub,shCommandSubBQ,shWrapLineOperator,shSetOption,shComment,shDeref,shDerefSimple,shHereString,shNumber,shOperator,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial,shAtExpr syn cluster shIfList contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo -syn cluster shLoopList contains=@shCaseList,@shErrorList,shCaseEsac,shConditional,shDblBrace,shExpr,shFor,shForPP,shIf,shOption,shSet,shTest,shTestOpr,shTouch +syn cluster shLoopList contains=@shCaseList,@shErrorList,shCaseEsac,shConditional,shDblBrace,shExpr,shFor,shIf,shOption,shSet,shTest,shTestOpr,shTouch +if exists("b:is_kornshell") || exists("b:is_bash") + syn cluster shLoopoList add=shForPP +endif +syn cluster shPPSLeftList contains=shAlias,shArithmetic,shCmdParenRegion,shCommandSub,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shEcho,shEscape,shExDoubleQuote,shExpr,shExSingleQuote,shHereDoc,shNumber,shOperator,shOption,shPosnParm,shHereString,shRedir,shSingleQuote,shSpecial,shStatement,shSubSh,shTest,shVariable syn cluster shPPSRightList contains=shComment,shDeref,shDerefSimple,shEscape,shPosnParm syn cluster shSubShList contains=@shCommandSubList,shCommandSubBQ,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shHereString,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator syn cluster shTestList contains=shArithmetic,shCharClass,shCommandSub,shCommandSubBQ,shCtrlSeq,shDeref,shDerefSimple,shDoubleQuote,shSpecialDQ,shExDoubleQuote,shExpr,shExSingleQuote,shNumber,shOperator,shSingleQuote,shTest,shTestOpr @@ -156,8 +173,8 @@ syn cluster shForList contains=shTestOpr,shNumber,shDerefSimple,shDeref,shComman " Echo: {{{1 " ==== " This one is needed INSIDE a CommandSub, so that `echo bla` be correct -syn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment -syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment +syn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment +syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="#"me=e-1 contains=@shEchoList skipwhite nextgroup=shQuickComment syn match shEchoQuote contained '\%(\\\\\)*\\["`'()]' " This must be after the strings, so that ... \" will be correct @@ -196,7 +213,7 @@ endif " Options: {{{1 " ==================== syn match shOption "\s\zs[-+][-_a-zA-Z#@]\+" -syn match shOption "\s\zs--[^ \t$`'"|);]\+" +syn match shOption "\s\zs--[^ \t$=`'"|);]\+" " File Redirection Highlighted As Operators: {{{1 "=========================================== @@ -244,7 +261,9 @@ syn match shCharClass contained "\[:\(backspace\|escape\|return\|xdigit\|alnum ShFoldIfDoFor syn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList ShFoldIfDoFor syn region shIf transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>" contains=@shIfList ShFoldIfDoFor syn region shFor matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn -ShFoldIfDoFor syn region shForPP matchgroup=shLoop start='\<for\>\_s*((' end='))' contains=@shForList +if exists("b:is_kornshell") || exists("b:is_bash") + ShFoldIfDoFor syn region shForPP matchgroup=shLoop start='\<for\>\_s*((' end='))' contains=@shForList +endif if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix") syn cluster shCaseList add=shRepeat @@ -292,9 +311,12 @@ endif "====== syn match shWrapLineOperator "\\$" syn region shCommandSubBQ start="`" skip="\\\\\|\\." end="`" contains=shBQComment,@shCommandSubList -"see ksh13 +"COMBAK: see ksh13:50 "syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shSingleQuote,shDoubleQuote,shComment +"COMBAK: see sh11:27 syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment +"COMBAK: see ksh13:53 +"syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' " $() and $(()): {{{1 " $(..) is not supported by sh (Bourne shell). However, apparently @@ -352,8 +374,8 @@ elseif !exists("g:sh_no_error") syn region shExDoubleQuote matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+ contains=shStringSpecial endif syn region shSingleQuote matchgroup=shQuote start=+'+ end=+'+ contains=@Spell nextgroup=shSpecialStart,shSpecialSQ -syn region shDoubleQuote matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart -syn region shDoubleQuote matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contained contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart +syn region shDoubleQuote matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\.+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart +syn region shDoubleQuote matchgroup=shQuote start=+"+ matchgroup=shSpecial skip=+\\"+ matchgroup=shQuote end=+"+ contained contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart syn match shStringSpecial "[^[:print:] \t]" contained syn match shStringSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shComment syn match shSpecialSQ "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" contained nextgroup=shBkslshSnglQuote,@shNoZSList @@ -362,8 +384,8 @@ syn match shSpecialStart "\%(\\\\\)*\\[\\"'`$()#]" contained nextgroup=shBks syn match shSpecial "^\%(\\\\\)*\\[\\"'`$()#]" syn match shSpecialNoZS contained "\%(\\\\\)*\\[\\"'`$()#]" syn match shSpecialNxt contained "\\[\\"'`$()#]" -syn region shBkslshSnglQuote contained matchgroup=shQuote start=+'+ end=+'+ contains=@Spell nextgroup=shSpecialStart -syn region shBkslshDblQuote contained matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart +"syn region shBkslshSnglQuote contained matchgroup=shQuote start=+'+ end=+'+ contains=@Spell nextgroup=shSpecialStart +"syn region shBkslshDblQuote contained matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell nextgroup=shSpecialStart " Comments: {{{1 "========== @@ -381,23 +403,23 @@ syn match shBQComment contained "#.\{-}\ze`" contains=@shCommentGroup " Here Documents: {{{1 " ========================================= -" Note : shHereDoc0[137] only had shDblQuoteList contained -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\\\=\z([^ \t|>]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<\s*\"\z([^"]\+\)\"" matchgroup=shHereDoc02 end="^\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<-\s*\z([^ \t|>]\+\)" matchgroup=shHereDoc03 end="^\s*\z1\s*$" contains=@shDblQuoteList -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*'\z([^']\+\)'" matchgroup=shHereDoc04 end="^\s*\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc01 start="<<\s*\z([^ \t|>]\+\)" matchgroup=shHereDoc01 end="^\z1\s*$" contains=@shDblQuoteList +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc02 start="<<-\s*\z([^ \t|>]\+\)" matchgroup=shHereDoc02 end="^\s*\z1\s*$" contains=@shDblQuoteList +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc03 start="<<\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc03 end="^\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc04 start="<<-\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc04 end="^\s*\z1\s*$" ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc05 start="<<\s*'\z([^']\+\)'" matchgroup=shHereDoc05 end="^\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*\"\z([^"]\+\)\"" matchgroup=shHereDoc06 end="^\s*\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\\\_$\_s*\z([^ \t'"|>]\+\)" matchgroup=shHereDoc07 end="^\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<\s*\\\_$\_s*'\z([^\t|>]\+\)'" matchgroup=shHereDoc08 end="^\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\"\z([^\t|>]\+\)\"" matchgroup=shHereDoc09 end="^\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\s*\z1\s*$" contains=@shDblQuoteList -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*'\z([^']\+\)'" matchgroup=shHereDoc12 end="^\s*\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<-\s*\\\_$\_s*\"\z([^"]\+\)\"" matchgroup=shHereDoc13 end="^\s*\z1\s*$" -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<\\\z([^ \t|>]\+\)" matchgroup=shHereDoc14 end="^\z1\s*$" contains=@shDblQuoteList -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<-\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$" contains=@shDblQuoteList -ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc16 start="<<-\s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc15 end="^\s*\z1\s*$" contains=@shDblQuoteList +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc06 start="<<-\s*'\z([^']\+\)'" matchgroup=shHereDoc06 end="^\s*\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc07 start="<<\s*\"\z([^"]\+\)\"" matchgroup=shHereDoc07 end="^\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc08 start="<<-\s*\"\z([^"]\+\)\"" matchgroup=shHereDoc08 end="^\s*\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc09 start="<<\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc09 end="^\z1\s*$" contains=@shDblQuoteList +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc10 start="<<-\s*\\\_$\_s*\z([^ \t|>]\+\)" matchgroup=shHereDoc10 end="^\s*\z1\s*$" contains=@shDblQuoteList +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc11 start="<<\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc11 end="^\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc12 start="<<-\s*\\\_$\_s*\\\z([^ \t|>]\+\)" matchgroup=shHereDoc12 end="^\s*\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc13 start="<<\s*\\\_$\_s*'\z([^']\+\)'" matchgroup=shHereDoc13 end="^\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc14 start="<<-\s*\\\_$\_s*'\z([^']\+\)'" matchgroup=shHereDoc14 end="^\s*\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc15 start="<<\s*\\\_$\_s*\"\z([^"]\+\)\"" matchgroup=shHereDoc15 end="^\z1\s*$" +ShFoldHereDoc syn region shHereDoc matchgroup=shHereDoc16 start="<<-\s*\\\_$\_s*\"\z([^"]\+\)\"" matchgroup=shHereDoc16 end="^\s*\z1\s*$" + " Here Strings: {{{1 " ============= @@ -409,7 +431,7 @@ endif " Identifiers: {{{1 "============= syn match shSetOption "\s\zs[-+][a-zA-Z0-9]\+\>" contained -syn match shVariable "\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze=" nextgroup=shVarAssign +syn match shVariable "\<\h\w*\ze=" nextgroup=shVarAssign syn match shVarAssign "=" contained nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote,shVar syn match shVar contained "\h\w*" syn region shAtExpr contained start="@(" end=")" contains=@shIdList @@ -419,6 +441,9 @@ if exists("b:is_bash") syn region shSetList oneline matchgroup=shSet start="\<\%(set\|unset\)\>[/a-zA-Z_]\@!" end="\ze[;|#)]\|$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+=" contains=@shIdList nextgroup=shComment elseif exists("b:is_kornshell") || exists("b:is_posix") syn match shSet "^\s*set\ze\s\+$" + if exists("b:is_dash") + syn region shSetList oneline matchgroup=shSet start="\<\%(local\)\>\ze[/]\@!" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList + endif syn region shSetList oneline matchgroup=shSet start="\<\(export\)\>\ze[/]\@!" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList syn region shSetList oneline matchgroup=shSet start="\<\%(set\|unset\>\)\ze[/a-zA-Z_]\@!" end="\ze[;|#)]\|$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList nextgroup=shComment else @@ -448,13 +473,13 @@ if !exists("g:sh_no_error") syn match shDerefWordError "[^}$[~]" contained endif syn match shDerefSimple "\$\%(\h\w*\|\d\)" nextgroup=@shNoZSList -syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray +syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray nextgroup=shSpecialStart syn match shDerefSimple "\$[-#*@!?]" nextgroup=@shNoZSList syn match shDerefSimple "\$\$" nextgroup=@shNoZSList -syn match shDerefSimple "\${\d}" nextgroup=@shNoZSList +syn match shDerefSimple "\${\d}" nextgroup=@shNoZSList nextgroup=shSpecialStart if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix") - syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS - syn region shDeref matchgroup=PreProc start="\${\$\$" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS + syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS,shSpecialStart + syn region shDeref matchgroup=PreProc start="\${\$\$" end="}" contains=@shDerefList nextgroup=@shSpecialNoZS,shSpecialStart endif " ksh: ${!var[*]} array index list syntax: {{{1 @@ -466,14 +491,14 @@ endif " bash: ${!prefix*} and ${#parameter}: {{{1 " ==================================== if exists("b:is_bash") - syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOff + syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOffset syn match shDerefVar contained "{\@<=!\h\w*" nextgroup=@shDerefVarList endif if exists("b:is_kornshell") syn match shDerefVar contained "{\@<=!\h\w*[[:alnum:]_.]*" nextgroup=@shDerefVarList endif -syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError +syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOffset,shDerefOpError syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp syn match shDerefVar contained "{\@<=\h\w*" nextgroup=@shDerefVarList syn match shDerefVar contained '\d' nextgroup=@shDerefVarList @@ -497,6 +522,7 @@ syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" co " bash : ${parameter^^pattern} Case modification " bash : ${parameter,pattern} Case modification " bash : ${parameter,,pattern} Case modification +" bash : ${@:start:qty} display command line arguments from start to start+qty-1 (inferred) syn cluster shDerefPatternList contains=shDerefPattern,shDerefString if !exists("g:sh_no_error") syn match shDerefOpError contained ":[[:punct:]]" @@ -517,17 +543,19 @@ syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial syn match shDerefString contained "\\["']" nextgroup=shDerefPattern -if exists("b:is_bash") - " bash : ${parameter:offset} - " bash : ${parameter:offset:length} - syn region shDerefOff contained start=':[^-=?+]' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple,shDerefEscape nextgroup=shDerefLen,shDeref,shDerefSimple - syn region shDerefOff contained start=':\s-' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple,shDerefEscape nextgroup=shDerefLen,shDeref,shDerefSimple +if exists("b:is_bash") || exists("b:is_kornshell") || exists("b:is_posix") + " bash ksh posix : ${parameter:offset} + " bash ksh posix : ${parameter:offset:length} + syn region shDerefOffset contained start=':[^-=?+]' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple,shDerefEscape nextgroup=shDerefLen,shDeref,shDerefSimple + syn region shDerefOffset contained start=':\s-' end='\ze:' end='\ze}' contains=shDeref,shDerefSimple,shDerefEscape nextgroup=shDerefLen,shDeref,shDerefSimple syn match shDerefLen contained ":[^}]\+" contains=shDeref,shDerefSimple,shArithmetic +endif +if exists("b:is_bash") " bash : ${parameter//pattern/string} " bash : ${parameter//pattern} syn match shDerefPPS contained '/\{1,2}' nextgroup=shDerefPPSleft - syn region shDerefPPSleft contained start='.' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList + syn region shDerefPPSleft contained start='.' skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp end='/' end='\ze}' end='"' nextgroup=shDerefPPSright contains=@shPPSLeftList syn region shDerefPPSright contained start='.' skip=@\%(\\\\\)\+@ end='\ze}' contains=@shPPSRightList " bash : ${parameter/#substring/replacement} @@ -670,8 +698,8 @@ if !exists("skip_sh_syntax_inits") hi def link bashSpecialVariables shShellVariables hi def link bashStatement shStatement hi def link shCharClass shSpecial - hi def link shDerefOff shDerefOp - hi def link shDerefLen shDerefOff + hi def link shDerefOffset shDerefOp + hi def link shDerefLen shDerefOffset endif if exists("b:is_kornshell") || exists("b:is_posix") hi def link kshSpecialVariables shShellVariables @@ -735,6 +763,7 @@ if !exists("skip_sh_syntax_inits") hi def link shHereDoc13 shRedir hi def link shHereDoc14 shRedir hi def link shHereDoc15 shRedir + hi def link shHereDoc16 shRedir endif " Delete shell folding commands {{{1 diff --git a/runtime/syntax/sil.vim b/runtime/syntax/sil.vim new file mode 100644 index 0000000000..43158da4a8 --- /dev/null +++ b/runtime/syntax/sil.vim @@ -0,0 +1,179 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim syntax file +" Language: sil +" +" Vim maintainer: Emir SARI <bitigchi@me.com> + +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +syn keyword silStage skipwhite nextgroup=silStages + \ sil_stage +syn keyword silStages + \ canonical + \ raw + +syn match silIdentifier skipwhite + \ /@\<[A-Za-z_0-9]\+\>/ + +syn match silConvention skipwhite + \ /$\?@convention/ +syn region silConvention contained contains=silConventions + \ start="@convention(" end=")" +syn keyword silConventions + \ block + \ c + \ method + \ objc_method + \ sil_differentiability_witness + \ thick + \ thin + \ witness_method + +syn match silFunctionType skipwhite + \ /@\(\<autoreleased\>\|\<callee_guaranteed\>\|\<callee_owned\>\|\<error\>\|\<guaranteed\>\|\<in\>\|\<in_constant\>\|\<in_guaranteed\>\|\<inout\>\|\<inout_aliasable\>\|\<noescape\>\|\<out\>\|\<owned\>\)/ +syn match silMetatypeType skipwhite + \ /@\(\<thick\>\|\<thin\>\|\<objc\>\)/ + +" TODO: handle [tail_elems sil-type * sil-operand] +syn region silAttribute contains=silAttributes + \ start="\[" end="\]" +syn keyword silAttributes contained containedin=silAttribute + \ abort + \ deinit + \ delegatingself + \ derivedself + \ derivedselfonly + \ dynamic + \ exact + \ init + \ modify + \ mutating + \ objc + \ open + \ read + \ rootself + \ stack + \ static + \ strict + \ unknown + \ unsafe + \ var + +syn keyword swiftImport import skipwhite nextgroup=swiftImportModule +syn match swiftImportModule /\<[A-Za-z_][A-Za-z_0-9]*\>/ contained nextgroup=swiftImportComponent +syn match swiftImportComponent /\.\<[A-Za-z_][A-Za-z_0-9]*\>/ contained nextgroup=swiftImportComponent + +syn region swiftComment start="/\*" end="\*/" contains=swiftComment,swiftTodo +syn region swiftLineComment start="//" end="$" contains=swiftTodo + +syn match swiftLineComment /^#!.*/ +syn match swiftTypeName /\<[A-Z][a-zA-Z_0-9]*\>/ +syn match swiftDecimal /\<[-]\?[0-9]\+\>/ +syn match swiftDecimal /\<[-+]\?[0-9]\+\>/ + +syn match swiftTypeName /\$\*\<\?[A-Z][a-zA-Z0-9_]*\>/ +syn match swiftVarName /%\<[A-z[a-z_0-9]\+\(#[0-9]\+\)\?\>/ + +syn keyword swiftKeyword break case continue default do else for if in static switch repeat return where while skipwhite + +syn keyword swiftKeyword sil internal thunk skipwhite +syn keyword swiftKeyword public hidden private shared public_external hidden_external skipwhite +syn keyword swiftKeyword getter setter allocator initializer enumelt destroyer globalaccessor objc skipwhite +syn keyword swiftKeyword alloc_global alloc_stack alloc_ref alloc_ref_dynamic alloc_box alloc_existential_box alloc_value_buffer dealloc_stack dealloc_box dealloc_existential_box dealloc_ref dealloc_partial_ref dealloc_value_buffer skipwhite +syn keyword swiftKeyword debug_value debug_value_addr skipwhite +syn keyword swiftKeyword load load_unowned store assign mark_uninitialized mark_function_escape copy_addr destroy_addr index_addr index_raw_pointer bind_memory to skipwhite +syn keyword swiftKeyword strong_retain strong_release strong_retain_unowned ref_to_unowned unowned_to_ref unowned_retain unowned_release load_weak store_unowned store_weak fix_lifetime autorelease_value set_deallocating is_unique is_escaping_closure skipwhite +syn keyword swiftKeyword function_ref integer_literal float_literal string_literal global_addr skipwhite +syn keyword swiftKeyword class_method super_method witness_method objc_method objc_super_method skipwhite +syn keyword swiftKeyword partial_apply builtin skipwhite +syn keyword swiftApplyKeyword apply try_apply skipwhite +syn keyword swiftKeyword metatype value_metatype existential_metatype skipwhite +syn keyword swiftKeyword retain_value release_value retain_value_addr release_value_addr tuple tuple_extract tuple_element_addr struct struct_extract struct_element_addr ref_element_addr skipwhite +syn keyword swiftKeyword init_enum_data_addr unchecked_enum_data unchecked_take_enum_data_addr inject_enum_addr skipwhite +syn keyword swiftKeyword init_existential_addr init_existential_value init_existential_metatype deinit_existential_addr deinit_existential_value open_existential_addr open_existential_box open_existential_box_value open_existential_metatype init_existential_ref open_existential_ref open_existential_value skipwhite +syn keyword swiftKeyword upcast address_to_pointer pointer_to_address pointer_to_thin_function unchecked_addr_cast unchecked_ref_cast unchecked_ref_cast_addr ref_to_raw_pointer ref_to_bridge_object ref_to_unmanaged unmanaged_to_ref raw_pointer_to_ref skipwhite +syn keyword swiftKeyword convert_function thick_to_objc_metatype thin_function_to_pointer objc_to_thick_metatype thin_to_thick_function unchecked_ref_bit_cast unchecked_trivial_bit_cast bridge_object_to_ref bridge_object_to_word unchecked_bitwise_cast skipwhite +syn keyword swiftKeyword objc_existential_metatype_to_object objc_metatype_to_object objc_protocol skipwhite +syn keyword swiftKeyword unconditional_checked_cast unconditional_checked_cast_addr unconditional_checked_cast_value skipwhite +syn keyword swiftKeyword cond_fail skipwhite +syn keyword swiftKeyword unreachable return throw br cond_br switch_value select_enum select_enum_addr select_value switch_enum switch_enum_addr dynamic_method_br checked_cast_br checked_cast_value_br checked_cast_addr_br skipwhite +syn keyword swiftKeyword project_box project_existential_box project_value_buffer project_block_storage init_block_storage_header copy_block mark_dependence skipwhite + +syn keyword swiftTypeDefinition class extension protocol struct typealias enum skipwhite nextgroup=swiftTypeName +syn region swiftTypeAttributes start="\[" end="\]" skipwhite contained nextgroup=swiftTypeName +syn match swiftTypeName /\<[A-Za-z_][A-Za-z_0-9\.]*\>/ contained nextgroup=swiftTypeParameters + +syn region swiftTypeParameters start="<" end=">" skipwhite contained + +syn keyword swiftFuncDefinition func skipwhite nextgroup=swiftFuncAttributes,swiftFuncName,swiftOperator +syn region swiftFuncAttributes start="\[" end="\]" skipwhite contained nextgroup=swiftFuncName,swiftOperator +syn match swiftFuncName /\<[A-Za-z_][A-Za-z_0-9]*\>/ skipwhite contained nextgroup=swiftTypeParameters +syn keyword swiftFuncKeyword subscript init destructor nextgroup=swiftTypeParameters + +syn keyword swiftVarDefinition var skipwhite nextgroup=swiftVarName +syn keyword swiftVarDefinition let skipwhite nextgroup=swiftVarName +syn match swiftVarName /\<[A-Za-z_][A-Za-z_0-9]*\>/ skipwhite contained + +syn keyword swiftDefinitionModifier static + +syn match swiftImplicitVarName /\$\<[A-Za-z_0-9]\+\>/ + +hi def link swiftImport Include +hi def link swiftImportModule Title +hi def link swiftImportComponent Identifier +hi def link swiftApplyKeyword Statement +hi def link swiftKeyword Statement +hi def link swiftTypeDefinition Define +hi def link swiftTypeName Type +hi def link swiftTypeParameters Special +hi def link swiftTypeAttributes PreProc +hi def link swiftFuncDefinition Define +hi def link swiftDefinitionModifier Define +hi def link swiftFuncName Function +hi def link swiftFuncAttributes PreProc +hi def link swiftFuncKeyword Function +hi def link swiftVarDefinition Define +hi def link swiftVarName Identifier +hi def link swiftImplicitVarName Identifier +hi def link swiftIdentifierKeyword Identifier +hi def link swiftTypeDeclaration Delimiter +hi def link swiftBoolean Boolean +hi def link swiftString String +hi def link swiftInterpolation Special +hi def link swiftComment Comment +hi def link swiftLineComment Comment +hi def link swiftDecimal Number +hi def link swiftHex Number +hi def link swiftOct Number +hi def link swiftBin Number +hi def link swiftOperator Function +hi def link swiftChar Character +hi def link swiftLabel Label +hi def link swiftNew Operator + +hi def link silStage Special +hi def link silStages Type +hi def link silConvention Special +hi def link silConventionParameter Special +hi def link silConventions Type +hi def link silIdentifier Identifier +hi def link silFunctionType Special +hi def link silMetatypeType Special +hi def link silAttribute PreProc + +let b:current_syntax = "sil" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/runtime/syntax/sm.vim b/runtime/syntax/sm.vim index 0ecc96875f..a16575c519 100644 --- a/runtime/syntax/sm.vim +++ b/runtime/syntax/sm.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: sendmail -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Oct 25, 2016 -" Version: 8 +" Version: 9 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SM if exists("b:current_syntax") finish diff --git a/runtime/syntax/sml.vim b/runtime/syntax/sml.vim index fa4524f93d..afff5304e6 100644 --- a/runtime/syntax/sml.vim +++ b/runtime/syntax/sml.vim @@ -3,13 +3,16 @@ " Filenames: *.sml *.sig " Maintainers: Markus Mottl <markus.mottl@gmail.com> " Fabrizio Zeno Cornelli <zeno@filibusta.crema.unimi.it> -" URL: http://www.ocaml.info/vim/syntax/sml.vim -" Last Change: 2006 Oct 23 - Fixed character highlighting bug (MM) -" 2002 Jun 02 - Fixed small typo (MM) -" 2001 Nov 20 - Fixed small highlighting bug with modules (MM) +" Last Change: 2019 Oct 01 - Only spell check strings & comments (Chuan Wei Foo) +" 2015 Aug 31 - Fixed opening of modules (Ramana Kumar) +" 2006 Oct 23 - Fixed character highlighting bug (MM) " quit when a syntax file was already loaded if exists("b:current_syntax") + +" Disable spell checking of syntax. +syn spell notoplevel + finish endif @@ -52,7 +55,7 @@ syn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=sm " Comments -syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo +syn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodo,@Spell syn keyword smlTodo contained TODO FIXME XXX @@ -82,7 +85,7 @@ syn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule en syn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr " "open" -syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment +syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment " "structure" - somewhat complicated stuff ;-) syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDef @@ -136,7 +139,7 @@ syn match smlModPath "\u\(\w\|'\)*\."he=e-1 syn match smlCharacter +#"\\""\|#"."\|#"\\\d\d\d"+ syn match smlCharErr +#"\\\d\d"\|#"\\\d"+ -syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell syn match smlFunDef "=>" syn match smlRefAssign ":=" @@ -149,9 +152,9 @@ syn match smlKeyChar ";" syn match smlKeyChar "\*" syn match smlKeyChar "=" -syn match smlNumber "\<-\=\d\+\>" -syn match smlNumber "\<-\=0[x|X]\x\+\>" -syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>" +syn match smlNumber "\<-\=\d\+\>" +syn match smlNumber "\<-\=0[x|X]\x\+\>" +syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>" " Synchronization syn sync minlines=20 @@ -167,49 +170,49 @@ syn sync match smlSigSync groupthere smlSig "\<end\>" " Define the default highlighting. " Only when an item doesn't have highlighting yet -hi def link smlBraceErr Error -hi def link smlBrackErr Error -hi def link smlParenErr Error +hi def link smlBraceErr Error +hi def link smlBrackErr Error +hi def link smlParenErr Error -hi def link smlCommentErr Error +hi def link smlCommentErr Error -hi def link smlEndErr Error -hi def link smlThenErr Error +hi def link smlEndErr Error +hi def link smlThenErr Error -hi def link smlCharErr Error +hi def link smlCharErr Error -hi def link smlComment Comment +hi def link smlComment Comment -hi def link smlModPath Include -hi def link smlModule Include -hi def link smlModParam1 Include -hi def link smlModType Include -hi def link smlMPRestr3 Include -hi def link smlFullMod Include +hi def link smlModPath Include +hi def link smlModule Include +hi def link smlModParam1 Include +hi def link smlModType Include +hi def link smlMPRestr3 Include +hi def link smlFullMod Include hi def link smlModTypeRestr Include -hi def link smlWith Include -hi def link smlMTDef Include +hi def link smlWith Include +hi def link smlMTDef Include hi def link smlConstructor Constant -hi def link smlModPreRHS Keyword -hi def link smlMPRestr2 Keyword -hi def link smlKeyword Keyword -hi def link smlFunDef Keyword -hi def link smlRefAssign Keyword -hi def link smlKeyChar Keyword -hi def link smlAnyVar Keyword -hi def link smlTopStop Keyword -hi def link smlOperator Keyword - -hi def link smlBoolean Boolean -hi def link smlCharacter Character -hi def link smlNumber Number -hi def link smlReal Float -hi def link smlString String -hi def link smlType Type -hi def link smlTodo Todo -hi def link smlEncl Keyword +hi def link smlModPreRHS Keyword +hi def link smlMPRestr2 Keyword +hi def link smlKeyword Keyword +hi def link smlFunDef Keyword +hi def link smlRefAssign Keyword +hi def link smlKeyChar Keyword +hi def link smlAnyVar Keyword +hi def link smlTopStop Keyword +hi def link smlOperator Keyword + +hi def link smlBoolean Boolean +hi def link smlCharacter Character +hi def link smlNumber Number +hi def link smlReal Float +hi def link smlString String +hi def link smlType Type +hi def link smlTodo Todo +hi def link smlEncl Keyword let b:current_syntax = "sml" diff --git a/runtime/syntax/spec.vim b/runtime/syntax/spec.vim index 2d2550559b..d7d5877943 100644 --- a/runtime/syntax/spec.vim +++ b/runtime/syntax/spec.vim @@ -3,7 +3,7 @@ " Language: SPEC: Build/install scripts for Linux RPM packages " Maintainer: Igor Gnatenko i.gnatenko.brain@gmail.com " Former Maintainer: Donovan Rebbechi elflord@panix.com (until March 2014) -" Last Change: 2019 May 07 +" Last Change: 2020 May 25 " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -71,7 +71,7 @@ syn keyword specMacroNameOther contained buildroot buildsubdir distribution dist syn match specMacroNameOther contained '\<\(PATCH\|SOURCE\)\d*\>' "valid _macro names from /usr/lib/rpm/macros -syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _install_langs _install_script_path _instchangelog _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _pgpbin _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _usrsrc _var _vendor +syn keyword specMacroNameLocal contained _arch _binary_payload _bindir _build _build_alias _build_cpu _builddir _build_os _buildshell _buildsubdir _build_vendor _bzip2bin _datadir _dbpath _dbpath_rebuild _defaultdocdir _docdir _excludedocs _exec_prefix _fixgroup _fixowner _fixperms _ftpport _ftpproxy _gpg_path _gzipbin _host _host_alias _host_cpu _host_os _host_vendor _httpport _httpproxy _includedir _infodir _install_langs _install_script_path _instchangelog _langpatt _lib _libdir _libexecdir _localstatedir _mandir _netsharedpath _oldincludedir _os _pgpbin _pgp_path _prefix _preScriptEnvironment _provides _rpmdir _rpmfilename _sbindir _sharedstatedir _signature _sourcedir _source_payload _specdir _srcrpmdir _sysconfdir _target _target_alias _target_cpu _target_os _target_platform _target_vendor _timecheck _tmppath _topdir _usr _unitdir _usrsrc _var _vendor "------------------------------------------------------------------------------ @@ -111,7 +111,7 @@ syn region specDescriptionArea matchgroup=specSection start='^%description' end= syn region specPackageArea matchgroup=specSection start='^%package' end='^%'me=e-1 contains=specPackageOpts,specPreAmble,specComment "%% Scripts Section %% -syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 +syn region specScriptArea matchgroup=specSection start='^%\(prep\|build\|install\|clean\|check\|pre\|postun\|preun\|post\|posttrans\)\>' skip='^%{\|^%\(define\|patch\d*\|configure\|GNUconfigure\|setup\|autosetup\|autopatch\|find_lang\|make_build\|makeinstall\|make_install\)\>' end='^%'me=e-1 contains=specSpecialVariables,specVariables,@specCommands,specVariables,shDo,shFor,shCaseEsac,specNoNumberHilite,specCommandOpts,shComment,shIf,specSpecialChar,specMacroIdentifier,specSectionMacroArea,specSectionMacroBracketArea,shOperator,shQuote1,shQuote2 "%% Changelog Section %% syn region specChangelogArea matchgroup=specSection start='^%changelog' end='^%'me=e-1 contains=specEmail,specURL,specWeekday,specMonth,specNumber,specComment,specLicense @@ -128,6 +128,8 @@ syn case match "sh-like comment stile, only valid in script part syn match shComment contained '#.*$' +syn region dnlComment matchgroup=specComment start=+%dnl+ end=+$+ + syn region shQuote1 contained matchgroup=shQuoteDelim start=+'+ skip=+\\'+ end=+'+ contains=specMacroIdentifier syn region shQuote2 contained matchgroup=shQuoteDelim start=+"+ skip=+\\"+ end=+"+ contains=specVariables,specMacroIdentifier @@ -173,6 +175,7 @@ endif "sh colors hi def link shComment Comment +hi def link dnlComment Comment hi def link shIf Statement hi def link shOperator Special hi def link shQuote1 String diff --git a/runtime/syntax/sshconfig.vim b/runtime/syntax/sshconfig.vim index 755d08e768..ae3c7dd8cc 100644 --- a/runtime/syntax/sshconfig.vim +++ b/runtime/syntax/sshconfig.vim @@ -1,12 +1,15 @@ " Vim syntax file " Language: OpenSSH client configuration file (ssh_config) " Author: David Necas (Yeti) -" Maintainer: Dominik Fischer <d dot f dot fischer at web dot de> +" Maintainer: Jakub Jelen <jakuje at gmail dot com> +" Previous Maintainer: Dominik Fischer <d dot f dot fischer at web dot de> " Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de> " Contributor: Karsten Hopp <karsten@redhat.com> " Contributor: Dean, Adam Kenneth <adam.ken.dean@hpe.com> -" Last Change: 2016 Dec 28 -" SSH Version: 7.4p1 +" Last Change: 2021 Mar 29 +" Added RemoteCommand from pull request #4809 +" Included additional keywords from Martin. +" SSH Version: 8.5p1 " " Setup @@ -130,24 +133,25 @@ syn case ignore " Keywords syn keyword sshconfigHostSect Host -syn keyword sshconfigMatch canonical exec host originalhost user localuser all +syn keyword sshconfigMatch canonical final exec host originalhost user localuser all syn keyword sshconfigKeyword AddressFamily syn keyword sshconfigKeyword AddKeysToAgent syn keyword sshconfigKeyword BatchMode syn keyword sshconfigKeyword BindAddress +syn keyword sshconfigKeyword BindInterface syn keyword sshconfigKeyword CanonicalDomains syn keyword sshconfigKeyword CanonicalizeFallbackLocal syn keyword sshconfigKeyword CanonicalizeHostname syn keyword sshconfigKeyword CanonicalizeMaxDots +syn keyword sshconfigKeyword CanonicalizePermittedCNAMEs +syn keyword sshconfigKeyword CASignatureAlgorithms syn keyword sshconfigKeyword CertificateFile syn keyword sshconfigKeyword ChallengeResponseAuthentication syn keyword sshconfigKeyword CheckHostIP -syn keyword sshconfigKeyword Cipher syn keyword sshconfigKeyword Ciphers syn keyword sshconfigKeyword ClearAllForwardings syn keyword sshconfigKeyword Compression -syn keyword sshconfigKeyword CompressionLevel syn keyword sshconfigKeyword ConnectTimeout syn keyword sshconfigKeyword ConnectionAttempts syn keyword sshconfigKeyword ControlMaster @@ -157,18 +161,13 @@ syn keyword sshconfigKeyword DynamicForward syn keyword sshconfigKeyword EnableSSHKeysign syn keyword sshconfigKeyword EscapeChar syn keyword sshconfigKeyword ExitOnForwardFailure +syn keyword sshconfigKeyword FingerprintHash syn keyword sshconfigKeyword ForwardAgent syn keyword sshconfigKeyword ForwardX11 syn keyword sshconfigKeyword ForwardX11Timeout syn keyword sshconfigKeyword ForwardX11Trusted syn keyword sshconfigKeyword GSSAPIAuthentication -syn keyword sshconfigKeyword GSSAPIClientIdentity syn keyword sshconfigKeyword GSSAPIDelegateCredentials -syn keyword sshconfigKeyword GSSAPIKeyExchange -syn keyword sshconfigKeyword GSSAPIRenewalForcesRekey -syn keyword sshconfigKeyword GSSAPIServerIdentity -syn keyword sshconfigKeyword GSSAPITrustDNS -syn keyword sshconfigKeyword GSSAPITrustDns syn keyword sshconfigKeyword GatewayPorts syn keyword sshconfigKeyword GlobalKnownHostsFile syn keyword sshconfigKeyword HashKnownHosts @@ -176,9 +175,11 @@ syn keyword sshconfigKeyword HostKeyAlgorithms syn keyword sshconfigKeyword HostKeyAlias syn keyword sshconfigKeyword HostName syn keyword sshconfigKeyword HostbasedAuthentication +syn keyword sshconfigKeyword HostbasedAcceptedAlgorithms syn keyword sshconfigKeyword HostbasedKeyTypes syn keyword sshconfigKeyword IPQoS syn keyword sshconfigKeyword IdentitiesOnly +syn keyword sshconfigKeyword IdentityAgent syn keyword sshconfigKeyword IdentityFile syn keyword sshconfigKeyword IgnoreUnknown syn keyword sshconfigKeyword Include @@ -186,9 +187,11 @@ syn keyword sshconfigKeyword IPQoS syn keyword sshconfigKeyword KbdInteractiveAuthentication syn keyword sshconfigKeyword KbdInteractiveDevices syn keyword sshconfigKeyword KexAlgorithms +syn keyword sshconfigKeyword KnownHostsCommand syn keyword sshconfigKeyword LocalCommand syn keyword sshconfigKeyword LocalForward syn keyword sshconfigKeyword LogLevel +syn keyword sshconfigKeyword LogVerbose syn keyword sshconfigKeyword MACs syn keyword sshconfigKeyword Match syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost @@ -196,36 +199,57 @@ syn keyword sshconfigKeyword NumberOfPasswordPrompts syn keyword sshconfigKeyword PKCS11Provider syn keyword sshconfigKeyword PasswordAuthentication syn keyword sshconfigKeyword PermitLocalCommand +syn keyword sshconfigKeyword PermitRemoteOpen syn keyword sshconfigKeyword Port syn keyword sshconfigKeyword PreferredAuthentications -syn keyword sshconfigKeyword Protocol syn keyword sshconfigKeyword ProxyCommand syn keyword sshconfigKeyword ProxyJump syn keyword sshconfigKeyword ProxyUseFDPass +syn keyword sshconfigKeyword PubkeyAcceptedAlgorithms syn keyword sshconfigKeyword PubkeyAcceptedKeyTypes syn keyword sshconfigKeyword PubkeyAuthentication -syn keyword sshconfigKeyword RSAAuthentication syn keyword sshconfigKeyword RekeyLimit +syn keyword sshconfigKeyword RemoteCommand syn keyword sshconfigKeyword RemoteForward syn keyword sshconfigKeyword RequestTTY -syn keyword sshconfigKeyword RhostsRSAAuthentication +syn keyword sshconfigKeyword RevokedHostKeys +syn keyword sshconfigKeyword SecurityKeyProvider syn keyword sshconfigKeyword SendEnv syn keyword sshconfigKeyword ServerAliveCountMax syn keyword sshconfigKeyword ServerAliveInterval syn keyword sshconfigKeyword SmartcardDevice +syn keyword sshconfigKeyword SetEnv +syn keyword sshconfigKeyword StreamLocalBindMask +syn keyword sshconfigKeyword StreamLocalBindUnlink syn keyword sshconfigKeyword StrictHostKeyChecking +syn keyword sshconfigKeyword SyslogFacility syn keyword sshconfigKeyword TCPKeepAlive syn keyword sshconfigKeyword Tunnel syn keyword sshconfigKeyword TunnelDevice syn keyword sshconfigKeyword UseBlacklistedKeys -syn keyword sshconfigKeyword UsePrivilegedPort +syn keyword sshconfigKeyword UpdateHostKeys syn keyword sshconfigKeyword User syn keyword sshconfigKeyword UserKnownHostsFile -syn keyword sshconfigKeyword UseRoaming syn keyword sshconfigKeyword VerifyHostKeyDNS syn keyword sshconfigKeyword VisualHostKey syn keyword sshconfigKeyword XAuthLocation +" Deprecated/ignored/remove/unsupported keywords + +syn keyword sshConfigDeprecated Cipher +syn keyword sshconfigDeprecated GSSAPIClientIdentity +syn keyword sshconfigDeprecated GSSAPIKeyExchange +syn keyword sshconfigDeprecated GSSAPIRenewalForcesRekey +syn keyword sshconfigDeprecated GSSAPIServerIdentity +syn keyword sshconfigDeprecated GSSAPITrustDNS +syn keyword sshconfigDeprecated GSSAPITrustDns +syn keyword sshconfigDeprecated Protocol +syn keyword sshconfigDeprecated RSAAuthentication +syn keyword sshconfigDeprecated RhostsRSAAuthentication +syn keyword sshconfigDeprecated CompressionLevel +syn keyword sshconfigDeprecated UseRoaming +syn keyword sshconfigDeprecated UsePrivilegedPort + " Define the default highlighting hi def link sshconfigComment Comment @@ -234,17 +258,17 @@ hi def link sshconfigHostPort sshconfigConstant hi def link sshconfigNumber sshconfigConstant hi def link sshconfigConstant Constant hi def link sshconfigYesNo sshconfigEnum -hi def link sshconfigCipher sshconfigEnum -hi def link sshconfigCiphers sshconfigEnum +hi def link sshconfigCipher sshconfigDeprecated +hi def link sshconfigCiphers sshconfigEnum hi def link sshconfigMAC sshconfigEnum hi def link sshconfigHostKeyAlgo sshconfigEnum hi def link sshconfigLogLevel sshconfigEnum hi def link sshconfigSysLogFacility sshconfigEnum hi def link sshconfigAddressFamily sshconfigEnum -hi def link sshconfigIPQoS sshconfigEnum +hi def link sshconfigIPQoS sshconfigEnum hi def link sshconfigKbdInteractive sshconfigEnum -hi def link sshconfigKexAlgo sshconfigEnum -hi def link sshconfigTunnel sshconfigEnum +hi def link sshconfigKexAlgo sshconfigEnum +hi def link sshconfigTunnel sshconfigEnum hi def link sshconfigPreferredAuth sshconfigEnum hi def link sshconfigVar sshconfigEnum hi def link sshconfigEnum Identifier @@ -252,6 +276,7 @@ hi def link sshconfigSpecial Special hi def link sshconfigKeyword Keyword hi def link sshconfigHostSect Type hi def link sshconfigMatch Type +hi def link sshconfigDeprecated Error let b:current_syntax = "sshconfig" diff --git a/runtime/syntax/sshdconfig.vim b/runtime/syntax/sshdconfig.vim index f381668d16..6b0d2af4d1 100644 --- a/runtime/syntax/sshdconfig.vim +++ b/runtime/syntax/sshdconfig.vim @@ -1,13 +1,14 @@ " Vim syntax file " Language: OpenSSH server configuration file (sshd_config) " Author: David Necas (Yeti) -" Maintainer: Dominik Fischer <d dot f dot fischer at web dot de> +" Maintainer: Jakub Jelen <jakuje at gmail dot com> +" Previous Maintainer: Dominik Fischer <d dot f dot fischer at web dot de> " Contributor: Thilo Six " Contributor: Leonard Ehrenfried <leonard.ehrenfried@web.de> " Contributor: Karsten Hopp <karsten@redhat.com> " Originally: 2009-07-09 -" Last Change: 2019-05-31 -" SSH Version: 7.9p1 +" Last Change: 2021-03-29 +" SSH Version: 8.5p1 " " Setup @@ -79,16 +80,24 @@ syn match sshdconfigMAC "\<umac-128-etm@openssh\.com\>" syn keyword sshdconfigHostKeyAlgo ssh-ed25519 syn match sshdconfigHostKeyAlgo "\<ssh-ed25519-cert-v01@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<sk-ssh-ed25519@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<sk-ssh-ed25519-cert-v01@openssh\.com\>" syn keyword sshdconfigHostKeyAlgo ssh-rsa +syn keyword sshdconfigHostKeyAlgo rsa-sha2-256 +syn keyword sshdconfigHostKeyAlgo rsa-sha2-512 syn keyword sshdconfigHostKeyAlgo ssh-dss syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp256 syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp384 syn keyword sshdconfigHostKeyAlgo ecdsa-sha2-nistp521 syn match sshdconfigHostKeyAlgo "\<ssh-rsa-cert-v01@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<rsa-sha2-256-cert-v01@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<rsa-sha2-512-cert-v01@openssh\.com\>" syn match sshdconfigHostKeyAlgo "\<ssh-dss-cert-v01@openssh\.com\>" syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>" syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>" syn match sshdconfigHostKeyAlgo "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<sk-ecdsa-sha2-nistp256@openssh\.com\>" +syn match sshdconfigHostKeyAlgo "\<sk-ecdsa-sha2-nistp256-cert-v01@openssh\.com\>" syn keyword sshdconfigRootLogin prohibit-password without-password forced-commands-only @@ -108,12 +117,17 @@ syn keyword sshdconfigIPQoS ef lowdelay throughput reliability syn keyword sshdconfigKexAlgo diffie-hellman-group1-sha1 syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha1 +syn keyword sshdconfigKexAlgo diffie-hellman-group14-sha256 +syn keyword sshdconfigKexAlgo diffie-hellman-group16-sha512 +syn keyword sshdconfigKexAlgo diffie-hellman-group18-sha512 syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha1 syn keyword sshdconfigKexAlgo diffie-hellman-group-exchange-sha256 syn keyword sshdconfigKexAlgo ecdh-sha2-nistp256 syn keyword sshdconfigKexAlgo ecdh-sha2-nistp384 syn keyword sshdconfigKexAlgo ecdh-sha2-nistp521 +syn keyword sshdconfigKexAlgo curve25519-sha256 syn match sshdconfigKexAlgo "\<curve25519-sha256@libssh\.org\>" +syn match sshdconfigKexAlgo "\<sntrup4591761x25519-sha512@tinyssh\.org\>" syn keyword sshdconfigTunnel point-to-point ethernet @@ -181,12 +195,14 @@ syn keyword sshdconfigKeyword HostCertificate syn keyword sshdconfigKeyword HostKey syn keyword sshdconfigKeyword HostKeyAgent syn keyword sshdconfigKeyword HostKeyAlgorithms +syn keyword sshdconfigKeyword HostbasedAcceptedAlgorithms syn keyword sshdconfigKeyword HostbasedAcceptedKeyTypes syn keyword sshdconfigKeyword HostbasedAuthentication syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly syn keyword sshdconfigKeyword IPQoS syn keyword sshdconfigKeyword IgnoreRhosts syn keyword sshdconfigKeyword IgnoreUserKnownHosts +syn keyword sshdconfigKeyword Include syn keyword sshdconfigKeyword KbdInteractiveAuthentication syn keyword sshdconfigKeyword KerberosAuthentication syn keyword sshdconfigKeyword KerberosGetAFSToken @@ -198,6 +214,7 @@ syn keyword sshdconfigKeyword KexAlgorithms syn keyword sshdconfigKeyword KeyRegenerationInterval syn keyword sshdconfigKeyword ListenAddress syn keyword sshdconfigKeyword LogLevel +syn keyword sshdconfigKeyword LogVerbose syn keyword sshdconfigKeyword LoginGraceTime syn keyword sshdconfigKeyword MACs syn keyword sshdconfigKeyword Match @@ -205,6 +222,8 @@ syn keyword sshdconfigKeyword MaxAuthTries syn keyword sshdconfigKeyword MaxSessions syn keyword sshdconfigKeyword MaxStartups syn keyword sshdconfigKeyword PasswordAuthentication +syn keyword sshdconfigKeyword PerSourceMaxStartups +syn keyword sshdconfigKeyword PerSourceNetBlockSize syn keyword sshdconfigKeyword PermitBlacklistedKeys syn keyword sshdconfigKeyword PermitEmptyPasswords syn keyword sshdconfigKeyword PermitListen @@ -219,13 +238,16 @@ syn keyword sshdconfigKeyword Port syn keyword sshdconfigKeyword PrintLastLog syn keyword sshdconfigKeyword PrintMotd syn keyword sshdconfigKeyword Protocol +syn keyword sshdconfigKeyword PubkeyAcceptedAlgorithms syn keyword sshdconfigKeyword PubkeyAcceptedKeyTypes syn keyword sshdconfigKeyword PubkeyAuthentication +syn keyword sshdconfigKeyword PubkeyAuthOptions syn keyword sshdconfigKeyword RSAAuthentication syn keyword sshdconfigKeyword RekeyLimit syn keyword sshdconfigKeyword RevokedKeys syn keyword sshdconfigKeyword RDomain syn keyword sshdconfigKeyword RhostsRSAAuthentication +syn keyword sshdconfigKeyword SecurityKeyProvider syn keyword sshdconfigKeyword ServerKeyBits syn keyword sshdconfigKeyword SetEnv syn keyword sshdconfigKeyword ShowPatchLevel diff --git a/runtime/syntax/sudoers.vim b/runtime/syntax/sudoers.vim index 019b0ada32..bf2d337d9e 100644 --- a/runtime/syntax/sudoers.vim +++ b/runtime/syntax/sudoers.vim @@ -1,7 +1,8 @@ " Vim syntax file " Language: sudoers(5) configuration files +" Maintainer: Eisuke Kawashima ( e.kawaschima+vim AT gmail.com ) " Previous Maintainer: Nikolai Weibull <now@bitwi.se> -" Latest Revision: 2018-08-18 +" Latest Revision: 2021 Mar 15 " Recent Changes: Support for #include and #includedir. " Added many new options (Samuel D. Leslie) @@ -26,7 +27,7 @@ syn cluster sudoersCmndSpecList contains=sudoersUserRunasBegin,sudoersPASS syn keyword sudoersTodo contained TODO FIXME XXX NOTE syn region sudoersComment display oneline start='#' end='$' contains=sudoersTodo -syn region sudoersInclude display oneline start='#\(include\|includedir\)' end='$' +syn region sudoersInclude display oneline start='[#@]\%(include\|includedir\)\>' end='$' syn keyword sudoersAlias User_Alias Runas_Alias nextgroup=sudoersUserAlias skipwhite skipnl syn keyword sudoersAlias Host_Alias nextgroup=sudoersHostAlias skipwhite skipnl @@ -201,7 +202,7 @@ syn keyword sudoersBooleanParameter contained skipwhite skipnl \ shell_noargs \ stay_setuid \ sudoedit_checkdir - \ sudoedit_fellow + \ sudoedit_follow \ syslog_pid \ targetpw \ tty_tickets diff --git a/runtime/syntax/swift.vim b/runtime/syntax/swift.vim new file mode 100644 index 0000000000..ff07be29fa --- /dev/null +++ b/runtime/syntax/swift.vim @@ -0,0 +1,286 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim syntax file +" Language: swift +" Maintainer: Joe Groff <jgroff@apple.com> +" Last Change: 2018 Jan 21 +" +" Vim maintainer: Emir SARI <bitigchi@me.com> + +if exists("b:current_syntax") + finish +endif + +let s:keepcpo = &cpo +set cpo&vim + +syn keyword swiftKeyword + \ break + \ case + \ catch + \ continue + \ default + \ defer + \ do + \ else + \ fallthrough + \ for + \ guard + \ if + \ in + \ repeat + \ return + \ switch + \ throw + \ try + \ where + \ while +syn match swiftMultiwordKeyword + \ "indirect case" + +syn keyword swiftCoreTypes + \ Any + \ AnyObject + +syn keyword swiftImport skipwhite skipempty nextgroup=swiftImportModule + \ import + +syn keyword swiftDefinitionModifier + \ convenience + \ dynamic + \ fileprivate + \ final + \ internal + \ lazy + \ nonmutating + \ open + \ override + \ prefix + \ private + \ public + \ required + \ rethrows + \ static + \ throws + \ weak + +syn keyword swiftInOutKeyword skipwhite skipempty nextgroup=swiftTypeName + \ inout + +syn keyword swiftIdentifierKeyword + \ Self + \ metatype + \ self + \ super + +syn keyword swiftFuncKeywordGeneral skipwhite skipempty nextgroup=swiftTypeParameters + \ init + +syn keyword swiftFuncKeyword + \ deinit + \ subscript + +syn keyword swiftScope + \ autoreleasepool + +syn keyword swiftMutating skipwhite skipempty nextgroup=swiftFuncDefinition + \ mutating +syn keyword swiftFuncDefinition skipwhite skipempty nextgroup=swiftTypeName,swiftOperator + \ func + +syn keyword swiftTypeDefinition skipwhite skipempty nextgroup=swiftTypeName + \ class + \ enum + \ extension + \ operator + \ precedencegroup + \ protocol + \ struct + +syn keyword swiftTypeAliasDefinition skipwhite skipempty nextgroup=swiftTypeAliasName + \ associatedtype + \ typealias + +syn match swiftMultiwordTypeDefinition skipwhite skipempty nextgroup=swiftTypeName + \ "indirect enum" + +syn keyword swiftVarDefinition skipwhite skipempty nextgroup=swiftVarName + \ let + \ var + +syn keyword swiftLabel + \ get + \ set + \ didSet + \ willSet + +syn keyword swiftBoolean + \ false + \ true + +syn keyword swiftNil + \ nil + +syn match swiftImportModule contained nextgroup=swiftImportComponent + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftImportComponent contained nextgroup=swiftImportComponent + \ /\.\<[A-Za-z_][A-Za-z_0-9]*\>/ + +syn match swiftTypeAliasName contained skipwhite skipempty nextgroup=swiftTypeAliasValue + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftTypeName contained skipwhite skipempty nextgroup=swiftTypeParameters + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>/ +syn match swiftVarName contained skipwhite skipempty nextgroup=swiftTypeDeclaration + \ /\<[A-Za-z_][A-Za-z_0-9]*\>/ +syn match swiftImplicitVarName + \ /\$\<[A-Za-z_0-9]\+\>/ + +" TypeName[Optionality]? +syn match swiftType contained skipwhite skipempty nextgroup=swiftTypeParameters + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/ +" [Type:Type] (dictionary) or [Type] (array) +syn region swiftType contained contains=swiftTypePair,swiftType + \ matchgroup=Delimiter start=/\[/ end=/\]/ +syn match swiftTypePair contained skipwhite skipempty nextgroup=swiftTypeParameters,swiftTypeDeclaration + \ /\<[A-Za-z_][A-Za-z_0-9\.]*\>[!?]\?/ +" (Type[, Type]) (tuple) +" FIXME: we should be able to use skip="," and drop swiftParamDelim +syn region swiftType contained contains=swiftType,swiftParamDelim + \ matchgroup=Delimiter start="[^@]\?(" end=")" matchgroup=NONE skip="," +syn match swiftParamDelim contained + \ /,/ +" <Generic Clause> (generics) +syn region swiftTypeParameters contained contains=swiftVarName,swiftConstraint + \ matchgroup=Delimiter start="<" end=">" matchgroup=NONE skip="," +syn keyword swiftConstraint contained + \ where + +syn match swiftTypeAliasValue skipwhite skipempty nextgroup=swiftType + \ /=/ +syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType,swiftInOutKeyword + \ /:/ +syn match swiftTypeDeclaration skipwhite skipempty nextgroup=swiftType + \ /->/ + +syn match swiftKeyword + \ /\<case\>/ +syn region swiftCaseLabelRegion + \ matchgroup=swiftKeyword start=/\<case\>/ matchgroup=Delimiter end=/:/ oneline contains=TOP +syn region swiftDefaultLabelRegion + \ matchgroup=swiftKeyword start=/\<default\>/ matchgroup=Delimiter end=/:/ oneline + +syn region swiftParenthesisRegion contains=TOP + \ matchgroup=NONE start=/(/ end=/)/ + +syn region swiftString contains=swiftInterpolationRegion + \ start=/"/ skip=/\\\\\|\\"/ end=/"/ +syn region swiftInterpolationRegion contained contains=TOP + \ matchgroup=swiftInterpolation start=/\\(/ end=/)/ +syn region swiftComment contains=swiftComment,swiftLineComment,swiftTodo + \ start="/\*" end="\*/" +syn region swiftLineComment contains=swiftComment,swiftTodo + \ start="//" end="$" + +syn match swiftDecimal + \ /[+\-]\?\<\([0-9][0-9_]*\)\([.][0-9_]*\)\?\([eE][+\-]\?[0-9][0-9_]*\)\?\>/ +syn match swiftHex + \ /[+\-]\?\<0x[0-9A-Fa-f][0-9A-Fa-f_]*\(\([.][0-9A-Fa-f_]*\)\?[pP][+\-]\?[0-9][0-9_]*\)\?\>/ +syn match swiftOct + \ /[+\-]\?\<0o[0-7][0-7_]*\>/ +syn match swiftBin + \ /[+\-]\?\<0b[01][01_]*\>/ + +syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters + \ "\.\@<!\.\.\.\@!\|[/=\-+*%<>!&|^~]\@<!\(/[/*]\@![/=\-+*%<>!&|^~]*\|*/\@![/=\-+*%<>!&|^~]*\|->\@![/=\-+*%<>!&|^~]*\|[=+%<>!&|^~][/=\-+*%<>!&|^~]*\)" +syn match swiftOperator skipwhite skipempty nextgroup=swiftTypeParameters + \ "\.\.[<.]" + +syn match swiftChar + \ /'\([^'\\]\|\\\(["'tnr0\\]\|x[0-9a-fA-F]\{2}\|u[0-9a-fA-F]\{4}\|U[0-9a-fA-F]\{8}\)\)'/ + +syn match swiftTupleIndexNumber contains=swiftDecimal + \ /\.[0-9]\+/ +syn match swiftDecimal contained + \ /[0-9]\+/ + +syn match swiftPreproc + \ /#\(\<column\>\|\<dsohandle\>\|\<file\>\|\<line\>\|\<function\>\)/ +syn match swiftPreproc + \ /^\s*#\(\<if\>\|\<else\>\|\<elseif\>\|\<endif\>\|\<error\>\|\<warning\>\)/ +syn region swiftPreprocFalse + \ start="^\s*#\<if\>\s\+\<false\>" end="^\s*#\(\<else\>\|\<elseif\>\|\<endif\>\)" + +syn match swiftAttribute + \ /@\<\w\+\>/ skipwhite skipempty nextgroup=swiftType,swiftTypeDefinition + +syn keyword swiftTodo MARK TODO FIXME contained + +syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes + \ "\<is\>" +syn match swiftCastOp skipwhite skipempty nextgroup=swiftType,swiftCoreTypes + \ "\<as\>[!?]\?" + +syn match swiftNilOps + \ "??" + +syn region swiftReservedIdentifier oneline + \ start=/`/ end=/`/ + +hi def link swiftImport Include +hi def link swiftImportModule Title +hi def link swiftImportComponent Identifier +hi def link swiftKeyword Statement +hi def link swiftCoreTypes Type +hi def link swiftMultiwordKeyword Statement +hi def link swiftTypeDefinition Define +hi def link swiftMultiwordTypeDefinition Define +hi def link swiftType Type +hi def link swiftTypePair Type +hi def link swiftTypeAliasName Identifier +hi def link swiftTypeName Function +hi def link swiftConstraint Special +hi def link swiftFuncDefinition Define +hi def link swiftDefinitionModifier Operator +hi def link swiftInOutKeyword Define +hi def link swiftFuncKeyword Function +hi def link swiftFuncKeywordGeneral Function +hi def link swiftTypeAliasDefinition Define +hi def link swiftVarDefinition Define +hi def link swiftVarName Identifier +hi def link swiftImplicitVarName Identifier +hi def link swiftIdentifierKeyword Identifier +hi def link swiftTypeAliasValue Delimiter +hi def link swiftTypeDeclaration Delimiter +hi def link swiftTypeParameters Delimiter +hi def link swiftBoolean Boolean +hi def link swiftString String +hi def link swiftInterpolation Special +hi def link swiftComment Comment +hi def link swiftLineComment Comment +hi def link swiftDecimal Number +hi def link swiftHex Number +hi def link swiftOct Number +hi def link swiftBin Number +hi def link swiftOperator Function +hi def link swiftChar Character +hi def link swiftLabel Operator +hi def link swiftMutating Statement +hi def link swiftPreproc PreCondit +hi def link swiftPreprocFalse Comment +hi def link swiftAttribute Type +hi def link swiftTodo Todo +hi def link swiftNil Constant +hi def link swiftCastOp Operator +hi def link swiftNilOps Operator +hi def link swiftScope PreProc + +let b:current_syntax = "swift" + +let &cpo = s:keepcpo +unlet s:keepcpo diff --git a/runtime/syntax/swiftgyb.vim b/runtime/syntax/swiftgyb.vim new file mode 100644 index 0000000000..566b75b2ed --- /dev/null +++ b/runtime/syntax/swiftgyb.vim @@ -0,0 +1,24 @@ +" This source file is part of the Swift.org open source project +" +" Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors +" Licensed under Apache License v2.0 with Runtime Library Exception +" +" See https://swift.org/LICENSE.txt for license information +" See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +" +" Vim syntax file +" Language: gyb on swift +" +" Vim maintainer: Emir SARI <bitigchi@me.com> + +runtime! syntax/swift.vim +unlet b:current_syntax + +syn include @Python syntax/python.vim +syn region pythonCode matchgroup=gybPythonCode start=+^ *%+ end=+$+ contains=@Python keepend +syn region pythonCode matchgroup=gybPythonCode start=+%{+ end=+}%+ contains=@Python keepend +syn match gybPythonCode /\${[^}]*}/ +hi def link gybPythonCode CursorLineNr + +let b:current_syntax = "swiftgyb" + diff --git a/runtime/syntax/syncolor.vim b/runtime/syntax/syncolor.vim index 8d0064db15..5b907a3b83 100644 --- a/runtime/syntax/syncolor.vim +++ b/runtime/syntax/syncolor.vim @@ -1,6 +1,6 @@ " Vim syntax support file " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2001 Sep 12 +" Last Change: 2020 Feb 13 " This file sets up the default methods for highlighting. " It is loaded from "synload.vim" and from Vim for ":syntax reset". @@ -43,10 +43,12 @@ if &background == "dark" else SynColor Comment term=bold cterm=NONE ctermfg=DarkBlue ctermbg=NONE gui=NONE guifg=Blue guibg=NONE SynColor Constant term=underline cterm=NONE ctermfg=DarkRed ctermbg=NONE gui=NONE guifg=Magenta guibg=NONE - SynColor Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=SlateBlue guibg=NONE + " #6a5acd is SlateBlue + SynColor Special term=bold cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#6a5acd guibg=NONE SynColor Identifier term=underline cterm=NONE ctermfg=DarkCyan ctermbg=NONE gui=NONE guifg=DarkCyan guibg=NONE SynColor Statement term=bold cterm=NONE ctermfg=Brown ctermbg=NONE gui=bold guifg=Brown guibg=NONE - SynColor PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=Purple guibg=NONE + " #6a0dad is Purple + SynColor PreProc term=underline cterm=NONE ctermfg=DarkMagenta ctermbg=NONE gui=NONE guifg=#6a0dad guibg=NONE SynColor Type term=underline cterm=NONE ctermfg=DarkGreen ctermbg=NONE gui=bold guifg=SeaGreen guibg=NONE SynColor Underlined term=underline cterm=underline ctermfg=DarkMagenta gui=underline guifg=SlateBlue SynColor Ignore term=NONE cterm=NONE ctermfg=white ctermbg=NONE gui=NONE guifg=bg guibg=NONE diff --git a/runtime/syntax/synload.vim b/runtime/syntax/synload.vim index ab918c645b..f373161c7c 100644 --- a/runtime/syntax/synload.vim +++ b/runtime/syntax/synload.vim @@ -1,6 +1,6 @@ " Vim syntax support file " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2016 Nov 04 +" Last Change: 2020 Apr 13 " This file sets up for syntax highlighting. " It is loaded from "syntax.vim" and "manual.vim". @@ -52,9 +52,11 @@ fun! s:SynSet() if s != "" " Load the syntax file(s). When there are several, separated by dots, - " load each in sequence. + " load each in sequence. Skip empty entries. for name in split(s, '\.') - exe "runtime! syntax/" . name . ".vim syntax/" . name . "/*.vim" + if !empty(name) + exe "runtime! syntax/" . name . ".vim syntax/" . name . "/*.vim" + endif endfor endif endfun diff --git a/runtime/syntax/tags.vim b/runtime/syntax/tags.vim index f34696d4b0..4c06dc1df8 100644 --- a/runtime/syntax/tags.vim +++ b/runtime/syntax/tags.vim @@ -1,7 +1,7 @@ " Language: tags -" Maintainer: Charles E. Campbell <NdrOchip@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Oct 26, 2016 -" Version: 7 +" Version: 8 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TAGS " quit when a syntax file was already loaded diff --git a/runtime/syntax/tidy.vim b/runtime/syntax/tidy.vim index 6371cb5a86..7ffda90e55 100644 --- a/runtime/syntax/tidy.vim +++ b/runtime/syntax/tidy.vim @@ -1,8 +1,9 @@ " Vim syntax file -" Language: HMTL Tidy configuration file (/etc/tidyrc ~/.tidyrc) +" Language: HMTL Tidy Configuration " Maintainer: Doug Kearns <dougkearns@gmail.com> -" Last Change: 2016 Apr 24 +" Last Change: 2020 Sep 4 +" Preamble {{{1 if exists("b:current_syntax") finish endif @@ -12,10 +13,15 @@ set cpo&vim syn iskeyword @,48-57,-,_ +" Values {{{1 +syn match tidyWordSeparator contained ",\|\s" nextgroup=tidyWord skipwhite skipnl +syn match tidyMuteIDSeparator contained ",\|\s" nextgroup=tidyMuteID skipwhite skipnl + syn case ignore syn keyword tidyBoolean contained t[rue] f[alse] y[es] n[o] 1 0 syn keyword tidyAutoBoolean contained t[rue] f[alse] y[es] n[o] 1 0 auto syn case match +syn keyword tidyCustomTags contained no blocklevel empty inline pre syn keyword tidyDoctype contained html5 omit auto strict loose transitional user syn keyword tidyEncoding contained raw ascii latin0 latin1 utf8 iso2022 mac win1252 ibm858 utf16le utf16be utf16 big5 shiftjis syn keyword tidyNewline contained LF CRLF CR @@ -24,36 +30,148 @@ syn keyword tidyRepeat contained keep-first keep-last syn keyword tidySorter contained alpha none syn region tidyString contained start=+"+ skip=+\\\\\|\\"+ end=+"+ oneline syn region tidyString contained start=+'+ skip=+\\\\\|\\'+ end=+'+ oneline -syn match tidyTags contained "\<\w\+\(\s*,\s*\w\+\)*\>" - -syn keyword tidyBooleanOption add-xml-decl add-xml-pi add-xml-space - \ anchor-as-name ascii-chars assume-xml-procins bare break-before-br - \ clean coerce-endtags decorate-inferred-ul drop-empty-paras - \ drop-empty-elements drop-font-tags drop-proprietary-attributes - \ enclose-block-text enclose-text escape-cdata escape-scripts - \ fix-backslash fix-bad-comments fix-uri force-output gdoc gnu-emacs - \ hide-comments hide-endtags indent-attributes indent-cdata - \ indent-with-tabs input-xml join-classes join-styles keep-time - \ language literal-attributes logical-emphasis lower-literals markup - \ merge-emphasis ncr numeric-entities omit-optional-tags output-html - \ output-xhtml output-xml preserve-entities punctuation-wrap quiet - \ quote-ampersand quote-marks quote-nbsp raw replace-color show-info - \ show-warnings skip-nested split strict-tags-attributes tidy-mark - \ uppercase-attributes uppercase-tags word-2000 wrap-asp - \ wrap-attributes wrap-jste wrap-php wrap-script-literals - \ wrap-sections write-back +" Tag and attribute lists +syn match tidyWord contained "\<\k\+\>:\@!" nextgroup=tidyWordSeparator skipwhite skipnl + +" Mute Message IDs {{{2 +syn keyword tidyMuteID ADDED_MISSING_CHARSET ANCHOR_DUPLICATED + \ ANCHOR_NOT_UNIQUE APOS_UNDEFINED APPLET_MISSING_ALT AREA_MISSING_ALT + \ ASCII_REQUIRES_DESCRIPTION ASSOCIATE_LABELS_EXPLICITLY + \ ASSOCIATE_LABELS_EXPLICITLY_FOR ASSOCIATE_LABELS_EXPLICITLY_ID + \ ATTRIBUTE_IS_NOT_ALLOWED ATTRIBUTE_VALUE_REPLACED + \ ATTR_VALUE_NOT_LCASE AUDIO_MISSING_TEXT_AIFF AUDIO_MISSING_TEXT_AU + \ AUDIO_MISSING_TEXT_RA AUDIO_MISSING_TEXT_RM AUDIO_MISSING_TEXT_SND + \ AUDIO_MISSING_TEXT_WAV BACKSLASH_IN_URI BAD_ATTRIBUTE_VALUE + \ BAD_ATTRIBUTE_VALUE_REPLACED BAD_CDATA_CONTENT BAD_SUMMARY_HTML5 + \ BAD_SURROGATE_LEAD BAD_SURROGATE_PAIR BAD_SURROGATE_TAIL + \ CANT_BE_NESTED COERCE_TO_ENDTAG COLOR_CONTRAST_ACTIVE_LINK + \ COLOR_CONTRAST_LINK COLOR_CONTRAST_TEXT COLOR_CONTRAST_VISITED_LINK + \ CONTENT_AFTER_BODY CUSTOM_TAG_DETECTED DATA_TABLE_MISSING_HEADERS + \ DATA_TABLE_MISSING_HEADERS_COLUMN DATA_TABLE_MISSING_HEADERS_ROW + \ DATA_TABLE_REQUIRE_MARKUP_COLUMN_HEADERS + \ DATA_TABLE_REQUIRE_MARKUP_ROW_HEADERS DISCARDING_UNEXPECTED + \ DOCTYPE_AFTER_TAGS DOCTYPE_MISSING DUPLICATE_FRAMESET + \ ELEMENT_NOT_EMPTY ELEMENT_VERS_MISMATCH_ERROR + \ ELEMENT_VERS_MISMATCH_WARN ENCODING_MISMATCH + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_APPLET + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_EMBED + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_OBJECT + \ ENSURE_PROGRAMMATIC_OBJECTS_ACCESSIBLE_SCRIPT ESCAPED_ILLEGAL_URI + \ FILE_CANT_OPEN FILE_CANT_OPEN_CFG FILE_NOT_FILE FIXED_BACKSLASH + \ FOUND_STYLE_IN_BODY FRAME_MISSING_LONGDESC FRAME_MISSING_NOFRAMES + \ FRAME_MISSING_TITLE FRAME_SRC_INVALID FRAME_TITLE_INVALID_NULL + \ FRAME_TITLE_INVALID_SPACES HEADERS_IMPROPERLY_NESTED + \ HEADER_USED_FORMAT_TEXT ID_NAME_MISMATCH ILLEGAL_NESTING + \ ILLEGAL_URI_CODEPOINT ILLEGAL_URI_REFERENCE + \ IMAGE_MAP_SERVER_SIDE_REQUIRES_CONVERSION + \ IMG_ALT_SUSPICIOUS_FILENAME IMG_ALT_SUSPICIOUS_FILE_SIZE + \ IMG_ALT_SUSPICIOUS_PLACEHOLDER IMG_ALT_SUSPICIOUS_TOO_LONG + \ IMG_BUTTON_MISSING_ALT IMG_MAP_CLIENT_MISSING_TEXT_LINKS + \ IMG_MAP_SERVER_REQUIRES_TEXT_LINKS IMG_MISSING_ALT IMG_MISSING_DLINK + \ IMG_MISSING_LONGDESC IMG_MISSING_LONGDESC_DLINK + \ INFORMATION_NOT_CONVEYED_APPLET INFORMATION_NOT_CONVEYED_IMAGE + \ INFORMATION_NOT_CONVEYED_INPUT INFORMATION_NOT_CONVEYED_OBJECT + \ INFORMATION_NOT_CONVEYED_SCRIPT INSERTING_AUTO_ATTRIBUTE + \ INSERTING_TAG INVALID_ATTRIBUTE INVALID_NCR INVALID_SGML_CHARS + \ INVALID_UTF16 INVALID_UTF8 INVALID_XML_ID JOINING_ATTRIBUTE + \ LANGUAGE_INVALID LANGUAGE_NOT_IDENTIFIED + \ LAYOUT_TABLES_LINEARIZE_PROPERLY LAYOUT_TABLE_INVALID_MARKUP + \ LINK_TEXT_MISSING LINK_TEXT_NOT_MEANINGFUL + \ LINK_TEXT_NOT_MEANINGFUL_CLICK_HERE LINK_TEXT_TOO_LONG + \ LIST_USAGE_INVALID_LI LIST_USAGE_INVALID_OL LIST_USAGE_INVALID_UL + \ MALFORMED_COMMENT MALFORMED_COMMENT_DROPPING MALFORMED_COMMENT_EOS + \ MALFORMED_COMMENT_WARN MALFORMED_DOCTYPE METADATA_MISSING + \ METADATA_MISSING_REDIRECT_AUTOREFRESH MISMATCHED_ATTRIBUTE_ERROR + \ MISMATCHED_ATTRIBUTE_WARN MISSING_ATTRIBUTE MISSING_ATTR_VALUE + \ MISSING_DOCTYPE MISSING_ENDTAG_BEFORE MISSING_ENDTAG_FOR + \ MISSING_ENDTAG_OPTIONAL MISSING_IMAGEMAP MISSING_QUOTEMARK + \ MISSING_QUOTEMARK_OPEN MISSING_SEMICOLON MISSING_SEMICOLON_NCR + \ MISSING_STARTTAG MISSING_TITLE_ELEMENT MOVED_STYLE_TO_HEAD + \ MULTIMEDIA_REQUIRES_TEXT NESTED_EMPHASIS NESTED_QUOTATION + \ NEWLINE_IN_URI NEW_WINDOWS_REQUIRE_WARNING_BLANK + \ NEW_WINDOWS_REQUIRE_WARNING_NEW NOFRAMES_CONTENT + \ NOFRAMES_INVALID_CONTENT NOFRAMES_INVALID_LINK + \ NOFRAMES_INVALID_NO_VALUE NON_MATCHING_ENDTAG OBJECT_MISSING_ALT + \ OBSOLETE_ELEMENT OPTION_REMOVED OPTION_REMOVED_APPLIED + \ OPTION_REMOVED_UNAPPLIED POTENTIAL_HEADER_BOLD + \ POTENTIAL_HEADER_ITALICS POTENTIAL_HEADER_UNDERLINE + \ PREVIOUS_LOCATION PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_APPLET + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_EMBED + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_OBJECT + \ PROGRAMMATIC_OBJECTS_REQUIRE_TESTING_SCRIPT PROPRIETARY_ATTRIBUTE + \ PROPRIETARY_ATTR_VALUE PROPRIETARY_ELEMENT REMOVED_HTML5 + \ REMOVE_AUTO_REDIRECT REMOVE_AUTO_REFRESH REMOVE_BLINK_MARQUEE + \ REMOVE_FLICKER_ANIMATED_GIF REMOVE_FLICKER_APPLET + \ REMOVE_FLICKER_EMBED REMOVE_FLICKER_OBJECT REMOVE_FLICKER_SCRIPT + \ REPEATED_ATTRIBUTE REPLACE_DEPRECATED_HTML_APPLET + \ REPLACE_DEPRECATED_HTML_BASEFONT REPLACE_DEPRECATED_HTML_CENTER + \ REPLACE_DEPRECATED_HTML_DIR REPLACE_DEPRECATED_HTML_FONT + \ REPLACE_DEPRECATED_HTML_ISINDEX REPLACE_DEPRECATED_HTML_MENU + \ REPLACE_DEPRECATED_HTML_S REPLACE_DEPRECATED_HTML_STRIKE + \ REPLACE_DEPRECATED_HTML_U REPLACING_ELEMENT REPLACING_UNEX_ELEMENT + \ SCRIPT_MISSING_NOSCRIPT SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_CLICK + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_DOWN + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_MOVE + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OUT + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_OVER + \ SCRIPT_NOT_KEYBOARD_ACCESSIBLE_ON_MOUSE_UP SKIPOVER_ASCII_ART + \ SPACE_PRECEDING_XMLDECL STRING_ARGUMENT_BAD STRING_CONTENT_LOOKS + \ STRING_DOCTYPE_GIVEN STRING_MISSING_MALFORMED STRING_MUTING_TYPE + \ STRING_NO_SYSID STRING_UNKNOWN_OPTION + \ STYLESHEETS_REQUIRE_TESTING_LINK + \ STYLESHEETS_REQUIRE_TESTING_STYLE_ATTR + \ STYLESHEETS_REQUIRE_TESTING_STYLE_ELEMENT + \ STYLE_SHEET_CONTROL_PRESENTATION SUSPECTED_MISSING_QUOTE + \ TABLE_MAY_REQUIRE_HEADER_ABBR TABLE_MAY_REQUIRE_HEADER_ABBR_NULL + \ TABLE_MAY_REQUIRE_HEADER_ABBR_SPACES TABLE_MISSING_CAPTION + \ TABLE_MISSING_SUMMARY TABLE_SUMMARY_INVALID_NULL + \ TABLE_SUMMARY_INVALID_PLACEHOLDER TABLE_SUMMARY_INVALID_SPACES + \ TAG_NOT_ALLOWED_IN TEXT_EQUIVALENTS_REQUIRE_UPDATING_APPLET + \ TEXT_EQUIVALENTS_REQUIRE_UPDATING_OBJECT + \ TEXT_EQUIVALENTS_REQUIRE_UPDATING_SCRIPT TOO_MANY_ELEMENTS + \ TOO_MANY_ELEMENTS_IN TRIM_EMPTY_ELEMENT UNESCAPED_AMPERSAND + \ UNEXPECTED_ENDTAG UNEXPECTED_ENDTAG_ERR UNEXPECTED_ENDTAG_IN + \ UNEXPECTED_END_OF_FILE UNEXPECTED_END_OF_FILE_ATTR + \ UNEXPECTED_EQUALSIGN UNEXPECTED_GT UNEXPECTED_QUOTEMARK + \ UNKNOWN_ELEMENT UNKNOWN_ELEMENT_LOOKS_CUSTOM UNKNOWN_ENTITY + \ USING_BR_INPLACE_OF VENDOR_SPECIFIC_CHARS WHITE_IN_URI + \ XML_DECLARATION_DETECTED XML_ID_SYNTAX + \ contained nextgroup=tidyMuteIDSeparator skipwhite skipnl + +" Options {{{1 +syn keyword tidyCustomTagsOption custom-tags contained nextgroup=tidyCustomTagsDelimiter +syn match tidyCustomTagsDelimiter ":" nextgroup=tidyCustomTags contained skipwhite + +syn keyword tidyBooleanOption add-meta-charset add-xml-decl + \ add-xml-pi add-xml-space anchor-as-name ascii-chars + \ assume-xml-procins bare break-before-br clean coerce-endtags + \ decorate-inferred-ul drop-empty-paras drop-empty-elements + \ drop-font-tags drop-proprietary-attributes enclose-block-text + \ enclose-text escape-cdata escape-scripts fix-backslash + \ fix-style-tags fix-uri force-output gdoc gnu-emacs hide-comments + \ hide-endtags indent-attributes indent-cdata indent-with-tabs + \ input-xml join-classes join-styles keep-tabs keep-time language + \ literal-attributes logical-emphasis lower-literals markup + \ merge-emphasis mute-id ncr numeric-entities omit-optional-tags + \ output-html output-xhtml output-xml preserve-entities + \ punctuation-wrap quiet quote-ampersand quote-marks quote-nbsp raw + \ replace-color show-filename show-info show-meta-change show-warnings + \ skip-nested split strict-tags-attributes tidy-mark + \ uppercase-attributes uppercase-tags warn-proprietary-attributes + \ word-2000 wrap-asp wrap-attributes wrap-jste wrap-php + \ wrap-script-literals wrap-sections write-back \ contained nextgroup=tidyBooleanDelimiter syn match tidyBooleanDelimiter ":" nextgroup=tidyBoolean contained skipwhite -syn keyword tidyAutoBooleanOption indent merge-divs merge-spans output-bom show-body-only vertical-space contained nextgroup=tidyAutoBooleanDelimiter +syn keyword tidyAutoBooleanOption fix-bad-comments indent merge-divs merge-spans output-bom show-body-only vertical-space contained nextgroup=tidyAutoBooleanDelimiter syn match tidyAutoBooleanDelimiter ":" nextgroup=tidyAutoBoolean contained skipwhite syn keyword tidyCSSSelectorOption css-prefix contained nextgroup=tidyCSSSelectorDelimiter syn match tidyCSSSelectorDelimiter ":" nextgroup=tidyCSSSelector contained skipwhite syn keyword tidyDoctypeOption doctype contained nextgroup=tidyDoctypeDelimiter -syn match tidyDoctypeDelimiter ":" nextgroup=tidyDoctype contained skipwhite +syn match tidyDoctypeDelimiter ":" nextgroup=tidyDoctype,tidyString contained skipwhite syn keyword tidyEncodingOption char-encoding input-encoding output-encoding contained nextgroup=tidyEncodingDelimiter syn match tidyEncodingDelimiter ":" nextgroup=tidyEncoding contained skipwhite @@ -67,8 +185,11 @@ syn match tidyNameDelimiter ":" nextgroup=tidyName contained skipwhite syn keyword tidyNewlineOption newline contained nextgroup=tidyNewlineDelimiter syn match tidyNewlineDelimiter ":" nextgroup=tidyNewline contained skipwhite +syn keyword tidyAttributesOption priority-attributes contained nextgroup=tidyAttributesDelimiter +syn match tidyAttributesDelimiter ":" nextgroup=tidyWord contained skipwhite + syn keyword tidyTagsOption new-blocklevel-tags new-empty-tags new-inline-tags new-pre-tags contained nextgroup=tidyTagsDelimiter -syn match tidyTagsDelimiter ":" nextgroup=tidyTags contained skipwhite +syn match tidyTagsDelimiter ":" nextgroup=tidyWord contained skipwhite syn keyword tidyRepeatOption repeated-attributes contained nextgroup=tidyRepeatDelimiter syn match tidyRepeatDelimiter ":" nextgroup=tidyRepeat contained skipwhite @@ -79,57 +200,77 @@ syn match tidySorterDelimiter ":" nextgroup=tidySorter contained skipwhite syn keyword tidyStringOption alt-text error-file gnu-emacs-file output-file contained nextgroup=tidyStringDelimiter syn match tidyStringDelimiter ":" nextgroup=tidyString contained skipwhite +syn keyword tidyMuteOption mute contained nextgroup=tidyMuteDelimiter +syn match tidyMuteDelimiter ":" nextgroup=tidyMuteID contained skipwhite + syn cluster tidyOptions contains=tidy.*Option +" Option line anchor {{{1 syn match tidyStart "^" nextgroup=@tidyOptions +" Long standing bug - option lines (except the first) with leading whitespace +" are silently ignored. +syn match tidyErrorStart '^\s\+\ze\S' +" Comments {{{1 syn match tidyComment "^\s*//.*$" contains=tidyTodo syn match tidyComment "^\s*#.*$" contains=tidyTodo syn keyword tidyTodo TODO NOTE FIXME XXX contained +" Default highlighting {{{1 +hi def link tidyAttributesOption Identifier hi def link tidyAutoBooleanOption Identifier hi def link tidyBooleanOption Identifier hi def link tidyCSSSelectorOption Identifier +hi def link tidyCustomTagsOption Identifier hi def link tidyDoctypeOption Identifier hi def link tidyEncodingOption Identifier hi def link tidyIntegerOption Identifier +hi def link tidyMuteOption Identifier hi def link tidyNameOption Identifier hi def link tidyNewlineOption Identifier -hi def link tidyTagsOption Identifier hi def link tidyRepeatOption Identifier hi def link tidySorterOption Identifier hi def link tidyStringOption Identifier +hi def link tidyTagsOption Identifier +hi def link tidyAttributesDelimiter Special hi def link tidyAutoBooleanDelimiter Special hi def link tidyBooleanDelimiter Special hi def link tidyCSSSelectorDelimiter Special +hi def link tidyCustomTagsDelimiter Special hi def link tidyDoctypeDelimiter Special hi def link tidyEncodingDelimiter Special hi def link tidyIntegerDelimiter Special +hi def link tidyMuteDelimiter Special hi def link tidyNameDelimiter Special hi def link tidyNewlineDelimiter Special -hi def link tidyTagsDelimiter Special hi def link tidyRepeatDelimiter Special hi def link tidySorterDelimiter Special hi def link tidyStringDelimiter Special +hi def link tidyTagsDelimiter Special hi def link tidyAutoBoolean Boolean hi def link tidyBoolean Boolean +hi def link tidyCustomTags Constant hi def link tidyDoctype Constant hi def link tidyEncoding Constant +hi def link tidyMuteID Constant hi def link tidyNewline Constant -hi def link tidyTags Constant hi def link tidyNumber Number hi def link tidyRepeat Constant hi def link tidySorter Constant hi def link tidyString String +hi def link tidyWord Constant hi def link tidyComment Comment hi def link tidyTodo Todo +hi def link tidyErrorStart Error + +" Postscript {{{1 let b:current_syntax = "tidy" let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 +" vim: ts=8 fdm=marker diff --git a/runtime/syntax/tilde.vim b/runtime/syntax/tilde.vim index 3fdebf1e2e..d2a3360d24 100644 --- a/runtime/syntax/tilde.vim +++ b/runtime/syntax/tilde.vim @@ -1,7 +1,7 @@ " Vim syntax file " This file works only for Vim6.x " Language: Tilde -" Maintainer: Tobias Rundström <tobi@tildesoftware.net> +" Maintainer: Tobias Rundström <tobi@tildesoftware.net> " URL: http://www.tildesoftware.net " CVS: $Id: tilde.vim,v 1.1 2004/06/13 19:31:51 vimboss Exp $ diff --git a/runtime/syntax/tmux.vim b/runtime/syntax/tmux.vim index d32016e566..d5419982ad 100644 --- a/runtime/syntax/tmux.vim +++ b/runtime/syntax/tmux.vim @@ -1,5 +1,5 @@ " Language: tmux(1) configuration file -" Version: 2.9a (git-0d64531f) +" Version: 3.0 (git-48cbbb87) " URL: https://github.com/ericpruitt/tmux.vim/ " Maintainer: Eric Pruitt <eric.pruitt@gmail.com> " License: 2-Clause BSD (http://opensource.org/licenses/BSD-2-Clause) @@ -28,6 +28,7 @@ syn match tmuxNumber /\<\d\+\>/ display syn match tmuxFlags /\s-\a\+/ display syn match tmuxVariable /\w\+=/ display syn match tmuxVariableExpansion /\${\=\w\+}\=/ display +syn match tmuxControl /%\(if\|elif\|else\|endif\)/ syn region tmuxComment start=/#/ skip=/\\\@<!\\$/ end=/$/ contains=tmuxTodo @@ -43,6 +44,7 @@ hi def link tmuxFormatString Identifier hi def link tmuxAction Boolean hi def link tmuxBoolean Boolean hi def link tmuxCommands Keyword +hi def link tmuxControl Keyword hi def link tmuxComment Comment hi def link tmuxKey Special hi def link tmuxNumber Number @@ -62,29 +64,29 @@ for s:i in range(0, 255) endfor syn keyword tmuxOptions -\ buffer-limit command-alias default-terminal escape-time exit-empty -\ activity-action assume-paste-time base-index bell-action default-command -\ default-shell default-size destroy-unattached detach-on-destroy -\ display-panes-active-colour display-panes-colour display-panes-time -\ display-time exit-unattached focus-events history-file history-limit -\ key-table lock-after-time lock-command message-command-style message-limit -\ message-style mouse aggressive-resize allow-rename alternate-screen -\ automatic-rename automatic-rename-format clock-mode-colour -\ clock-mode-style main-pane-height main-pane-width mode-keys mode-style -\ monitor-activity monitor-bell monitor-silence other-pane-height -\ other-pane-width pane-active-border-style pane-base-index -\ pane-border-format pane-border-status pane-border-style prefix prefix2 -\ remain-on-exit renumber-windows repeat-time set-clipboard set-titles -\ set-titles-string silence-action status status-bg status-fg status-format -\ status-interval status-justify status-keys status-left status-left-length -\ status-left-style status-position status-right status-right-length -\ status-right-style status-style synchronize-panes terminal-overrides -\ update-environment user-keys visual-activity visual-bell visual-silence -\ window-active-style window-size window-status-activity-style -\ window-status-bell-style window-status-current-format -\ window-status-current-style window-status-format window-status-last-style -\ window-status-separator window-status-style window-style word-separators -\ wrap-search xterm-keys +\ backspace buffer-limit command-alias default-terminal escape-time +\ exit-empty activity-action assume-paste-time base-index bell-action +\ default-command default-shell default-size destroy-unattached +\ detach-on-destroy display-panes-active-colour display-panes-colour +\ display-panes-time display-time exit-unattached focus-events history-file +\ history-limit key-table lock-after-time lock-command message-command-style +\ message-limit message-style aggressive-resize allow-rename +\ alternate-screen automatic-rename automatic-rename-format +\ clock-mode-colour clock-mode-style main-pane-height main-pane-width +\ mode-keys mode-style monitor-activity monitor-bell monitor-silence mouse +\ other-pane-height other-pane-width pane-active-border-style +\ pane-base-index pane-border-format pane-border-status pane-border-style +\ prefix prefix2 remain-on-exit renumber-windows repeat-time set-clipboard +\ set-titles set-titles-string silence-action status status-bg status-fg +\ status-format status-interval status-justify status-keys status-left +\ status-left-length status-left-style status-position status-right +\ status-right-length status-right-style status-style synchronize-panes +\ terminal-overrides update-environment user-keys visual-activity +\ visual-bell visual-silence window-active-style window-size +\ window-status-activity-style window-status-bell-style +\ window-status-current-format window-status-current-style +\ window-status-format window-status-last-style window-status-separator +\ window-status-style window-style word-separators wrap-search xterm-keys syn keyword tmuxCommands \ attach attach-session bind bind-key break-pane breakp capture-pane diff --git a/runtime/syntax/typescriptcommon.vim b/runtime/syntax/typescriptcommon.vim index ff53168329..4074f04a35 100644 --- a/runtime/syntax/typescriptcommon.vim +++ b/runtime/syntax/typescriptcommon.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: TypeScript and TypeScriptReact " Maintainer: Bram Moolenaar, Herrington Darkholme -" Last Change: 2019 Nov 30 +" Last Change: 2020 Oct 27 " Based On: Herrington Darkholme's yats.vim " Changes: See https:github.com/HerringtonDarkholme/yats.vim " Credits: See yats.vim on github @@ -21,15 +21,14 @@ if main_syntax == 'typescript' || main_syntax == 'typescriptreact' setlocal iskeyword+=$ " syntax cluster htmlJavaScript contains=TOP endif +" For private field added from TypeScript 3.8 +setlocal iskeyword+=# " lowest priority on least used feature syntax match typescriptLabel /[a-zA-Z_$]\k*:/he=e-1 contains=typescriptReserved nextgroup=@typescriptStatement skipwhite skipempty " other keywords like return,case,yield uses containedin syntax region typescriptBlock matchgroup=typescriptBraces start=/{/ end=/}/ contains=@typescriptStatement,@typescriptComments fold - - -"runtime syntax/basic/identifiers.vim syntax cluster afterIdentifier contains= \ typescriptDotNotation, \ typescriptFuncCallArg, @@ -60,7 +59,56 @@ syntax region typescriptFuncCallArg contained matchgroup=typescriptPa syntax region typescriptEventFuncCallArg contained matchgroup=typescriptParens start=/(/ end=/)/ contains=@typescriptEventExpression syntax region typescriptEventString contained start=/\z(["']\)/ skip=/\\\\\|\\\z1\|\\\n/ end=/\z1\|$/ contains=typescriptASCII,@events -"runtime syntax/basic/literal.vim +syntax region typescriptDestructureString + \ start=/\z(["']\)/ skip=/\\\\\|\\\z1\|\\\n/ end=/\z1\|$/ + \ contains=typescriptASCII + \ nextgroup=typescriptDestructureAs + \ contained skipwhite skipempty + +syntax cluster typescriptVariableDeclarations + \ contains=typescriptVariableDeclaration,@typescriptDestructures + +syntax match typescriptVariableDeclaration /[A-Za-z_$]\k*/ + \ nextgroup=typescriptTypeAnnotation,typescriptAssign + \ contained skipwhite skipempty + +syntax cluster typescriptDestructureVariables contains= + \ typescriptRestOrSpread, + \ typescriptDestructureComma, + \ typescriptDestructureLabel, + \ typescriptDestructureVariable, + \ @typescriptDestructures + +syntax match typescriptDestructureVariable /[A-Za-z_$]\k*/ contained + \ nextgroup=typescriptDefaultParam + \ contained skipwhite skipempty + +syntax match typescriptDestructureLabel /[A-Za-z_$]\k*\ze\_s*:/ + \ nextgroup=typescriptDestructureAs + \ contained skipwhite skipempty + +syntax match typescriptDestructureAs /:/ + \ nextgroup=typescriptDestructureVariable,@typescriptDestructures + \ contained skipwhite skipempty + +syntax match typescriptDestructureComma /,/ contained + +syntax cluster typescriptDestructures contains= + \ typescriptArrayDestructure, + \ typescriptObjectDestructure + +syntax region typescriptArrayDestructure matchgroup=typescriptBraces + \ start=/\[/ end=/]/ + \ contains=@typescriptDestructureVariables,@typescriptComments + \ nextgroup=typescriptTypeAnnotation,typescriptAssign + \ transparent contained skipwhite skipempty fold + +syntax region typescriptObjectDestructure matchgroup=typescriptBraces + \ start=/{/ end=/}/ + \ contains=typescriptDestructureString,@typescriptDestructureVariables,@typescriptComments + \ nextgroup=typescriptTypeAnnotation,typescriptAssign + \ transparent contained skipwhite skipempty fold + "Syntax in the JavaScript code " String @@ -77,15 +125,15 @@ syntax region typescriptString \ contains=typescriptSpecial,@Spell \ extend -syntax match typescriptSpecial contained "\v\\%(x\x\x|u%(\x{4}|\{\x{4,5}})|c\u|.)" +syntax match typescriptSpecial contained "\v\\%(x\x\x|u%(\x{4}|\{\x{1,6}})|c\u|.)" " From vim runtime " <https://github.com/vim/vim/blob/master/runtime/syntax/javascript.vim#L48> -syntax region typescriptRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuy]\{0,5\}\s*$+ end=+/[gimuy]\{0,5\}\s*[;.,)\]}]+me=e-1 nextgroup=typescriptDotNotation oneline +syntax region typescriptRegexpString start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gimuy]\{0,5\}\s*$+ end=+/[gimuy]\{0,5\}\s*[;.,)\]}:]+me=e-1 nextgroup=typescriptDotNotation oneline syntax region typescriptTemplate \ start=/`/ skip=/\\\\\|\\`\|\n/ end=/`\|$/ - \ contains=typescriptTemplateSubstitution + \ contains=typescriptTemplateSubstitution,typescriptSpecial,@Spell \ nextgroup=@typescriptSymbols \ skipwhite skipempty @@ -100,18 +148,16 @@ syntax region typescriptArray matchgroup=typescriptBraces syntax match typescriptNumber /\<0[bB][01][01_]*\>/ nextgroup=@typescriptSymbols skipwhite skipempty syntax match typescriptNumber /\<0[oO][0-7][0-7_]*\>/ nextgroup=@typescriptSymbols skipwhite skipempty syntax match typescriptNumber /\<0[xX][0-9a-fA-F][0-9a-fA-F_]*\>/ nextgroup=@typescriptSymbols skipwhite skipempty -syntax match typescriptNumber /\d[0-9_]*\.\d[0-9_]*\|\d[0-9_]*\|\.\d[0-9]*/ - \ nextgroup=typescriptExponent,@typescriptSymbols skipwhite skipempty -syntax match typescriptExponent /[eE][+-]\=\d[0-9]*\>/ - \ nextgroup=@typescriptSymbols skipwhite skipempty contained +syntax match typescriptNumber /\<\%(\d[0-9_]*\%(\.\d[0-9_]*\)\=\|\.\d[0-9_]*\)\%([eE][+-]\=\d[0-9_]*\)\=\>/ + \ nextgroup=typescriptSymbols skipwhite skipempty - -" runtime syntax/basic/object.vim syntax region typescriptObjectLiteral matchgroup=typescriptBraces \ start=/{/ end=/}/ - \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName + \ contains=@typescriptComments,typescriptObjectLabel,typescriptStringProperty,typescriptComputedPropertyName,typescriptObjectAsyncKeyword \ fold contained +syntax keyword typescriptObjectAsyncKeyword async contained + syntax match typescriptObjectLabel contained /\k\+\_s*/ \ nextgroup=typescriptObjectColon,@typescriptCallImpl \ skipwhite skipempty @@ -136,7 +182,6 @@ syntax match typescriptObjectSpread /\.\.\./ contained containedin=typescriptObj syntax match typescriptObjectColon contained /:/ nextgroup=@typescriptValue skipwhite skipempty -"runtime syntax/basic/symbols.vim " + - ^ ~ syntax match typescriptUnaryOp /[+\-~!]/ \ nextgroup=@typescriptValue @@ -153,10 +198,12 @@ syntax match typescriptBinaryOp contained /===\?/ nextgroup=@typescriptValue s syntax match typescriptBinaryOp contained />\(>>=\|>>\|>=\|>\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty " 4: <<=, <<, <=, < syntax match typescriptBinaryOp contained /<\(<=\|<\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty -" 3: ||, |=, | -syntax match typescriptBinaryOp contained /|\(|\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty -" 3: &&, &=, & -syntax match typescriptBinaryOp contained /&\(&\|=\)\?/ nextgroup=@typescriptValue skipwhite skipempty +" 3: ||, |=, |, ||= +syntax match typescriptBinaryOp contained /||\?=\?/ nextgroup=@typescriptValue skipwhite skipempty +" 4: &&, &=, &, &&= +syntax match typescriptBinaryOp contained /&&\?=\?/ nextgroup=@typescriptValue skipwhite skipempty +" 2: ??, ??= +syntax match typescriptBinaryOp contained /??=\?/ nextgroup=@typescriptValue skipwhite skipempty " 2: *=, * syntax match typescriptBinaryOp contained /\*=\?/ nextgroup=@typescriptValue skipwhite skipempty " 2: %=, % @@ -177,11 +224,18 @@ syntax match typescriptBinaryOp contained /\*\*=\?/ nextgroup=@typescriptValue syntax cluster typescriptSymbols contains=typescriptBinaryOp,typescriptKeywordOp,typescriptTernary,typescriptAssign,typescriptCastKeyword " runtime syntax/basic/reserved.vim - -"runtime syntax/basic/keyword.vim "Import -syntax keyword typescriptImport from as import +syntax keyword typescriptImport from as +syntax keyword typescriptImport import + \ nextgroup=typescriptImportType + \ skipwhite +syntax keyword typescriptImportType type + \ contained syntax keyword typescriptExport export + \ nextgroup=typescriptExportType + \ skipwhite +syntax match typescriptExportType /\<type\s*{\@=/ + \ contained skipwhite skipempty skipnl syntax keyword typescriptModule namespace module "this @@ -199,16 +253,12 @@ syntax keyword typescriptIdentifier arguments this super \ nextgroup=@afterIdentifier syntax keyword typescriptVariable let var - \ nextgroup=typescriptVariableDeclaration - \ skipwhite skipempty skipnl + \ nextgroup=@typescriptVariableDeclarations + \ skipwhite skipempty syntax keyword typescriptVariable const - \ nextgroup=typescriptEnum,typescriptVariableDeclaration - \ skipwhite - -syntax match typescriptVariableDeclaration /[A-Za-z_$]\k*/ - \ nextgroup=typescriptTypeAnnotation,typescriptAssign - \ contained skipwhite skipempty skipnl + \ nextgroup=typescriptEnum,@typescriptVariableDeclarations + \ skipwhite skipempty syntax region typescriptEnum matchgroup=typescriptEnumKeyword start=/enum / end=/\ze{/ \ nextgroup=typescriptBlock @@ -271,7 +321,6 @@ syntax cluster typescriptAmbients contains= \ typescriptEnumKeyword,typescriptEnum, \ typescriptModule -"runtime syntax/basic/doc.vim "Syntax coloring for Node.js shebang line syntax match shellbang "^#!.*node\>" syntax match shellbang "^#!.*iojs\>" @@ -279,8 +328,9 @@ syntax match shellbang "^#!.*iojs\>" "JavaScript comments syntax keyword typescriptCommentTodo TODO FIXME XXX TBD +syntax match typescriptMagicComment "@ts-\%(ignore\|expect-error\)\>" syntax match typescriptLineComment "//.*" - \ contains=@Spell,typescriptCommentTodo,typescriptRef + \ contains=@Spell,typescriptCommentTodo,typescriptRef,typescriptMagicComment syntax region typescriptComment \ start="/\*" end="\*/" \ contains=@Spell,typescriptCommentTodo extend @@ -349,24 +399,27 @@ syntax region typescriptDocLinkTag contained matchgroup=typescriptDo syntax cluster typescriptDocs contains=typescriptDocParamType,typescriptDocNamedParamType,typescriptDocParam -if main_syntax == "typescript" +if exists("main_syntax") && main_syntax == "typescript" syntax sync clear syntax sync ccomment typescriptComment minlines=200 endif syntax case match -"runtime syntax/basic/type.vim " Types syntax match typescriptOptionalMark /?/ contained +syntax cluster typescriptTypeParameterCluster contains= + \ typescriptTypeParameter, + \ typescriptGenericDefault + syntax region typescriptTypeParameters matchgroup=typescriptTypeBrackets \ start=/</ end=/>/ - \ contains=typescriptTypeParameter + \ contains=@typescriptTypeParameterCluster \ contained syntax match typescriptTypeParameter /\K\k*/ - \ nextgroup=typescriptConstraint,typescriptGenericDefault + \ nextgroup=typescriptConstraint \ contained skipwhite skipnl syntax keyword typescriptConstraint extends @@ -409,6 +462,7 @@ syntax cluster typescriptPrimaryType contains= \ typescriptTupleType, \ typescriptTypeQuery, \ typescriptStringLiteralType, + \ typescriptTemplateLiteralType, \ typescriptReadonlyArrayKeyword, \ typescriptAssertType @@ -417,6 +471,17 @@ syntax region typescriptStringLiteralType contained \ nextgroup=typescriptUnion \ skipwhite skipempty +syntax region typescriptTemplateLiteralType contained + \ start=/`/ skip=/\\\\\|\\`\|\n/ end=/`\|$/ + \ contains=typescriptTemplateSubstitutionType + \ nextgroup=typescriptTypeOperator + \ skipwhite skipempty + +syntax region typescriptTemplateSubstitutionType matchgroup=typescriptTemplateSB + \ start=/\${/ end=/}/ + \ contains=@typescriptType + \ contained + syntax region typescriptParenthesizedType matchgroup=typescriptParens \ start=/(/ end=/)/ \ contains=@typescriptType @@ -439,7 +504,7 @@ syntax region typescriptObjectType matchgroup=typescriptBraces \ start=/{/ end=/}/ \ contains=@typescriptTypeMember,typescriptEndColons,@typescriptComments,typescriptAccessibilityModifier,typescriptReadonlyModifier \ nextgroup=@typescriptTypeOperator - \ contained skipwhite fold + \ contained skipwhite skipnl fold syntax cluster typescriptTypeMember contains= \ @typescriptCallSignature, @@ -447,16 +512,21 @@ syntax cluster typescriptTypeMember contains= \ typescriptIndexSignature, \ @typescriptMembers +syntax match typescriptTupleLable /\K\k*?\?:/ + \ contained + syntax region typescriptTupleType matchgroup=typescriptBraces \ start=/\[/ end=/\]/ - \ contains=@typescriptType,@typescriptComments + \ contains=@typescriptType,@typescriptComments,typescriptRestOrSpread,typescriptTupleLable \ contained skipwhite syntax cluster typescriptTypeOperator - \ contains=typescriptUnion,typescriptTypeBracket + \ contains=typescriptUnion,typescriptTypeBracket,typescriptConstraint,typescriptConditionalType syntax match typescriptUnion /|\|&/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty +syntax match typescriptConditionalType /?\|:/ contained nextgroup=@typescriptPrimaryType skipwhite skipempty + syntax cluster typescriptFunctionType contains=typescriptGenericFunc,typescriptFuncType syntax region typescriptGenericFunc matchgroup=typescriptTypeBrackets \ start=/</ end=/>/ @@ -511,6 +581,7 @@ syntax match typescriptTypeAnnotation /:/ syntax cluster typescriptParameterList contains= \ typescriptTypeAnnotation, \ typescriptAccessibilityModifier, + \ typescriptReadonlyModifier, \ typescriptOptionalMark, \ typescriptRestOrSpread, \ typescriptFuncComma, @@ -550,10 +621,9 @@ syntax keyword typescriptReadonlyArrayKeyword readonly \ nextgroup=@typescriptPrimaryType \ skipwhite + " extension if get(g:, 'yats_host_keyword', 1) - "runtime syntax/yats.vim - "runtime syntax/yats/typescript.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function Boolean syntax keyword typescriptGlobal containedin=typescriptIdentifierName Error EvalError syntax keyword typescriptGlobal containedin=typescriptIdentifierName InternalError @@ -584,7 +654,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptGlobalMethod hi def link typescriptGlobalMethod Structure - "runtime syntax/yats/es6-number.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Number nextgroup=typescriptGlobalNumberDot,typescriptFuncCallArg syntax match typescriptGlobalNumberDot /\./ contained nextgroup=typescriptNumberStaticProp,typescriptNumberStaticMethod,typescriptProp syntax keyword typescriptNumberStaticProp contained EPSILON MAX_SAFE_INTEGER MAX_VALUE @@ -599,7 +668,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptNumberMethod hi def link typescriptNumberMethod Keyword - "runtime syntax/yats/es6-string.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName String nextgroup=typescriptGlobalStringDot,typescriptFuncCallArg syntax match typescriptGlobalStringDot /\./ contained nextgroup=typescriptStringStaticMethod,typescriptProp syntax keyword typescriptStringStaticMethod contained fromCharCode fromCodePoint raw nextgroup=typescriptFuncCallArg @@ -615,7 +683,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptStringMethod hi def link typescriptStringMethod Keyword - "runtime syntax/yats/es6-array.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Array nextgroup=typescriptGlobalArrayDot,typescriptFuncCallArg syntax match typescriptGlobalArrayDot /\./ contained nextgroup=typescriptArrayStaticMethod,typescriptProp syntax keyword typescriptArrayStaticMethod contained from isArray of nextgroup=typescriptFuncCallArg @@ -629,7 +696,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptArrayMethod hi def link typescriptArrayMethod Keyword - "runtime syntax/yats/es6-object.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Object nextgroup=typescriptGlobalObjectDot,typescriptFuncCallArg syntax match typescriptGlobalObjectDot /\./ contained nextgroup=typescriptObjectStaticMethod,typescriptProp syntax keyword typescriptObjectStaticMethod contained create defineProperties defineProperty nextgroup=typescriptFuncCallArg @@ -646,7 +712,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptObjectMethod hi def link typescriptObjectMethod Keyword - "runtime syntax/yats/es6-symbol.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Symbol nextgroup=typescriptGlobalSymbolDot,typescriptFuncCallArg syntax match typescriptGlobalSymbolDot /\./ contained nextgroup=typescriptSymbolStaticProp,typescriptSymbolStaticMethod,typescriptProp syntax keyword typescriptSymbolStaticProp contained length iterator match replace @@ -657,13 +722,11 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptSymbolStaticMethod contained for keyFor nextgroup=typescriptFuncCallArg hi def link typescriptSymbolStaticMethod Keyword - "runtime syntax/yats/es6-function.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Function syntax keyword typescriptFunctionMethod contained apply bind call nextgroup=typescriptFuncCallArg syntax cluster props add=typescriptFunctionMethod hi def link typescriptFunctionMethod Keyword - "runtime syntax/yats/es6-math.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Math nextgroup=typescriptGlobalMathDot,typescriptFuncCallArg syntax match typescriptGlobalMathDot /\./ contained nextgroup=typescriptMathStaticProp,typescriptMathStaticMethod,typescriptProp syntax keyword typescriptMathStaticProp contained E LN10 LN2 LOG10E LOG2E PI SQRT1_2 @@ -677,7 +740,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptMathStaticMethod contained sinh sqrt tan tanh trunc nextgroup=typescriptFuncCallArg hi def link typescriptMathStaticMethod Keyword - "runtime syntax/yats/es6-date.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Date nextgroup=typescriptGlobalDateDot,typescriptFuncCallArg syntax match typescriptGlobalDateDot /\./ contained nextgroup=typescriptDateStaticMethod,typescriptProp syntax keyword typescriptDateStaticMethod contained UTC now parse nextgroup=typescriptFuncCallArg @@ -699,13 +761,11 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptDateMethod hi def link typescriptDateMethod Keyword - "runtime syntax/yats/es6-json.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName JSON nextgroup=typescriptGlobalJSONDot,typescriptFuncCallArg syntax match typescriptGlobalJSONDot /\./ contained nextgroup=typescriptJSONStaticMethod,typescriptProp syntax keyword typescriptJSONStaticMethod contained parse stringify nextgroup=typescriptFuncCallArg hi def link typescriptJSONStaticMethod Keyword - "runtime syntax/yats/es6-regexp.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName RegExp nextgroup=typescriptGlobalRegExpDot,typescriptFuncCallArg syntax match typescriptGlobalRegExpDot /\./ contained nextgroup=typescriptRegExpStaticProp,typescriptProp syntax keyword typescriptRegExpStaticProp contained lastIndex @@ -717,7 +777,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptRegExpMethod hi def link typescriptRegExpMethod Keyword - "runtime syntax/yats/es6-map.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Map WeakMap syntax keyword typescriptES6MapProp contained size syntax cluster props add=typescriptES6MapProp @@ -727,7 +786,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptES6MapMethod hi def link typescriptES6MapMethod Keyword - "runtime syntax/yats/es6-set.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Set WeakSet syntax keyword typescriptES6SetProp contained size syntax cluster props add=typescriptES6SetProp @@ -737,7 +795,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptES6SetMethod hi def link typescriptES6SetMethod Keyword - "runtime syntax/yats/es6-proxy.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Proxy syntax keyword typescriptProxyAPI contained getOwnPropertyDescriptor getOwnPropertyNames syntax keyword typescriptProxyAPI contained defineProperty deleteProperty freeze seal @@ -745,7 +802,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptProxyAPI contained iterate ownKeys apply construct hi def link typescriptProxyAPI Keyword - "runtime syntax/yats/es6-promise.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Promise nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg syntax match typescriptGlobalPromiseDot /\./ contained nextgroup=typescriptPromiseStaticMethod,typescriptProp syntax keyword typescriptPromiseStaticMethod contained resolve reject all race nextgroup=typescriptFuncCallArg @@ -754,7 +810,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptPromiseMethod hi def link typescriptPromiseMethod Keyword - "runtime syntax/yats/es6-reflect.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Reflect syntax keyword typescriptReflectMethod contained apply construct defineProperty deleteProperty nextgroup=typescriptFuncCallArg syntax keyword typescriptReflectMethod contained enumerate get getOwnPropertyDescriptor nextgroup=typescriptFuncCallArg @@ -763,14 +818,12 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptReflectMethod hi def link typescriptReflectMethod Keyword - "runtime syntax/yats/ecma-402.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Intl syntax keyword typescriptIntlMethod contained Collator DateTimeFormat NumberFormat nextgroup=typescriptFuncCallArg syntax keyword typescriptIntlMethod contained PluralRules nextgroup=typescriptFuncCallArg syntax cluster props add=typescriptIntlMethod hi def link typescriptIntlMethod Keyword - "runtime syntax/yats/node.vim syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName global process syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName console Buffer syntax keyword typescriptNodeGlobal containedin=typescriptIdentifierName module exports @@ -788,7 +841,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptTestGlobal containedin=typescriptIdentifierName afterAll syntax keyword typescriptTestGlobal containedin=typescriptIdentifierName expect assert - "runtime syntax/yats/web.vim syntax keyword typescriptBOM containedin=typescriptIdentifierName AbortController syntax keyword typescriptBOM containedin=typescriptIdentifierName AbstractWorker AnalyserNode syntax keyword typescriptBOM containedin=typescriptIdentifierName App Apps ArrayBuffer @@ -1038,7 +1090,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptBOM containedin=typescriptIdentifierName XMLHttpRequestEventTarget hi def link typescriptBOM Structure - "runtime syntax/yats/web-window.vim syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName applicationCache syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName closed syntax keyword typescriptBOMWindowProp containedin=typescriptIdentifierName Components @@ -1145,7 +1196,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptBOMWindowCons containedin=typescriptIdentifierName XMLSerializer hi def link typescriptBOMWindowCons Structure - "runtime syntax/yats/web-navigator.vim syntax keyword typescriptBOMNavigatorProp contained battery buildID connection cookieEnabled syntax keyword typescriptBOMNavigatorProp contained doNotTrack maxTouchPoints oscpu syntax keyword typescriptBOMNavigatorProp contained productSub push serviceWorker @@ -1164,7 +1214,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptServiceWorkerMethod hi def link typescriptServiceWorkerMethod Keyword - "runtime syntax/yats/web-location.vim syntax keyword typescriptBOMLocationProp contained href protocol host hostname port syntax keyword typescriptBOMLocationProp contained pathname search hash username password syntax keyword typescriptBOMLocationProp contained origin @@ -1174,7 +1223,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptBOMLocationMethod hi def link typescriptBOMLocationMethod Keyword - "runtime syntax/yats/web-history.vim syntax keyword typescriptBOMHistoryProp contained length current next previous state syntax keyword typescriptBOMHistoryProp contained scrollRestoration syntax cluster props add=typescriptBOMHistoryProp @@ -1183,7 +1231,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptBOMHistoryMethod hi def link typescriptBOMHistoryMethod Keyword - "runtime syntax/yats/web-console.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName console syntax keyword typescriptConsoleMethod contained count dir error group groupCollapsed nextgroup=typescriptFuncCallArg syntax keyword typescriptConsoleMethod contained groupEnd info log time timeEnd trace nextgroup=typescriptFuncCallArg @@ -1191,7 +1238,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptConsoleMethod hi def link typescriptConsoleMethod Keyword - "runtime syntax/yats/web-xhr.vim syntax keyword typescriptXHRGlobal containedin=typescriptIdentifierName XMLHttpRequest hi def link typescriptXHRGlobal Structure syntax keyword typescriptXHRProp contained onreadystatechange readyState response @@ -1204,7 +1250,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptXHRMethod hi def link typescriptXHRMethod Keyword - "runtime syntax/yats/web-blob.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Blob BlobBuilder syntax keyword typescriptGlobal containedin=typescriptIdentifierName File FileReader syntax keyword typescriptGlobal containedin=typescriptIdentifierName FileReaderSync @@ -1236,7 +1281,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptURLStaticMethod contained createObjectURL revokeObjectURL nextgroup=typescriptFuncCallArg hi def link typescriptURLStaticMethod Keyword - "runtime syntax/yats/web-crypto.vim syntax keyword typescriptCryptoGlobal containedin=typescriptIdentifierName crypto hi def link typescriptCryptoGlobal Structure syntax keyword typescriptSubtleCryptoMethod contained encrypt decrypt sign verify nextgroup=typescriptFuncCallArg @@ -1250,7 +1294,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptCryptoMethod hi def link typescriptCryptoMethod Keyword - "runtime syntax/yats/web-fetch.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Headers Request syntax keyword typescriptGlobal containedin=typescriptIdentifierName Response syntax keyword typescriptGlobalMethod containedin=typescriptIdentifierName fetch nextgroup=typescriptFuncCallArg @@ -1274,7 +1317,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptResponseMethod hi def link typescriptResponseMethod Keyword - "runtime syntax/yats/web-service-worker.vim syntax keyword typescriptServiceWorkerProp contained controller ready syntax cluster props add=typescriptServiceWorkerProp hi def link typescriptServiceWorkerProp Keyword @@ -1287,7 +1329,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptCacheMethod hi def link typescriptCacheMethod Keyword - "runtime syntax/yats/web-encoding.vim syntax keyword typescriptEncodingGlobal containedin=typescriptIdentifierName TextEncoder syntax keyword typescriptEncodingGlobal containedin=typescriptIdentifierName TextDecoder hi def link typescriptEncodingGlobal Structure @@ -1298,21 +1339,18 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptEncodingMethod hi def link typescriptEncodingMethod Keyword - "runtime syntax/yats/web-geo.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName Geolocation syntax keyword typescriptGeolocationMethod contained getCurrentPosition watchPosition nextgroup=typescriptFuncCallArg syntax keyword typescriptGeolocationMethod contained clearWatch nextgroup=typescriptFuncCallArg syntax cluster props add=typescriptGeolocationMethod hi def link typescriptGeolocationMethod Keyword - "runtime syntax/yats/web-network.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName NetworkInformation syntax keyword typescriptBOMNetworkProp contained downlink downlinkMax effectiveType syntax keyword typescriptBOMNetworkProp contained rtt type syntax cluster props add=typescriptBOMNetworkProp hi def link typescriptBOMNetworkProp Keyword - "runtime syntax/yats/web-payment.vim syntax keyword typescriptGlobal containedin=typescriptIdentifierName PaymentRequest syntax keyword typescriptPaymentMethod contained show abort canMakePayment nextgroup=typescriptFuncCallArg syntax cluster props add=typescriptPaymentMethod @@ -1340,7 +1378,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptPaymentShippingOptionProp hi def link typescriptPaymentShippingOptionProp Keyword - "runtime syntax/yats/dom-node.vim syntax keyword typescriptDOMNodeProp contained attributes baseURI baseURIObject childNodes syntax keyword typescriptDOMNodeProp contained firstChild lastChild localName namespaceURI syntax keyword typescriptDOMNodeProp contained nextSibling nodeName nodePrincipal @@ -1364,7 +1401,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptDOMNodeType contained DOCUMENT_FRAGMENT_NODE NOTATION_NODE hi def link typescriptDOMNodeType Keyword - "runtime syntax/yats/dom-elem.vim syntax keyword typescriptDOMElemAttrs contained accessKey clientHeight clientLeft syntax keyword typescriptDOMElemAttrs contained clientTop clientWidth id innerHTML syntax keyword typescriptDOMElemAttrs contained length onafterscriptexecute onbeforescriptexecute @@ -1387,7 +1423,6 @@ if get(g:, 'yats_host_keyword', 1) syntax keyword typescriptDOMElemFuncs contained getAttribute hi def link typescriptDOMElemFuncs Keyword - "runtime syntax/yats/dom-document.vim syntax keyword typescriptDOMDocProp contained activeElement body cookie defaultView syntax keyword typescriptDOMDocProp contained designMode dir domain embeds forms head syntax keyword typescriptDOMDocProp contained images lastModified links location plugins @@ -1419,7 +1454,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptDOMDocMethod hi def link typescriptDOMDocMethod Keyword - "runtime syntax/yats/dom-event.vim syntax keyword typescriptDOMEventTargetMethod contained addEventListener removeEventListener nextgroup=typescriptEventFuncCallArg syntax keyword typescriptDOMEventTargetMethod contained dispatchEvent waitUntil nextgroup=typescriptEventFuncCallArg syntax cluster props add=typescriptDOMEventTargetMethod @@ -1480,7 +1514,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptDOMEventMethod hi def link typescriptDOMEventMethod Keyword - "runtime syntax/yats/dom-storage.vim syntax keyword typescriptDOMStorage contained sessionStorage localStorage hi def link typescriptDOMStorage Keyword syntax keyword typescriptDOMStorageProp contained length @@ -1491,7 +1524,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptDOMStorageMethod hi def link typescriptDOMStorageMethod Keyword - "runtime syntax/yats/dom-form.vim syntax keyword typescriptDOMFormProp contained acceptCharset action elements encoding syntax keyword typescriptDOMFormProp contained enctype length method name target syntax cluster props add=typescriptDOMFormProp @@ -1500,7 +1532,6 @@ if get(g:, 'yats_host_keyword', 1) syntax cluster props add=typescriptDOMFormMethod hi def link typescriptDOMFormMethod Keyword - "runtime syntax/yats/css.vim syntax keyword typescriptDOMStyle contained alignContent alignItems alignSelf animation syntax keyword typescriptDOMStyle contained animationDelay animationDirection animationDuration syntax keyword typescriptDOMStyle contained animationFillMode animationIterationCount @@ -1575,8 +1606,6 @@ if get(g:, 'yats_host_keyword', 1) let typescript_props = 1 - - "runtime syntax/yats/event.vim syntax keyword typescriptAnimationEvent contained animationend animationiteration syntax keyword typescriptAnimationEvent contained animationstart beginEvent endEvent syntax keyword typescriptAnimationEvent contained repeatEvent @@ -1710,14 +1739,12 @@ if get(g:, 'yats_host_keyword', 1) endif " patch -"runtime syntax/basic/patch.vim " patch for generated code syntax keyword typescriptGlobal Promise \ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline syntax keyword typescriptGlobal Map WeakMap \ nextgroup=typescriptGlobalPromiseDot,typescriptFuncCallArg,typescriptTypeArguments oneline -"runtime syntax/basic/members.vim syntax keyword typescriptConstructor contained constructor \ nextgroup=@typescriptCallSignature \ skipwhite skipempty @@ -1725,7 +1752,7 @@ syntax keyword typescriptConstructor contained constructor syntax cluster memberNextGroup contains=typescriptMemberOptionality,typescriptTypeAnnotation,@typescriptCallSignature -syntax match typescriptMember /\K\k*/ +syntax match typescriptMember /#\?\K\k*/ \ nextgroup=@memberNextGroup \ contained skipwhite @@ -1765,7 +1792,6 @@ syntax region typescriptComputedMember contained matchgroup=typescriptPropert \ nextgroup=@memberNextGroup \ skipwhite skipempty -"runtime syntax/basic/class.vim "don't add typescriptMembers to nextgroup, let outer scope match it " so we won't match abstract method outside abstract class syntax keyword typescriptAbstract abstract @@ -1781,7 +1807,7 @@ syntax match typescriptClassName contained /\K\k*/ syntax region typescriptClassTypeParameter \ start=/</ end=/>/ - \ contains=typescriptTypeParameter + \ contains=@typescriptTypeParameterCluster \ nextgroup=typescriptClassBlock,typescriptClassExtends \ contained skipwhite skipnl @@ -1813,7 +1839,7 @@ syntax match typescriptInterfaceName contained /\k\+/ \ skipwhite skipnl syntax region typescriptInterfaceTypeParameter \ start=/</ end=/>/ - \ contains=typescriptTypeParameter + \ contains=@typescriptTypeParameterCluster \ nextgroup=typescriptObjectType,typescriptInterfaceExtends \ contained \ skipwhite skipnl @@ -1832,7 +1858,6 @@ syntax region typescriptInterfaceTypeArguments matchgroup=typescriptTypeBrackets syntax match typescriptInterfaceComma /,/ contained nextgroup=typescriptInterfaceHeritage skipwhite skipnl -"runtime syntax/basic/cluster.vim "Block VariableStatement EmptyStatement ExpressionStatement IfStatement IterationStatement ContinueStatement BreakStatement ReturnStatement WithStatement LabelledStatement SwitchStatement ThrowStatement TryStatement DebuggerStatement syntax cluster typescriptStatement \ contains=typescriptBlock,typescriptVariable, @@ -1872,7 +1897,6 @@ syntax cluster typescriptValue syntax cluster typescriptEventExpression contains=typescriptArrowFuncDef,typescriptParenExp,@typescriptValue,typescriptRegexpString,@typescriptEventTypes,typescriptOperator,typescriptGlobal,jsxRegion -"runtime syntax/basic/function.vim syntax keyword typescriptAsyncFuncKeyword async \ nextgroup=typescriptFuncKeyword,typescriptArrowFuncDef \ skipwhite @@ -1894,7 +1918,7 @@ syntax match typescriptFuncName contained /\K\k*/ \ skipwhite " destructuring ({ a: ee }) => -syntax match typescriptArrowFuncDef contained /({\_[^}]*}\(:\_[^)]\)\?)\s*=>/ +syntax match typescriptArrowFuncDef contained /(\(\s*\({\_[^}]*}\|\k\+\)\(:\_[^)]\)\?,\?\)\+)\s*=>/ \ contains=typescriptArrowFuncArg,typescriptArrowFunc \ nextgroup=@typescriptExpression,typescriptBlock \ skipwhite skipempty @@ -1913,7 +1937,7 @@ syntax match typescriptArrowFuncDef contained /\K\k*\s*=>/ \ skipwhite skipempty " TODO: optimize this pattern -syntax region typescriptArrowFuncDef contained start=/(\_[^)]*):/ end=/=>/ +syntax region typescriptArrowFuncDef contained start=/(\_[^(^)]*):/ end=/=>/ \ contains=typescriptArrowFuncArg,typescriptArrowFunc,typescriptTypeAnnotation \ nextgroup=@typescriptExpression,typescriptBlock \ skipwhite skipempty keepend @@ -1925,7 +1949,7 @@ syntax region typescriptArrowFuncArg contained start=/<\|(/ end=/\ze=> syntax region typescriptReturnAnnotation contained start=/:/ end=/{/me=e-1 contains=@typescriptType nextgroup=typescriptBlock -syntax region typescriptFuncImpl contained start=/function/ end=/{/me=e-1 +syntax region typescriptFuncImpl contained start=/function\>/ end=/{/me=e-1 \ contains=typescriptFuncKeyword \ nextgroup=typescriptBlock @@ -1941,9 +1965,8 @@ syntax region typescriptParamImpl matchgroup=typescriptParens \ nextgroup=typescriptReturnAnnotation,typescriptBlock \ contained skipwhite skipnl -"runtime syntax/basic/decorator.vim syntax match typescriptDecorator /@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>/ - \ nextgroup=typescriptArgumentList,typescriptTypeArguments + \ nextgroup=typescriptFuncCallArg,typescriptTypeArguments \ contains=@_semantic,typescriptDotNotation " Define the default highlighting. @@ -1957,6 +1980,7 @@ hi def link typescriptComment Comment hi def link typescriptLineComment Comment hi def link typescriptDocComment Comment hi def link typescriptCommentTodo Todo +hi def link typescriptMagicComment SpecialComment hi def link typescriptRef Include hi def link typescriptDocNotation SpecialComment hi def link typescriptDocTags SpecialComment @@ -1970,9 +1994,11 @@ hi def link typescriptDocParamType Type hi def link typescriptString String hi def link typescriptSpecial Special hi def link typescriptStringLiteralType String +hi def link typescriptTemplateLiteralType String hi def link typescriptStringMember String hi def link typescriptTemplate String hi def link typescriptEventString String +hi def link typescriptDestructureString String hi def link typescriptASCII Special hi def link typescriptTemplateSB Label hi def link typescriptRegexpString String @@ -1986,6 +2012,7 @@ hi def link typescriptDefault typescriptCase hi def link typescriptBranch Conditional hi def link typescriptIdentifier Structure hi def link typescriptVariable Identifier +hi def link typescriptDestructureVariable PreProc hi def link typescriptEnumKeyword Identifier hi def link typescriptRepeat Repeat hi def link typescriptForOperator Repeat @@ -1997,14 +2024,17 @@ hi def link typescriptCastKeyword Special hi def link typescriptType Type hi def link typescriptNull Boolean hi def link typescriptNumber Number -hi def link typescriptExponent Number hi def link typescriptBoolean Boolean hi def link typescriptObjectLabel typescriptLabel +hi def link typescriptDestructureLabel Function hi def link typescriptLabel Label +hi def link typescriptTupleLable Label hi def link typescriptStringProperty String hi def link typescriptImport Special +hi def link typescriptImportType Special hi def link typescriptAmbientDeclaration Special hi def link typescriptExport Special +hi def link typescriptExportType Special hi def link typescriptModule Special hi def link typescriptTry Special hi def link typescriptExceptions Special @@ -2013,6 +2043,7 @@ hi def link typescriptMember Function hi def link typescriptMethodAccessor Operator hi def link typescriptAsyncFuncKeyword Keyword +hi def link typescriptObjectAsyncKeyword Keyword hi def link typescriptAsyncFor Keyword hi def link typescriptFuncKeyword Keyword hi def link typescriptAsyncFunc Keyword diff --git a/runtime/syntax/vhdl.vim b/runtime/syntax/vhdl.vim index efcb840284..06fc2e795e 100644 --- a/runtime/syntax/vhdl.vim +++ b/runtime/syntax/vhdl.vim @@ -1,9 +1,9 @@ " Vim syntax file " Language: VHDL [VHSIC (Very High Speed Integrated Circuit) Hardware Description Language] -" Maintainer: Daniel Kho <daniel.kho@tauhop.com> +" Maintainer: Daniel Kho <daniel.kho@logik.haus> " Previous Maintainer: Czo <Olivier.Sirol@lip6.fr> " Credits: Stephan Hegel <stephan.hegel@snc.siemens.com.cn> -" Last Changed: 2018 May 06 by Daniel Kho +" Last Changed: 2020 Apr 04 by Daniel Kho " quit when a syntax file was already loaded if exists("b:current_syntax") @@ -16,10 +16,10 @@ set cpo&vim " case is not significant syn case ignore -" VHDL keywords -syn keyword vhdlStatement access after alias all assert +" VHDL 1076-2019 keywords +syn keyword vhdlStatement access after alias all syn keyword vhdlStatement architecture array attribute -syn keyword vhdlStatement assume assume_guarantee +syn keyword vhdlStatement assert assume syn keyword vhdlStatement begin block body buffer bus syn keyword vhdlStatement case component configuration constant syn keyword vhdlStatement context cover @@ -34,20 +34,19 @@ syn keyword vhdlStatement map syn keyword vhdlStatement new next null syn keyword vhdlStatement of on open others out syn keyword vhdlStatement package port postponed procedure process pure -syn keyword vhdlStatement parameter property protected +syn keyword vhdlStatement parameter property protected private syn keyword vhdlStatement range record register reject report return -syn keyword vhdlStatement release restrict restrict_guarantee -syn keyword vhdlStatement select severity signal shared -syn keyword vhdlStatement subtype +syn keyword vhdlStatement release restrict +syn keyword vhdlStatement select severity signal shared subtype syn keyword vhdlStatement sequence strong syn keyword vhdlStatement then to transport type syn keyword vhdlStatement unaffected units until use -syn keyword vhdlStatement variable -" VHDL-2017 interface -syn keyword vhdlStatement view -syn keyword vhdlStatement vmode vprop vunit +syn keyword vhdlStatement variable view +syn keyword vhdlStatement vpkg vmode vprop vunit syn keyword vhdlStatement wait when while with -syn keyword vhdlStatement note warning error failure + +" VHDL predefined severity levels +syn keyword vhdlAttribute note warning error failure " Linting of conditionals. syn match vhdlStatement "\<\(if\|else\)\>" @@ -124,7 +123,7 @@ syn match vhdlAttribute "\'succ" syn match vhdlAttribute "\'val" syn match vhdlAttribute "\'image" syn match vhdlAttribute "\'value" -" VHDL-2017 interface attribute +" VHDL-2019 interface attribute syn match vhdlAttribute "\'converse" syn keyword vhdlBoolean true false @@ -167,7 +166,7 @@ syn match vhdlOperator "=\|\/=\|>\|<\|>=" syn match vhdlOperator "<=\|:=" syn match vhdlOperator "=>" -" VHDL-2017 concurrent signal association (spaceship) operator +" VHDL-202x concurrent signal association (spaceship) operator syn match vhdlOperator "<=>" " VHDL-2008 conversion, matching equality/non-equality operators @@ -188,7 +187,7 @@ syn match vhdlError "\(<\)[&+\-\/\\]\+" syn match vhdlError "[>=&+\-\/\\]\+\(<\)" " Covers most operators " support negative sign after operators. E.g. q<=-b; -" Supports VHDL-2017 spaceship (concurrent simple signal association). +" Supports VHDL-202x spaceship (concurrent simple signal association). syn match vhdlError "\(<=\)[<=&+\*\\?:]\+" syn match vhdlError "[>=&+\-\*\\:]\+\(=>\)" syn match vhdlError "\(&\|+\|\-\|\*\*\|\/=\|??\|?=\|?\/=\|?<=\|?>=\|>=\|:=\|=>\)[<>=&+\*\\?:]\+" @@ -265,4 +264,5 @@ let b:current_syntax = "vhdl" let &cpo = s:cpo_save unlet s:cpo_save + " vim: ts=8 diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim index 92348d57ec..d395c6b1c3 100644 --- a/runtime/syntax/vim.vim +++ b/runtime/syntax/vim.vim @@ -53,16 +53,16 @@ syn case ignore syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo " Default highlighting groups {{{2 -syn keyword vimHLGroup contained ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual WarningMsg WildMenu +syn keyword vimHLGroup contained ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question QuickFixLine Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual WarningMsg WildMenu syn match vimHLGroup contained "Conceal" -syn keyword vimOnlyHLGroup contained VisualNOS -syn keyword nvimHLGroup contained Substitute TermCursor TermCursorNC QuickFixLine +syn keyword vimOnlyHLGroup contained LineNrAbove LineNrBelow StatusLineTerm Terminal VisualNOS +syn keyword nvimHLGroup contained Substitute TermCursor TermCursorNC "}}}2 syn case match " Special Vim Highlighting (not automatic) {{{1 -" Set up folding commands -if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[aflmpPrt]' +" Set up folding commands {{{2 +if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[afhlmpPrt]' if g:vimsyn_folding =~# 'a' com! -nargs=* VimFolda <args> fold else @@ -73,6 +73,11 @@ if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[aflmpPrt]' else com! -nargs=* VimFoldf <args> endif + if g:vimsyn_folding =~# 'h' + com! -nargs=* VimFoldh <args> fold + else + com! -nargs=* VimFoldh <args> + endif if g:vimsyn_folding =~# 'l' com! -nargs=* VimFoldl <args> fold else @@ -106,6 +111,7 @@ if exists("g:vimsyn_folding") && g:vimsyn_folding =~# '[aflmpPrt]' else com! -nargs=* VimFolda <args> com! -nargs=* VimFoldf <args> + com! -nargs=* VimFoldh <args> com! -nargs=* VimFoldl <args> com! -nargs=* VimFoldm <args> com! -nargs=* VimFoldp <args> @@ -114,7 +120,7 @@ else com! -nargs=* VimFoldt <args> endif -" commands not picked up by the generator (due to non-standard format) +" commands not picked up by the generator (due to non-standard format) {{{2 syn keyword vimCommand contained py3 " Deprecated variable options {{{2 @@ -137,10 +143,13 @@ endif " Numbers {{{2 " ======= -syn match vimNumber "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment -syn match vimNumber "-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment -syn match vimNumber "\<0[xX]\x\+" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment -syn match vimNumber "\%(^\|\A\)\zs#\x\{6}" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment +syn match vimNumber '\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '\<0[xX]\x\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '\%(^\|\A\)\zs#\x\{6}' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '\<0[zZ][a-zA-Z0-9.]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '0[0-7]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment +syn match vimNumber '0b[01]\+' skipwhite nextgroup=vimGlobal,vimSubst,vimCommand,vimComment,vim9Comment " All vimCommands are contained by vimIsCommand. {{{2 syn match vimCmdSep "[:|]\+" skipwhite nextgroup=vimAddress,vimAutoCmd,vimEcho,vimIsCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd @@ -177,7 +186,7 @@ syn keyword vimFTOption contained detect indent off on plugin " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking. -syn cluster vimAugroupList contains=vimAugroup,vimIsCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimNotFunc,vimMap,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue,vimSetEqual,vimOption +syn cluster vimAugroupList contains=vimAugroup,vimIsCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimNotFunc,vimMap,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vim9Comment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vim9Comment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue,vimSetEqual,vimOption if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'a' syn region vimAugroup fold matchgroup=vimAugroupKey start="\<aug\%[roup]\>\ze\s\+\K\k*" end="\<aug\%[roup]\>\ze\s\+[eE][nN][dD]\>" contains=vimAutoCmd,@vimAugroupList else @@ -191,12 +200,12 @@ syn keyword vimAugroupKey contained aug[roup] " Operators: {{{2 " ========= -syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue +syn cluster vimOperGroup contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue,vim9Comment syn match vimOper "\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}" skipwhite nextgroup=vimString,vimSpecFile syn match vimOper "\(\<is\|\<isnot\)[?#]\{0,2}\>" skipwhite nextgroup=vimString,vimSpecFile syn match vimOper "||\|&&\|[-+.!]" skipwhite nextgroup=vimString,vimSpecFile -syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=@vimOperGroup -syn region vimOperParen matchgroup=vimSep start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar +syn region vimOperParen matchgroup=vimParenSep start="(" end=")" contains=vimoperStar,@vimOperGroup +syn region vimOperParen matchgroup=vimSep start="#\={" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror") syn match vimOperError ")" endif @@ -204,13 +213,13 @@ endif " Functions : Tag is provided for those who wish to highlight tagged functions {{{2 " ========= syn cluster vimFuncList contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID -syn cluster vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimGlobal,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand +syn cluster vimFuncBodyList contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vim9Comment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimEnvvar,vimExecute,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimGlobal,vimHighlight,vimIsCommand,vimLet,vimLetHereDoc,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSearch,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand syn match vimFunction "\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*(" contains=@vimFuncList nextgroup=vimFuncBody if exists("g:vimsyn_folding") && g:vimsyn_folding =~# 'f' - syn region vimFuncBody contained fold start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)" contains=@vimFuncBodyList + syn region vimFuncBody contained fold start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList else - syn region vimFuncBody contained start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)" contains=@vimFuncBodyList + syn region vimFuncBody contained start="\ze\s*(" matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\|enddef\>\)" contains=@vimFuncBodyList endif syn match vimFuncVar contained "a:\(\K\k*\|\d\+\)" syn match vimFuncSID contained "\c<sid>\|\<s:" @@ -231,9 +240,9 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained " User-Specified Commands: {{{2 " ======================= -syn cluster vimUserCmdList contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimFuncName,vimFunction,vimFunctionError,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimLet,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,vimSynLine +syn cluster vimUserCmdList contains=vimAddress,vimSyntax,vimHighlight,vimAutoCmd,vimCmplxRepeat,vimComment,vim9Comment,vimCtrlChar,vimEscapeBrace,vimFunc,vimFuncName,vimFunction,vimFunctionError,vimIsCommand,vimMark,vimNotation,vimNumber,vimOper,vimRegion,vimRegister,vimLet,vimSet,vimSetEqual,vimSetString,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange,vimSynLine syn keyword vimUserCommand contained com[mand] -syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList +syn match vimUserCmd "\<com\%[mand]!\=\>.*$" contains=vimUserAttrb,vimUserAttrbError,vimUserCommand,@vimUserCmdList,vimComFilter syn match vimUserAttrbError contained "-\a\+\ze\s" syn match vimUserAttrb contained "-nargs=[01*?+]" contains=vimUserAttrbKey,vimOper syn match vimUserAttrb contained "-complete=" contains=vimUserAttrbKey,vimOper nextgroup=vimUserAttrbCmplt,vimUserCmdError @@ -261,6 +270,14 @@ syn match vimComment excludenl +\s"[^\-:.%#=*].*$+lc=1 contains=@vimCommentGroup syn match vimComment +\<endif\s\+".*$+lc=5 contains=@vimCommentGroup,vimCommentString syn match vimComment +\<else\s\+".*$+lc=4 contains=@vimCommentGroup,vimCommentString syn region vimCommentString contained oneline start='\S\s\+"'ms=e end='"' +" Vim9 comments - TODO: might be highlighted while they don't work +syn match vim9Comment excludenl +\s#[^{].*$+lc=1 contains=@vimCommentGroup,vimCommentString +syn match vim9Comment +\<endif\s\+#[^{].*$+lc=5 contains=@vimCommentGroup,vimCommentString +syn match vim9Comment +\<else\s\+#[^{].*$+lc=4 contains=@vimCommentGroup,vimCommentString +" Vim9 comment inside expression +syn match vim9Comment +\s\zs#[^{].*$+ms=s+1 contains=@vimCommentGroup,vimCommentString +syn match vim9Comment +^\s*#[^{].*$+ contains=@vimCommentGroup,vimCommentString +syn match vim9Comment +^\s*#$+ contains=@vimCommentGroup,vimCommentString " Environment Variables: {{{2 " ===================== @@ -281,7 +298,7 @@ syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]"+lc=1 skip=+\\\\\|\\" syn region vimString oneline keepend start=+[^a-zA-Z>!\\@]'+lc=1 end=+'+ syn region vimString oneline start=+=!+lc=1 skip=+\\\\\|\\!+ end=+!+ contains=@vimStringGroup syn region vimString oneline start="=+"lc=1 skip="\\\\\|\\+" end="+" contains=@vimStringGroup -syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup +"syn region vimString oneline start="\s/\s*\A"lc=1 skip="\\\\\|\\+" end="/" contains=@vimStringGroup " see tst45.vim syn match vimString contained +"[^"]*\\$+ skipnl nextgroup=vimStringCont syn match vimStringCont contained +\(\\\\\|.\)\{-}[^\\]"+ @@ -291,7 +308,8 @@ syn cluster vimSubstList contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTw syn cluster vimSubstRepList contains=vimSubstSubstr,vimSubstTwoBS,vimNotation syn cluster vimSubstList add=vimCollection syn match vimSubst "\(:\+\s*\|^\s*\||\s*\)\<\%(\<s\%[ubstitute]\>\|\<sm\%[agic]\>\|\<sno\%[magic]\>\)[:#[:alpha:]]\@!" nextgroup=vimSubstPat -syn match vimSubst "\%(^\|[^\\]\)\<s\%[ubstitute]\>[:#[:alpha:]]\@!" nextgroup=vimSubstPat contained +"syn match vimSubst "\%(^\|[^\\]\)\<s\%[ubstitute]\>[:#[:alpha:]]\@!" nextgroup=vimSubstPat contained +syn match vimSubst "\%(^\|[^\\\"']\)\<s\%[ubstitute]\>[:#[:alpha:]\"']\@!" nextgroup=vimSubstPat contained syn match vimSubst "/\zs\<s\%[ubstitute]\>\ze/" nextgroup=vimSubstPat syn match vimSubst "\(:\+\s*\|^\s*\)s\ze#.\{-}#.\{-}#" nextgroup=vimSubstPat syn match vimSubst1 contained "\<s\%[ubstitute]\>" nextgroup=vimSubstPat @@ -304,7 +322,7 @@ syn match vimCollClass contained transparent "\%#=1\[:\(alnum\|alpha\|blank\| syn match vimSubstSubstr contained "\\z\=\d" syn match vimSubstTwoBS contained "\\\\" syn match vimSubstFlagErr contained "[^< \t\r|]\+" contains=vimSubstFlags -syn match vimSubstFlags contained "[&cegiIpr]\+" +syn match vimSubstFlags contained "[&cegiIlnpr#]\+" " 'String': {{{2 syn match vimString "[^(,]'[^']\{-}\zs'" @@ -329,35 +347,38 @@ syn match vimAddress ",\zs[.$]" skipwhite nextgroup=vimSubst1 syn match vimAddress "%\ze\a" skipwhite nextgroup=vimString,vimSubst1 syn match vimFilter "^!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile -syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile +syn match vimFilter contained "!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile +syn match vimComFilter contained "|!!\=[^"]\{-}\(|\|\ze\"\|$\)" contains=vimOper,vimSpecFile -" Complex repeats (:h complex-repeat) {{{2 +" Complex Repeats: (:h complex-repeat) {{{2 syn match vimCmplxRepeat '[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1 syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)' " Set command and associated set-options (vimOptions) with comment {{{2 -syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod +syn region vimSet matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" end="|" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vim9Comment,vimSetString,vimSetMod syn region vimSetEqual contained start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar oneline syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar -syn match vimSetSep contained "[,:]" skipwhite nextgroup=vimCommand +syn match vimSetSep contained "[,:]" syn match vimSetMod contained "&vim\=\|[!&?<]\|all&" -" Let {{{2 +" Let: {{{2 " === -syn keyword vimLet let unl[et] skipwhite nextgroup=vimVar,vimFuncVar +syn keyword vimLet let unl[et] skipwhite nextgroup=vimVar,vimFuncVar,vimLetHereDoc +VimFoldh syn region vimLetHereDoc matchgroup=vimLetHereDocStart start='=<<\s\+\%(trim\>\)\=\s*\z(\L\S*\)' matchgroup=vimLetHereDocStop end='^\s*\z1\s*$' contains=vimComment,vim9Comment -" Abbreviations {{{2 +" Abbreviations: {{{2 " ============= syn keyword vimAbb ab[breviate] ca[bbrev] inorea[bbrev] cnorea[bbrev] norea[bbrev] ia[bbrev] skipwhite nextgroup=vimMapMod,vimMapLhs -" Autocmd {{{2 +" Autocmd: {{{2 " ======= syn match vimAutoEventList contained "\(!\s\+\)\=\(\a\+,\)*\a\+" contains=vimAutoEvent,nvimAutoEvent nextgroup=vimAutoCmdSpace syn match vimAutoCmdSpace contained "\s\+" nextgroup=vimAutoCmdSfxList -syn match vimAutoCmdSfxList contained "\S*" +syn match vimAutoCmdSfxList contained "\S*" skipwhite nextgroup=vimAutoCmdMod syn keyword vimAutoCmd au[tocmd] do[autocmd] doautoa[ll] skipwhite nextgroup=vimAutoEventList +syn match vimAutoCmdMod "\(++\)\=\(once\|nested\)" -" Echo and Execute -- prefer strings! {{{2 +" Echo and Execute: -- prefer strings! {{{2 " ================ syn region vimEcho oneline excludenl matchgroup=vimCommand start="\<ec\%[ho]\>" skip="\(\\\\\)*\\|" end="$\||" contains=vimFunc,vimFuncVar,vimString,vimVar syn region vimExecute oneline excludenl matchgroup=vimCommand start="\<exe\%[cute]\>" skip="\(\\\\\)*\\|" end="$\||\|<[cC][rR]>" contains=vimFuncVar,vimIsCommand,vimOper,vimNotation,vimOperParen,vimString,vimVar @@ -366,7 +387,7 @@ syn case ignore syn keyword vimEchoHLNone none syn case match -" Maps {{{2 +" Maps: {{{2 " ==== syn match vimMap "\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs syn keyword vimMap cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs @@ -383,7 +404,7 @@ syn case ignore syn keyword vimMapModKey contained buffer expr leader localleader nowait plug script sid silent unique syn case match -" Menus {{{2 +" Menus: {{{2 " ===== syn cluster vimMenuList contains=vimMenuBang,vimMenuPriority,vimMenuName,vimMenuMod syn keyword vimCommand am[enu] an[oremenu] aun[menu] cme[nu] cnoreme[nu] cunme[nu] ime[nu] inoreme[nu] iunme[nu] me[nu] nme[nu] nnoreme[nu] noreme[nu] nunme[nu] ome[nu] onoreme[nu] ounme[nu] unme[nu] vme[nu] vnoreme[nu] vunme[nu] skipwhite nextgroup=@vimMenuList @@ -392,10 +413,10 @@ syn match vimMenuPriority "\d\+\(\.\d\+\)*" contained skipwhite nextgroup=vimMen syn match vimMenuNameMore "\c\\\s\|<tab>\|\\\." contained nextgroup=vimMenuName,vimMenuNameMore contains=vimNotation syn match vimMenuMod contained "\c<\(script\|silent\)\+>" skipwhite contains=vimMapModKey,vimMapModErr nextgroup=@vimMenuList syn match vimMenuMap "\s" contained skipwhite nextgroup=vimMenuRhs -syn match vimMenuRhs ".*$" contained contains=vimString,vimComment,vimIsCommand +syn match vimMenuRhs ".*$" contained contains=vimString,vimComment,vim9Comment,vimIsCommand syn match vimMenuBang "!" contained skipwhite nextgroup=@vimMenuList -" Angle-Bracket Notation (tnx to Michael Geddes) {{{2 +" Angle-Bracket Notation: (tnx to Michael Geddes) {{{2 " ====================== syn case ignore syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cmd\|cr\|lf\|linefeed\|return\|enter\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|mouse\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket @@ -407,12 +428,15 @@ syn match vimNotation "\%#=1\(\\\|<lt>\)\=<\([cas]file\|abuf\|amatch\|cword\|cWO syn match vimBracket contained "[\\<>]" syn case match -" User Function Highlighting {{{2 +" User Function Highlighting: {{{2 " (following Gautam Iyer's suggestion) " ========================== syn match vimFunc "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*(" contains=vimFuncName,vimUserFunc,vimExecute syn match vimUserFunc contained "\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%(\w\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>" contains=vimNotation +" User Command Highlighting: {{{2 +syn match vimUsrCmd '^\s*\zs\u\w*.*$' + " Errors And Warnings: {{{2 " ==================== if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror") @@ -424,12 +448,12 @@ endif syn match vimNotFunc "\<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>" skipwhite nextgroup=vimOper,vimOperParen,vimVar,vimFunc,vimNotation -" Norm {{{2 +" Norm: {{{2 " ==== syn match vimNorm "\<norm\%[al]!\=" skipwhite nextgroup=vimNormCmds syn match vimNormCmds contained ".*$" -" Syntax {{{2 +" Syntax: {{{2 "======= syn match vimGroupList contained "@\=[^ \t,]*" contains=vimGroupSpecial,vimPatSep syn match vimGroupList contained "@\=[^ \t,]*," nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep @@ -442,8 +466,8 @@ syn match vimSynContains contained "\<contain\(s\|edin\)=" nextgroup=vimGroupLis syn match vimSynKeyContainedin contained "\<containedin=" nextgroup=vimGroupList syn match vimSynNextgroup contained "nextgroup=" nextgroup=vimGroupList -syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment -syn match vimAuSyntax contained "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment +syn match vimSyntax "\<sy\%[ntax]\>" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment +syn match vimAuSyntax contained "\s+sy\%[ntax]" contains=vimCommand skipwhite nextgroup=vimSynType,vimComment,vim9Comment syn cluster vimFuncBodyList add=vimSyntax " Syntax: case {{{2 @@ -480,7 +504,7 @@ syn match vimSynKeyOpt contained "\%#=1\<\(conceal\|contained\|transparent\|skip syn cluster vimFuncBodyList add=vimSynType " Syntax: match {{{2 -syn cluster vimSynMtchGroup contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation +syn cluster vimSynMtchGroup contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation,vim9Comment syn keyword vimSynType contained match skipwhite nextgroup=vimSynMatchRegion syn region vimSynMatchRegion contained keepend matchgroup=vimGroupName start="\h\w*" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup syn match vimSynMtchOpt contained "\%#=1\<\(conceal\|transparent\|contained\|excludenl\|keepend\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>" @@ -528,13 +552,13 @@ syn match vimSyncKey contained "\<groupthere\|grouphere\>" skipwhite nextgroup=v syn match vimSyncGroup contained "\h\w*" skipwhite nextgroup=vimSynRegPat,vimSyncNone syn keyword vimSyncNone contained NONE -" Additional IsCommand, here by reasons of precedence {{{2 +" Additional IsCommand: here by reasons of precedence {{{2 " ==================== syn match vimIsCommand "<Bar>\s*\a\+" transparent contains=vimCommand,vimNotation -" Highlighting {{{2 +" Highlighting: {{{2 " ============ -syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment +syn cluster vimHighlightCluster contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment,vim9Comment if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror") syn match vimHiCtermError contained "\D\i*" endif @@ -558,7 +582,7 @@ syn match vimHiGuiFontname contained "'[a-zA-Z\-* ]\+'" syn match vimHiGuiRgb contained "#\x\{6}" " Highlighting: hi group key=arg ... {{{2 -syn cluster vimHiCluster contains=vimGroup,vimHiBlend,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation +syn cluster vimHiCluster contains=vimGroup,vimHiBlend,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiCtermul,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation syn region vimHiKeyList contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||" contains=@vimHiCluster if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror") syn match vimHiKeyError contained "\i\+="he=e-1 @@ -567,6 +591,7 @@ syn match vimHiTerm contained "\cterm="he=e-1 nextgroup=vimHiAttribList syn match vimHiStartStop contained "\c\(start\|stop\)="he=e-1 nextgroup=vimHiTermcap,vimOption syn match vimHiCTerm contained "\ccterm="he=e-1 nextgroup=vimHiAttribList syn match vimHiCtermFgBg contained "\ccterm[fb]g="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError +syn match vimHiCtermul contained "\cctermul="he=e-1 nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError syn match vimHiGui contained "\cgui="he=e-1 nextgroup=vimHiAttribList syn match vimHiGuiFont contained "\cfont="he=e-1 nextgroup=vimHiFontname syn match vimHiGuiFgBg contained "\cgui\%([fb]g\|sp\)="he=e-1 nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib @@ -583,13 +608,14 @@ syn keyword vimHiClear contained clear nextgroup=vimHiGroup syn region vimHiLink contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$" contains=@vimHiCluster syn cluster vimFuncBodyList add=vimHiLink -" Control Characters {{{2 +" Control Characters: {{{2 " ================== syn match vimCtrlChar "[--]" " Beginners - Patterns that involve ^ {{{2 " ========= syn match vimLineComment +^[ \t:]*".*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle +syn match vim9LineComment +^[ \t:]\+#.*$+ contains=@vimCommentGroup,vimCommentString,vimCommentTitle syn match vimCommentTitle '"\s*\%([sS]:\|\h\w*#\)\=\u\w*\(\s\+\u\w*\)*:'hs=s+1 contained contains=vimCommentTitleLeader,vimTodo,@vimCommentGroup syn match vimContinue "^\s*\\" syn region vimString start="^\s*\\\z(['"]\)" skip='\\\\\|\\\z1' end="\z1" oneline keepend contains=@vimStringGroup,vimContinue @@ -602,9 +628,11 @@ syn match vimSearchDelim '^\s*\zs[/?]\|[/?]$' contained syn region vimGlobal matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/' skipwhite nextgroup=vimSubst -" Scripts : perl,ruby : Benoit Cerrina {{{2 -" ======= python,tcl: Johannes Zellner -" lua +" Embedded Scripts: {{{2 +" ================ +" perl,ruby : Benoit Cerrina +" python,tcl : Johannes Zellner +" mzscheme, lua : Charles Campbell " Allows users to specify the type of embedded script highlighting " they want: (perl/python/ruby/tcl support) @@ -706,10 +734,10 @@ if g:vimsyn_embed =~# 'P' && filereadable(s:pythonpath) unlet! b:current_syntax syn cluster vimFuncBodyList add=vimPythonRegion exe "syn include @vimPythonScript ".s:pythonpath - VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]3\=\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript - VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon]3\=\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript + VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript + VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+py\%[thon][3x]\=\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\s*<<\s*\z(\S*\)\ze\(\s*#.*\)\=$+ end=+^\z1\ze\(\s*".*\)\=$+ contains=@vimPythonScript - VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript + VimFoldP syn region vimPythonRegion matchgroup=vimScriptDelim start=+Py\%[thon]2or3\=\s*<<\s*$+ end=+\.$+ contains=@vimPythonScript syn cluster vimFuncBodyList add=vimPythonRegion else syn region vimEmbedError start=+py\%[thon]3\=\s*<<\s*\z(.*\)$+ end=+^\z1$+ @@ -818,6 +846,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimAutoCmdOpt vimOption hi def link vimAutoCmd vimCommand hi def link vimAutoEvent Type + hi def link vimAutoCmdMod Special hi def link vimAutoSet vimCommand hi def link vimBehaveModel vimBehave hi def link vimBehave vimCommand @@ -825,6 +854,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimCmplxRepeat SpecialChar hi def link vimCommand Statement hi def link vimComment Comment + hi def link vim9Comment Comment hi def link vimCommentString vimString hi def link vimCommentTitle PreProc hi def link vimCondHL vimCommand @@ -838,6 +868,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimError Error hi def link vimFBVar vimVar hi def link vimFgBgAttrib vimHiAttrib + hi def link vimHiCtermul vimHiTerm hi def link vimFold Folded hi def link vimFTCmd vimCommand hi def link vimFTOption vimSynType @@ -871,7 +902,11 @@ if !exists("skip_vim_syntax_inits") hi def link vimKeyCode vimSpecFile hi def link vimKeyword Statement hi def link vimLet vimCommand + hi def link vimLetHereDoc vimString + hi def link vimLetHereDocStart Special + hi def link vimLetHereDocStop Special hi def link vimLineComment vimComment + hi def link vim9LineComment vimComment hi def link vimMapBang vimCommand hi def link vimMapModKey vimFuncSID hi def link vimMapMod vimBracket @@ -889,6 +924,7 @@ if !exists("skip_vim_syntax_inits") hi def link vimNumber Number hi def link vimOperError Error hi def link vimOper Operator + hi def link vimOperStar vimOper hi def link vimOption PreProc hi def link vimParenSep Delimiter hi def link vimPatSepErr vimError diff --git a/runtime/syntax/xkb.vim b/runtime/syntax/xkb.vim index 59fc497e62..22be56d725 100644 --- a/runtime/syntax/xkb.vim +++ b/runtime/syntax/xkb.vim @@ -2,7 +2,7 @@ " This is a GENERATED FILE. Please always refer to source file at the URI below. " Language: XKB (X Keyboard Extension) components " Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz> -" Last Change: 2003-04-13 +" Last Change: 2020 Oct 18 " URL: http://trific.ath.cx/Ftp/vim/syntax/xkb.vim " Setup @@ -41,7 +41,7 @@ syn match xkbPhysicalKey "<\w\+>" syn keyword xkbPreproc augment include replace syn keyword xkbConstant False True syn keyword xkbModif override replace -syn keyword xkbIdentifier action affect alias allowExplicit approx baseColor button clearLocks color controls cornerRadius count ctrls description driveskbd font fontSize gap group groups height indicator indicatorDrivesKeyboard interpret key keys labelColor latchToLock latchMods left level_name map maximum minimum modifier_map modifiers name offColor onColor outline preserve priority repeat row section section setMods shape slant solid symbols text top type useModMapMods virtualModifier virtualMods virtual_modifiers weight whichModState width +syn keyword xkbIdentifier action affect alias allowExplicit approx baseColor button clearLocks color controls cornerRadius count ctrls description driveskbd font fontSize gap group groups height indicator indicatorDrivesKeyboard interpret key keys labelColor latchToLock latchMods left level_name map maximum minimum modifier_map modifiers name offColor onColor outline preserve priority repeat row section setMods shape slant solid symbols text top type useModMapMods virtualModifier virtualMods virtual_modifiers weight whichModState width syn keyword xkbFunction AnyOf ISOLock LatchGroup LatchMods LockControls LockGroup LockMods LockPointerButton MovePtr NoAction PointerButton SetControls SetGroup SetMods SetPtrDflt Terminate syn keyword xkbTModif default hidden partial virtual syn keyword xkbSect alphanumeric_keys alternate_group function_keys keypad_keys modifier_keys xkb_compatibility xkb_geometry xkb_keycodes xkb_keymap xkb_semantics xkb_symbols xkb_types diff --git a/runtime/syntax/xmath.vim b/runtime/syntax/xmath.vim index 22b3e85dae..37ae951112 100644 --- a/runtime/syntax/xmath.vim +++ b/runtime/syntax/xmath.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: xmath (a simulation tool) -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 9 +" Version: 10 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_XMATH " For version 5.x: Clear all syntax items diff --git a/runtime/syntax/xslt.vim b/runtime/syntax/xslt.vim index 3e0df6acff..900b8ca049 100644 --- a/runtime/syntax/xslt.vim +++ b/runtime/syntax/xslt.vim @@ -1,13 +1,14 @@ " Vim syntax file " Language: XSLT -" Maintainer: Johannes Zellner <johannes@zellner.org> -" Last Change: Sun, 28 Oct 2001 21:22:24 +0100 +" Maintainer: Bogdan Barbu <l4b.bogdan.barbu@gmail.com> +" Previous Maintainer: Johannes Zellner <johannes@zellner.org> +" Last Change: Fri, 17 Jan 2020 07:15:37 +0200 " Filenames: *.xsl " $Id: xslt.vim,v 1.1 2004/06/13 15:52:10 vimboss Exp $ " REFERENCES: " [1] http://www.w3.org/TR/xslt -" +" [2] http://www.w3.org/TR/xslt20 " Quit when a syntax file was already loaded if exists("b:current_syntax") @@ -19,11 +20,13 @@ runtime syntax/xml.vim syn cluster xmlTagHook add=xslElement syn case match +syn match xslElement '\%(xsl:\)\@<=analyze-string' syn match xslElement '\%(xsl:\)\@<=apply-imports' syn match xslElement '\%(xsl:\)\@<=apply-templates' syn match xslElement '\%(xsl:\)\@<=attribute' syn match xslElement '\%(xsl:\)\@<=attribute-set' syn match xslElement '\%(xsl:\)\@<=call-template' +syn match xslElement '\%(xsl:\)\@<=character-map' syn match xslElement '\%(xsl:\)\@<=choose' syn match xslElement '\%(xsl:\)\@<=comment' syn match xslElement '\%(xsl:\)\@<=copy' @@ -33,19 +36,25 @@ syn match xslElement '\%(xsl:\)\@<=document' syn match xslElement '\%(xsl:\)\@<=element' syn match xslElement '\%(xsl:\)\@<=fallback' syn match xslElement '\%(xsl:\)\@<=for-each' +syn match xslElement '\%(xsl:\)\@<=for-each-group' +syn match xslElement '\%(xsl:\)\@<=function' syn match xslElement '\%(xsl:\)\@<=if' syn match xslElement '\%(xsl:\)\@<=include' syn match xslElement '\%(xsl:\)\@<=import' +syn match xslElement '\%(xsl:\)\@<=import-schema' syn match xslElement '\%(xsl:\)\@<=key' syn match xslElement '\%(xsl:\)\@<=message' +syn match xslElement '\%(xsl:\)\@<=namespace' syn match xslElement '\%(xsl:\)\@<=namespace-alias' syn match xslElement '\%(xsl:\)\@<=number' syn match xslElement '\%(xsl:\)\@<=otherwise' syn match xslElement '\%(xsl:\)\@<=output' syn match xslElement '\%(xsl:\)\@<=param' +syn match xslElement '\%(xsl:\)\@<=perform-sort' syn match xslElement '\%(xsl:\)\@<=processing-instruction' syn match xslElement '\%(xsl:\)\@<=preserve-space' syn match xslElement '\%(xsl:\)\@<=script' +syn match xslElement '\%(xsl:\)\@<=sequence' syn match xslElement '\%(xsl:\)\@<=sort' syn match xslElement '\%(xsl:\)\@<=strip-space' syn match xslElement '\%(xsl:\)\@<=stylesheet' diff --git a/runtime/syntax/xxd.vim b/runtime/syntax/xxd.vim index f3c43e816c..2f90b6b0bd 100644 --- a/runtime/syntax/xxd.vim +++ b/runtime/syntax/xxd.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: bin using xxd -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Aug 31, 2016 -" Version: 10 +" Version: 11 " Notes: use :help xxd to see how to invoke it " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_XXD diff --git a/runtime/syntax/yacc.vim b/runtime/syntax/yacc.vim index 3f27bce443..459873e3dc 100644 --- a/runtime/syntax/yacc.vim +++ b/runtime/syntax/yacc.vim @@ -1,8 +1,8 @@ " Vim syntax file " Language: Yacc -" Maintainer: Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz> +" Maintainer: Charles E. Campbell <NcampObell@SdrPchip.AorgM-NOSPAM> " Last Change: Mar 25, 2019 -" Version: 16 +" Version: 17 " URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_YACC " " Options: {{{1 diff --git a/runtime/syntax/yaml.vim b/runtime/syntax/yaml.vim index 626dc8a77f..49f7d049a7 100644 --- a/runtime/syntax/yaml.vim +++ b/runtime/syntax/yaml.vim @@ -3,6 +3,7 @@ " Maintainer: Nikolai Pavlov <zyx.vim@gmail.com> " First author: Nikolai Weibull <now@bitwi.se> " Latest Revision: 2015-03-28 +" removed duplicate yamlKeyValueDelimiter (pull #4799) if exists('b:current_syntax') finish @@ -150,7 +151,6 @@ syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValue syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained syn match yamlKeyValueDelimiter /\s*:/ contained -syn match yamlKeyValueDelimiter /\s*:/ contained syn cluster yamlScalarWithSpecials contains=yamlPlainScalar,yamlBlockMappingKey,yamlFlowMappingKey diff --git a/runtime/tools/check_colors.vim b/runtime/tools/check_colors.vim index e4acbc33ec..966072c706 100644 --- a/runtime/tools/check_colors.vim +++ b/runtime/tools/check_colors.vim @@ -185,7 +185,7 @@ func! Test_check_colors() " 9) Normal should be defined first, not use reverse, fg or bg call cursor(1,1) - let pat = 'hi\%[light] \+\%(link\|clear\)\@!\w\+\>' + let pat = 'hi\%[ghlight] \+\%(link\|clear\)\@!\w\+\>' call search(pat, 'cW') " Look for the first hi def, skipping `hi link` and `hi clear` if getline('.') !~# '\m\<Normal\>' let err['highlight']['Normal'] = 'Should be defined first' |