Pregunta

Recientemente comencé a usar Vim como mi editor de texto y actualmente estoy trabajando en mis propias personalizaciones.

Supongo que las asignaciones de teclado pueden hacer prácticamente cualquier cosa, pero por el momento las estoy usando casi exclusivamente como una especie de función de fragmentos.

Entonces, por ejemplo, si escribo def{TAB} (:imap def{TAB} def ():<ESC>3ha), se expande a:

def |(): # '|' represents the caret

Esto funciona como se esperaba, pero me resulta molesto cuando Vim espera un comando completo mientras escribo una palabra que contiene "def" y no estoy interesado en expandirla.

  • ¿Hay alguna manera de evitar esto o utilizar esta función de manera más efectiva para este fin?
  • ¿Hay alguna otra característica de Vim más adecuada para esto?

Después de echar un vistazo rápido a FragmentosEmu, parece que es la mejor opción y mucho más fácil de personalizar de lo que pensé al principio.

Para continuar con el ejemplo anterior:

:Snippet def <{}>():

Una vez definido, puede expandir su fragmento escribiendo def{TAB}.

¿Fue útil?

Solución

FragmentosEmu es un complemento de fragmentos útil.

Otros consejos

Snipmate - como texmate :)http://www.vim.org/scripts/script.php?script_id=2540

video:http://vimeo.com/3535418

snippet def 
     """ ${1:docstring} """
     def ${2:name}:
         return ${3:value}

Como otra sugerencia (aunque ligeramente diferente) usando la funcionalidad integrada de vim:

:iabbrev def def(): #<LEFT><LEFT><LEFT><LEFT><LEFT>

Ahora, cada vez que escriba def seguido de un espacio u otro carácter que no sea una palabra, se expandirá igual que lo que proporcionó como resultado de SnippetsEmu (el espacio proviene del espacio que ingresó para activar la finalización).

Este enfoque no sufre el problema de "retraso" que encontró al usar :inoremap y está integrado en vim.Para obtener más información sobre esta función, consulte :help abbrev.

Es posible que le preocupe que al activarse mediante el espacio, no mediante la pestaña, se active innecesariamente, pero en general vim es bastante inteligente a la hora de activarlo.El problema se puede mitigar adicionalmente habilitando la abreviatura solo para ciertos tipos de archivos (por ejemplo, Python):

au filetype python :iabbrev ... etc

Snip[ets] (Manager|Emu|Mate|.vim) también es, por supuesto, una solución perfecta, pero es bueno conocer las alternativas (especialmente cuando están integradas).

Si SnippetsEmu es demasiado pesado o ambicioso para lo que necesitas (lo fue para mí), escribí un complemento que administra fragmentos según el tipo de archivo.¡Incluso tiene función de tabulación al seleccionar el fragmento!:)

Consiguelo aqui: fragmentos.vim

acabo de instalar Ulticortadores.Hay un buen artículo que explica por qué podría elegir UltiSnips: ¿Por qué UltiSnips?

No he usado ninguno de los otros complementos de fragmentos;Decidí dar el paso con uno que pareciera tener todas las funciones y que pudiera adaptarse a mí a medida que adquiera más habilidades en Vim y quiera hacer cosas más sofisticadas.

Como señaló MDCore, FragmentosEmu es un popular script de Vim que hace precisamente eso y más.Si solo necesita expandir (sin mover el cursor hacia atrás), puede usar el estándar :ab[breviate] dominio.

:ab[breviate] [<expr>] {lhs} {rhs}
        add abbreviation for {lhs} to {rhs}.  If {lhs} already
        existed it is replaced with the new {rhs}.  {rhs} may
        contain spaces.
        See |:map-<expr>| for the optional <expr> argument.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top