-
-
Notifications
You must be signed in to change notification settings - Fork 677
Expand file tree
/
Copy pathChangeLog
More file actions
292 lines (276 loc) · 15.5 KB
/
ChangeLog
File metadata and controls
292 lines (276 loc) · 15.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
version 4.0 (10-May-2026):
New features:
- Neovim is now officially supported and tested in CI.
- Choice tabstops: `${1|one,two,three|}`. Select items by index
(1, 2, 3…). Commas can be escaped with `\,`, space works as a
selection terminator. See |UltiSnips-tabstops|.
- |CanExpandSnippet()|, |CanJumpForwards()|, |CanJumpBackwards()| —
query snippet state from mappings or statusline.
See |UltiSnips-functions|.
- |g:UltiSnipsJumpOrExpandTrigger| — expand if possible, otherwise jump
forward. See |UltiSnips-trigger-key-mappings|.
- Trigger key is passed through as a normal keypress when no expansion or
jump occurs, instead of being swallowed.
- Context conditions gained `match` (the regex match object for
regex-triggered snippets) and `snip.before` (text on the line up to
the trigger). See |UltiSnips-custom-context-snippets|.
- |g:UltiSnipsAutoTrigger| disables/enables autotrigger at runtime.
|UltiSnips#ToggleAutoTrigger()| toggles it. Autotrigger now only fires
on character insertion, not cursor movement.
See |UltiSnips-autotrigger|.
- |g:UltiSnipsSnippetStorageDirectoryForUltiSnipsEdit| controls where
`:UltiSnipsEdit` stores new snippet files.
- |g:UltiSnipsInsertTriggerOnFailure| controls whether the trigger key
is re-inserted as buffer text when expansion fails. Default 1
preserves today's behavior; set to 0 to suppress garbage insertion
for non-round-tripping special-key triggers like `<c-j>` or
`<c-space>`. See |UltiSnips-trigger-key-mappings|.
- Remote debug server for Python snippets via
|g:UltiSnipsDebugServerEnable| — connect with telnet/netcat to step
through snippet code. See |UltiSnips-advanced.txt|.
- Spell checking enabled in snippet file comments.
Breaking changes:
- Python 2 support removed. Support for Python 3.5–3.9 was also dropped.
Minimum Python version is now 3.11.
- Minimum Vim version is now 9.1 (was 7.4). Older versions down to 8.2
may still work but are not tested.
- |g:UltiSnipsSnippetsDir| removed. Snippet discovery was rewritten —
see |UltiSnips-how-snippets-are-loaded|. `:UltiSnipsEdit` now opens
snippet files relative to your `.vim` directory using
`[gb]:UltiSnipsSnippetDirectories`. Without bang it only looks in the
private snippet directory; with bang it additionally shows all snippet
files currently loaded from across the runtimepath. UltiSnips now also
uses `$MYVIMRC` as a heuristic to locate `~/.vim`, fixing setups with
non-standard paths.
- snipMate snippets now expand with the `w` option instead of `i`,
restoring correct behavior for triggers like `.`.
See |UltiSnips-snipMate|.
- snipMate parser now requires directives to be fully spelled out (e.g.
`extends`, not shorthand). Snippets using abbreviated directives will
fail to load.
Performance:
- Runtimepath traversal now happens once (or when a snippet source needs
refresh), not on every keypress. Combined with an internal caching
layer this fixes long-standing insert mode lag, especially with
autotrigger. (#1552)
- Python code in snippets is precompiled, which catches syntax errors early. (#1470)
- Edit detection rewritten to use Vim's `listener_add()` and Neovim's
`on_bytes` as real change signals, replacing the `guess_edit()`
heuristic chain. On the test suite, expensive `diff()` fallback is
hit ~96% less often on both Vim and Neovim. (#1613)
Bug fixes:
- Wildcards in `&runtimepath` entries (e.g. `/bundle/*`) are now
expanded, fixing compatibility with many modern plugin managers.
(#1416)
- Wrong cursor position in nested snippets. (#1347)
- Backslash escaping in placeholder defaults. (#1346)
- Reading snippet files with BOM. (#1366)
- Floating windows no longer incorrectly trigger buffer-leave logic.
(#1417)
- Null bytes in eval'd text are sanitized. (#1538)
- Creating an undo break no longer changes `undolevels`. (#1534)
- User errors reported without Python backtraces. (#1384)
- Out-of-bounds error in Neovim with |CanExpandSnippet()|. (#1562)
- Edit detection during a snippet no longer relies on cursor-movement
heuristics, so visual/select-mode replacements, macros, and
autocomplete/LSP insertions are handled correctly rather than
silently falling through to the expensive full-buffer diff. (#1613)
- Pathological buffer changes (large undo, multi-line paste into a
tabstop, `${VISUAL}` capture of a huge selection) no longer hang
Vim for tens of seconds in `diff()`; the snippet is dropped
instead. (#1513, #1074, #155, #1617)
- Nested snippet expansion triggered while a completion popup is
visible (built-in pum, coc.nvim, deoplete, nvim-compe) no longer
corrupts the placeholder structure. Queued buffer edits are
drained before expansion runs. (#1380, #1327, #1620)
- Back-to-back `!p` blocks at the same buffer position no longer
produce empty output due to non-deterministic text-object
ordering. (#1403)
- Cursor placement is correct after `!p` blocks whose output takes
more than one iteration to converge. (#1402)
- Quickfix or location-list opening mid-snippet (e.g. vimtex
continuous compilation with `:copen`) no longer tears down the
active snippet or orphans buffer-local mappings. (#1527)
- Failed expansion no longer inserts `<t_…>` garbage for special-key
triggers (`<c-space>`, `<a-;>`, `<F2>`, …) or a literal LF for
`<c-j>`. Set |g:UltiSnipsInsertTriggerOnFailure| to 0 to opt out.
(#1232, #1460, #1482, #1523)
- Buffer switches (`:bd!` and similar commands that fire
`CursorMoved` on the new buffer before `BufEnter` teardown runs)
no longer corrupt the destination buffer when leaving a buffer
with an active snippet. (#1628)
Infrastructure:
- CI moved from Travis CI to GitHub Actions.
- Build tooling migrated from pipenv to uv.
version 3.2 (05-Nov-2019):
- This is the first release done again by @SirVer. And this is also posted
on vim.org again. `¯\_(ツ)_/¯`
- This is the last version to support Python 2.
- Syntax highlighting improvements: a new one for unite & tweaks to others.
- Support for transformations on multiple lines.
- Python interpolation got more powerful, for example tabstops can now be
modified in python interpolation, you can access the last changed
placeholder text and more.
- Support for deoplete.
- Snippet files are no longer watched for changes. This increases
performance, but also means that if you change your snippet files outside
of Vim, UltiSnips will not know about it. You need to run `:call
UltiSnips#RefreshSnippets()` or restart Vim.
- Text objects for selecting snippets in visual mode: iS, aS
version 3.1 (07-Dec-2015):
- This is the last release done by @SirVer. The new maintainer of UltiSnips
is @seletskiy. The repository remains https://github.com/SirVer/ultisnips,
so this should not affect any users. This is also the last release to be
published on vim.org. Please follow the master branch on GitHub for the
latest stable version.
- New option `e`: Context aware snippets. This gives very precise and
powerful control over which snippet should be expanded depending on
surrounding code. *UltiSnips-context-snippets*
- New option `m`: Trim whitespace in all snippet lines.
- Very powerful, freely configurable pre/post-expand and post-jump actions
allow for transforming the buffer outside the snippet. *UltiSnips-snippet-actions*
- Automatic triggering of snippets without the need to press the expand
trigger. *UltiSnips-autotrigger*
- Better error reporting for snippet errors including python stacktraces
and listing of executed code.
- Undo is more granular. Each jump and expand is now a separate undo step.
- UltiSnips now emits autocommands on certain events. *UltiSnips-custom-autocommands*
- clearsnippets now clears all snippets below the current priority. This
fits better with the priority system introduced in 3.0.
- snipMate snippets support can be disabled. *UltiSnipsEnableSnipMate*
- UltiSnipsEditSplit got a new value 'context'. *UltiSnipsEditSplit*
- Improved syntax highlighting for snippets filetype.
- Mappings and autocommands are now only established when needed, i.e. when
a snippet is active. This boosts performance outside of snippets.
- New integration with Unite, TagBar, and deoplete.
- New Ctags configuration file for snippet definitions.
- Bug fixes, performance improvements, code cleanups and refactorings.
- No longer supports Vim < 7.4.
version 3.0 (02-Mar-2014):
- Organisational changes: The project is now hosted on github. Snippets are
now shipped separately - please track honza/vim-snippets.
- UltiSnips is now a drop in replacement for snipMate - it parses snipMate
snippets and expands them emulating snipMates smaller feature set.
- Filetype tab completion for UltiSnipsEdit.
- UltiSnipsEdit now only edits private snippet files. Use UltiSnipsEdit! if
you want to edit shipped files.
- New option 's' which strips trailing whitespace before jumping to next
tabstop
- New option 'a' which converts non-ascii characters into ascii characters
in transformations.
- New keyword in snippet files: priority defines which snippets should
overwrite others. This deprecates the '!' option.
*UltiSnips-adding-snippets*
- Remove common whitespace of visual line selections before inserting in an
indented tabstop.
- Support for overwriting the snippet directory name on a per buffer basis
to support per project snippets. *UltiSnips-snippet-search-path*
- The keymaps for jumping in snippets are now only mapped when a snippet is
active, allowing them to be used for something else otherwise.
- Expanding and jumping no longer overwrites the unnamed register.
- Integration with Valloric/YouCompleteMe and Shougo/neocomplete.vim.
- Other plugins can add sources for snippets to create snippets on the fly.
*UltiSnips-extending*
- Vim functions now indicates if it did any work.
*UltiSnips-trigger-functions*
- For python extensions: UltiSnips adds itself to the sys.path and can be
easily imported if it is available. *UltiSnips-python-module-path*
- A new function giving programmatic access to the snippets currently
available for expansion for other plugins integrating with UltiSnips.
*UltiSnips_SnippetsInCurrentScope*
- New or improved snippets (now in a different repo): all, bib, c, cpp, cs,
d, django, eruby, go, haskell, html, html, htmljinja, java, javascript,
js, ledger, ocaml, perl, php, puppet, python, ruby, scss, sh, tex, vim,
xml, zsh.
version 2.2 (01-Sep-2012):
- Support to silence Python-not-found warnings. *UltiSnips-python-warning*
- Matchit support for snippet files.
- Improvements to syntax file.
- Various smaller bug fixes.
- New command to manually add a filetype to the list for the current
buffer. *:UltiSnipsAddFiletypes*
- New or improved snippets: all, snippets, haskell, bindzone, python, golang,
json, html, coffee, coffee_jasmine, javascript_jasmine, ruby, php,
markdown.
version 2.1 (14-Feb-2012):
- Python interpolation access to text from visual selection via snip.v.
- Support for transformations of ${VISUAL} texts.
- New or improved snippets: python, tex, texmath, ruby, rails, html, django
version 2.0 (05-Feb-2012):
- Backwards incompatible change: Support for normal mode editing. Snippets
are no longer exited when leaving insert mode but only by leaving the
text span of the snippets. This allows usage of normal mode commands and
autoformatting. It also increases compatibility with other plugins.
- Backwards incompatible change: Changed glob patterns for snippets to
behave more like Vim *UltiSnips-adding-snippets*
- Backwards incompatible change: Zero Tabstop is no longer removed in
nested snippets
- Support for ${VISUAL:default text} placeholder. *UltiSnips-visual-placeholder*
- Improved handling of utf-8 characters in files and snippet definitions.
- Full support for :py3. UltiSnips now works with python >= 2.6 or >= 3.2.
- New or improved snippets: python, all
version 1.6 (30-Dec-2011):
- Significant speed improvements and a few bugs fixed.
- Better handling of non ASCII chars in snippets by assuming UTF-8 encoding
when no other information is available.
- Contributions for UltiSnips are now also accepted on GitHub: https://github.com/SirVer/ultisnips/
- New or improved snippets: ruby, rails, xhtml
version 1.5 (24-Sep-2011):
- Some critical bug fixes for new vim versions.
- New or improved snippets: tex, texmath, python, jinja2, go, puppet, xhtml
- Configuration of search path for snippets *UltiSnips-snippet-search-path*
- New parser implementation: A little faster, more flexible and less bugged.
version 1.4 (17-Jul-2011):
- New or improved snippets: php, html, djangohtml, mako, lua
- Snippets are now listed alphabetically by their trigger, no longer in
order of appearance
- Snippet files are now automatically reloaded when they change.
- Support for other directory names for snippets beside
"UltiSnips" *UltiSnips-snippet-search-path*
- Errors are now shown in a scratch window.
- Now fully supports Windows with python >= 2.6. UltiSnips should now work
on all systems that Vim runs on.
- a syntax file was added for snippets files with nice highlighting.
- snippets definition files now have the filetype 'snippets'. It used to be
'snippet'.
version 1.3 (14-Feb-2011):
- Erlang snippets (g0rdin)
- Other VimScripts can now define and immediately expand anonymous snippets
( *UltiSnips_Anon* ) (Ryan Wooden)
- Other VimScripts can now define new snippets via a function
( *UltiSnips_AddSnippet* ) (Ryan Wooden)
- New Snippets for eruby and rails (Ches Martin).
- A new Option 't' has been added to snippets that avoid expanding tabstops.
Be also more consistent with how indenting is handled. (Ryan Wooden)
- Added a ftplugin script for .snippets files. Syntax highlighting still
missing. (Rupa Deadwyler)
- Added UltiSnipsReset and UltiSnipsEdit (Idea by JCEB)
version 1.2 (24-Aug-2010):
- many bugs were fixed
- smode mappings for printable characters are now removed before expanding a
snippet. This is configurable. *UltiSnips-warning-smappings*
- all shipped snippets are now fully compatible with UltiSnips
- added support for global snippets which enhance python interpolation even
more *UltiSnips-globals*
- added support for multi word and regular expression triggers. Very
powerful in combination with python interpolation.
- Python interpolation became much more powerful *UltiSnips-python*
- added support for clearsnippets command *UltiSnips-clearing-snippets*
- added support for option w which is a little more strict than i.
- added support for listing of valid triggers. Defaults to <c-tab>.
- added support for option i (inword expansion)
- extends keyword is now supported on the first line of snippet files. This makes it easy to
define special cases, for example cpp extends c: a cpp trigger is useless
in c, but a c trigger is valuable for cpp.
- UltiSnips now adheres to expandtab and tabstop options of vim
version 1.1 (21-Jul-2009):
- Made triggers configurable. You can also use the same trigger for
expanding and tabbing. The TextMate configuration <tab> and <s-tab> is now
possible.
- Conditional Inserts can now be nested
- Added support for b option. This only considers a snippet at the beginning
of a line ( *UltiSnips-adding-snippets* )
- Added support for ! option. This overwrites previously defined snippets
with the same tab trigger ( *UltiSnips-adding-snippets* )
- Support for dotted filetype syntax. Now snippets for more than one filetype
can be active ( *UltiSnips-adding-snippets* )