Ich habe einen Teil des HTML-Codes von einer Webseite kopiert und wollte ihn in einer Datei speichern. Dafür habe ich eine neue vim
Sitzung in einem Terminalfenster mit einem (neuen) Dateinamen in der Befehlszeile gestartet , gedrückt, ium in den Einfügemodus zu gelangen, und dann CtrlShift+ Vund gewartet, während [-- INSERT --]
unten angezeigt und gewartet ...
Da vim
ich nach einigen Sekunden nicht mehr reagierte, öffnete ich im Menü Anwendungen → Zubehör den Texteditor (fügte innerhalb eines Bruchteils einer Sekunde ein, speicherte ihn unter einem neuen Namen, schloss ihn und beendete die Vim-Sitzung, die Noch nicht fertig, 1,5 Minuten später. Die Textmenge betrug 186 KB in 3200 Zeilen, weder übermäßig, würde ich sagen, noch mit zu langen Zeilen.
Gibt es eine Möglichkeit, diese Art von Einfügungen zu beschleunigen, vim
und / oder gibt es eine Erklärung, warum dies im Vergleich zur Verwendung des ansonsten schrecklichen und mausorientierten Texteditors so langsam ist?
(Die% CPU nach top
kommt nicht über 5%, obwohl ich einige Prozessoren im System frei habe, so dass es sich möglicherweise um ein E / A-gebundenes Problem handelt, das beim Lesen des gleichen Textes aus einer Datei nicht besteht.)
Versionsinfo:
Ubuntu 12.04
Vim: 7.3, mit Patches wie von Ubuntu 12.04
bereitgestellt Bash: 4.2.25
Gnome-Terminal: 3.4.1.1
vim
einfügen und dann einfügen können Aktivieren Sie es erneut. Versuchen Sie auch, die:set paste
Funktion zu verwenden, um festzustellen, ob sie die Dinge verbessert. Siehe:help paste
es beschreibt, wievim
keine Unterscheidung zwischen s / w-Eingabe und Einfügen erfolgt.vi
, dass ich versuche, die Datei beim Einlesen zu analysieren (nachdem ich den von @ l0b0 vorgeschlagenen Weg gespeichert habe). Das geht aber schnell.:set paste
scheint keinen wirklichen Unterschied zu machen (ich benutze keine Stoppuhr, nur die Wanduhr).Antworten:
Um schnell viel Text aus der Zwischenablage in einer Datei zu speichern, können Sie ihn ausführen
cat > file.txt
, den Inhalt einfügen und dann Ctrl- drücken d.Wenn Sie xsel installiert haben, können Sie die Auswahl
:r !xsel
"primär" (auch "Maus" genannt) in Vim:r !xsel -b
einfügen oder den Puffer "Zwischenablage" ( Ctrl- c) einfügen . Sie können die Auswahl auch direkt in einer Datei mitxsel >file.txt
oder speichernxsel -b >file.txt
. Dadurch entfällt die Notwendigkeit separater Einfüge- und EOF-Aktionen, und es wird vermieden, dass der gesamte Kopierpuffer im Terminal gedruckt wird.Wenn Sie kein xsel außer xclip haben, gelten die entsprechenden Befehle
xclip -out
für die primäre Auswahl oderxclip -out -selection clipboard
für den Zwischenablagepuffer.quelle
Dies ist ein Puffer-Flush-to-Disk-Problem. Vim versucht, Ihre Arbeit sicher zu halten und geht nicht davon aus, dass Sie mehrere tausend Zeichen pro Sekunde eingeben können. Lesen Sie
:help swap-file
einige Details zur Pufferung. Die Lösung für Ihr Problem lautet:Deaktivieren Sie die Swap-Datei von vim entweder mit:
oder aus vim vor der Paste:
Siehe
:help swapfile
für weitere Details.Eine andere Möglichkeit besteht darin, die Synchronisierung der Auslagerungsdatei mit der Festplatte einfach zu deaktivieren.
:set swapsync=
Diese Option erfordert jedoch mehr Tastenanschläge zum Rückgängigmachen und ich bin faul. :) :)Das Ausschalten des Swaps ist für den normalen Betrieb nicht sicher! Verwenden Sie unmittelbar nach dem Einfügen entweder
:set swapfile
oder:set swapsync=fsync
, um zum normalen Verhalten zurückzukehren (obwohl das normale Verhalten technisch gesehen möglicherweise synchron und nicht fsync war , prüfen Sie:set swapsync?
vorher, ob Sie diesen Weg einschlagen möchten).quelle
Wenn Sie über eine
xterm_clipboard
Funktion verfügen , können Sie die Register*
und verwenden+
. Diese Register sind mit dem primären Auswahlpuffer X11 bzw. der Zwischenablage verbunden.Wenn Sie also etwas über CTRL+ kopiert haben c, können Sie es in vim mit einfügen "+p.
Wenn Sie es einfach ohne Kopieren markiert haben, können Sie es mit einfügen "*p.
Sie können den
*
Puffer auch zum Standardpuffer machen, indem Sie dies tun:set clipboard=unnamed
. Dann verwendet jeder yank ( y), paste ( p) usw., der kein Register angibt, das*
Register. Vim 7.3.74 wurde ebenfalls hinzugefügtclipboard=unnamedplus
, wodurch das+
Register standardmäßig verwendet wird.Sie können Dinge auch in die primären Auswahl- und Zwischenablagepuffer kopieren, indem Sie zum Beispiel ziehen : "+yy.
Beachten Sie, dass diese Funktionen, wie bereits erwähnt, alle diese Funktion benötigen
xterm_clipboard
. Sie können sehen, ob Sie diese Funktion haben, indem Sie:version
in vim odervim --version
in der Shell arbeiten und nach suchen+xterm_clipboard
. Wenn es heißt-xterm_clipboard
, haben Sie es nicht und müssten vim neu kompilieren.quelle
xterm_clipboard
ist nur, wenn vim vom Terminal ausgeführt wird.xterm
.xterm_clipboard
gilt für jeden Terminalemulator, nicht nur für xterm. Ich selbst benutze urxvt.