Ins-Vervollständigung von Wörtern

13

<C-p>und <C-n>ermöglichen die Vervollständigung von Wörtern im aktuellen Dokument.

Ich mache ein paar Notizen und schreibe sagen {0,1}^nund (E,D)oft. Dies sind WÖRTER, die aus mehreren Wörtern bestehen.

Gibt es eine Möglichkeit, WORDs mit <C-p>und <C-n>(oder einem anderen verwandten ins-completionBefehl) zu vervollständigen ?

Gonçalo Ribeiro
quelle
1
Sie können stattdessen besser dran sein :abbreviate. Geben Sie beispielsweise den :ab 01n {0,1}^nBefehl aus. Jedes Mal, wenn Sie 01nim Einfügemodus ein unabhängiges Wort eingeben, wird es auf erweitert {0,1}^n.
200_success
@ 200_erfolg, danke. Ich hatte über Abkürzungen nachgedacht, wollte aber trotzdem wissen, ob das mit möglich ist ins-completion.
Gonçalo Ribeiro

Antworten:

5

Einfügemodus abschließen mit Ctrl-n

Ich weiß nicht, ob Sie eine WORD-Vervollständigung durchführen können, ohne Ihre eigene Funktion (wie Omnifunc) zu schreiben. Wenn es Ihnen jedoch nichts ausmacht, ein Wort zu erweitern, das Ihren Zeichen entspricht, können Sie diese Zeichen zu "iskeyword" hinzufügen.

Zum Beispiel lautet mein 'iskeyword' standardmäßig

iskeyword=@,48-57,_,192-255

Ich habe es dann auf das plus die zusätzlichen Zeichen oben gesetzt

:set iskeyword=@,48-57,_,192-255,{,},,,(,),^

Dies fügt {, }, ,, (, ), und ^auf die Zeichen , die ein Wort bilden (zusätzlich zu dem, was bereits getan hat)

Danach wird die Eingabe {Ctrl-nzu {0,1}^n(in einer Datei, die nur die beiden Beispiele enthält, die Sie angegeben haben) abgeschlossen.

Hinweis: Es wäre besser, :set iskeyword+=nur die zusätzlichen Dinge wie folgt zu tun :

:set iskeyword+={,},,,(,),^

Auf diese Weise belassen Sie alle anderen Elemente, die ein Schlüsselwort ausmachen, indem Sie die neuen Zeichen an die vorhandene Einstellung anhängen.

Erweiterung mit Abkürzungen

Obwohl dies nicht Teil der ursprünglichen Frage ist, besteht eine andere ähnliche (ish) Funktionalität darin, die Abkürzungsfunktionalität von nvi oder Vim zu verwenden. Im Gegensatz zur Vervollständigung von Schlüsselwörtern müssen Abkürzungen nicht wie der endgültige Text aussehen. Anders als bei der Vervollständigung von Schlüsselwörtern werden Abkürzungen automatisch erweitert, anstatt nur, wenn Sie danach fragen. Abhängig von Ihrem Ziel und Ihrer Verwendung kann dies viel Tipparbeit einsparen und Sie können viel Text eingeben, ohne dass Sie unterbrochen werden müssen, um eine Vervollständigung anzufordern.

Abkürzungen eignen sich für eine kleine Anzahl von Schlüsselwörtern und wenn Sie sie im Voraus definieren können (sie werden nicht aus Ihrem Text erkannt, wie es die Wortvervollständigung ist).

Die Grundidee hinter Abkürzungen ist, dass Sie ein WORD mit einem anderen Text verknüpfen und jedes Mal, wenn der Editor feststellt, dass Sie dieses WORD eingegeben haben (dh, der von Ihnen eingegebene Text ist von einem Leerraum umgeben, in dem die Abschlussaktion das Leerzeichen nach dem Text hinzufügt) Wenn Sie das Schlüsselwort eingeben oder den Einfügemodus verlassen, wird es durch den anderen Text ersetzt.

Angenommen, Ihre Datei enthält {0,1}^nviel, und es gibt keine anderen Variationen davon. Typing , die ein bisschen von einem Finger Strecke ist, so vielleicht wollen Sie nur eingeben 01noder myvalueund haben sie zu erweitern {0,1}^n, aber nur , wenn 01noder myvalueist ein Wort auf seine eigene (das heißt, wenn es in einem anderen Wort erscheinen geschieht, nicht ändern Sie es).

In nvi ist das möglich :abbrev 01n {0,1}^n. Sie können dasselbe in Vim tun, ich empfehle :iabbrev 01n {0,1}^njedoch, die Erweiterung auf den Einfügemodus zu beschränken.

Dann, wenn Sie etwas Text haben (wo |steht der Cursor)

We find that the value 01n|

Und dann drückst du Escoder Spaceoder Taboder bewegst auf andere Weise die Cursor, der Text wird ersetzt und du hast (Beispiel für die Verwendung von Leerzeichen)

We find that the value {0,1}^n |

und Sie können ohne Unterbrechung weiter tippen.

Dies wird normalerweise verwendet, um häufig vorkommende Tippfehler automatisch zu korrigieren (z. B. 'teh' in 'the' ändern), kann aber auch für Ihren Anwendungsfall nützlich sein, vorausgesetzt, es macht Ihnen nichts aus, die Zuordnungen im Voraus einzurichten.

John O'M.
quelle
Für mich scheint das :set iskeyword+={,},,,(,),^wie erwartet zu funktionieren.
Karl Yngve Lervåg
1
In der Tat. Als ich es das letzte Mal versuchte, sagte mir Vim immer wieder, dass es sich um einen Syntaxfehler handele. Es muss woanders gewesen sein. Aktualisiere meine Antwort.
John O'M.
@ JohnO'M. Können Sie einen Hinweis hinzufügen, wie abbreviatesich dieser Job besser eignet?
Gonçalo Ribeiro
@ GonçaloRibeiro erledigt. Ich hoffe, es hilft.
John O'M.