2011-08-02 10 views
9

Al usar snipmate + vim, ¿es posible tener muchos archivos de fragmento cargando para un determinado idioma/tipo de archivo?¿Podemos usar varios archivos de fragmentos para el tipo de archivo dado en vim?

Ex: snipmate viene con javascript.snippets También he cargado los fragmentos de MooTools y ha añadido esto a mi vimrc: autocmd FileType javascript set ft=javascript.mootools

ahora puedo usar

  • fragmentos del archivo js
  • los fragmentos de mootools

Quiero para agregar un tercer conjunto de fragmentos, javascript.myCustomSnippets, que será también carga para el tipo de archivo javascript.

Cuando intento agregar mis fragmentos personalizados utilizando algo como esto autocmd FileType javascript set ft=javascript.myCustomSnippets sobrescribe/desactiva los fragmentos de MooTools, sin embargo el defecto Javascript fragmentos continúan trabajando.

¿Cómo puedo lograr esto, o es posible?

PD: Sé que sólo pudiera añadir mis fragmentos en el valor predeterminado archivo JavaScript fragmentos, pero ya que tengo el repositorio GitHub snipmate sincronizado dentro de mi carpeta .vim/bundle/, quiero seguir la materia personal separada de la cesión temporal en vivo.

mi solución

La solución específica que finalmente consiguió mis archivos de trabajo lado a lado fue estructurar mis archivos como éste (por cierto, estoy usando pathogen a cargar automáticamente la bundle dir)

~/.vim/bundles/ 
    snipmate.vim/snippets/javascript.snippet 
    vim-snippets.mootools/snippets/mootools.snippet 
    vim-snippets.myCustomSnippets/snippets/javascript.snippets 

Al nombrar mis "javascript.snippets" archivo es auto-cargado, junto con los valores por defecto.

Respuesta

16

Ruy Diaz tiene razón en lo personal, puede guardar todos sus propios fragmentos en "~/.vim/snippets" y no tendrá ningún problema con el repositorio github. Si esto no funciona para usted, la variable g:snippets_dir puede tener un valor incorrecto, simplemente configúrelo explícitamente en sus archivos vim.

En cuanto a la combinación de varios fragmentos, puede utilizar la función ExtractSnipsFile. Eso debería hacer lo que quiera sin jugar con la sintaxis de tipos de archivos de puntos.

Digamos que usted tiene los siguientes tres archivos de fragmento, todos en su directorio fragmento:

  • javascript.snippets
  • mootools.snippets
  • myCustomSnippets.fragmentos

Crear un archivo "después/plugin/snippets.vim" y colocar la siguiente en él:

call ExtractSnipsFile(g:snippets_dir.'javascript.snippets', 'javascript') 
call ExtractSnipsFile(g:snippets_dir.'mootools.snippets', 'javascript') 
call ExtractSnipsFile(g:snippets_dir.'myCustomSnippets.snippets', 'javascript') 

Esto se asociará todos estos fragmentos con el javascript tipo de archivo, no hay autocommands explícitos necesarios. Para obtener más información, puede intentar :help ExtractSnipsFile.

+0

Wow. No sabía acerca de 'ExtractSnipsFile', muy útil. – bejonbee

+2

para quienes acudan a esto más tarde: si usa la versión más reciente de snipmate (de [garbas] (https://github.com/garbas/vim-snipmate)) y Pathogen, puede tener varios fragmentos con el mismo nombre de archivo y todos serán leídos Incluso te pedirá que elijas si hay varios tipos. No necesitas hacer nada más :) –

4

Crea una carpeta de fragmentos dentro de tu directorio .vim y coloca allí tus fragmentos. Crea un archivo llamado javascript.snippets allí y deberías tener los snipmate snippets y los personalizados disponibles.

1

Sí, por supuesto. Primero use github.com/MarcWeber/vim-addon-manager para que no pierda los cambios en las rutas de subida. El snipmate de M. Sander se ha bifurcado porque nunca respondió a correos electrónicos sobre solicitudes de fusión. Es por eso que Garbas y yo lo mejoramos. La nueva versión se puede encontrar en github.com/garbas/vim-snipmate.

Tiene un diccionario global scope_aliases que puede usar para asociar tipos de archivos con archivos de fragmento. De esta forma, puede agregar soporte js snippet a archivos html fácilmente en función de las preferencias personales. Hay algunos cambios más, pero estoy cansado de repetirlos.

0

Dado que está utilizando un agente patógeno de todo lo que necesita hacer es agregar una carpeta de Fragmentos personalizados al directorio de paquetes. Por ejemplo:

~/.vim/bundles/mySnippets/snippets/php.snippets

1

Sólo para referencia adicional, la: h estados snipMate: extiende: extiende los fragmentos de los tipos de archivo dado.

extends c, cpp, objc 

esto incluiría todos los fragmentos para los tipos de archivo dados. Y simplemente coloque su propio archivo de fragmento en ~/.vim/snippets/objc.snippet

Cuestiones relacionadas