Rücktaste in der Einfügungsabkürzung

8

Um zu arbeiten, müssen Abkürzungen durch Leerzeichen getrennt werden. Wenn ich beispielsweise eine habe, iab fo FOOBARwird durch die Eingabe whatfodie Abkürzung nicht ausgelöst. Dafür gibt es einige offensichtliche vernünftige Gründe.

Ich möchte jedoch eine Abkürzung, die als Suffix verwendet werden kann, ohne dass ich das iab auslösen und dann zurückgehen und das Leerzeichen entfernen muss. Ist das möglich? ZB , iab fo <backspace>FOOBAR.

Goldlöckchen
quelle
Produziert der folgende Code, was Sie wollen? vpaste.net/IfU1j
saginaw
@saginaw Ja, brillant - poste das als Antwort und es gehört dir.
Goldlöckchen

Antworten:

8

Sie könnten in Ihr vimrc schreiben: iab fo <BS>FOOBAR

<BS> ist die Notation, die für die Rücktaste verwendet werden soll.

Weitere Informationen zu speziellen Schlüsselnamen finden Sie unter:

:help key-notation
saginaw
quelle
1
Der "einfachere Weg" hat in diesem Fall nicht geklappt, weil ich an Robustheit denke; Das eigentliche Suffix ist [7:0]und man müsste mit der Anzahl der bs usw. herumspielen, um das anzupassen, denke ich.
Goldlöckchen
@delicateLatticeworkFever Du hast recht, darüber habe ich nicht nachgedacht. In diesem speziellen Fall wäre es möglicherweise ausreichend , bund edurch Bund Ezu ersetzen . Aber es kann andere Fälle geben, in denen es fehlschlagen würde, ich weiß es nicht. In jedem Fall sollte die erste Version hoffentlich die meiste Zeit funktionieren.
Saginaw
@delicateLatticeworkFever Beim erneuten Lesen meiner Antwort stelle ich fest, dass es zu komplex ist. Wahrscheinlich war so etwas iab fo <BS>foobargenug. Entschuldigen Sie die Unannehmlichkeiten. Sie sollten wahrscheinlich die Antwort von @djjcast als die richtige Antwort ankreuzen. Im Moment kann ich meine Antwort nicht entfernen, aber sobald ich kann, werde ich es tun. Wieder wirklich leid, ich bin nicht an Abkürzungen gewöhnt.
Saginaw
Hey <BS>war genau das Richtige. Ich schwöre, ich habe so etwas versucht, aber ich kenne nicht alle Steuerzeichen, also hätte ich es vielleicht benutzt <backspace>oder so.
Goldlöckchen
1
@delicateLatticeworkFever Ich verstehe, kein Problem. Wenn Sie alle speziellen Schlüsselnamen sehen möchten, können Sie sie hier lesen::help key-notation
saginaw
4

Drücken Sie einfach im Einfügemodus Ctrl]. Dadurch werden Abkürzungen erweitert, ohne ein Leerzeichen einzugeben

Christian Brabandt
quelle
Sie haben die Frage falsch verstanden. Ich möchte, dass das Endergebnis so etwas wie: X(FOOBAR)nicht ist X( FOOBAR. Wenn Sie Strg-] verwenden, wird nur der Platz am Ende entfernt . Ich muss in der Lage sein, die Abkürzung zu verwenden - die auch vom Leerzeichen zu Beginn des Feuers abhängt -, muss sie aber mit dem vorherigen Wort verketten (das bedeutet ein " Suffix ").
Goldlöckchen
Oh, du willst ein Snippet-Plugin ...
Christian Brabandt
Ich denke, dies könnte mit etwas Definiertem geschehen ${1}FOOBAR- das ist eine gute Antwort. Wenn Sie dies ändern möchten: / oder eine andere Antwort hinzufügen, werde ich das ankreuzen.
Goldlöckchen
Da ich persönlich keine Snippet-Plugins kenne, kann ich dies nicht ernsthaft beantworten.
Christian Brabandt
4

Alternativ können Sie hier Abkürzungen definieren und erweitern, die sich überall erweitern lassen:

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

Fügen Sie einfach die Abkürzungen hinzu, die irgendwo im s:anywhere_abbreviationsWörterbuch erweitert werden sollen . Die s:MaybeExpandAbbreviation()Funktion sucht nach Abkürzungsübereinstimmungen und erweitert diese, wenn die Auslösetaste gedrückt wird. Sie <Space>wird zugeordnet, um die Erweiterung der Abkürzungen "irgendwo" auszulösen.

Mit dem obigen s:anywhere_abbreviationsWörterbuch wird die Eingabe whatfo<Space>auf erweitert whatFOOBAR.

djjcast
quelle
2

Um die zwei einfachsten Antworten zusammenzufassen, die sich daraus ergaben:

  1. Sie können eine Rücktaste direkt in einer Abkürzung verwenden - verschiedene Sonderzeichen sind unter dokumentiert :help keycodes. Also zB:

    :iab cdt <BS>cedental
    

    Ermöglicht das Tippen trans cdtund Abrufen transcendental.

  2. Eine, für die ich mich besonders schäme, seit ich sie seit Jahren benutze : Das übliche snipMate-Plugin ermöglicht es, dass Parameter in den Vordergrund treten

     snippet cdt
         ${1}cendental ${2}
    

    Ermöglicht das Eingeben cdt, wodurch der Cursor Taberweitert cendentalund vorgesetzt wird, damit Sie tippen können. Drücken Sie transdann Taberneut, um zum Anfang des nächsten Wortes zu gelangen.

Goldlöckchen
quelle