csv.vim (1296B)
1 " Maintainer: Maxim Kim <habamax@gmail.com> 2 " Converted from vim9script 3 " Last Update: 2024-06-18 4 5 if exists("b:current_syntax") 6 finish 7 endif 8 9 let s:delimiter = get(b:, "csv_delimiter", ",") 10 11 " generate bunch of following syntaxes: 12 " syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0 13 " syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0 14 for s:col in range(8, 0, -1) 15 let s:ncol = (s:col == 8 ? 0 : s:col + 1) 16 exe $'syntax match csvCol{s:col}' .. ' /.\{-}\(' .. s:delimiter .. '\|$\)/ nextgroup=escCsvCol' .. s:ncol .. ',csvCol' .. s:ncol 17 exe $'syntax region escCsvCol{s:col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. s:delimiter .. '\|$\)/ nextgroup=escCsvCol' .. s:ncol .. ',csvCol' .. s:ncol 18 endfor 19 20 hi def link csvCol1 Statement 21 hi def link csvCol2 Constant 22 hi def link csvCol3 Type 23 hi def link csvCol4 PreProc 24 hi def link csvCol5 Identifier 25 hi def link csvCol6 Special 26 hi def link csvCol7 String 27 hi def link csvCol8 Comment 28 29 hi def link escCsvCol1 csvCol1 30 hi def link escCsvCol2 csvCol2 31 hi def link escCsvCol3 csvCol3 32 hi def link escCsvCol4 csvCol4 33 hi def link escCsvCol5 csvCol5 34 hi def link escCsvCol6 csvCol6 35 hi def link escCsvCol7 csvCol7 36 hi def link escCsvCol8 csvCol8 37 38 let b:current_syntax = "csv"