我想在一个 snippet 嵌套展开另一个 snippet.
我试过设置 yas-triggers-in-field
为 t, 起作用但行为并非我想要, 因为我得按好几次 tab, 而不是直接展开.
我试图用 embedding elisp code, 但遇到这个问题: 如何给 snippet name, 获取它的内容. 我试过 yas--lookup-snippet-1
, 比如 (yas--lookup-snippet-1 "fold" 'org-mode)
, fold 是另一个 yasnippet 的 name, 问题在于它查找的结果不唯一. 或许是因为我使用了[[emacs 有没有这样的包: 保存常用 snippet 然后 consult 之类的搜索立即可以粘贴 - #5,来自 twlz0ne][emacs 有没有这样的包: 保存常用 snippet 然后 consult 之类的搜索立即可以粘贴 - Emacs-general - Emacs China]]这个链接中的函数.
所以有没有办法一次 tab 展开 snippet 呢? 我定义的 snippet 基本上不会用 placeholder.
举个例子: 这是某一个 snippet:
#include <stdio.h>
#include <cuda_runtime.h>
int main(int argc, char *argv[])
{
int iDev = 0;
cudaDeviceProp iProp;
CHECK(cudaGetDeviceProperties(&iProp, iDev));
printf("Device %d: %s\n", iDev, iProp.name);
printf(" Number of multiprocessors: %d\n",
iProp.multiProcessorCount);
printf(" Warp size: %d\n",
iProp.warpSize);
printf(" Maximum number of threads per block: %d\n",
iProp.maxThreadsPerBlock);
printf(" Maximum number of threads per multiprocessor: %d\n",
iProp.maxThreadsPerMultiProcessor);
printf(" Maximum number of blocks per multiprocessor: %d\n",
iProp.maxBlocksPerMultiProcessor);
printf(" Total amount of constant memory: %4.2f KB\n",
iProp.totalConstMem / 1024.0);
printf(" Total amount of shared memory per block: %4.2f KB\n",
iProp.sharedMemPerBlock / 1024.0);
return EXIT_SUCCESS;
}
其中用到了 CHECK 宏定义, 不止这个 snippet 用到了 CHECK 宏, 还有若干 snippet 都用到了 CHECK 宏定义. 我现在是把 CHECK 宏定义直接贴在这里. 我希望我能单独把 CHECK 宏保存到一个 snippet, 然后其它 snippet 中引用这个 snippet. 这样 CHECK 的定义如果进行调整, 不需要改其它的 snippet. 就是想复用.