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:
if &term =~ "xterm.*"
let &t_ti = &t_ti . "\e[?2004h"
let &t_te = "\e[?2004l" . &t_te
function! XTermPasteBegin(ret)
set pastetoggle=<Esc>[201~
set paste
return a:ret
endfunction
map <expr> <Esc>[200~ XTermPasteBegin("i")
imap <expr> <Esc>[200~ XTermPasteBegin("")
vmap <expr> <Esc>[200~ XTermPasteBegin("c")
cmap <Esc>[200~ <nop>
cmap <Esc>[201~ <nop>
endif
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.
: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.