runtime(csv): include a simple csv filetype and syntax plugin
fixes: #15038 Signed-off-by: Maxim Kim <habamax@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
26de90c631
commit
1ce65e35ac
2
.github/MAINTAINERS
vendored
2
.github/MAINTAINERS
vendored
@ -119,6 +119,7 @@ runtime/ftplugin/clojure.vim @axvr
|
||||
runtime/ftplugin/cs.vim @nickspoons
|
||||
runtime/ftplugin/csh.vim @dkearns
|
||||
runtime/ftplugin/css.vim @dkearns
|
||||
runtime/ftplugin/csv.vim @habamax
|
||||
runtime/ftplugin/cucumber.vim @tpope
|
||||
runtime/ftplugin/dart.vim @ribru17
|
||||
runtime/ftplugin/deb822sources.vim @jamessan
|
||||
@ -369,6 +370,7 @@ runtime/syntax/chatito.vim @ObserverOfTime
|
||||
runtime/syntax/chuck.vim @gacallea
|
||||
runtime/syntax/clojure.vim @axvr
|
||||
runtime/syntax/cs.vim @nickspoons
|
||||
runtime/syntax/csv.vim @habamax
|
||||
runtime/syntax/cucumber.vim @tpope
|
||||
runtime/syntax/d.vim @JesseKPhillips
|
||||
runtime/syntax/dart.vim @pr3d4t0r
|
||||
|
23
runtime/ftplugin/csv.vim
Normal file
23
runtime/ftplugin/csv.vim
Normal file
@ -0,0 +1,23 @@
|
||||
vim9script
|
||||
|
||||
# Maintainer: Maxim Kim <habamax@gmail.com>
|
||||
# Last Update: 2024-06-18
|
||||
|
||||
if !exists("b:csv_delimiter")
|
||||
# detect delimiter
|
||||
var delimiters = ",;\t|"
|
||||
|
||||
var max = 0
|
||||
for d in delimiters
|
||||
var count = getline(1)->split(d)->len() + getline(2)->split(d)->len()
|
||||
if count > max
|
||||
max = count
|
||||
b:csv_delimiter = d
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
|
||||
if exists("b:did_ftplugin")
|
||||
finish
|
||||
endif
|
||||
b:did_ftplugin = 1
|
39
runtime/syntax/csv.vim
Normal file
39
runtime/syntax/csv.vim
Normal file
@ -0,0 +1,39 @@
|
||||
vim9script
|
||||
|
||||
# Maintainer: Maxim Kim <habamax@gmail.com>
|
||||
# Last Update: 2024-06-18
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
var delimiter = get(b:, "csv_delimiter", ",")
|
||||
|
||||
# generate bunch of following syntaxes:
|
||||
# syntax match csvCol8 /.\{-}\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
|
||||
# syntax region escCsvCol8 start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(,\|$\)/ nextgroup=escCsvCol0,csvCol0
|
||||
for col in range(8, 0, -1)
|
||||
var ncol = (col == 8 ? 0 : col + 1)
|
||||
exe $'syntax match csvCol{col}' .. ' /.\{-}\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
|
||||
exe $'syntax region escCsvCol{col}' .. ' start=/ *"\([^"]*""\)*[^"]*/ end=/" *\(' .. delimiter .. '\|$\)/ nextgroup=escCsvCol' .. ncol .. ',csvCol' .. ncol
|
||||
endfor
|
||||
|
||||
hi def link csvCol1 Statement
|
||||
hi def link csvCol2 Constant
|
||||
hi def link csvCol3 Type
|
||||
hi def link csvCol4 PreProc
|
||||
hi def link csvCol5 Identifier
|
||||
hi def link csvCol6 Special
|
||||
hi def link csvCol7 String
|
||||
hi def link csvCol8 Comment
|
||||
|
||||
hi def link escCsvCol1 csvCol1
|
||||
hi def link escCsvCol2 csvCol2
|
||||
hi def link escCsvCol3 csvCol3
|
||||
hi def link escCsvCol4 csvCol4
|
||||
hi def link escCsvCol5 csvCol5
|
||||
hi def link escCsvCol6 csvCol6
|
||||
hi def link escCsvCol7 csvCol7
|
||||
hi def link escCsvCol8 csvCol8
|
||||
|
||||
b:current_syntax = "csv"
|
Reference in New Issue
Block a user