ฉันจะใช้ทริกเกอร์หลายตัวสำหรับข้อมูลโค้ดเดียวกันได้อย่างไร


11

ฉันสร้างตัวอย่างที่ฉันต้องการให้ทริกเกอร์ที่แตกต่างกันดังนั้นแทนที่จะพูดว่าtriggerฉันต้องการทริกเกอร์ด้วยmyothertrigger:

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

มีวิธีง่ายๆในการทำเช่นนี้แทนที่จะคัดลอกตัวอย่าง?

แก้ไข:เพื่อความชัดเจนฉันกำลังใช้UltiSnipsแต่ถ้ามีปลั๊กอินที่ดีกว่าฉันอาจมองว่า


2
คำตอบนั้นขึ้นอยู่กับเอ็นจิ้นตัวอย่างข้อมูลที่คุณใช้ ด้วย mu-template คุณสามารถมีตัวอย่างหนึ่งจากอีกอันหนึ่งให้คัดลอกไฟล์ snippet ภายใต้ชื่ออื่นหรือเพียงแค่สร้างลิงค์สัญลักษณ์ ฉันไม่แน่ใจว่าเครื่องมืออื่น ๆ สามารถอนุญาตได้ อาจเป็นได้ว่าบางวันพวกเขามาเพื่อสนับสนุนการรวมตัวอย่างจากตัวอย่าง "ผู้โทร" บางทีคุณสามารถกำหนดหลักของตัวอย่างของคุณในฟังก์ชันหลามหรือ viml และให้ตัวอย่างของคุณเรียกใช้ฟังก์ชันเดียวกันได้หรือไม่
Luc Hermitte

3
คำถามถูกแท็กเป็นplugin-ultisnipsดังนั้นฉันจะถือว่า OP ใช้ ultisnips
EvergreenTree

ความผิดพลาดของฉัน ^^ '(µ ข้อความไม่ดีกว่าแตกต่างเก่ากว่าและเหมาะสมกับความต้องการของฉันมากขึ้น (ฉันกำลังรักษามันไว้): ฉันได้รูทสนิปเพตที่ทำหน้าที่เป็นฟังก์ชันที่ฉันสามารถโทรหาได้ สิ่งที่แตกต่าง แต่ใกล้เคียงกันมากใน C ++ ฉันมีตัวอย่างข้อมูลสำหรับคลาสคลาส, ค่า - คลาส, คลาสข้อยกเว้น ... ซึ่งทั้งหมดขึ้นอยู่กับชุดของคลาส - ตัวอย่าง + ฟังก์ชั่น - ตัวอย่าง + ... แต่อย่างที่ฉันบอก ไวยากรณ์มีความแตกต่างอย่างสิ้นเชิงและคุณลักษณะตัวยึดตำแหน่งมีความยศาสตร์น้อยกว่าที่คุณคุ้นเคยการทำสิ่งที่คุณต้องการจะเป็นเรื่องง่าย แต่ไม่จำเป็นว่าจะต้องเป็นการโยกย้าย)
Luc Hermitte

2
หากคุณเปลี่ยนไปใช้neosnippetปลั๊กอินของ Shougo ไวยากรณ์ของมันจะมีaliasคำสำคัญเพื่อจุดประสงค์นี้
VanLaser

คำตอบ:


8

ขณะนี้ไม่มีวิธีการทำเช่นนี้ใน UltiSnips มีการร้องขอคุณสมบัติแบบเปิดบน Githubสำหรับมัน โดยส่วนตัวฉันต้องการฟังก์ชั่นนามแฝงสำหรับทริกเกอร์ตามที่ระบุไว้ที่นี่เช่นกัน

หวังว่า SirVer (ผู้ดูแล UltiSnips) จะคิดเช่นกันและรวมไว้ในอนาคต :)


5

แม้ว่าจะไม่มีไวยากรณ์ที่เฉพาะเจาะจงสำหรับนามแฝงคุณสามารถบรรลุผลเดียวกันโดยใช้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

ในตัวอย่างนี้ไฟล์ทริกเกอร์incexitเป็น "สมญานาม" incstdlibของทริกเกอร์ ในความเป็นจริงincexitจะขยายincstdlibและexpand(snip)เรียกว่าเมื่อ UltiSnips ย้ายไปที่แท็$1expand(snip)เพียงรันฟังก์ชั่น VimScript UltiSnips#ExpandSnippetซึ่งจะขยายในรูปแบบตัวมันเป็นครั้งสุดท้ายincstdlib#include <stdlib.h>

ตัวเลือกอื่นคือใช้ UltiSnips สนับสนุนการแสดงออกปกติแทน:

snippet "inc(true|false|bool)" "#include <stdbool.h>" r
#include <stdbool.h> /* true, false */
endsnippet

ที่นี่คุณจะมีสามทริกเกอร์inctrue, incfalseและincboolที่มีประสิทธิภาพเดียวกัน ข้อเสียเปรียบเพียงอย่างเดียวคือปลั๊กอินเติมข้อความอัตโนมัติเช่น YouCompleteMe จะไม่เติมข้อความอัตโนมัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.