Commit Graph

46 Commits

Author SHA1 Message Date
Christian Brabandt e7e21018fc patch 9.2.0: Need a new Vim release
Problem:  Need a new Vim release
Solution: Release Vim 9.2 🎉

Signed-off-by: Christian Brabandt <cb@256bit.org>
2026-02-14 15:19:10 +00:00
Girish Palya 7e0df5eee9 patch 9.1.1627: fuzzy matching can be improved
Problem:  fuzzy-matching can be improved
Solution: Implement a better fuzzy matching algorithm
          (Girish Palya)

Replace fuzzy matching algorithm with improved fzy-based implementation

The
[current](https://www.forrestthewoods.com/blog/reverse_engineering_sublime_texts_fuzzy_match/)
fuzzy matching algorithm has several accuracy issues:

* It struggles with CamelCase
* It fails to prioritize matches at the beginning of strings, often
  ranking middle matches higher.

After evaluating alternatives (see my comments
[here](https://github.com/vim/vim/issues/17531#issuecomment-3112046897)
and
[here](https://github.com/vim/vim/issues/17531#issuecomment-3121593900)),
I chose to adopt the [fzy](https://github.com/jhawthorn/fzy) algorithm,
which:

* Resolves the aforementioned issues.
* Performs better.

Implementation details

This version is based on the original fzy
[algorithm](https://github.com/jhawthorn/fzy/blob/master/src/match.c),
with one key enhancement: **multibyte character support**.

* The original implementation supports only ASCII.
* This patch replaces ascii lookup tables with function calls, making it
  compatible with multibyte character sets.
* Core logic (`match_row()` and `match_positions()`) remains faithful to
  the original, but now operates on codepoints rather than single-byte
  characters.

Performance

Tested against a dataset of **90,000 Linux kernel filenames**. Results
(in milliseconds) show a **\~2x performance improvement** over the
current fuzzy matching algorithm.

```
Search String            Current Algo    FZY Algo
-------------------------------------------------
init                          131.759    66.916
main                          83.688     40.861
sig                           98.348     39.699
index                         109.222    30.738
ab                            72.222     44.357
cd                            83.036     54.739
a                             58.94      62.242
b                             43.612     43.442
c                             64.39      67.442
k                             40.585     36.371
z                             34.708     22.781
w                             38.033     30.109
cpa                           82.596     38.116
arz                           84.251     23.964
zzzz                          35.823     22.75
dimag                         110.686    29.646
xa                            43.188     29.199
nha                           73.953     31.001
nedax                         94.775     29.568
dbue                          79.846     25.902
fp                            46.826     31.641
tr                            90.951     55.883
kw                            38.875     23.194
rp                            101.575    55.775
kkkkkkkkkkkkkkkkkkkkkkkkkkkkk 48.519     30.921
```

```vim
vim9script

var haystack = readfile('/Users/gp/linux.files')

var needles = ['init', 'main', 'sig', 'index', 'ab', 'cd', 'a', 'b',
'c', 'k',
    'z', 'w', 'cpa', 'arz', 'zzzz', 'dimag', 'xa', 'nha', 'nedax',
'dbue',
    'fp', 'tr', 'kw', 'rp', 'kkkkkkkkkkkkkkkkkkkkkkkkkkkkk']
for needle in needles
    var start = reltime()
    var tmp = matchfuzzy(haystack, needle)
    echom $'{needle}' (start->reltime()->reltimefloat() * 1000)
endfor
```

Additional changes

* Removed the "camelcase" option from both matchfuzzy() and
  matchfuzzypos(), as it's now obsolete with the improved algorithm.

related: neovim/neovim#34101
fixes #17531
closes: #17900

Signed-off-by: Girish Palya <girishji@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-08-12 22:22:52 +02:00
Hirohito Higashi fbe4a8f5c0 runtime(doc): Fix notation of "Vim script" and "Vim9 script"
closes: #17213

Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2025-04-27 15:28:30 +02:00
Yegappan Lakshmanan 25536f415e patch 9.1.0431: eval.c is too long
Problem:  eval.c is too long
Solution: Move garbage collection code to new gc.c file
          (Yegappan Lakshmanan)

closes: #14824

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-05-22 16:45:04 +02:00
Christian Brabandt b4ddc6c11e patch 9.1.0000: Vim 9.1 release
Problem:  Need a new release
Solution: Release Vim 9.1

Signed-off-by: Christian Brabandt <cb@256bit.org>
2024-01-02 16:51:11 +01:00
Bram Moolenaar eb49041875 release version 9.0
Problem:    About time to release Vim 9.0.
Solution:   Update the version number everywhere.
2022-06-28 13:44:46 +01:00
Yegappan Lakshmanan cbae580283 patch 8.2.3301: memory allocation functions don't have their own place
Problem:    Memory allocation functions don't have their own place.
Solution:   Move memory allocation functions to alloc.c.  (Yegappan
            Lakshmanan, closes #8717)
2021-08-06 21:51:55 +02:00
Yegappan Lakshmanan a2438132a6 patch 8.2.3139: functions for string manipulation are spread out
Problem:    Functions for string manipulation are spread out.
Solution:   Move string related functions to a new source file. (Yegappan
            Lakshmanan, closes #8470)
2021-07-10 21:29:18 +02:00
Yegappan Lakshmanan 01c798c31a patch 8.2.2928: the evalfunc.c file is too big
Problem:    The evalfunc.c file is too big.
Solution:   Move float related functionality to a separate file. (Yegappan
            Lakshmanan, closes #8287)
2021-06-02 17:07:18 +02:00
Bram Moolenaar 054f14bbe5 patch 8.2.1269: language and locale code spread out
Problem:    Language and locale code spread out.
Solution:   Move relevant code to src/locale.c. (Yegappan Lakshmanan,
            closes #6509)
2020-07-22 19:11:19 +02:00
Bram Moolenaar f868ba8903 patch 8.2.1262: src/ex_cmds.c file is too big
Problem:    src/ex_cmds.c file is too big.
Solution:   Move help related code to src/help.c. (Yegappan Lakshmanan,
            closes #6506)
2020-07-21 21:07:20 +02:00
Bram Moolenaar 06cf97e714 patch 8.2.1078: highlight and match functionality together in one file
Problem:    Highlight and match functionality together in one file.
Solution:   Move match functionality to a separate file. (Yegappan Lakshmanan,
            closes #6352)
2020-06-28 13:17:26 +02:00
Bram Moolenaar 367d59e6ba patch 8.2.0847: typval related code is spread out
Problem:    Typval related code is spread out.
Solution:   Move code to new typval.c file. (Yegappan Lakshmanan, closes #6093)
2020-05-30 17:06:14 +02:00
Bram Moolenaar 11abd09521 patch 8.2.0674: some source files are too big
Problem:    Some source files are too big.
Solution:   Move text formatting functions to a new file. (Yegappan
            Lakshmanan, closes #6021)
2020-05-01 14:26:37 +02:00
Bram Moolenaar ed8ce057b7 patch 8.2.0660: the search.c file is a bit big
Problem:    The search.c file is a bit big.
Solution:   Split off the text object code to a separate file. (Yegappan
            Lakshmanan, closes #6007)
2020-04-29 21:04:15 +02:00
Bram Moolenaar f87a0400fd patch 8.2.0516: client-server code is spread out
Problem:    Client-server code is spread out.
Solution:   Move client-server code to a new file. (Yegappan Lakshmanan,
            closes #5885)
2020-04-05 20:21:03 +02:00
Bram Moolenaar 45fffdf10b patch 8.2.0443: clipboard code is spread out
Problem:    Clipboard code is spread out.
Solution:   Move clipboard code to its own file. (Yegappan Lakshmanan,
            closes #5827)
2020-03-24 21:42:01 +01:00
Bram Moolenaar 0a8fed6231 patch 8.2.0256: time and timer related code is spread out
Problem:    Time and timer related code is spread out.
Solution:   Move time and timer related code to a new file. (Yegappan
            Lakshmanan, closes #5604)
2020-02-14 13:22:17 +01:00
Bram Moolenaar 98056533b9 Vim 8.2 release 2019-12-12 14:18:35 +01:00
Bram Moolenaar 14c01f8348 patch 8.1.2127: the indent.c file is a bit big
Problem:    The indent.c file is a bit big.
Solution:   Move C-indent code a a new cindent.c file.  Move other
            indent-related code to indent.c. (Yegappan Lakshmanan,
            closes #5031)
2019-10-09 22:53:08 +02:00
Bram Moolenaar 473952e852 patch 8.1.2094: the fileio.c file is too big
Problem:    The fileio.c file is too big.
Solution:   Move buf_write() to bufwrite.c. (Yegappan Lakshmanan,
            closes #4990)
2019-09-28 16:30:04 +02:00
Bram Moolenaar 30e8e73506 patch 8.1.2082: some files have a weird name to fit in 8.3 characters
Problem:    Some files have a weird name to fit in 8.3 characters.
Solution:   Use a nicer names.
2019-09-27 13:08:36 +02:00
Bram Moolenaar 46a426c9ac patch 8.1.2081: the spell.c file is too big
Problem:    The spell.c file is too big.
Solution:   Move the code for spell suggestions to a separate file. (Yegappan
            Lakshmanan, closes #4988)
2019-09-27 12:41:56 +02:00
Bram Moolenaar 4aea03eb87 patch 8.1.2077: the ops.c file is too big
Problem:    The ops.c file is too big.
Solution:   Move code for dealing with registers to a new file. (Yegappan
            Lakshmanan, closes #4982)
2019-09-25 22:37:17 +02:00
Bram Moolenaar b20b9e14dd patch 8.1.2062: the mouse code is spread out
Problem:    The mouse code is spread out.
Solution:   Move all the mouse code to mouse.c. (Yegappan Lakshmanan,
            closes #4959)
2019-09-21 20:48:04 +02:00
Bram Moolenaar 7528d1f6b5 patch 8.1.2057: the screen.c file is much too big
Problem:    The screen.c file is much too big.
Solution:   Split it in three parts. (Yegappan Lakshmanan, closes #4943)
2019-09-19 23:06:20 +02:00
Bram Moolenaar dac1347b4d patch 8.1.2045: the option.c file is too big
Problem:    The option.c file is too big.
Solution:   Split off the code dealing with strings. (Yegappan Lakshmanan,
            closes #4937)
2019-09-16 21:06:21 +02:00
Bram Moolenaar 261f346f81 patch 8.1.2001: some source files are too big
Problem:    Some source files are too big.
Solution:   Move buffer and window related functions to evalbuffer.c and
            evalwindow.c. (Yegappan Lakshmanan, closes #4898)
2019-09-07 15:45:32 +02:00
Bram Moolenaar b005cd80cf patch 8.1.1979: code for handling file names is spread out
Problem:    Code for handling file names is spread out.
Solution:   Move code to new filepath.c file.  Graduate FEAT_MODIFY_FNAME.
2019-09-04 15:54:55 +02:00
Bram Moolenaar 0522ba0359 patch 8.1.1933: the eval.c file is too big
Problem:    The eval.c file is too big.
Solution:   Move code related to variables to evalvars.c. (Yegappan
            Lakshmanan, closes #4868)
2019-08-27 22:48:30 +02:00
Bram Moolenaar 307c5a5bb7 patch 8.1.1927: code for dealing with script files is spread out
Problem:    Code for dealing with script files is spread out.
Solution:   Move the code to scriptfile.c. (Yegappan Lakshmanan, closes #4861)
2019-08-25 15:41:00 +02:00
Bram Moolenaar 66b51420e0 patch 8.1.1886: command line expansion code is spread out
Problem:    Command line expansion code is spread out.
Solution:   Move the code to cmdexpand.c. (Yegappan Lakshmanan, closes #4831)
2019-08-18 21:44:12 +02:00
Bram Moolenaar 4ad62155a1 patch 8.1.1869: code for the argument list is spread out
Problem:    Code for the argument list is spread out.
Solution:   Put argument list code in arglist.c. (Yegappan Lakshmanan,
            closes #4819)
2019-08-17 14:38:55 +02:00
Bram Moolenaar d7663c22c6 patch 8.1.1823: command line history code is spread out
Problem:    Command line history code is spread out.
Solution:   Put the code in a new file. (Yegappan Lakshmanan, closes #4779)
            Also graduate the +cmdline_hist feature.
2019-08-06 21:59:57 +02:00
Bram Moolenaar b66bab381c patch 8.1.1785: map functionality mixed with character input
Problem:    Map functionality mixed with character input.
Solution:   Move the map functionality to a separate file. (Yegappan
            Lakshmanan, closes #4740)  Graduate the +localmap feature.
2019-08-01 14:28:24 +02:00
Bram Moolenaar 8453807911 patch 8.1.1766: code for writing session file is spread out
Problem:    Code for writing session file is spread out.
Solution:   Put it in one file. (Yegappan Lakshmanan, closes #4728)
2019-07-28 14:15:42 +02:00
Bram Moolenaar 1e78e69680 patch 8.1.1730: wrong place for mark viminfo support
Problem:    Wrong place for mark viminfo support.
Solution:   Move it to viminfo.c. (Yegappan Lakshmanan, closes #4716)
2019-07-22 20:18:27 +02:00
Bram Moolenaar f9cc9f209e patch 8.1.1693: syntax coloring and highlighting is in one big file
Problem:    Syntax coloring and highlighting is in one big file.
Solution:   Move the highlighting to a separate file. (Yegappan Lakshmanan,
            closes #4674)
2019-07-14 21:29:22 +02:00
Bram Moolenaar ecaa70ea29 patch 8.1.1687: the evalfunc.c file is too big
Problem:    The evalfunc.c file is too big.
Solution:   Move testing support to a separate file.
2019-07-14 14:55:39 +02:00
Bram Moolenaar fa55cfc69d patch 8.1.1684: profiling functionality is spread out
Problem:    Profiling functionality is spread out.
Solution:   Put profiling functionality in profiling.c. (Yegappan Lakshmanan,
            closes #4666)
2019-07-13 22:59:32 +02:00
Bram Moolenaar ec28d1516e patch 8.1.1318: code for text changes is in a "misc" file
Problem:    Code for text changes is in a "misc" file.
Solution:   Move the code to change.c.
2019-05-11 18:36:34 +02:00
Bram Moolenaar ac9fb18020 patch 8.1.1210: support for user commands is spread out
Problem:    Support for user commands is spread out. No good reason to make
            user commands optional.
Solution:   Move user command support to usercmd.c.  Always enable the
            user_commands feature.
2019-04-27 13:04:13 +02:00
Bram Moolenaar c8cc0ad477 patch 8.1.1208: links to repository use wrong file name
Problem:    Links to repository use wrong file name.
Solution:   Swap the file names. (Nahuel Ourthe, closes #4304)
2019-04-26 21:31:38 +02:00
Bram Moolenaar 31fc39e47b patch 8.1.1200: old style comments in debugger source
Problem:    Old style comments in debugger source.
Solution:   Use new style comments. (Yegappan Lakshmanan, closes #4286)
2019-04-23 18:39:49 +02:00
Bram Moolenaar 95946f1209 patch 8.1.1098: quickfix code duplication
Problem:    Quickfix code duplication.
Solution:   Refactor the qf_init_ext() function. (Yegappan Lakshmanan,
            closes #4193)
2019-03-31 15:31:59 +02:00
Bram Moolenaar 8ac8a77f24 patch 8.1.1069: source README file doesn't look nice on github
Problem:    Source README file doesn't look nice on github.
Solution:   Turn it into markdown, still readable as plain text.
            (WenxuanHuang, closes #4141)
2019-03-29 13:10:08 +01:00