동일한 스 니펫에 여러 트리거를 사용하려면 어떻게해야합니까?


11

다른 트리거를주고 싶은 스 니펫을 만들었으므로 대신 trigger다음과 myothertrigger같이 트리거하고 싶습니다 .

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

스 니펫을 복사하는 대신이 작업을 수행하는 쉬운 방법이 있습니까?

편집 : 분명히하기 위해 UltiSnips 사용 하고 있지만 더 나은 플러그인이 있으면 살펴볼 수 있습니다.


2
대답은 사용중인 스 니펫 엔진에 따라 다릅니다. mu-template을 사용하면 한 스 니펫을 다른 스 니펫에 포함 시키거나 다른 이름으로 스 니펫 파일을 복사하거나 기호 링크를 작성할 수 있습니다. 다른 엔진이 허용 할 수 있는지 잘 모르겠습니다. 언젠가 "호출자"스 니펫에서 스 니펫 포함을 지원하게 될 수 있습니다. 파이썬 또는 viml 함수에서 스 니펫의 핵심을 정의하고 스 니펫이 동일한 함수를 호출하도록 할 수 있습니까?
Luc Hermitte

3
질문에 태그가 붙어 plugin-ultisnips있으므로 OP가 ultisnips를 사용한다고 가정합니다.
EvergreenTree

내 실수 ^^ ' 예를 들어 C ++에서는 기본 클래스, 값 클래스, 예외 클래스에 대한 스 니펫이 있습니다 ... 모두 동일한 클래스 스 니펫 + 함수 스 니펫 + 세트에 의존합니다 ...하지만 내가 말했듯이 구문은 완전히 다르고 자리 표시 자 기능은 익숙한 것보다 인체 공학적이지 않습니다. 원하는 것을하는 것은 쉽지만 마이그레이션 할 필요는 없습니다.)
Luc Hermitte

2
Shougo의 neosnippet플러그인으로 전환하면 구문 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. 실제로 UltiSnips가 tabstop으로 이동 하면 이로 incexit확장되어 호출됩니다 . 는 단지 vim 스크립트 함수를 실행 확장됩니다 그것의 최종 확장 된 형태로를 .incstdlibexpand(snip)$1expand(snip)UltiSnips#ExpandSnippetincstdlib#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.