Wie kann ich neuen Text ohne automatische Einrückung in jede neue Zeile kopieren / einfügen?

7

Wie ich jetzt einfüge:

  1. Rechtsklick / Kopieren oder einfach markieren.
  2. Rechtsklick / Einfügen oder Mittelklick oder STRG + UMSCHALT + V.
  3. Einrückungen erscheinen in zunehmenden Intervallen: 0, 2, 4, 6, +

Frage zur Hand:

Bei früheren Recherchen habe ich festgestellt, dass die schnelle und schmutzige Lösung Folgendes in meine .vimrcDatei eingibt : set paste. Diejenigen, die diesen Befehl vorgeschlagen haben, gaben jedoch an, dass dies set pasteAuswirkungen auf andere Einstellungen hat. (Ich vergesse es auf Anhieb.)

Ich würde gerne wissen, welche Option ich einstellen kann, die einfach ohne zusätzliche Einrückung einfügt. Wenn das so ist'paste' , würde ich gerne wissen, was genau dieser Befehl bewirkt.

Ich sehe nur einen Unterschied. Wenn in Vim, -- INSERT --wird-- INSERT (paste) --

onebree
quelle
Fügen Sie im Einfügemodus ein? Im normalen Modus erhalte ich immer die Einrückung wie im gezogenen Text, es sei denn, ich füge mit ein ]p, wodurch die Einrückung eingefügt und angepasst wird, um korrekt zu sein.
Gonçalo Ribeiro
Siehe auch Festlegen der Einfügeoption, jedoch nur für eine Einfügung
Gilles 'SO - hör auf böse zu sein'

Antworten:

11

OK, hier ist ein "Yank & Put" -Primer…

In Vim sind die Hauptbefehle zum Ziehen (Kopieren) und Einfügen (Einfügen) yund p.

Durch Ziehen wird der gezogene Text in ein Register eingetragen. Dieses Register ist "standardmäßig das unbenannte Register, es können jedoch auch andere Register verwendet werden:

"ay    " yank into register a
"by    " yank into register b
"+y    " yank into clipboard register
[…]

In ähnlicher Weise wird beim Einfügen Text aus einem Register eingefügt. Dieses Register ist standardmäßig das unbenannte Register, es können jedoch auch andere Register verwendet werden:

"ap    " put from register a
"+p    " put from clipboard register
"3p    " put from the register 3
[…]

Diese Befehle werden "Rechtsklick / Einfügen oder Mittelklick oder STRG + UMSCHALT + V" vorgezogen, da der Text ohne besondere Behandlung in den Puffer "eingefügt" wird. Mit "Rechtsklick / Einfügen oder mittlerer Klick oder STRG + UMSCHALT + V" wird der Text so in den Puffer eingefügt, als ob Sie ihn eingegeben hätten, und wird daher automatisch eingerückt / formatiert.

Wenn Sie SSH ohne X-Weiterleitung oder Vim ohne Unterstützung der Zwischenablage nicht verwenden "+poder "*püber SSH arbeiten können, pastedeaktiviert die Option das automatische Einrücken und eine Reihe anderer sehr nützlicher Optionen, damit Ihr eingegebener Text nicht geändert wird.

Wie in erwähnt :help 'paste, haben die Optionen möglicherweise sehr schlimme Nebenwirkungen. Daher ist es wichtig, sie sofort nach dem Einfügen Ihres Textes zu deaktivieren:

:set paste
(paste)
:set nopaste

Dieser Tanz ist offensichtlich ein Schmerz im Arsch, daher gibt es eine andere Option, mit der Sie eine spezielle Verknüpfung zum Umschalten definieren können paste:

set pastetoggle=<F12>

Das lindert die Schmerzen leicht:

<F12>
(paste)
<F12>

Aber es ist immer noch ein Schmerz.

Wenn Sie können, wird empfohlen, ein geeignetes Vim mit Unterstützung für die Zwischenablage zu installieren, damit Sie "*poder "+p(je nachdem, wie Sie Ihren Text kopiert haben) Text richtig einfügen können .

  • Unter Mac OS X: Installieren Sie MacVim.
  • auf Debian-basierten Systemen: Installieren Sie das vim-gnome- oder vim-gtk-Paket.
  • unter CentOS: Installieren Sie das vim-erweiterte Paket.

Referenz:

:help p
:help y
:help registers
:help 'paste'
:help 'pastetoggle'
romainl
quelle
1
Es ist nicht hilfreich, etwas als "den richtigen Weg" zu beschreiben, ohne zu erklären, warum oder ein Gegenbeispiel anzugeben.
Alxndr
1
Ich bin mit einem @alxndr einverstanden. Zunächst einmal habe ich kein Ubuntu, was in meiner Frage angegeben ist. Zweitens gibt es keinen Kontext zur Verwendung "*p. Tippe ich es im Ansichtsmodus? Oder zum hinzufügen .vimrc?
Onebree
@onebree ist wie p, aber zum Einfügen aus der OS-Zwischenablage. Siehe vi.stackexchange.com/q/84/205
Muru
Bitte definieren Sie das dann in Ihrer Antwort.
Onebree
1
Ich denke, Sie suchen nach Option zum Einfügen festlegen, aber nur für eine Einfügung
Gilles 'SO - hör auf böse zu sein'
7

VIM verfügt über eine andere Einstellung pastetoggle, die die Zuordnung für das Umschalten des Einfügemodus definiert. Das ist, was Sie tun möchten, und dann können Sie einfach den Einfügemodus aktivieren und dann einfügen.

Obwohl ich das etwas weniger intuitiv finde und oft festgestellt habe ]p, dass es eine bessere Möglichkeit ist, Code einzufügen, anstatt nur zu verwendenp

Dhruva Sagar
quelle
6

Wenn Sie einen ziemlich modernen Terminalemulator verwenden, können Sie das Plugin vim-bracketed-paste installieren .

Aus den Dokumenten:

Es ist bekannt, dass xterm, urxvt, iTerm2, gnome-terminal (und andere Terminals, die libvte verwenden) funktionieren.

Nach der Installation können Sie im Einfügemodus einfach wie gewohnt einfügen und das Einfügen und Deaktivieren des Einfügens wird für Sie erledigt.

Jay Thompson
quelle
Ich bin GNOME TERMINAL 3.8.4
onebree
Dies sollte für Sie funktionieren. Gnome Terminal unterstützt seit einiger Zeit das Einfügen in Klammern.
Jay Thompson
Eine weitere Plugin-Option: Vim-unimapired bietet yo/ yOOperatoren, die ound OOperatoren imitieren , jedoch nur, set pastebis der Einfügemodus beendet wird.
Peter Rincker
3

Um Text ohne automatisches Einrücken in vim einzufügen, müssen Sie Vim in den Einfügemodus versetzen. Dies ist nützlich, wenn Sie Text aus einem Fenster ausschneiden oder kopieren und in Vim einfügen möchten. Dadurch werden unerwartete Auswirkungen vermieden. Siehe: :help pastefür weitere Details.

Um das Leben zu erleichtern, gibt es eine pastetoggleVariable, die die Tastenfolge angibt, mit der die Option 'Einfügen' ( :set invpaste) umgeschaltet wird .

Wenn Sie beispielsweise F2die automatische Indentierung beim Einfügen in das Terminal in X deaktivieren möchten, können Sie den folgenden Code in Ihre .vimrcDatei verwenden:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
Kenorb
quelle
1

Unimpaired.vim löst dieses Problem auf die effizienteste Weise, die ich je gesehen habe. Es enthält einige Zuordnungen, um den 'paste'aktivierten Einfügemodus aufzurufen, und deaktiviert ihn dann automatisch, wenn Sie in den normalen Modus zurückkehren. yoöffnet eine neue Zeile unter dem Cursor; yOüber. (Genau wie ound O.)

Das Plugin bietet auch eine Reihe weiterer nützlicher Zuordnungen zum Navigieren in Listen, zum Ändern allgemeiner Einstellungen und für einige raffinierte Textkonvertierungen. Die Zuordnungen sind beispielhaft: Sie fühlen sich in Vim heimisch an, ohne auf vorhandene Funktionen zuzugreifen.

Ich gebe nur die Details im vorherigen Absatz an, da viele nur ungern ein Plugin installieren würden, um das vorliegende Problem zu lösen. Ich denke jedoch, dass sie mit den anderen (nicht verwandten) Dingen, die Unimpaired.vim zu bieten hat, zufrieden wären.

tommcdo
quelle
1

Wenn Sie sich auf einem Server oder System befinden, auf dem Sie die Konfiguration nicht ändern können oder möchten, ist dies am schnellsten

:i!

Dadurch wird der Einfügemodus bei deaktiviertem Autoindent aktiviert, in den Sie Ihren Text einfügen. Wenn Sie fertig sind, müssen Sie eingeben

.

in einer eigenen Zeile, um die Einfügung zu beenden.

Laktak
quelle