In Vim, wenn ich dieses Skript einfügen:
#!/bin/sh
VAR=1
while ((VAR < 10))
do
echo "VAR1 is now $VAR"
((VAR = VAR +2))
done
echo "finish"
Ich bekomme diese seltsamen Ergebnisse:
#!/bin/sh
#VAR=1
#while ((VAR < 10))
# do
# echo "VAR1 is now $VAR"
# ((VAR = VAR +2))
# done
# echo "finish"
#
Hash-Zeichen (#) und Tabulatoren wurden angezeigt. Warum?
vim
clipboard
whitespace
Elbarna
quelle
quelle
Antworten:
Es gibt zwei Gründe:
Zum Einfügen bei
vim
aktiviertem automatischen Einzug müssen Sie in den Einfügemodus wechseln, indem Sie Folgendes eingeben:Dann können Sie in den Einfügemodus wechseln und Ihren Code einfügen. Nach dem Einfügen geben Sie Folgendes ein:
um den Einfügemodus zu deaktivieren. Da dies eine häufige und häufige Aktion ist,
vim
bietet das Umschalten des Einfügemodus Folgendes an:Sie können
F2
zu jeder beliebigen Taste wechseln und das Einfügen jetzt ganz einfach ein- und ausschalten.Um das automatische Einfügen von Kommentaren zu deaktivieren , können Sie die folgenden Zeilen zu Ihrer vimrc hinzufügen :
vim
Bietet außerdem ein Einfügeregister, in das Sie Text aus der Systemzwischenablage einfügen können. Sie können"*p
oder"+p
abhängig von Ihrem System verwenden. Auf einem System ohne X11 wie OSX oder Windows müssen Sie das*
Register verwenden. Auf einem X11-System wie Linux können Sie beide verwenden.Weitere Lektüre
quelle
set paste
sollte niemals in deinem Vimrc sein. Viele Dinge werden deaktiviert oder zurückgesetzt, einschließlich Einfügemoduszuordnungen, Befehlszeilenzuordnungen, Abkürzungen, Textbreite, Zeilenumbruch, Autoindent, Smartindent, Softtabstop, Formatoptionen, Indentexpr und einige andere.:h paste
hat die ganze Liste. Die meisten Leute verwenden einige oder alle dieser Dinge und fragen sich, warum dort Einstellungen ignoriert werden.:r!cat
um wörtlich einzufügen.set mouse
, die beim Einfügen mit einem Mausklick automatisch in den Einfügemodus wechselt und diesen verlässt.Verwenden Sie die Vim Paste. Sie möchten nur das einfügen, was sich im Zwischenspeicher befindet "+p
Dies wählt das aus
+
und fügt es ein.Wenn Sie Linux verwenden,
*
ist der X / Middle-Click-Puffer (der zuletzt ausgewählte Text).Dann weiß Vim, dass es eine Paste ist.
Andernfalls geht vim davon aus, dass Sie die einzufügenden Schlüssel eingegeben haben, und führt eine automatische Einrückung (über der kopierten Einrückung) bis zum Ende des Einfügens durch.
Damit dies über SSH funktioniert, müssen Sie die Option für die Freigabe Ihrer Zwischenablage festlegen
-Y
Sehen Sie
man ssh
für weitere Details.quelle
gvim
) funktioniert ; vim in einem Terminal-Emulator ausgeführt wird, fügt den zuletzt gelöschten Text mit "* p" ein, nicht die aktuelle Auswahl.set mouse?
vim --version
sehen sich , wenn sie mit Unterstützung der Zwischenablage kompiliert wurde+xterm_clipboard
in der Ausgabe sein sollteunnamed
String gesetzt.Die Registerkarten wurden eingefügt, weil Sie die automatische Einrückung aktiviert haben und Sie dieses Verhalten deaktivieren können, indem Sie die automatische Einrückung (
:set noai
) deaktivieren, bevor Sie sie in das Terminal einfügen.Die kommentierten Zeilen werden durch automatisches Kommentieren erzeugt und können durch Deaktivieren deaktiviert werden.
Alternativ dazu sollten Sie das gewünschte Verhalten mit den Schaltflächen erzielen
:set paste
, indem Sie Ihren formatierten Code einfügen und:set nopaste
das normale Verhalten wiederherstellen.quelle