Làm cách nào tôi có thể sử dụng một số kích hoạt cho cùng một đoạn?


11

Tôi đã tạo một đoạn mã mà tôi muốn đưa ra các kích hoạt khác nhau, vì vậy thay vì nói triggertôi cũng muốn kích hoạt nó bằng myothertrigger:

snippet trigger "just an example" 
my text ...
endsnippet

Có cách nào dễ dàng để làm điều này thay vì sao chép đoạn trích không?

Chỉnh sửa: Để rõ ràng, tôi đang sử dụng UltiSnips , nhưng nếu có một plugin tốt hơn tôi có thể xem xét điều đó.


2
Câu trả lời sẽ phụ thuộc vào công cụ đoạn mã bạn đang sử dụng. Với mu-template bạn có thể bao gồm một đoạn trích từ một đoạn khác, sao chép tệp đoạn mã dưới một tên khác hoặc chỉ cần tạo một liên kết tượng trưng. Tôi không chắc các động cơ khác có thể cho phép nó. Có thể nếu một ngày nào đó họ đến để hỗ trợ bao gồm đoạn trích từ đoạn "người gọi". Có lẽ bạn có thể xác định lõi của đoạn mã của mình trong hàm python hoặc viml và các đoạn mã của bạn có gọi hàm tương tự không?
Luc Hermitte

3
Câu hỏi được gắn thẻ là plugin-ultisnips, vì vậy tôi cho rằng OP đang sử dụng ultisnips.
EvergreenTree

Lỗi của tôi ^^ '(Chế biến bản sao không tốt hơn, rất khác biệt, cũ hơn và phù hợp hơn với nhu cầu của tôi (Tôi đang duy trì nó): Tôi đã sử dụng các đoạn mã gốc hoạt động như các chức năng mà tôi có thể gọi với các tùy chọn khác nhau để sản xuất những thứ khác nhau nhưng rất gần gũi.Eg trong C ++ Tôi có các đoạn mã cho lớp cơ sở, lớp giá trị, lớp ngoại lệ ... tất cả đều phụ thuộc vào cùng một tập hợp đoạn mã + đoạn mã chức năng + ... Nhưng như tôi đã nói, cú pháp hoàn toàn khác nhau và tính năng giữ chỗ ít tiện dụng hơn so với cách bạn sử dụng. Làm những gì bạn đang tìm kiếm sẽ dễ dàng, nhưng không cần thiết phải di chuyển)
Luc Hermitte

2
Nếu bạn chuyển sang neosnippetplugin Shougo , cú pháp của nó có một aliastừ khóa cho mục đích này.
VanLaser

Câu trả lời:


8

Hiện tại không có cách nào để làm điều này trong UltiSnips. Có một yêu cầu tính năng mở trên Github cho nó mặc dù. Cá nhân, tôi cũng muốn một chức năng bí danh cho các kích hoạt như được chỉ ra ở đây .

Hãy hy vọng SirVer (người duy trì UltiSnips) cũng sẽ nghĩ như vậy và đưa nó vào tương lai :)


5

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 incexitlà "bí danh" của trình kích hoạt incstdlib. Trong thực tế incexitmở rộng đến incstdlibexpand(snip)được gọi khi UltiSnips di chuyển đến tabstop $1. Hàm expand(snip)thực thi hàm VimScript UltiSnips#ExpandSnippetsẽ mở rộng incstdlibthà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, incfalseincboolđó 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 đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.