neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

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"