Warum funktioniert die Umschalt-/Einfügefunktion nur im Einfügemodus vollständig?

Warum funktioniert die Umschalt-/Einfügefunktion nur im Einfügemodus vollständig?

Habe gerade versucht, mit vim Inhalte (in Git Bash auf einem CentOS-Server) in eine Datei einzufügen.
Ich habe die Datei gerade geöffnet und versucht, shift+ zu verwenden insert, und mir ist aufgefallen, dass die erste Hälfte (ungefähr) abgeschnitten wird, aber wenn ich vim in den Einfügemodus setze und shift+ drücke insert, wird alles perfekt eingefügt.
Ich habe mich nur gefragt, warum das so ist?

Danke

Antwort1

Sowohl Shift+ Insertals auch "Einfügen" in ein Terminal verhalten sich ähnlich – sie emulieren Tastendrücke.

Dies ist eine wichtige Unterscheidung, die für Terminals oft nicht möglich ist: Tippen Sie oder fügen Sie ein?Notiz: einige Terminals unterstützen "eingeklammertes Einfügen" Modi, nach @Joshs Kommentar stieß ich sogar auf eineVim-Plugineingeklammert einfügenxtermdie Sie interessieren könnten.

Ihre eingefügten Daten gehen bis zum ersten Zeichen verloren, das in den Einfügemodus wechselt. Möglicherweise stellen Sie auch fest, dass sich Ihr Cursor bewegt hat und dass sich andere Teile der Datei geändert haben (z. B. Groß-/Kleinschreibung geändert / gelöscht / usw.) ...

Zusammenfassend lässt sich sagen: Wenn Sie Text einfügen, der in die Datei eingefügt werden soll, wechseln Sie zuerst in den Einfügemodus.


Versuchen Sie, den folgenden Text zu kopieren und in ein Terminal einzufügen, auf dem Vim ausgeführt wird (nicht im Einfügemodus):

hello how are you

Das Ergebnis ist das gleiche, als würden Sie dieselben Buchstaben auf Ihrer Tastatur eingeben:

Ergebnis des Einfügens in Vim

In diesem Fall verbleiben Sie im Einfügemodus ...

Versuchen Sie nun, den Einfügemodus zu verlassen - Escund fügen Sie Folgendes ein

/are
n

Dies führt eine Suche nach „sind“ durch:

Ergebnis des Einfügens in Vim

Fügen Sie nun Folgendes ein:

:0
dG

Oh nein... alles ist weg!

alle weg


Sie werden auch feststellen, dass, wenn Sie die Einrückung aktiviert haben, beim Einfügen eines Codeblocks in vim (im Einfügemodus) eine zu starke Einrückung erfolgt - die Einrückung erfolgt automatisch und Ihr eingefügter Code enthält dann die Einrückung.

def my_print(message):
    print(message)
    print('done...')

Code einfügen

Um dies zu beheben, verwenden Sie die Befehle :set pasteund:set nopaste

Code einfügen (Einfügemodus)

verwandte Informationen