Vim Paste aus der Zwischenablage im Terminal

1

Ich versuche, eine Einfügemoduszuordnung zum Einfügen aus der Systemzwischenablage zu schreiben. Ich habe das:

imap <c-p> <c-o>:set paste<cr><c-r><c-r>+<c-o>:set nopaste<cr>

(Beachten Sie, dass dies soll nach arbeiten diese )

Wenn Sie jedoch die Tastenzuordnung aufrufen, funktioniert sie nicht. Sie stoppt kurz am festgelegten Einfügeteil, sodass der Einfügemodus aktiviert ist.

Aber wenn ich all diese Tasten manuell mache, bekomme ich, was ich will ... Was ist also anders, wenn die Befehle unter einer Tastaturbelegung liegen? Was fehlt mir, um diese Arbeit zu machen?

Ich habe es auch versucht:

imap <c-p> <esc>"+gP

Dies führt zu einer Reihe von Fehlern, weil gP eine unbekannte Variable ist, aber das gleiche Mapping im normalen Modus funktioniert wie erwartet. Was ist also bei Mappings im Einfügemodus anders?

moljac024
quelle
Der Autor des zitierten userobsessed Artikels ist mit Vim nicht sehr erfahren. Ich benutze den vimganzen Tag in einem Terminal, habe keine Probleme beim Einfügen und springe nicht durch all diese Reifen. Verwenden Sie zum Einfügen aus dem + -Register unter Beibehaltung der ursprünglichen Formatierung <C-R><C-O>+. Sehen Sie :help i_CTRL-R_CTRL-Ofür weitere Informationen hierzu. Ich weiß nicht, was mit Ihrem zweiten IMAP falsch ist - es funktioniert gut für mich.
Garyjohn
Ich habe diesen Kommentar bis jetzt nicht gesehen, das ist seltsam ... hast du ihn bearbeitet? Wie auch immer, danke, so habe ich es gelöst.
moljac024

Antworten:

0

Das brauchen Sie nicht, :set pastewenn Sie den Inhalt der Zwischenablage mit einfügen i_CTRL-R. Aufgrund des Befehls weiß Vim bereits, dass dies aus der Zwischenablage stammt. :set pasteist für das Einfügen direkt aus dem Terminal (z. B. über die mittlere Maustaste); Dort kann Vim nicht zwischen eingegebenen oder eingefügten Zeichen unterscheiden und benötigt diesen Hinweis.

Verwenden Sie, um das automatische Einrücken zu vermeiden i_CTRL-R_CTRL-O.

Ingo Karkat
quelle
Ja, aber ich habe festgestellt, dass beim Einfügen von Code der Einzug immer noch zerstört wird, ohne dass der Einfügemodus aktiviert ist.
Moljac024
Dann benutze einfach den richtigen Befehl: <C-R><C-O>{register}:-)
Ingo Karkat
Ja, das ist es, was ich letztendlich gemacht habe, aber ich konnte meine eigene Frage 8 Stunden lang nicht beantworten :) Danke!
moljac024
1

Ich weiß immer noch nicht, was mit dem ersten Mapping, das ich ausprobiert habe, falsch ist, da ich glaube, dass es funktionieren sollte, aber ich habe in der VIM-Dokumentation (genauer gesagt: help i_CTRL-R) eine bessere Lösung gefunden:

inoremap <c-p> <c-r><c-o>+

Aus den Dokumenten:

STRG-R STRG-O {0-9a-z "% # * + /: .- =} i_CTRL-R_CTRL-O Fügt den Inhalt eines Registers wörtlich ein und rückt ihn nicht automatisch ein Maus ||. Ersetzt keine Zeichen! Das '.' Das Register (der zuletzt eingefügte Text) wird noch wie eingegeben eingefügt. {not in Vi}

moljac024
quelle
0

Dieser zweite Befehl imap sollte gut funktionieren. Soweit ich weiß, sollte es den Einfügemodus verlassen, aus einer der System-Zwischenablagen (+) einfügen und den Cursor nach dem eingefügten Text verlassen.

Ich vermute, Sie führen entweder vi nicht vim aus oder Ihr vim befindet sich im kompatiblen Modus. In der Dokumentation für ["x] gP (:help gP)steht" not in vi ", sodass dies möglicherweise Ihr Problem ist

Steven
quelle
Ich laufe sicherlich vim und es ist nicht im kompatiblen Modus.
moljac024