¿Es posible pegar en modo insertar en Vim?
¿Es posible pegar en modo insertar en Vim?
Respuestas:
Mientras está en el modo de inserción, presione CTRL-R {register}
Ejemplos:
CTRL-R *
se insertará en el contenido del portapapeles CTRL-R "
(el registro sin nombre) inserta la última eliminación o extracción. Para encontrar esto en el tipo de ayuda de vim :h i_ctrl-r
CTRL-R *
solo funciona en GVIM o versiones compiladas para interactuar con x. Escribe vim --version
y busca +xterm_clipboard
. Si no tiene eso, necesita una versión diferente de vim. ( vim.wikia.com/wiki/Accessing_the_system_clipboard )
+clipboard
, pero si lo tienes +xterm_clipboard
, deberías tener eso de todos modos. En algunos sistemas operativos xterm_clipboard
no es aplicable.
*
registro de sistemas en X se puede pegar con un clic del mouse mientras +
que el tradicional copiar / pegar. standards.freedesktop.org/clipboards-spec/clipboards-latest.txt
Si no desea que Vim mangle formato en texto pegado entrante, también puede ser que desee considerar el uso: :set paste
. Esto evitará que Vim vuelva a etiquetar su código. Cuando termine de pegar, :set nopaste
volverá al comportamiento normal.
También es posible alternar el modo con una sola tecla, agregando algo como set pastetoggle=<F2>
a su .vimrc. Más detalles sobre el cambio automático de sangría están aquí .
:set nopaste
desactivará el modo pegar
:set paste!
probablemente establecer pegar está muy cerca en su historial de comandos, por lo que simplemente puede presionar ':', luego flecha arriba y agregar un '!'.
:set paste!
Gracias :)
!
al final del comando en vim
activa y desactiva el comando. De esta manera, no tiene que escribir, :set nopaste
sino que puede desplazarse hacia arriba por su historial y ejecutar el mismo comando ( :set paste!
) nuevamente.
No, no directamente. Sin embargo, lo que puede hacer es salir rápidamente del modo de inserción para una sola operación en modo normal Ctrl-Oy luego pegar desde allí, lo que terminará volviendo a ponerlo en modo de inserción.
Combo clave: Ctrl-O p
EDITAR: Interesante. Parece que hay una manera que otras personas han enumerado.
esc + p
?
esc + p + i
y definitivamente más fácil de escribir queCTRL-R + "
CTRL-R "
. Por ejemplo, aunque la configuración de vimrc puede cambiar esto, pegar algo en una nueva línea usando CTRL-O p
hace que su sangría desaparezca.
Mientras está en modo de inserción, puede usar Ctrl-R {register}
, donde el registro puede ser:
+
para el portapapeles*
para el portapapeles X (último texto seleccionado en X), "
para el registro sin nombre (última eliminación o extracción en Vim),:h registers
).Ctrl-R {register}
inserta el texto como si estuviera escrito.
Ctrl-R Ctrl-O {register}
inserta el texto con la sangría original.
Ctrl-R Ctrl-P {register}
inserta el texto y lo sangra automáticamente.
Ctrl-O
se puede usar para ejecutar cualquier comando de modo normal antes de volver al modo de inserción, por
Ctrl-O "+p
lo que también se puede usar, por ejemplo.
Para obtener más información, vea la documentación con :h i_ctrl-r
Puede usar esto para pegar desde el portapapeles con Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
Y esto para extraer la selección visual en el portapapeles con Ctrlc:
vnoremap <C-c> "+y
Si también desea usar el portapapeles de forma predeterminada para el vim yanking / pegado clásico ( y/ p) en modo normal, aquí hay una opción de configuración que lo hace:
set clipboard=unnamedplus
Con esta configuración, por ejemplo, puede tirar primero en modo normal y luego pegar con el Ctrlvmodo de inserción. Además, puede pegar texto de diferentes instancias vim y diferentes aplicaciones.
Otra opción es:
set clipboard=unnamed
Luego podrá seleccionar algo arrastrando el mouse en su entorno X y luego pegarlo en vim. Pero (por alguna razón) no podrá tirar algo ( y) en Vim y shiftinsertluego en otro lugar, lo que probablemente sea bastante limitante.
Vim documenta sobre esto: http://vim.wikia.com/wiki/Accessing_the_system_clipboard
Para pegar desde registros personalizados, puede seguir las otras respuestas :). Esta respuesta se trata principalmente de integrar Vim con el portapapeles de su sistema.
Tenga en cuenta que para set clipboard=unnamedplus
y set clipboard=unnamed
para trabajar, debe usar gvim o vimx ( vim-X11
): se compilan con ellos +xterm_clipboard
. Opcionalmente, puede poner esto en su .bashrc
alias vim
con vimx
:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
Puede averiguar si su vim tiene o no +xterm_clipboard
la información proporcionada por vim --version
.
:set paste
y el bizantino <leader><leader> * y
es incluso remotamente deseable? Para no parecer demasiado comprometido, tengo una curiosidad genuina sobre qué filosofía refleja esto, o si es solo una desgracia histórica.
inoremap <S-Insert> <F12><C-r>+<F12>
(uso F12 como pastetoggle). Gracias.
Si configura Vim para usar el portapapeles del sistema ( :set clipboard=unnamed
), cualquier texto que copie en Vim se puede pegar con Shift+ Insert. Shift+ Insertes simplemente una combinación de teclas para pegar en todo el sistema operativo ( Ctrl+ Insertes la 'copia' correspondiente).
p
Pegará el texto en el portapapeles?
Shift + Insert
para pegar el texto, necesitamos estar en el modo de inserción.
También puede usar el botón central del mouse para pegar en modo de inserción (solo Linux).
Puede ingresar al -- INSERT (past) --
modo a través de:
o
:set paste
e ingresar al modo de inserción ( :set nopaste
para deshabilitar)una vez en -- INSERT (past) --
modo, simplemente use la función de pegar de sus sistemas (por ejemplo, CtrlShiftven Linux, Cmdven Mac OS)
Esta estrategia es muy útil cuando se usa vim sobre ssh.
Si. En Windows Ctrl+ Vy en Linux presionando ambos botones del mouse casi simultáneamente.
En Windows, creo que esta línea en mi _vimrc probablemente lo hace:
source $VIMRUNTIME/mswin.vim
En Linux no recuerdo cómo lo hice. Parece que probablemente eliminé alguna línea del archivo .vimrc predeterminado.
Un mapa personalizado parece apropiado en este caso. Esto es lo que uso para pegar elementos arrancados en modo de inserción:
inoremap <Leader>p <ESC>pa
Mi Leader
clave aquí es \
; esto significa que presionar \p
en modo de inserción pegaría los elementos / líneas previamente extraídos.
Solo agrega el mapa:
" ~/.vimrc
inoremap <c-p> <c-r>*
reinicie vim y cuando presione Crtl+p
en modo insertar, se pegará el texto copiado