2012-09-25 22 views
9

Ich verwende die Tabulatortaste einrücken meines Python-Code in Vim einfügen, aber wenn ich kopiere und einen Block Vim ersetzt mit 4 Leerzeichen jedes Register einfügen, die ein IndentationErrorWie Registerkarten zu halten, wenn in Vim

wirft Ich habe versucht, Einstellung :set paste wie in verwandten Fragen vorgeschlagen, aber es macht keinen Unterschied

Andere Websites Einfügen ‚Tabless‘ Code und mit dem visuellen Editor erneut indent vorschlagen, aber dies ist nicht gut gehen, wenn es um große Blöcke kommt

Gibt es irgendwelche Einstellungen, die ich auf vim anwenden kann, um Registerkarten beim Kopieren/Einfügen zu behalten?

Vielen Dank für jede Hilfe bei dieser :)

edit:

Ich bin Kopieren und Einfügen in vim die Standard-gnome-terminal-Techniken (Strg + Umschalt + c/Maus etc.)

mein .vimrc ist:

syntax on 
set ts=4 
if has("terminfo") 
let &t_Co=8 
let &t_Sf="\e[3%p1%dm" 
let &t_Sb="\e[4%p1%dm" 
else 
let &t_Co=8 
let &t_Sf="\e[3%dm" 
let &t_Sb="\e[4%dm" 
endif 

ich sah, dass ts -> Tab für die Texteingabe zu n-Sets hält, aber nicht wissen, wha t Wert würde ein Tab-Zeichen beibehalten

+0

Fügen Sie in vim oder von vim in ein anderes Programm oder von einem anderen Programm in vim ein? –

+0

Was sind Ihre Einrückungseinstellungen? 'tabstop',' expandtab', 'shiftwidth',' shiftround', 'autoindent',' copeindent'. – romainl

+0

Ich bin Kopieren und Einfügen in Vim, aber mit den Standard Gnome-Terminal-Techniken (Strg + Shift + c oder rechte Maustaste -> kopieren) – Awalias

Antwort

5

Siehe :h tabstop für alle Optionen und wie sie miteinander interagieren.

Diese gute Einstellungen sind, wenn Sie Registerkarten bevorzugen:

set tabstop=4 
set shiftwidth=4 
set noexpandtab 

Mit diesen Einstellungen treffen Sie <Tab> und Sie <Tab> bekommen.

Diese gute Einstellungen sind, wenn Sie Räume bevorzugen:

set tabstop=4 
set shiftwidth=4 
set expandtab 

Mit diesen Einstellungen treffen Sie <Tab> und Sie <Space><Space><Space><Space> bekommen.

Was immer Sie wählen, sollten Sie Ihre Terminal-Tastenbelegungen nicht zum Kopieren/Einfügen verwenden. Inside Vim, sollten Sie mit y "ziehen" und "Put" mit oder P; Optional mit einem spezifischen Register wie "ay/"ap zu/aus dem Inhalt von @a oder "+y/"+p zu yank/Paste in/aus der Systemzwischenablage (wenn Ihr Vim mit Zwischenablage Unterstützung gebaut wurde) zu zerren/setzen.

Als Randnotiz sollten Sie die langen Formularnamen Ihrer Einstellungen verwenden, da sie besser lesbar sind als ihr kurzes Gegenstück. Dein zukünftiges Selbst wird dir danken.

2

Stellen Sie zunächst sicher, dass Ihre Einzugseinstellungen Ihren bevorzugten Stil darstellen, wie in der Antwort von romainl gezeigt.

Wenn Sie Code von außerhalb Vim einfügen müssen (z.eine Auswahl von einem anderen Terminal), der :retab! Befehl kann die Räume zu Tabs reparieren; für den eingefügten Text würde der vollständige Befehl mit dem richtigen Bereich

:'[,']retab! 

Alternativ sein, Sie Einfügen mit dem Befehl "*]p versuchen könnten, die automatisch den Einzug an die Cursorposition anpasst (siehe :help ]p).

5

What romainl said. Außerdem gibt es ein paar andere Einstellungen, die ich nützlich finde. Hier ist ein Auszug aus meinem .vimrc:

set autoindent " always set autoindenting on" 
set smartindent " use smart indent if there is no indent file" 
set tabstop=4 " <tab> inserts 4 spaces" 
set softtabstop=4 " <BS> over an autoindent deletes 4 spaces." 
set smarttab " Handle tabs more intelligently" 
set expandtab " Use spaces, not tabs, for autoindent/tab key." 
set shiftwidth=4 " an indent level is 4 spaces wide." 
set shiftround " rounds indent to a multiple of shiftwidth" 

In vim, geben Sie :h <setting> für jede dieser Einstellungen, um mehr darüber zu erfahren, was sie tun,

1

Ich war Mitte-Klick-Einfügen in ein Terminal vim Instanz . Ich habe dies in meinem vimrc:

set tabstop=2   " (ts) 
set softtabstop=2  " (sts) Turned off with 0 
set shiftwidth=2  " (sw) Used for autoindent, and <<and>> 
set expandtab   " (et) Expand tabs to spaces 

I

lief
:set paste 
:set noexpandtab 

und vim erhalten die Registerkarten, die im Quelltext waren. Ohne die Einstellung expandtab außer Kraft zu setzen, hat vim die Registerkarten im Quelltext automatisch erweitert.