Retroceso en la abreviatura de inserción

8

Para trabajar, las abreviaturas deben estar separadas por espacios en blanco. Por ejemplo, si tengo una iab fo FOOBARescritura whatfo, no se activará la abreviatura. Hay algunas razones razonables obvias para esto.

Sin embargo, me gustaría una abreviatura que pueda usarse como sufijo sin que tenga que activar el iab y luego regresar y eliminar el espacio. es posible? Ej iab fo <backspace>FOOBAR.

encerrada dorada
fuente
¿El siguiente código produce lo que quieres? vpaste.net/IfU1j
saginaw
@saginaw Sí, genial, publícalo como respuesta y es tuyo.
Ricitos

Respuestas:

8

Podrías escribir dentro de tu vimrc: iab fo <BS>FOOBAR

<BS> es la notación a usar para la tecla de retroceso.

Para obtener más información sobre nombres de teclas especiales, consulte:

:help key-notation
Saginaw
fuente
1
La "forma más simple" no funcionó en este caso porque pienso en la robustez; el sufijo real es [7:0]y tendrías que jugar con el número de bs, etc. para personalizarlo, creo.
Ricitos
@delicateLatticeworkFever Tienes razón, no pensé en eso. En este caso particular, quizás reemplazar by econ By Esería suficiente. Pero puede haber otros casos en los que fallaría, no lo sé. En cualquier caso, la primera versión debería, con suerte, funcionar la mayor parte del tiempo.
saginaw
@delicateLatticeworkFever Volviendo a leer mi respuesta, me doy cuenta de que es demasiado complejo. Probablemente algo así iab fo <BS>foobarfue suficiente. Disculpe las molestias, probablemente debería marcar la respuesta de @djjcast como la respuesta correcta. Por el momento no puedo eliminar mi respuesta, pero una vez que pueda lo haré. De nuevo, lo siento mucho, no estoy acostumbrado a las abreviaturas.
saginaw
Oye, <BS>era justo la cosa. Juro que probé algo así, pero no conozco todos los personajes de control, por lo que podría haber usado <backspace>algo.
Ricitos
1
@delicateLatticeworkSiempre entiendo, no hay problema. Si desea ver todos los nombres de teclas especiales, puede leerlos aquí::help key-notation
saginaw
4

Simplemente presione en modo de inserción Ctrl]. Esto activará las abreviaturas para expandirse, sin ingresar un espacio

Christian Brabandt
fuente
Has leído mal la pregunta. Quiero que el resultado final sea algo así como: X(FOOBAR)no X( FOOBAR. Usar Ctrl-] simplemente elimina el espacio al final . Necesito poder usar la abreviatura, que también depende del espacio en blanco al principio para disparar , pero tenerla concatenada con la palabra anterior (eso es lo que significa " sufijo ").
Ricitos
Oh, quieres un complemento de fragmento ...
Christian Brabandt
Supongo que esto podría hacerse con algo definido ${1}FOOBAR, esa es una buena respuesta. Si desea cambiar esto: / o agregar otra respuesta, marcaré eso.
Ricitos
Como personalmente no conozco los complementos de fragmentos, no puedo hacer que esto sea una respuesta.
Christian Brabandt
4

Como alternativa, aquí hay una manera de definir y expandir abreviaturas que se expanden en cualquier lugar:

let s:anywhere_abbreviations = {
    \ 'fo': 'FOOBAR',
    \ 'ab': 'ABBREVIATION',
\ }

function! s:MaybeExpandAbbreviation(trigger)
    for key in keys(s:anywhere_abbreviations)
        if matchstr(getline('.'), repeat('.', strchars(key)) . '\%' . col('.') . 'c') ==# key
            return repeat("\<BS>", strchars(key)) . s:anywhere_abbreviations[key] . a:trigger
        endif
    endfor
    return "\<C-]>" . a:trigger
endfunction

inoremap <expr> <Space> <SID>MaybeExpandAbbreviation("\<Space>")

Simplemente agregue las abreviaturas que deberían expandirse en cualquier parte del s:anywhere_abbreviationsdiccionario. La s:MaybeExpandAbbreviation()función busca y expande las coincidencias de abreviaturas cuando se presiona la tecla de activación, <Space>se asigna para activar la expansión de las "abreviaturas en cualquier lugar".

Con el s:anywhere_abbreviationsdiccionario anterior , la escritura whatfo<Space>se expandirá a whatFOOBAR.

djjcast
fuente
2

Para resumir las dos respuestas más simples que surgieron de esto:

  1. Puede usar un espacio de retroceso directamente en una abreviatura : varios caracteres especiales se documentan debajo :help keycodes. Entonces, por ejemplo:

    :iab cdt <BS>cedental
    

    Le permitirá escribir trans cdty obtener transcendental.

  2. Uno de los que me avergüenzo particularmente desde que lo he estado usando durante años: el plugin snipMate común permite que los parámetros estén al frente, así que

     snippet cdt
         ${1}cendental ${2}
    

    Permite escribir cdt, que Tabse expandirá cendentaly colocará el cursor al frente para que pueda escribir trans, luego presione Tabnuevamente para avanzar al comienzo de la siguiente palabra.

encerrada dorada
fuente