├── README.md ├── example.gmi ├── ftdetect └── gemtext.vim └── syntax └── gemtext.vim /README.md: -------------------------------------------------------------------------------- 1 | # vim-syntax-gemtext 2 | 3 | This is a Gemtext syntax mode for [vim](https://www.vim.org), with syntax highlighting and file type detection. 4 | 5 | ## Setup 6 | 7 | Copy `syntax/gemtext.vim` to `~/.vim/syntax/gemtext.vim`. 8 | 9 | > This file describes the "gemtext" syntax mode. It matches the `text/gemini` MIME type described by the [gemtext specification](https://geminiprotocol.net/docs/gemtext-specification.gmi). 10 | 11 | Copy `ftdetect/gemtext.vim` to `~/.vim/ftdetect/gemtext.vim`. 12 | 13 | > This file associates Gemtext syntax with files ending in ".gmi" and ".gemini". 14 | 15 | To test, open `example.gmi` in a new vim process. 16 | -------------------------------------------------------------------------------- /example.gmi: -------------------------------------------------------------------------------- 1 | # Heading level one 2 | ## Heading level two 3 | ### Heading level three 4 | #### Not a heading 5 | 6 | #Also heading level one 7 | ##Also heading level two 8 | ###Also heading level three 9 | ####Not a heading 10 | 11 | => .. A relative link 12 | => gemini://gemini.circumlunar.space:1965/ An absolute link 13 | => an-untitled-link.gmi 14 | 15 | Here's a regular text paragraph. 16 | 17 | * List item one 18 | * List item two 19 | * Not a list item 20 | *Also not a list item 21 | 22 | >Quotation 23 | > More quotation 24 | > Yes, a quotation 25 | >No, not a quotation 26 | 27 | ```language 28 | This is a preformat block. 29 | 30 | # Not really a heading 31 | => gemini://url Not really a link 32 | * Not really a list item 33 | > Not really a quotation 34 | ``` 35 | -------------------------------------------------------------------------------- /ftdetect/gemtext.vim: -------------------------------------------------------------------------------- 1 | " Vim file type detection for Gemtext markup 2 | 3 | au BufRead,BufNewFile *.gmi set filetype=gemtext 4 | au BufRead,BufNewFile *.gemini set filetype=gemtext 5 | -------------------------------------------------------------------------------- /syntax/gemtext.vim: -------------------------------------------------------------------------------- 1 | " Vim syntax file for Gemtext markup 2 | " as described by section 5 of the Gemini Specification 3 | " https://gemini.circumlunar.space/docs/specification.html 4 | 5 | if exists("b:current_syntax") 6 | finish 7 | endif 8 | 9 | syntax sync fromstart 10 | 11 | syntax match gemtextLinkOperator '\v^\=\>' nextgroup=gemtextLinkURL skipwhite 12 | syntax match gemtextLinkURL '\v\S+' contained nextgroup=gemtextLinkText skipwhite 13 | syntax match gemtextLinkText '\v\S.*$' contained 14 | 15 | syntax match gemtextHeadingOperator '\v^\##?#?' nextgroup=gemtextHeadingText skipwhite 16 | syntax match gemtextHeadingText '\v\s*\S.*$' contained 17 | syntax match gemtextNotAHeadingOperator '\v^\####' 18 | 19 | syntax match gemtextUnorderedListItemOperator '\v^\*\s' 20 | 21 | syntax match gemtextQuoteOperator '\v^\>' nextgroup=gemtextQuoteText skipwhite 22 | syntax match gemtextQuoteText '\v.*$' contained 23 | 24 | syntax region gemtextPreformatBlock start="\v^```.*$" end="\v^```" keepend 25 | 26 | let b:current_syntax = "gemtext" 27 | 28 | hi def link gemtextLinkOperator Operator 29 | hi def link gemtextLinkURL Underlined 30 | hi def link gemtextLinkText String 31 | 32 | hi def link gemtextHeadingOperator Operator 33 | hi def link gemtextHeadingText Identifier 34 | 35 | hi def link gemtextUnorderedListItemOperator Operator 36 | 37 | hi def link gemtextQuoteOperator Operator 38 | hi def link gemtextQuoteText String 39 | 40 | hi def link gemtextPreformatBlock PreProc 41 | --------------------------------------------------------------------------------