Frage Automatischen Einzug beim Einfügen von Text in vim ausschalten


Ich bemühe mich, Vim zu lernen.

Wenn ich Code aus der Zwischenablage in mein Dokument einfüge, erhalte ich am Anfang jeder neuen Zeile zusätzliche Leerzeichen:

line
  line
    line

Ich weiß, dass Sie den automatischen Einzug deaktivieren können, aber ich kann es nicht zum Laufen bringen, weil ich einige andere Einstellungen in Konflikt oder etwas habe (was in meiner .vimrc ziemlich offensichtlich aussieht, aber nicht wichtig zu sein scheint, wenn ich sie herausnehme).

Wie deaktiviere ich die automatische Einrückung, wenn ich Code einfüge, aber beim Schreiben von Code immer noch über einen automatischen Einzug verfügt? Hier ist mein .vimrc Datei:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

955
2018-03-25 09:52


Ursprung


Antworten:


Um AutoIndent beim Einfügen von Code zu deaktivieren, gibt es einen speziellen "Einfügen" -Modus.

Art

:set paste

Dann füge deinen Code ein. Beachten Sie, dass der Text im Tooltip jetzt sagt -- INSERT (paste) --.

Nachdem Sie Ihren Code eingefügt haben, deaktivieren Sie den Einfügemodus, damit das automatische Einrücken bei der Eingabe wieder ordnungsgemäß funktioniert.

:set nopaste

Allerdings fand ich das immer umständlich. Deshalb kartiere ich <F3> so dass es zwischen den Modi paste und nopaste wechseln kann während der Bearbeitung des Textes!  Ich füge das hinzu .vimrc

set pastetoggle=<F3>

1688
2018-03-25 10:02



Um unerwünschte Effekte beim Einfügen zu vermeiden, muss eine Option festgelegt werden:

set paste

Ein nützlicher Befehl in Ihrer .vimrc ist set pastetoggle=<F10> oder eine andere Taste, um einfach zwischen Paste und Nopaste umzuschalten.


247
2018-03-25 10:15



Ich benutze normalerweise :r! cat und dann einfügen ( shift + insert ) der Inhalt und CTRL+D.

Keine Notwendigkeit zu aktivieren und zu deaktivieren, direkte Nutzung.


120
2018-03-30 12:50



Wenn Sie lokal arbeiten, können Sie aus der Systemzwischenablage mit der Tastenfolge einfügen:

"+p

Dies ist ein richtiger vim-Befehl, so dass Sie sich keine Gedanken darüber machen müssen, ob Sie in den Einfügemodus wechseln oder die Autoindent-Funktion zuerst ausschalten.

Natürlich, wenn Sie remote arbeiten (Konsole über SSH, zum Beispiel), dann wird dies nicht funktionieren und Sie sollten die gehen :set noai, Einfügen-Modus, Einfügen in die Konsole, Leave-Insert-Modus, :set ai Route wie an anderer Stelle beschrieben.


77
2017-11-05 07:45



Mac-Benutzer können die automatische Formatierung vermeiden, indem sie direkt aus der Pasteboard lesen mit:

:r !pbpaste

35
2017-08-28 12:58



Hier ist ein Beitrag von jemandem, der herausgefunden hat, wie das Pastenereignis neu zugeordnet wird, um den Pastenmodus automatisch zu aktivieren und dann wieder auszuschalten. Funktioniert für mich in tmux / iTerm auf MacOSX.


18
2018-02-08 20:30



Fügen Sie das zu Ihrem hinzu ~/.vimrc und du musst nur drücken F2 vor und nach dem Einfügen:

set pastetoggle=<F2>

12
2018-03-22 17:27



Beim Einstellen des Einfügemodus mit paste/nopaste/pastetoggle ist vollkommen in Ordnung, Sie müssen den Einfügemodus vor dem Einfügen noch manuell aktivieren und den Einfügemodus nach dem Einfügen deaktivieren. Die faule Person, die ich bin, unten ist die beste Lösung, die ich bisher gefunden habe, die den Einfügemodus beim Einfügen automatisch umschaltet.

Hier ist ein kleiner Trick, der den geklammerten Einfügemodus des Terminals verwendet   setzt den Pasten-Modus von Vim beim Einfügen automatisch ein oder aus. Setzen Sie folgendes   in deiner .vimrc:

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Jetzt können Sie einfügen, ohne den Pastenmodus explizit ein- / auszuschalten - das ist es   behandelt automatisch für Sie.

Quelle: Coderwall


12
2017-07-08 04:00



Ich habe es einfach gesagt set clipboard=unnamed in meinem .vimrc. Dadurch wird der Standard-Buffer-Buffer auf die Zwischenablage von X abgebildet.

Also, wenn ich ein bisschen Text in einem Terminal markiere, kann ich einfach drücken pum es in vim einzufügen. Ähnlich kann ich Dinge in vim zerren (z.B. YY die aktuelle Zeile in den Puffer zu ziehen) und mit der mittleren Maustaste in ein beliebiges Fenster klicken, um es einzufügen.

Keine Ahnung. Ich finde es super praktisch.


9
2018-01-20 11:15



Wenn man in einem Terminal arbeitet, Vim-Klammer-Paste Das vim-Plugin wird automatisch Pasten verarbeiten, ohne dass vor oder nach dem Einfügen Tastatureingaben erforderlich sind.

Es funktioniert durch Erkennen Klammermodus Dies ist eine Escape-Sequenz, die von "modernen" x-term-kompatiblen Terminals wie iTerm2, gnome-terminal und anderen Terminals unter Verwendung von libvte gesendet wird. Als zusätzlicher Bonus funktioniert es auch für tmux-Sitzungen. Ich verwende es erfolgreich mit iTerm2 auf einem Mac, der eine Verbindung zu einem Linux-Server herstellt und tmux verwendet.


9
2018-04-09 03:53



Halte das in deinem ~ / .vimrc und sei glücklich:

" enables :Paste to just do what you want
command Paste execute 'set noai | insert | set ai'

Edit: Nachdenklich, :r !cat ist ein weit besserer Ansatz, da es kurz, semantisch ist und keinen benutzerdefinierten vimrc erfordert. Benutze das stattdessen!


6
2018-06-07 21:25