Wenn ich Code in mein Mac OS X-Terminalfenster in vim einfüge, wird jede Zeile eingerückt. Für jede Zeile wird ein Einzug hinzugefügt, damit der Text so aussieht ...
"ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum."
Meine derzeitige Problemumgehung besteht darin, den Text zuerst in den Textmate-Texteditor einzufügen, der die korrekte Formatierung beibehält. Dann speichere ich diese Datei und öffne sie in vim. Dann benutze ich Vim Yank, um es einzufügen.
Gibt es eine Einstellung in meiner .vimrc, die dieses Verhalten ändern könnte? Oder ist das ein Terminalproblem?
:set paste
. Das Einfügen in Klammern ist in vim 8 standardmäßig verfügbar. Es wird jedoch nur aktiviert, wenn vim glaubt, dass Sie sich in einem Xterm-kompatiblen Terminal befinden. Es gibt verschiedene Möglichkeiten, diese Antwort auf vi.stackexchange anzuzeigen.Antworten:
Innerhalb von vim:
quelle
UPDATE: Vim 8 bietet native Unterstützung für den Einfügemodus in Klammern . Es ist standardmäßig aktiviert. Siehe das Hilfethema von Vim
xterm-bracketed-paste
. Benutzer müssen nichts mehr tun, um Vim so zu konfigurieren, dass dies unterstützt wird.Ab Mac OS X Lion 10.7 unterstützt Terminal den Einfügemodus in Klammern, mit dem der Terminalemulator dem mit dem tty verbundenen Programm mitteilen kann, wenn der Benutzer Text einfügt, sodass das Programm ihn nicht als Bearbeitungsbefehl interpretiert. Programme, die dies unterstützen, senden dem Terminal eine Escape-Sequenz, um diesen Modus zu aktivieren, in dem das Terminal eingefügten Text mit zwei Escape-Sequenzen umgibt, die den Start und das Ende identifizieren.
Um dies in Vim zu aktivieren, fügen Sie den folgenden Code in Ihre ~ / .vimrc-Datei ein:
Dies führt dazu, dass Vim beim Umschalten des Terminals zum / vom alternativen Bildschirm † (t_ti, t_te) den Einfügemodus in Klammern aktiviert / deaktiviert (ESC [? 2004 h, ESC [? 2004 l). Wenn die Escape-Sequenz empfangen wird, die den Beginn eines Einfügens anzeigt (ESC [200 ~), wird der Einfügemodus aktiviert (Einfügen einstellen) und bei Bedarf in den Einfügemodus umgeschaltet ("i"). Wenn es den passenden Marker für das Ende des Einfügens (ESC [201 ~) erhält, deaktiviert es den Einfügemodus (Pastetoggle) und bleibt im Einfügemodus. Die
cmap
Befehle sorgen dafür, dass die Vim-Befehlszeile die Escape-Sequenzen ignoriert und den eingefügten Text unverändert akzeptiert.Beachten Sie, dass dies den Einfügemodus in Klammern nur aktiviert, wenn der Wert $ TERM mit "xterm ..." beginnt. Wenn Sie $ TERM auf etwas anderes setzen, möchten Sie diesen Test möglicherweise überarbeiten, um Ihren $ TERM-Wert einzuschließen. Sie können den Test auch ganz weglassen, da dies nicht unbedingt erforderlich ist. Es wird lediglich versucht, darauf zu achten, dass keine Aktionen ausgeführt werden, die möglicherweise nicht mit einem anderen Terminaltyp kompatibel sind.
In Terminal funktioniert dies mit allen verschiedenen Einfügebefehlen sowie per Drag & Drop.
† Das Terminal verfügt über einen Hauptbildschirm und einen "alternativen" Bildschirm. Jeder Bildschirm hat seinen eigenen Inhalt und Status. Text auf dem alternativen Bildschirm wird nicht in das Scrollback-Protokoll gescrollt. Es wird normalerweise von Programmen verwendet, die die Kontrolle über den gesamten Bildschirm übernehmen und daher als "Vollbild" -Programme bezeichnet werden. Dazu gehören beispielsweise vim, emacs, less und top.
quelle
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>
t_SI
undt_EI
anstelle vont_ti
bzw.t_te
ändern.Fügen Sie zusätzlich zu den anderen Antworten hinzu, wenn Sie den Einfügemodus schnell umschalten möchten
zu Ihrem .vimrc. Jetzt können Sie den Einfügemodus durch Drücken von F2 (oder einer beliebigen Taste) umschalten.
quelle
Eine andere Möglichkeit, dies zu tun, vorausgesetzt, Sie haben Ihre System-Zwischenablage ordnungsgemäß eingerichtet, ist dies
Dies wird aus der System-Zwischenablage eingefügt.
quelle
"*p
oder"+p
. Das*
Register ist die primäre X11-Auswahl und+
die Zwischenablage. Ich weiß nicht, ob Mac OS X das gleiche Konzept wie X11 hat.In vim
wenn Sie es deaktivieren möchten
quelle
:set paste!
um es umzuschalten.Wenn Sie in einem Terminal arbeiten, verarbeitet das vim-Klammer-Einfügen- Vim-Plugin automatisch Pasten, ohne dass vor oder nach dem Einfügen Tastenanschläge erforderlich sind.
Dies funktioniert in Terminal, iTerm2 und allen "modernen" x-term-kompatiblen Terminals, die den Einfügemodus in Klammern unterstützen. Als zusätzlichen 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.
Das Plugin ist im Grunde eine verpackte Version der Funktionalität, die @Chris Page in seiner Antwort aufgeführt hat .
quelle