如何创建我的自定义 vim 片段?

How to create my custom vim snippets?

我想在编写 C++ 时创建一些片段。
例如:
创建一个文件,cpp.snippets。

priority -1
snippet exam
This is an example!
endsnippet

放在~/.vim/my-snippets/snippets/.
然后,在 ~/.vimrc 中添加以下语句:

set runtimepath+=~/.vim/my-snippets/
let g:UltiSnipsSnippetsDir='~/.vim/my-snippets/'
let g:UltiSnipsSnippetDirectories=["snippets"]

但是它不起作用,我该如何解决?

UltiSnips 插件包含详细的文档。您是否阅读了以下帮助页面?

:help UltiSnips-snippet-search-path

更新:

当我阅读帮助部分时,其中一件显而易见的事情是,在 UltiSnips 中,名称 "snippets" 不能在 g:UltiSnipsSnippetDirectories 中使用,因为它是为 snipMate 兼容的片段保留的。这不会发生在下面评论中共享的 link 中,而是使用名称 "my-snippets"。

我不使用 UltiSnips,但根据文档我建议采用以下方法:

  1. 不设置 g:UltiSnipsSnippetsDir 也不设置 g:UltiSnipsSnippetDirectories
  2. 保持 runtimepath+= 配置。
  3. 创建以下目录:~/.vim/my-snippets/UltiSnips.
  4. 将个人片段放在这个新目录下。

推理:

  • 默认情况下,UltiSnips 搜索运行时路径下的所有 UltiSnips 目录,因此如果使用此名称则无需配置。
  • 虽然个人代码段需要 runtime 设置,但如果使用插件管理器,此配置会自动维护。
  • 最后一点允许安装包含片段的 vim 插件。例如,this 插件包含 snipMate 和 UltiSnips 的各种代码片段,包括 C++。

我对此感到非常悲伤。这是一个答案,供那些不想头痛的人将来参考。

我有一个共享 .vimrc 服务于 samba 共享。 Windows gViM 和 ViM 都使用这个文件。

Windows

.vimrc 的相关部分

我在 L: 下安装了一个 samba 共享。请注意,我实际上必须使用 POSIX 作为路径,而不是 Windows 反斜杠 \,尽管它是 for Windows 的路径。

if has('win32') || has('win64') "If gVim under Windows"
    let g:UltiSnipsSnippetDirectories=["L:/.vim/custom_snippets"]
endif

.vimrc for Unix 的相关部分

我的终端打开 xterm-256color 以获得更多颜色,但您可以将其与 xterm 交换。这里的路径可以正确扩展 ~,因为这是我的 ``.vim` 所在的真实主目录。

if $TERM == "xterm-256color"
  let g:UltiSnipsSnippetDirectories=["~/.vim/custom_snippets"]
endif

完成加载 custom_snippets

你不需要任何东西!以下更改不需要

"let g:UltiSnipsSnippetDirectories=["custom_snippets"]
"let g:UltiSnipsSnippetsDir="~/.vim/snippets_custom/"

然而,Putty 似乎没有正确传递制表键或控制键,尽管所有路径都工作正常。 我在文件类型环境 set ft=tex 中用 :UltiSnipsEdit 测试了路径,它把我带到了 ~/.vim/snippets_custom/tex.snippets 应该的位置(都在 gvim Windows 和我的 unix 控制台)。

可能对在 Putty 中启用有用

如果您使用的是 sirver/ultisnips 插件 (UltiSnips),正确的方法是 运行 :UltiSnipsEdit 命令,它会为当前语言打开一个自定义片段文件/ 文件类型。