Pregunta Desactivando sangría automática al pegar texto en vim


Estoy haciendo el esfuerzo de aprender Vim.

Cuando pego código en mi documento desde el portapapeles, obtengo espacios adicionales al comienzo de cada nueva línea:

line
  line
    line

Sé que puedes desactivar la sangría automática pero no puedo hacer que funcione porque tengo otras configuraciones en conflicto o algo así (que se ven bastante obvias en mi .vimrc pero no parecen importar cuando las saco).

¿Cómo desactivo la sangría automática cuando pego el código pero todavía tengo la sangría automática de vim cuando estoy escribiendo el código? Aquí está mi .vimrc archivo:

set expandtab  
set tabstop=2  
set shiftwidth=2  
set autoindent  
set smartindent  
set bg=dark  
set nowrap  

955
2018-03-25 09:52


origen


Respuestas:


Para desactivar la autoinscripción al pegar código, hay un modo especial de "pegar".

Tipo

:set paste

Luego pega tu código. Tenga en cuenta que el texto en la información sobre herramientas ahora dice -- INSERT (paste) --.

Después de pegar el código, apague el modo de pegado, para que la sangría automática cuando escriba funcione correctamente nuevamente.

:set nopaste

Sin embargo, siempre me pareció engorroso. Es por eso que mapeo <F3> de modo que pueda cambiar entre los modos pegar y no pegar mientras edita el texto!  Yo agrego esto a .vimrc

set pastetoggle=<F3>

1688
2018-03-25 10:02



Para evitar efectos no deseados al pegar, hay una opción que debe establecerse:

set paste

Un comando útil para tener en tu .vimrc es set pastetoggle=<F10> o algún otro botón, para alternar fácilmente entre pegar y no pasar.


247
2018-03-25 10:15



Usualmente uso :r! cat y luego pegar ( shift + insert ) el contenido, y CTRL+D.

No es necesario habilitar y deshabilitar, uso directo.


120
2018-03-30 12:50



Si está trabajando localmente, puede pegar desde el portapapeles del sistema con la secuencia de teclas:

"+p

Este es un comando vim adecuado, por lo que no debe preocuparse por ingresar a un modo de inserción o desactivar la autoinscripción primero.

Por supuesto, si está trabajando de forma remota (consola a través de SSH, por ejemplo), entonces esto no funcionará y debería ir al :set noai, inserte el modo, pegue en la consola, deje el modo de inserción, :set ai ruta como se describe en otro lugar.


77
2017-11-05 07:45



Los usuarios de Mac pueden evitar el formateo automático leyendo directamente de la mesa de trabajo con:

:r !pbpaste

35
2017-08-28 12:58



Aquí hay una publicación por alguien que descubrió cómo reasignar el evento pegar para activar automáticamente el modo pegar y luego retroceder. Funciona para mí en tmux / iTerm en MacOSX.


18
2018-02-08 20:30



Agrega esto a tu ~/.vimrc y solo tendrás que presionar F2 antes y después de pegar:

set pastetoggle=<F2>

12
2018-03-22 17:27



Mientras configura el modo de pegar con paste/nopaste/pastetoggle está perfectamente bien, todavía tiene que habilitar manualmente el modo pegar antes de pegar y deshabilitar el modo pegar después de pegar. Siendo la persona perezosa que soy, a continuación, es la mejor solución que he encontrado hasta ahora, que alterna automáticamente el modo pegar cuando pegas.

Aquí hay un pequeño truco que usa el modo de pegado entre corchetes del terminal para   establece / desarma automáticamente el modo de pegar de Vim cuando pegas. Poner siguiente   en tu .vimrc:

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Ahora puede pegar sin activar o desactivar explícitamente el modo pegar: es   manejado automáticamente para usted.

Fuente: Coderwall


12
2017-07-08 04:00