Kopieren und Einfügen von Bildern durch Einrückungen

2562
Luke

Immer, wenn ich etwas aus einer anderen Anwendung kopiere und dann in vim einfüge, wird der Einzug durcheinander gebracht.

Zum Beispiel habe ich gerade versucht, die manifest.json-Datei aus dem Hallo-Welt-Tutorial zum Erstellen von Chrome-Erweiterungen zu kopieren.

Es sieht aus wie das:

{ "manifest_version": 2,  "name": "One-click Kittens", "description": "This extension demonstrates a browser action with kittens.", "version": "1.0",  "permissions": [ "https://secure.flickr.com/" ], "browser_action": { "default_icon": "icon.png", "default_popup": "popup.html" } } 

aber wenn ich es in vim einfügen, sieht es so aus: Kopieren und Einfügen von Bildern durch Einrückungen

Mein vimrc ist wie folgt:

"se t_Co=256 syntax enable  set nowrap set mouse=a set tabstop=4 set softtabstop=4 set shiftwidth=4 set expandtab  set number set showcmd set cursorline set showmatch  execute pathogen#infect() "filetype plugin indent on  "folding settings set foldmethod=indent "fold based on indent set foldnestmax=10 "deepest fold is 10 levels set nofoldenable "dont fold by default set foldlevel=1   set clipboard=unnamed "share one clipboard for everyhting  

Es hat etwas mit dieser Zeile zu tun:

execute pathogen#infect() "filetype plugin indent on 

Wenn ich es auskommentiere, ist das Problem gelöst. Dies ist jedoch das, was ich für das automatische Einrücken verwende, wenn ich in Python programmiere. Gibt es eine andere Möglichkeit, automatisch einzurücken?

5
Wie füge ich mit mittlerer Maustaste ein? Lesen Sie `: help 'paste' 'für eine Erklärung und schalten Sie diese Option vor / nach dem Einfügen um oder fügen Sie sie in Vim ein (über das Register` +', z. B. `" + p "). Ingo Karkat vor 9 Jahren 0
Woah, also habe ich immer mit Rechtsklick und Einfügen eingefügt, aber ich habe es einfach mit der mittleren Maustaste probiert und es funktionierte wie erwartet. Luke vor 9 Jahren 0
Ah gut! Ich habe meinen Kommentar zu einer richtigen Antwort erweitert. Bitte akzeptieren Sie dies, indem Sie auf das nebenstehende Häkchen klicken. Ingo Karkat vor 9 Jahren 0

4 Antworten auf die Frage

6
Ingo Karkat

Im Terminal kann Vim nicht zwischen eingetipptem Text (an dem Sie automatisch einrücken möchten) und eingefügtem Text unterscheiden. Es gibt also die 'paste'Option (und 'pastetoggle'zur Vereinfachung der Handhabung), die, wenn gesetzt, die automatische Formatierung und -Einrichtung deaktiviert. Eine Alternative ist die Verwendung von grafischem GVIM, das dies erkennen kann.

Oder Sie verwenden den Zugriff auf die Zwischenablage von Vim (sofern konfiguriert und funktionieren, was Sie ausprobieren müssen) und die Register "*/ "+für die Auswahl / System-Zwischenablage verwenden, z . B. über "+poder :put +. Vielleicht funktioniert das Einfügen mit der mittleren Maustaste auch einfach; Versuch es!

5
Dirk

: einfügen einfügen

oder sehen Sie http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

(herearesomecharsbecusesuperuser.com, denke ich, hortanswersarenotanygoodanswers)

Das Problem wurde dadurch nicht behoben Luke vor 9 Jahren 0
Das hat bei mir funktioniert. Außerhalb des Einfügemodus habe ich den Befehl `: set paste` eingegeben, die Eingabetaste gedrückt und dann den Befehl + v (Ich bin auf einem Mac) zum Einfügen eingefügt. Dabei wurde mein Inhalt eingefügt, ohne dass die Einrückung beschädigt wurde. : set paste macht es nicht selbst, es richtet es nur so ein, dass Sie es tun können. Wahrscheinlich müssen Sie:: nopaste `hinterher setzen, um die normalen vim-Funktionen wieder herzustellen. RustyToms vor 6 Jahren 0
1
wallyk

Eine Möglichkeit, die für Sie möglicherweise keine Option ist, ist die Verwendung gvimvon vim. Letzteres kann das Einfügen von der schnellen Texteingabe unterscheiden. Von vim's Hilfe für :paste:

'paste' boolean (default off) global  Put Vim in Paste mode. This is useful if you want to cut or copy some text from one window and paste it in Vim. This will avoid unexpected effects. Setting this option is useful when using Vim in a terminal, where Vim cannot distinguish between typed text and pasted text. In the GUI, Vim knows about pasting and will mostly do the right thing without 'paste' being set. The same is true for a terminal where Vim handles the mouse clicks itself. This option is reset when starting the GUI. Thus if you set it in your .vimrc it will work in a terminal, but not in the GUI. Setting 'paste' in the GUI has side effects: e.g., the Paste toolbar button will no longer work in Insert mode, because it uses a mapping. When the 'paste' option is switched on (also when it was already on): - mapping in Insert mode and Command-line mode is disabled - abbreviations are disabled - 'textwidth' is set to 0 - 'wrapmargin' is set to 0 - 'autoindent' is reset - 'smartindent' is reset - 'softtabstop' is set to 0 - 'revins' is reset - 'ruler' is reset - 'showmatch' is reset - 'formatoptions' is used like it is empty These options keep their value, but their effect is disabled: - 'lisp' - 'indentexpr' - 'cindent' NOTE: When you start editing another file while the 'paste' option is on, settings from the modelines or autocommands may change the settings again, causing trouble when pasting text. You might want to set the 'paste' option again. When the 'paste' option is reset the mentioned options are restored to the value before the moment 'paste' was switched from off to on. Resetting 'paste' before ever setting it does not have any effect. Since mapping doesn't work while 'paste' is active, you need to use the 'pastetoggle' option to toggle the 'paste' option with some key. 
0
Andrew

Eine der besten Lösungen für dieses Problem ist die Verwendung des eingeklammerten Einfügungs-Plugins: https://github.com/ConradIrwin/vim-bracketed-paste. Mit dieser Option können Sie direkt in vim einfügen, ohne sich um den Einzug sorgen zu müssen schief gehen .. und ohne dass Sie vor dem Einfügen etc. verschiedene Tasten drücken müssen