it-swarm.com.de

Warum rückt Vim eingefügten Code falsch ein?

Wenn ich in Vim dieses Skript einfüge:

#!/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?

108
elbarna

Es gibt zwei Gründe:

Zum Einfügen in vim, während der automatische Einzug aktiviert ist, müssen Sie zu Einfügemodus wechseln, indem Sie Folgendes eingeben:

:set paste

Anschließend können Sie in den Einfügemodus wechseln und Ihren Code einfügen. Geben Sie nach dem Einfügen Folgendes ein:

:set nopaste

um den Einfügemodus auszuschalten. Da dies eine häufige und häufige Aktion ist, bietet vim das Umschalten des Einfügemodus:

set pastetoggle=<F2>

Sie können F2 In einen beliebigen Schlüssel ändern und jetzt das Einfügen einfach ein- und ausschalten.


Um das automatische Einfügen von Kommentaren zu deaktivieren, können Sie diese Zeilen zu Ihrem vimrc hinzufügen:

augroup auto_comment
    au!
    au FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
augroup END

vim bietet auch ein Einfüge-Register , mit dem Sie Text aus der System-Zwischenablage einfügen können. Sie können je nach System "*p Oder "+p 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.

Weiterführende Literatur

131
cuonglm

Verwenden Sie die Vim-Paste. Sie möchten einfügen, was sich im Zwischenablagepuffer befindet "+p

Dies wählt das + und klebt es an Ort und Stelle.

Wenn Sie Linux verwenden, * ist der X/Middle-Click-Puffer (der zuletzt ausgewählte Text).

Dann weiß vim, dass es eine Paste ist.

Andernfalls glaubt vim, dass Sie die eingefügten Schlüssel eingegeben haben, und führt eine eigene automatische Einrückung (zusätzlich zu Ihrer 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 man ssh für mehr Details.

36
exussum

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 zu diesen sollten Sie das gewünschte Verhalten mit den Umschaltern :set paste Erhalten, indem Sie Ihren formatierten Code einfügen und :set nopaste Einfügen, um das normale Verhalten wiederherzustellen.

8
casey