Mặc dù không có cú pháp cụ thể cho các bí danh, bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng post_jump
:
# c.snippets
global !p
def expand(snip):
if snip.tabstop != 1:
return
vim.eval('feedkeys("\<C-R>=UltiSnips#ExpandSnippet()\<CR>")')
endglobal
snippet incstdlib "#include <stdlib.h>" !b
#include <stdlib.h> /* exit(), malloc(), free() */
$0
endsnippet
post_jump "expand(snip)"
snippet incexit "#include <stdlib.h>" !b
incstdlib$1
endsnippet
Trong tệp đoạn trích này, trình kích hoạt incexit
là "bí danh" của trình kích hoạt incstdlib
. Trong thực tế incexit
mở rộng đến incstdlib
và expand(snip)
được gọi khi UltiSnips di chuyển đến tabstop $1
. Hàm expand(snip)
thực thi hàm VimScript UltiSnips#ExpandSnippet
sẽ mở rộng incstdlib
thành dạng mở rộng cuối cùng của nó #include <stdlib.h>
.
Một tùy chọn khác là sử dụng hỗ trợ biểu thức chính quy UltiSnips thay thế:
snippet "inc(true|false|bool)" "#include <stdbool.h>" r
#include <stdbool.h> /* true, false */
endsnippet
Ở đây bạn sẽ có ba kích hoạt inctrue
, incfalse
và incbool
đó là hiệu quả như nhau. Hạn chế duy nhất là các plugin tự động hoàn thành như YouCompleteMe sẽ không tự động hoàn thành các plugin đó.