summaryrefslogtreecommitdiffstatshomepage
path: root/runtime/ftplugin/html.vim
AgeCommit message (Collapse)AuthorFiles
2025-09-15vim-patch:81ca991: runtime(html): guard against an existing b:undo_ftplugin ↵zeertzjq1
var (#35763) Filetype plugins should not assume they are the only file to execute on behalf of a buffer's filetype: other filetypes may use them, and dotted filetypes may cause multiple to run. When this occurs, they should _build_ on their respective b:undo_ftplugin settings, not overwrite each other. For example, when using a dotted filetype wiki.markdown, the wiki filetype plugins go first. Then, during the markdown filetype plugins, the HTML plugin's unconditional assignment to b:undo_ftplugin trashes any data previously stored there by the wiki filetype. Follow the pattern elsewhere of assigning or appending conditionally. closes: vim/vim#18267 https://github.com/vim/vim/commit/81ca9916d2fb2675a1a6da22fd68d26fb0ee8b8e Co-authored-by: D. Ben Knoble <ben.knoble+github@gmail.com>
2025-05-11vim-patch:dc7ed8f: runtime(html): Optionally fold tags with the "expr" methodChristian Clason1
Tag folding poses a few difficulties. Many elements, e.g. "blockquote", are always delimited by start and end tags; end tags for some elements, e.g. "p", can be omitted in certain contexts; void elements, e.g. "hr", have no end tag. Although the rules for supporting omissible end tags are ad-hoc and involved, they apply to elements in scope. Assuming syntactical wellformedness, an end tag can be associated with its nearest matching start tag discoverable in scope and towards the beginning of a file, whereas all unbalanced tags and inlined tags can be disregarded. For example: ------------------------------------------------------------ <!DOCTYPE html> <html lang="en"> <!-- >1 : 1 --> <body> <!-- >2 : 2 --> <p>Paragraph vim/vim#1. <!-- = : 2 --> <p> <!-- >3 : 3 --> Paragraph vim/vim#2. <!-- = : 3 --> </p> <!-- <3 : 3 --> <p>Paragraph vim/vim#3.</p> <!-- = : 2 --> </body> <!-- <2 : 2 --> </html> <!-- <1 : 1 --> ------------------------------------------------------------ (HTML comments here, "<!-- ... -->", record two values for each folded line that are separated by ":", a value obtained from "&foldexpr" and a value obtained from "foldlevel()".) Innermost foldedable tags will be flattened. For example: ------------------------------------------------------------ <!DOCTYPE html> <html lang="en"> <!-- >1 : 1 --> <body> <!-- >2 : 2 --> <div class="block"> <!-- >3 : 3 --> <pre><code> <!-- >4 : 4 --> [CODE SNIPPET] <!-- = : 4 --> </code></pre> <!-- <4 : 4 --> </div> <!-- <3 : 3 --> </body> <!-- <2 : 2 --> </html> <!-- <1 : 1 --> ------------------------------------------------------------ No folding will be requested for the "<code>"-"</code>" tag pair and reflected by "&foldexpr" because such a fold would have claimed the same lines that the immediate fold of the "<pre>"-"</pre>" tag already claims. Run-on folded tags may confuse Vim. When a file such as: ------------------------------------------------------------ <!DOCTYPE html> <html lang="en"> <!-- >1 : 1 --> <body> <!-- >2 : 2 --> <div class="block"> <!-- >3 : 3 --> <pre> <!-- >4 : 4 --> <code> <!-- >5 : 5 --> [CODE SNIPPET vim/vim#1] <!-- = : 5 --> </code> <!-- <5 : 5 --> </pre> <!-- <4 : 4 --> </div> <!-- <3 : 3 --> <!-- = : 3 --> <div class="block"> <!-- >3 : 3 --> <pre> <!-- >4 : 4 --> <code> <!-- >5 : 5 --> [CODE SNIPPET vim/vim#2] <!-- = : 5 --> </code> <!-- <5 : 5 --> </pre> <!-- <4 : 4 --> </div> <!-- <3 : 3 --> </body> <!-- <2 : 2 --> </html> <!-- <1 : 1 --> ------------------------------------------------------------ is reformatted as follows: ------------------------------------------------------------ <!DOCTYPE html> <html lang="en"> <!-- >1 : 1 --> <body> <!-- >2 : 2 --> <div class="block"> <!-- >3 : 3 --> <pre> <!-- >4 : 4 --> <code> <!-- >5 : 5 --> [CODE SNIPPET vim/vim#1] <!-- = : 5 --> </code> <!-- <5 : 5 --> </pre> <!-- <4 : 4 --> </div><div class="block"><pre><code> <!-- <3 : 3 --> [CODE SNIPPET vim/vim#2] <!-- = : 2 ? --> </code> <!-- <5 : 2 ? --> </pre> <!-- <4 : 2 ? --> </div> <!-- <3 : 2 ? --> </body> <!-- <2 : 2 --> </html> <!-- <1 : 1 --> ------------------------------------------------------------ "&foldexpr" values will not be used as is for the lines between (and including) "[CODE SNIPPET vim/vim#2]" and "</div>". (Cf. v9.1.0002.) Having syntax highlighting in effect, tag folding using the "fold-expr" method can be enabled with: ------------------------------------------------------------ let g:html_expr_folding = 1 ------------------------------------------------------------ By default, tag folding will be redone from scratch after each occurrence of a TextChanged or an InsertLeave event. Such frequency may not be desired, especially for large files, and this recomputation can be disabled with: ------------------------------------------------------------ let g:html_expr_folding_without_recomputation = 1 doautocmd FileType ------------------------------------------------------------ To force another recomputation, do: ------------------------------------------------------------ unlet! b:foldsmap normal zx ------------------------------------------------------------ References: https://web.archive.org/web/20250328105626/https://html.spec.whatwg.org/multipage/syntax.html#optional-tags https://en.wikipedia.org/wiki/Dangling_else closes: vim/vim#17141 https://github.com/vim/vim/commit/dc7ed8f946a3109460435221ad45f92486c4ebca Co-authored-by: Aliaksei Budavei <0x000c70@gmail.com>
2024-06-04vim-patch:9.1.0464: no whitespace padding in commentstring option in ftpluginsChristian Clason1
Problem: no whitespace padding in commentstring option in ftplugins Solution: Change default to include whitespace padding, update existing filetype plugins with the new default value (Riley Bruins) closes: vim/vim#14843 https://github.com/vim/vim/commit/0a0830624a260660c7fa692ecb7e6e5de09114ba Co-authored-by: Riley Bruins <ribru17@hotmail.com>
2024-01-15vim-patch:93197fde0f1dChristian Clason1
runtime(ftplugin): Use "*" browsefilter pattern to match "All Files" Problem: The "*.*" browsefilter pattern only matches all files on Windows (Daryl Lee) Solution: Use "*" to filter on all platforms but keep "*.*" as the label text on Windows. (Fixes vim/vim#12685, Doug Kearns) The *.* browsefilter pattern used to match "All Files" on Windows is a legacy of the DOS 8.3 filename wildcard matching algorithm. For reasons of backward compatibility this still works on Windows to match all files, even those without an extension. However, this pattern only matches filenames containing a dot on other platforms. This often makes files without an extension difficult to access from the file dialog, e.g., "Makefile" On Windows it is still standard practice to use "*.*" for the filter label so ftplugins should use "All Files (*.*)" on Windows and "All Files (*)" on other platforms. This matches Vim's default browsefilter values. This commit also normalises the browsefilter conditional test to check for the Win32 and GTK GUI features and an unset b:browsefilter. closes: vim/vim#12759 https://github.com/vim/vim/commit/93197fde0f1db09b1e495cf3eb14a8f42c318b80 Co-authored-by: Doug Kearns <dougkearns@gmail.com>
2022-07-26vim-patch:b529cfbd04c0 (#19501)Christian Clason1
Update runtime files https://github.com/vim/vim/commit/b529cfbd04c02e31cfa88f2c8d88b5ff532d4f7d
2022-03-09vim-patch:partial 1588bc8ebee2 (#17656)Christian Clason1
Update runtime files https://github.com/vim/vim/commit/1588bc8ebee22f2855f27273fc2234fff370f86c omit: doc updates
2014-07-29re-integrate runtime/ vim-patch:0 #938Justin M. Keyes1
Vim runtime files based on 7.4.384 / hg changeset 7090d7f160f7 Excluding: Amiga icons (*.info, icons/) doc/hangulin.txt tutor/ spell/ lang/ (only used for menu translations) macros/maze/, macros/hanoi/, macros/life/, macros/urm/ These were used to test vi compatibility. termcap "Demonstration of a termcap file (for the Amiga and Archimedes)" Helped-by: Rich Wareham <rjw57@cam.ac.uk> Helped-by: John <john.schmidt.h@gmail.com> Helped-by: Yann <yann@yann-salaun.com> Helped-by: Christophe Badoit <c.badoit@lesiteimmo.com> Helped-by: drasill <github@tof2k.com> Helped-by: Tae Sandoval Murgan <taecilla@gmail.com> Helped-by: Lowe Thiderman <lowe.thiderman@gmail.com>