Backspace nell'inserimento dell'abbreviazione


8

Per funzionare, le abbreviazioni devono essere separate da spazi bianchi. Ad esempio, se ho una iab fo FOOBARdigitazione allora whatfonon attiverà l'abbreviazione. Ci sono alcune ovvie ragioni ragionevoli per questo.

Tuttavia, vorrei un'abbreviazione che potrebbe essere utilizzata come suffisso senza che io debba attivare iab, quindi tornare indietro e rimuovere lo spazio. È possibile? Ad es iab fo <backspace>FOOBAR.


Il seguente codice produce quello che vuoi? vpaste.net/IfU1j
saginaw

@saginaw Sì, geniale - pubblicalo come risposta ed è tuo.
Riccioli d'oro,

Risposte:


8

Potresti scrivere nel tuo vimrc: iab fo <BS>FOOBAR

<BS> è la notazione da utilizzare per il tasto backspace.

Per ulteriori informazioni sui nomi di chiavi speciali, vedere:

:help key-notation

1
Il "modo più semplice" non ha funzionato in questo caso perché penso alla robustezza; il suffisso reale è [7:0]e dovresti giocare con il numero di bs, ecc. per personalizzarlo, credo.
Riccioli d'oro,

@delicateLatticeworkFever Hai ragione, non ci ho pensato. In questo caso particolare, forse sostituire be econ Be Esarebbe sufficiente. Ma potrebbero esserci altri casi in cui fallirebbe, non lo so. In ogni caso, la prima versione dovrebbe, si spera, funzionare la maggior parte del tempo.
saginaw,

@delicateLatticeworkFever Rileggendo la mia risposta mi rendo conto che è eccessivamente complesso. Probabilmente qualcosa del genere iab fo <BS>foobarera abbastanza. Ci scusiamo per l'inconveniente, dovresti probabilmente contrassegnare la risposta di @djjcast come risposta corretta. Al momento non riesco a rimuovere la mia risposta, ma una volta che posso lo farò. Ancora una volta davvero dispiaciuto, non sono abituato alle abbreviazioni.
Saginaw

Ehi <BS>era la cosa giusta. Giuro che ho provato qualcosa del genere, ma non conosco tutti i personaggi di controllo, quindi avrei potuto usare <backspace>o qualcosa del genere.
Riccioli d'oro

1
@delicateLatticeworkFever capisco, nessun problema. Se vuoi vedere tutti i nomi delle chiavi speciali, puoi leggerli qui::help key-notation
saginaw

4

Basta premere in modalità inserimento Ctrl]. Ciò attiverà l'espansione delle abbreviazioni, senza immettere uno spazio


Hai letto male la domanda. Voglio che il risultato finale sia qualcosa di simile: X(FOOBAR)no X( FOOBAR. L'uso di Ctrl-] elimina semplicemente lo spazio alla fine . Devo essere in grado di usare l'abbreviazione - che dipende anche dallo spazio bianco all'inizio del fuoco - ma farlo concatenare con la parola precedente (ecco cosa significa " suffisso ").
Riccioli d'oro

Oh, vuoi un plugin per frammenti ...
Christian Brabandt,

Immagino che questo potrebbe essere fatto con qualcosa di definito ${1}FOOBAR- questa è una buona risposta. Se vuoi cambiare questo: / o aggiungi un'altra risposta, lo selezionerò.
Riccioli d'oro

dal momento che personalmente non conosco plugin di frammenti, non posso seriamente fare di questo una risposta.
Christian Brabandt,

4

In alternativa, ecco un modo per definire ed espandere le abbreviazioni che si espandono ovunque:

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>")

Basta aggiungere le abbreviazioni che dovrebbero espandersi ovunque nel s:anywhere_abbreviationsdizionario. La s:MaybeExpandAbbreviation()funzione cerca ed espande le corrispondenze delle abbreviazioni quando viene premuto il tasto di attivazione - <Space>viene mappata per attivare l'espansione delle "ovunque abbreviazioni".

Con il s:anywhere_abbreviationsdizionario sopra , la digitazione whatfo<Space>si espanderà a whatFOOBAR.


2

Per riassumere le due risposte più semplici che ne sono derivate:

  1. È possibile utilizzare un backspace direttamente in un'abbreviazione : vari caratteri speciali sono documentati in :help keycodes. Quindi, ad esempio:

    :iab cdt <BS>cedental
    

    Ti permetterà di digitare trans cdte ottenere transcendental.

  2. Uno di cui mi vergogno particolarmente da quando lo uso da anni: il comune plugin snipMate consente ai parametri di andare avanti, quindi

     snippet cdt
         ${1}cendental ${2}
    

    Consente la digitazione cdt, che Tabsi espanderà cendentale posizionerà il cursore in primo piano in modo da poter digitare trans, quindi premere di Tabnuovo per spostarsi all'inizio della parola successiva.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.