Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1 | " Vim filetype plugin file |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 2 | " Language: HTML |
| 3 | " Maintainer: Doug Kearns <dougkearns@gmail.com> |
| 4 | " Previous Maintainer: Dan Sharp |
Doug Kearns | 93197fd | 2024-01-14 20:59:02 +0100 | [diff] [blame] | 5 | " Last Change: 2024 Jan 14 |
Aliaksei Budavei | dc7ed8f | 2025-05-10 21:40:41 +0200 | [diff] [blame] | 6 | " 2024 May 24 update 'commentstring' option |
| 7 | " 2025 May 10 add expression folding #17141 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 8 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 9 | if exists("b:did_ftplugin") |
| 10 | finish |
| 11 | endif |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 12 | let b:did_ftplugin = 1 |
| 13 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 14 | let s:save_cpo = &cpo |
| 15 | set cpo-=C |
| 16 | |
Bram Moolenaar | a7241f5 | 2008-06-24 20:39:31 +0000 | [diff] [blame] | 17 | setlocal matchpairs+=<:> |
Riley Bruins | 0a08306 | 2024-06-03 20:40:45 +0200 | [diff] [blame] | 18 | setlocal commentstring=<!--\ %s\ --> |
Bram Moolenaar | e37d50a | 2008-08-06 17:06:04 +0000 | [diff] [blame] | 19 | setlocal comments=s:<!--,m:\ \ \ \ ,e:--> |
| 20 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 21 | let b:undo_ftplugin = "setlocal comments< commentstring< matchpairs<" |
| 22 | |
| 23 | if get(g:, "ft_html_autocomment", 0) |
| 24 | setlocal formatoptions-=t formatoptions+=croql |
| 25 | let b:undo_ftplugin ..= " | setlocal formatoptions<" |
Bram Moolenaar | e37d50a | 2008-08-06 17:06:04 +0000 | [diff] [blame] | 26 | endif |
| 27 | |
Bram Moolenaar | f193fff | 2006-04-27 00:02:13 +0000 | [diff] [blame] | 28 | if exists('&omnifunc') |
Bram Moolenaar | 946e27a | 2014-06-25 18:50:27 +0200 | [diff] [blame] | 29 | setlocal omnifunc=htmlcomplete#CompleteTags |
| 30 | call htmlcomplete#DetectOmniFlavor() |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 31 | let b:undo_ftplugin ..= " | setlocal omnifunc<" |
Bram Moolenaar | f193fff | 2006-04-27 00:02:13 +0000 | [diff] [blame] | 32 | endif |
Bram Moolenaar | 4a85b41 | 2006-04-23 22:40:29 +0000 | [diff] [blame] | 33 | |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 34 | " HTML: thanks to Johannes Zellner and Benji Fisher. |
| 35 | if exists("loaded_matchit") && !exists("b:match_words") |
| 36 | let b:match_ignorecase = 1 |
| 37 | let b:match_words = '<!--:-->,' .. |
| 38 | \ '<:>,' .. |
| 39 | \ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .. |
| 40 | \ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .. |
| 41 | \ '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>' |
| 42 | let b:html_set_match_words = 1 |
| 43 | let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 44 | endif |
| 45 | |
| 46 | " Change the :browse e filter to primarily show HTML-related files. |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 47 | if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") |
Doug Kearns | 93197fd | 2024-01-14 20:59:02 +0100 | [diff] [blame] | 48 | let b:browsefilter = "HTML Files (*.html, *.htm)\t*.html;*.htm\n" .. |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 49 | \ "JavaScript Files (*.js)\t*.js\n" .. |
Doug Kearns | 93197fd | 2024-01-14 20:59:02 +0100 | [diff] [blame] | 50 | \ "Cascading StyleSheets (*.css)\t*.css\n" |
| 51 | if has("win32") |
| 52 | let b:browsefilter ..= "All Files (*.*)\t*\n" |
| 53 | else |
| 54 | let b:browsefilter ..= "All Files (*)\t*\n" |
| 55 | endif |
Bram Moolenaar | b529cfb | 2022-07-25 15:42:07 +0100 | [diff] [blame] | 56 | let b:html_set_browsefilter = 1 |
| 57 | let b:undo_ftplugin ..= " | unlet! b:browsefilter b:html_set_browsefilter" |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 58 | endif |
| 59 | |
Aliaksei Budavei | dc7ed8f | 2025-05-10 21:40:41 +0200 | [diff] [blame] | 60 | if has("folding") && get(g:, "html_expr_folding", 0) |
| 61 | function! HTMLTagFold() abort |
| 62 | if empty(get(b:, "foldsmap", {})) |
| 63 | if empty(get(b:, "current_syntax", '')) |
| 64 | return '0' |
| 65 | else |
| 66 | let b:foldsmap = htmlfold#MapBalancedTags() |
| 67 | endif |
| 68 | endif |
| 69 | |
| 70 | return get(b:foldsmap, v:lnum, '=') |
| 71 | endfunction |
| 72 | |
| 73 | setlocal foldexpr=HTMLTagFold() |
| 74 | setlocal foldmethod=expr |
| 75 | let b:undo_ftplugin ..= " | setlocal foldexpr< foldmethod<" |
| 76 | |
| 77 | if !get(g:, "html_expr_folding_without_recomputation", 0) |
| 78 | augroup htmltagfold |
| 79 | autocmd! htmltagfold |
| 80 | autocmd TextChanged,InsertLeave <buffer> let b:foldsmap = {} |
| 81 | augroup END |
| 82 | |
| 83 | " XXX: Keep ":autocmd" last in "b:undo_ftplugin" (see ":help :bar"). |
| 84 | let b:undo_ftplugin ..= " | silent! autocmd! htmltagfold * <buffer>" |
| 85 | endif |
| 86 | endif |
| 87 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 88 | let &cpo = s:save_cpo |
Bram Moolenaar | 84f7235 | 2012-03-11 15:57:40 +0100 | [diff] [blame] | 89 | unlet s:save_cpo |
Aliaksei Budavei | dc7ed8f | 2025-05-10 21:40:41 +0200 | [diff] [blame] | 90 | |
| 91 | " See ":help vim9-mix". |
| 92 | if !has("vim9script") |
| 93 | finish |
| 94 | endif |
| 95 | |
| 96 | if exists("*g:HTMLTagFold") |
| 97 | def! g:HTMLTagFold(): string |
| 98 | if empty(get(b:, "foldsmap", {})) |
| 99 | if empty(get(b:, "current_syntax", '')) |
| 100 | return '0' |
| 101 | else |
| 102 | b:foldsmap = g:htmlfold#MapBalancedTags() |
| 103 | endif |
| 104 | endif |
| 105 | |
| 106 | return get(b:foldsmap, v:lnum, '=') |
| 107 | enddef |
| 108 | endif |