Compare commits

...

127 Commits

Author SHA1 Message Date
glepnir
1c2b258250 patch 9.1.1310: completion: redundant check for preinsert effect
Problem:  Duplicate check for preinsert effect, particularly for Ctrl_w
          and Ctrl_U.
Solution: Remove the specific check for Ctrl_w and Ctrl_U to eliminate
          redundancy (glepnir).

closes: #17129

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-16 19:41:19 +02:00
Doug Kearns
40daa1358c runtime(gleam): Update ftplugin, use recommended_style config variable
Wrap the setting of basic whitespace formatting options in a conditional
block, following the de facto standard.

Setting 'et', 'sts' and 'sw' can be disabled by setting
"gleam_recommended_style" to false.

Follow up to PR #17086.

closes: #17128

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-16 18:29:15 +02:00
zeertzjq
031919c7ac patch 9.1.1309: tests: no test for 'pummaxwidth' with non-truncated "kind"
Problem:  tests: no test for 'pummaxwidth' with non-truncated "kind".
Solution: Add a test with "kind" and larger 'pummaxwidth' (zeertzjq).

closes: #17126

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-16 18:23:23 +02:00
Eisuke Kawashima
fbbaa6ebe9 runtime: set 'cpoptions' for line-continuation in various runtime files
closes: #17121

Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-16 18:20:59 +02:00
Christian Brabandt
470317f78b runtime(tar): remove dependency on netrw#WinPath, include mapping doc
related: #17124

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-16 17:14:55 +02:00
Luca Saccarola
839fd94265 runtime(netrw): remove deprecated functions
closes: #17124

Signed-off-by: Luca Saccarola <github.e41mv@aleeas.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 20:28:09 +02:00
Girish Palya
b156588eb7 patch 9.1.1308: completion: cannot order matches by distance to cursor
Problem:  During insert-mode completion, the most relevant match is often
          the one closest to the cursor—frequently just above the current line.
          However, both `<C-N>` and `<C-P>` tend to rank candidates from the
          current buffer that appear above the cursor near the bottom of the
          completion menu, rather than near the top. This ordering can feel
          unintuitive, especially when `noselect` is active, as it doesn't
          prioritize the most contextually relevant suggestions.

Solution: This change introduces a new sub-option value "nearest" for the
          'completeopt' setting. When enabled, matches from the current buffer
          are prioritized based on their proximity to the cursor position,
          improving the relevance of suggestions during completion
          (Girish Palya).

Key Details:
- Option: "nearest" added to 'completeopt'
- Applies to: Matches from the current buffer only
- Effect: Sorts completion candidates by their distance from the cursor
- Interaction with other options:
  - Has no effect if the `fuzzy` option is also present

This feature is helpful especially when working within large buffers where
multiple similar matches may exist at different locations.

You can test this feature with auto-completion using the snippet below. Try it
in a large file like `vim/src/insexpand.c`, where you'll encounter many
potential matches. You'll notice that the popup menu now typically surfaces the
most relevant matches—those closest to the cursor—at the top. Sorting by
spatial proximity (i.e., contextual relevance) often produces more useful
matches than sorting purely by lexical distance ("fuzzy").

Another way to sort matches is by recency, using an LRU (Least Recently Used)
cache—essentially ranking candidates based on how recently they were used.
However, this is often overkill in practice, as spatial proximity (as provided
by the "nearest" option) is usually sufficient to surface the most relevant
matches.

```vim
set cot=menuone,popup,noselect,nearest inf

def SkipTextChangedIEvent(): string
    # Suppress next event caused by <c-e> (or <c-n> when no matches found)
    set eventignore+=TextChangedI
    timer_start(1, (_) => {
        set eventignore-=TextChangedI
    })
    return ''
enddef

autocmd TextChangedI * InsComplete()

def InsComplete()
    if getcharstr(1) == '' && getline('.')->strpart(0, col('.') - 1) =~ '\k$'
        SkipTextChangedIEvent()
        feedkeys("\<c-n>", "n")
    endif
enddef

inoremap <silent> <c-e> <c-r>=<SID>SkipTextChangedIEvent()<cr><c-e>

inoremap <silent><expr> <tab>   pumvisible() ? "\<c-n>" : "\<tab>"
inoremap <silent><expr> <s-tab> pumvisible() ? "\<c-p>" : "\<s-tab>"
```

closes: #17076

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 20:16:00 +02:00
Eisuke Kawashima
f35bd76b31 patch 9.1.1307: make syntax does not reliably detect different flavors
Problem:  GNU extensions, such as `ifeq` and `wildcard` function, are
          highlighted in BSDmakefile
Solution: detect BSD, GNU, or Microsoft implementation according to
	  filename, user-defined global variables, or file contents

closes: #17089

Co-authored-by: Roland Hieber <rohieb@users.noreply.github.com>
Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 19:20:06 +02:00
glepnir
32f2bb6e1e patch 9.1.1306: completion menu rendering can be improved
Problem:  Parts of the popup menu were rendered twice when the popup was
          at maximum width because the truncation flag was being set too
          liberally.
Solution: Make the truncation condition more precise by only setting it
          when there's exactly one character of space remaining
          (glepnir).

closes: #17108

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 19:06:58 +02:00
glepnir
cf7f01252f patch 9.1.1305: completion menu active after switching windows/tabs
Problem:  When switching to another window or tab page while the
          completion menu is active, the menu stays visible, although it
          belongs to the previous window/tab page context (Evgeni
          Chasnovski).
Solution: Track the window and tab page where completion started. Detect
          changes in the main editing loop and cancel completion mode if
          the current window or tab page differs from where completion
          started.

fixes: #17090
closes: #17101

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 19:02:00 +02:00
Eisuke Kawashima
babdb0554a patch 9.1.1304: filetype: some man files are not recognized
Problem:  filetype: some man files are not recognized
          (e.g. 1p (POSIX commands))
Solution: update the filetype detection pattern and detect more man
          files as nroff (Eisuke Kawashima)

- sections are revised referring to
    - debian-12:/etc/manpath.config
    - fedora-41:/etc/man_db.conf
- detection logic is improved
- detection test is implemented

closes: #17117

Signed-off-by: Eisuke Kawashima <e-kwsm@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 18:30:05 +02:00
Luca Saccarola
d62377386c runtime(netrw): upstream snapshot of v180
relevant commits:
- fix(gvim): don't set previous jump
- don't overwrite copy, copydir, mkdir and move command options
- fix: correctly name deprecate function
- refactor: remove s:NetrwBufRemover
- refactor: s:NetrwDelete -> netrw#fs#Remove
- defaults!: remove g:netrw_use_errorwindow

fixes: #17114
closes: #17123

Signed-off-by: Luca Saccarola <github.e41mv@aleeas.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 18:26:32 +02:00
John Marriott
2137710b43 patch 9.1.1303: missing out-of-memory check in linematch.c
Problem:  missing out-of-memory check in linematch.c
Solution: return early in case of memory allocation failure, move the
          pow() calculation ouside of the for() loop
          (John Marriott)

closes: #17118

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 18:15:24 +02:00
Christian Brabandt
d2079cff48 patch 9.1.1302: Coverity warns about using uninitialized value
Problem:  Coverity warns about using uninitialized value
          (Coverity, Tony Mechelynck, after v9.1.1301)
Solution: initialize callback pointer to NULL

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-15 18:10:26 +02:00
Girish Palya
cbe53191d0 patch 9.1.1301: completion: cannot configure completion functions with 'complete'
Problem:  completion: cannot configure completion functions with
          'complete'
Solution: add support for setting completion functions using the f and o
          flag for 'complete' (Girish Palya)

This change adds two new values to the `'complete'` (`'cpt'`) option:
- `f` – invokes the function specified by the `'completefunc'` option
- `f{func}` – invokes a specific function `{func}` (can be a string or `Funcref`)

These new flags extend keyword completion behavior (e.g., via `<C-N>` /
`<C-P>`) by allowing function-based sources to participate in standard keyword
completion.

**Key behaviors:**

- Multiple `f{func}` values can be specified, and all will be called in order.
- Functions should follow the interface defined in `:help complete-functions`.
- When using `f{func}`, escaping is required for spaces (with `\`) and commas
  (with `\\`) in `Funcref` names.
- If a function sets `'refresh'` to `'always'`, it will be re-invoked on every
  change to the input text. Otherwise, Vim will attempt to reuse and filter
  existing matches as the input changes, which matches the default behavior of
  other completion sources.
- Matches are inserted at the keyword boundary for consistency with other completion methods.
- If finding matches is time-consuming, `complete_check()` can be used to
  maintain responsiveness.
- Completion matches are gathered in the sequence defined by the `'cpt'`
  option, preserving source priority.

This feature increases flexibility of standard completion mechanism and may
reduce the need for external completion plugins for many users.

**Examples:**

Complete matches from [LSP](https://github.com/yegappan/lsp) client. Notice the use of `refresh: always` and `function()`.

```vim
set cpt+=ffunction("g:LspCompletor"\\,\ [5]). # maxitems = 5

def! g:LspCompletor(maxitems: number, findstart: number, base: string): any
    if findstart == 1
        return g:LspOmniFunc(findstart, base)
    endif
    return {words: g:LspOmniFunc(findstart, base)->slice(0, maxitems), refresh: 'always'}
enddef
autocmd VimEnter * g:LspOptionsSet({ autoComplete: false, omniComplete: true })
```

Complete matches from `:iabbrev`.

```vim
set cpt+=fAbbrevCompletor

def! g:AbbrevCompletor(findstart: number, base: string): any
    if findstart > 0
        var prefix = getline('.')->strpart(0, col('.') - 1)->matchstr('\S\+$')
        if prefix->empty()
            return -2
        endif
        return col('.') - prefix->len() - 1
    endif
    var lines = execute('ia', 'silent!')
    if lines =~? gettext('No abbreviation found')
        return v:none  # Suppresses warning message
    endif
    var items = []
    for line in lines->split("\n")
        var m = line->matchlist('\v^i\s+\zs(\S+)\s+(.*)$')
        if m->len() > 2 && m[1]->stridx(base) == 0
            items->add({ word: m[1], info: m[2], dup: 1 })
        endif
    endfor
    return items->empty() ? v:none :
        items->sort((v1, v2) => v1.word < v2.word ? -1 : v1.word ==# v2.word ? 0 : 1)
enddef
```

**Auto-completion:**

Vim's standard completion frequently checks for user input while searching for
new matches. It is responsive irrespective of file size. This makes it
well-suited for smooth auto-completion. You can try with above examples:

```vim
set cot=menuone,popup,noselect inf

autocmd TextChangedI * InsComplete()

def InsComplete()
    if getcharstr(1) == '' && getline('.')->strpart(0, col('.') - 1) =~ '\k$'
        SkipTextChangedIEvent()
        feedkeys("\<c-n>", "n")
    endif
enddef

inoremap <silent> <c-e> <c-r>=<SID>SkipTextChangedIEvent()<cr><c-e>

def SkipTextChangedIEvent(): string
    # Suppress next event caused by <c-e> (or <c-n> when no matches found)
    set eventignore+=TextChangedI
    timer_start(1, (_) => {
        set eventignore-=TextChangedI
    })
    return ''
enddef
```

closes: #17065

Co-authored-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Co-authored-by: glepnir <glephunter@gmail.com>
Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-14 22:13:15 +02:00
John Marriott
10f69298b4 patch 9.1.1300: wrong detection of -inf
Problem:  wrong detection of -inf
Solution: correctly compare 4 characters and not 3
          (John Marriott)

closes: #17109

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-14 21:19:34 +02:00
Yegappan Lakshmanan
4ec93fec12 runtime(doc): update enum helptext
closes: #17112

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-14 21:14:33 +02:00
Pierrick Guillaume
836b87d699 patch 9.1.1299: filetype: mbsyncrc files are not recognized
Problem:  filetype: mbsyncrc files are not recognized
Solution: detect isyncrc and "*.mbsyncrc" files as mbsync filetype,
          include filetype and syntax plugin (Pierrick Guillaume)

mbsync is a command line application which synchronizes mailboxes;
currently Maildir and IMAP4 mailboxes are supported.
New messages, message deletions and flag changes can be propagated both ways;
the operation set can be selected in a fine-grained manner.

References:
mbsync syntax overview: mbsync manual (isync v1.4.4)
https://isync.sourceforge.io/mbsync.html

Upstream support for the mbsync filetype.
Original plugin: https://github.com/Fymyte/mbsync.vim

closes: #17103

Signed-off-by: Pierrick Guillaume <pguillaume@fymyte.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 18:25:33 +02:00
Philip H.
906f306812 CI: install xcode 16.3 on macos-15 runner
closes: #17111

Signed-off-by: Philip H. <47042125+pheiduck@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 18:19:56 +02:00
Christian Brabandt
f4b1a60dd1 runtime(doc): update options.txt and clarify 'wildmode' further
related: #17100

Co-authored-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 18:09:50 +02:00
Kirill Morozov
3cbd7f18e3 runtime(gleam): update Maintainer and filetype options
closes: #17086

Signed-off-by: Kirill Morozov <kirill@robotix.pro>
Signed-off-by: Trilowy <49493635+trilowy@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 17:58:32 +02:00
Yegappan Lakshmanan
3956c5b53c patch 9.1.1298: define_function() is too long
Problem:  define_function() is too long
Solution: refactor and split up into smaller functions
          (Yegappan Lakshmanan)

closes: #17105

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 17:49:50 +02:00
Luuk van Baal
c98250377d patch 9.1.1297: Ctrl-D scrolling can get stuck
Problem:  cursor_correct() calculates a valid cursor position which
	  is later changed by update_topline() and causes Ctrl-D
          scrolling to be stuck (Daniel Steinberg, after v9.1.0258).
Solution: Update the valid cursor position before validating topline
          (Luuk van Baal).

fixes: #17106
closes: #17110

Signed-off-by: Luuk van Baal <luukvbaal@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 17:45:34 +02:00
Phạm Bình An
829eda7d38 runtime(new-tutor): update tutor and correct comandline completion
Problem: Some parts of the tutor are outdated.

- For example, pressing `<Tab>` after typing `:e` does not complete the
command `:edit`, but shows a completion menu with the first entry being
`:earlier`.

closes: #17107

Signed-off-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-13 17:44:24 +02:00
glepnir
d4dbf822dc patch 9.1.1296: completion: incorrect truncation logic
Problem:  completion: incorrect truncation logic (after: v9.1.1284)
Solution: replace string allocation with direct screen rendering and
          fixe RTL/LTR truncation calculations (glepnir)

closes: #17081

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 18:39:16 +02:00
Christian Brabandt
cf665ccd37 patch 9.1.1295: clientserver: does not handle :stopinsert correctly
Problem:  clientserver: When in insert mode, a :stopinsert command
          is not correctly processed (user202729)
Solution: If the :stopinsert command is received while waiting for
          input, stuff the NOP key into the type-ahead buffer and
          detect that :stopinsert was used in edit() so that the
          cursor position is decremented.

fixes: #17016
closes: #17024

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 18:09:28 +02:00
Christian Brabandt
6f6c0dba9f runtime(doc): disable last-position-jump in diff mode
This has been bothering me quite for some time and I never knew why it
happened. Just today it occurred to me this might have been because of
the last-position-jump.

So I figured, let's fix it for everybody, not just me.

closes: #17092

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 18:07:39 +02:00
Girish Palya
eded33621b runtime(doc): Improve 'wildmode' setting desciption
closes: #17100

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 18:03:32 +02:00
JMcKiern
bc27b6e34f patch 9.1.1294: gui tabline menu does not use confirm when closing tabs
Problem:  gui tabline menu does not use confirm when closing tabs
Solution: use ":confirm tabclose" explicitly (JMcKiern)

closes: #17093

Signed-off-by: JMcKiern <jmckiern@tcd.ie>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 11:51:00 +02:00
Qiming zhao
ab2fe65fbf runtime(doc): correct backslash escaping comma example
closes: #17096

Signed-off-by: Qiming zhao <chemzqm@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 11:40:17 +02:00
Maxim Kim
0e59e67a63 patch 9.1.1293: comment plugin does not handle 'exclusive' selection for comment object
Problem:  comment plugin does not handle 'exclusive' selection for
          comment object (@mawkish)
Solution: handle special case selection='exclusive' for inline comment
          object (Maxim Kim)

fixes: #17023
closes: #17098

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 11:34:08 +02:00
Hirohito Higashi
c8ce81b0dc patch 9.1.1292: statusline not correctly evaluated
Problem:  statusline not correctly evaluated
          (Peter Kenny, after v9.1.1291)
Solution: revert part of patch v9.1.1291
          (Hirohito Higashi)

fixes: #17095
closes: #17094

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 11:28:18 +02:00
Aliaksei Budavei
d82f3cae39 runtime(sh): Do not look up a "sh" utility in $PATH for "sh_13.sh"
Dash may not be installed on a BSD CI runner, list it in the
shebang line.

See #17084
closes: #17094

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-12 11:18:10 +02:00
Aliaksei Budavei
5c84d12df1 runtime(filetype): make shell filetype detection more robust
closes: #17063

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-10 21:55:00 +02:00
John Marriott
ec032de646 patch 9.1.1291: too many strlen() calls in buffer.c
Problem:  too many strlen() calls in buffer.c
Solution: refactor buffer.c and remove strlen() calls
          (John Marriott)

closes: #17063

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-10 21:34:19 +02:00
Elsarques
06a41ad084 runtime(keymaps): include 2 Brazilian Keymaps
closes: #17072

Signed-off-by: Elsarques <luismarques0504@proton.me>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-10 20:04:59 +02:00
Doug Kearns
9b171bdfd6 runtime(vim): Update-base-syntax, match full :*grep, :make, :sort and :filter commands
closes: #17082

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-10 19:59:22 +02:00
zeertzjq
b0e19f9e1b patch 9.1.1290: tests: missing cleanup in test_filetype.vim
Problem:  tests: missing cleanup in test_filetype.vim, wrong name in
          test_plugin_matchparen
Solution: Add :bwipe corresponding to :split, rename test case

closes: #17088

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-10 19:54:16 +02:00
Christian Brabandt
96a0b2a6d5 patch 9.1.1289: tests: no test for matchparen plugin with WinScrolled event
Problem:  tests: no test for matchparen plugin with WinScrolled event
Solution: add missing test

closes: #10942

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-09 19:29:18 +02:00
Joe Reynolds
f9f53f5a8f runtime(remind): include remind.vim ftplugin
closes: #17085

Signed-off-by: Joe Reynolds <joereynolds952@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-09 19:27:37 +02:00
Doug Kearns
520a2c7852 runtime(vim): Update base-syntax, improve :command highlighting
- Match multiline :command definitions.
- Match custom completion funcref var names.

fixes: #17001
closes: #17067

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-08 20:50:00 +02:00
Phạm Bình An
0b540c6f38 runtime(help): add omni completion and 'iskeyword' to filetype plugin
Problem:

- Help tags provide a good way to navigate the Vim documentation, but
  many help documents don't use them effectively. I think one of the
  reasons is that help writers have to look up help tags manually with
  `:help` command, which is not very convenient.
- 'iskeyword' is only set for help buffers opened by `:help` command.
  That means if I'm editing a help file, I cannot jump to tag in same
  file using `Ctrl-]` unless I manually set it, which is annoying.

Solution:

- Add omni completion for Vim help tags.
- Set 'iskeyword' for `ft-help`

closes: #17073

Co-authored-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Phạm Bình An <phambinhanctb2004@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-08 20:47:58 +02:00
Andis Spriņķis
7517a8cadf runtime(lf): improve syntax script, add filetype plugin
- Greatly improve detection and highlighting of command/shell regions,
  input-device key labels, escape sequences (@joelim-work)
- Add ftplugin for formatoptions, toggling comment areas
  (@andis-sprinkis)
- Add a few missing lf option keywords, rm. old non-working code, misc.
  formatting (@andis-sprinkis)

closes: #17078

Signed-off-by: Andis Spriņķis <andis@sprinkis.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-08 20:34:14 +02:00
zeertzjq
b71f1309a2 patch 9.1.1288: Using wrong window in ll_resize_stack()
Problem:  Using wrong window in ll_resize_stack()
          (after v9.1.1287)
Solution: Use "wp" instead of "curwin", even though they are always the
          same value.  Fix typos in documentation (zeertzjq).

closes: #17080

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-08 20:31:21 +02:00
Christian Brabandt
2525573de7 runtime(doc): rename wrong option to 'pummaxwidth'
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-08 08:36:18 +02:00
Hirohito Higashi
adcfb6caeb patch 9.1.1287: quickfix code can be further improved
Problem:  quickfix code can be further improved (after v9.1.1283)
Solution: slightly refactor quickfix.c (Hirohito Higashi)

- remove error message output
- adjust comments
- rename functions:
  - qf_init_quickfix_stack() --> qf_init_stack()
  - qf_resize_quickfix_stack() --> qf_resize_stack()
  - qf_resize_stack() --> qf_resize_stack_base()

Now qf_alloc_stack() can handle both quickfix/location lists.

closes: #17068

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-07 21:19:07 +02:00
zeertzjq
e370141bf4 patch 9.1.1286: filetype: help files not detected when 'iskeyword' includes ":"
Problem:  Help files not detected when 'iskeyword' includes ":".
Solution: Do not use \< and \> in the pattern (zeertzjq).

fixes: #17069
closes: #17071

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-07 21:14:41 +02:00
Yegappan Lakshmanan
5ce1e4ad4a patch 9.1.1285: Vim9: no error message for missing method after "super."
Problem:  Vim9: no error message for missing method after "super."
Solution: output an error message, add a few more tests
          (Yegappan Lakshmanan).

closes: #17070

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-07 21:09:18 +02:00
glepnir
b87620466c patch 9.1.1284: not possible to configure pum truncation char
Problem:  not possible to configure the completion menu truncation
          character
Solution: add the "trunc" suboption to the 'fillchars' setting to
          configure the truncation indicator (glepnir).

closes: #17006

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-07 21:05:16 +02:00
Christian Brabandt
2ffb4d0298 runtime(lua): fix whitespace style issues in lua ftplugin
related: #17049

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-07 14:10:58 +02:00
Konfekt
00b927b295 runtime(lua): improve foldexpr, add vim9 script version
closes: #17049

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 17:40:43 +02:00
clach04
2afdb3a65b runtime(doc): Fix minor typo in options.txt
closes: #17060

Signed-off-by: clach04 <clach04@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 17:37:12 +02:00
Radu Dineiu
9cd6d82fbb runtime(fstab): set formatoptions-=t in filetype plugin
closes: #17020

Signed-off-by: Radu Dineiu <radu.dineiu@gmail.com>
Co-authored-by: Christian Brabandt <cb@256bit.org>
2025-04-06 17:34:58 +02:00
231tr0n
9adb310cf3 runtime(svelte): add matchit support to svelte filetype plugin
closes: #17052

Signed-off-by: 231tr0n <zeltronsrikar@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 17:28:11 +02:00
64-bitman
88d41ab270 patch 9.1.1283: quickfix stack is limited to 10 items
Problem:  quickfix and location-list stack is limited to 10 items
Solution: add the 'chistory' and 'lhistory' options to configure a
          larger quickfix/location list stack
          (64-bitman)

closes: #16920

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: 64-bitman <60551350+64-bitman@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 17:20:39 +02:00
Christian Brabandt
c54a8eb258 patch 9.1.1282: Build and test failure without job feature
Problem:  Build and test failure without job feature
          (lazypingu)
Solution: Adjust ifdefs, add CheckFeature job to tests

fixes: #17053
closes: #17059

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 16:15:10 +02:00
Abhijit Barik
221927b2bf patch 9.1.1281: extra newline output when editing stdin
Problem:  extra newline output when editing stdin
Solution: remove outputting when reading from stdin in non-terminal mode
          (Abhijit Barik)

fixes: #16856
closes: #17047

Co-authored-by: LemonBoy <LemonBoy@users.noreply.github.com>
Signed-off-by: Abhijit Barik <Abhijit.Barik@ivanti.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 16:12:06 +02:00
Satoru Kitaguchi
ba73766788 patch 9.1.1280: trailing additional semicolon in get_matches_in_str()
Problem:  trailing additional semicolon in get_matches_in_str()
          (Hirohito Higashi)
Solution: remove it (Satoru Kitaguchi)

closes: #17066

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Satoru Kitaguchi <rule.the.fate.myfirststory@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-06 16:04:59 +02:00
Yegappan Lakshmanan
8daae6fea9 patch 9.1.1279: Vim9: null_object and null_class are no reserved names
Problem:  Vim9: null_object and null_class are no reserved names
Solution: Add null_object and null_class as reserved names.
          (Yegappan Lakshmanan)

closes: #17054

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-05 16:03:27 +02:00
Yegappan Lakshmanan
d22f43111b patch 9.1.1278: Vim9: too long functions in vim9type.c
Problem:  Vim9: too long functions in vim9type.c
Solution: refactor into separate functions
          (Yegappan Lakshmanan)

closes: #17056

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-05 15:57:12 +02:00
Doug Kearns
2f5a8c0b5b runtime(vim): Update base-syntax, match full :redir command
closes: #17057

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-05 15:55:36 +02:00
Doug Kearns
d84cbdb5a3 patch 9.1.1277: tests: trailing comment char in test_popupwin
Problem:  tests: trailing comment char in test_popupwin
Solution: remove crufty tail comment (Doug Kearns)

Remove a crufty tail comment from Test_popup_with_border_and_padding().
The line used to be in a string list and the closing quote and comma
persist.

closes: #17058

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-05 15:51:26 +02:00
Yee Cheng Chin
9aa120f7ad patch 9.1.1276: inline word diff treats multibyte chars as word char
Problem:  inline word diff treats multibyte chars as word char
          (after 9.1.1243)
Solution: treat all non-alphanumeric characters as non-word characters
          (Yee Cheng Chin)

Previously inline word diff simply used Vim's definition of keyword to
determine what is a word, which leads to multi-byte character classes
such as emojis and CJK (Chinese/Japanese/Korean) characters all
classifying as word characters, leading to entire sentences being
grouped as a single word which does not provide meaningful information
in a diff highlight.

Fix this by treating all non-alphanumeric characters (with class number
above 2) as non-word characters, as there is usually no benefit in using
word diff on them. These include CJK characters, emojis, and also
subscript/superscript numbers. Meanwhile, multi-byte characters like
Cyrillic and Greek letters will still continue to considered as words.

Note that this is slightly inconsistent with how words are defined
elsewhere, as Vim usually considers any character with class >=2 to be
a "word".

related: #16881 (diff inline highlight)
closes: #17050

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-04 19:16:21 +02:00
Christian Brabandt
b8d5c85099 runtime(doc): update WinScrolled documentation
closes: #17036

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-04 19:11:13 +02:00
Doug Kearns
2a6be83512 runtime(vim): Update base-syntax, improve :set backslash handling
Improve backslash handling in :set option values. There is no special
handling for options supporting Windows path separators yet.

See :help option-backslash.

Remove the vimSetString syntax group. Option string values cannot be
specified with a quoted string, this is a command terminating tail
comment.

fixes: #16913
closes: #17034

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:39:24 +02:00
Yegappan Lakshmanan
d211558044 patch 9.1.1275: MS-Windows: Not possible to pass additional flags to Make_mvc
Problem:  MS-Windows: Not possible to pass additional flags to Make_mvc
Solution: Introduce $CI_FLAGS and use it to pass additional flags for
          the Github CI in order to treat size conversion warnings
          (C4267) as errors (Yegappan Lakshmanan)

closes: #17028

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:35:00 +02:00
Yegappan Lakshmanan
6fa62085ff patch 9.1.1274: Vim9: no support for object<type> as variable type
Problem:  Vim9: no support for object<type> as variable type
Solution: add support for object<type> (Yegappan Lakshmanan)

closes: #17041

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:32:00 +02:00
zeertzjq
f16d8b2dda patch 9.1.1273: Coverity warns about using uninitialized value
Problem:  Coverity warns about using uninitialized value
          (after 9.1.1270).
Solution: Put an empty string in "buf" when allocation fails (zeertzjq).

closes: #17040

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:21:15 +02:00
glepnir
3e50a28a03 patch 9.1.1272: completion: in keyword completion Ctrl_P cannot go back after Ctrl_N
Problem:  completion: in keyword completion Ctrl_P cannot go back after
          Ctrl_N
Solution: in find_compl_when_fuzzy() always return first match of array, after Ctrl_P
          use compl_shown_match->cp_next instead of compl_first_match.
          (glepnir)

closes: #17043

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:17:06 +02:00
Doug Kearns
6099db9a60 runtime(sh): Update syntax file, command substitution opening paren at EOL
Allow the opening parenthesis of a command substitution to appear at
EOL.

This fixes the issue raised in
https://github.com/vim/vim/issues/17026#issuecomment-2774112284.

closes: #17044

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:13:39 +02:00
Anarion Dunedain
e74ec3f523 patch 9.1.1271: filetype: Power Query files are not recognized
Problem:  filetype: Power Query files are not recognized
Solution: detect '*.pq' as pq filetype, include pq syntax and filetype
          plugin (Anarion Dunedain)

Microsoft Power Query provides a powerful data import experience that
encompasses many features. Power Query works with desktop Analysis
Services, Excel, and Power BI workbooks, in addition to many online
services, such as Fabric, Power BI service, Power Apps, Microsoft 365
Customer Insights, and more. A core capability of Power Query is to
filter and combine, that is, to mash-up data from one or more of a rich
collection of supported data sources. Any such data mashup is expressed
using the Power Query M formula language. The M language is a
functional, case sensitive language similar to F#.

Reference:
- Power Query M formula language overview:
  https://learn.microsoft.com/en-us/powerquery-m/

closes: #17045

Signed-off-by: Anarion Dunedain <anarion80@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:08:25 +02:00
RestorerZ
c1e019247d translation(ru): fix and updated messages translation
closes: #17046

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 21:04:57 +02:00
Christian Brabandt
df68419ba0 runtime(doc): clarify the use of change marks when writing a buffer
related: #17008

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-03 12:35:51 +02:00
Christian Brabandt
a359c9c25e runtime(zip): add *.whl to the list of zip extensions
This commits adds the extension *.whl to the list of zip extensions.
Wheel (WHL) files are binary distribution files for python packages.

Reference:
https://packaging.python.org/en/latest/specifications/binary-distribution-format/

fixes: #17038

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 20:45:57 +02:00
John Marriott
7fb90815a0 patch 9.1.1270: missing out-of-memory checks in buffer.c
Problem:  missing out-of-memory checks in buffer.c
Solution: handle out-of-memory situations during allocation
          (John Marriott)

closes: #17031

Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 20:32:35 +02:00
Christian Brabandt
8293574c8b runtime(doc): update pi_zip.txt with current list of zip file extensions
closes: #17037

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 20:28:23 +02:00
glepnir
e4e4d1c381 patch 9.1.1269: completion: compl_shown_match is updated when starting keyword completion
Problem:  compl_shown_match is updated when starting keyword completion
          and does not include fuzzy matching.
Solution: Do not update compl_shown_match when starting keyword
          completion, since it is the one already selected by the
          keyword completion direction. (glepnir)

closes: #17033

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 20:18:25 +02:00
Anarion Dunedain
7f518e044f patch 9.1.1268: filetype: dax files are not recognized
Problem:  filetype: dax files are not recognized
Solution: detect "*.dax" as dax filetype, include dax filetype and
          syntax plugin (Anarion Dunedain)

Data Analysis Expressions (DAX) is a formula expression language used in
Analysis Services, Power BI, and Power Pivot in Excel. DAX formulas
include functions, operators, and values to perform advanced
calculations and queries on data in related tables and columns in
tabular data models.

DAX language overview:
- https://learn.microsoft.com/en-us/dax/dax-overview

closes: #17035

Signed-off-by: Anarion Dunedain <anarion80@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 19:54:31 +02:00
Christian Brabandt
9301b437bc runtime(openPlugin): fix E480 when opening URLs with wildcards on Windows
This might be a bug in Windows Vim, as when using the following command
it throws E480:
```
:com! -complete=file -nargs=1 :Echo echo <q-args>
:Echo ?
E480: No match ?
```

Work-around this by using `-nargs=*` to allow more arguments, even
though this is not completely correct.

fixes: #17029

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-02 19:41:21 +02:00
Yegappan Lakshmanan
de8f8f732a patch 9.1.1267: Vim9: no support for type list/dict<object<any>>
Problem:  Vim9: no support for type list/dict<object<any>>
Solution: add proper support for t_object_any
          (Yegappan Lakshmanan)

closes: #17025

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-01 20:43:36 +02:00
Yegappan Lakshmanan
7b6add0b4a patch 9.1.1266: MS-Windows: type conversion warnings
Problem:  MS-Windows: type conversion warnings
Solution: cast the variables (Yegappan Lakshmanan)

closes: #17027

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-01 20:38:37 +02:00
RestorerZ
2f4aa50c91 translation(ru): Updated messages translation
closes: #17030

Signed-off-by: RestorerZ <restorer@mail2k.ru>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-01 20:36:27 +02:00
Christian Brabandt
71f17fdd5f patch 9.1.1265: tests: no tests for typing normal char during completion
Problem:  tests: no tests for typing normal char during completion
Solution: add a test verifying the default behaviour (see :h
          popupmenu-completion)

related: #17019

Co-authored-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-31 20:57:13 +02:00
Konfekt
4ac995bf93 runtime(rust): set formatprg to rustfmt
closes: #16967

Signed-off-by: Konfekt <Konfekt@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-31 20:54:50 +02:00
Yegappan Lakshmanan
b1d6db0be5 patch 9.1.1264: Vim9: error when comparing objects
Problem:  Vim9: error when comparing objects
          (lifepillar)
Solution: When comparing object types, compare their classes
          (Yegappan Lakshmanan)

fixes: #17014
closes: #17018

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-31 20:35:44 +02:00
Hirohito Higashi
20393bc02d runtime(doc): update last change date for diff.txt
related: #16997

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:39:41 +02:00
Yegappan Lakshmanan
1c2f475850 runtime(doc): Update the tuple help text
closes: #17009

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:37:24 +02:00
Christ van Willegen
583f5aee96 patch 9.1.1263: string length wrong in get_last_inserted_save()
Problem:  string length wrong in get_last_inserted_save()
          (after v9.1.1222)
Solution: when removing trailing ESC, also decrease the string length
          (Christ van Willegen)

closes: #16961

Signed-off-by: Christ van Willegen <cvwillegen@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:26:01 +02:00
Hirohito Higashi
f13c856154 patch 9.1.1262: heap-buffer-overflow with narrow 'pummaxwidth' value
Problem:  heap-buffer-overflow occurs with narrow 'pummaxwidth' value
          (after v9.1.1250)
Solution: test that st_end points after st pointer (Hirohito Higashi)

closes: #17005

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:19:05 +02:00
zeertzjq
c6336acfe3 patch 9.1.1261: No test for 'pummaxwidth' non-truncated items
Problem:  No test for 'pummaxwidth' non-truncated items (after v9.1.1250)
Solution: Add shorter items to Test_pum_maxwidth_multibyte() (zeertzjq).

closes: #17007

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:07:35 +02:00
James McCoy
649a237bc8 runtime(debversions): Add release name for Debian 15 - duke
https://lists.debian.org/debian-devel-announce/2025/01/msg00004.html

closes: #17010

Signed-off-by: James McCoy <jamessan@debian.org>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:05:46 +02:00
zeertzjq
53fed23cb7 patch 9.1.1260: Hang when filtering buffer with NUL bytes
Problem:  Hang when filtering buffer with NUL bytes (after 9.1.1050).
Solution: Don't subtract "written" from "lplen" repeatedly (zeertzjq).

related: neovim/neovim#33173
closes: #17011

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:01:56 +02:00
Maxim Kim
e9a369f9c3 runtime(odin): add new keywords to syntax script
closes: #17012

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 15:00:00 +02:00
Maxim Kim
a580761a45 patch 9.1.1259: some issues with comment package and tailing spaces
Problem:  some issues with comment package and tailing spaces
Solution: correctly capture trailing spaces with the ac/ic text object
          (Maxim Kim)

This commit fixes a few issues with the comment package:

1) both ac and ic incorrectly miss the last //

```
// hello trailing spaces
//
```

2) fix ac/ic with last empty comment line,
   vac should also select last line with #

```py
 # print("hello")
 # print("world")
 #
 #
$endofbuffer$
```

closes: #17013

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 14:55:26 +02:00
Yee Cheng Chin
bb8e5ddb97 ci: Check and confirm Vim feature flags exist before testing
Vim tests for features such as python3 relies on checking the feature
flag exists by doing `has('python3')`. However, if the feature itself is
broken and the flag returns 0, the relevant tests will simply silently
get ignored and CI will passed erroneously. As a preventive measure, as
basic checks to make sure certain feature flags are correct as a basic
smoke test.

Currently only checking two types of feature flags:

1. Features that depend on system packages being installed properly
   (e.g. sodium) and could be erroneously dropped if the CI environment
   changed or a bug exists in the configure script.
2. Scripting languages. When in dynamic mode, these feature flags (e.g.
   "ruby", "python3") will return 0 when the lib cannot be found or the
   code has an initialization bug. This happened in #16964 where CI
   still passed despite Python 3 being broken.

closes: #16998

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-30 14:48:29 +02:00
Aliaksei Budavei
1054b18291 runtime(java): Make changes for JDK 24 in syntax script
- "Demote" SecurityManager from the list of java.lang class
  types to javaLangDeprecated.
- Reintroduce supported syntax-preview-feature numbers 455
  and 476 as _new numbers_ 488 and 494, respectively.

References:
- https://openjdk.org/jeps/486 (Permanently Disable the Security Manager)
- https://openjdk.org/jeps/488 (Primitive Types in Patterns etc.)
- https://openjdk.org/jeps/494 (Module Import Declarations)

closes: #16977

Signed-off-by: Aliaksei Budavei <0x000c70@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-29 09:16:30 +01:00
Christian Brabandt
f2b16986a1 patch 9.1.1258: regexp: max \U and \%U value is limited by INT_MAX
Problem:  regexp: max \U and \%U value is limited by INT_MAX but gives a
          confusing error message (related: v8.1.0985).
Solution: give a better error message when the value reaches INT_MAX

When searching Vim allows to get up to 8 hex characters using the /\V
and /\%V regex atoms.  However, when using "/\UFFFFFFFF" the code point is
already above what an integer variable can hold, which is 2,147,483,647.

Since patch v8.1.0985, Vim already limited the max codepoint to INT_MAX
(otherwise it caused a crash in the nfa regex engine), but instead of
error'ing out it silently fell back to parse the number as a backslash
value and not as a codepoint value and as such this "/[\UFFFFFFFF]" will
happily find a "\" or an literal "F".  And this "/[\d127-\UFFFFFFFF]"
will error out as "reverse range in character class).

Interestingly, the max Unicode codepoint value is U+10FFFF which still
fits into an ordinary integer value,  which means, that we don't even
need to parse 8 hex characters, but 6 should have been enough.

However, let's not limit Vim to search for only max 6 hex characters
(which would be a backward incompatible change), but instead allow all 8
characters and only if the codepoint reaches INT_MAX, give a more
precise error message (about what the max unicode codepoint value is).
This allows to search for "[\U7FFFFFFE]" (will likely return "E486
Pattern not found") and "[/\U7FFFFFF]" now errors "E1517: Value too
large, max Unicode codepoint is U+10FFFF".

While this change is straight forward on architectures where long is 8
bytes, this is not so simple on Windows or 32bit architectures where long
is 4 bytes (and therefore the test fails there).  To account for that,
let's make use of the vimlong_T number type and make a few corresponding
changes in the regex engine code and cast the value to the expected data
type. This however may not work correctly on systems that doesn't have
the long long datatype (e.g. OpenVMS) and probably the test will fail
there.

fixes: #16949
closes: #16994

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-29 09:08:58 +01:00
zeertzjq
90e52490b3 patch 9.1.1257: Mixing vim_strsize() with mb_ptr2cells() in pum_redraw()
Problem:  Mixing vim_strsize() with mb_ptr2cells() in pum_redraw().
Solution: Change vim_strsize() to mb_string2cells() (zeertzjq).

Since vim_strsize() uses ptr2cells() for the cell width of each char, it
is strange to mix it with mb_ptr2cells(), which is used both just below
and in pum_screen_puts_with_attr(), and screen_puts_len() also uses
something similar.  Meanwhile mb_string2cells() uses mb_ptr2cells() for
the cell width of each char.

Note that the vim_strsize() and mb_string2cells() actually return the
same value here, as the transstr() above makes sure the string only
contains printable chars, and ptr2cells() and mb_ptr2cells() only return
different values for unprintable chars.

closes: #17003

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-29 09:05:52 +01:00
Andis Spriņķis
0dc9a0bc60 runtime(lf): add lf r34 keywords to syntax script
closes: #17002

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-29 09:03:54 +01:00
Yegappan Lakshmanan
0980e41161 patch 9.1.1256: if_python: duplicate tuple data entries
Problem:  if_python: duplicate tuple data entries
          (after v9.1.1239)
Solution: clean up duplicates (Yegappan Lakshmanan)

closes: #17004

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-29 08:53:12 +01:00
Doug Kearns
722fbd1554 runtime(vim): Update base-syntax, match tuples
Tuples were introduced in commit 9cb865e.  See PR #16776.

fixes: #16965
closes: #16935

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:36:37 +01:00
glepnir
532c5aec6f patch 9.1.1255: missing test condition for 'pummaxwidth' setting
Problem:  missing test condition for 'pummaxwidth' setting, pummaxwidth
          not effective when width is 32 and height is 10
          (after v9.1.1250)
Solution: add missing comparison condition in pum_width()
          (glepnir)

closes: #16999

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:21:59 +01:00
Maxim Kim
aa68f8a095 patch 9.1.1254: need more tests for the comment plugin
Problem:  need more tests for the comment plugin
Solution: add a tests for the [gb]:comment_first_col setting
          (Maxim Kim)

closes: #16995

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:17:53 +01:00
Christian Brabandt
ce80c59bfd patch 9.1.1253: abort when closing window with attached quickfix data
Problem:  If win_close() is called with a window that has quickfix stack
          attached to it, the corresponding quickfix buffer will be
          closed and freed after the buffer was already closed. At that
          time curwin->w_buffer points to NULL, which the CHECK_CURBUF
          will catch and abort if ABORT_ON_ERROR is defined
Solution: in wipe_qf_buffer() temporarily point curwin->w_buffer back to
          curbuf, the window will be closed anyhow, so it shouldn't
          matter that curbuf->b_nwindows isn't incremented.

closes: #16993
closes: #16985

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:13:32 +01:00
Yee Cheng Chin
c5aad6cca5 runtime(doc): non-portable sed regex in Makefile for pi_netrw.txt rule
Previously it was using '\0' in sed which is non-portable and does not
work in macOS. Fix this by using the '$' (end-of-line) regex atom (which
needs to be doubled in the Makefile) to append at the end instead. An
alternative would have been to use '&' which is the more portable
version of '\0'.

closes: #16996

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:11:11 +01:00
zeertzjq
5a307c361c patch 9.1.1252: typos in code and docs related to 'diffopt' "inline:"
Problem:  Typos in code and docs related to 'diffopt' "inline:".
          (after v9.1.1243)
Solution: Fix typos and slightly improve the docs.
          (zeertzjq)

closes: #16997

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-28 19:04:06 +01:00
Yee Cheng Chin
e06b2aea43 patch 9.1.1251: if_python: build error with tuples and dynamic python
Problem:  if_python: build error with tuples and dynamic python
          (after v9.1.1239)
Solution: Fix build error and test failures (Yee Cheng Cin)

closes: #16992

Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 20:15:26 +01:00
glepnir
88d75934c3 patch 9.1.1250: cannot set the maximum popup menu width
Problem:  cannot set the maximum popup menu width
          (Lucas Mior)
Solution: add the new global option value 'pummaxwidth'
          (glepnir)

fixes: #10901
closes: #16943

Signed-off-by: glepnir <glephunter@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 20:09:07 +01:00
zeertzjq
757c37da6d patch 9.1.1249: tests: no test that 'listchars' "eol" doesn't affect "gM"
Problem:  No test that 'listchars' "eol" doesn't affect "gM".
Solution: Add a test (zeertzjq).

closes: #16990

Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 18:21:49 +01:00
Yegappan Lakshmanan
29d11a8326 runtime(doc): group python interface related items in todo.txt
While at it, remove the item about merged PR #12032

closes: #16984

Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
2025-03-27 18:20:30 +01:00
John Marriott
45377e2096 patch 9.1.1248: compile error when building without FEAT_QUICKFIX
Problem:  compile error when building without FEAT_QUICKFIX
Solution: adjust ifdefs in popupwin.c, add CheckFeature quickfix
          to a few tests (John Marriott, Hirohito Higashi)

closes: #16940
closes: #16962

Co-authored-by: Hirohito Higashi <h.east.727@gmail.com>
Co-authored-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com>
Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: John Marriott <basilisk@internode.on.net>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 18:16:52 +01:00
Yee Cheng Chin
7d8e7df551 patch 9.1.1247: fragile setup to get (preferred) keys from key_name_entry
Problem:  fragile setup to get (preferred) keys from key_name_entry
          (after v9.1.1179)
Solution: refactor the code further, fix a bug with "pref_name" key
          entry introduced in v9.1.1180 (Yee Cheng Chin)

The optimization introduced for using bsearch() with key_name_entry
in #16788 was fragile as it required synchronizing a non-obvious index
(e.g. IDX_KEYNAME_SWU) with the array that could be accidentally changed
by any one adding a key to it. Furthermore, the "pref_name" that was
introduced in that change was unnecessary, and in fact introduced a bug,
as we don't always want to use the canonical name.

The bug is triggered when the user triggers auto-complete using a
keycode, such as `:set <Scroll<Tab>`. The bug would end up showing two
copies of `<ScrollWheelUp>` because both entries end up using the
canonical name.

In this change, remove `pref_name`, and simply use a boolean to track
whether an entry is an alt name or not and modify logic to respect that.

Add test to make sure auto-complete works with alt names

closes: #16987

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 17:51:03 +01:00
Yee Cheng Chin
4f9b1243e3 patch 9.1.1246: coverity complains about some changes in v9.1.1243
Problem:  coverity complains about some changes in v9.1.1243
Solution: remove duplicate code in diff_find_changed() (Yee Cheng Chin)

closes: #16988

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 17:34:50 +01:00
Yegappan Lakshmanan
d9b82cfe84 patch 9.1.1245: need some more tests for curly braces evaluation
Problem:  need some more tests for curly braces evaluation
Solution: Add a test for the regression introduced by patch v9.1.1242
          (Yegappan Lakshmanan)

closes: #16986

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-27 17:31:31 +01:00
Christian Brabandt
35cb38d34b patch 9.1.1244: part of patch v9.1.1242 was wrong
Problem:  part of patch v9.1.1242 was wrong
Solution: revert part of the patch

fixes: #16983
related: #16972

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 20:36:12 +01:00
Peter Kenny
14dec7b204 runtime(omnimark): update and rewrite syntax script in Vim9 script
Note: this commit rewrites the omnimark syntax script in Vim9 script and
      is therefore probably incompatible with Neovim

closes: #16979

Signed-off-by: Peter Kenny <github.com@k1w1.cyou>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:52:50 +01:00
Yee Cheng Chin
9943d4790e patch 9.1.1243: diff mode is lacking for changes within lines
Problem:  Diff mode's inline highlighting is lackluster. It only
          performs a line-by-line comparison, and calculates a single
          shortest range within a line that could encompass all the
          changes. In lines with multiple changes, or those that span
          multiple lines, this approach tends to end up highlighting
          much more than necessary.

Solution: Implement new inline highlighting modes by doing per-character
          or per-word diff within the diff block, and highlight only the
          relevant parts, add "inline:simple" to the defaults (which is
          the old behaviour)

This change introduces a new diffopt option "inline:<type>". Setting to
"none" will disable all inline highlighting, "simple" (the default) will
use the old behavior, "char" / "word" will perform a character/word-wise
diff of the texts within each diff block and only highlight the
differences.

The new char/word inline diff only use the internal xdiff, and will
respect diff options such as algorithm choice, icase, and misc iwhite
options. indent-heuristics is always on to perform better sliding.

For character highlight, a post-process of the diff results is first
applied before we show the highlight. This is because a naive diff will
create a result with a lot of small diff chunks and gaps, due to the
repetitive nature of individual characters. The post-process is a
heuristic-based refinement that attempts to merge adjacent diff blocks
if they are separated by a short gap (1-3 characters), and can be
further tuned in the future for better results. This process results in
more characters than necessary being highlighted but overall less visual
noise.

For word highlight, always use first buffer's iskeyword definition.
Otherwise if each buffer has different iskeyword settings we would not
be able to group words properly.

The char/word diffing is always per-diff block, not per line, meaning
that changes that span multiple lines will show up correctly.
Added/removed newlines are not shown by default, but if the user has
'list' set (with "eol" listchar defined), the eol character will be be
highlighted correctly for the specific newline characters.

Also, add a new "DiffTextAdd" highlight group linked to "DiffText" by
default. It allows color schemes to use different colors for texts that
have been added within a line versus modified.

This doesn't interact with linematch perfectly currently. The linematch
feature splits up diff blocks into multiple smaller blocks for better
visual matching, which makes inline highlight less useful especially for
multi-line change (e.g. a line is broken into two lines). This could be
addressed in the future.

As a side change, this also removes the bounds checking introduced to
diff_read() as they were added to mask existing logic bugs that were
properly fixed in #16768.

closes: #16881

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:46:09 +01:00
Christian Brabandt
06774a271a patch 9.1.1242: Crash when evaluating variable name
Problem:  Crash when evaluating variable name (after v9.1.0870)
Solution: calculate the strlen() directly instead of pointer
          arithmetics, fix missing assignment to lp->ll_name_end in
          get_lval() (zeertzjq)

closes: #16972
fixes: vim-airline/vim-airline#2710
related: #16066

Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:25:57 +01:00
Hirohito Higashi
4dd17a90ee patch 9.1.1241: wrong preprocessort indentation in term.c
Problem:  wrong preprocessort indentation in term.c
Solution: update indentation (Hirohito Higashi)

closes: #16981

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:08:46 +01:00
Maxim Kim
08283b28af patch 9.1.1240: Regression with ic/ac text objects and comment plugin
Problem:  Regression with ic/ac text objects and comment plugin
Solution: Fix regression, update tests (Maxim Kim)

fix regression: sometimes ic/ac should be line-wise

```
int main() {
    // multilple comments
    // cursor is between them
}

 # dac ->

int main() {
}
```

closes: #16947
closes: #16980

Signed-off-by: Maxim Kim <habamax@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:05:35 +01:00
Christian Brabandt
f9f4e27ad7 runtime(hyprlang): save and restore cpo setting in syntax script
fixes: #16970
closes: #16973

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 19:00:15 +01:00
S0AndS0
052b86ba63 runtime(solidity): update syntax script with error definitions
closes: #16978

References:
- https://docs.soliditylang.org/en/latest/contracts.html#transient-storage
- https://soliditylang.org/blog/2021/04/21/custom-errors/

Signed-off-by: S0AndS0 <strangerthanbland@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 18:57:55 +01:00
Christian Brabandt
721be7fd0b runtime(doc): add back help tag "pi_netrw.txt"
closes: #16974

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 18:53:46 +01:00
Yegappan Lakshmanan
038be2701d patch 9.1.1239: if_python: no tuple data type support
Problem:  if_python: no tuple data type support (after v9.1.1232)
Solution: Add support for using Vim tuple in the python interface
          (Yegappan Lakshmanan)

closes: #16964

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-26 18:46:21 +01:00
Doug Kearns
9d5487f6fd runtime(doc): Add missing garbagecollect() hypertext link
closes: #16975

Signed-off-by: Doug Kearns <dougkearns@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-25 21:04:23 +01:00
Christian Brabandt
20e46fa65b Improve contributing guide by adding a section on signing off commits
related: #16957
closes: #16976

Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-25 21:02:20 +01:00
phanium
7746348c5d patch 9.1.1238: wrong cursor column with 'set splitkeep=screen'
Problem:  With ':set splitkeep=screen', cursor did't restore column
          correctly when splitting a window on a line longer than the
          last line on the screen (after v9.1.0707)
Solution: Restore cursor column in `win_fix_scroll()` since it may be
          changed in `getvcol()` after 396fd1ec29 (phanium).

Example:
```
echo longlonglongling\nshort | vim - -u NONE --cmd 'set
splitkeep=screen' +'norm $' +new +q
```

fixes: #16968
closes: #16971

Signed-off-by: phanium <91544758+phanen@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-03-25 20:15:31 +01:00
369 changed files with 14002 additions and 3008 deletions

14
.github/MAINTAINERS vendored
View File

@@ -149,6 +149,7 @@ runtime/ftplugin/csv.vim @habamax
runtime/ftplugin/cucumber.vim @tpope
runtime/ftplugin/cuda.vim @ribru17
runtime/ftplugin/dart.vim @ribru17
runtime/ftplugin/dax.vim @anarion80
runtime/ftplugin/deb822sources.vim @jamessan
runtime/ftplugin/debchangelog.vim @jamessan
runtime/ftplugin/debcontrol.vim @jamessan
@@ -179,7 +180,7 @@ runtime/ftplugin/gitconfig.vim @tpope
runtime/ftplugin/gitignore.vim @ObserverOfTime
runtime/ftplugin/gitrebase.vim @tpope
runtime/ftplugin/gitsendemail.vim @tpope
runtime/ftplugin/gleam.vim @trilowy
runtime/ftplugin/gleam.vim @kirillmorozov
runtime/ftplugin/go.vim @dbarnett
runtime/ftplugin/goaccess.vim @meonkeys
runtime/ftplugin/gomod.vim @yu-yk
@@ -221,6 +222,7 @@ runtime/ftplugin/ldapconf.vim @ribru17
runtime/ftplugin/leo.vim @ribru17
runtime/ftplugin/less.vim @genoma
runtime/ftplugin/lex.vim @ribru17
runtime/ftplugin/lf.vim @andis-sprinkis
runtime/ftplugin/liquid.vim @tpope
runtime/ftplugin/lua.vim @dkearns
runtime/ftplugin/lc.vim @ribru17
@@ -229,6 +231,7 @@ runtime/ftplugin/m17ndb.vim @dseomn
runtime/ftplugin/m3build.vim @dkearns
runtime/ftplugin/m3quake.vim @dkearns
runtime/ftplugin/markdown.vim @tpope
runtime/ftplugin/mbsync.vim @fymyte
runtime/ftplugin/mediawiki.vim @avidseeker
runtime/ftplugin/meson.vim @Liambeguin
runtime/ftplugin/modula2.vim @dkearns
@@ -254,6 +257,7 @@ runtime/ftplugin/plsql.vim @lee-lindley
runtime/ftplugin/pod.vim @petdance @dkearns
runtime/ftplugin/poefilter.vim @ObserverOfTime
runtime/ftplugin/postscr.vim @mrdubya
runtime/ftplugin/pq.vim @anarion80
runtime/ftplugin/prisma.vim @ribru17
runtime/ftplugin/proto.vim @Limero
runtime/ftplugin/ps1.vim @heaths
@@ -267,6 +271,7 @@ runtime/ftplugin/qml.vim @ChaseKnowlden
runtime/ftplugin/racket.vim @benknoble
runtime/ftplugin/rasi.vim @fymyte
runtime/ftplugin/readline.vim @dkearns
runtime/ftplugin/remind.vim @joereynolds
runtime/ftplugin/rescript.vim @ribru17
runtime/ftplugin/routeros.vim @zainin
runtime/ftplugin/rst.vim @marshallward
@@ -412,6 +417,8 @@ runtime/indent/xml.vim @chrisbra
runtime/indent/zsh.vim @chrisbra
runtime/keymap/armenian-eastern_utf-8.vim @blinskey
runtime/keymap/armenian-western_utf-8.vim @blinskey
runtime/keymap/brazilian_portuguese-abnt.vim @LuMarquesIlva
runtime/keymap/brazilian_portuguese-compact.vim @LuMarquesIlva
runtime/keymap/russian-typograph.vim @RestorerZ
runtime/keymap/tamil_tscii.vim @yegappan
runtime/keymap/ukrainian-enhanced.vim @Dolfost
@@ -457,6 +464,7 @@ runtime/syntax/cucumber.vim @tpope
runtime/syntax/d.vim @JesseKPhillips
runtime/syntax/dart.vim @pr3d4t0r
runtime/syntax/datascript.vim @dpelle
runtime/syntax/dax.vim @anarion80
runtime/syntax/deb822sources.vim @jamessan
runtime/syntax/debchangelog.vim @jamessan
runtime/syntax/debcontrol.vim @jamessan
@@ -547,6 +555,7 @@ runtime/syntax/mailcap.vim @dkearns
runtime/syntax/make.vim @rohieb
runtime/syntax/mallard.vim @jhradilek
runtime/syntax/markdown.vim @tpope
runtime/syntax/mbsync.vim @fymyte
runtime/syntax/mason.vim @petdance
runtime/syntax/mediawiki.vim @avidseeker
runtime/syntax/meson.vim @Liambeguin
@@ -562,6 +571,8 @@ runtime/syntax/ninja.vim @nico
runtime/syntax/nix.vim @equill
runtime/syntax/nroff.vim @jmarshall
runtime/syntax/nsis.vim @k-takata
runtime/syntax/odin.vim @habamax
runtime/syntax/omnimark.vim @kennypete
runtime/syntax/ondir.vim @jparise
runtime/syntax/opencl.vim @Freed-Wu
runtime/syntax/openvpn.vim @ObserverOfTime
@@ -576,6 +587,7 @@ runtime/syntax/plsql.vim @lee-lindley
runtime/syntax/pod.vim @petdance
runtime/syntax/poefilter.vim @ObserverOfTime
runtime/syntax/postscr.vim @mrdubya
runtime/syntax/pq.vim @anarion80
runtime/syntax/privoxy.vim @dkearns
runtime/syntax/progress.vim @rdnlsmith
runtime/syntax/prolog.vim @XVilka

View File

@@ -266,6 +266,12 @@ jobs:
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ matrix.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['gettext', 'sodium', 'sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
- name: Test
if: matrix.architecture != 'arm64'
@@ -349,7 +355,7 @@ jobs:
if: matrix.runner == 'macos-15'
run: |
# Xcode 16 has compiler bugs which are fixed in 16.2+
sudo xcode-select -s /Applications/Xcode_16.2.app/Contents/Developer
sudo xcode-select -s /Applications/Xcode_16.3.app/Contents/Developer
- name: Set up environment
run: |
@@ -392,6 +398,12 @@ jobs:
"${SRCDIR}"/vim --version
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if ${{ matrix.features == 'huge' }}; then
# Also check that optional and dynamic features are configured and working
"${SRCDIR}"/vim -u NONE -i NONE --not-a-term -esNX -V1 \
-c "let g:required=['sound', 'perl', 'python3', 'lua', 'ruby', 'tcl']" \
-S ci/if_feat_check.vim -c quit
fi
- name: Install packages for testing
run: |
@@ -608,11 +620,13 @@ jobs:
DYNAMIC_PYTHON=yes PYTHON=%PYTHON_DIR% ^
DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
DYNAMIC_PYTHON3_STABLE_ABI=%PYTHON3_STABLE% ^
DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR%
DYNAMIC_SODIUM=yes SODIUM=%SODIUM_DIR% ^
CI_FLAGS=/we4267
) else (
nmake -nologo -f Make_mvc.mak ^
FEATURES=${{ matrix.features }} ^
GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }}
GUI=%GUI% IME=yes ICONV=yes VIMDLL=${{ matrix.VIMDLL }} ^
CI_FLAGS=/we4267
)
- name: Build (MinGW)
@@ -663,6 +677,11 @@ jobs:
src\vim --version || exit 1
src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-1.vim -c quit
src\vim -u NONE -i NONE --not-a-term -esNX -V1 -S ci/if_ver-2.vim -c quit
if "${{ matrix.features }}"=="HUGE" (
src\vim -u NONE -i NONE --not-a-term -esNX -V1 ^
-c "let g:required=['gettext', 'sodium', 'sound', 'python3', 'lua']" ^
-S ci/if_feat_check.vim -c quit
)
)
#- name: Prepare Artifact

View File

@@ -21,6 +21,31 @@ Contributions will be distributed with Vim under the Vim license. Providing a
change to be included implies that you agree with this and your contribution
does not cause us trouble with trademarks or patents. There is no CLA to sign.
## Signing-off commits
While not required, it's recommended to use **Signed-off commits** to ensure
transparency, accountability, and compliance with open-source best practices.
Signed-off commits follow the [Developer Certificate of Origin (DCO)][15],
which confirms that contributors have the right to submit their changes under
the project's license. This process adds a `Signed-off-by` line to commit
messages, verifying that the contributor agrees to the project's licensing
terms. To sign off a commit, simply use the -s flag when committing:
```sh
git commit -s
```
This ensures that every contribution is properly documented and traceable,
aligning with industry standards used in projects like the Linux Kernel or
the git project. By making Signed-off commits a standard practice, we help
maintain a legally compliant and well-governed codebase while fostering trust
within our contributor community.
When merging PRs into Vim, the current maintainer @chrisbra usually adds missing
`Signed-off-by` trailers for the author user name and email address as well for
anybody that explicitly *ACK*s a pull request as a statement that those
approvers are happy with that particular change.
# Reporting issues
We use GitHub issues, but that is not a requirement. Writing to the Vim
@@ -113,3 +138,4 @@ mailing list. For other questions please use the [Vi Stack Exchange][8] website,
[12]: https://github.com/vim/vim/blob/master/src/testdir/test_filetype.vim
[13]: https://github.com/vim/vim/blob/master/runtime/doc/filetype.txt
[14]: https://github.com/vim/vim/blob/master/runtime/doc/syntax.txt
[15]: https://en.wikipedia.org/wiki/Developer_Certificate_of_Origin

View File

@@ -23,6 +23,7 @@ SRC_ALL = \
ci/appveyor.bat \
ci/config.mk*.sed \
ci/if_ver*.vim \
ci/if_feat_check.vim \
ci/setup-xvfb.sh \
ci/remove_snap.sh \
src/Make_all.mak \

View File

@@ -71,7 +71,7 @@ cd src
echo "Building MSVC 64bit console Version"
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=no IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
FEATURES=%FEATURE% CI_CFLAGS=/we4267
if not exist vim.exe (
echo Build failure.
exit 1
@@ -85,11 +85,11 @@ if "%FEATURE%" == "HUGE" (
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no POSTSCRIPT=yes ^
PYTHON_VER=27 DYNAMIC_PYTHON=yes PYTHON=C:\Python27-x64 ^
PYTHON3_VER=%PYTHON3_VER% DYNAMIC_PYTHON3=yes PYTHON3=%PYTHON3_DIR% ^
FEATURES=%FEATURE%
FEATURES=%FEATURE% CI_CFLAGS=/we4267
) ELSE (
nmake -f Make_mvc.mak CPU=AMD64 ^
OLE=no GUI=yes IME=yes ICONV=yes DEBUG=no ^
FEATURES=%FEATURE%
FEATURES=%FEATURE% CI_CFLAGS=/we4267
)
if not exist gvim.exe (
echo Build failure.

15
ci/if_feat_check.vim Normal file
View File

@@ -0,0 +1,15 @@
if 1 " This prevents it from being run in tiny versions
" Check for required features
if exists("g:required")
for feature in g:required
if !has(feature)
echo "Error: Feature '" .. feature .. "' not found"
echo ''
cquit
endif
endfor
echo "\nChecked features: " .. string(g:required)
echo ''
endif
endif
" vim: sts=2 sw=2 et

View File

@@ -1,6 +1,6 @@
" Print all interface versions for Ubuntu. Part 1.
" Print all interface versions. Part 1.
if 1
if 1 " This prevents it from being run in tiny versions
execute 'source' expand('<sfile>:h') .. '/if_ver-cmd.vim'
echo "*** Interface versions ***\n"

View File

@@ -1,6 +1,8 @@
" Print py3 interface versions for Ubuntu. Part 2.
" Print py3 interface versions. Part 2.
" This is done separately from part 1 because Vim cannot concurrently load
" Python 2 and 3 together.
if 1
if 1 " This prevents it from being run in tiny versions
execute 'source' expand('<sfile>:h') .. '/if_ver-cmd.vim'
echo 'Python 3:'

View File

@@ -3,7 +3,7 @@ vim9script
# Vim functions for file type detection
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2025 Jan 25
# Last Change: 2025 Apr 15
# Former Maintainer: Bram Moolenaar <Bram@vim.org>
# These functions are moved here from runtime/filetype.vim to make startup
@@ -557,17 +557,47 @@ export def FTm()
enddef
export def FTmake()
# Check if it is a Microsoft Makefile
unlet! b:make_microsoft
# Check if it is a BSD, GNU, or Microsoft Makefile
unlet! b:make_flavor
# 1. filename
if expand('%:t') == 'BSDmakefile'
b:make_flavor = 'bsd'
setf make
return
elseif expand('%:t') == 'GNUmakefile'
b:make_flavor = 'gnu'
setf make
return
endif
# 2. user's setting
if exists('g:make_flavor')
b:make_flavor = g:make_flavor
setf make
return
elseif get(g:, 'make_microsoft')
echom "make_microsoft is deprecated; try g:make_flavor = 'microsoft' instead"
b:make_flavor = 'microsoft'
setf make
return
endif
# 3. try to detect a flavor from file content
var n = 1
while n < 1000 && n <= line('$')
var line = getline(n)
if line =~? '^\s*!\s*\(ifn\=\(def\)\=\|include\|message\|error\)\>'
b:make_microsoft = 1
b:make_flavor = 'microsoft'
break
elseif line =~ '^ *ifn\=\(eq\|def\)\>' || line =~ '^ *[-s]\=include\s'
elseif line =~ '^\.\%(export\|error\|for\|if\%(n\=\%(def\|make\)\)\=\|info\|warning\)\>'
b:make_flavor = 'bsd'
break
elseif line =~ '^ *\w\+\s*[!?:+]='
elseif line =~ '^ *\%(ifn\=\%(eq\|def\)\|define\|override\)\>'
b:make_flavor = 'gnu'
break
elseif line =~ '\$[({][a-z-]\+\s\+\S\+' # a function call, e.g. $(shell pwd)
b:make_flavor = 'gnu'
break
endif
n += 1
@@ -595,11 +625,15 @@ enddef
# This function checks if one of the first five lines start with a dot. In
# that case it is probably an nroff file: 'filetype' is set and 1 is returned.
export def FTnroff(): number
if getline(1)[0] .. getline(2)[0] .. getline(3)[0]
.. getline(4)[0] .. getline(5)[0] =~ '\.'
setf nroff
return 1
endif
var n = 1
while n < 5
var line = getline(n)
if line =~ '^\.\S\S\?'
setf nroff
return 1
endif
n += 1
endwhile
return 0
enddef
@@ -875,16 +909,16 @@ export def SetFileTypeSH(name: string, setft = true): string
if setft && expand("<amatch>") =~ g:ft_ignore_pat
return ''
endif
if name =~ '\<csh\>'
if name =~ '^csh$' || name =~ '^#!.\{-2,}\<csh\>'
# Some .sh scripts contain #!/bin/csh.
return SetFileTypeShell("csh", setft)
elseif name =~ '\<tcsh\>'
elseif name =~ '^tcsh$' || name =~ '^#!.\{-2,}\<tcsh\>'
# Some .sh scripts contain #!/bin/tcsh.
return SetFileTypeShell("tcsh", setft)
elseif name =~ '\<zsh\>'
elseif name =~ '^zsh$' || name =~ '^#!.\{-2,}\<zsh\>'
# Some .sh scripts contain #!/bin/zsh.
return SetFileTypeShell("zsh", setft)
elseif name =~ '\<ksh\>'
elseif name =~ '^ksh$' || name =~ '^#!.\{-2,}\<ksh\>'
b:is_kornshell = 1
if exists("b:is_bash")
unlet b:is_bash
@@ -892,7 +926,8 @@ export def SetFileTypeSH(name: string, setft = true): string
if exists("b:is_sh")
unlet b:is_sh
endif
elseif exists("g:bash_is_sh") || name =~ '\<bash\>' || name =~ '\<bash2\>'
elseif exists("g:bash_is_sh") || name =~ '^bash2\=$' ||
\ name =~ '^#!.\{-2,}\<bash2\=\>'
b:is_bash = 1
if exists("b:is_kornshell")
unlet b:is_kornshell
@@ -900,7 +935,7 @@ export def SetFileTypeSH(name: string, setft = true): string
if exists("b:is_sh")
unlet b:is_sh
endif
elseif name =~ '\<sh\>' || name =~ '\<dash\>'
elseif name =~ '^\%(da\)\=sh$' || name =~ '^#!.\{-2,}\<\%(da\)\=sh\>'
# Ubuntu links "sh" to "dash", thus it is expected to work the same way
b:is_sh = 1
if exists("b:is_kornshell")

View File

@@ -1,5 +1,6 @@
" Author: Stephen Sugden <stephen@stephensugden.com>
" Last Modified: 2023-09-11
" Last Change: 2025 Mar 31 by Vim project (rename s:RustfmtConfigOptions())
"
" Adapted from https://github.com/fatih/vim-go
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
@@ -61,7 +62,7 @@ function! s:RustfmtWriteMode()
endif
endfunction
function! s:RustfmtConfigOptions()
function! rustfmt#RustfmtConfigOptions()
let l:rustfmt_toml = findfile('rustfmt.toml', expand('%:p:h') . ';')
if l:rustfmt_toml !=# ''
return '--config-path '.shellescape(fnamemodify(l:rustfmt_toml, ":p"))
@@ -84,7 +85,7 @@ function! s:RustfmtCommandRange(filename, line1, line2)
let l:arg = {"file": shellescape(a:filename), "range": [a:line1, a:line2]}
let l:write_mode = s:RustfmtWriteMode()
let l:rustfmt_config = s:RustfmtConfigOptions()
let l:rustfmt_config = rustfmt#RustfmtConfigOptions()
" FIXME: When --file-lines gets to be stable, add version range checking
" accordingly.
@@ -99,7 +100,7 @@ endfunction
function! s:RustfmtCommand()
let write_mode = g:rustfmt_emit_files ? '--emit=stdout' : '--write-mode=display'
let config = s:RustfmtConfigOptions()
let config = rustfmt#RustfmtConfigOptions()
return join([g:rustfmt_command, write_mode, config, g:rustfmt_options])
endfunction

View File

@@ -14,6 +14,7 @@
" 2025 Mar 02 by Vim Project: escape the filename before using :read
" 2025 Mar 02 by Vim Project: determine the compression using readblob()
" instead of shelling out to file(1)
" 2025 Apr 16 by Vim Project: decouple from netrw by adding s:WinPath()
"
" Contains many ideas from Michael Toren's <tar.vim>
"
@@ -146,7 +147,7 @@ fun! tar#Browse(tarfile)
let lastline= line("$")
call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
call setline(lastline+3,'" Select a file with cursor and press ENTER')
call setline(lastline+3,'" Select a file with cursor and press ENTER, "x" to extract a file')
keepj $put =''
keepj sil! 0d
keepj $
@@ -615,7 +616,7 @@ fun! tar#Extract()
let tarball = expand("%")
let tarbase = substitute(tarball,'\..*$','','')
let extractcmd= netrw#WinPath(g:tar_extractcmd)
let extractcmd= s:WinPath(g:tar_extractcmd)
if filereadable(tarbase.".tar")
call system(extractcmd." ".shellescape(tarbase).".tar ".shellescape(fname))
if v:shell_error != 0
@@ -765,6 +766,25 @@ fun! s:Header(fname)
return "unknown"
endfun
" ---------------------------------------------------------------------
" s:WinPath: {{{2
fun! s:WinPath(path)
if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && has("win32")
" remove cygdrive prefix, if present
let path = substitute(a:path, '/cygdrive/\(.\)', '\1:', '')
" remove trailing slash (Win95)
let path = substitute(path, '\(\\\|/\)$', '', 'g')
" remove escaped spaces
let path = substitute(path, '\ ', ' ', 'g')
" convert slashes to backslashes
let path = substitute(path, '/', '\', 'g')
else
let path = a:path
endif
return path
endfun
" ---------------------------------------------------------------------
" tar#Vimuntar: installs a tarball in the user's .vim / vimfiles directory {{{2
fun! tar#Vimuntar(...)
@@ -786,7 +806,7 @@ fun! tar#Vimuntar(...)
if simplify(curdir) != simplify(vimhome)
" copy (possibly compressed) tarball to .vim/vimfiles
call system(netrw#WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
call system(s:WinPath(g:tar_copycmd)." ".shellescape(tartail)." ".shellescape(vimhome))
exe "cd ".fnameescape(vimhome)
endif
@@ -808,7 +828,7 @@ fun! tar#Vimuntar(...)
else
call vimball#Decompress(tartail,0)
endif
let extractcmd= netrw#WinPath(g:tar_extractcmd)
let extractcmd= s:WinPath(g:tar_extractcmd)
call system(extractcmd." ".shellescape(tarbase.".tar"))
" set up help

View File

@@ -107,6 +107,7 @@ if 1
\ let line = line("'\"")
\ | if line >= 1 && line <= line("$") && &filetype !~# 'commit'
\ && index(['xxd', 'gitrebase', 'tutor'], &filetype) == -1
\ && !&diff
\ | execute "normal! g`\""
\ | endif

View File

@@ -142,7 +142,9 @@ os_win32.txt:
touch $@
pi_netrw.txt: ../pack/dist/opt/netrw/doc/netrw.txt
cp ../pack/dist/opt/netrw/doc/netrw.txt $@
cp ../pack/dist/opt/netrw/doc/netrw.txt $@.tmp
sed -e '1s/$$/ *pi_netrw.txt*/' $@.tmp > $@ && \
rm -f $@.tmp
vietnamese.txt:
touch $@

View File

@@ -1,4 +1,4 @@
*autocmd.txt* For Vim version 9.1. Last change: 2025 Mar 12
*autocmd.txt* For Vim version 9.1. Last change: 2025 Apr 04
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -593,7 +593,8 @@ BufWriteCmd Before writing the whole buffer to a file.
The buffer contents should not be changed.
When the command resets 'modified' the undo
information is adjusted to mark older undo
states as 'modified', like |:write| does.
states as 'modified', like |:write| does. Use
the |'[| and |']| marks for the range of lines.
|Cmd-event|
*BufWritePost*
BufWritePost After writing the whole buffer to a file
@@ -886,14 +887,14 @@ FileType When the 'filetype' option has been set. The
FileWriteCmd Before writing to a file, when not writing the
whole buffer. Should do the writing to the
file. Should not change the buffer. Use the
'[ and '] marks for the range of lines.
|'[| and |']| marks for the range of lines.
|Cmd-event|
*FileWritePost*
FileWritePost After writing to a file, when not writing the
whole buffer.
*FileWritePre*
FileWritePre Before writing to a file, when not writing the
whole buffer. Use the '[ and '] marks for the
whole buffer. Use the |'[| and |']| marks for the
range of lines.
*FilterReadPost*
FilterReadPost After reading a file from a filter command.
@@ -1480,6 +1481,13 @@ WinScrolled After any window in the current tab page
or changed width or height. See
|win-scrolled-resized|.
Note: This can not be skipped with
`:noautocmd`, because it triggers after
processing normal commands when Vim is back in
the main loop. If you want to disable this,
consider setting the 'eventignore' option
instead.
The pattern is matched against the |window-ID|
of the first window that scrolled or resized.
Both <amatch> and <afile> are set to the

View File

@@ -1,4 +1,4 @@
*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 24
*builtin.txt* For Vim version 9.1. Last change: 2025 Mar 30
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -8336,13 +8336,14 @@ py3eval({expr} [, {locals}]) *py3eval()*
converted to Vim data structures.
If a {locals} |Dictionary| is given, it defines set of local
variables available in the expression. The keys are variable
names and the values are the variable values. |Dictionary| and
|List| values are referenced, and may be updated by the
expression (as if |python-bindeval| was used).
names and the values are the variable values. |Dictionary|,
|List| and |Tuple| values are referenced, and may be updated
by the expression (as if |python-bindeval| was used).
Numbers and strings are returned as they are (strings are
copied though, Unicode strings are additionally converted to
'encoding').
Lists are represented as Vim |List| type.
Tuples are represented as Vim |Tuple| type.
Dictionaries are represented as Vim |Dictionary| type with
keys converted to strings.
Note that in a `:def` function local variables are not visible
@@ -8364,6 +8365,7 @@ pyeval({expr} [, {locals}]) *pyeval()*
Numbers and strings are returned as they are (strings are
copied though).
Lists are represented as Vim |List| type.
Tuples are represented as Vim |Tuple| type.
Dictionaries are represented as Vim |Dictionary| type,
non-string keys result in error.
Note that in a `:def` function local variables are not visible
@@ -11921,7 +11923,7 @@ trunc({expr}) *trunc()*
Return type: |Float|
tuple2list({list}) *tuple2list()*
tuple2list({tuple}) *tuple2list()*
Create a List from a shallow copy of the tuple items.
Examples: >
tuple2list((1, 2, 3)) returns [1, 2, 3]

View File

@@ -1,4 +1,4 @@
*change.txt* For Vim version 9.1. Last change: 2025 Mar 18
*change.txt* For Vim version 9.1. Last change: 2025 Apr 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -156,8 +156,8 @@ only after a '.').
The 'B' and 'M' flags in 'formatoptions' change the behavior for inserting
spaces before and after a multibyte character |fo-table|.
The '[ mark is set at the end of the first line that was joined, '] at the end
of the resulting line.
The |'[| mark is set at the end of the first line that was joined, |']| at the
end of the resulting line.
==============================================================================
@@ -1188,8 +1188,8 @@ the ":put" command, Vim always inserts the text in the next line. You can
exchange two characters with the command sequence "xp". You can exchange two
lines with the command sequence "ddp". You can exchange two words with the
command sequence "deep" (start with the cursor in the blank space before the
first word). You can use the "']" or "`]" command after the put command to
move the cursor to the end of the inserted text, or use "'[" or "`[" to move
first word). You can use the |']| or |`]| command after the put command to
move the cursor to the end of the inserted text, or use |'[| or |`[| to move
the cursor to the start.
*put-Visual-mode* *v_p* *v_P*

View File

@@ -1,4 +1,4 @@
*diff.txt* For Vim version 9.1. Last change: 2024 Feb 01
*diff.txt* For Vim version 9.1. Last change: 2025 Mar 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -226,14 +226,28 @@ The diffs are highlighted with these groups:
|hl-DiffAdd| DiffAdd Added (inserted) lines. These lines exist in
this buffer but not in another.
|hl-DiffChange| DiffChange Changed lines.
|hl-DiffText| DiffText Changed text inside a Changed line. Vim
finds the first character that is different,
and the last character that is different
(searching from the end of the line). The
text in between is highlighted. This means
that parts in the middle that are still the
same are highlighted anyway. The 'diffopt'
flags "iwhite" and "icase" are used here.
|hl-DiffText| DiffText Changed text inside a Changed line. Exact
behavior depends on the `inline:` setting in
'diffopt'.
With `inline:` set to "simple", Vim finds the
first character that is different, and the
last character that is different (searching
from the end of the line). The text in
between is highlighted. This means that parts
in the middle that are still the same are
highlighted anyway. The 'diffopt' flags
"iwhite" and "icase" are used here.
With `inline:` set to "char" or "word", Vim
uses the internal diff library to perform a
detailed diff between the changed blocks and
highlight the exact difference between the
two. Will respect any 'diffopt' flag that
affects internal diff.
Not used when `inline:` is set to "none".
|hl-DiffTextAdd| DiffTextAdd Added text inside a Changed line. Similar to
DiffText, but used when there is no
corresponding text in other buffers. Not used
when `inline:` is set to "simple" or "none".
|hl-DiffDelete| DiffDelete Deleted lines. Also called filler lines,
because they don't really exist in this
buffer.

View File

@@ -1,4 +1,4 @@
*editing.txt* For Vim version 9.1. Last change: 2024 Oct 14
*editing.txt* For Vim version 9.1. Last change: 2025 Apr 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -974,8 +974,9 @@ Note: When the 'write' option is off, you are not able to write any file.
executed like with ":!{cmd}", any '!' is replaced with
the previous command |:!|.
The default [range] for the ":w" command is the whole buffer (1,$). If you
write the whole buffer, it is no longer considered changed. When you
The default [range] for the ":w" command is the whole buffer (1,$). The |'[|
and |']| marks will be set to the [range] being used for the write command.
If you write the whole buffer, it is no longer considered changed. When you
write it to a different file with ":w somefile" it depends on the "+" flag in
'cpoptions'. When included, the write command will reset the 'modified' flag,
even though the buffer itself may still be different from its file.

View File

@@ -1,4 +1,4 @@
*eval.txt* For Vim version 9.1. Last change: 2025 Mar 23
*eval.txt* For Vim version 9.1. Last change: 2025 Apr 02
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -541,7 +541,8 @@ example, to add up all the numbers in a list: >
A Tuple is an ordered sequence of items. An item can be of any type. Items
can be accessed by their index number. A Tuple is immutable.
A Tuple uses less memory compared to a List and provides O(1) lookup time.
A Tuple is similar to a List but uses less memory and provides O(1) lookup
time for an item.
Tuple creation ~
*E1526* *E1527*
@@ -579,6 +580,15 @@ is not available it returns zero or the default value you specify: >
:echo get(mytuple, idx, "NONE")
Tuple modification ~
*tuple-modification*
A tuple is immutable and items cannot be added or removed from a tuple. But
List and Dict items within a tuple can be modified: >
:let tuple = (1, [2, 3], {'a': 4})
:let tuple[1][0] = 10
:let tuple[2]['a'] = 20
Tuple concatenation ~
*tuple-concatenation*
Two tuples can be concatenated with the "+" operator: >
@@ -5139,7 +5149,7 @@ executable. It takes the following arguments:
filetype string
executable string
*dist#vim9#Open()* *:Open*
*dist#vim9#Open()* *:Open* *:URLOpen*
*g:Openprg* *gx*
dist#vim9#Open(file: string) ~
@@ -5147,6 +5157,8 @@ Opens `path` with the system default handler (macOS `open`, Windows
`explorer.exe`, Linux `xdg-open`, …). If the variable |g:Openprg| exists the
string specified in the variable is used instead.
The |:Open| user command uses file completion for its argument.
This function is by default called using the gx mapping. In visual mode
tries to open the visually selected text.
@@ -5165,13 +5177,18 @@ Usage: >vim
:call dist#vim9#Open(<path>)
:Open <path>
<
*package-open*
The |:Open| and |:Launch| command are provided by the included plugin
$VIMRUNTIME/plugin/openPlugin.vim
*dist#vim9#Launch()* *:Launch*
*dist#vim9#Launch()* *:Launch*
dist#vim9#Launch(file: string) ~
Launches <args> with the appropriate system programs. Intended for launching
GUI programs within Vim.
The |:Launch| user command uses shell completion for its first argument.
NOTE: escaping of <args> is left to the user
Examples: >vim

View File

@@ -1,4 +1,4 @@
*filetype.txt* For Vim version 9.1. Last change: 2025 Mar 15
*filetype.txt* For Vim version 9.1. Last change: 2025 Apr 16
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -158,6 +158,8 @@ variables can be used to overrule the filetype used for certain extensions:
*.inc g:filetype_inc
*.lsl g:filetype_lsl
*.m g:filetype_m |ft-mathematica-syntax|
*[mM]makefile,*.mk,*.mak,[mM]akefile*
g:make_flavor |ft-make-syntax|
*.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,*.md
g:filetype_md |ft-pandoc-syntax|
*.mod g:filetype_mod
@@ -660,6 +662,16 @@ possibilities: >
The `:Cycle` command is also mapped to the CTRL-A and CTRL-X keys.
For details, see `git-rebase --help`.
GLEAM *ft-gleam-plugin*
By default the following options are set for the recommended gleam style: >
setlocal expandtab shiftwidth=2 softtabstop=2
To disable this behavior, set the following variable in your vimrc: >
let g:gleam_recommended_style = 0
GO *ft-go-plugin*
By default the following options are set, based on Golang official docs: >

View File

@@ -1,4 +1,4 @@
*helphelp.txt* For Vim version 9.1. Last change: 2025 Jan 11
*helphelp.txt* For Vim version 9.1. Last change: 2025 Apr 08
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -471,8 +471,13 @@ highlighting. So do these:
You can find the details in $VIMRUNTIME/syntax/help.vim
GENDER NEUTRAL LANGUAGE
FILETYPE COMPLETION *ft-help-omni*
To get completion for help tags when writing a tag reference, you can use the
|i_CTRL-X_CTRL-O| command.
GENDER NEUTRAL LANGUAGE
*gender-neutral* *inclusion*
Vim is for everybody, no matter race, gender or anything. For new or updated
help text, gender neutral language is recommended. Some of the help text is

View File

@@ -1,4 +1,4 @@
*if_pyth.txt* For Vim version 9.1. Last change: 2024 Nov 09
*if_pyth.txt* For Vim version 9.1. Last change: 2025 Mar 26
VIM REFERENCE MANUAL by Paul Moore
@@ -184,8 +184,9 @@ vim.eval(str) *python-eval*
evaluator (see |expression|). Returns the expression result as:
- a string if the Vim expression evaluates to a string or number
- a list if the Vim expression evaluates to a Vim list
- a tuple if the Vim expression evaluates to a Vim tuple
- a dictionary if the Vim expression evaluates to a Vim dictionary
Dictionaries and lists are recursively expanded.
Dictionaries, lists and tuples are recursively expanded.
Examples: >
:" value of the 'textwidth' option
:py text_width = vim.eval("&tw")
@@ -196,6 +197,8 @@ vim.eval(str) *python-eval*
:" Result is a string! Use string.atoi() to convert to a number.
:py str = vim.eval("12+12")
:
:py tuple = vim.eval('(1, 2, 3)')
:
:py tagList = vim.eval('taglist("eval_expr")')
< The latter will return a python list of python dicts, for instance:
[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name': ~
@@ -207,8 +210,8 @@ vim.eval(str) *python-eval*
vim.bindeval(str) *python-bindeval*
Like |python-eval|, but returns special objects described in
|python-bindeval-objects|. These python objects let you modify (|List|
or |Dictionary|) or call (|Funcref|) vim objects.
|python-bindeval-objects|. These python objects let you modify
(|List|, |Tuple| or |Dictionary|) or call (|Funcref|) vim objects.
vim.strwidth(str) *python-strwidth*
Like |strwidth()|: returns number of display cells str occupies, tab
@@ -688,6 +691,22 @@ vim.List object *python-List*
print isinstance(l, vim.List) # True
class List(vim.List): # Subclassing
vim.Tuple object *python-Tuple*
Sequence-like object providing access to vim |Tuple| type.
Supports `.locked` attribute, see |python-.locked|. Also supports the
following methods:
Method Description ~
__new__(), __new__(iterable)
You can use `vim.Tuple()` to create new vim tuples.
Without arguments constructs empty list.
Examples: >
t = vim.Tuple("abc") # Constructor, result: ('a', 'b', 'c')
print t[1:] # slicing
print t[0] # getting item
for i in t: # iteration
print isinstance(t, vim.Tuple) # True
class Tuple(vim.Tuple): # Subclassing
vim.Function object *python-Function*
Function-like object, acting like vim |Funcref| object. Accepts special
keyword argument `self`, see |Dictionary-function|. You can also use

View File

@@ -1,4 +1,4 @@
*insert.txt* For Vim version 9.1. Last change: 2025 Mar 09
*insert.txt* For Vim version 9.1. Last change: 2025 Apr 14
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1167,6 +1167,9 @@ For example, the function can contain this: >
let matches = ... list of words ...
return {'words': matches, 'refresh': 'always'}
<
If looking for matches is time-consuming, |complete_check()| may be used to
maintain responsiveness.
*complete-items*
Each list item can either be a string or a Dictionary. When it is a string it
is used as the completion. When it is a Dictionary it can contain these

View File

@@ -1,4 +1,4 @@
*motion.txt* For Vim version 9.1. Last change: 2024 Dec 17
*motion.txt* For Vim version 9.1. Last change: 2025 Apr 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -895,12 +895,12 @@ Numbered mark should be stored. See |viminfo-file-marks|.
*'[* *`[*
'[ `[ To the first character of the previously changed
or yanked text.
'[ `[ To the first character of the previously changed,
or yanked text. Also set when writing the buffer.
*']* *`]*
'] `] To the last character of the previously changed or
yanked text.
yanked text. Also set when writing the buffer.
After executing an operator the Cursor is put at the beginning of the text
that was operated upon. After a put command ("p" or "P") the cursor is

View File

@@ -1,4 +1,4 @@
*options.txt* For Vim version 9.1. Last change: 2025 Mar 14
*options.txt* For Vim version 9.1. Last change: 2025 Apr 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -212,7 +212,7 @@ A few examples: >
:set makeprg=make,file results in "make,file"
:set makeprg=make\\,file results in "make\,file"
:set tags=tags,file results in "tags" and "file"
:set tags=tags\\,file results in "tags,file"
:set tags=tags\\,file results in "tags\,file"
:let &tags='tags\,file' (same as above)
The "|" character separates a ":set" command from a following command. To
@@ -1717,6 +1717,19 @@ A jump table for the options with a short description can be found at |Q_op|.
This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons.
*'chistory'* *'chi'*
'chistory' 'chi' number (default: 10)
global
{only available when compiled with the |+quickfix|
feature}
Number of quickfix lists that should be remembered for the quickfix
stack. Must be between 1 and 100. If the option is set to a value
that is lower than the amount of entries in the quickfix list stack,
entries will be removed starting from the oldest one. If the current
quickfix list was removed, then the quickfix list at top of the stack
(the most recently created) will be used in its place. For additional
info, see |quickfix-stack|.
*'cindent'* *'cin'* *'nocindent'* *'nocin'*
'cindent' 'cin' boolean (default off)
local to buffer
@@ -2072,6 +2085,28 @@ A jump table for the options with a short description can be found at |Q_op|.
|i_CTRL-X_CTRL-D|
] tag completion
t same as "]"
f{func} call the function {func}. Multiple "f" flags may be specified.
Refer to |complete-functions| for details on how the function
is invoked and what it should return. The value can be the
name of a function or a |Funcref|. For |Funcref| values,
spaces must be escaped with a backslash ('\'), and commas with
double backslashes ('\\') (see |option-backslash|).
If the Dict returned by the {func} includes {"refresh": "always"},
the function will be invoked again whenever the leading text
changes.
Completion matches are always inserted at the keyword
boundary, regardless of the column returned by {func} when
a:findstart is 1. This ensures compatibility with other
completion sources.
To make further modifications to the inserted text, {func}
can make use of |CompleteDonePre|.
If generating matches is potentially slow, |complete_check()|
should be used to avoid blocking and preserve editor
responsiveness.
f equivalent to using "f{func}", where the function is taken from
the 'completefunc' option.
o equivalent to using "f{func}", where the function is taken from
the 'omnifunc' option.
Unloaded buffers are not loaded, thus their autocmds |:autocmd| are
not executed, this may lead to unexpected completions from some files
@@ -2166,6 +2201,10 @@ A jump table for the options with a short description can be found at |Q_op|.
Useful when there is additional information about the
match, e.g., what file it comes from.
nearest Matches are presented in order of proximity to the cursor
position. This applies only to matches from the current
buffer. No effect if "fuzzy" is present.
noinsert Do not insert any text for a match until the user selects
a match from the menu. Only works in combination with
"menu" or "menuone". No effect if "longest" is present.
@@ -2655,7 +2694,7 @@ A jump table for the options with a short description can be found at |Q_op|.
*E1193* *E1194* *E1195* *E1196* *E1230*
*E1197* *E1198* *E1199* *E1200* *E1201*
xchacha20 XChaCha20 Cipher with Poly1305 Message Authentication
Code. Medium strong till strong encryption.
Code. Medium strong to strong encryption.
Encryption is provided by the libsodium library, it
requires Vim to be built with |+sodium|.
It adds a seed and a message authentication code (MAC)
@@ -2910,7 +2949,8 @@ A jump table for the options with a short description can be found at |Q_op|.
security reasons.
*'dip'* *'diffopt'*
'diffopt' 'dip' string (default "internal,filler,closeoff")
'diffopt' 'dip' string (default
"internal,filler,closeoff,inline:simple")
global
{not available when compiled without the |+diff|
feature}
@@ -2975,6 +3015,24 @@ A jump table for the options with a short description can be found at |Q_op|.
Use the indent heuristic for the internal
diff library.
inline:{text} Highlight inline differences within a change.
See |view-diffs|. Supported values are:
none Do not perform inline highlighting.
simple Highlight from first different
character to the last one in each
line. This is the default if no
`inline:` value is set.
char Use internal diff to perform a
character-wise diff and highlight the
difference.
word Use internal diff to perform a
|word|-wise diff and highlight the
difference. Non-alphanumeric
multi-byte characters such as emoji
and CJK characters are considered
individual words.
internal Use the internal diff library. This is
ignored when 'diffexpr' is set. *E960*
When running out of memory when writing a
@@ -3571,8 +3629,8 @@ A jump table for the options with a short description can be found at |Q_op|.
*'fillchars'* *'fcs'*
'fillchars' 'fcs' string (default "vert:|,fold:-,eob:~,lastline:@")
global or local to window |global-local|
Characters to fill the statuslines, vertical separators and special
lines in the window.
Characters to fill the statuslines, vertical separators, special
lines in the window and truncated text in the |ins-completion-menu|.
It is a comma-separated list of items. Each item has a name, a colon
and the value of that item: |E1511|
@@ -3587,6 +3645,9 @@ A jump table for the options with a short description can be found at |Q_op|.
diff '-' deleted lines of the 'diff' option
eob '~' empty lines below the end of a buffer
lastline '@' 'display' contains lastline/truncate
trunc '>' truncated text in the
|ins-completion-menu|.
truncrl '<' same as "trunc' in 'rightleft' mode
Any one that is omitted will fall back to the default.
@@ -3603,9 +3664,15 @@ A jump table for the options with a short description can be found at |Q_op|.
stlnc StatusLineNC |hl-StatusLineNC|
vert VertSplit |hl-VertSplit|
fold Folded |hl-Folded|
foldopen FoldColumn |hl-FoldColumn|
foldclose FoldColumn |hl-FoldColumn|
foldsep FoldColumn |hl-FoldColumn|
diff DiffDelete |hl-DiffDelete|
eob EndOfBuffer |hl-EndOfBuffer|
lastline NonText |hl-NonText|
trunc one of the many Popup menu highlighting groups like
|hl-PmenuSel|
truncrl same as "trunc"
*'findfunc'* *'ffu'* *E1514*
'findfunc' 'ffu' string (default empty)
@@ -4392,10 +4459,10 @@ A jump table for the options with a short description can be found at |Q_op|.
v:Visual,V:VisualNOS,w:WarningMsg,
W:WildMenu,f:Folded,F:FoldColumn,
A:DiffAdd,C:DiffChange,D:DiffDelete,
T:DiffText,>:SignColumn,-:Conceal,
B:SpellBad,P:SpellCap,R:SpellRare,
L:SpellLocal,+:Pmenu,=:PmenuSel,
k:PmenuMatch,<:PmenuMatchSel,
T:DiffText,E:DiffTextAdd,>:SignColumn,
-:Conceal,B:SpellBad,P:SpellCap,
R:SpellRare, L:SpellLocal,+:Pmenu,
=:PmenuSel, k:PmenuMatch,<:PmenuMatchSel,
[:PmenuKind,]:PmenuKindSel,
{:PmenuExtra,}:PmenuExtraSel,
x:PmenuSbar,X:PmenuThumb,*:TabLine,
@@ -4447,7 +4514,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-DiffAdd| A added line in diff mode
|hl-DiffChange| C changed line in diff mode
|hl-DiffDelete| D deleted line in diff mode
|hl-DiffText| T inserted text in diff mode
|hl-DiffText| T changed text in diff mode
|hl-DiffTextAdd| E inserted text in diff mode
|hl-SignColumn| > column used for |signs|
|hl-Conceal| - the placeholders used for concealed characters
(see 'conceallevel')
@@ -5296,6 +5364,18 @@ A jump table for the options with a short description can be found at |Q_op|.
temporarily when performing an operation where redrawing may cause
flickering or cause a slowdown.
*'lhistory'* *'lhi'*
'lhistory' 'lhi' number (default: 10)
local to window
{only available when compiled with the |+quickfix|
feature}
Like 'chistory', but for the location list stack associated with a
window. If the option is changed in either the location list window
itself or the window that is associated with the location list stack,
the new value will also be applied to the other one. This means this
value will always be the same for a given location list window and its
corresponding window. See |quickfix-stack| for additional info.
*'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
'linebreak' 'lbr' boolean (default off)
local to window
@@ -6459,6 +6539,17 @@ A jump table for the options with a short description can be found at |Q_op|.
global
Determines the maximum number of items to show in the popup menu for
Insert mode completion. When zero as much space as available is used.
|ins-completion-menu|.
*'pummaxwidth'* *'pmw'*
'pummaxwidth' 'pmw' number (default 0)
global
Determines the maximum width to use for the popup menu for completion.
When zero, there is no maximum width limit, otherwise the popup menu
will never be wider than this value. Truncated text will be indicated
by "trunc" value of 'fillchars' option.
This option takes precedence over 'pumwidth'.
|ins-completion-menu|.
*'pumwidth'* *'pw'*
@@ -9575,55 +9666,65 @@ A jump table for the options with a short description can be found at |Q_op|.
*'wildmode'* *'wim'*
'wildmode' 'wim' string (Vim default: "full")
global
Completion mode that is used for the character specified with
'wildchar'. It is a comma-separated list of up to four parts. Each
part specifies what to do for each consecutive use of 'wildchar'. The
first part specifies the behavior for the first use of 'wildchar',
The second part for the second use, etc.
Completion mode used for the character specified with 'wildchar'.
This option is a comma-separated list of up to four parts,
corresponding to the first, second, third, and fourth presses of
'wildchar'. Each part is a colon-separated list of completion
behaviors, which are applied simultaneously during that phase.
Each part consists of a colon separated list consisting of the
following possible values:
"" Complete only the first match.
"full" Complete the next full match. After the last match,
the original string is used and then the first match
again. Will also start 'wildmenu' if it is enabled.
"longest" Complete till longest common string. If this doesn't
result in a longer string, use the next part.
"list" When more than one match, list all matches.
"lastused" When completing buffer names and more than one buffer
matches, sort buffers by time last used (other than
the current buffer).
"noselect" Do not pre-select first menu item and start 'wildmenu'
if it is enabled.
When there is only a single match, it is fully completed in all cases
except when "noselect" is present.
The possible behavior values are:
"" Only complete (insert) the first match. No further
matches are cycled or listed.
"full" Complete the next full match. Cycles through all
matches, returning to the original input after the
last match. If 'wildmenu' is enabled, it will be
shown.
"longest" Complete to the longest common substring. If this
doesn't extend the input, the next 'wildmode' part is
used.
"list" If multiple matches are found, list all of them.
"lastused" When completing buffer names, sort them by most
recently used (excluding the current buffer). Only
applies to buffer name completion.
"noselect" If 'wildmenu' is enabled, show the menu but do not
preselect the first item.
If only one match exists, it is completed fully, unless "noselect" is
specified.
Examples of useful colon-separated values:
"longest:full" Like "longest", but also start 'wildmenu' if it is
enabled. Will not complete to the next full match.
"list:full" When more than one match, list all matches and
complete first match.
"list:longest" When more than one match, list all matches and
complete till longest common string.
"list:lastused" When more than one buffer matches, list all matches
and sort buffers by time last used (other than the
current buffer).
Some useful combinations of colon-separated values:
"longest:full" Start with the longest common string and show
'wildmenu' (if enabled). Does not cycle
through full matches.
"list:full" List all matches and complete first match.
"list:longest" List all matches and complete till the longest
common prefix.
"list:lastused" List all matches. When completing buffers,
sort them by most recently used (excluding the
current buffer).
"noselect:lastused" Do not preselect the first item in 'wildmenu'
if it is active. When completing buffers,
sort them by most recently used (excluding the
current buffer).
Examples: >
:set wildmode=full
< Complete first full match, next match, etc. (the default) >
< Complete full match on every press (default behavior) >
:set wildmode=longest,full
< Complete longest common string, then each full match >
< First press: longest common substring
Second press: cycle through full matches >
:set wildmode=list:full
< List all matches and complete each full match >
< First press: list all matches and complete the first one >
:set wildmode=list,full
< List all matches without completing, then each full match >
< First press: list matches only
Second press: complete full matches >
:set wildmode=longest,list
< Complete longest common string, then list alternatives >
< First press: longest common substring
Second press: list all matches >
:set wildmode=noselect:full
< Display 'wildmenu' without completing, then each full match >
< Show 'wildmenu' without completing or selecting on first press
Cycle full matches on second press >
:set wildmode=noselect:lastused,full
< Same as above, but sort buffers by time last used.
< Same as above, but buffer matches are sorted by time last used
More info here: |cmdline-completion|.
*'wildoptions'* *'wop'*

View File

@@ -1,4 +1,4 @@
*pattern.txt* For Vim version 9.1. Last change: 2025 Mar 21
*pattern.txt* For Vim version 9.1. Last change: 2025 Mar 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1222,7 +1222,8 @@ x A single character, with no special meaning, matches itself
\o40 octal number of character up to 0o377
\x20 hexadecimal number of character up to 0xff
\u20AC hex. number of multibyte character up to 0xffff
\U1234 hex. number of multibyte character up to 0xffffffff
\U1234 hex. number of multibyte character up to 8 characters
0xffffffff |E1541|
NOTE: The other backslash codes mentioned above do not work inside
[]!
- Matching with a collection can be slow, because each character in
@@ -1263,7 +1264,8 @@ x A single character, with no special meaning, matches itself
\%u20AC Matches the character specified with up to four hexadecimal
characters.
\%U1234abcd Matches the character specified with up to eight hexadecimal
characters, up to 0x7fffffff
characters, up to 0x7fffffff (the maximum allowed value is INT_MAX
|E1541|, but the maximum valid Unicode codepoint is U+10FFFF).
==============================================================================
7. Ignoring case in a pattern */ignorecase*

View File

@@ -1,4 +1,4 @@
*netrw.txt*
*netrw.txt* *pi_netrw.txt*
------------------------------------------------
NETRW REFERENCE MANUAL by Charles E. Campbell
@@ -431,17 +431,6 @@ settings are described below, in |netrw-browser-options|, and in
*g:netrw_silent* =0 : transfers done normally
=1 : transfers done silently
*g:netrw_use_errorwindow* =2: messages from netrw will use a popup window
Move the mouse and pause to remove the popup window.
(default value if popup windows are available)
=1 : messages from netrw will use a separate one
line window. This window provides reliable
delivery of messages.
(default value if popup windows are not available)
=0 : messages from netrw will use echoerr ;
messages don't always seem to show up this
way, but one doesn't have to quit the window.
*g:netrw_cygwin* =1 assume scp under windows is from cygwin. Also
permits network browsing to use ls with time and
size sorting (default if windows)

View File

@@ -1,4 +1,4 @@
*pi_tar.txt* For Vim version 9.1. Last change: 2024 May 11
*pi_tar.txt* For Vim version 9.1. Last change: 2025 Mar 16
+====================+
| Tar File Interface |
@@ -74,6 +74,15 @@ Copyright 2005-2017: *tar-copyright*
let g:loaded_tarPlugin= 1
let g:loaded_tar = 1
<
*tar-mappings*
MAPPINGS~
The following (buffer-local) mappings are available in a tar buffer:
<CR> Open selected file for editing, any changes will be
written back to the archive.
<LeftMouse> same as <CR>
x Extract selected file.
==============================================================================
3. Options *tar-options*

View File

@@ -1,4 +1,4 @@
*pi_zip.txt* For Vim version 9.1. Last change: 2023 Nov 05
*pi_zip.txt* For Vim version 9.1. Last change: 2025 Apr 02
+====================+
| Zip File Interface |
@@ -100,12 +100,14 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright*
should be treated as zip files.
Alternatively, one may change *g:zipPlugin_ext* in one's .vimrc.
Currently (11/30/15) it holds: >
Currently (as of April 2025) it holds: >
let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,
\ *.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,
\ *.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,
\ *.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx,*.epub'
let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,
\ *.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,
\ *.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,
\ *.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,
\ *.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.whl,*.wsz,
\ *.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip'
==============================================================================
4. History *zip-history* {{{1

View File

@@ -1,4 +1,4 @@
*quickfix.txt* For Vim version 9.1. Last change: 2025 Mar 11
*quickfix.txt* For Vim version 9.1. Last change: 2025 Apr 06
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -43,12 +43,12 @@ From inside Vim an easy way to run a command and handle the output is with the
The 'errorformat' option should be set to match the error messages from your
compiler (see |errorformat| below).
*quickfix-ID*
*quickfix-stack* *quickfix-ID*
Each quickfix list has a unique identifier called the quickfix ID and this
number will not change within a Vim session. The |getqflist()| function can be
used to get the identifier assigned to a list. There is also a quickfix list
number which may change whenever more than ten lists are added to a quickfix
stack.
number which may change whenever more than 'chistory' lists are added to a
quickfix stack.
*location-list* *E776*
A location list is a window-local quickfix list. You get one after commands
@@ -860,10 +860,12 @@ using these functions are below:
=============================================================================
3. Using more than one list of errors *quickfix-error-lists*
So far has been assumed that there is only one list of errors. Actually the
ten last used lists are remembered. When starting a new list, the previous
ones are automatically kept. Two commands can be used to access older error
lists. They set one of the existing error lists as the current one.
So far it has been assumed that there is only one list of errors. Actually
there can be multiple used lists that are remembered; see 'chistory' and
'lhistory'.
When starting a new list, the previous ones are automatically kept. Two
commands can be used to access older error lists. They set one of the
existing error lists as the current one.
*:colder* *:col* *E380*
:col[der] [count] Go to older error list. When [count] is given, do

View File

@@ -1,4 +1,4 @@
*quickref.txt* For Vim version 9.1. Last change: 2025 Feb 08
*quickref.txt* For Vim version 9.1. Last change: 2025 Apr 06
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -639,6 +639,7 @@ Short explanation of each option: *option-list*
'cdpath' 'cd' list of directories searched with ":cd"
'cedit' key used to open the command-line window
'charconvert' 'ccv' expression for character encoding conversion
'chistory' 'chi' maximum number of quickfix lists in history
'cindent' 'cin' do C program indenting
'cinkeys' 'cink' keys that trigger indent when 'cindent' is set
'cinoptions' 'cino' how to do indenting when 'cindent' is set
@@ -786,6 +787,7 @@ Short explanation of each option: *option-list*
'langremap' 'lrm' do apply 'langmap' to mapped characters
'laststatus' 'ls' tells when last window has status lines
'lazyredraw' 'lz' don't redraw while executing macros
'lhistory' 'lhi' maximum number of location lists in history
'linebreak' 'lbr' wrap long lines at a blank
'lines' number of lines in the display
'linespace' 'lsp' number of pixel lines to use between characters

View File

@@ -1,4 +1,4 @@
*syntax.txt* For Vim version 9.1. Last change: 2025 Mar 21
*syntax.txt* For Vim version 9.1. Last change: 2025 Apr 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -2202,12 +2202,12 @@ cycles for such a feature to become either integrated into the platform or
withdrawn from this effort. To cater for early adopters, there is optional
support in Vim for syntax related preview features that are implemented. You
can request it by specifying a list of preview feature numbers as follows: >
:let g:java_syntax_previews = [455, 476]
:let g:java_syntax_previews = [488, 494]
The supported JEP numbers are to be drawn from this table:
`430`: String Templates [JDK 21]
`455`: Primitive types in Patterns, instanceof, and switch
`476`: Module Import Declarations
`488`: Primitive types in Patterns, instanceof, and switch
`494`: Module Import Declarations
Note that as soon as the particular preview feature will have been integrated
into the Java platform, its entry will be removed from the table and related
@@ -2393,11 +2393,16 @@ Comments are also highlighted by default. You can turn this off by using: >
:let make_no_comments = 1
Microsoft Makefile handles variable expansion and comments differently
(backslashes are not used for escape). If you see any wrong highlights
because of this, you can try this: >
There are various Make implementations, which add extensions other than the
POSIX specification and thus are mutually incompatible. If the filename is
BSDmakefile or GNUmakefile, the corresponding implementation is automatically
determined; otherwise vim tries to detect it by the file contents. If you see
any wrong highlights because of this, you can enforce a flavor by setting one
of the following: >
:let make_microsoft = 1
:let g:make_flavor = 'bsd' " or
:let g:make_flavor = 'gnu' " or
:let g:make_flavor = 'microsoft'
MAPLE *maple.vim* *ft-maple-syntax*
@@ -2451,6 +2456,12 @@ have the following in your .vimrc: >
let filetype_m = "mma"
MBSYNC *mbsync.vim* *ft-mbsync-syntax*
The mbsync application uses a configuration file to setup mailboxes names,
user and password. All files ending with `.mbsyncrc` or with the name
`isyncrc` will be recognized as mbsync configuration files.
MEDIAWIKI *ft-mediawiki-syntax*
By default, syntax highlighting includes basic HTML tags like style and
@@ -5832,6 +5843,9 @@ DiffChange Diff mode: Changed line. |diff.txt|
DiffDelete Diff mode: Deleted line. |diff.txt|
*hl-DiffText*
DiffText Diff mode: Changed text within a changed line. |diff.txt|
*hl-DiffTextAdd*
DiffTextAdd Diff mode: Added text within a changed line. Linked to
|hl-DiffText| by default. |diff.txt|
*hl-EndOfBuffer*
EndOfBuffer Filler lines (~) after the last line in the buffer.
By default, this is highlighted like |hl-NonText|.

View File

@@ -134,6 +134,8 @@ $quote eval.txt /*$quote*
'ch' options.txt /*'ch'*
'character' intro.txt /*'character'*
'charconvert' options.txt /*'charconvert'*
'chi' options.txt /*'chi'*
'chistory' options.txt /*'chistory'*
'ci' options.txt /*'ci'*
'cia' options.txt /*'cia'*
'cin' options.txt /*'cin'*
@@ -463,6 +465,8 @@ $quote eval.txt /*$quote*
'lazyredraw' options.txt /*'lazyredraw'*
'lbr' options.txt /*'lbr'*
'lcs' options.txt /*'lcs'*
'lhi' options.txt /*'lhi'*
'lhistory' options.txt /*'lhistory'*
'linebreak' options.txt /*'linebreak'*
'lines' options.txt /*'lines'*
'linespace' options.txt /*'linespace'*
@@ -843,6 +847,7 @@ $quote eval.txt /*$quote*
'pm' options.txt /*'pm'*
'pmbcs' options.txt /*'pmbcs'*
'pmbfn' options.txt /*'pmbfn'*
'pmw' options.txt /*'pmw'*
'popt' options.txt /*'popt'*
'pp' options.txt /*'pp'*
'preserveindent' options.txt /*'preserveindent'*
@@ -860,6 +865,7 @@ $quote eval.txt /*$quote*
'prompt' options.txt /*'prompt'*
'pt' options.txt /*'pt'*
'pumheight' options.txt /*'pumheight'*
'pummaxwidth' options.txt /*'pummaxwidth'*
'pumwidth' options.txt /*'pumwidth'*
'pvh' options.txt /*'pvh'*
'pvp' options.txt /*'pvp'*
@@ -2186,6 +2192,7 @@ $quote eval.txt /*$quote*
:TermdebugCommand terminal.txt /*:TermdebugCommand*
:Texplore pi_netrw.txt /*:Texplore*
:Tutor pi_tutor.txt /*:Tutor*
:URLOpen eval.txt /*:URLOpen*
:Until terminal.txt /*:Until*
:Up terminal.txt /*:Up*
:UseVimball pi_vimball.txt /*:UseVimball*
@@ -4619,6 +4626,7 @@ E1538 eval.txt /*E1538*
E1539 vim9.txt /*E1539*
E154 helphelp.txt /*E154*
E1540 eval.txt /*E1540*
E1541 vi_diff.txt /*E1541*
E155 sign.txt /*E155*
E156 sign.txt /*E156*
E157 sign.txt /*E157*
@@ -7380,12 +7388,14 @@ ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax*
ft-gdscript-plugin filetype.txt /*ft-gdscript-plugin*
ft-gitcommit-plugin filetype.txt /*ft-gitcommit-plugin*
ft-gitrebase-plugin filetype.txt /*ft-gitrebase-plugin*
ft-gleam-plugin filetype.txt /*ft-gleam-plugin*
ft-go-plugin filetype.txt /*ft-go-plugin*
ft-gprof-plugin filetype.txt /*ft-gprof-plugin*
ft-groff-syntax syntax.txt /*ft-groff-syntax*
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
ft-hare filetype.txt /*ft-hare*
ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
ft-help-omni helphelp.txt /*ft-help-omni*
ft-html-indent indent.txt /*ft-html-indent*
ft-html-omni insert.txt /*ft-html-omni*
ft-html-syntax syntax.txt /*ft-html-syntax*
@@ -7421,6 +7431,7 @@ ft-markdown-syntax syntax.txt /*ft-markdown-syntax*
ft-masm-syntax syntax.txt /*ft-masm-syntax*
ft-mathematica-syntax syntax.txt /*ft-mathematica-syntax*
ft-matlab-indent indent.txt /*ft-matlab-indent*
ft-mbsync-syntax syntax.txt /*ft-mbsync-syntax*
ft-mediawiki-syntax syntax.txt /*ft-mediawiki-syntax*
ft-metafont ft_mp.txt /*ft-metafont*
ft-metafont-intro ft_mp.txt /*ft-metafont-intro*
@@ -7757,7 +7768,6 @@ g:netrw_sshport pi_netrw.txt /*g:netrw_sshport*
g:netrw_timefmt pi_netrw.txt /*g:netrw_timefmt*
g:netrw_tmpfile_escape pi_netrw.txt /*g:netrw_tmpfile_escape*
g:netrw_uid pi_netrw.txt /*g:netrw_uid*
g:netrw_use_errorwindow pi_netrw.txt /*g:netrw_use_errorwindow*
g:netrw_use_noswf pi_netrw.txt /*g:netrw_use_noswf*
g:netrw_use_nt_rcp pi_netrw.txt /*g:netrw_use_nt_rcp*
g:netrw_usetab pi_netrw.txt /*g:netrw_usetab*
@@ -8205,6 +8215,7 @@ hl-DiffAdd syntax.txt /*hl-DiffAdd*
hl-DiffChange syntax.txt /*hl-DiffChange*
hl-DiffDelete syntax.txt /*hl-DiffDelete*
hl-DiffText syntax.txt /*hl-DiffText*
hl-DiffTextAdd syntax.txt /*hl-DiffTextAdd*
hl-Directory syntax.txt /*hl-Directory*
hl-EndOfBuffer syntax.txt /*hl-EndOfBuffer*
hl-ErrorMsg syntax.txt /*hl-ErrorMsg*
@@ -8844,6 +8855,7 @@ matlab-indent indent.txt /*matlab-indent*
matlab-indenting indent.txt /*matlab-indenting*
max() builtin.txt /*max()*
maxcol-variable eval.txt /*maxcol-variable*
mbsync.vim syntax.txt /*mbsync.vim*
mbyte-IME mbyte.txt /*mbyte-IME*
mbyte-XIM mbyte.txt /*mbyte-XIM*
mbyte-combining mbyte.txt /*mbyte-combining*
@@ -9444,6 +9456,7 @@ package-hlyank usr_05.txt /*package-hlyank*
package-justify usr_25.txt /*package-justify*
package-matchit usr_05.txt /*package-matchit*
package-nohlsearch usr_05.txt /*package-nohlsearch*
package-open eval.txt /*package-open*
package-termdebug terminal.txt /*package-termdebug*
package-translate_example repeat.txt /*package-translate_example*
package-translation repeat.txt /*package-translation*
@@ -9522,6 +9535,7 @@ phtml.vim syntax.txt /*phtml.vim*
pi_getscript.txt pi_getscript.txt /*pi_getscript.txt*
pi_gzip.txt pi_gzip.txt /*pi_gzip.txt*
pi_logipat.txt pi_logipat.txt /*pi_logipat.txt*
pi_netrw.txt pi_netrw.txt /*pi_netrw.txt*
pi_paren.txt pi_paren.txt /*pi_paren.txt*
pi_spec.txt pi_spec.txt /*pi_spec.txt*
pi_tar.txt pi_tar.txt /*pi_tar.txt*
@@ -9683,6 +9697,7 @@ python-2-and-3 if_pyth.txt /*python-2-and-3*
python-Dictionary if_pyth.txt /*python-Dictionary*
python-Function if_pyth.txt /*python-Function*
python-List if_pyth.txt /*python-List*
python-Tuple if_pyth.txt /*python-Tuple*
python-VIM_SPECIAL_PATH if_pyth.txt /*python-VIM_SPECIAL_PATH*
python-_get_paths if_pyth.txt /*python-_get_paths*
python-bindeval if_pyth.txt /*python-bindeval*
@@ -9760,6 +9775,7 @@ quickfix-pandoc quickfix.txt /*quickfix-pandoc*
quickfix-parse quickfix.txt /*quickfix-parse*
quickfix-perl quickfix.txt /*quickfix-perl*
quickfix-size quickfix.txt /*quickfix-size*
quickfix-stack quickfix.txt /*quickfix-stack*
quickfix-title quickfix.txt /*quickfix-title*
quickfix-valid quickfix.txt /*quickfix-valid*
quickfix-window quickfix.txt /*quickfix-window*
@@ -10666,6 +10682,7 @@ tar-contents pi_tar.txt /*tar-contents*
tar-copyright pi_tar.txt /*tar-copyright*
tar-history pi_tar.txt /*tar-history*
tar-manual pi_tar.txt /*tar-manual*
tar-mappings pi_tar.txt /*tar-mappings*
tar-options pi_tar.txt /*tar-options*
tar-usage pi_tar.txt /*tar-usage*
tcl if_tcl.txt /*tcl*
@@ -10931,6 +10948,7 @@ tuple-concatenation eval.txt /*tuple-concatenation*
tuple-functions usr_41.txt /*tuple-functions*
tuple-identity eval.txt /*tuple-identity*
tuple-index eval.txt /*tuple-index*
tuple-modification eval.txt /*tuple-modification*
tuple-type vim9.txt /*tuple-type*
tuple2list() builtin.txt /*tuple2list()*
tutor usr_01.txt /*tutor*

View File

@@ -1,4 +1,4 @@
*testing.txt* For Vim version 9.1. Last change: 2025 Mar 23
*testing.txt* For Vim version 9.1. Last change: 2025 Mar 25
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -68,7 +68,7 @@ test_feedinput({string}) *test_feedinput()*
test_garbagecollect_now() *test_garbagecollect_now()*
Like garbagecollect(), but executed right away. This must
Like |garbagecollect()|, but executed right away. This must
only be called directly to avoid any structure to exist
internally, and |v:testing| must have been set before calling
any function. *E1142*

View File

@@ -1,4 +1,4 @@
*todo.txt* For Vim version 9.1. Last change: 2025 Mar 08
*todo.txt* For Vim version 9.1. Last change: 2025 Mar 27
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -357,8 +357,6 @@ https://github.com/vim/vim/pull/5566
PR #11579 to add visualtext(), return Visually selected text.
PR #12032: Support Python 3 stable ABI.
PR #11860: Add more info to 'colorcolumn': display a character and highlight
for each separate entry. Disadvantage: option value gets very complicated
with multiple entries, e.g. every 8 columns.
@@ -706,8 +704,6 @@ find them. (Max Kukartsev, #6218)
Enable 'termbidi' if $VTE_VERSION >= 5703 ?
Python 3.8 doesn't work. (Antonios Hadjigeorgalis, #5509)
"--cleanFOO" does not result in an error. (#5537)
Output from assert_equalfile() doesn't give a hint about what's different.
@@ -1490,8 +1486,6 @@ github with a URL like this:
https://github.com/vim/vim/compare/v7.4.920%5E...v7.4.920.diff
Diff for version.c contains more context, can't skip a patch.
Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
Comparing nested structures with "==" uses a different comparator than when
comparing individual items.
@@ -1514,9 +1508,6 @@ C highlighting: modern C allows: /* comment */ #ifdef
and also line continuation after #include.
I can't recommend it though.
Build with Python on Mac does not always use the right library.
(Kazunobu Kuriyama, 2015 Mar 28)
To support Thai (and other languages) word boundaries, include the ICU
library: http://userguide.icu-project.org/boundaryanalysis
@@ -1793,13 +1784,6 @@ Problem with refresh:always in completion. (Tyler Wade, 2013 Mar 17)
b:undo_ftplugin cannot call a script-local function. (Boris Danilov, 2013 Jan
7)
Win32: The Python interface only works with one version of Python, selected at
compile time. Can this be made to work with version 2.1 and 2.2 dynamically?
Python: Be able to define a Python function that can be called directly from
Vim script. Requires converting the arguments and return value, like with
vim.bindeval().
Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers,
2012 Aug 4)
@@ -2912,6 +2896,20 @@ Quickfix/Location List:
7 Add a command that goes back to the position from before jumping to the
first quickfix location.
Python Interface:
- Python 3.8 doesn't work. (Antonios Hadjigeorgalis, #5509)
- Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
- Build with Python on Mac does not always use the right library.
(Kazunobu Kuriyama, 2015 Mar 28)
- Win32: The Python interface only works with one version of Python,
selected at compile time. Can this be made to work with version 2.1 and
2.2 dynamically?
- Be able to define a Python function that can be called directly from Vim
script. Requires converting the arguments and return value, like with
vim.bindeval().
Vi incompatibility:
- Try new POSIX tests, made after my comments. (Geoff Clare, 2005 April 7)
Version 1.5 is in ~/src/posix/1.5. (Lynne Canal)

View File

@@ -1,4 +1,4 @@
*usr_05.txt* For Vim version 9.1. Last change: 2025 Mar 22
*usr_05.txt* For Vim version 9.1. Last change: 2025 Apr 10
VIM USER MANUAL - by Bram Moolenaar
@@ -307,23 +307,27 @@ This switches on three very clever mechanisms:
filetypes. See |:filetype-indent-on| and 'indentexpr'.
*restore-cursor* *last-position-jump* >
*restore-cursor* *last-position-jump* >vim
augroup RestoreCursor
autocmd!
autocmd BufReadPost *
\ let line = line("'\"")
\ | if line >= 1 && line <= line("$") && &filetype !~# 'commit'
\ && index(['xxd', 'gitrebase'], &filetype) == -1
\ && !&diff
\ | execute "normal! g`\""
\ | endif
augroup END
Another autocommand. This time it is used after reading any file. The
complicated stuff after it checks if the '" mark is defined, and jumps to it
if so. It doesn't do that for a commit or rebase message, which are likely
a different one than last time, and when using xxd(1) to filter and edit
binary files, which transforms input files back and forth, causing them to
have dual nature, so to speak. See also |using-xxd|.
if so. It doesn't do that when:
- editing a commit or rebase message, which are likely a different one than
last time,
- using xxd(1) to filter and edit binary files, which transforms input files
back and forth, causing them to have dual nature, so to speak (see also
|using-xxd|) and
- Vim is in diff mode
The backslash at the start of a line is used to continue the command from the
previous line. That avoids a line getting very long. See |line-continuation|.

View File

@@ -1,4 +1,4 @@
*usr_41.txt* For Vim version 9.1. Last change: 2025 Mar 23
*usr_41.txt* For Vim version 9.1. Last change: 2025 Mar 30
VIM USER MANUAL - by Bram Moolenaar
@@ -862,7 +862,7 @@ Tuple manipulation: *tuple-functions*
reverse() reverse the order of items in a Tuple
slice() take a slice of a Tuple
string() string representation of a Tuple
tuple2list() convert a Tuple of items into a list
tuple2list() convert a Tuple into a List
Dictionary manipulation: *dict-functions*
get() get an entry without an error for a wrong key

View File

@@ -1,4 +1,4 @@
*version9.txt* For Vim version 9.1. Last change: 2025 Mar 23
*version9.txt* For Vim version 9.1. Last change: 2025 Apr 15
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -41553,6 +41553,18 @@ Enum support for Vim9 script |:enum|
Support for protected _new() method
Add support for object<{type}> as variable data type |vim9-types|
Diff mode ~
---------
Include the "linematch" algorithm for the 'diffopt' setting. This aligns
changes between buffers on similar lines improving the diff highlighting in
Vim
Improve the diff highlighting for changes within a line. Configurable using
the "inline" sub option value for the 'diffopt' setting, with "inline:simple"
being added to the default "diffopt" value (but this does not change how diff
mode works).
*new-other-9.2*
Other new features ~
------------------
@@ -41570,10 +41582,6 @@ Support highlighting the matched text and the completion kind for insert-mode
completion and command-line completion in |ins-completion-menu|, see
|complete-items|
Include the "linematch" algorithm for the 'diffopt' setting. This aligns
changes between buffers on similar lines improving the diff highlighting in
Vim
Support for the |Tuple| data type in Vim script and Vim9 script.
*changed-9.2*
@@ -41590,7 +41598,6 @@ Default values: ~
- the default value of the 'keyprotocol' option has been updated and support
for the ghostty terminal emulator (using kitty protocol) has been added
Completion: ~
- allow to complete directories from 'cdpath' for |:cd| and similar commands,
add the "cd_in_path" completion type for e.g. |:command-complete| and
@@ -41606,10 +41613,15 @@ Completion: ~
- New option value for 'completeopt':
"nosort" - do not sort completion results
"preinsert" - highlight to be inserted values
- handle multi-line completion as expected
"nearest" - sort completion results by distance to cursor
- handle multi-line completion items as expected
- improved commandline completion for the |:hi| command
- New option value for 'wildmode':
"noselect" - do not auto select an entry in the wildmenu
- New flags for 'complete':
"f{func}" - complete using given function
"f" - complete using 'completefunc'
"o" - complete using 'omnifunc'
Options: ~
- the default for 'commentstring' contains whitespace padding to have
@@ -41622,6 +41634,9 @@ Options: ~
- 'rulerformat' now supports the |stl-%!| item
- use 'smoothscroll' logic for CTRL-F / CTRL-B for pagewise scrolling
and CTRL-D / CTRL-U for half-pagewise scrolling
- New option value for 'fillchars':
"trunc" - configure truncation indicator, 'pummaxwidth'
"truncrl" - like "trunc" but in 'rl' mode, 'pummaxwidth'
Ex commands: ~
- allow to specify a priority when defining a new sign |:sign-define|
@@ -41702,7 +41717,8 @@ Autocommands: ~
Highlighting: ~
|hl-ComplMatchIns| matched text of the currently inserted completion.
|hl-ComplMatchIns| matched text of the currently inserted completion
|hl-DiffTextAdd| added text within a changed line
|hl-MsgArea| highlighting of the Command-line and messages area
|hl-PmenuMatch| Popup menu: highlighting of matched text
|hl-PmenuMatchSel| Popup menu: highlighting of matched text in selected
@@ -41720,6 +41736,7 @@ Ex-Commands: ~
Options: ~
'chistory' Size of the quickfix stack |quickfix-stack|.
'completefuzzycollect' Enable fuzzy collection of candiates for (some)
|ins-completion| modes
'completeitemalign' Order of |complete-items| in Insert mode completion
@@ -41727,11 +41744,13 @@ Options: ~
'eventignorewin' autocommand events that are ignored in a window
'findfunc' Vim function to obtain the results for a |:find|
command
'lhistory' Size of the location list stack |quickfix-stack|.
'messagesopt' configure |:messages| and |hit-enter| prompt
'winfixbuf' Keep buffer focused in a window
'pummaxwidth' maximum width for the completion popup menu
'tabclose' Which tab page to focus after closing a tab page
't_xo' Terminal uses XON/XOFF handshaking (e.g. vt420)
't_CF' Support for alternate font highlighting terminal code
'winfixbuf' Keep buffer focused in a window
==============================================================================
INCOMPATIBLE CHANGES *incompatible-9.2*

View File

@@ -1,4 +1,4 @@
*vi_diff.txt* For Vim version 9.1. Last change: 2024 Nov 10
*vi_diff.txt* For Vim version 9.1. Last change: 2025 Mar 28
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -91,8 +91,11 @@ Maximum display width Unix and Win32: 1024 characters, otherwise 255
Maximum lhs of a mapping 50 characters.
Number of different highlighting types: over 30000
Range of a Number variable: -2147483648 to 2147483647 (might be more on 64
bit systems)
bit systems) See also: |v:numbermax|,
|v:numbermin| and |v:numbersize|
Maximum length of a line in a tags file: 512 bytes.
*E1541*
Maximum value for |/\U| and |/\%U|: 2147483647 (for 32bit integer).
Information for undo and text in registers is kept in memory, thus when making
(big) changes the amount of (virtual) memory available limits the number of

View File

@@ -1,4 +1,4 @@
*vim9.txt* For Vim version 9.1. Last change: 2025 Mar 23
*vim9.txt* For Vim version 9.1. Last change: 2025 Apr 03
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1467,6 +1467,7 @@ The following builtin types are supported:
blob
list<{type}>
dict<{type}>
object<{type}>
job
channel
tuple<{type}>

View File

@@ -1,4 +1,4 @@
*vim9class.txt* For Vim version 9.1. Last change: 2025 Feb 16
*vim9class.txt* For Vim version 9.1. Last change: 2025 Apr 13
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -641,8 +641,8 @@ class, then the type of the variable is set.
The following reserved keyword names cannot be used as an object or class
variable name: "super", "this", "true", "false", "null", "null_blob",
"null_dict", "null_function", "null_list", "null_partial", "null_string",
"null_channel" and "null_job".
"null_channel", "null_class", "null_dict", "null_function", "null_job",
"null_list", "null_object", "null_partial" and "null_string".
Extending a class ~
*extends*
@@ -1067,6 +1067,22 @@ The above enum definition is equivalent to the following class definition: >
public const ordinal: number
endclass
<
A enum can contain object variables and methods just like a regular
class: >
enum Color
Cyan([0, 255, 255]),
Magenta([255, 0, 255]),
Gray([128, 128, 128])
var rgb_values: list<number>
def Get_RGB(): list<number>
return this.rgb_values
enddef
endenum
echo Color.Magenta.Get_RGB()
<
==============================================================================
9. Rationale

View File

@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2025 Mar 18
" Last Change: 2025 Apr 15
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" Listen very carefully, I will say this only once
@@ -53,7 +53,7 @@ endfunc
" Vim help file, set ft explicitly, because 'modeline' might be off
au BufNewFile,BufRead */doc/*.txt
\ if getline('$') =~ '\(^\|\s\)vim:.*\<\(ft\|filetype\)=help\>'
\ if getline('$') =~ '\%(^\|\s\)vim:\%(.*\%(:\|\s\)\)\?\%(ft\|filetype\)=help\%(:\|\s\|$\)'
\| setf help
\| endif
@@ -561,6 +561,9 @@ au BufNewFile,BufRead *.cu,*.cuh setf cuda
" Cue
au BufNewFile,BufRead *.cue setf cue
" DAX
au BufNewFile,BufRead *.dax setf dax
" Debian devscripts
au BufNewFile,BufRead devscripts.conf,.devscripts setf sh
@@ -1551,7 +1554,7 @@ au BufNewFile,BufRead *.nb,*.wl setf mma
au BufNewFile,BufRead *.mel setf mel
" mbsync
au BufNewFile,BufRead .mbsyncrc setf conf
au BufNewFile,BufRead *.mbsyncrc,isyncrc setf mbsync
" mcmeta
au BufNewFile,BufRead *.mcmeta setf json
@@ -1723,7 +1726,7 @@ au BufNewFile,BufRead *.me
\ setf nroff |
\ endif
au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom setf nroff
au BufNewFile,BufRead *.[1-9] call dist#ft#FTnroff()
au BufNewFile,BufRead *.[0-9],*.[013]p,*.[1-8]x,*.3{am,perl,pm,posix,type},*.[nlop] call dist#ft#FTnroff()
" Nroff or Objective C++
au BufNewFile,BufRead *.mm call dist#ft#FTmm()
@@ -1964,6 +1967,9 @@ au BufNewFile,BufRead *.ps1,*.psd1,*.psm1,*.pssc setf ps1
au BufNewFile,BufRead *.ps1xml setf ps1xml
au BufNewFile,BufRead *.cdxml,*.psc1 setf xml
" Power Query M
au BufNewFile,BufRead *.pq setf pq
" Printcap and Termcap
au BufNewFile,BufRead *printcap
\ let b:ptcap_type = "print" | setf ptcap
@@ -3180,7 +3186,7 @@ au BufNewFile,BufRead */etc/sensors.d/[^.]* call s:StarSetf('sensors')
au BufNewFile,BufRead */etc/logcheck/*.d*/* call s:StarSetf('logcheck')
" Makefile
au BufNewFile,BufRead [mM]akefile* call s:StarSetf('make')
au BufNewFile,BufRead [mM]akefile* if expand('<afile>:t') !~ g:ft_ignore_pat | call dist#ft#FTmake() | endif
" Ruby Makefile
au BufNewFile,BufRead [rR]akefile* call s:StarSetf('ruby')

16
runtime/ftplugin/dax.vim Normal file
View File

@@ -0,0 +1,16 @@
" Vim filetype plugin
" Language: Data Analysis Expressions (DAX)
" Maintainer: Anarion Dunedain <anarion80@gmail.com>
" Last Change: 2025 Apr 2
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
setlocal commentstring=//\ %s
let b:undo_ftplugin = 'setl com< cms<'

View File

@@ -2,9 +2,12 @@
" Language: fstab file
" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
" URL: https://raw.github.com/rid9/vim-fstab/master/ftplugin/fstab.vim
" Last Change: 2021 Jan 02
" 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
" Version: 1.0
" Last Change: 2025 Mar 31
" Version: 1.0.1
"
" Changelog:
" - 2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
" - 2025 Mar 31 added setlocal formatoptions-=t
"
" Credits:
" Subhaditya Nath <sn03.general@gmail.com>
@@ -15,6 +18,8 @@ endif
let b:did_ftplugin = 1
setlocal commentstring=#\ %s
let b:undo_ftplugin = "setlocal commentstring<"
setlocal formatoptions-=t
let b:undo_ftplugin = "setlocal commentstring< formatoptions<"
" vim: ts=8 ft=vim

View File

@@ -1,7 +1,8 @@
" Vim filetype plugin file
" Language: Gleam
" Maintainer: Trilowy (https://github.com/trilowy)
" Last Change: 2024 Oct 13
" Language: Gleam
" Maintainer: Kirill Morozov <kirill@robotix.pro>
" Previous Maintainer: Trilowy (https://github.com/trilowy)
" Last Change: 2025 Apr 16
if exists('b:did_ftplugin')
finish
@@ -10,7 +11,15 @@ let b:did_ftplugin = 1
setlocal comments=://,:///,:////
setlocal commentstring=//\ %s
setlocal formatprg=gleam\ format\ --stdin
let b:undo_ftplugin = "setlocal comments< commentstring<"
let b:undo_ftplugin = "setlocal com< cms< fp<"
if get(g:, "gleam_recommended_style", 1)
setlocal expandtab
setlocal shiftwidth=2
setlocal softtabstop=2
let b:undo_ftplugin ..= " | setlocal et< sw< sts<"
endif
" vim: sw=2 sts=2 et

View File

@@ -5,12 +5,16 @@
" 2024 Jul 16 by Vim Project (add recommended indent style)
" 2025 Mar 07 by Vim Project (add formatprg and keywordprg option #16804)
" 2025 Mar 18 by Vim Project (use :term for 'keywordprg' #16911)
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal formatoptions-=t
setlocal formatprg=gofmt
@@ -45,4 +49,7 @@ if !exists('*' .. expand('<SID>') .. 'GoKeywordPrg')
endfunc
endif
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: sw=2 sts=2 et

View File

@@ -2,12 +2,16 @@
" Language: HEEx
" Maintainer: Mitchell Hanberg <vimNOSPAM@mitchellhanberg.com>
" Last Change: 2022 Sep 21
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal shiftwidth=2 softtabstop=2 expandtab
setlocal comments=:<%!--
@@ -25,3 +29,6 @@ if exists("loaded_matchit") && !exists("b:match_words")
\ '<\@<=\([^/!][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>'
let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words"
endif
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,7 +1,8 @@
" Vim filetype plugin file
" Language: Vim help file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2018-12-29
" Last Change: 2025 Apr 08
" 2025 Apr 08 by Vim project (set 'omnifunc' and 'iskeyword', #17073)
if exists("b:did_ftplugin")
finish
@@ -11,12 +12,33 @@ let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
let b:undo_ftplugin = "setl fo< tw< cole< cocu< keywordprg<"
let b:undo_ftplugin = "setl isk< fo< tw< cole< cocu< keywordprg< omnifunc<"
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help
setlocal formatoptions+=tcroql textwidth=78 keywordprg=:help omnifunc=s:HelpComplete
let &l:iskeyword='!-~,^*,^|,^",192-255'
if has("conceal")
setlocal cole=2 cocu=nc
endif
if !exists('*s:HelpComplete')
func s:HelpComplete(findstart, base)
if a:findstart
let colnr = col('.') - 1 " Get the column number before the cursor
let line = getline('.')
for i in range(colnr - 1, 0, -1)
if line[i] ==# '|'
return i + 1 " Don't include the `|` in base
elseif line[i] ==# "'"
return i " Include the `'` in base
endif
endfor
else
return taglist('^' .. a:base)
\ ->map({_, item -> #{word: item->get('name'), kind: item->get('kind')}})
\ ->extend(getcompletion(a:base, 'help'))
endif
endfunc
endif
let &cpo = s:cpo_save
unlet s:cpo_save

22
runtime/ftplugin/lf.vim Normal file
View File

@@ -0,0 +1,22 @@
" Vim filetype plugin file
" Language: lf file manager configuration file (lfrc)
" Maintainer: Andis Sprinkis <andis@sprinkis.com>
" URL: https://github.com/andis-sprinkis/lf-vim
" Last Change: 6 Apr 2025
if exists("b:did_ftplugin") | finish | endif
let b:did_ftplugin = 1
let s:cpo = &cpo
set cpo&vim
let b:undo_ftplugin = "setlocal comments< commentstring< formatoptions<"
setlocal comments=:#
setlocal commentstring=#\ %s
setlocal formatoptions-=t formatoptions+=rol
let &cpo = s:cpo
unlet s:cpo

View File

@@ -2,7 +2,9 @@
" Language: LambdaProlog (Teyjus)
" Maintainer: Markus Mottl <markus.mottl@gmail.com>
" URL: http://www.ocaml.info/vim/ftplugin/lprolog.vim
" Last Change: 2023 Aug 28 - added undo_ftplugin (Vim Project)
" Last Change: 2025 Apr 16
" 2025 Apr 16 - set 'cpoptions' for line continuation
" 2023 Aug 28 - added undo_ftplugin (Vim Project)
" 2006 Feb 05
" 2001 Sep 16 - fixed 'no_mail_maps'-bug (MM)
" 2001 Sep 02 - initial release (MM)
@@ -12,6 +14,9 @@ if exists("b:did_ftplugin")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" Don't do other file type settings for this buffer
let b:did_ftplugin = 1
@@ -43,3 +48,6 @@ if !exists("no_plugin_maps") && !exists("no_lprolog_maps")
vnoremap <buffer> <Plug>BUncomOn <ESC>:'<,'><CR>`<O<ESC>0i/*<ESC>`>o<ESC>0i*/<ESC>`<
vnoremap <buffer> <Plug>BUncomOff <ESC>:'<,'><CR>`<dd`>dd`<
endif
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -1,4 +1,5 @@
" Vim filetype plugin file.
" Language: Lua
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: Max Ischenko <mfi@ukr.net>
@@ -6,7 +7,8 @@
" C.D. MacEachern <craig.daniel.maceachern@gmail.com>
" Tyler Miller <tmillr@proton.me>
" Phạm Bình An <phambinhanctb2004@gmail.com>
" Last Change: 2025 Feb 27
" @konfekt
" Last Change: 2025 Apr 04
if exists("b:did_ftplugin")
finish
@@ -61,7 +63,7 @@ endif
if has("folding") && get(g:, "lua_folding", 0)
setlocal foldmethod=expr
setlocal foldexpr=s:LuaFold(v:lnum)
setlocal foldexpr=s:LuaFold()
let b:lua_lasttick = -1
let b:undo_ftplugin ..= " | setl foldexpr< foldmethod< | unlet! b:lua_lasttick b:lua_foldlists"
endif
@@ -97,9 +99,9 @@ let s:patterns = [
\ ['local\s+function\s+.+', 'end'],
\ ]
function s:LuaFold(lnum) abort
function s:LuaFold() abort
if b:lua_lasttick == b:changedtick
return b:lua_foldlists[a:lnum - 1]
return b:lua_foldlists[v:lnum - 1]
endif
let b:lua_lasttick = b:changedtick
@@ -108,26 +110,78 @@ function s:LuaFold(lnum) abort
let buf = getline(1, "$")
for line in buf
for t in s:patterns
let open = 0
let end = 0
let tagopen = '\v^\s*' .. t[0] ..'\s*$'
let tagclose = '\v^\s*' .. t[1] ..'\s*$'
let tagend = '\v^\s*' .. t[1] ..'\s*$'
if line =~# tagopen
call add(foldlist, t)
let open = 1
break
elseif line =~# tagclose
elseif line =~# tagend
if len(foldlist) > 0 && line =~# foldlist[-1][1]
call remove(foldlist, -1)
let end = 1
else
let foldlist = []
endif
break
endif
endfor
call add(b:lua_foldlists, len(foldlist))
let prefix = ""
if open == 1 | let prefix = ">" | endif
if end == 1 | let prefix = "<" | endif
let b:lua_foldlists += [prefix..(len(foldlist) + end)]
endfor
return lua_foldlists[a:lnum - 1]
return b:lua_foldlists[v:lnum - 1]
endfunction
if !has('vim9script')
let &cpo = s:cpo_save
unlet s:cpo_save
finish
endif
delfunction! s:LuaFold
def s:LuaFold(): string
if b:lua_lasttick == b:changedtick
return b:lua_foldlists[v:lnum - 1]
endif
b:lua_lasttick = b:changedtick
b:lua_foldlists = []
var foldlist = []
var buf = getline(1, "$")
for line in buf
var open = 0
var end = 0
for t in patterns
var tagopen = '\v^\s*' .. t[0] .. '\s*$'
var tagend = '\v^\s*' .. t[1] .. '\s*$'
if line =~# tagopen
add(foldlist, t)
open = 1
break
elseif line =~# tagend
if len(foldlist) > 0 && line =~# foldlist[-1][1]
end = 1
remove(foldlist, -1)
else
foldlist = []
endif
break
endif
endfor
var prefix = ""
if open == 1 | prefix = ">" | endif
if end == 1 | prefix = "<" | endif
b:lua_foldlists += [prefix .. (len(foldlist) + end)]
endfor
return b:lua_foldlists[v:lnum - 1]
enddef
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -0,0 +1,13 @@
" Vim filetype plugin file
" Language: mbsync configuration file
" Maintainer: Pierrick Guillaume <pguillaume@fymyte.com>
" Last Change: 2025 Apr 13
if (exists('b:did_ftplugin'))
finish
endif
let b:did_ftplugin = 1
let b:undo_ftplugin = "setlocal commentstring<"
setlocal commentstring=#\ %s

View File

@@ -3,6 +3,7 @@
" Home: http://en.wikipedia.org/wiki/Wikipedia:Text_editor_support#Vim
" Last Change: 2024 Jul 14
" Credits: chikamichi
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
"
if exists("b:did_ftplugin")
@@ -10,6 +11,9 @@ if exists("b:did_ftplugin")
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
" Many MediaWiki wikis prefer line breaks only at the end of paragraphs
" (like in a text processor), which results in long, wrapping lines.
setlocal wrap linebreak
@@ -40,3 +44,6 @@ setlocal foldmethod=expr
let b:undo_ftplugin = "setl commentstring< comments< formatoptions< foldexpr< foldmethod<"
let b:undo_ftplugin += " matchpairs< linebreak< wrap< textwidth<"
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -2,12 +2,16 @@
" Language: Mojo
" Maintainer: Riley Bruins <ribru17@gmail.com>
" Last Change: 2024 Jul 07
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal include=^\\s*\\(from\\\|import\\)
setlocal define=^\\s*\\(\\(async\\s\\+\\)\\?def\\\|class\\)
@@ -39,3 +43,6 @@ let b:undo_ftplugin = 'setlocal include<'
\ . '|setlocal suffixesadd<'
\ . '|setlocal comments<'
\ . '|setlocal commentstring<'
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -7,12 +7,16 @@
" Last Changes:
" 2024 May 24 by Riley Bruins <ribru17@gmail.com> ('commentstring' #14843)
" 2025 Feb 12 by Wu, Zhenyu <wuzhenyu@ustc.edu> (matchit configuration #16619)
" 2025 Apr 16 by Eisuke Kawashima (cpoptions #17121)
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal commentstring=.\\\"\ %s
setlocal comments=:.\\\"
setlocal sections+=Sh
@@ -30,3 +34,6 @@ if exists('loaded_matchit')
\ . ',^\.\s*FS\>:^\.\s*FE\>'
let b:undo_ftplugin .= "| unlet b:match_words"
endif
let &cpo = s:cpo_save
unlet s:cpo_save

16
runtime/ftplugin/pq.vim Normal file
View File

@@ -0,0 +1,16 @@
" Vim filetype plugin
" Language: Power Query M
" Maintainer: Anarion Dunedain <anarion80@gmail.com>
" Last Change: 2025 Apr 3
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
setlocal commentstring=//\ %s
let b:undo_ftplugin = 'setl com< cms<'

View File

@@ -0,0 +1,14 @@
" Vim filetype plugin file
" Language: Remind - a sophisticated calendar and alarm
" Maintainer: Joe Reynolds <joereynolds952@gmail.com>
" Latest Revision: 2025 April 08
" License: Vim (see :h license)
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
setlocal comments=:# commentstring=#\ %s
let b:undo_ftplugin = "setl cms< com<"

View File

@@ -3,6 +3,7 @@
" Maintainer: Chris Morgan <me@chrismorgan.info>
" Last Change: 2024 Mar 17
" 2024 May 23 by Riley Bruins <ribru17@gmail.com ('commentstring')
" 2025 Mar 31 by Vim project (set 'formatprg' option)
" For bugs, patches and license go to https://github.com/rust-lang/rust.vim
if exists("b:did_ftplugin")
@@ -57,6 +58,19 @@ setlocal includeexpr=rust#IncludeExpr(v:fname)
setlocal suffixesadd=.rs
if executable(get(g:, 'rustfmt_command', 'rustfmt'))
if get(g:, "rustfmt_fail_silently", 0)
augroup rust.vim.FailSilently
autocmd! * <buffer>
autocmd ShellFilterPost <buffer> if v:shell_error | execute 'echom "shell filter returned error " . v:shell_error . ", undoing changes"' | undo | endif
augroup END
endif
let &l:formatprg = get(g:, 'rustfmt_command', 'rustfmt') . ' ' .
\ get(g:, 'rustfmt_options', '') . ' ' .
\ rustfmt#RustfmtConfigOptions()
endif
if exists("g:ftplugin_rust_source_path")
let &l:path=g:ftplugin_rust_source_path . ',' . &l:path
endif
@@ -149,7 +163,7 @@ endif
let b:undo_ftplugin = "
\ compiler make |
\ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd<
\ setlocal formatoptions< comments< commentstring< include< includeexpr< suffixesadd< formatprg<
\|if exists('b:rust_set_style')
\|setlocal tabstop< shiftwidth< softtabstop< expandtab< textwidth<
\|endif

View File

@@ -1,13 +1,40 @@
" Vim filetype plugin
" Language: svelte
" Maintainer: Igor Lacerda <igorlafarsi@gmail.com>
" Last Change: 2024 Jun 09
" Last Change: 2025 Apr 06
if exists('b:did_ftplugin')
finish
endif
let b:did_ftplugin = 1
setl commentstring=<!--\ %s\ -->
let s:cpo_sav = &cpo
set cpo&vim
let b:undo_ftplugin = 'setl cms<'
setlocal matchpairs+=<:>
setlocal commentstring=<!--\ %s\ -->
setlocal comments=s:<!--,m:\ \ \ \ ,e:-->
let b:undo_ftplugin = 'setlocal comments< commentstring< matchpairs<'
if exists('&omnifunc')
setlocal omnifunc=htmlcomplete#CompleteTags
call htmlcomplete#DetectOmniFlavor()
let b:undo_ftplugin ..= " | setlocal omnifunc<"
endif
if exists("loaded_matchit") && !exists("b:match_words")
let b:match_ignorecase = 1
let b:match_words = '<:>,' .
\ '<\@<=[ou]l\>[^>]*\%(>\|$\):<\@<=li\>:<\@<=/[ou]l>,' .
\ '<\@<=dl\>[^>]*\%(>\|$\):<\@<=d[td]\>:<\@<=/dl>,' .
\ '<\@<=\([^/][^ \t>]*\)[^>]*\%(>\|$\):<\@<=/\1>,' .
\ '{#\(if\|each\)[^}]*}:{\:else[^}]*}:{\/\(if\|each\)},' .
\ '{#await[^}]*}:{\:then[^}]*}:{\:catch[^}]*}:{\/await},' .
\ '{#snippet[^}]*}:{\/snippet},' .
\ '{#key[^}]*}:{\/key}'
let b:html_set_match_words = 1
let b:undo_ftplugin ..= " | unlet! b:match_ignorecase b:match_words b:html_set_match_words"
endif
let &cpo = s:cpo_sav
unlet! s:cpo_sav

View File

@@ -2,12 +2,16 @@
" Language: Tera
" Maintainer: Muntasir Mahmud <muntasir.joypurhat@gmail.com>
" Last Change: 2025 Mar 08
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal autoindent
setlocal commentstring={#\ %s\ #}
@@ -28,3 +32,6 @@ setlocal softtabstop=2
let b:undo_ftplugin = "setlocal autoindent< commentstring< comments< " ..
\ "includeexpr< suffixesadd< expandtab< shiftwidth< softtabstop<"
let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -2,11 +2,14 @@
" Language: Cucumber
" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
" Last Change: 2023 Dec 28
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists("b:did_indent")
finish
endif
let b:did_indent = 1
let s:cpo_save = &cpo
set cpo&vim
setlocal autoindent
setlocal indentexpr=GetCucumberIndent()
@@ -95,4 +98,7 @@ function! GetCucumberIndent(...) abort
return prev.indent < 0 ? 0 : prev.indent
endfunction
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:set sts=2 sw=2:

View File

@@ -0,0 +1,70 @@
" Vim Keymap file for Brazilian Portuguese - ABNT (without altgr because that would be ABNT2)
" Maintainer: Elsarques
" Last Changed: 2025-04-06
scriptencoding utf-8
let b:keymap_name = "abnt"
loadkeymap
[[ ´ LATIN ACUTE ACCENT
[a á LATIN SMALL LETTER A WITH ACUTE
[e é LATIN SMALL LETTER E WITH ACUTE
[u ú LATIN SMALL LETTER U WITH ACUTE
[i í LATIN SMALL LETTER I WITH ACUTE
[o ó LATIN SMALL LETTER O WITH ACUTE
[A Á LATIN CAPITAL LETTER A WITH ACUTE
[E É LATIN CAPITAL LETTER E WITH ACUTE
[U Ú LATIN CAPITAL LETTER U WITH ACUTE
[I Í LATIN CAPITAL LETTER I WITH ACUTE
[O Ó LATIN CAPITAL LETTER O WITH ACUTE
{{ ` GRAVE
{e è LATIN SMALL LETTER E WITH GRAVE
{a à LATIN SMALL LETTER A WITH GRAVE
{u ù LATIN SMALL LETTER U WITH GRAVE
{i ì LATIN SMALL LETTER I WITH GRAVE
{o ò LATIN SMALL LETTER O WITH GRAVE
{u ù LATIN SMALL LETTER U WITH GRAVE
{E È LATIN CAPITAL LETTER E WITH GRAVE
{A À LATIN CAPITAL LETTER A WITH GRAVE
{U Ù LATIN CAPITAL LETTER U WITH GRAVE
{I Ì LATIN CAPITAL LETTER I WITH GRAVE
{O Ò LATIN CAPITAL LETTER O WITH GRAVE
{U Ù LATIN CAPITAL LETTER U WITH GRAVE
] [ ASCII OPENING BRACKETS
} { ASCII OPENING CURLY BRACKETS
; ç LATIN SMALL LETTER C WITH CEDILLA
: Ç LATIN CAPITAL LETTER C WITH CEDILLA
' ~ ASCII TILDE
'a ã LATIN SMALL LETTER A WITH TILDE
'e LATIN SMALL LETTER E WITH TILDE
'i ĩ LATIN SMALL LETTER I WITH TILDE
'o õ LATIN SMALL LETTER O WITH TILDE
'u ũ LATIN SMALL LETTER U WITH TILDE
'A Ã LATIN CAPITAL LETTER A WITH TILDE
'E LATIN CAPITAL LETTER E WITH TILDE
'I Ĩ LATIN CAPITAL LETTER I WITH TILDE
'O Õ LATIN CAPITAL LETTER O WITH TILDE
'U Ũ LATIN CAPITAL LETTER U WITH TILDE
\" ^ ASCII CIRCUMFLEX
\"a â LATIN SMALL LETTER A WITH CIRCUMFLEX
\"e ê LATIN SMALL LETTER E WITH CIRCUMFLEX
\"i î LATIN SMALL LETTER I WITH CIRCUMFLEX
\"o ô LATIN SMALL LETTER O WITH CIRCUMFLEX
\"u û LATIN SMALL LETTER U WITH CIRCUMFLEX
\"A Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
\"E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
\"I Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
\"O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
\"U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
[- | ASCII VERTICAL-BAR
\\ ] ASCII CLOSING BRACKETS
| } ASCII CLOSING CURLY BRACKETS
/ ; ASCII SEMICOLON
? : ASCII COLON
~ " ASCII DOUBLE QUOTES
¬ \\ ASCII BACKSLASH
® | ASCII HORIZONTAL SLASH
[= / ASCII SLASH
'= ? ASCII INTEROGATION

View File

@@ -0,0 +1,71 @@
" Vim Keymap file for Brazilian Portuguese - ABNT Compact (for keyboards
" with less keys and without altgr because that would be ABNT2)
" Maintainer: Elsarques
" Last Changed: 2025-04-06
scriptencoding utf-8
let b:keymap_name = "abnt-compact"
loadkeymap
[[ ´ LATIN ACUTE ACCENT
[a á LATIN SMALL LETTER A WITH ACUTE
[e é LATIN SMALL LETTER E WITH ACUTE
[u ú LATIN SMALL LETTER U WITH ACUTE
[i í LATIN SMALL LETTER I WITH ACUTE
[o ó LATIN SMALL LETTER O WITH ACUTE
[A Á LATIN CAPITAL LETTER A WITH ACUTE
[E É LATIN CAPITAL LETTER E WITH ACUTE
[U Ú LATIN CAPITAL LETTER U WITH ACUTE
[I Í LATIN CAPITAL LETTER I WITH ACUTE
[O Ó LATIN CAPITAL LETTER O WITH ACUTE
{{ ` GRAVE
{e è LATIN SMALL LETTER E WITH GRAVE
{a à LATIN SMALL LETTER A WITH GRAVE
{u ù LATIN SMALL LETTER U WITH GRAVE
{i ì LATIN SMALL LETTER I WITH GRAVE
{o ò LATIN SMALL LETTER O WITH GRAVE
{u ù LATIN SMALL LETTER U WITH GRAVE
{E È LATIN CAPITAL LETTER E WITH GRAVE
{A À LATIN CAPITAL LETTER A WITH GRAVE
{U Ù LATIN CAPITAL LETTER U WITH GRAVE
{I Ì LATIN CAPITAL LETTER I WITH GRAVE
{O Ò LATIN CAPITAL LETTER O WITH GRAVE
{U Ù LATIN CAPITAL LETTER U WITH GRAVE
] [ ASCII OPENING BRACKETS
} { ASCII OPENING CURLY BRACKETS
; ç LATIN SMALL LETTER C WITH CEDILLA
: Ç LATIN CAPITAL LETTER C WITH CEDILLA
' ~ ASCII TILDE
'a ã LATIN SMALL LETTER A WITH TILDE
'e LATIN SMALL LETTER E WITH TILDE
'i ĩ LATIN SMALL LETTER I WITH TILDE
'o õ LATIN SMALL LETTER O WITH TILDE
'u ũ LATIN SMALL LETTER U WITH TILDE
'A Ã LATIN CAPITAL LETTER A WITH TILDE
'E LATIN CAPITAL LETTER E WITH TILDE
'I Ĩ LATIN CAPITAL LETTER I WITH TILDE
'O Õ LATIN CAPITAL LETTER O WITH TILDE
'U Ũ LATIN CAPITAL LETTER U WITH TILDE
[- \\ ASCII BACKSLASH
[= / ASCII SLASH
\" ^ ASCII CIRCUMFLEX
\"a â LATIN SMALL LETTER A WITH CIRCUMFLEX
\"e ê LATIN SMALL LETTER E WITH CIRCUMFLEX
\"i î LATIN SMALL LETTER I WITH CIRCUMFLEX
\"o ô LATIN SMALL LETTER O WITH CIRCUMFLEX
\"u û LATIN SMALL LETTER U WITH CIRCUMFLEX
\"A Â LATIN CAPITAL LETTER A WITH CIRCUMFLEX
\"E Ê LATIN CAPITAL LETTER E WITH CIRCUMFLEX
\"I Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
\"O Ô LATIN CAPITAL LETTER O WITH CIRCUMFLEX
\"U Û LATIN CAPITAL LETTER U WITH CIRCUMFLEX
\"- | ASCII VERTICAL-BAR
\\ ] ASCII CLOSING BRACKETS
| } ASCII CLOSING CURLY BRACKETS
/ ; ASCII SEMICOLON
? : ASCII COLON
~ " ASCII DOUBLE QUOTES
'- ? ASCII EXCLAMATION
'= | ASCII VERTICAL SLASH

View File

@@ -1,7 +1,7 @@
" These commands create the option window.
"
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2025 Mar 07
" Last Change: 2025 Apr 07
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" If there already is an option window, jump to that one.
@@ -371,7 +371,7 @@ call <SID>AddOption("sidescrolloff", gettext("minimal number of columns to keep
call append("$", " \tset siso=" . &siso)
call <SID>AddOption("display", gettext("include \"lastline\" to show the last line even if it doesn't fit\ninclude \"uhex\" to show unprintable characters as a hex number"))
call <SID>OptionG("dy", &dy)
call <SID>AddOption("fillchars", gettext("characters to use for the status line, folds and filler lines"))
call <SID>AddOption("fillchars", gettext("characters to use for the status line, folds, diffs, buffer text, filler lines and truncation in the completion menu"))
call <SID>OptionG("fcs", &fcs)
call <SID>AddOption("cmdheight", gettext("number of lines used for the command-line"))
call append("$", " \tset ch=" . &ch)
@@ -405,6 +405,13 @@ if has("linebreak")
call append("$", "\t" .. s:local_to_window)
call <SID>OptionL("nuw")
endif
if has("quickfix")
call <SID>AddOption("chistory", gettext("maximum number of quickfix lists that can be stored in history"))
call <SID>OptionL("chi")
call <SID>AddOption("lhistory", gettext("maximum number of location lists that can be stored in history"))
call append("$", "\t" .. s:local_to_window)
call <SID>OptionL("lhi")
endif
if has("conceal")
call <SID>AddOption("conceallevel", gettext("controls whether concealable text is hidden"))
call append("$", "\t" .. s:local_to_window)
@@ -863,6 +870,8 @@ if has("insert_expand")
call <SID>OptionG("ph", &ph)
call <SID>AddOption("pumwidth", gettext("minimum width of the popup menu"))
call <SID>OptionG("pw", &pw)
call <SID>AddOption("pummaxwidth", gettext("maximum width of the popup menu"))
call <SID>OptionG("pmw", &pmw)
call <SID>AddOption("completefunc", gettext("user defined function for Insert mode completion"))
call append("$", "\t" .. s:local_to_buffer)
call <SID>OptionL("cfu")

View File

@@ -1,7 +1,7 @@
vim9script
# Maintainer: Maxim Kim <habamax@gmail.com>
# Last Update: 2025 Mar 21
# Last Update: 2025-03-30
#
# Toggle comments
# Usage:
@@ -107,8 +107,8 @@ export def ObjComment(inner: bool)
# Search for the beginning of the comment block
if IsComment()
if search('\v%(\S+)|$', 'bW', 0, 200, IsComment) > 0
search('\v%(\S)|$', 'W', 0, 200, () => !IsComment())
if search('\v%(\S+)|%(^\s*$)', 'bW', 0, 200, IsComment) > 0
search('\v%(\S)|%(^\s*$)', 'W', 0, 200, () => !IsComment())
else
cursor(1, 1)
search('\v\S+', 'cW', 0, 200)
@@ -130,11 +130,11 @@ export def ObjComment(inner: bool)
if pos_init[1] > pos_start[1]
cursor(pos_init[1], pos_init[2])
endif
if search('\v%(\S+)|$', 'W', 0, 200, IsComment) > 0
if search('\v%(\S+)|%(^\s*$)', 'W', 0, 200, IsComment) > 0
search('\S', 'beW', 0, 200, () => !IsComment())
else
if search('\%$', 'W', 0, 200) > 0
search('\ze\S', 'beW', 0, 200, () => !IsComment())
search('\ze\S', 'beW', line('.'), 200, () => !IsComment())
endif
endif
@@ -144,20 +144,23 @@ export def ObjComment(inner: bool)
var spaces = matchstr(getline(pos_end[1]), '\%>.c\s*')
pos_end[2] += spaces->len()
if getline(pos_end[1])[pos_end[2] : ] =~ '^\s*$'
&& (pos_start[2] == 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$')
&& (pos_start[2] <= 1 || getline(pos_start[1])[ : pos_start[2]] =~ '^\s*$')
if search('\v\s*\_$(\s*\n)+', 'eW', 0, 200) > 0
pos_end = getcurpos()
endif
endif
endif
if (pos_end[2] == (getline(pos_end[1])->len() ?? 1)) && pos_start[2] == 1
if (pos_end[2] == (getline(pos_end[1])->len() ?? 1)) && pos_start[2] <= 1
cursor(pos_end[1], 1)
normal! V
cursor(pos_start[1], 1)
else
cursor(pos_end[1], pos_end[2])
normal! v
if &selection == 'exclusive'
normal! lo
endif
cursor(pos_start[1], pos_start[2])
endif
enddef

View File

@@ -19,7 +19,7 @@ if &cp || exists("g:loaded_netrw")
finish
endif
let g:loaded_netrw = "v179"
let g:loaded_netrw = "v180"
if !has("patch-9.1.1054") && !has('nvim')
echoerr 'netrw needs Vim v9.1.1054'
@@ -58,70 +58,8 @@ function! netrw#ErrorMsg(level, msg, errnum)
let level = "**note** (netrw) "
endif
if g:netrw_use_errorwindow == 2 && exists("*popup_atcursor")
" use popup window
if type(a:msg) == 3
let msg = [level]+a:msg
else
let msg = level.a:msg
endif
let s:popuperr_id = popup_atcursor(msg, {})
let s:popuperr_text = ""
elseif has('nvim')
if has('nvim')
call v:lua.vim.notify(level . a:msg, a:level + 2)
elseif g:netrw_use_errorwindow
" (default) netrw creates a one-line window to show error/warning
" messages (reliably displayed)
" record current window number
let s:winBeforeErr = winnr()
" call Decho("s:winBeforeErr=".s:winBeforeErr,'~'.expand("<slnum>"))
" getting messages out reliably is just plain difficult!
" This attempt splits the current window, creating a one line window.
if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
" call Decho("write to NetrwMessage buffer",'~'.expand("<slnum>"))
exe bufwinnr("NetrwMessage")."wincmd w"
" call Decho("setl ma noro",'~'.expand("<slnum>"))
setl ma noro
if type(a:msg) == 3
for msg in a:msg
NetrwKeepj call setline(line("$")+1,level.msg)
endfor
else
NetrwKeepj call setline(line("$")+1,level.a:msg)
endif
NetrwKeepj $
else
" call Decho("create a NetrwMessage buffer window",'~'.expand("<slnum>"))
bo 1split
sil! call s:NetrwEnew()
sil! NetrwKeepj call s:NetrwOptionsSafe(1)
setl bt=nofile
NetrwKeepj file NetrwMessage
" call Decho("setl ma noro",'~'.expand("<slnum>"))
setl ma noro
if type(a:msg) == 3
for msg in a:msg
NetrwKeepj call setline(line("$")+1,level.msg)
endfor
else
NetrwKeepj call setline(line("$"),level.a:msg)
endif
NetrwKeepj $
endif
" call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr(),'~'.expand("<slnum>"))
if &fo !~ '[ta]'
syn clear
syn match netrwMesgNote "^\*\*note\*\*"
syn match netrwMesgWarning "^\*\*warning\*\*"
syn match netrwMesgError "^\*\*error\*\*"
hi link netrwMesgWarning WarningMsg
hi link netrwMesgError Error
endif
" call Decho("setl noma ro bh=wipe",'~'.expand("<slnum>"))
setl ro nomod noma bh=wipe
else
" (optional) netrw will show messages using echomsg. Even if the
" message doesn't appear, at least it'll be recallable via :messages
@@ -129,15 +67,15 @@ function! netrw#ErrorMsg(level, msg, errnum)
if a:level == s:WARNING
echohl WarningMsg
elseif a:level == s:ERROR
echohl Error
echohl ErrorMsg
endif
if type(a:msg) == 3
for msg in a:msg
unsilent echomsg level.msg
echomsg level.msg
endfor
else
unsilent echomsg level.a:msg
echomsg level.a:msg
endif
echohl None
@@ -186,21 +124,13 @@ let s:has_balloon = !has('nvim') &&
" ---------------------------------------------------------------------
" Default option values: {{{2
let g:netrw_localcopycmdopt = ""
let g:netrw_localcopydircmdopt = ""
let g:netrw_localmkdiropt = ""
let g:netrw_localmovecmdopt = ""
call s:NetrwInit("g:netrw_localcopycmdopt","")
call s:NetrwInit("g:netrw_localcopydircmdopt","")
call s:NetrwInit("g:netrw_localmkdiropt","")
call s:NetrwInit("g:netrw_localmovecmdopt","")
" ---------------------------------------------------------------------
" Default values for netrw's global protocol variables {{{2
if exists("*popup_atcursor")
\ && has("syntax")
\ && exists("g:syntax_on")
\ && has("mouse")
call s:NetrwInit("g:netrw_use_errorwindow",2)
else
call s:NetrwInit("g:netrw_use_errorwindow",1)
endif
if !exists("g:netrw_dav_cmd")
if executable("cadaver")
@@ -404,7 +334,7 @@ if !exists("g:netrw_localcopycmd")
let g:netrw_localcopycmd= "cp"
else
let g:netrw_localcopycmd = expand("$COMSPEC", v:true)
let g:netrw_localcopycmdopt= " /c copy"
call s:NetrwInit("g:netrw_localcopycmdopt"," /c copy")
endif
elseif has("unix") || has("macunix")
let g:netrw_localcopycmd= "cp"
@@ -416,17 +346,17 @@ if !exists("g:netrw_localcopydircmd")
if has("win32")
if g:netrw_cygwin
let g:netrw_localcopydircmd = "cp"
let g:netrw_localcopydircmdopt= " -R"
call s:NetrwInit("g:netrw_localcopydircmdopt"," -R")
else
let g:netrw_localcopydircmd = expand("$COMSPEC", v:true)
let g:netrw_localcopydircmdopt= " /c xcopy /e /c /h /i /k"
call s:NetrwInit("g:netrw_localcopydircmdopt"," /c xcopy /e /c /h /i /k")
endif
elseif has("unix")
let g:netrw_localcopydircmd = "cp"
let g:netrw_localcopydircmdopt= " -R"
call s:NetrwInit("g:netrw_localcopydircmdopt"," -R")
elseif has("macunix")
let g:netrw_localcopydircmd = "cp"
let g:netrw_localcopydircmdopt= " -R"
call s:NetrwInit("g:netrw_localcopydircmdopt"," -R")
else
let g:netrw_localcopydircmd= ""
endif
@@ -439,8 +369,8 @@ if has("win32")
if g:netrw_cygwin
call s:NetrwInit("g:netrw_localmkdir","mkdir")
else
let g:netrw_localmkdir = expand("$COMSPEC", v:true)
let g:netrw_localmkdiropt= " /c mkdir"
call s:NetrwInit("g:netrw_localmkdir",expand("$COMSPEC", v:true))
call s:NetrwInit("g:netrw_localmkdiropt"," /c mkdir")
endif
else
call s:NetrwInit("g:netrw_localmkdir","mkdir")
@@ -458,7 +388,7 @@ if !exists("g:netrw_localmovecmd")
let g:netrw_localmovecmd= "mv"
else
let g:netrw_localmovecmd = expand("$COMSPEC", v:true)
let g:netrw_localmovecmdopt= " /c move"
call s:NetrwInit("g:netrw_localmovecmdopt"," /c move")
endif
elseif has("unix") || has("macunix")
let g:netrw_localmovecmd= "mv"
@@ -2223,7 +2153,7 @@ fun! netrw#NetRead(mode,...)
endif
if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
" call Decho("cleanup by deleting tmpfile<".tmpfile.">",'~'.expand("<slnum>"))
NetrwKeepj call s:NetrwDelete(tmpfile)
call netrw#fs#Remove(tmpfile)
endif
NetrwKeepj call s:NetrwOptionsRestore("w:")
@@ -2591,7 +2521,7 @@ fun! netrw#NetWrite(...) range
" call Decho("cleanup",'~'.expand("<slnum>"))
if s:FileReadable(tmpfile)
" call Decho("tmpfile<".tmpfile."> readable, will now delete it",'~'.expand("<slnum>"))
call s:NetrwDelete(tmpfile)
call netrw#fs#Remove(tmpfile)
endif
call s:NetrwOptionsRestore("w:")
@@ -6424,7 +6354,7 @@ fun! s:NetrwMarkFileCopy(islocal,...)
NetrwKeepj call s:NetrwUpload(localfiles,s:netrwmftgt)
if getcwd() == tmpdir
for fname in s:netrwmarkfilelist_{bufnr('%')}
NetrwKeepj call s:NetrwDelete(fname)
call netrw#fs#Remove(fname)
endfor
if s:NetrwLcd(curdir)
" call Dret("s:NetrwMarkFileCopy : lcd failure")
@@ -7631,7 +7561,9 @@ fun! s:NetrwMenu(domenu)
elseif !a:domenu
let s:netrwcnt = 0
let curwin = winnr()
windo if getline(2) =~# "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
keepjumps windo if getline(2) =~# "Netrw"
let s:netrwcnt = s:netrwcnt + 1
endif
exe curwin."wincmd w"
if s:netrwcnt <= 1
@@ -10291,7 +10223,7 @@ function! s:NetrwLocalRmFile(path, fname, all)
if !dir && (all || empty(ok))
" This works because delete return 0 if successful
if s:NetrwDelete(rmfile)
if netrw#fs#Remove(rmfile)
call netrw#ErrorMsg(s:ERROR, printf("unable to delete <%s>!", rmfile), 103)
else
" Remove file only if there are no pending changes
@@ -10740,51 +10672,6 @@ fun! s:RestoreRegister(dict)
endfor
endfun
" ---------------------------------------------------------------------
" s:NetrwDelete: Deletes a file. {{{2
" Uses Steve Hall's idea to insure that Windows paths stay
" acceptable. No effect on Unix paths.
" Examples of use: let result= s:NetrwDelete(path)
function! s:NetrwDelete(path)
let path = netrw#fs#WinPath(a:path)
if !g:netrw_cygwin && has("win32") && exists("+shellslash")
let sskeep = &shellslash
setl noshellslash
let result = delete(path)
let &shellslash = sskeep
else
let result = delete(path)
endif
if result < 0
NetrwKeepj call netrw#ErrorMsg(s:WARNING, "delete(".path.") failed!", 71)
endif
return result
endfunction
" ---------------------------------------------------------------------
" s:NetrwBufRemover: removes a buffer that: {{{2s
" has buffer-id > 1
" is unlisted
" is unnamed
" does not appear in any window
fun! s:NetrwBufRemover(bufid)
" call Dfunc("s:NetrwBufRemover(".a:bufid.")")
" call Decho("buf#".a:bufid." ".((a:bufid > 1)? ">" : "≯")." must be >1 for removal","~".expand("<slnum>"))
" call Decho("buf#".a:bufid." is ".(buflisted(a:bufid)? "listed" : "unlisted"),"~".expand("<slnum>"))
" call Decho("buf#".a:bufid." has name <".bufname(a:bufid).">","~".expand("<slnum>"))
" call Decho("buf#".a:bufid." has winid#".bufwinid(a:bufid),"~".expand("<slnum>"))
if a:bufid > 1 && !buflisted(a:bufid) && bufloaded(a:bufid) && bufname(a:bufid) == "" && bufwinid(a:bufid) == -1
" call Decho("(s:NetrwBufRemover) removing buffer#".a:bufid,"~".expand("<slnum>"))
exe "sil! bd! ".a:bufid
endif
" call Dret("s:NetrwBufRemover")
endfun
" ---------------------------------------------------------------------
" s:NetrwEnew: opens a new buffer, passes netrw buffer variables through {{{2
fun! s:NetrwEnew(...)
@@ -10794,7 +10681,10 @@ fun! s:NetrwEnew(...)
" Clean out the last buffer:
" Check if the last buffer has # > 1, is unlisted, is unnamed, and does not appear in a window
" If so, delete it.
call s:NetrwBufRemover(bufnr("$"))
let bufid = bufnr('$')
if bufid > 1 && !buflisted(bufid) && bufloaded(bufid) && bufname(bufid) == "" && bufwinid(bufid) == -1
execute printf("silent! bdelete! %s", bufid)
endif
" grab a function-local-variable copy of buffer variables
" call Decho("make function-local copy of netrw variables",'~'.expand("<slnum>"))
@@ -11489,23 +11379,6 @@ endfun
" Deprecated: {{{1
function! netrw#Launch(args)
call netrw#msg#Deprecate('netrw#Launch', 'v180', {'vim': 'dist#vim9#Launch', 'nvim': 'vim.system'})
if !has('nvim')
call dist#vim9#Launch(args)
endif
endfunction
function! netrw#Open(file)
call netrw#msg#Deprecate('netrw#Open', 'v180', {'vim': 'dist#vim9#Open', 'nvim': 'vim.ui.open'})
call netrw#os#Open(a:file)
endfunction
function! netrw#WinPath(path)
call netrw#msg#Deprecate('netrw#WinPath', 'v180', {})
call netrw#fs#WinPath(a:path)
endfunction
" }}}
" Settings Restoration: {{{1
" ==========================

View File

@@ -162,6 +162,30 @@ function! netrw#fs#WinPath(path)
return path
endfunction
" }}}
" netrw#fs#Remove: deletes a file. {{{
" Uses Steve Hall's idea to insure that Windows paths stay
" acceptable. No effect on Unix paths.
function! netrw#fs#Remove(path)
let path = netrw#fs#WinPath(a:path)
if !g:netrw_cygwin && has("win32") && exists("+shellslash")
let sskeep = &shellslash
setl noshellslash
let result = delete(path)
let &shellslash = sskeep
else
let result = delete(path)
endif
if result < 0
call netrw#ErrorMsg(netrw#LogLevel('WARNING'), printf('delete("%s") failed!', path), 71)
endif
return result
endfunction
" }}}
" vim:ts=8 sts=4 sw=4 et fdm=marker

View File

@@ -3,7 +3,7 @@
" BREAKAGES IF USED OUTSIDE OF NETRW.VIM ARE EXPECTED.
let s:deprecation_msgs = []
function! netrw#own#Deprecate(name, version, alternatives)
function! netrw#msg#Deprecate(name, version, alternatives)
" If running on neovim use vim.deprecate
if has('nvim')
let s:alternative = a:alternatives->get('nvim', v:null)

View File

@@ -15,7 +15,7 @@ if &cp || exists("g:loaded_netrwSettings")
finish
endif
let g:loaded_netrwSettings = "v179"
let g:loaded_netrwSettings = "v180"
" NetrwSettings: {{{

View File

@@ -431,17 +431,6 @@ settings are described below, in |netrw-browser-options|, and in
*g:netrw_silent* =0 : transfers done normally
=1 : transfers done silently
*g:netrw_use_errorwindow* =2: messages from netrw will use a popup window
Move the mouse and pause to remove the popup window.
(default value if popup windows are available)
=1 : messages from netrw will use a separate one
line window. This window provides reliable
delivery of messages.
(default value if popup windows are not available)
=0 : messages from netrw will use echoerr ;
messages don't always seem to show up this
way, but one doesn't have to quit the window.
*g:netrw_cygwin* =1 assume scp under windows is from cygwin. Also
permits network browsing to use ls with time and
size sorting (default if windows)

View File

@@ -15,7 +15,7 @@ if &cp || exists("g:loaded_netrwPlugin")
finish
endif
let g:loaded_netrwPlugin = "v179"
let g:loaded_netrwPlugin = "v180"
let s:keepcpo = &cpo
set cpo&vim

View File

@@ -1,6 +1,6 @@
" Vim plugin for showing matching parens
" Maintainer: The Vim Project <https://github.com/vim/vim>
" Last Change: 2025 Mar 14
" Last Change: 2025 Apr 08
" Former Maintainer: Bram Moolenaar <Bram@vim.org>
" Exit quickly when:

View File

@@ -3,12 +3,20 @@ vim9script
# Vim runtime support library
#
# Maintainer: The Vim Project <https://github.com/vim/vim>
# Last Change: 2025 Feb 01
# Last Change: 2025 Apr 02
if exists("g:loaded_openPlugin") || &cp
finish
endif
g:loaded_openPlugin = 1
import autoload 'dist/vim9.vim'
command -complete=shellcmd -nargs=1 Launch vim9.Launch(trim(<q-args>))
command -complete=file -nargs=1 Open vim9.Open(trim(<q-args>))
# technically, -nargs=1 is correct, but this throws E480: No match
# when the argument contains a wildchar on Windows
command -complete=file -nargs=* Open vim9.Open(trim(<q-args>))
const no_gx = get(g:, "nogx", get(g:, "netrw_nogx", false))
if !no_gx

View File

@@ -3,6 +3,8 @@
" Date: Dec 07, 2021
" Maintainer: This runtime file is looking for a new maintainer.
" Former Maintainer: Charles E Campbell
" Last Change:
" 2025 Apr 02 by Vim Project: add *.whl to list of zip extensions (#17038)
" License: Vim License (see vim's :help license)
" Copyright: Copyright (C) 2005-2016 Charles E. Campbell {{{1
" Permission is hereby granted to use and distribute this code,
@@ -28,7 +30,7 @@ set cpo&vim
" ---------------------------------------------------------------------
" Options: {{{1
if !exists("g:zipPlugin_ext")
let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,*.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.wsz,*.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip'
let g:zipPlugin_ext='*.aar,*.apk,*.celzip,*.crtx,*.docm,*.docx,*.dotm,*.dotx,*.ear,*.epub,*.gcsx,*.glox,*.gqsx,*.ja,*.jar,*.kmz,*.odb,*.odc,*.odf,*.odg,*.odi,*.odm,*.odp,*.ods,*.odt,*.otc,*.otf,*.otg,*.oth,*.oti,*.otp,*.ots,*.ott,*.oxt,*.potm,*.potx,*.ppam,*.ppsm,*.ppsx,*.pptm,*.pptx,*.sldx,*.thmx,*.vdw,*.war,*.whl,*.wsz,*.xap,*.xlam,*.xlsb,*.xlsm,*.xlsx,*.xltm,*.xltx,*.xpi,*.zip'
endif
" ---------------------------------------------------------------------

View File

@@ -3,6 +3,7 @@
" Maintainer: Avid Seeker <avidseeker7@protonmail.com>
" Andy Hammerlindl
" Last Change: 2022 Jan 05
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
" Hacked together from Bram Moolenaar's C syntax file, and Claudio Fleiner's
" Java syntax file.
@@ -11,6 +12,9 @@ if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" useful C/C++/Java keywords
syn keyword asyStatement break return continue unravel
syn keyword asyConditional if else
@@ -241,3 +245,5 @@ hi def link asyTodo Todo
hi def link asyPathSpec Statement
let b:current_syntax = "asy"
let &cpo = s:cpo_save
unlet s:cpo_save

151
runtime/syntax/dax.vim Normal file
View File

@@ -0,0 +1,151 @@
" Vim syntax file
" Language: Data Analysis Expressions (DAX)
" Maintainer: Anarion Dunedain <anarion80@gmail.com>
" Last Change:
" 2025 Mar 28 First version
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
let s:keepcpo = &cpo
set cpo&vim
" There are DAX functions with dot in the name (like VARX.S)
setlocal iskeyword+=.
" DAX is case insensitive
syn case ignore
" DAX statements
syn keyword daxStatement DEFINE EVALUATE MEASURE RETURN VAR
syn match daxStatement "ORDER\ BY"
syn match daxStatement "START\ AT"
" TODO
syn keyword daxTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
" DAX functions
syn keyword daxFunction
\ ABS ACCRINT ACCRINTM ACOS ACOSH ACOT ACOTH
\ ADDCOLUMNS ADDMISSINGITEMS ALL ALLCROSSFILTERED ALLEXCEPT ALLNOBLANKROW ALLSELECTED
\ AMORDEGRC AMORLINC AND APPROXIMATEDISTINCTCOUNT ASIN ASINH ATAN
\ ATANH AVERAGE AVERAGEA AVERAGEX BETA.DIST BETA.INV BITAND
\ BITLSHIFT BITOR BITRSHIFT BITXOR BLANK CALCULATE CALCULATETABLE
\ CALENDAR CALENDARAUTO CEILING CHISQ.DIST CHISQ.DIST.RT CHISQ.INV CHISQ.INV.RT
\ CLOSINGBALANCEMONTH CLOSINGBALANCEQUARTER CLOSINGBALANCEYEAR COALESCE COLUMNSTATISTICS COMBIN COMBINA
\ COMBINEVALUES CONCATENATE CONCATENATEX CONFIDENCE.NORM CONFIDENCE.T CONTAINSROW
\ CONTAINSSTRING CONTAINSSTRINGEXACT CONVERT COS COSH COT COTH
\ COUNT COUNTA COUNTAX COUNTBLANK COUNTROWS COUNTX COUPDAYBS
\ COUPDAYS COUPDAYSNC COUPNCD COUPNUM COUPPCD CROSSFILTER CROSSJOIN
\ CUMIPMT CUMPRINC CURRENCY CURRENTGROUP CUSTOMDATA DATATABLE DATE
\ DATEADD DATEDIFF DATESBETWEEN DATESINPERIOD DATESMTD DATESQTD DATESYTD
\ DATEVALUE DAY DB DDB DEGREES DETAILROWS DISC
\ DISTINCT column DISTINCT table DISTINCTCOUNT DISTINCTCOUNTNOBLANK DIVIDE DOLLARDE DOLLARFR
\ DURATION EARLIER EARLIEST EDATE EFFECT ENDOFMONTH ENDOFQUARTER
\ ENDOFYEAR EOMONTH ERROR EVALUATEANDLOG EVEN EXACT EXCEPT
\ EXP EXPON.DIST FACT FALSE FILTER FILTERS FIND
\ FIRST FIRSTDATE FIXED FLOOR FORMAT FV GCD
\ GENERATE GENERATEALL GENERATESERIES GEOMEAN GEOMEANX GROUPBY HASONEFILTER
\ HASONEVALUE HOUR IF IF.EAGER IFERROR IGNORE INDEX
\ INFO.ALTERNATEOFDEFINITIONS INFO.ANNOTATIONS INFO.ATTRIBUTEHIERARCHIES INFO.ATTRIBUTEHIERARCHYSTORAGES INFO.CALCDEPENDENCY INFO.CALCULATIONGROUPS INFO.CALCULATIONITEMS
\ INFO.CATALOGS INFO.CHANGEDPROPERTIES INFO.COLUMNPARTITIONSTORAGES INFO.COLUMNPERMISSIONS INFO.COLUMNS INFO.COLUMNSTORAGES INFO.CSDLMETADATA
\ INFO.CULTURES INFO.DATACOVERAGEDEFINITIONS INFO.DATASOURCES INFO.DELTATABLEMETADATASTORAGES INFO.DEPENDENCIES INFO.DETAILROWSDEFINITIONS INFO.DICTIONARYSTORAGES
\ INFO.EXCLUDEDARTIFACTS INFO.EXPRESSIONS INFO.EXTENDEDPROPERTIES INFO.FORMATSTRINGDEFINITIONS INFO.FUNCTIONS INFO.GENERALSEGMENTMAPSEGMENTMETADATASTORAGES INFO.GROUPBYCOLUMNS
\ INFO.HIERARCHIES INFO.HIERARCHYSTORAGES INFO.KPIS INFO.LEVELS INFO.LINGUISTICMETADATA INFO.MEASURES INFO.MODEL
\ INFO.OBJECTTRANSLATIONS INFO.PARQUETFILESTORAGES INFO.PARTITIONS INFO.PARTITIONSTORAGES INFO.PERSPECTIVECOLUMNS INFO.PERSPECTIVEHIERARCHIES INFO.PERSPECTIVEMEASURES
\ INFO.PERSPECTIVES INFO.PERSPECTIVETABLES INFO.PROPERTIES INFO.QUERYGROUPS INFO.REFRESHPOLICIES INFO.RELATEDCOLUMNDETAILS INFO.RELATIONSHIPINDEXSTORAGES
\ INFO.RELATIONSHIPS INFO.RELATIONSHIPSTORAGES INFO.ROLEMEMBERSHIPS INFO.ROLES INFO.SEGMENTMAPSTORAGES INFO.SEGMENTSTORAGES INFO.STORAGEFILES
\ INFO.STORAGEFOLDERS INFO.STORAGETABLECOLUMNS INFO.STORAGETABLECOLUMNSEGMENTS INFO.STORAGETABLES INFO.TABLEPERMISSIONS INFO.TABLES INFO.TABLESTORAGES
\ INFO.VARIATIONS INFO.VIEW.COLUMNS INFO.VIEW.MEASURES INFO.VIEW.RELATIONSHIPS INFO.VIEW.TABLES INT INTERSECT
\ INTRATE IPMT ISAFTER ISBLANK ISCROSSFILTERED ISEMPTY ISERROR
\ ISEVEN ISFILTERED ISINSCOPE ISLOGICAL ISNONTEXT ISNUMBER ISO.CEILING
\ ISODD ISONORAFTER ISPMT ISSELECTEDMEASURE ISSUBTOTAL ISTEXT KEEPFILTERS
\ LAST LASTDATE LCM LEFT LEN LINEST LINESTX
\ LN LOG LOG10 LOOKUPVALUE LOWER MATCHBY MAX
\ MAXA MAXX MDURATION MEDIAN MEDIANX MID MIN
\ MINA MINUTE MINX MOD MONTH MOVINGAVERAGE MROUND
\ NATURALINNERJOIN NATURALLEFTOUTERJOIN NETWORKDAYS NEXT NEXTDAY NEXTMONTH NEXTQUARTER
\ NEXTYEAR NOMINAL NONVISUAL NORM.DIST NORM.INV NORM.S.DIST NORM.S.INV
\ NOT NOW NPER ODD ODDFPRICE ODDFYIELD ODDLPRICE
\ ODDLYIELD OFFSET OPENINGBALANCEMONTH OPENINGBALANCEQUARTER OPENINGBALANCEYEAR OR ORDERBY
\ PARALLELPERIOD PARTITIONBY PATH PATHCONTAINS PATHITEM PATHITEMREVERSE PATHLENGTH
\ PDURATION PERCENTILE.EXC PERCENTILE.INC PERCENTILEX.EXC PERCENTILEX.INC PERMUT PI
\ PMT POISSON.DIST POWER PPMT PREVIOUS PREVIOUSDAY PREVIOUSMONTH
\ PREVIOUSQUARTER PREVIOUSYEAR PRICE PRICEDISC PRICEMAT PRODUCT PRODUCTX
\ PV QUARTER QUOTIENT RADIANS RAND RANDBETWEEN RANGE
\ RANK RANK.EQ RANKX RATE RECEIVED RELATED RELATEDTABLE
\ REMOVEFILTERS REPLACE REPT RIGHT ROLLUP ROLLUPADDISSUBTOTAL ROLLUPGROUP
\ ROLLUPISSUBTOTAL ROUND ROUNDDOWN ROUNDUP ROW ROWNUMBER RRI
\ RUNNINGSUM SAMEPERIODLASTYEAR SAMPLE SEARCH SECOND SELECTCOLUMNS SELECTEDMEASURE
\ SELECTEDMEASUREFORMATSTRING SELECTEDMEASURENAME SELECTEDVALUE SIGN SIN SINH SLN
\ SQRT SQRTPI STARTOFMONTH STARTOFQUARTER STARTOFYEAR STDEV.P STDEV.S
\ STDEVX.P STDEVX.S SUBSTITUTE SUBSTITUTEWITHINDEX SUM SUMMARIZE SUMMARIZECOLUMNS
\ SUMX SWITCH SYD T.DIST T.DIST.2T T.DIST.RT T.INV
\ T.INV.2t TAN TANH TBILLEQ TBILLPRICE TBILLYIELD TIME
\ TIMEVALUE TOCSV TODAY TOJSON TOPN TOTALMTD TOTALQTD
\ TOTALYTD TREATAS TRIM TRUE TRUNC Table Constructor UNICHAR
\ UNICODE UNION UPPER USERCULTURE USERELATIONSHIP USERNAME USEROBJECTID
\ USERPRINCIPALNAME UTCNOW UTCTODAY VALUE VALUES VAR.P VAR.S
\ VARX.P VARX.S VDB WEEKDAY WEEKNUM WINDOW XIRR
\ XNPV YEAR YEARFRAC YIELD YIELDDISC YIELDMAT
" CONTAINS is a vim syntax keyword and can't be a defined keyword
syn match daxFunction "CONTAINS"
" Numbers
" integer number, or floating point number without a dot.
syn match daxNumber "\<\d\+\>"
" floating point number, with dot
syn match daxNumber "\<\d\+\.\d*\>"
syn match daxFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+"
syn match daxFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
syn match daxFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
" String and Character constants
syn region daxString start=+"+ end=+"+
" DAX Table and Column names
syn region daxTable start=+'+ms=s+1 end=+'+me=e-1
syn region daxColumn matchgroup=daxParen start=/\[/ end=/\]/
" Operators
syn match daxOperator "+"
syn match daxOperator "-"
syn match daxOperator "*"
syn match daxOperator "/"
syn match daxOperator "\^"
syn match daxOperator "\ NOT(\s\|\\)"
syn match daxOperator "\ IN\ "
syn match daxOperator "&&"
syn match daxOperator "&"
syn match daxOperator "\\|\\|"
syn match daxOperator "[<>]=\="
syn match daxOperator "<>"
syn match daxOperator "="
syn match daxOperator ">"
syn match daxOperator "<"
" Comments
syn region daxComment start="\(^\|\s\)\//" end="$" contains=daxTodo
syn region daxComment start="/\*" end="\*/" contains=daxTodo
" Define highlighting
hi def link daxComment Comment
hi def link daxNumber Number
hi def link daxFloat Float
hi def link daxString String
hi def link daxStatement Keyword
hi def link daxOperator Operator
hi def link daxFunction Function
hi def link daxTable Number
hi def link daxColumn Statement
hi def link daxParen Delimiter
hi def link daxTodo Todo
let b:current_syntax = "dax"
let &cpo = s:keepcpo
unlet! s:keepcpo
" vim: ts=8

View File

@@ -1,7 +1,7 @@
" Vim syntax file generator
" Language: Vim script
" Maintainer: Hirohito Higashi (h_east)
" Last Change: 2025 Mar 09
" Last Change: 2025 Apr 10
let s:keepcpo= &cpo
set cpo&vim
@@ -284,14 +284,22 @@ function s:get_vim_command_type(cmd_name)
enum
execute
export
filter
final
for
function
grep
grepadd
helpgrep
if
interface
insert
let
loadkeymap
lhelpgrep
lvimgrep
lvimgrepadd
make
map
mapclear
match
@@ -300,6 +308,7 @@ function s:get_vim_command_type(cmd_name)
normal
popup
public
redir
return
set
setglobal
@@ -307,6 +316,7 @@ function s:get_vim_command_type(cmd_name)
sleep
smagic
snomagic
sort
static
substitute
syntax
@@ -317,6 +327,8 @@ function s:get_vim_command_type(cmd_name)
unmap
var
vim9script
vimgrep
vimgrepadd
while
EOL
" Required for original behavior
@@ -733,9 +745,9 @@ function s:update_syntax_vim_file(vim_info)
let lnum = s:search_and_check('vimVarName', base_fname, str_info)
let lnum = s:append_syn_any(lnum, str_info, li)
" vimUserAttrbCmplt
" vimUserAttrComplete
let li = a:vim_info.compl_name
let lnum = s:search_and_check('vimUserCmdAttrCmplt', base_fname, str_info)
let lnum = s:search_and_check('vimUserCmdAttrComplete', base_fname, str_info)
let lnum = s:append_syn_any(lnum, str_info, li)
" vimUserAttrbAddr

View File

@@ -2,7 +2,7 @@
" Language: Vim script
" Maintainer: Hirohito Higashi <h.east.727 ATMARK gmail.com>
" Doug Kearns <dougkearns@gmail.com>
" Last Change: 2025 Mar 17
" Last Change: 2025 Apr 10
" Former Maintainer: Charles E. Campbell
" DO NOT CHANGE DIRECTLY.
@@ -230,7 +230,7 @@ syn match vimNumber '\<0z\%(\x\x\)\+\%(\.\%(\x\x\)\+\)*' skipwhite nextgroup=vim
syn case match
" All vimCommands are contained by vimIsCommand. {{{2
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimFor,vimFunction,vimFuncFold,vimGlobal,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimSet,vimSleep,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
syn cluster vimCmdList contains=vimAbb,vimAddress,vimAutoCmd,vimAugroup,vimBehave,vimCall,vimCatch,vimConst,vimDebuggreedy,vimDef,vimDefFold,vimDelcommand,@vimEcho,vimEnddef,vimEndfunction,vimExecute,vimIsCommand,vimExtCmd,vimExFilter,vimFor,vimFunction,vimFuncFold,vimGrep,vimGrepAdd,vimGlobal,vimHelpgrep,vimHighlight,vimLet,vimLoadkeymap,vimLockvar,vimMake,vimMap,vimMark,vimMatch,vimNotFunc,vimNormal,vimRedir,vimSet,vimSleep,vimSort,vimSyntax,vimThrow,vimUnlet,vimUnlockvar,vimUnmap,vimUserCmd,vimVimgrep,vimVimgrepadd,vimMenu,vimMenutranslate,@vim9CmdList,@vimExUserCmdList
syn cluster vim9CmdList contains=vim9Abstract,vim9Class,vim9Const,vim9Enum,vim9Export,vim9Final,vim9For,vim9Interface,vim9Type,vim9Var
syn match vimCmdSep "\\\@1<!|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimCmdSep ":\+" skipwhite nextgroup=@vimCmdList,vimSubst1
@@ -361,28 +361,22 @@ syn cluster vimOperContinue contains=vimOperContinue,vimOperContinueComment
" Lambda Expressions: {{{2
" ==================
syn match vimLambdaOperator contained "->" skipwhite nextgroup=@vimExprList
syn region vimLambda contained matchgroup=Delimiter start="{\ze[[:space:][:alnum:]_.,]*->" end="}" end="$" skip=+\s*\n\s*\\\|\s*\n\s*"\\ + contains=@vimContinue,@vimExprList,vimLambdaParams
syn match vimLambdaParams contained "{\@1<=.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=vimFuncParam
syn region vimLambda contained
\ matchgroup=vimLambdaBrace
\ start=+{\ze[[:space:][:alnum:]_.,]*\%(\n\s*\%(\\[[:space:][:alnum:]_.,]*\|"\\ .*\)\)*->+
\ skip=+\n\s*\%(\\\|"\\ \)+
\ end="}" end="$"
\ contains=@vimContinue,@vimExprList,vimLambdaParams
syn match vimLambdaParams contained "\%({\n\=\)\@1<=\_.\{-}\%(->\)\@=" nextgroup=vimLambdaOperator contains=@vimContinue,vimFuncParam
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParamsParen contained "[()]"
syn region vim9LambdaParams contained
\ matchgroup=vim9LambdaParamsParen
\ start="(\ze\s*\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
\ start="(\ze\s*\n
"\ line continuations
\\%(\s*\%(#\\ .*\|\\\s*\)\n\)*\s*\\\s*
"\ parameter names
\\(\.\.\.\)\=\h\w*[,:]\%(\s\|$\)"
\ end=")\ze\%(:\s\|\s\+=>\)"
\ matchgroup=vimContinue
\ end="^\s*\\\ze\s\+=>"
\ skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator
\ contains=@vim9Continue,vimDefParam,vim9LambdaParamsParen
syn match vim9LambdaParams contained "(\s*)\|(\s*\(\.\.\.\)\=\h\w*\s*)\ze\%(:\s\|\s\+=>\)" skipwhite nextgroup=vim9LambdaReturnType,vim9LambdaOperator contains=vimDefParam,vim9LambdaParamsParen
syn region vim9LambdaReturnType contained start=":\s" end="$" end="\ze#" end="\ze=>" skipwhite skipempty nextgroup=vim9LambdaOperator,vim9LamdaOperatorComment contains=vimTypeSep transparent
syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vim9LambdaOperator contained "=>" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
syn match vim9LambdaParen contained "[()]"
syn match vim9LambdaParams contained
\ "(\%(\<func(\|[^(]\)*\%(\n\s*\\\%(\<func(\|[^(]\)*\|\n\s*#\\ .*\)*\ze\s\+=>"
\ skipwhite nextgroup=vim9LambdaOperator
\ contains=@vim9Continue,vimDefParam,vim9LambdaParen,vim9LambdaReturnType
syn region vim9LambdaReturnType contained start=")\@<=:\s" end="\ze\s*#" end="\ze\s*=>" contains=@vim9Continue,@vimType transparent
syn region vim9LambdaBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vim9LambdaOperatorComment contained "#.*" skipwhite skipempty nextgroup=@vimExprList,vim9LambdaBlock,vim9LambdaOperatorComment
@@ -457,9 +451,10 @@ syn match vimParamType contained ":\s" skipwhite skipnl nextgroup=@vimType conta
syn match vimTypeSep contained ":\%(\s\|\n\)\@=" skipwhite nextgroup=@vimType
syn keyword vimType contained any blob bool channel float job number string void
syn match vimType contained "\<func\>"
syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vimType oneline transparent
syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
syn match vimType contained "\<\%(func\)\>"
syn region vimCompoundType contained matchgroup=vimType start="\<func(" end=")" nextgroup=vimTypeSep contains=@vim9Continue,@vimType transparent
syn region vimCompoundType contained matchgroup=vimType start="\<tuple<" end=">" contains=@vim9Continue,@vimType transparent
syn region vimCompoundType contained matchgroup=vimType start="\<\%(list\|dict\)<" end=">" contains=@vimType oneline transparent
syn match vimUserType contained "\<\%(\h\w*\.\)*\u\w*\>"
syn cluster vimType contains=vimType,vimCompoundType,vimUserType
@@ -619,22 +614,30 @@ syn match vimSpecFileMod "\(:[phtre]\)\+" contained
" User-Specified Commands: {{{2
" =======================
syn cluster vimUserCmdList contains=@vimCmdList,vimCmplxRepeat,@vimComment,vimCtrlChar,vimEscapeBrace,vimFunc,vimNotation,vimNumber,vimOper,vimRegister,vimSpecFile,vimString,vimSubst,vimSubstRep,vimSubstRange
syn keyword vimUserCmdKey contained com[mand]
syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock
syn match vimUserCmd "\<com\%[mand]\>!\=.*$" contains=vimUserCmdKey,vimBang,vimUserCmdAttr,vimUserCmdAttrError,vimUserCmdName,@vimUserCmdList,vimComFilter
syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrCmplt,vimUserCmdError
syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
syn match vimUserCmd "\<com\%[mand]\>!\=" skipwhite nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
syn match vimUserCmd +\<com\%[mand]\>!\=\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdAttrs,vimUserCmdName contains=vimBang
syn region vimUserCmdAttrs contained
\ start="-\l"
\ start=+^\s*\%(\\\|["#]\\ \)+
\ end="\ze\s\u"
\ skipwhite nextgroup=vimUserCmdName
\ contains=@vimContinue,vimUserCmdAttr,vimUserCmdAttrError
\ transparent
syn match vimUserCmdAttrError contained "-\a\+\ze\%(\s\|=\)"
syn match vimUserCmdAttr contained "-addr=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrAddr
syn match vimUserCmdAttr contained "-bang\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-bar\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-buffer\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-complete=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrComplete,vimUserCmdError
syn match vimUserCmdAttr contained "-count\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-count=" contains=vimUserCmdAttrKey nextgroup=vimNumber
syn match vimUserCmdAttr contained "-keepscript\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-nargs=" contains=vimUserCmdAttrKey nextgroup=vimUserCmdAttrNargs
syn match vimUserCmdAttr contained "-range\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttr contained "-range=" contains=vimUserCmdAttrKey nextgroup=vimNumber,vimUserCmdAttrRange
syn match vimUserCmdAttr contained "-register\>" contains=vimUserCmdAttrKey
syn match vimUserCmdAttrNargs contained "[01*?+]"
syn match vimUserCmdAttrRange contained "%"
@@ -645,17 +648,34 @@ endif
syn case ignore
syn keyword vimUserCmdAttrKey contained a[ddr] ban[g] bar bu[ffer] com[plete] cou[nt] k[eepscript] n[args] ra[nge] re[gister]
" GEN_SYN_VIM: vimUserCmdAttrCmplt, START_STR='syn keyword vimUserCmdAttrCmplt contained', END_STR=''
syn keyword vimUserCmdAttrCmplt contained custom customlist nextgroup=vimUserCmdAttrCmpltFunc,vimUserCmdError
syn match vimUserCmdAttrCmpltFunc contained ",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%([.#]\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
" GEN_SYN_VIM: vimUserCmdAttrComplete, START_STR='syn keyword vimUserCmdAttrComplete contained', END_STR=''
syn keyword vimUserCmdAttrComplete contained arglist augroup behave breakpoint buffer color command compiler cscope diff_buffer dir dir_in_path environment event expression file file_in_path filetype function help highlight history keymap locale mapclear mapping menu messages option packadd runtime scriptnames shellcmd shellcmdline sign syntax syntime tag tag_listfiles user var
syn keyword vimUserCmdAttrComplete contained custom customlist nextgroup=vimUserCmdAttrCompleteFunc,vimUserCmdError
syn match vimUserCmdAttrCompleteFunc contained ",\%([bwglstav]:\|<[sS][iI][dD]>\)\=\h\w*\%([.#]\h\w*\)*"hs=s+1 nextgroup=vimUserCmdError contains=vimVarScope,vimFuncSID
" GEN_SYN_VIM: vimUserCmdAttrAddr, START_STR='syn keyword vimUserCmdAttrAddr contained', END_STR=''
syn match vimUserCmdAttrAddr contained "?"
syn keyword vimUserCmdAttrAddr contained arguments arg buffers buf lines line loaded_buffers load other quickfix qf tabs tab windows win
syn match vimUserCmdAttrAddr contained "?"
syn case match
syn region vimUserCmdBlock contained matchgroup=vimSep start="{" end="^\s*\zs}" contains=@vimDefBodyList
syn match vimUserCmdName contained "\<\u[[:alnum:]]*\>" skipwhite nextgroup=vimUserCmdBlock,vimUserCmdReplacement
syn match vimUserCmdName contained +\<\u[[:alnum:]]*\>\ze\s*\n\s*\%(\\\|["#]\\ \)+ skipwhite skipnl nextgroup=vimUserCmdBlock,vimUserCmdReplacement
syn region vimUserCmdReplacement contained
\ start="\S"
\ start=+^\s*\%(\\\|["#]\\ \)+
\ skip=+\n\s*\%(\\\|["#]\\ \)+
\ end="$"
\ contains=@vimContinue,@vimUserCmdList,vimComFilter
syn region vimUserCmdBlock contained
\ matchgroup=vimSep
\ start="{"
\ end="^\s*\zs}"
\ contains=@vimDefBodyList
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr
syn match vimDelcommandAttr contained "-buffer\>"
syn match vimDelcommand "\<delc\%[ommand]\>" skipwhite nextgroup=vimDelcommandAttr,vimDelcommandName
syn match vimDelcommandAttr contained "-buffer\>" skipwhite nextgroup=vimDelcommandName
syn match vimDelcommandName contained "\<\u[[:alnum:]]*\>"
" Lower Priority Comments: after some vim commands... {{{2
" =======================
@@ -776,12 +796,31 @@ syn match vimCmplxRepeat '@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
" Set command and associated set-options (vimOptions) with comment {{{2
syn match vimSet "\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skipwhite nextgroup=vimSetBang,vimSetArgs
syn region vimSetArgs contained start="\S" skip=+\\|\|\n\s*\\\|\n\s*["#]\\ + matchgroup=vimCmdSep end="|" end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend contains=@vimComment,@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
syn region vimSetEqual contained matchgroup=vimOper start="[=:]\|[-+^]=" skip=+\\|\|\\\s\|\n\s*\\\|\n\s*["#]\\ \|^\s*\\\|^\s*["#]\\ + matchgroup=vimCmdSep end="|" end="\ze\s" end="$" contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep
syn region vimSetComment contained start=+"+ skip=+\n\s*\%(\\\||"\\ \)+ end="$" contains=@vimCommentGroup,vimCommentString extend
syn match vimSetCmdSep contained "|" skipwhite nextgroup=@vimCmdList,vimSubst1,vimFunc
syn match vimSetEscape contained "\\\%(\\[|"]\|.\)"
syn match vimSetBarEscape contained "\\|"
syn match vimSetQuoteEscape contained +\\"+
syn region vimSetArgs contained
\ start="\S"
\ skip=+\n\s*\%(\\\|["#]\\ \)\|^\s*"\\ +
\ end=+\ze\\\@1<![|"]+
"\ assume this isn't an escaped char with backslash on the previous line
\ end=+^\s*\\\ze[|"]+
\ end="\ze\s#"
\ end="$"
\ nextgroup=vimSetCmdSep,vimSetComment,vim9Comment
\ contains=@vimContinue,vimErrSetting,vimOption,vimSetAll,vimSetTermcap
\ keepend
syn region vimSetEqual contained
\ matchgroup=vimOper
\ start="[=:]\|[-+^]="
\ skip=+\\\s\|^\s*\%(\\\|["#]\\ \)+
\ end="\ze\s"
\ contains=@vimContinue,vimCtrlChar,vimEnvvar,vimNotation,vimSetSep,vimSetEscape,vimSetBarEscape,vimSetQuoteEscape
syn match vimSetBang contained "\a\@1<=!" skipwhite nextgroup=vimSetAll,vimSetTermcap
syn keyword vimSetAll contained all nextgroup=vimSetMod
syn keyword vimSetTermcap contained termcap
syn region vimSetString contained start=+="+hs=s+1 skip=+\\\\\|\\"+ end=+"+ contains=vimCtrlChar
syn match vimSetSep contained "[,:]"
syn match vimSetMod contained "\a\@1<=\%(&vim\=\|[!&?<]\)"
@@ -884,6 +923,93 @@ syn cluster vimEcho contains=vimEcho,vimEchohl
syn region vimExecute matchgroup=vimCommand start="\<exe\%[cute]\>" skip=+\\|\|\n\s*\\\|\n\s*"\\ + matchgroup=vimCmdSep end="|" excludenl end="$" contains=@vimContinue,@vimExprList transparent
" Filter: {{{2
" ======
syn match vimExFilter "\<filt\%[er]\>" skipwhite nextgroup=vimExFilterBang,vimExFilterPattern
syn match vimExFilterBang contained "\a\@1<=!" skipwhite nextgroup=vimExFilterPattern
syn region vimExFilterPattern contained
\ start="[[:ident:]]"
\ end="\ze[[:space:]\n]"
\ skipwhite nextgroup=@vimCmdList
\ contains=@vimSubstList
\ oneline
syn region vimExFilterPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:ident:]|"]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=@vimCmdList
\ contains=@vimSubstList
\ oneline
" Grep and Make: {{{2
" =============
" | is the command separator, escaped with \| all other backslashes are passed through literally, no tail comments
syn match vimGrep "\<l\=gr\%[ep]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn match vimGrepadd "\<l\=grepa\%[dd]\>" skipwhite nextgroup=vimGrepBang,vimGrepArgs,vimCmdSep
syn region vimGrepArgs contained
\ start="|\@!\S"
\ skip=+\n\s*\%(\\\|[#"]\\ \)+
\ matchgroup=vimCmdSep
\ end="|"
\ end="$"
"\ TODO: include vimSpecFile
\ contains=vimGrepBarEscape
syn match vimGrepBarEscape contained "\\|"
syn match vimGrepBang contained "\a\@1<=!" skipwhite nextgroup=vimGrepArgs,vimCmdSep
syn match vimMake "\<l\=make\=\>" skipwhite nextgroup=vimMakeBang,vimMakeArgs,vimCmdSep
syn region vimMakeArgs contained
\ start="|\@!\S"
\ skip=+\n\s*\%(\\\|[#"]\\ \)+
\ matchgroup=vimCmdSep
\ end="|"
\ end="$"
"\ TODO: include vimSpecFile
\ contains=vimMakeBarEscape
syn match vimMakeBarEscape contained "\\|"
syn match vimMakeBang contained "\a\@1<=!" skipwhite nextgroup=vimMakeArgs,vimCmdSep
syn match vimHelpgrep "\<l\=helpg\%[rep]\>" skipwhite nextgroup=vimHelpgrepBang,vimHelpgrepPattern
syn region vimHelpgrepPattern contained
\ start="\S"
\ matchgroup=Special
\ end="@\w\w\>"
\ end="$"
\ contains=@vimSubstList
\ oneline
" Vimgrep: {{{2
" =======
syn match vimVimgrep "\<l\=vim\%[grep]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn match vimVimgrepadd "\<l\=vimgrepa\%[dd]\>" skipwhite nextgroup=vimVimgrepBang,vimVimgrepPattern
syn match vimVimgrepBang contained "\a\@1<=!" skipwhite nextgroup=vimVimgrepPattern
syn region vimVimgrepPattern contained
\ start="[[:ident:]]"
\ end="\ze[[:space:]\n]"
\ skipwhite nextgroup=vimVimgrepFile,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn region vimVimgrepPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:ident:]|"]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=vimVimgrepFlags,vimVimgrepFile,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn match vimVimgrepEscape contained "\\\%(\\|\|.\)"
syn match vimVimgrepBarEscape contained "\\|"
syn region vimVimgrepFile contained
\ start="|\@!\S"
\ matchgroup=vimCmdSep
\ end="|"
\ end="\ze\s"
\ end="$"
\ skipwhite nextgroup=vimVimgrepFile
\ contains=vimSpecFile,vimVimgrepEscape,vimVimgrepBarEscape
syn match vimVimgrepFlags contained "\<[gjf]\{,3\}\>" skipwhite nextgroup=vimVimgrepfile
" Maps: {{{2
" ====
" GEN_SYN_VIM: vimCommand map, START_STR='syn keyword vimMap', END_STR='skipwhite nextgroup=vimMapMod,vimMapLhs'
@@ -1004,12 +1130,47 @@ syn region vimMatchPattern contained matchgroup=Delimiter start="\z([!#$%&'()*+,
syn match vimNormal "\<norm\%[al]\>!\=" skipwhite nextgroup=vimNormalArg contains=vimBang
syn region vimNormalArg contained start="\S" skip=+\n\s*\\\|\n\s*["#]\\ + end="$" contains=@vimContinue
" Redir: {{{2
" =====
syn match vimRedir "\<redir\=\>" skipwhite nextgroup=vimRedirBang,vimRedirFileOperator,vimRedirVariableOperator,vimRedirRegister,vimRedirEnd
syn match vimRedirBang contained "\a\@1<=!" skipwhite nextgroup=vimRedirFileOperator
syn match vimRedirFileOperator contained ">>\=" skipwhite nextgroup=vimRedirFile
syn region vimRedirFile contained
\ start="\S"
\ matchgroup=Normal
\ end="\s*$"
\ end="\s*\ze[|"]"
\ nextgroup=vimCmdSep,vimComment
\ contains=vimSpecFile
syn match vimRedirRegisterOperator contained ">>\="
syn match vimRedirRegister contained "@[a-zA-Z*+"]" nextgroup=vimRedirRegisterOperator
syn match vimRedirVariableOperator contained "=>>\=" skipwhite nextgroup=vimVar
syn keyword vimRedirEnd contained END
" Sleep: {{{2
" =====
syn keyword vimSleep sl[eep] skipwhite nextgroup=vimSleepBang,vimSleepArg
syn match vimSleepBang contained "\a\@1<=!" skipwhite nextgroup=vimSleepArg
syn match vimSleepArg contained "\<\%(\d\+\)\=m\=\>"
" Sort: {{{2
" ====
syn match vimSort "\<sort\=\>" skipwhite nextgroup=vimSortBang,@vimSortOptions,vimSortPattern,vimCmdSep
syn match vimSortBang contained "\a\@1<=!" skipwhite nextgroup=@vimSortOptions,vimSortPattern,vimCmdSep
syn match vimSortOptionsError contained "\a\+"
syn match vimSortOptions contained "\<[ilur]*[nfxob]\=[ilur]*\>" skipwhite nextgroup=vimSortPattern,vimCmdSep
syn region vimSortPattern contained
\ matchgroup=Delimiter
\ start="\z([^[:space:][:alpha:]|]\)"
\ skip="\\\\\|\\\z1"
\ end="\z1"
\ skipwhite nextgroup=@vimSortOptions,vimCmdSep
\ contains=@vimSubstList
\ oneline
syn cluster vimSortOptions contains=vimSortOptions,vimSortOptionsError
" Syntax: {{{2
"=======
syn match vimGroupList contained "[^[:space:],]\+\%(\s*,\s*[^[:space:],]\+\)*" contains=vimGroupSpecial
@@ -1468,6 +1629,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimHiKeyError vimError
hi def link vimMapModErr vimError
hi def link vimShebangError vimError
hi def link vimSortOptionsError Error
hi def link vimSubstFlagErr vimError
hi def link vimSynCaseError vimError
hi def link vimSyncError vimError
@@ -1524,6 +1686,8 @@ if !exists("skip_vim_syntax_inits")
hi def link vimEnvvar PreProc
hi def link vimError Error
hi def link vimEscape Special
hi def link vimExFilter vimCommand
hi def link vimExFilterBang vimCommand
hi def link vimFBVar vimVar
hi def link vimFgBgAttrib vimHiAttrib
hi def link vimFuncEcho vimCommand
@@ -1541,11 +1705,15 @@ if !exists("skip_vim_syntax_inits")
hi def link vimFuncParamEquals vimOper
hi def link vimFuncScope vimVarScope
hi def link vimFuncSID vimNotation
hi def link vimGrep vimCommand
hi def link vimGrepadd vimCommand
hi def link vimGrepBang vimBang
hi def link vimGroupAdd vimSynOption
hi def link vimGroupName Normal
hi def link vimGroupRem vimSynOption
hi def link vimGroupSpecial Special
hi def link vimGroup Type
hi def link vimHelpgrep vimCommand
hi def link vimHiAttrib PreProc
hi def link vimHiBang vimBang
hi def link vimHiClear Type
@@ -1569,13 +1737,17 @@ if !exists("skip_vim_syntax_inits")
hi def link vim9KeymapLineComment vimKeymapLineComment
hi def link vimKeymapLineComment vimComment
hi def link vimKeymapTailComment vimComment
hi def link vimLambdaBrace Delimiter
hi def link vimLambdaOperator vimOper
hi def link vimLet vimCommand
hi def link vimLetHereDoc vimString
hi def link vimLetHereDocStart Special
hi def link vimLetHereDocStop Special
hi def link vimLetRegister Special
hi def link vimLetRegister vimRegister
hi def link vimLineComment vimComment
hi def link vimMake vimCommand
hi def link vimMakeadd vimCommand
hi def link vimMakeBang vimBang
hi def link vimMapBang vimBang
hi def link vimMapLeader vimBracket
hi def link vimMapLeaderKey vimNotation
@@ -1620,6 +1792,13 @@ if !exists("skip_vim_syntax_inits")
hi def link vimPlainMark vimMark
hi def link vimPlainRegister vimRegister
hi def link vimQuoteEscape vimEscape
hi def link vimRedir vimCommand
hi def link vimRedirBang vimBang
hi def link vimRedirFileOperator vimOper
hi def link vimRedirRegisterOperator vimOper
hi def link vimRedirVariableOperator vimOper
hi def link vimRedirEnd Special
hi def link vimRedirRegister vimRegister
hi def link vimRegister SpecialChar
hi def link vimScriptDelim Comment
hi def link vimSearch vimString
@@ -1628,14 +1807,17 @@ if !exists("skip_vim_syntax_inits")
hi def link vimSet vimCommand
hi def link vimSetAll vimOption
hi def link vimSetBang vimBang
hi def link vimSetComment vimComment
hi def link vimSetMod vimOption
hi def link vimSetSep vimSep
hi def link vimSetString vimString
hi def link vimSetTermcap vimOption
hi def link vimShebang PreProc
hi def link vimSleep vimCommand
hi def link vimSleepArg Constant
hi def link vimSleepBang vimBang
hi def link vimSort vimCommand
hi def link vimSortBang vimBang
hi def link vimSortOptions Special
hi def link vimSpecFile Identifier
hi def link vimSpecFileMod vimSpecFile
hi def link vimSpecial Type
@@ -1689,8 +1871,10 @@ if !exists("skip_vim_syntax_inits")
hi def link vimUnlet vimCommand
hi def link vimUnletBang vimBang
hi def link vimUnmap vimMap
hi def link vimUserCmd vimCommand
hi def link vimUserCmdAttrAddr vimSpecial
hi def link vimUserCmdAttrCmplt vimSpecial
hi def link vimUserCmdAttrComplete vimSpecial
hi def link vimUserCmdAttrCompleteFunc vimVar
hi def link vimUserCmdAttrNargs vimSpecial
hi def link vimUserCmdAttrRange vimSpecial
hi def link vimUserCmdAttrKey vimUserCmdAttr
@@ -1701,6 +1885,10 @@ if !exists("skip_vim_syntax_inits")
hi def link vimUserFunc Normal
hi def link vimVar Normal
hi def link vimVarScope Identifier
hi def link vimVimgrep vimCommand
hi def link vimVimgrepadd vimCommand
hi def link vimVimgrepBang vimBang
hi def link vimVimgrepFlags Special
hi def link vimVimVar Identifier
hi def link vimVimVarName Identifier
hi def link vimWarn WarningMsg
@@ -1725,7 +1913,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vim9Interface vimCommand
hi def link vim9LambdaOperator vimOper
hi def link vim9LambdaOperatorComment vim9Comment
hi def link vim9LambdaParamsParen vimParenSep
hi def link vim9LambdaParen vimParenSep
hi def link vim9LhsRegister vimLetRegister
hi def link vim9LhsVariable vimVar
hi def link vim9LineComment vimComment

View File

@@ -1,11 +1,14 @@
" Vim syntax file
" Language: hyprlang
" Maintainer: Luca Saccarola <github.e41mv@aleeas.com>
" Last Change: 2025 Jan 29
" Last Change: 2025 Mar 26
if exists("b:current_syntax")
finish
endif
let s:cpo= &cpo
set cpo&vim
let b:current_syntax = "hyprlang"
syn case ignore
@@ -56,4 +59,6 @@ hi def link hyprString String
hi def link hyprColor Structure
hi def link hyprCommand Keyword
let &cpo = s:cpo
unlet s:cpo
" vim: ts=8 sts=2 sw=2 et

View File

@@ -3,7 +3,7 @@
" Maintainer: Aliaksei Budavei <0x000c70 AT gmail DOT com>
" Former Maintainer: Claudio Fleiner <claudio@fleiner.com>
" Repository: https://github.com/zzzyxwvut/java-vim.git
" Last Change: 2025 Jan 02
" Last Change: 2025 Mar 26
" Please check ":help java.vim" for comments on some of the options
" available.
@@ -46,8 +46,10 @@ function! s:ff.RightConstant(x, y) abort
return a:y
endfunction
function! s:ff.IsRequestedPreviewFeature(n) abort
return exists("g:java_syntax_previews") && index(g:java_syntax_previews, a:n) + 1
function! s:ff.IsAnyRequestedPreviewFeatureOf(ns) abort
return exists("g:java_syntax_previews") &&
\ !empty(filter(a:ns, printf('index(%s, v:val) + 1',
\ string(g:java_syntax_previews))))
endfunction
if !exists("*s:ReportOnce")
@@ -108,7 +110,7 @@ syn keyword javaTypedef this super
syn keyword javaOperator new instanceof
syn match javaOperator "\<var\>\%(\s*(\)\@!"
if s:ff.IsRequestedPreviewFeature(476)
if s:ff.IsAnyRequestedPreviewFeatureOf([476, 494])
" Module imports can be used in any source file.
syn match javaExternal "\<import\s\+module\>" contains=javaModuleImport
syn keyword javaModuleImport contained module
@@ -262,8 +264,12 @@ if exists("g:java_highlight_all") || exists("g:java_highlight_java") || exists("
syn keyword javaC_JavaLang Class InheritableThreadLocal ThreadLocal Enum ClassValue
endif
" As of JDK 21, java.lang.Compiler is no more (deprecated in JDK 9).
syn keyword javaLangDeprecated Compiler
" As of JDK 24, SecurityManager is rendered non-functional
" (JDK-8338625).
" (Note that SecurityException and RuntimePermission are still
" not deprecated.)
" As of JDK 21, Compiler is no more (JDK-8205129).
syn keyword javaLangDeprecated Compiler SecurityManager
syn cluster javaClasses add=javaC_JavaLang
hi def link javaC_JavaLang javaC_Java
syn keyword javaE_JavaLang AbstractMethodError ClassCircularityError ClassFormatError Error IllegalAccessError IncompatibleClassChangeError InstantiationError InternalError LinkageError NoClassDefFoundError NoSuchFieldError NoSuchMethodError OutOfMemoryError StackOverflowError ThreadDeath UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError ExceptionInInitializerError UnsupportedClassVersionError AssertionError BootstrapMethodError
@@ -311,7 +317,7 @@ endif
exec 'syn match javaUserLabel "^\s*\<\K\k*\>\%(\<default\>\)\@' . s:ff.Peek('7', '') . '<!\s*::\@!"he=e-1'
if s:ff.IsRequestedPreviewFeature(455)
if s:ff.IsAnyRequestedPreviewFeatureOf([455, 488])
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaBoolean,javaNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaType,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
else
syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":\|->" contains=javaLabelCastType,javaLabelNumber,javaCharacter,javaString,javaConstant,@javaClasses,javaGenerics,javaLabelDefault,javaLabelVarType,javaLabelWhenClause
@@ -609,7 +615,7 @@ syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaS
syn region javaString start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell
syn match javaTextBlockError +"""\s*"""+
if s:ff.IsRequestedPreviewFeature(430)
if s:ff.IsAnyRequestedPreviewFeatureOf([430])
syn region javaStrTemplEmbExp contained matchgroup=javaStrTempl start="\\{" end="}" contains=TOP
exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="+ end=+"+ contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,@Spell'
exec 'syn region javaStrTempl start=+\%(\.[[:space:]\n]*\)\@' . s:ff.Peek('80', '') . '<="""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaStrTemplEmbExp,javaSpecialChar,javaSpecialError,javaTextBlockError,@Spell'
@@ -688,7 +694,7 @@ if exists("g:java_highlight_debug")
syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
syn region javaDebugString contained start=+"""[ \t\x0c\r]*$+hs=e+1 end=+"""+he=s-1 contains=javaDebugSpecial,javaDebugTextBlockError
if s:ff.IsRequestedPreviewFeature(430)
if s:ff.IsAnyRequestedPreviewFeatureOf([430])
" The highlight groups of java{StrTempl,Debug{,Paren,StrTempl}}\,
" share one colour by default. Do not conflate unrelated parens.
syn region javaDebugStrTemplEmbExp contained matchgroup=javaDebugStrTempl start="\\{" end="}" contains=javaComment,javaLineComment,javaDebug\%(Paren\)\@!.*

View File

@@ -3,12 +3,16 @@
" Maintainer: Vito <vito.blog@gmail.com>
" Last Change: 2024 Apr 17
" Upstream: https://github.com/vito-c/jq.vim
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
"
" Quit when a (custom) syntax file was already loaded
if exists('b:current_syntax')
finish
endif
let s:cpo_save = &cpo
set cpo&vim
" syn include @jqHtml syntax/html.vim " Doc comment HTML
" jqTodo
@@ -128,3 +132,6 @@ hi def link jqString String
hi def link jqInterpolationDelimiter Delimiter
hi def link jqConditional Conditional
hi def link jqNumber Number
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -2,235 +2,236 @@
" Language: lf file manager configuration file (lfrc)
" Maintainer: Andis Sprinkis <andis@sprinkis.com>
" Former Maintainer: Cameron Wright
" Former URL: https://github.com/andis-sprinkis/lf-vim
" Last Change: 13 October 2024
" URL: https://github.com/andis-sprinkis/lf-vim
" Last Change: 5 Apr 2025
"
" The shell syntax highlighting is configurable. See $VIMRUNTIME/doc/syntax.txt
" lf version: 32
" lf version: 34
if exists("b:current_syntax")
finish
endif
if exists("b:current_syntax") | finish | endif
let s:cpo = &cpo
set cpo&vim
let b:current_syntax = "lf"
"{{{ Comment Matching
syn match lfComment '#.*$'
syn match lfComment '#.*$'
"}}}
"{{{ String Matching
syn match lfString "'.*'"
syn match lfString '".*"' contains=lfVar,lfSpecial
"}}}
"{{{ Match lf Variables
syn match lfVar '\$f\|\$fx\|\$fs\|\$id'
syn match lfString "'.*'"
syn match lfString '".*"' contains=lfSpecial
"}}}
"{{{ Keywords
syn keyword lfKeyword set setlocal cmd map cmap skipwhite
syn keyword lfKeyword set setlocal cmd map cmap skipwhite
"}}}
"{{{ Options Keywords
syn keyword lfOptions
\ quit
\ up
\ half-up
\ page-up
\ scroll-up
\ down
\ half-down
\ page-down
\ scroll-down
\ updir
\ open
\ jump-next
\ jump-prev
\ top
\ bottom
\ high
\ middle
\ low
\ toggle
\ invert
\ invert-below
\ unselect
\ glob-select
\ glob-unselect
\ calcdirsize
\ clearmaps
\ copy
\ cut
\ paste
\ clear
\ sync
\ draw
\ redraw
\ load
\ reload
\ echo
\ echomsg
\ echoerr
\ cd
\ select
\ delete
\ rename
\ source
\ push
\ read
\ shell
\ shell-pipe
\ shell-wait
\ shell-async
\ find
\ find-back
\ find-next
\ find-prev
\ search
\ search-back
\ search-next
\ search-prev
\ filter
\ setfilter
\ mark-save
\ mark-load
\ mark-remove
\ tag
\ tag-toggle
\ cmd-escape
\ cmd-complete
\ cmd-menu-complete
\ cmd-menu-complete-back
\ cmd-menu-accept
\ cmd-enter
\ cmd-interrupt
\ cmd-history-next
\ cmd-history-prev
\ cmd-left
\ cmd-right
\ cmd-home
\ cmd-end
\ cmd-delete
\ cmd-delete-back
\ cmd-delete-home
\ cmd-delete-end
\ cmd-delete-unix-word
\ cmd-yank
\ cmd-transpose
\ cmd-transpose-word
\ cmd-word
\ cmd-word-back
\ cmd-delete-word
\ cmd-delete-word-back
\ cmd-capitalize-word
\ cmd-uppercase-word
\ cmd-lowercase-word
\ anchorfind
\ autoquit
\ borderfmt
\ cleaner
\ copyfmt
\ cursoractivefmt
\ cursorparentfmt
\ cursorpreviewfmt
\ cutfmt
\ dircache
\ dircounts
\ dirfirst
\ dironly
\ dirpreviews
\ drawbox
\ dupfilefmt
\ errorfmt
\ filesep
\ findlen
\ globfilter
\ globsearch
\ hidden
\ hiddenfiles
\ hidecursorinactive
\ history
\ icons
\ ifs
\ ignorecase
\ ignoredia
\ incfilter
\ incsearch
\ info
\ infotimefmtnew
\ infotimefmtold
\ mouse
\ number
\ numberfmt
\ period
\ preserve
\ preview
\ previewer
\ promptfmt
\ ratios
\ relativenumber
\ reverse
\ roundbox
\ ruler
\ rulerfmt
\ scrolloff
\ selectfmt
\ selmode
\ shell
\ shellflag
\ shellopts
\ sixel
\ smartcase
\ smartdia
\ sortby
\ statfmt
\ tabstop
\ tagfmt
\ tempmarks
\ timefmt
\ truncatechar
\ truncatepct
\ waitmsg
\ wrapscan
\ wrapscroll
\ pre-cd
\ on-cd
\ on-select
\ on-redraw
\ on-quit
syn keyword lfOptions
\ anchorfind
\ autoquit
\ borderfmt
\ bottom
\ calcdirsize
\ cd
\ cleaner
\ clear
\ clearmaps
\ cmaps
\ cmd-capitalize-word
\ cmd-complete
\ cmd-delete
\ cmd-delete-back
\ cmd-delete-end
\ cmd-delete-home
\ cmd-delete-unix-word
\ cmd-delete-word
\ cmd-delete-word-back
\ cmd-end
\ cmd-enter
\ cmd-escape
\ cmd-history-next
\ cmd-history-prev
\ cmd-home
\ cmd-interrupt
\ cmd-left
\ cmd-lowercase-word
\ cmd-menu-accept
\ cmd-menu-complete
\ cmd-menu-complete-back
\ cmd-right
\ cmd-transpose
\ cmd-transpose-word
\ cmd-uppercase-word
\ cmd-word
\ cmd-word-back
\ cmd-yank
\ cmds
\ copy
\ copyfmt
\ cursoractivefmt
\ cursorparentfmt
\ cursorpreviewfmt
\ cut
\ cutfmt
\ delete
\ dircache
\ dircounts
\ dirfirst
\ dironly
\ dirpreviews
\ doc
\ down
\ draw
\ drawbox
\ dupfilefmt
\ echo
\ echoerr
\ echomsg
\ errorfmt
\ filesep
\ filter
\ find
\ find-back
\ find-next
\ find-prev
\ findlen
\ glob-select
\ glob-unselect
\ globfilter
\ globsearch
\ half-down
\ half-up
\ hidden
\ hiddenfiles
\ high
\ history
\ icons
\ ifs
\ ignorecase
\ ignoredia
\ incfilter
\ incsearch
\ info
\ infotimefmtnew
\ infotimefmtold
\ invert
\ invert-below
\ jump-next
\ jump-prev
\ load
\ locale
\ low
\ maps
\ mark-load
\ mark-remove
\ mark-save
\ middle
\ mouse
\ number
\ numberfmt
\ on-cd
\ on-focus-gained
\ on-focus-lost
\ on-init
\ on-quit
\ on-redraw
\ on-select
\ open
\ page-down
\ page-up
\ paste
\ period
\ pre-cd
\ preserve
\ preview
\ previewer
\ promptfmt
\ push
\ quit
\ ratios
\ read
\ redraw
\ relativenumber
\ reload
\ rename
\ reverse
\ roundbox
\ rulerfmt
\ scroll-down
\ scroll-up
\ scrolloff
\ search
\ search-back
\ search-next
\ search-prev
\ select
\ selectfmt
\ selmode
\ setfilter
\ shell
\ shell-async
\ shell-pipe
\ shell-wait
\ shellflag
\ shellopts
\ showbinds
\ sixel
\ smartcase
\ smartdia
\ sortby
\ source
\ statfmt
\ sync
\ tabstop
\ tag
\ tag-toggle
\ tagfmt
\ tempmarks
\ timefmt
\ toggle
\ top
\ truncatechar
\ truncatepct
\ unselect
\ up
\ updir
\ waitmsg
\ watch
\ wrapscan
\ wrapscroll
"}}}
"{{{ Special Matching
syn match lfSpecial '<.*>\|\\.'
syn match lfSpecial '\v\<[^>]+\>'
syn match lfSpecial '\v\\(["\\abfnrtv]|\o+)'
"}}}
"{{{ Shell Script Matching for cmd
let s:shell_syntax = get(g:, 'lf_shell_syntax', "syntax/sh.vim")
let s:shell_syntax = get(b:, 'lf_shell_syntax', s:shell_syntax)
unlet b:current_syntax
exe 'syn include @Shell '.s:shell_syntax
let b:current_syntax = "lf"
syn region lfIgnore start=".{{\n" end="^}}"
\ keepend contains=lfExternalShell,lfExternalPatch
syn match lfShell '\$[a-zA-Z].*$
\\|:[a-zA-Z].*$
\\|%[a-zA-Z].*$
\\|![a-zA-Z].*$
\\|&[a-zA-Z].*$'
\ transparent contains=@Shell,lfExternalPatch
syn match lfExternalShell "^.*$" transparent contained contains=@Shell
syn match lfExternalPatch "^\s*cmd\ .*\ .{{$\|^}}$" contained
syn region lfCommand matchgroup=lfCommandMarker start=' \zs:\ze' end='$' keepend transparent
syn region lfCommand matchgroup=lfCommandMarker start=' \zs:{{\ze' end='}}' keepend transparent
syn region lfShell matchgroup=lfShellMarker start=' \zs[$!%&]\ze' end='$' keepend contains=@Shell
syn region lfShell matchgroup=lfShellMarker start=' \zs[$!%&]{{\ze' end='}}' keepend contains=@Shell
"}}}
"{{{ Link Highlighting
hi def link lfComment Comment
hi def link lfVar Type
hi def link lfSpecial Special
hi def link lfString String
hi def link lfKeyword Statement
hi def link lfOptions Constant
hi def link lfConstant Constant
hi def link lfExternalShell Normal
hi def link lfExternalPatch Special
hi def link lfIgnore Special
hi def link lfComment Comment
hi def link lfSpecial SpecialChar
hi def link lfString String
hi def link lfKeyword Statement
hi def link lfOptions Constant
hi def link lfCommandMarker Special
hi def link lfShellMarker Special
"}}}
let &cpo = s:cpo
unlet s:cpo

View File

@@ -4,6 +4,7 @@
" Previous Maintainer: Claudio Fleiner <claudio@fleiner.com>
" URL: https://github.com/vim/vim/blob/master/runtime/syntax/make.vim
" Last Change: 2022 Nov 06
" 2025 Apr 15 by Vim project: rework Make flavor detection (#17089)
" quit when a syntax file was already loaded
if exists("b:current_syntax")
@@ -13,6 +14,9 @@ endif
let s:cpo_save = &cpo
set cpo&vim
" enable GNU extension when b:make_flavor is not set—detection failed or Makefile is POSIX-compliant
let s:make_flavor = 'gnu'
" some special characters
syn match makeSpecial "^\s*[@+-]\+"
syn match makeNextLine "\\\n\s*"
@@ -21,14 +25,16 @@ syn match makeNextLine "\\\n\s*"
syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$"
\ contains=makeStatement,makeIdent,makePreCondit,makeDefine
" Microsoft Makefile specials
syn case ignore
syn match makeInclude "^!\s*include\s.*$"
syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
syn case match
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
" Microsoft Makefile specials
syn case ignore
syn match makeInclude "^!\s*include\s.*$"
syn match makePreCondit "^!\s*\(cmdswitches\|error\|message\|include\|if\|ifdef\|ifndef\|else\|else\s*if\|else\s*ifdef\|else\s*ifndef\|endif\|undef\)\>"
syn case match
endif
" identifiers
if exists("b:make_microsoft") || exists("make_microsoft")
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
syn region makeIdent start="\$(" end=")" contains=makeStatement,makeIdent
syn region makeIdent start="\${" end="}" contains=makeStatement,makeIdent
else
@@ -59,13 +65,31 @@ syn match makeTarget "^[~A-Za-z0-9_./$(){}%*@-][A-Za-z0-9_./\t $(){}%*
\ skipnl nextgroup=makeCommands,makeCommandError
syn region makeSpecTarget transparent matchgroup=makeSpecTarget
\ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\|ONESHELL\)\>\s*:\{1,2}[^:=]"rs=e-1
\ start="^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*:\{1,2}[^:=]"rs=e-1
\ end="[^\\]$" keepend
\ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands
syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\|ONESHELL\)\>\s*::\=\s*$"
syn match makeSpecTarget "^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|NOTPARALLEL\|POSIX\)\>\s*::\=\s*$"
\ contains=makeIdent,makeComment
\ skipnl nextgroup=makeCommands,makeCommandError
if get(b:, 'make_flavor', s:make_flavor) == 'bsd'
syn region makeSpecTarget transparent matchgroup=makeSpecTarget
\ start="^\.DELETE_ON_ERROR\>\s*:\{1,2}[^:=]"rs=e-1
\ end="[^\\]$" keepend
\ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands
syn match makeSpecTarget "^\.DELETE_ON_ERROR\>\s*::\=\s*$"
\ contains=makeIdent,makeComment
\ skipnl nextgroup=makeCommands,makeCommandError
elseif get(b:, 'make_flavor', s:make_flavor) == 'gnu'
syn region makeSpecTarget transparent matchgroup=makeSpecTarget
\ start="^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*:\{1,2}[^:=]"rs=e-1
\ end="[^\\]$" keepend
\ contains=makeIdent,makeSpecTarget,makeNextLine,makeComment skipnl nextGroup=makeCommands
syn match makeSpecTarget "^\.\(EXPORT_ALL_VARIABLES\|DELETE_ON_ERROR\|INTERMEDIATE\|KEEP_STATE\|LIBPATTERNS\|ONESHELL\|SECONDARY\)\>\s*::\=\s*$"
\ contains=makeIdent,makeComment
\ skipnl nextgroup=makeCommands,makeCommandError
endif
syn match makeCommandError "^\s\+\S.*" contained
syn region makeCommands contained start=";"hs=s+1 start="^\t"
\ end="^[^\t#]"me=e-1,re=e-1 end="^$"
@@ -74,17 +98,19 @@ syn region makeCommands contained start=";"hs=s+1 start="^\t"
syn match makeCmdNextLine "\\\n."he=e-1 contained
" some directives
syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)"
syn match makeInclude "^ *[-s]\=include\s.*$"
syn match makeStatement "^ *vpath"
syn match makeExport "^ *\(export\|unexport\)\>"
syn match makeOverride "^ *override\>"
" Statements / Functions (GNU make)
syn match makeStatement contained "(\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|join\|lastword\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
if get(b:, 'make_flavor', s:make_flavor) == 'gnu'
" Statements / Functions (GNU make)
syn match makePreCondit "^ *\(ifn\=\(eq\|def\)\>\|else\(\s\+ifn\=\(eq\|def\)\)\=\>\|endif\>\)"
syn match makeStatement "^ *vpath\>"
syn match makeOverride "^ *override\>"
syn match makeStatement contained "[({]\(abspath\|addprefix\|addsuffix\|and\|basename\|call\|dir\|error\|eval\|file\|filter-out\|filter\|findstring\|firstword\|flavor\|foreach\|guile\|if\|info\|intcmp\|join\|lastword\|let\|notdir\|or\|origin\|patsubst\|realpath\|shell\|sort\|strip\|subst\|suffix\|value\|warning\|wildcard\|word\|wordlist\|words\)\>"ms=s+1
endif
" Comment
if !exists("make_no_comments")
if exists("b:make_microsoft") || exists("make_microsoft")
if get(b:, 'make_flavor', s:make_flavor) == 'microsoft'
syn match makeComment "#.*" contains=@Spell,makeTodo
else
syn region makeComment start="#" end="^$" end="[^\\]$" keepend contains=@Spell,makeTodo

218
runtime/syntax/mbsync.vim Normal file
View File

@@ -0,0 +1,218 @@
" Vim syntax file
" Language: mbsyncrc
" Maintainer: Pierrick Guillaume <pguillaume@fymyte.com>
" Last Change: 2025 Apr 13
"
" Syntax support for mbsync config file
" This file is based on the mbsync manual (isync v1.4.4)
" https://isync.sourceforge.io/mbsync.html
if exists('b:current_syntax')
finish
endif
let b:current_syntax = 'mbsync'
let s:cpo_save = &cpo
set cpo&vim
syn match mbsError '.*'
syn match mbsCommentL '^#.*$'
" Properties {{{
syn match mbsNumber '[0-9]\+' display contained
syn match mbsPath '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained
syn match mbsPath '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained
syn match mbsName '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained
syn match mbsName '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained
syn match mbsCommand '+\?.*$' display contained contains=mbsCommandPrompt
syn match mbsCommandPrompt '+' display contained
syn region mbsString start=+"+ skip=+\\"+ end=+"+ display contained
syn match mbsSizeUnit '[kKmMbB]' display contained
syn match mbsSize '[0-9]\+' display contained contains=mbsNumber nextgroup=mbsSizeUnit
syn keyword mbsBool yes no contained
" }}}
" Stores {{{
" Global Store Config Items
syn match mbsGlobConfPath '^Path\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
syn match mbsGlobConfMaxSize '^MaxSize\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsSize transparent
syn match mbsGlobConfMapInbox '^MapInbox\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
syn match mbsGlobConfFlatten '^Flatten\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
syn match mbsGlobConfTrash '^Trash\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
syn match mbsGlobConfTrashNO '^TrashNewOnly\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent
syn match mbsGlobConfTrashRN '^TrashRemoteNew\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent
syn keyword mbsGlobConfItemK Path MaxSize MapInbox Flatten Trash TrashNewOnly TrashRemoteNew contained
syn cluster mbsGlobConfItem contains=mbsGlobConfPath,mbsGlobConfMaxSize,mbsGlobConfMapInbox,mbsGlobConfFlatten,mbsCommentL,mbsGlobConfTrash.*
" MaildirStore
syn match mbsMdSConfStMaildirStore '^MaildirStore\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsName transparent
syn match mbsMdSConfStAltMap '^AltMap\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsBool transparent
syn match mbsMdsConfStInbox '^Inbox\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent
syn match mbsMdsConfStInfoDelimiter '^InfoDelimiter\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent
syn keyword mbsMdSConfSubFoldersOpt Verbatim Legacy contained
syn match mbsMdSConfSubFoldersOpt 'Maildir++' display contained
syn match mbsMdsConfStSubFolders '^SubFolders\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsMdSConfSubFoldersOpt transparent
syn cluster mbsMdSConfItem contains=mbsMdSConfSt.*
syn keyword mbsMdSConfItemK MaildirStore AltMap Inbox InfoDelimiter SubFolders contained
syn region mbsMaildirStore start="^MaildirStore" end="^$" end='\%$' contains=@mbsGlobConfItem,mbsCommentL,@mbsMdSConfItem,mbsError transparent
" IMAP4Accounts
syn match mbsIAConfStIMAPAccount '^IMAPAccount\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsName transparent
syn match mbsIAConfStHost '^Host\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStPort '^Port\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
syn match mbsIAConfStTimeout '^Timeout\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
syn match mbsIAConfStUser '^User\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStUserCmd '^UserCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
syn match mbsIAConfStPass '^Pass\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStPassCmd '^PassCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
syn match mbsIAConfStUseKeychain '^UseKeychain\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent
syn match mbsIAConfStTunnel '^Tunnel\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
syn match mbsIAConfStAuthMechs '^AuthMechs\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn keyword mbsIAConfSSLTypeOpt None STARTTLS IMAPS contained
syn match mbsIAConfStSSLType '^SSLType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLTypeOpt transparent
syn match mbsIAConfSSLVersionsOpt '\%(SSLv3\|TLSv1\%(.[123]\)\?\)\%(\s\+\%(SSLv3\|TLSv1\%(.[123]\)\?\)\)*' contained
syn match mbsIAConfStSSLVersions '^SSLVersions\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLVersionsOpt transparent
syn match mbsIAConfStSystemCertificates '^SystemCertificates\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent
syn match mbsIAConfStCertificateFile '^CertificateFile\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStClientCertificate '^ClientCertificate\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStClientKey '^ClientKey\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn match mbsIAConfStCipherString '^CipherString\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsString transparent
syn match mbsIAConfStPipelineDepth '^PipelineDepth\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
syn match mbsIAConfStDisableExtensions '^DisableExtensions\?\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
syn cluster mbsIAConfItem contains=mbsIAConfSt.*
syn keyword mbsIAConfItemK
\ IMAPAccount Host Port Timeout User UserCmd Pass PassCmd UseKeychain Tunnel
\ AuthMechs SSLType SSLVersions SystemCertificates CertificateFile ClientCertificate
\ ClientKey CipherString PipelineDepth DisableExtension[s] contained
syn region mbsIMAP4AccontsStore start="^IMAPAccount" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsIAConfItem,mbsError transparent
" IMAPStores
syn match mbsISConfStIMAPStore '^IMAPStore\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent
syn match mbsISConfStAccount '^Account\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent
syn match mbsISConfStUseNamespace '^UseNamespace\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent
syn match mbsISConfStPathDelimiter '^PathDelimiter\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsPath transparent
syn match mbsISConfStSubscribedOnly '^SubscribedOnly\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent
syn cluster mbsISConfItem contains=mbsISConfSt.*
syn keyword mbsISConfItemK IMAPStore Account UseNamespace PathDelimiter SubscribedOnly contained
syn region mbsIMAPStore start="^IMAPStore" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsISConfItem,mbsError transparent
" }}}
" Channels {{{
syn match mbsCConfStChannel '^Channel\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsName transparent
syn region mbsCConfProxOpt matchgroup=mbsCConfProxOptOp start=':' matchgroup=mbsCConfProxOptOp end=':' contained contains=mbsName nextgroup=mbsPath keepend
syn match mbsCConfStFar '^Far\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent
syn match mbsCConfStNear '^Near\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent
syn match mbsCConfPatternOptOp '[*%!]' display contained
syn match mbsCConfPatternOpt '.*$' display contained contains=mbsCConfPatternOptOp
syn match mbsCConfStPattern '^Patterns\?\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfPatternOpt transparent
syn match mbsCConfStMaxSize '^MaxSize\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsSize transparent
syn match mbsCConfStMaxMessages '^MaxMessages\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsNumber transparent
syn match mbsCConfStExpireUnread '^ExpireUnread\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent
syn match mbsCConfSyncOpt 'None\|All\|\%(\s\+\%(Pull\|Push\|New\|ReNew\|Delete\|Flags\)\)\+' display contained
syn match mbsCConfStSync '^Sync\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncOpt transparent
syn keyword mbsCConfManipOpt None Far Near Both contained
syn match mbsCConfStCreate '^Create\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
syn match mbsCConfStRemove '^Remove\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
syn match mbsCConfStExpunge '^Expunge\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
syn match mbsCConfStCopyArrivalDate '^CopyArrivalDate\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent
syn match mbsCConfSyncStateOpt '\*\|.*$' display contained contains=mbsCConfSyncStateOptOp,mbsPath transparent
syn match mbsCConfSyncStateOptOp '\*' display contained
syn match mbsCConfStSyncState '^SyncState\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncStateOpt transparent
syn cluster mbsCConfItem contains=mbsCConfSt.*
syn keyword mbsCConfItemK
\ Channel Far Near Pattern[s] MaxSize MaxMessages ExpireUnread Sync Create
\ Remove Expunge CopyArrivalDate SyncState contained
syn region mbsChannel start="^Channel" end="^$" end="\%$" contains=@mbsCConfItem,mbsCommentL,mbsError transparent
" }}}
" Groups {{{
syn match mbsGConfGroupOpt '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained contains=mbsName nextgroup=mbsGConfChannelOpt
syn match mbsGConfStGroup '^Group\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfGroupOpt transparent
syn match mbsGConfChannelOpt '.*$' display contained
syn match mbsGConfStChannel '^Channels\?\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfChannelOpt transparent
syn cluster mbsGConfItem contains=mbsGConfSt.*
syn keyword mbsGConfItemK Group Channel[s] contained
syn region mbsGroup start="^Group" end="^$" end="\%$" contains=@mbsGConfItem,mbsError transparent
" }}}
" Global Options {{{
syn match mbsFSync '^FSync\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsBool transparent
syn match mbsFieldDelimiter '^FieldDelimiter\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsPath transparent
syn match mbsBufferLimit '^BufferLimit\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsSize transparent
syn keyword mbsGlobOptItemK FSync FieldDelimiter BufferLimit contained
" }}}
" Highlights {{{
hi def link mbsError Error
hi def link mbsCommentL Comment
hi def link mbsNumber Number
hi def link mbsSizeUnit Type
hi def link mbsPath String
hi def link mbsString String
hi def link mbsCommand String
hi def link mbsCommandPrompt Operator
hi def link mbsName Constant
hi def link mbsBool Boolean
hi def link mbsGlobConfItemK Statement
hi def link mbsMdSConfItemK Statement
hi def link mbsMdSConfSubFoldersOpt Keyword
hi def link mbsIAConfItemK Statement
hi def link mbsIAConfSSLTypeOpt Keyword
hi def link mbsIAConfSSLVersionsOpt Keyword
hi def link mbsISConfItemK Statement
hi def link mbsCConfItemK Statement
hi def link mbsCConfProxOptOp Operator
hi def link mbsCConfPatternOpt String
hi def link mbsCConfPatternOptOp Operator
hi def link mbsCConfSyncOpt Keyword
hi def link mbsCConfManipOpt Keyword
hi def link mbsCConfSyncStateOptOp Operator
hi def link mbsGConfItemK Statement
hi def link mbsGConfChannelOpt String
hi def link mbsGlobOptItemK Statement
" }}}
let &cpo = s:cpo_save
unlet s:cpo_save

View File

@@ -3,14 +3,21 @@
" Maintainer: Doug Kearns <dougkearns@gmail.com>
" Previous Maintainer: pf@artcom0.north.de (Peter Funk)
" Last Change: 2024 Jan 04
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
let dialect = modula2#GetDialect()
exe "runtime! syntax/modula2/opt/" .. dialect .. ".vim"
let b:current_syntax = "modula2"
let &cpo = s:cpo_save
unlet s:cpo_save
" vim: nowrap sw=2 sts=2 ts=8 noet:

View File

@@ -1,24 +1,25 @@
vim9script
# Vim indent plugin file
# Vim syntax file
# Language: Odin
# Maintainer: Maxim Kim <habamax@gmail.com>
# Website: https://github.com/habamax/vim-odin
# Last Change: 2024-01-15
# Last Change: 2025-03-28
if exists("b:current_syntax")
finish
endif
syntax keyword odinKeyword using transmute cast distinct opaque where dynamic
syntax keyword odinKeyword using transmute cast auto_cast distinct opaque where dynamic
syntax keyword odinKeyword struct enum union const bit_field bit_set
syntax keyword odinKeyword package proc map import export foreign
syntax keyword odinKeyword size_of offset_of type_info_of typeid_of type_of align_of
syntax keyword odinKeyword return defer
syntax keyword odinKeyword or_return or_else
syntax keyword odinKeyword inline no_inline
syntax keyword odinKeyword asm context
syntax keyword odinConditional if when else do for switch case continue break
syntax keyword odinConditional if when else do for switch case fallthrough
syntax keyword odinConditional continue or_continue break or_break or_return or_else
syntax keyword odinType string cstring bool b8 b16 b32 b64 rune any rawptr
syntax keyword odinType f16 f32 f64 f16le f16be f32le f32be f64le f64be
syntax keyword odinType u8 u16 u32 u64 u128 u16le u32le u64le u128le u16be

View File

@@ -1,106 +1,833 @@
" Vim syntax file
" Language: Omnimark
" Maintainer: Paul Terray <mailto:terray@4dconcept.fr>
" Last Change: 11 Oct 2000
" quit when a syntax file was already loaded
vim9script
# Vim syntax file
# Language: OmniMark
# Maintainer: Peter Kenny <kennypete.t2o3y@aleeas.com>
# Previous Maintainer: Paul Terray <mailto:terray@4dconcept.fr>
# Last Change: 2025-03-23
# License: Vim (see :help license)
# History: 2000-10-11 Vintage minimal syntax file (Paul Terray)
#
# - Syntax is grouped, generally, by type (action to rule), using the
# version 12 headings. Refer:
# https://developers.stilo.com/docs/html/keyword/type.html
# - Deprecated/legacy syntax back to version 4 is included.
# - OmniMark is largely case insensitive, with handled exceptions (e.g., %g)
# ----------------------------------------------------------------------------
syntax case ignore
# Current syntax exists: finish {{{
if exists("b:current_syntax")
finish
endif
setlocal iskeyword=@,48-57,_,128-167,224-235,-
syn keyword omnimarkKeywords ACTIVATE AGAIN
syn keyword omnimarkKeywords CATCH CLEAR CLOSE COPY COPY-CLEAR CROSS-TRANSLATE
syn keyword omnimarkKeywords DEACTIVATE DECLARE DECREMENT DEFINE DISCARD DIVIDE DO DOCUMENT-END DOCUMENT-START DONE DTD-START
syn keyword omnimarkKeywords ELEMENT ELSE ESCAPE EXIT
syn keyword omnimarkKeywords FAIL FIND FIND-END FIND-START FORMAT
syn keyword omnimarkKeywords GROUP
syn keyword omnimarkKeywords HALT HALT-EVERYTHING
syn keyword omnimarkKeywords IGNORE IMPLIED INCLUDE INCLUDE-END INCLUDE-START INCREMENT INPUT
syn keyword omnimarkKeywords JOIN
syn keyword omnimarkKeywords LINE-END LINE-START LOG LOOKAHEAD
syn keyword omnimarkKeywords MACRO
syn keyword omnimarkKeywords MACRO-END MARKED-SECTION MARKUP-COMMENT MARKUP-ERROR MARKUP-PARSER MASK MATCH MINUS MODULO
syn keyword omnimarkKeywords NEW NEWLINE NEXT
syn keyword omnimarkKeywords OPEN OUTPUT OUTPUT-TO OVER
syn keyword omnimarkKeywords PROCESS PROCESS-END PROCESS-START PROCESSING-INSTRUCTION PROLOG-END PROLOG-IN-ERROR PUT
syn keyword omnimarkKeywords REMOVE REOPEN REPEAT RESET RETHROW RETURN
syn keyword omnimarkKeywords WHEN WHITE-SPACE
syn keyword omnimarkKeywords SAVE SAVE-CLEAR SCAN SELECT SET SGML SGML-COMMENT SGML-DECLARATION-END SGML-DTD SGML-DTDS SGML-ERROR SGML-IN SGML-OUT SGML-PARSE SGML-PARSER SHIFT SUBMIT SUCCEED SUPPRESS
syn keyword omnimarkKeywords SYSTEM-CALL
syn keyword omnimarkKeywords TEST-SYSTEM THROW TO TRANSLATE
syn keyword omnimarkKeywords UC UL UNLESS UP-TRANSLATE
syn keyword omnimarkKeywords XML-PARSE
syn keyword omnimarkCommands ACTIVE AFTER ANCESTOR AND ANOTHER ARG AS ATTACHED ATTRIBUTE ATTRIBUTES
syn keyword omnimarkCommands BASE BEFORE BINARY BINARY-INPUT BINARY-MODE BINARY-OUTPUT BREAK-WIDTH BUFFER BY
syn keyword omnimarkCommands CASE CHILDREN CLOSED COMPILED-DATE COMPLEMENT CONREF CONTENT CONTEXT-TRANSLATE COUNTER CREATED CREATING CREATOR CURRENT
syn keyword omnimarkCommands DATA-ATTRIBUTE DATA-ATTRIBUTES DATA-CONTENT DATA-LETTERS DATE DECLARED-CONREF DECLARED-CURRENT DECLARED-DEFAULTED DECLARED-FIXED DECLARED-IMPLIED DECLARED-REQUIRED
syn keyword omnimarkCommands DEFAULT-ENTITY DEFAULTED DEFAULTING DELIMITER DIFFERENCE DIRECTORY DOCTYPE DOCUMENT DOCUMENT-ELEMENT DOMAIN-FREE DOWN-TRANSLATE DTD DTD-END DTDS
syn keyword omnimarkCommands ELEMENTS ELSEWHERE EMPTY ENTITIES ENTITY EPILOG-START EQUAL EXCEPT EXISTS EXTERNAL EXTERNAL-DATA-ENTITY EXTERNAL-ENTITY EXTERNAL-FUNCTION EXTERNAL-OUTPUT-FUNCTION
syn keyword omnimarkCommands EXTERNAL-TEXT-ENTITY
syn keyword omnimarkCommands FALSE FILE FUNCTION FUNCTION-LIBRARY
syn keyword omnimarkCommands GENERAL GLOBAL GREATER-EQUAL GREATER-THAN GROUPS
syn keyword omnimarkCommands HAS HASNT HERALDED-NAMES
syn keyword omnimarkCommands ID ID-CHECKING IDREF IDREFS IN IN-LIBRARY INCLUSION INITIAL INITIAL-SIZE INSERTION-BREAK INSTANCE INTERNAL INVALID-DATA IS ISNT ITEM
syn keyword omnimarkCommands KEY KEYED
syn keyword omnimarkCommands LAST LASTMOST LC LENGTH LESS-EQUAL LESS-THAN LETTERS LIBRARY LITERAL LOCAL
syn keyword omnimarkCommands MATCHES MIXED MODIFIABLE
syn keyword omnimarkCommands NAME NAME-LETTERS NAMECASE NAMED NAMES NDATA-ENTITY NEGATE NESTED-REFERENTS NMTOKEN NMTOKENS NO NO-DEFAULT-IO NON-CDATA NON-IMPLIED NON-SDATA NOT NOTATION NUMBER-OF NUMBERS
syn keyword omnimarkCommands NUTOKEN NUTOKENS
syn keyword omnimarkCommands OCCURRENCE OF OPAQUE OPTIONAL OR
syn keyword omnimarkCommands PARAMETER PARENT PAST PATTERN PLUS PREPARENT PREVIOUS PROPER PUBLIC
syn keyword omnimarkCommands READ-ONLY READABLE REFERENT REFERENTS REFERENTS-ALLOWED REFERENTS-DISPLAYED REFERENTS-NOT-ALLOWED REMAINDER REPEATED REPLACEMENT-BREAK REVERSED
syn keyword omnimarkCommands SILENT-REFERENT SIZE SKIP SOURCE SPECIFIED STATUS STREAM SUBDOC-ENTITY SUBDOCUMENT SUBDOCUMENTS SUBELEMENT SWITCH SYMBOL SYSTEM
syn keyword omnimarkCommands TEXT-MODE THIS TIMES TOKEN TRUE
syn keyword omnimarkCommands UNANCHORED UNATTACHED UNION USEMAP USING
syn keyword omnimarkCommands VALUE VALUED VARIABLE
syn keyword omnimarkCommands WITH WRITABLE
syn keyword omnimarkCommands XML XML-DTD XML-DTDS
syn keyword omnimarkCommands YES
syn keyword omnimarkCommands #ADDITIONAL-INFO #APPINFO #CAPACITY #CHARSET #CLASS #COMMAND-LINE-NAMES #CONSOLE #CURRENT-INPUT #CURRENT-OUTPUT #DATA #DOCTYPE #DOCUMENT #DTD #EMPTY #ERROR #ERROR-CODE
syn keyword omnimarkCommands #FILE-NAME #FIRST #GROUP #IMPLIED #ITEM #LANGUAGE-VERSION #LAST #LIBPATH #LIBRARY #LIBVALUE #LINE-NUMBER #MAIN-INPUT #MAIN-OUTPUT #MARKUP-ERROR-COUNT #MARKUP-ERROR-TOTAL
syn keyword omnimarkCommands #MARKUP-PARSER #MARKUP-WARNING-COUNT #MARKUP-WARNING-TOTAL #MESSAGE #NONE #OUTPUT #PLATFORM-INFO #PROCESS-INPUT #PROCESS-OUTPUT #RECOVERY-INFO #SGML #SGML-ERROR-COUNT
syn keyword omnimarkCommands #SGML-ERROR-TOTAL #SGML-WARNING-COUNT #SGML-WARNING-TOTAL #SUPPRESS #SYNTAX #!
syn keyword omnimarkPatterns ANY ANY-TEXT
syn keyword omnimarkPatterns BLANK
syn keyword omnimarkPatterns CDATA CDATA-ENTITY CONTENT-END CONTENT-START
syn keyword omnimarkPatterns DIGIT
syn keyword omnimarkPatterns LETTER
syn keyword omnimarkPatterns NUMBER
syn keyword omnimarkPatterns PCDATA
syn keyword omnimarkPatterns RCDATA
syn keyword omnimarkPatterns SDATA SDATA-ENTITY SPACE
syn keyword omnimarkPatterns TEXT
syn keyword omnimarkPatterns VALUE-END VALUE-START
syn keyword omnimarkPatterns WORD-END WORD-START
syn region omnimarkComment start=";" end="$"
" strings
syn region omnimarkString matchgroup=Normal start=+'+ end=+'+ skip=+%'+ contains=omnimarkEscape
syn region omnimarkString matchgroup=Normal start=+"+ end=+"+ skip=+%"+ contains=omnimarkEscape
syn match omnimarkEscape contained +%.+
syn match omnimarkEscape contained +%[0-9][0-9]#+
"syn sync maxlines=100
syn sync minlines=2000
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link omnimarkCommands Statement
hi def link omnimarkKeywords Identifier
hi def link omnimarkString String
hi def link omnimarkPatterns Macro
" hi def link omnimarkNumber Number
hi def link omnimarkComment Comment
hi def link omnimarkEscape Special
let b:current_syntax = "omnimark"
" vim: ts=8
# }}}
# Keyword characters {{{
# !#%&*+-/0123456789<=>@
# ABCDEFGHIJKLMNOPQRSTUVWXYZ
# \_abcdefghijklmnopqrstuvwxyz|~
setlocal iskeyword=33,35,37-38,42-43,45,47-57,60-62,64-90,92,95,97-122,124,126
# }}}
# _ action {{{
syntax keyword omnimarkAction activate
syntax keyword omnimarkAction assert
syntax keyword omnimarkAction clear
syntax keyword omnimarkAction close
syntax keyword omnimarkAction collect-garbage
syntax match omnimarkAction "\v\c<%(copy)%(-clear)?"
syntax keyword omnimarkAction deactivate
syntax keyword omnimarkAction decrement
syntax keyword omnimarkAction discard
syntax keyword omnimarkAction flush
syntax match omnimarkAction "\v\c<%(halt)%(-everything)?"
syntax keyword omnimarkAction increment
syntax keyword omnimarkAction log
syntax keyword omnimarkAction log-message
syntax keyword omnimarkAction match
syntax keyword omnimarkAction new
# new takes before and after (as in new x{"wilma"} after [2])
syntax keyword omnimarkAction after
syntax keyword omnimarkAction before
# This is the only way 'next' is used (and it cannot be 'isnt'):
syntax match omnimarkAction "\v\c<%(next\s+group\s+is)"
syntax keyword omnimarkAction not-reached
syntax keyword omnimarkAction open
syntax match omnimarkAction "\v\c<%(output)%(-to)?"
syntax keyword omnimarkAction put
# When alone, 'referent' is nearly always 'put...referent,' which is an action
syntax keyword omnimarkAction referent
syntax match omnimarkAction "\v\c<%(remove)%(\s+key\s+of)?"
syntax keyword omnimarkAction reopen
syntax keyword omnimarkAction reset
syntax keyword omnimarkAction return
# 'scan' because it can start a line in a block of 'do *-parse ... done'
syntax keyword omnimarkAction scan
syntax match omnimarkAction "\v\c<%(set)%(\s+%(buffer|creator\s+of|external-function|file|function-library|key\s+of|new|referent|stream))?"
syntax keyword omnimarkAction sgml-in
syntax keyword omnimarkAction sgml-out
syntax keyword omnimarkAction signal
syntax keyword omnimarkAction submit
syntax keyword omnimarkAction suppress
syntax keyword omnimarkAction throw
syntax keyword omnimarkAction void
# }}}
# _ built-in data type {{{
# attribute-declaration: Every attribute-declaration instance has two
# properties: attribute-default-declaration and
# attribute-value-declaration
# attribute-default-declaration: is the abstract type of declared defaults for
# unspecified attribute values. Its concrete
# instances can be obtained with the following
# four constants:
syntax keyword omnimarkConstant attribute-declared-conref
syntax keyword omnimarkConstant attribute-declared-current
syntax keyword omnimarkConstant attribute-declared-implied
syntax keyword omnimarkConstant attribute-declared-required
# and with two operators which take a string
# default value argument:
syntax match omnimarkOperator "\v\c<%(attribute-declared-defaulted\s+to)"
syntax match omnimarkOperator "\v\c<%(attribute-declared-fixed to)"
# attribute-value-declaration: is the abstract type of values that an
# attribute is declared to accept. Its concrete
# instances can be obtained with the following
# constants:
syntax match omnimarkConstant "\v\c<%(attribute-declared-fixed to)"
syntax keyword omnimarkConstant attribute-declared-id
syntax keyword omnimarkConstant attribute-declared-idref
syntax keyword omnimarkConstant attribute-declared-idrefs
syntax keyword omnimarkConstant attribute-declared-name
syntax keyword omnimarkConstant attribute-declared-names
syntax keyword omnimarkConstant attribute-declared-nmtoken
syntax keyword omnimarkConstant attribute-declared-nmtokens
syntax keyword omnimarkConstant attribute-declared-number
syntax keyword omnimarkConstant attribute-declared-numbers
syntax keyword omnimarkConstant attribute-declared-nutoken
syntax keyword omnimarkConstant attribute-declared-nutokens
# and with one operator that takes a string shelf
# argument listing all the values allowed for the
# attribute:
syntax keyword omnimarkOperator attribute-declared-group
# content-model - the following six constants are the only possible values:
syntax keyword omnimarkConstant any-content-model
syntax keyword omnimarkConstant cdata-content-model
syntax keyword omnimarkConstant element-content-model
syntax keyword omnimarkConstant empty-content-model
syntax keyword omnimarkConstant mixed-content-model
syntax keyword omnimarkConstant rcdata-content-model
# refer also:
# developers.stilo.com/docs/html/keyword/create-element-declaration.html
#
# declared-attribute is and abstract type with subtypes:
# implied-attribute
# specified-attribute
# dtd abstract data type has subtypes:
# sgml-dtd
# xml-dtd
# element-declaration
# entity-declaration
# markup-element-event
# markup-event has subtypes:
# markup-point-event
# markup-region-event
# }}}
# _ built-in entity {{{
syntax match omnimarkBuiltinEntity "\v\c<%(#capacity)"
syntax match omnimarkBuiltinEntity "\v\c<%(#charset)"
syntax match omnimarkBuiltinEntity "\v\c<%(#document)"
syntax match omnimarkBuiltinEntity "\v\c<%(#dtd)"
syntax match omnimarkBuiltinEntity "\v\c<%(#implied)"
syntax match omnimarkBuiltinEntity "\v\c<%(#schema)"
syntax match omnimarkBuiltinEntity "\v\c<%(#syntax)"
# }}}
# _ built-in shelf {{{
syntax match omnimarkBuiltinShelf "\v\c<%(#additional-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#appinfo)"
syntax match omnimarkBuiltinShelf "\v\c<%(#args)"
syntax match omnimarkBuiltinShelf "\v\c<%(#class)"
syntax match omnimarkBuiltinShelf "\v\c<%(#command-line-names)"
syntax match omnimarkBuiltinShelf "\v\c<%(#console)"
syntax match omnimarkBuiltinShelf "\v\c<%(#content)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-dtd)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-markup-event)"
syntax match omnimarkBuiltinShelf "\v\c<%(#current-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#doctype)"
syntax match omnimarkBuiltinShelf "\v\c<%(#error)"
syntax match omnimarkBuiltinShelf "\v\c<%(#error-code)"
syntax match omnimarkBuiltinShelf "\v\c<%(#file-name)"
syntax match omnimarkBuiltinShelf "\v\c<%(#language-version)"
syntax match omnimarkBuiltinShelf "\v\c<%(#libpath)"
syntax match omnimarkBuiltinShelf "\v\c<%(#library)"
syntax match omnimarkBuiltinShelf "\v\c<%(#libvalue)"
syntax match omnimarkBuiltinShelf "\v\c<%(#line-number)"
syntax match omnimarkBuiltinShelf "\v\c<%(#log)"
syntax match omnimarkBuiltinShelf "\v\c<%(#main-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#main-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-error-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-error-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-parser)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-warning-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#markup-warning-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#message)"
syntax match omnimarkBuiltinShelf "\v\c<%(#output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#platform-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#process-input)"
syntax match omnimarkBuiltinShelf "\v\c<%(#process-output)"
syntax match omnimarkBuiltinShelf "\v\c<%(#recovery-info)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-error-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-error-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-warning-count)"
syntax match omnimarkBuiltinShelf "\v\c<%(#sgml-warning-total)"
syntax match omnimarkBuiltinShelf "\v\c<%(#suppress)"
syntax match omnimarkBuiltinShelf "\v\c<%(#xmlns-names)"
syntax keyword omnimarkBuiltinShelf attributes
syntax match omnimarkBuiltinShelf "\v\c<%(current)%(\s+%(element%(s)?|dtd|sgml-dtd))"
syntax keyword omnimarkBuiltinShelf data-attributes
syntax keyword omnimarkBuiltinShelf referents
syntax keyword omnimarkBuiltinShelf sgml-dtds
# deprecated synonym for sgml-dtds:
syntax keyword omnimarkBuiltinShelf dtds
syntax keyword omnimarkBuiltinShelf xml-dtds
syntax match omnimarkBuiltinShelf "\v\c<%(specified\s+attributes)"
# }}}
# _ catch name {{{
syntax match omnimarkCatchName "\v\c<%(#external-exception)"
# external exception parameters
syntax keyword omnimarkCatchName identity
syntax keyword omnimarkCatchName message
syntax keyword omnimarkCatchName location
syntax match omnimarkCatchName "\v\c<%(#markup-end)"
syntax match omnimarkCatchName "\v\c<%(#markup-point)"
syntax match omnimarkCatchName "\v\c<%(#markup-start)"
syntax match omnimarkCatchName "\v\c<%(#program-error)"
# }}}
# _ constant {{{
syntax keyword omnimarkConstant false
syntax keyword omnimarkConstant true
# Example: local stream u initial {unattached}
syntax keyword omnimarkConstant unattached
# }}}
# _ control structure {{{
syntax match omnimarkControlStructure "\v\c<%(#first)"
syntax match omnimarkControlStructure "\v\c<%(#group)"
syntax match omnimarkControlStructure "\v\c<%(#item)"
syntax match omnimarkControlStructure "\v\c<%(#last)"
syntax match omnimarkControlStructure "\v%(\s)?%(-\>)%(\s)?"
syntax keyword omnimarkControlStructure again
syntax keyword omnimarkControlStructure always
syntax keyword omnimarkControlStructure as
syntax keyword omnimarkControlStructure case
syntax keyword omnimarkControlStructure catch
syntax match omnimarkControlStructure "\v\c<%(do)>%(%(\s|\n)+%((markup|sgml|xml)-parse|scan|select|select-type|skip%(\s+over)?|unless|when))?"
# with id-checking and with utf-8, example:
# do sgml-parse document with id-checking false scan file "my.sgml"
syntax keyword omnimarkControlStructure id-checking
syntax keyword omnimarkControlStructure utf-8
syntax keyword omnimarkControlStructure with
syntax keyword omnimarkControlStructure done
syntax keyword omnimarkControlStructure else
syntax keyword omnimarkControlStructure exit
syntax match omnimarkControlStructure "\v\c<%(repeat)>%(\s+%(for|over%(\s+current elements)?|scan|to))?"
# Example: repeat over reversed
syntax keyword omnimarkControlStructure reversed
# Note: repeat over attribute(s) not needed - handled separately
# Note: repeat over data-attribute(s) not needed - handled separately
# Note: repeat over referents not needed - handled separately
syntax keyword omnimarkControlStructure rethrow
syntax keyword omnimarkControlStructure select
syntax keyword omnimarkControlStructure unless
syntax match omnimarkControlStructure "\v\c<%(using)%( %(%(data-)?attribute%(s)?|catch|group|input as|nested-referents|output\s+as|referents))?"
syntax keyword omnimarkControlStructure when
# }}}
# _ data type {{{
# (not a v12 heading)
syntax keyword omnimarkDataType bcd
syntax keyword omnimarkDataType counter
# db.database data type - refer omdb, below, for library functions
syntax match omnimarkDataType "\v\c<%(db)%([.])?%(database)"
syntax keyword omnimarkDataType document
syntax keyword omnimarkDataType float
syntax keyword omnimarkDataType instance
syntax match omnimarkDataType "\v\c<%(int32)"
syntax keyword omnimarkDataType integer
syntax match omnimarkDataType "\v\c<%(markup\s+sink)"
syntax match omnimarkDataType "\v\c<%(markup\s+source)"
syntax keyword omnimarkDataType pattern
syntax keyword omnimarkDataType string
syntax match omnimarkDataType "\v\c<%(string\s+sink)"
syntax match omnimarkDataType "\v\c<%(string\s+source)"
syntax keyword omnimarkDataType stream
syntax keyword omnimarkDataType string
syntax keyword omnimarkDataType subdocument
syntax keyword omnimarkDataType switch
# }}}
# _ declaration/definition {{{
syntax keyword omnimarkDeclaration constant
syntax keyword omnimarkDeclaration context-translate
syntax keyword omnimarkDeclaration created by
syntax keyword omnimarkDeclaration cross-translate
syntax keyword omnimarkDeclaration declare
syntax match omnimarkDeclaration "\v\c<%(declare)%(\s+%(data-letters|function-library|heralded-names|markup-identification))?"
# Note: declare #error, #main-input, #main-output, #process-input,
# #process-output, catch, data-letters, function-library, letters,
# name-letters, no-default-io, opaque, record
# - Those are all handed as separate keywords/matches
syntax match omnimarkDeclaration "\v\c<%(define\s+conversion-function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+external)\s+%(source\s+)?%(function)"
# in function-library is part of an external function
syntax match omnimarkDeclaration "\v\c<%(in\s+function-library)"
syntax match omnimarkDeclaration "\v\c<%(define\s+external\s+output)"
syntax match omnimarkDeclaration "\v\c<%(define\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+\w+function)"
# Example: define integer function add (value integer x, value ...)
syntax keyword omnimarkDeclaration value
syntax match omnimarkDeclaration "\v\c<%(define\s+infix-function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+overloaded\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+string\s+sink\s+function)"
syntax match omnimarkDeclaration "\v\c<%(define\s+string\s+source\s+function)"
# Some combinations are missed, so the general, 'define', is needed too:
syntax match omnimarkDeclaration "\v\c<%(define\s+)"
syntax keyword omnimarkDeclaration delimiter
syntax keyword omnimarkDeclaration domain-bound
syntax keyword omnimarkDeclaration down-translate
syntax keyword omnimarkDeclaration dynamic
syntax keyword omnimarkDeclaration elsewhere
syntax keyword omnimarkDeclaration escape
syntax match omnimarkDeclaration "\v\c<%(export\s+as\s+opaque)"
syntax keyword omnimarkDeclaration export
syntax keyword omnimarkDeclaration field
syntax keyword omnimarkDeclaration function
syntax keyword omnimarkDeclaration global
syntax match omnimarkDeclaration "\v\c<%(group)%(s)?"
syntax keyword omnimarkDeclaration import
syntax match omnimarkDeclaration "\v\c<%(include)%(-guard)?"
syntax match omnimarkDeclaration "\v\c<%(initial)%(-size)?"
syntax keyword omnimarkDeclaration letters
syntax keyword omnimarkDeclaration library
syntax keyword omnimarkDeclaration local
syntax match omnimarkDeclaration "\v\c<%(macro)%(-end)?"
# macros can take an arg and/or a token (or args or tokens)
syntax keyword omnimarkDeclaration arg
syntax keyword omnimarkDeclaration token
syntax keyword omnimarkDeclaration modifiable
syntax keyword omnimarkDeclaration module
syntax keyword omnimarkDeclaration name-letters
syntax match omnimarkDeclaration "\v\c<%(namecase\s+entity)"
syntax match omnimarkDeclaration "\v\c<%(namecase\s+general)"
syntax keyword omnimarkDeclaration newline
syntax keyword omnimarkDeclaration no-default-io
syntax keyword omnimarkDeclaration opaque
syntax keyword omnimarkDeclaration optional
syntax keyword omnimarkDeclaration overriding
syntax match omnimarkDeclaration "\v\c<%(prefixed\s+by)"
syntax keyword omnimarkDeclaration read-only
syntax keyword omnimarkDeclaration record
syntax keyword omnimarkDeclaration remainder
syntax keyword omnimarkDeclaration require
syntax keyword omnimarkDeclaration save
syntax keyword omnimarkDeclaration save-clear
syntax keyword omnimarkDeclaration silent-referent
syntax keyword omnimarkDeclaration size
syntax keyword omnimarkDeclaration supply
syntax keyword omnimarkDeclaration symbol
syntax keyword omnimarkDeclaration unprefixed
syntax keyword omnimarkDeclaration up-translate
syntax keyword omnimarkDeclaration use
syntax keyword omnimarkDeclaration variable
syntax keyword omnimarkDeclaration write-only
# }}}
# _ element qualifier {{{
syntax keyword omnimarkElementQualifier ancestor
syntax keyword omnimarkElementQualifier doctype
syntax keyword omnimarkElementQualifier document-element
syntax match omnimarkElementQualifier "\v\c<%(open\s+element)"
syntax keyword omnimarkElementQualifier parent
syntax keyword omnimarkElementQualifier preparent
syntax keyword omnimarkElementQualifier previous
# }}}
# _ modifier {{{
syntax match omnimarkModifier "\v\c<%(#base)"
syntax match omnimarkModifier "\v\c<%(#full)"
syntax match omnimarkModifier "\v\c<%(#xmlns)"
syntax keyword omnimarkModifier append
syntax keyword omnimarkModifier binary-input
syntax keyword omnimarkModifier binary-mode
syntax keyword omnimarkModifier binary-output
syntax keyword omnimarkModifier break-width
syntax keyword omnimarkModifier buffered
syntax match omnimarkModifier "\v\c<%(declare\s+#main-output\s+has\s+domain-free)"
syntax keyword omnimarkModifier defaulting
syntax keyword omnimarkModifier domain-free
syntax keyword omnimarkModifier notation
# of may be standalone, e.g., data-attribute colwidth of (attribute name)
syntax match omnimarkModifier "\v\c<%(of)%(\s%(ancestor|doctype|element|open element|%(pre)?parent))?"
syntax keyword omnimarkModifier referents-allowed
syntax keyword omnimarkModifier referents-displayed
syntax keyword omnimarkModifier referents-not-allowed
syntax keyword omnimarkModifier text-mode
syntax keyword omnimarkModifier unbuffered
# : (field selection operator) [not included]
# ` (keyword access character) [not included]
# }}}
# _ operator {{{
syntax keyword omnimarkOperator !
syntax keyword omnimarkOperator not
syntax keyword omnimarkOperator !=
# 'isnt equal' is handled by separate keywords
syntax keyword omnimarkOperator !==
syntax match omnimarkOperator "\%(#!\)"
syntax match omnimarkOperator "\v\c<%(#empty)"
# Example: usemap is #none:
syntax match omnimarkOperator "\v\c<%(#none)"
syntax keyword omnimarkOperator %
syntax keyword omnimarkOperator format
syntax keyword omnimarkOperator &
syntax keyword omnimarkOperator and
syntax keyword omnimarkOperator *
syntax keyword omnimarkOperator times
syntax keyword omnimarkOperator **
syntax keyword omnimarkOperator power
syntax keyword omnimarkOperator +
syntax keyword omnimarkOperator plus
syntax keyword omnimarkOperator -
syntax keyword omnimarkOperator minus
syntax keyword omnimarkOperator negate
syntax keyword omnimarkOperator /
syntax keyword omnimarkOperator divide
syntax keyword omnimarkOperator <
syntax keyword omnimarkOperator less-than
syntax keyword omnimarkOperator greater-equal
syntax keyword omnimarkOperator <=
syntax keyword omnimarkOperator less-equal
syntax keyword omnimarkOperator =
syntax keyword omnimarkOperator equal
# 'is equal' is handled by separate keywords
syntax keyword omnimarkOperator ==
syntax match omnimarkOperator "\v<[=][>]\s*"
syntax keyword omnimarkOperator >
syntax keyword omnimarkOperator greater-than
syntax keyword omnimarkOperator >=
syntax keyword omnimarkOperator greater-equal
syntax keyword omnimarkOperator abs
syntax keyword omnimarkOperator active
syntax keyword omnimarkOperator attribute
# attribute is defaulted, implied, specified: split to single keywords
# because it can be isnt too. Similarly for ancestor (is/isnt)
# with ancestor being an element qualifier.
# Tests for element attributes, e.g.:
# do when attribute myid is (id | idref | idrefs)
# cdata (already omnimarkPattern)
# name (already omnimarkOperator)
syntax keyword omnimarkAttributeType names
# number: match rather than keyword since "number of" is an operator
syntax match omnimarkAttributeType "\v\c<%(number)"
syntax keyword omnimarkAttributeType numbers
syntax keyword omnimarkAttributeType nmtoken
syntax keyword omnimarkAttributeType nmtokens
syntax keyword omnimarkAttributeType nutoken
syntax keyword omnimarkAttributeType nutokens
syntax keyword omnimarkAttributeType id
syntax keyword omnimarkAttributeType idref
syntax keyword omnimarkAttributeType idrefs
# notation (already omnimarkModifier)
# entity (already omnimarkOperator)
# entities (already omnimarkOperator)
syntax keyword omnimarkOperator base
syntax keyword omnimarkOperator binary
syntax keyword omnimarkOperator cast
syntax keyword omnimarkOperator ceiling
syntax keyword omnimarkOperator children
syntax keyword omnimarkOperator compiled-date
syntax keyword omnimarkOperator complement
syntax match omnimarkOperator "\v\c<%(content\s+of)"
syntax keyword omnimarkOperator create-attribute-declaration
syntax keyword omnimarkOperator create-element-declaration
syntax keyword omnimarkOperator create-element-event
syntax keyword omnimarkOperator create-processing-instruction-event
syntax keyword omnimarkOperator create-specified-attribute
syntax keyword omnimarkOperator create-unspecified-attribute
syntax keyword omnimarkOperator creating
syntax match omnimarkOperator "\v\c<%(creator\s+of)"
syntax keyword omnimarkOperator data-attribute
syntax keyword omnimarkOperator date
syntax match omnimarkOperator "\v\c<%(declaration\s+of)"
syntax keyword omnimarkOperator declared-elements
syntax keyword omnimarkOperator declared-general-entities
syntax keyword omnimarkOperator declared-parameter-entities
syntax keyword omnimarkOperator defaulted
syntax keyword omnimarkOperator difference
syntax match omnimarkOperator "\v\c<%(doctype\s+is)"
syntax keyword omnimarkOperator drop
syntax match omnimarkOperator "\v\c<%(element\s+is)"
syntax match omnimarkOperator "\v\c<%(elements\s+of)"
syntax match omnimarkOperator "\v\c<%(entity\s+is)"
syntax keyword omnimarkOperator except
syntax keyword omnimarkOperator exists
syntax keyword omnimarkOperator exp
syntax keyword omnimarkOperator external-function
syntax keyword omnimarkOperator file
syntax keyword omnimarkOperator floor
syntax match omnimarkOperator "\v\c<%(function-library\s+of)"
syntax keyword omnimarkOperator has
syntax keyword omnimarkOperator hasnt
# 'has'/'hasnt' (before 'key'/'^' or 'item'/'@' (other obscure things too?):
syntax keyword omnimarkOperator key
syntax match omnimarkOperator "\v[\^]"
# 'item' is addressed elsewhere - @ needs to be a match, not keyword
syntax match omnimarkOperator "\v<[@]"
syntax keyword omnimarkOperator implied
syntax keyword omnimarkOperator in-codes
syntax keyword omnimarkOperator is
syntax keyword omnimarkOperator isnt
# 'is'/'isnt' (usually before, or sometime after, e.g., 'content isnt'):
syntax keyword omnimarkOperator attached
syntax keyword omnimarkOperator buffer
syntax keyword omnimarkOperator catchable
syntax keyword omnimarkOperator cdata-entity
syntax keyword omnimarkOperator closed
syntax keyword omnimarkOperator conref
syntax keyword omnimarkOperator content
# 'content is' ... empty, any, cdata, rcdata, mixed, conref
syntax keyword omnimarkOperator default-entity
syntax keyword omnimarkOperator directory
# 'entity'/'entities', e.g., 'attribute x is (entity | entities)'
syntax match omnimarkOperator "\v\c<%(entit)%(y|ies)"
syntax keyword omnimarkOperator external
# E.g., 'open s as external-output-function' (v. buffer, etc.) '-call'?
syntax match omnimarkOperator "\v\c<%(external-output-function)%(-call)?"
syntax keyword omnimarkOperator file
syntax keyword omnimarkOperator general
syntax keyword omnimarkOperator in-library
syntax keyword omnimarkOperator internal
syntax keyword omnimarkOperator keyed
syntax keyword omnimarkOperator markup-parser
syntax keyword omnimarkOperator ndata-entity
# These are not to be confused with the omnimarkAction, 'open'
syntax match omnimarkOperator "\v\c<%(is\s+open)"
syntax match omnimarkOperator "\v\c<%(isnt\s+open)"
syntax keyword omnimarkOperator parameter
syntax keyword omnimarkOperator past
syntax keyword omnimarkOperator public
syntax keyword omnimarkOperator readable
# These are not to be confused with the omnimarkAction, 'referent'
syntax match omnimarkOperator "\v\c<%(is\s+referent)"
syntax match omnimarkOperator "\v\c<%(isnt\s+referent)"
syntax keyword omnimarkOperator sdata-entity
# Deprecated form - markup-parser is recommended
syntax keyword omnimarkOperator sgml-parser
syntax keyword omnimarkOperator subdoc-entity
syntax keyword omnimarkOperator system
syntax keyword omnimarkOperator thrown
syntax match omnimarkOperator "\v\c<%(item)%(\sof)?%(\s%(data-)?attributes)?"
syntax match omnimarkOperator "\v\c<%(key\s+of)"
# 'key of attribute'/s not needed: 'key of' and 'attribute' are separate
# 'key of data-attribute'/s not needed: 'key of' &c. are separate
# 'key of referents' not needed: 'key of' and 'referents' are separate
syntax keyword omnimarkOperator last
syntax keyword omnimarkOperator lastmost
syntax match omnimarkOperator "\v\c<%(length\s*of)"
syntax keyword omnimarkOperator literal
syntax keyword omnimarkOperator ln
syntax keyword omnimarkOperator log10
syntax keyword omnimarkOperator lookahead
# 'lookahead not' not needed: 'lookahead' and 'not' are separate
syntax keyword omnimarkOperator mask
syntax keyword omnimarkOperator matches
syntax keyword omnimarkOperator modulo
syntax match omnimarkOperator "\v\c<%(name)>%(\s+of)?%(\s+current)?%(\s+element)?"
syntax keyword omnimarkOperator named
syntax match omnimarkOperator "\v\c<%(notation\s+equals)"
syntax match omnimarkOperator "\v\c<%(number\s+of)"
# 'number of attribute'/s not needed: 'number of' and 'attribute' are separate
# 'number of current elements' is not needed: 'number of' &c. are separate
syntax match omnimarkOperator "\v\c<%(number\s+of\s+current\s+subdocuments)"
# 'number of data-attribute'/s not needed: 'number of' &c. are separate
# 'number of referents' not needed: 'number of' and 'referents' are separate
syntax keyword omnimarkOperator occurrence
syntax match omnimarkOperator "\v\c<%(open\s+element\s+is)"
syntax match omnimarkOperator "\v\c<%(parent\s+is)"
syntax match omnimarkOperator "\v\c<%(preparent\s+is)"
syntax match omnimarkOperator "\v\c<%(previous\s+is)"
syntax match omnimarkOperator "\v\c<%(public-identifier\s+of)"
syntax match omnimarkOperator "\v\c<%(referents\s+has\s+key)"
syntax match omnimarkOperator "\v\c<%(referents\s+is\s+attached)"
syntax keyword omnimarkOperator round
syntax keyword omnimarkOperator shift
syntax keyword omnimarkOperator specified
syntax keyword omnimarkOperator sqrt
# E.g., last proper? subelement _element-qualifier_ is/isnt
syntax keyword omnimarkOperator subelement
syntax keyword omnimarkOperator system-call
syntax match omnimarkOperator "\v\c<%(system-identifier\s+of)"
syntax keyword omnimarkOperator status
# E.g., 'status ... is (proper | inclusion)'
syntax keyword omnimarkOperator inclusion
syntax keyword omnimarkOperator proper
# E.g., 'last content {element-qualifier} is #DATA'
syntax match omnimarkOperator "\v\c<%(#data)"
syntax keyword omnimarkOperator take
# 'this' only appears before 'referent', so requires no standalone 'this'
syntax match omnimarkOperator "\v\c<%(this\s*referent)"
syntax keyword omnimarkOperator to
syntax keyword omnimarkOperator truncate
syntax keyword omnimarkOperator ul
syntax keyword omnimarkOperator union
syntax keyword omnimarkOperator usemap
syntax keyword omnimarkOperator valued
syntax keyword omnimarkOperator writable
syntax keyword omnimarkOperator xmlns-name
syntax match omnimarkOperator "\v%(\s)%([\\])%(\s)"
syntax match omnimarkOperator "\v%(\s)([_])%(\s)"
syntax match omnimarkOperator "\v%(\s)([\|])%(\s)"
syntax keyword omnimarkOperator or
syntax match omnimarkOperator "\v%(\s)([\|][\|])%(\s)"
syntax keyword omnimarkOperator join
syntax match omnimarkOperator "\v%(\s)([\|][\|][\*])%(\s)"
syntax keyword omnimarkOperator repeated
syntax match omnimarkOperator "\v%(\s)([~])"
# }}}
# _ pattern {{{
syntax match omnimarkPattern "\v%(\s)%(\=\|)"
syntax match omnimarkPattern "\v\c<%(any)%(\+%(\+)?|*%(*)?|\?)?"
syntax match omnimarkPattern "\v\c<%(any-text)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(blank)%(\+|*|\?)?"
syntax keyword omnimarkPattern cdata
syntax keyword omnimarkPattern content-end
syntax keyword omnimarkPattern content-start
syntax match omnimarkPattern "\v\c<%(digit)%(\+|*|\?)?"
syntax keyword omnimarkPattern empty
syntax match omnimarkPattern "\v\c<%(lc)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(letter)%(\+|*|\?)?"
syntax keyword omnimarkPattern line-end
syntax keyword omnimarkPattern line-start
syntax keyword omnimarkPattern mixed
syntax keyword omnimarkPattern non-cdata
syntax keyword omnimarkPattern non-sdata
syntax keyword omnimarkPattern null
syntax keyword omnimarkPattern pcdata
syntax keyword omnimarkPattern rcdata
syntax keyword omnimarkPattern sdata
syntax match omnimarkPattern "\v\c<%(space)%(\+|*|\?)?"
syntax match omnimarkPattern "\v\c<%(text)%([[:space:]\n])"
syntax match omnimarkPattern "\v\c<%(uc)%(\+|*|\?)?"
syntax keyword omnimarkPattern unanchored
syntax keyword omnimarkPattern value-end
syntax keyword omnimarkPattern value-start
syntax match omnimarkPattern "\v\c<%(white-space)%(\+|*|\?)?"
syntax keyword omnimarkPattern word-end
syntax keyword omnimarkPattern word-start
syntax match omnimarkPattern "\v%(\s)%(\|\=)"
# }}}
# _ rule {{{
syntax keyword omnimarkRule data-content
syntax keyword omnimarkRule document-end
syntax keyword omnimarkRule document-start
syntax keyword omnimarkRule document-type-declaration
syntax keyword omnimarkRule dtd-end
syntax keyword omnimarkRule dtd-start
syntax keyword omnimarkRule element
syntax keyword omnimarkRule epilog-start
syntax keyword omnimarkRule external-entity
syntax keyword omnimarkRule external-data-entity
syntax keyword omnimarkRule external-text-entity
syntax match omnimarkRule "\v\c<%(external-text-entity\s+#document)"
syntax keyword omnimarkRule find
syntax keyword omnimarkRule find-end
syntax keyword omnimarkRule find-start
syntax keyword omnimarkRule insertion-break
syntax keyword omnimarkRule invalid-data
syntax match omnimarkRule "\v\c<%(marked-section)%(\s+%(cdata|ignore|include-%(end|start)|rcdata))?"
syntax keyword omnimarkRule markup-comment
syntax keyword omnimarkRule markup-error
syntax keyword omnimarkRule process
syntax keyword omnimarkRule process-end
syntax keyword omnimarkRule processing-instruction
syntax keyword omnimarkRule process-start
syntax keyword omnimarkRule prolog-end
syntax keyword omnimarkRule prolog-in-error
syntax keyword omnimarkRule replacement-break
syntax keyword omnimarkRule sgml-comment
syntax keyword omnimarkRule sgml-declaration-end
syntax keyword omnimarkRule sgml-error
syntax keyword omnimarkRule translate
syntax keyword omnimarkRule xmlns-change
# }}}
# Libraries {{{
# ombase64
syntax match omnimarkLibrary "\v\c<%(base64[.])%([orw])%([[:print:]])+"
# ombcd
# (NB: abs, ceiling, exp, floor, ln, log10, round, sqrt, and truncate
# are all operators)
syntax match omnimarkLibrary "\v\c<%(ombcd-version)"
# ombessel
syntax match omnimarkLibrary "\v\c<%(j0|j1|jn|y0|y1|yn)"
# ombig5
syntax match omnimarkLibrary "\v\c<%(big5[.])%([orw])%([[:print:]])+"
# omblowfish and omffblowfish
syntax match omnimarkLibrary "\v\c<%(blowfish[.])%([deorsw])%(\a|-)+"
# omcgi
syntax match omnimarkLibrary "\v\c<%(cgiGet)%([EQ])\a+"
# omff8859
syntax match omnimarkLibrary "\v\c<%(iso8859[.])%([iorw])%([[:print:]])+"
# omfloat
# (NB: uses same operator names as ombcd except for the following)
syntax match omnimarkLibrary "\v\c<%(is-nan)"
syntax match omnimarkLibrary "\v\c<%(omfloat-version)"
# omdate
syntax match omnimarkLibrary "\v\c<%(add-to-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(arpadate-to-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(format-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(now-as-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(round-down-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(round-up-ymdhms)"
syntax match omnimarkLibrary "\v\c<%(ymdhms-)%([adjmst])%(\a|-)+"
syntax match omnimarkLibrary "\v\c<%(ymd-weekday)"
# omdb
syntax match omnimarkLibrary "\v\c<%(db[.])%([acdefimopqrstuw])%(\a|-|1)+"
# omffeuc
syntax match omnimarkLibrary "\v\c<%(euc[.])%([orw])%(\a|-)+"
# omffjis
syntax match omnimarkLibrary "\v\c<%(jis[.])%([orw])%(\a|-)+"
# omffutf16 and omffutf32
syntax match omnimarklibrary "\v\c<%(utf)%(16|32)%([.])%([orw])%(\a|-)+"
# omfloat
syntax match omnimarklibrary "\v\C<%(FP_)%([a-z])+\d?"
# omfsys
syntax match omnimarkLibrary "\v\C<%(FS_)%([CDGLMR])\a+"
# omftp
syntax match omnimarkLibrary "\v\c<%(FTP)%([CIL])\a+"
# omhttp
syntax match omnimarkLibrary "\v\c<%(Http)%([CORS])\a+"
# omiobuf
syntax match omnimarkLibrary "\v\c<%(iobuf[.])%([brw])\a+"
# omldap
syntax match omnimarkLibrary "\v\c<%(ldap[.])%([acdemnors])%(\a|-)+"
# omprocess
syntax match omnimarkLibrary "\v\c<%(command-line)"
syntax match omnimarkLibrary "\v\c<%(executable-name)"
syntax match omnimarkLibrary "\v\c<%(execute)"
syntax match omnimarkLibrary "\v\c<%(glob)"
syntax match omnimarkLibrary "\v\c<%(omprocess-version)"
# omrandom
syntax match omnimarkLibrary "\v\c<%(random[.])%([eosu])%(\a|-)+"
# omunicode
syntax match omnimarkLibrary "\v\c<%(unicode[.])%([bgo])%(\a|-)+"
# omutf8
syntax match omnimarkLibrary "\v\c<%(utf8[.])%([bceilmos])%(\a|8|-)+"
# omioe/omfio
syntax match omnimarkLibrary "\v\c<%(get-exception-status)"
syntax match omnimarkLibrary "\v\c<%(io-exception-text)"
syntax match omnimarkLibrary "\v\c<%(new-io-exception)"
syntax match omnimarkLibrary "\v\c<%(set-voluntary-end-exception)"
syntax match omnimarkLibrary "\v\c<%(%(Big5|euc|jis|sjis|utf16)%(-))?%(%(in|out)put-file)"
# omioprotocol
syntax match omnimarkLibrary "\v\c<%(IOProtocol)%([EILMS])\a+"
# ommail
syntax match omnimarkLibrary "\v\c<%(Mail)%([ILO]\a+)"
# omtrig
syntax match omnimarkLibrary "\v\c<%(a)?%(cos%(h)?|sin%(h)?|tan%(h|2)?|hypot)"
# omnetutl
syntax match omnimarkLibrary "\v\c<%(from-net-long)"
syntax match omnimarkLibrary "\v\c<%(net-long)"
syntax match omnimarkLibrary "\v\c<%(NET)%([GIL]\a+)"
syntax match omnimarkLibrary "\v\c<%(to-net-long)"
# omnetutil
syntax match omnimarkLibrary "\v\c<%(netutil[.])%([fhnot]%(\a|3|2|-)+)"
# omoci
syntax match omnimarkLibrary "\v\c<%(OCI_)%([GLoS]\a+)"
# omodbc
syntax match omnimarkLibrary "\v\c<%(SQL)%([_])?%([ABCDEFGLMNPRST][[:alpha:]]+)"
# omsocat
syntax match omnimarkLibrary "\v\c<%(socat-[clr-])%([[:alpha:]]+)"
# omsort
syntax match omnimarkLibrary "\v\c<%(sort[.][os])%(\a|-)+"
# omutil
syntax match omnimarkLibrary "\v\c<%(UTIL[_.][EGLmopRSU])%(\a|-)+"
# omvfs
syntax match omnimarkLibrary "\v\c<%(vfs[.][cdflmorstuw])%(\a|-)+"
# tcp
syntax match omnimarkLibrary "\v\c<%(TCP)%([.])?%([acdegilmoprstw][[:alpha:]-]+)"
# uri
syntax match omnimarkLibrary "\v\c<%(uri[.])%([ceopr])%(\a|-)+"
# wsb
syntax match omnimarkLibrary "\v\c<%(wsb[.])%([acdfhrsw])%(\a|-)+"
# }}}
# Comments {{{
# -------
syntax region omnimarkComment start=";" end="$"
# }}}
# Strings and format-modifiers {{{
syntax region omnimarkString matchgroup=Normal start=+'+ end=+'+ skip=+%'+ contains=omnimarkEscape
syntax region omnimarkString matchgroup=Normal start=+"+ end=+"+ skip=+%"+ contains=omnimarkEscape
# This handles format items inside strings:
# NB: escape _quoted-character_ allows a new character to be used to
# indicate a special character or a format item, rather than the normal %.
# The use of escape is deprecated in general, because it leads to
# non-standard OmniMark code that can be difficult to understand. It has
# not be handled here as it would be almost impossible to do so.
# dynamic: %a %b %d %g %i %p %q %v %x %w %y
# a - integer data type formatting
# b - integer data type formatting
# c - parsed data formatting
# d - integer data type formatting, BCD data type formatting
# g - string data formatting
# i - integer data type formatting
# p - parsed data formatting
# q - parsed data formatting
# v - parsed data formatting
# x - deprecated format command used instead of g
# y - symbol declaration
# @ - macro arguments
# static: %% %_ %n %t %# %) %" %' %/ %[ %] %@%%
# %% - insert an explicit percent sign
# %_ - insert an explicit space character
# %n - insert an explicit newline character
# %t - insert an explicit tab character
# %0# through to %255# - insert an explicit byte with given value
# %{...}—a sequence of characters, e.g., %16r{0d, 0a}
# %#—insert an explicit octothorpe character (#)
# %)insert an explicit closing parenthesis
# %"—insert an explicit double quote character
# %'—insert an explicit single quote character
# %/—indicates a point where line breaking can occur
# %[ and %]—protect the delimited text from line breaking
# %@%—insert an explicit percent sign inside a macro expansion
# % format-modifier a
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f))?%(j|k|l|u|w)*)?a)=
# % format-modifier b
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f))?%(\d)?)?b)=
# % format-modifier c
syntax match omnimarkEscape contained =\v\C%(%(\%%(h|l|u|s|z)*c))=
# % format-modifier d
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f|r|s)?)*%(j|k|l|u|z)*)?d)=
# % format-modifier g
syntax match omnimarkEscape contained =\v\C%(\%%(%(%(\d)*%(f|r|s)?)*%(j|k|l|u|z)*)?g)=
# % format-modifier
syntax match omnimarkEscape contained =\v\C%(%(\%[abdgipqvxwy%_nt#)"'/\[\]])|%(\%\@\%)|%(\%\d+#)|\%%(\d+r[{]%([0-9A-z, ]+)}))+=
# }}}
# Number {{{
syntax match omnimarkNumber "\v([[:alpha:]]+)@<![-]?\d+([.]\d+)?"
# }}}
# Define default highlighting {{{
highlight default link omnimarkAction Statement
highlight default link omnimarkAttributeType Structure
highlight default link omnimarkDataType Type
highlight default link omnimarkBuiltinEntity Identifier
highlight default link omnimarkBuiltinShelf Identifier
highlight default link omnimarkCatchName Exception
highlight default link omnimarkConstant Constant
highlight default link omnimarkControlStructure Conditional
highlight default link omnimarkDeclaration Keyword
highlight default link omnimarkElementQualifier Type
highlight default link omnimarkLibrary Function
highlight default link omnimarkModifier Keyword
highlight default link omnimarkOperator Operator
highlight default link omnimarkPattern Label
highlight default link omnimarkRule Keyword
highlight default link omnimarkString String
highlight default link omnimarkNumber Number
highlight default link omnimarkComment Comment
highlight default link omnimarkEscape Special
highlight default link omnimarkNormal Statement
# }}}
syntax sync fromstart
b:current_syntax = "omnimark"
# vim: cc=+1 et fdm=marker ft=vim sta sw=2 ts=8 tw=79

View File

@@ -2,11 +2,15 @@
" Language: pacman.log
" Maintainer: Ronan Pigott <ronan@rjp.ie>
" Last Change: 2023 Dec 04
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
syn sync maxlines=1
syn region pacmanlogMsg start='\S' end='$' keepend contains=pacmanlogTransaction,pacmanlogALPMMsg
syn region pacmanlogTag start='\['hs=s+1 end='\]'he=e-1 keepend nextgroup=pacmanlogMsg
@@ -39,3 +43,6 @@ hi def link pacmanlogPackageName Normal
hi def link pacmanlogPackageVersion Comment
let b:current_syntax = "pacmanlog"
let &cpo = s:cpo_save
unlet s:cpo_save

337
runtime/syntax/pq.vim Normal file
View File

@@ -0,0 +1,337 @@
" Vim syntax file
" Language: Power Query M
" Maintainer: Anarion Dunedain <anarion80@gmail.com>
" Last Change:
" 2025 Apr 03 First version
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
let s:keepcpo = &cpo
set cpo&vim
" There are Power Query functions with dot or hash in the name
setlocal iskeyword+=.
setlocal iskeyword+=#
setlocal foldmethod=syntax
setlocal foldtext=getline(v:foldstart)
" DAX is case sensitive
syn case match
" Any Power Query identifier
syn match pqIdentifier "\<[a-zA-Z0-9$_#]*\>"
" Fold on parenthesis
syn region pqParenthesisFold start="(" end=")" transparent fold
" Power Query keywords
syn keyword pqKeyword section sections shared
syn region pqKeyword start="\<let\>\c" end="\<in\>\c\%(\_s*$\)"me=s-2 transparent fold keepend containedin=ALLBUT,pqString,pqComment
" Power Query types
syn keyword pqType null logical number time date datetime datetimezone duration text binary type list record table function anynonnull none
" Power Query conditionals
syn keyword pqConditional if then else each
" Power Query constants
syn keyword pqConstant
\ Number.E Number.Epsilon Number.NaN
\ Number.NegativeInfinity Number.PI Number.PositiveInfinity
" TODO
syn keyword pqTodo FIXME NOTE TODO OPTIMIZE XXX HACK contained
" Numbers
" integer number, or floating point number without a dot.
syn match pqNumber "\<\d\+\>"
" floating point number, with dot
syn match pqNumber "\<\d\+\.\d*\>"
syn match pqFloat "[-+]\=\<\d\+[eE][\-+]\=\d\+"
syn match pqFloat "[-+]\=\<\d\+\.\d*\([eE][\-+]\=\d\+\)\="
syn match pqFloat "[-+]\=\<\.\d\+\([eE][\-+]\=\d\+\)\="
" String and Character constants
syn region pqString start=+"+ end=+"+
" Power Query Record
syn region pqRecord matchgroup=pqParen start=/\[/ end=/\]/ contains=ALLBUT,pqIdentifier
" Power Query List
syn region pqList matchgroup=pqParen start=/{/ end=/}/ contains=ALLBUT,pqIdentifier
" Operators
syn match pqOperator "+"
syn match pqOperator "-"
syn match pqOperator "*"
syn match pqOperator "/"
syn match pqOperator "\<\(NOT\|AND\|OR\|AS\|IS\|META\)\>\c"
syn match pqOperator "??"
syn match pqOperator "&&"
syn match pqOperator "&"
syn match pqOperator "[<>]=\="
syn match pqOperator "<>"
syn match pqOperator "="
syn match pqOperator ">"
syn match pqOperator "<"
" Comments
syn region pqComment start="\(^\|\s\)\//" end="$" contains=pqTodo
syn region pqComment start="/\*" end="\*/" contains=pqTodo
" Power Query functions
syn keyword pqFunction
\ #binary #date #datetime #datetimezone #duration #table #time
\ Access.Database AccessControlEntry.ConditionToIdentities Action.WithErrorContext
\ ActiveDirectory.Domains AdoDotNet.DataSource AdoDotNet.Query AdobeAnalytics.Cubes
\ AnalysisServices.Database AnalysisServices.Databases AzureStorage.BlobContents
\ AzureStorage.Blobs AzureStorage.DataLake AzureStorage.DataLakeContents
\ AzureStorage.Tables Binary.ApproximateLength Binary.Buffer
\ Binary.Combine Binary.Compress Binary.Decompress
\ Binary.From Binary.FromList Binary.FromText
\ Binary.InferContentType Binary.Length Binary.Range
\ Binary.Split Binary.ToList Binary.ToText
\ Binary.View Binary.ViewError Binary.ViewFunction
\ BinaryFormat.7BitEncodedSignedInteger BinaryFormat.7BitEncodedUnsignedInteger BinaryFormat.Binary
\ BinaryFormat.Byte BinaryFormat.ByteOrder BinaryFormat.Choice
\ BinaryFormat.Decimal BinaryFormat.Double BinaryFormat.Group
\ BinaryFormat.Length BinaryFormat.List BinaryFormat.Null
\ BinaryFormat.Record BinaryFormat.SignedInteger16 BinaryFormat.SignedInteger32
\ BinaryFormat.SignedInteger64 BinaryFormat.Single BinaryFormat.Text
\ BinaryFormat.Transform BinaryFormat.UnsignedInteger16 BinaryFormat.UnsignedInteger32
\ BinaryFormat.UnsignedInteger64 Byte.From Byte.Type Cdm.Contents
\ Character.FromNumber Character.ToNumber Combiner.CombineTextByDelimiter
\ Combiner.CombineTextByEachDelimiter Combiner.CombineTextByLengths Combiner.CombineTextByPositions
\ Combiner.CombineTextByRanges Comparer.Equals Comparer.FromCulture
\ Comparer.Ordinal Comparer.OrdinalIgnoreCase Csv.Document
\ Cube.AddAndExpandDimensionColumn Cube.AddMeasureColumn Cube.ApplyParameter
\ Cube.AttributeMemberId Cube.AttributeMemberProperty Cube.CollapseAndRemoveColumns
\ Cube.Dimensions Cube.DisplayFolders Cube.MeasureProperties
\ Cube.MeasureProperty Cube.Measures Cube.Parameters
\ Cube.Properties Cube.PropertyKey Cube.ReplaceDimensions
\ Cube.Transform Currency.From Currency.Type DB2.Database
\ Date.AddDays Date.AddMonths Date.AddQuarters
\ Date.AddWeeks Date.AddYears Date.Day
\ Date.DayOfWeek Date.DayOfWeekName Date.DayOfYear
\ Date.DaysInMonth Date.EndOfDay Date.EndOfMonth
\ Date.EndOfQuarter Date.EndOfWeek Date.EndOfYear
\ Date.From Date.FromText Date.IsInCurrentDay
\ Date.IsInCurrentMonth Date.IsInCurrentQuarter Date.IsInCurrentWeek
\ Date.IsInCurrentYear Date.IsInNextDay Date.IsInNextMonth
\ Date.IsInNextNDays Date.IsInNextNMonths Date.IsInNextNQuarters
\ Date.IsInNextNWeeks Date.IsInNextNYears Date.IsInNextQuarter
\ Date.IsInNextWeek Date.IsInNextYear Date.IsInPreviousDay
\ Date.IsInPreviousMonth Date.IsInPreviousNDays Date.IsInPreviousNMonths
\ Date.IsInPreviousNQuarters Date.IsInPreviousNWeeks Date.IsInPreviousNYears
\ Date.IsInPreviousQuarter Date.IsInPreviousWeek Date.IsInPreviousYear
\ Date.IsInYearToDate Date.IsLeapYear Date.Month
\ Date.MonthName Date.QuarterOfYear Date.StartOfDay
\ Date.StartOfMonth Date.StartOfQuarter Date.StartOfWeek
\ Date.StartOfYear Date.ToRecord Date.ToText
\ Date.WeekOfMonth Date.WeekOfYear Date.Year
\ DateTime.AddZone DateTime.Date DateTime.FixedLocalNow
\ DateTime.From DateTime.FromFileTime DateTime.FromText
\ DateTime.IsInCurrentHour DateTime.IsInCurrentMinute DateTime.IsInCurrentSecond
\ DateTime.IsInNextHour DateTime.IsInNextMinute DateTime.IsInNextNHours
\ DateTime.IsInNextNMinutes DateTime.IsInNextNSeconds DateTime.IsInNextSecond
\ DateTime.IsInPreviousHour DateTime.IsInPreviousMinute DateTime.IsInPreviousNHours
\ DateTime.IsInPreviousNMinutes DateTime.IsInPreviousNSeconds DateTime.IsInPreviousSecond
\ DateTime.LocalNow DateTime.Time DateTime.ToRecord
\ DateTime.ToText DateTimeZone.FixedLocalNow DateTimeZone.FixedUtcNow
\ DateTimeZone.From DateTimeZone.FromFileTime DateTimeZone.FromText
\ DateTimeZone.LocalNow DateTimeZone.RemoveZone DateTimeZone.SwitchZone
\ DateTimeZone.ToLocal DateTimeZone.ToRecord DateTimeZone.ToText
\ DateTimeZone.ToUtc DateTimeZone.UtcNow DateTimeZone.ZoneHours
\ DateTimeZone.ZoneMinutes Decimal.From Decimal.Type DeltaLake.Metadata
\ DeltaLake.Table Diagnostics.ActivityId Diagnostics.CorrelationId
\ Diagnostics.Trace DirectQueryCapabilities.From Double.From Double.Type
\ Duration.Days Duration.From Duration.FromText
\ Duration.Hours Duration.Minutes Duration.Seconds
\ Duration.ToRecord Duration.ToText Duration.TotalDays
\ Duration.TotalHours Duration.TotalMinutes Duration.TotalSeconds
\ Embedded.Value Error.Record Essbase.Cubes
\ Excel.CurrentWorkbook Excel.ShapeTable Excel.Workbook
\ Exchange.Contents Expression.Constant Expression.Evaluate
\ Expression.Identifier File.Contents Folder.Contents
\ Folder.Files Function.From Function.Invoke
\ Function.InvokeAfter Function.InvokeWithErrorContext Function.IsDataSource
\ Function.ScalarVector Geography.FromWellKnownText Geography.ToWellKnownText
\ GeographyPoint.From Geometry.FromWellKnownText Geometry.ToWellKnownText
\ GeometryPoint.From GoogleAnalytics.Accounts Graph.Nodes
\ Guid.From Guid.Type HdInsight.Containers HdInsight.Contents
\ HdInsight.Files Hdfs.Contents Hdfs.Files
\ Html.Table Identity.From Identity.IsMemberOf
\ IdentityProvider.Default Informix.Database Int16.From Int16.Type
\ Int32.From Int32.Type Int64.From Int64.Type Int8.From Int8.Type
\ ItemExpression.From ItemExpression.Item Json.Document
\ Json.FromValue Json.FromValue Lines.FromBinary
\ Lines.FromText Lines.ToBinary Lines.ToText
\ List.Accumulate List.AllTrue List.Alternate
\ List.AnyTrue List.Average List.Buffer
\ List.Combine List.ConformToPageReader List.Contains
\ List.ContainsAll List.ContainsAny List.Count
\ List.Covariance List.DateTimeZones List.DateTimes
\ List.Dates List.Difference List.Distinct
\ List.Durations List.FindText List.First
\ List.FirstN List.Generate List.InsertRange
\ List.Intersect List.IsDistinct List.IsEmpty
\ List.Last List.LastN List.MatchesAll
\ List.MatchesAny List.Max List.MaxN
\ List.Median List.Min List.MinN
\ List.Mode List.Modes List.NonNullCount
\ List.Numbers List.Percentile List.PositionOf
\ List.PositionOfAny List.Positions List.Product
\ List.Random List.Range List.RemoveFirstN
\ List.RemoveItems List.RemoveLastN List.RemoveMatchingItems
\ List.RemoveNulls List.RemoveRange List.Repeat
\ List.ReplaceMatchingItems List.ReplaceRange List.ReplaceValue
\ List.Reverse List.Select List.Single
\ List.SingleOrDefault List.Skip List.Sort
\ List.Split List.StandardDeviation List.Sum
\ List.Times List.Transform List.TransformMany
\ List.Union List.Zip Logical.From
\ Logical.FromText Logical.ToText Module.Versions
\ MySQL.Database Number.Abs Number.Acos
\ Number.Asin Number.Atan Number.Atan2
\ Number.BitwiseAnd Number.BitwiseNot Number.BitwiseOr
\ Number.BitwiseShiftLeft Number.BitwiseShiftRight Number.BitwiseXor
\ Number.Combinations Number.Cos Number.Cosh
\ Number.Exp Number.Factorial Number.From
\ Number.FromText Number.IntegerDivide Number.IsEven
\ Number.IsNaN Number.IsOdd Number.Ln
\ Number.Log Number.Log10 Number.Mod
\ Number.Permutations Number.Power Number.Random
\ Number.RandomBetween Number.Round Number.RoundAwayFromZero
\ Number.RoundDown Number.RoundTowardZero Number.RoundUp
\ Number.Sign Number.Sin Number.Sinh
\ Number.Sqrt Number.Tan Number.Tanh
\ Number.ToText Number.Type OData.Feed Odbc.DataSource
\ Odbc.InferOptions Odbc.Query OleDb.DataSource
\ OleDb.Query Oracle.Database Pdf.Tables
\ Percentage.From Percentage.Type PostgreSQL.Database Progress.DataSourceProgress
\ RData.FromBinary Record.AddField Record.Combine
\ Record.Field Record.FieldCount Record.FieldNames
\ Record.FieldOrDefault Record.FieldValues Record.FromList
\ Record.FromTable Record.HasFields Record.RemoveFields
\ Record.RenameFields Record.ReorderFields Record.SelectFields
\ Record.ToList Record.ToTable Record.TransformFields Record.Type
\ Replacer.ReplaceText Replacer.ReplaceValue RowExpression.Column
\ RowExpression.From RowExpression.Row Salesforce.Data
\ Salesforce.Reports SapBusinessWarehouse.Cubes SapHana.Database
\ SharePoint.Contents SharePoint.Files SharePoint.Tables
\ Single.From Single.Type Soda.Feed Splitter.SplitByNothing
\ Splitter.SplitTextByAnyDelimiter Splitter.SplitTextByCharacterTransition Splitter.SplitTextByDelimiter
\ Splitter.SplitTextByEachDelimiter Splitter.SplitTextByLengths Splitter.SplitTextByPositions
\ Splitter.SplitTextByRanges Splitter.SplitTextByRepeatedLengths Splitter.SplitTextByWhitespace
\ Sql.Database Sql.Databases SqlExpression.SchemaFrom
\ SqlExpression.ToExpression Sybase.Database Table.AddColumn
\ Table.AddFuzzyClusterColumn Table.AddIndexColumn Table.AddJoinColumn
\ Table.AddKey Table.AddRankColumn Table.AggregateTableColumn
\ Table.AlternateRows Table.ApproximateRowCount Table.Buffer
\ Table.Column Table.ColumnCount Table.ColumnNames
\ Table.ColumnsOfType Table.Combine Table.CombineColumns
\ Table.CombineColumnsToRecord Table.ConformToPageReader Table.Contains
\ Table.ContainsAll Table.ContainsAny Table.DemoteHeaders
\ Table.Distinct Table.DuplicateColumn Table.ExpandListColumn
\ Table.ExpandRecordColumn Table.ExpandTableColumn Table.FillDown
\ Table.FillUp Table.FilterWithDataTable Table.FindText
\ Table.First Table.FirstN Table.FirstValue
\ Table.FromColumns Table.FromList Table.FromPartitions
\ Table.FromRecords Table.FromRows Table.FromValue
\ Table.FuzzyGroup Table.FuzzyJoin Table.FuzzyNestedJoin
\ Table.Group Table.HasColumns Table.InsertRows
\ Table.IsDistinct Table.IsEmpty Table.Join
\ Table.Keys Table.Last Table.LastN
\ Table.MatchesAllRows Table.MatchesAnyRows Table.Max
\ Table.MaxN Table.Min Table.MinN
\ Table.NestedJoin Table.Partition Table.PartitionValues
\ Table.PartitionValues Table.Pivot Table.PositionOf
\ Table.PositionOfAny Table.PrefixColumns Table.Profile
\ Table.PromoteHeaders Table.Range Table.RemoveColumns
\ Table.RemoveFirstN Table.RemoveLastN Table.RemoveMatchingRows
\ Table.RemoveRows Table.RemoveRowsWithErrors Table.RenameColumns
\ Table.ReorderColumns Table.Repeat Table.ReplaceErrorValues
\ Table.ReplaceKeys Table.ReplaceMatchingRows Table.ReplaceRelationshipIdentity
\ Table.ReplaceRows Table.ReplaceValue Table.ReverseRows
\ Table.RowCount Table.Schema Table.SelectColumns
\ Table.SelectRows Table.SelectRowsWithErrors Table.SingleRow
\ Table.Skip Table.Sort Table.Split
\ Table.SplitAt Table.SplitColumn Table.StopFolding
\ Table.ToColumns Table.ToList Table.ToRecords
\ Table.ToRows Table.TransformColumnNames Table.TransformColumnTypes
\ Table.TransformColumns Table.TransformRows Table.Transpose
\ Table.Unpivot Table.UnpivotOtherColumns Table.View
\ Table.ViewError Table.ViewFunction Table.WithErrorContext
\ Tables.GetRelationships Teradata.Database Text.AfterDelimiter
\ Text.At Text.BeforeDelimiter Text.BetweenDelimiters
\ Text.Clean Text.Combine Text.Contains
\ Text.End Text.EndsWith Text.From
\ Text.FromBinary Text.InferNumberType Text.Insert
\ Text.Length Text.Lower Text.Middle
\ Text.NewGuid Text.PadEnd Text.PadStart
\ Text.PositionOf Text.PositionOfAny Text.Proper
\ Text.Range Text.Remove Text.RemoveRange
\ Text.Repeat Text.Replace Text.ReplaceRange
\ Text.Reverse Text.Select Text.Split
\ Text.SplitAny Text.Start Text.StartsWith
\ Text.ToBinary Text.ToList Text.Trim
\ Text.TrimEnd Text.TrimStart Text.Upper
\ Time.EndOfHour Time.From Time.FromText
\ Time.Hour Time.Minute Time.Second
\ Time.StartOfHour Time.ToRecord Time.ToText
\ Type.AddTableKey Type.ClosedRecord Type.Facets
\ Type.ForFunction Type.ForRecord Type.FunctionParameters
\ Type.FunctionRequiredParameters Type.FunctionReturn Type.Is
\ Type.IsNullable Type.IsOpenRecord Type.ListItem
\ Type.NonNullable Type.OpenRecord Type.RecordFields
\ Type.ReplaceFacets Type.ReplaceTableKeys Type.TableColumn
\ Type.TableKeys Type.TableRow Type.TableSchema
\ Type.Union Uri.BuildQueryString Uri.Combine
\ Uri.EscapeDataString Uri.Parts Value.Add
\ Value.Alternates Value.As Value.Compare
\ Value.Divide Value.Equals Value.Expression
\ Value.Firewall Value.FromText Value.Is
\ Value.Lineage Value.Metadata Value.Multiply
\ Value.NativeQuery Value.NullableEquals Value.Optimize
\ Value.RemoveMetadata Value.ReplaceMetadata Value.ReplaceType
\ Value.Subtract Value.Traits Value.Type
\ Value.VersionIdentity Value.Versions Value.ViewError
\ Value.ViewFunction Variable.Value Web.BrowserContents
\ Web.Contents Web.Headers Web.Page
\ WebAction.Request Xml.Document Xml.Tables
" Fold on let/in
" syn region pqLetFold start="\<let\>\c" end="\<in\>\c" transparent fold
" Define highlighting
hi def link pqComment Comment
hi def link pqNumber Number
hi def link pqFloat Float
hi def link pqString String
hi def link pqKeyword Keyword
hi def link pqOperator Operator
hi def link pqFunction Delimiter
hi def link pqTable Number
hi def link pqRecord Statement
hi def link pqList Delimiter
hi def link pqParen Delimiter
hi def link pqTodo Todo
hi def link pqConditional Conditional
hi def link pqNull Const
hi def link pqType Type
hi def link pqIdentifier Number
hi def link pqConstant Constant
hi def link pqLetFold Constant
let b:current_syntax = "pq"
let &cpo = s:keepcpo
unlet! s:keepcpo
" vim: ts=8

View File

@@ -2,6 +2,7 @@
" Language: rasi (Rofi Advanced Style Information)
" Maintainer: Pierrick Guillaume <pierguill@gmail.com>
" Last Change: 2024 May 21
" 2025 Apr 16 by Vim Project (set 'cpoptions' for line continuation, #17121)
"
" Syntax support for rasi config file
@@ -12,6 +13,8 @@ if exists('b:current_syntax')
finish
endif
let b:current_syntax = 'rasi'
let s:cpo_save = &cpo
set cpo&vim
" String {{{
syn region rasiString start=+"+ skip=+\\"+ end=+"+ oneline contained
@@ -295,4 +298,7 @@ hi def link rasiInvPropertyId rasiError
hi def link rasiInvPropertyVal rasiError
" }}}
let &cpo = s:cpo_save
unlet s:cpo_save
" vim:ts=8

View File

@@ -8,6 +8,8 @@
" 2025 Jan 06 add $PS0 to bashSpecialVariables (#16394)
" 2025 Jan 18 add bash coproc, remove duplicate syn keywords (#16467)
" 2025 Mar 21 update shell capability detection (#16939)
" 2025 Apr 03 command substitution opening paren at EOL (#17026)
" 2025 Apr 10 improve shell detection (#17084)
" Version: 208
" Former URL: http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH
" For options and settings, please use: :help ft-sh-syntax
@@ -22,11 +24,13 @@ endif
let b:is_sh = 1
" If the shell script itself specifies which shell to use, use it
if getline(1) =~ '\<ksh\>'
let s:shebang = getline(1)
if s:shebang =~ '^#!.\{-2,}\<ksh\>'
let b:is_kornshell = 1
elseif getline(1) =~ '\<bash\>'
elseif s:shebang =~ '^#!.\{-2,}\<bash\>'
let b:is_bash = 1
elseif getline(1) =~ '\<dash\>'
elseif s:shebang =~ '^#!.\{-2,}\<dash\>'
let b:is_dash = 1
" handling /bin/sh with is_kornshell/is_sh {{{1
" b:is_sh will be set when "#! /bin/sh" is found;
@@ -69,6 +73,8 @@ elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix"
endif
endif
unlet s:shebang
" if b:is_dash, set b:is_posix too
if exists("b:is_dash")
let b:is_posix= 1
@@ -389,7 +395,7 @@ syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment
" systems too, however, so the following syntax will flag $(..) as
" an Error under /bin/sh. By consensus of vimdev'ers!
if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix")
syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]" skip='\\\\\|\\.' end=")" contains=@shCommandSubList
syn region shCommandSub matchgroup=shCmdSubRegion start="\$((\@!" skip='\\\\\|\\.' end=")" contains=@shCommandSubList
if exists("b:is_kornshell")
syn region shSubshare matchgroup=shCmdSubRegion start="\${\ze[ \t\n<]" skip='\\\\\|\\.' end="\zs[ \t\n;]}" contains=@shCommandSubList
syn region shValsub matchgroup=shCmdSubRegion start="\${|" skip='\\\\\|\\.' end="}" contains=@shCommandSubList

View File

@@ -1,7 +1,7 @@
" Vim syntax file
" Language: Debian version information
" Maintainer: Debian Vim Maintainers
" Last Change: 2024 Nov 04
" Last Change: 2025 Mar 29
" URL: https://salsa.debian.org/vim-team/vim-debian/blob/main/syntax/shared/debversions.vim
let s:cpo = &cpo
@@ -9,7 +9,7 @@ set cpo-=C
let g:debSharedSupportedVersions = [
\ 'oldstable', 'stable', 'testing', 'unstable', 'experimental', 'sid', 'rc-buggy',
\ 'bullseye', 'bookworm', 'trixie', 'forky',
\ 'bullseye', 'bookworm', 'trixie', 'forky', 'duke',
\
\ 'focal', 'jammy', 'noble', 'oracular', 'plucky',
\ 'devel'

View File

@@ -2,10 +2,11 @@
" Language: Solidity
" Maintainer: Cothi (jiungdev@gmail.com)
" Original Author: tomlion (https://github.com/tomlion/vim-solidity/blob/master/syntax/solidity.vim)
" Last Change: 2022 Sep 27
" Last Change: 2025 Mar 25
"
" Contributors:
" Modified by thesis (https://github.com/thesis/vim-solidity/blob/main/indent/solidity.vim)
" Modified by S0AndS0 (https://github.com/S0AndS0/vim/blob/syntax-solidity-updates/runtime/syntax/solidity.vim)
if exists("b:current_syntax")
finish
@@ -15,7 +16,7 @@ endif
syn keyword solKeyword abstract anonymous as break calldata case catch constant constructor continue default switch revert require
syn keyword solKeyword ecrecover addmod mulmod keccak256
syn keyword solKeyword delete do else emit enum external final for function if immutable import in indexed inline
syn keyword solKeyword interface internal is let match memory modifier new of payable pragma private public pure override virtual
syn keyword solKeyword interface internal is let match memory modifier new of payable pragma private public pure override virtual transient
syn keyword solKeyword relocatable return returns static storage struct throw try type typeof using
syn keyword solKeyword var view while
@@ -158,6 +159,15 @@ hi def link solEvent Type
hi def link solEventName Function
hi def link solEventArgSpecial Label
" Error
syn match solError /\<error\>/ nextgroup=solErrorName,solErrorArgs skipwhite
syn match solErrorName contained /\<[a-zA-Z_$][0-9a-zA-Z_$]*/ nextgroup=solErrorArgs skipwhite
syn region solErrorArgs contained matchgroup=solFuncParens start='(' end=')' contains=solErrorArgCommas,solBuiltinType skipwhite skipempty
syn match solErrorArgCommas contained ','
hi def link solError Type
hi def link solErrorName Function
" Comment
syn keyword solCommentTodo TODO FIXME XXX TBD contained
syn match solNatSpec contained /@title\|@author\|@notice\|@dev\|@param\|@inheritdoc\|@return/

View File

@@ -1,4 +1,4 @@
>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|]| +0#0000000&@22
>/+0#0000e05#ffffff0@1| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |l|e|t| |g|:|j|a|v|a|_|s|y|n|t|a|x|_|p|r|e|v|i|e|w|s| |=| |[|4|5@1|,| |4|8@1|]| +0#0000000&@17
@75
@75
@75

View File

@@ -0,0 +1,20 @@
>#+0#0000e05#ffffff0|!|/|b|i|n|/|d|a|s|h| +0#0000000&@63
|#+0#0000e05&| |I|s@1|u|e| |#|1|7|0|2|6| |(|b|a|s|h| |h|i|g|h|l|i|g|h|t|i|n|g| |r|e|q|u|i|r|e|s| |s|p|a|c|e| |a|f|t|e|r| |$|(|)@1| +0#0000000&@15
|#+0#0000e05&| |h|t@1|p|s|:|/@1|g|i|t|h|u|b|.|c|o|m|/|v|i|m|/|v|i|m|/|i|s@1|u|e|s|/|1|7|0|2|6|#|i|s@1|u|e|c|o|m@1|e|n|t|-|2|7@1|4|1@1|2@1|8|4| +0#0000000&@9
@75
|_|c|o|m|p|_|c|o|m|p|g|e|n|_|s|p|l|i|t| |-+0#e000e06&|l| +0#0000000&|-+0#e000e06&@1| +0#0000000&|"+0#af5f00255&|$+0#e000e06&|(| +0#0000000&@45
| +0#e000e06&@3|t|m|u|x| |l|i|s|t|-|c|o|m@1|a|n|d|s| |-|F| |"+0#af5f00255&|#+0#e000002&|{|c|o|m@1|a|n|d|_|l|i|s|t|_|n|a|m|e|}|"+0#af5f00255&| +0#0000000&@26
| +0#e000e06&@3|t|m|u|x| |l|i|s|t|-|c|o|m@1|a|n|d|s| |-|F| |"+0#af5f00255&|#+0#e000002&|{|c|o|m@1|a|n|d|_|l|i|s|t|_|a|l|i|a|s|}|"+0#af5f00255&| +0#0000000&@25
|)+0#e000e06&|"+0#af5f00255&| +0#0000000&@72
@75
|~+0#4040ff13&| @73
|~| @73
|~| @73
|~| @73
|~| @73
|~| @73
|~| @73
|~| @73
|~| @73
|~| @73
|i+0#0000000&|s|_|d|a|s|h|:| |1|,| |i|s|_|p|o|s|i|x|:| |1|,| |i|s|_|s|h|:| |1|,| @22|1|,|1| @10|A|l@1|

View File

@@ -1,4 +1,7 @@
>v+0#af5f00255#ffffff0|i|m|9|s|c|r|i|p|t| +0#0000000&@64
|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|L|a|m|b|d|a|O|p|e|r|a|t|o|r| |T|o|d|o| +0#0000000&@26
|#+0#0000e05&| |V|I|M|_|T|E|S|T|_|S|E|T|U|P| |h|i| |l|i|n|k| |v|i|m|9|L|a|m|b|d|a|P|a|r|e|n| |T|o|d|o| +0#0000000&@29
@75
@75
|#+0#0000e05&| |V|i|m| |9| |l|a|m|b|d|a| |e|x|p|r|e|s@1|i|o|n|s| +0#0000000&@48
@75
@@ -6,15 +9,12 @@
|v+0#af5f00255&|a|r| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&|=+0#af5f00255&| +0#0000000&|0+0#e000002&| +0#0000000&@62
@75
|#+0#0000e05&| |w|i|t|h|o|u|t| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@53
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@58
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@58
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51
@57|1|,|1| @10|T|o|p|

View File

@@ -1,20 +1,20 @@
|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@51
|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@57
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@54
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51
>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@51
@75
>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@54
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@40
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@29
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@38
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@29
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@29
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@38
@75
|#+0#0000e05&| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@50
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@49
@75
@57|1|9|,|1| @9|1|3|%|
@57|1|9|,|1| @10|9|%|

View File

@@ -1,20 +1,20 @@
| +0&#ffffff0@74
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@43
|#+0#0000e05#ffffff0| |w|i|t|h| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@56
@75
>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|,+0#0000000&| |y+0#00e0e07&|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@46
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@50
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@49
> @74
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@46
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@41
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@46
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|.+0#0000000&@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@32
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|_+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@21
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@41
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@41
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@30
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@32
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@21
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@21
@75
@75
|#+0#0000e05&| |p|o|s|t| |o|p|e|r|a|t|o|r| |c|o|m@1|e|n|t|s| +0#0000000&@50
@75
@57|3|7|,|1| @9|3|1|%|
@57|3|7|,|0|-|1| @7|2|1|%|

View File

@@ -1,20 +1,20 @@
| +0&#ffffff0@74
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63
@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
@2>e+0#00e0e07&|x|p|r| +0#0000000&@68
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@63
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@30
@75
@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
|#+0#0000e05&| |w|i|t|h| |c|o|m|p|o|u|n|d| |r|e|t|u|r|n| |t|y|p|e| +0#0000000&@47
@75
@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
>F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@44
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@43
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@37
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |.@2|y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@37
@75
|#+0#0000e05&| |l|i|n|e| |c|o|n|t|i|n|u|a|t|i|o|n|s| +0#0000000&@54
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|,+0#0000000&| |y+0#00e0e07&|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@40
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57
@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56
@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@42
|#+0#0000e05&| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
@57|5@1|,|3| @9|5|0|%|
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@35
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@35
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@26
@57|5@1|,|1| @9|3|4|%|

View File

@@ -1,20 +1,20 @@
|#+0#0000e05#ffffff0| |F+0#0000001#ffff4012|I|X|M|E| +0#0000000#ffffff0@67
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#e000e06&|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|,+0#0000000&| @57
@6|\+0#e000e06&| +0#0000000&|y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| @56
@6|\+0#e000e06&| +0#0000000&|z+0#00e0e07&|:+0#0000000&| |b+0#00e0003&|o@1|l|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&@50
@6|\| |=+0#af5f00255&|>| +0#0000000&|e+0#00e0e07&|x|p|r| +0#0000000&@59
|F+0#00e0e07#ffffff0|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|.+0#0000000#ffffff0@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@26
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|_+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@15
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |.@2|y+0#00e0e07&|:+0#0000000&| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@15
@75
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|x+0#00e0e07#ffffff0|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|,+0#0000000&| |y+0#00e0e07&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r|)+0#0000001#ffff4012|:+0#0000000#ffffff0| |l+0#00e0003&|i|s|t|<|n|u|m|b|e|r|>| +0#0000000&|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|e+0#00e0e07&|x|p|r| +0#0000000&@24
> @74
@75
|#+0#0000e05&| |f|u|n|c|r|e|f| |c|a|l@1| +0#0000000&@60
|#+0#0000e05&| |p|o|s|t| |o|p|e|r|a|t|o|r| |c|o|m@1|e|n|t|s| +0#0000000&@50
@75
|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|)| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|)| +0#0000000&@57
|e+0#af5f00255&|c|h|o| +0#0000000&|(+0#e000e06&@1|x+0#00e0e07&|:+0#0000000&| |s+0#00e0003&|t|r|i|n|g|)+0#e000e06&|:+0#0000000&| |n+0#00e0003&|u|m|b|e|r| +0#0000000&|=+0#af5f00255&|>| +0#0000000&|4+0#e000002&|2|)+0#e000e06&|(|"+0#e000002&|f|o@1|"|)+0#e000e06&| +0#0000000&@35
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@53
@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@63
@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
|F+0#00e0e07&|o@1| +0#0000000&|=+0#af5f00255&| +0#0000000&|(+0#0000001#ffff4012|)| +0#0000000#ffffff0|=+0#0000001#ffff4012|>| +0#0000000#ffffff0@63
@75
@2|#+0#0000e05&| |c|o|m@1|e|n|t| +0#0000000&@63
@75
|#+0#0000e05&| |:|h|e|l|p| |v|i|m|9|-|l|a|m|b|d|a| +0#0000000&@55
@75
|v+0#af5f00255&|a|r| +0#0000000&|l+0#00e0e07&|i|s|t| +0#0000000&|=+0#af5f00255&| +0#0000000&|[+0#e000e06&|1+0#e000002&|,+0#0000000&| |2+0#e000002&|,+0#0000000&| |3+0#e000002&|]+0#e000e06&| +0#0000000&@54
|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| |v+0#00e0e07&|)+0#e000e06&| +0#0000000&|=+0#af5f00255&|>| +0#0000000&@47
@16|v+0#00e0e07&| +0#0000000&|>+0#af5f00255&| +0#0000000&|0+0#e000002&|)+0#e000e06&| +0#0000000&@52
|e+0#af5f00255&|c|h|o| +0#0000000&|f+0#00e0e07&|i|l|t|e|r|(+0#e000e06&|l+0#00e0e07&|i|s|t|,+0#0000000&| |(+0#e000e06&|k+0#00e0e07&|,+0#0000000&| @53
@57|7|3|,|0|-|1| @7|6|9|%|
@2|e+0#00e0e07&|x|p|r| +0#0000000&@68
@57|7|3|,|0|-|1| @7|4|6|%|

Some files were not shown because too many files have changed in this diff Show More