2012-09-25 26 views
9

utilizo la tecla de tabulación para sangrar mi código Python en Vim, pero siempre que puedo copiar y pegar un bloque Vim reemplaza cada pestaña con 4 espacios, lo que plantea un IndentationErrorcómo mantener las pestañas al pegar en Vim

Probé establecer :set paste como se sugiere en cuestiones relacionadas pero no hace ninguna diferencia

Otros sitios sugieren pegar código 'tabless' y usando el editor visual para re-guión, pero esto está pidiendo problemas cuando se trata de grandes bloques

¿Hay alguna configuración que pueda aplicar a vim para mantener las pestañas en copiar/pegar?

Gracias por cualquier ayuda con esto :)

edición:

estoy copiando y pegando dentro de vim utilizando las técnicas estándar gnome-terminal (Ctrl + Shift + C/ratón, etc.)

mi .vimrc es:

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 

miré hacia arriba que el ST -> Fija una tabulación de n para la introducción de texto, pero no saben wha t value mantendría un carácter de tabulación

+0

¿Está pegando dentro de vim, o de vim a otro programa, o de otro programa a vim? –

+0

¿Cuáles son sus configuraciones de sangría? 'tabstop',' expandtab', 'shiftwidth',' shiftround', 'autoindent',' copyindent'. – romainl

+0

Estoy copiando y pegando en vim pero usando las técnicas estándar de gnome-terminal (ctrl + shift + do haciendo clic con el botón derecho -> copiar) – Awalias

Respuesta

5

Consulte :h tabstop para ver todas las opciones y cómo interactúan entre ellas.

Estos son buenos ajustes, si lo prefiere fichas:

set tabstop=4 
set shiftwidth=4 
set noexpandtab 

Con estos ajustes, se golpea y se obtiene <Tab><Tab>.

Estos son buenos ajustes, si lo prefiere espacios:

set tabstop=4 
set shiftwidth=4 
set expandtab 

Con estos ajustes, se golpea y se obtiene <Tab><Space><Space><Space><Space>.

Elija lo que elija, no debe usar los enlaces de las teclas del terminal para copiar/pegar. Dentro de Vim, debe "tirar" con y y "poner" con p o P; opcionalmente usando un registro específico como "ay/"ap para tirar/poner a/del contenido de @a o "+y/"+p para tirar/pegar hacia/desde el portapapeles del sistema (si su Vim está construido con soporte para portapapeles).

Como nota al margen, debe usar los nombres largos de sus configuraciones, ya que son más legibles que sus contrapartes cortas. Tu yo futuro te lo agradecerá.

2

Primero, asegúrese de que la configuración de sangría represente su estilo preferido, como lo ha demostrado romainl en su respuesta.

Si debe pegar código de fuera de Vim (p. Ej.una selección de otro terminal), el comando :retab! puede arreglar los espacios en Pestañas; para el texto pegado el comando completo con el rango adecuado sería

:'[,']retab! 

Alternativamente, usted podría intentar pegar con el comando "*]p, que adapta automáticamente el guión a la posición del cursor (ver :help ]p).

5

What romainl said. Además, hay algunas otras configuraciones que me parecen útiles. He aquí un extracto de mi .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" 

En vim, introduzca :h <setting> para cada uno de estos valores para obtener más información sobre lo que hacen,

1

que era medio-click-pegar en un caso terminal de vim . Tengo esto en mi 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 

me corrieron

:set paste 
:set noexpandtab 

y vim conservan las pestañas que estaban en el texto original. Sin anular mi configuración expandtab, vim expandía automáticamente las pestañas en el texto de origen.

Cuestiones relacionadas