2012-09-25 13 views
9

Io uso il tasto tab per far rientrare il mio codice Python in Vim, ma ogni volta che copiare e incollare un blocco di Vim sostituisce ogni scheda con 4 posti, che solleva un IndentationErrorcome mantenere le schede quando si incolla in Vim

ho provato impostazione :set paste come suggerito in questioni connesse, ma non fa alcuna differenza

Altri siti suggeriscono incollare il codice 'tabless' e utilizzando l'editor visuale di ri-trattino, ma questo è in cerca di guai quando si tratta di grandi blocchi

Ci sono delle impostazioni che posso applicare a Vim per mantenere le schede su copia/incolla?

Grazie per qualsiasi aiuto con questo :)

edit:

sto copiando e incollando da vim utilizzando le tecniche standard di gnome-terminal (Ctrl + Shift + c/mouse, ecc)

mia Vimrc è:

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 

Alzai lo sguardo che ts -> Imposta tabulazioni al n per l'immissione di testo, ma non so wha t valore manterrebbe un carattere di tabulazione

+0

Stai incollando in vim, o da vim a un altro programma o da un altro programma a vim? –

+0

Quali sono le tue impostazioni di indentazione? 'tabstop',' expandtab', 'shiftwidth',' shiftround', 'autoindent',' copyindent'. – romainl

+0

Sto copiando e incollando in vim ma usando le tecniche standard di gnome-terminal (ctrl + shift + c o tasto destro del mouse -> copia) – Awalias

risposta

5

Vedere :h tabstop per tutte le opzioni e in che modo interagiscono tra loro.

Questi sono buoni impostazioni, se si preferisce schede:

set tabstop=4 
set shiftwidth=4 
set noexpandtab 

Con queste impostazioni, si colpisce <Tab> e si ottiene <Tab>.

Questi sono buoni impostazioni chi preferisce gli spazi:

set tabstop=4 
set shiftwidth=4 
set expandtab 

Con queste impostazioni, si colpisce <Tab> e si ottiene <Space><Space><Space><Space>.

Qualsiasi cosa scegliate, non dovete usare le associazioni dei tasti del terminale per copiare/incollare. All'interno di Vim, dovresti "strattonare" con e "mettere" con p o P; opzionalmente utilizzando un registro specifico come "ay/"ap per eseguire lo yank/put su/dal contenuto di @a o "+y/"+p per lo yank/incolla su/dagli Appunti di sistema (se Vim è costruito con supporto per gli Appunti).

Come nota a margine, è necessario utilizzare i nomi di modulo lunghi delle impostazioni in quanto sono più leggibili rispetto alla loro controparte breve. Il tuo sé futuro ti ringrazierà.

2

Prima di tutto, assicurati che le impostazioni del rientro rappresentino il tuo stile preferito, come ha dimostrato Romainl nella sua risposta.

Se è necessario incollare il codice dall'esterno Vim (ad es.una selezione da un altro terminale), il comando :retab! può correggere gli spazi in Tab; per il testo incollato il comando completo con la giusta gamma sarebbe

:'[,']retab! 

In alternativa, si potrebbe provare a incollare con il comando "*]p, che si adatta automaticamente il rientro alla posizione del cursore (vedi :help ]p).

5

What romainl said. Inoltre, ci sono alcune altre impostazioni che trovo utili. Ecco un estratto dal mio 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, digitare :h <setting> per ciascuna di queste impostazioni per saperne di più su ciò che fanno,

1

ero centrale del mouse-incolla in un'istanza di vim terminale . Ho questo nel mio 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 

ho corse

:set paste 
:set noexpandtab 

e vim conservate le schede che erano nel testo di partenza. Senza escludere l'impostazione expandtab, vim stava espandendo automaticamente le schede nel testo sorgente.

Problemi correlati