Estoy trabajando con dos archivos y necesito copiar algunas líneas de un archivo y pegarlas en otro archivo. Sé cómo copiar (yy) y pegar (p) en el mismo archivo. Pero eso no funciona para diferentes archivos. ¿Cómo se hace esto?
Además, ¿hay alguna forma de cortar y pegar? He intentado buscar en Google, pero la mayoría de los recursos solo hablan de copiar y pegar.
vim
copy-paste
vi
cut
macha
fuente
fuente
Respuestas:
Como ya sabe cómo cortar / tirar texto, aquí hay algunas ideas para pegarlo de nuevo en otro archivo:
:e /path/to/other/file
) y pégueloAbra ambos archivos juntos en una ventana dividida y navegue entre ellos usando Ctrl+ w, Up/ Downo bien:
vi -o /path/to/file1 /path/to/file2
fuente
Ctrl
+w
,s
.:sp myfile
que se divide horizontalmente y abre el archivo especificado, pero ¿cómo lo haría si prefiero dividir la ventana verticalmente?Si está utilizando Vim en Windows, puede obtener acceso al portapapeles (copiar / pegar MS) usando:
"*dd - cortar una línea (o 3dd para cortar tres líneas)
"*yy - copie una línea (o 3yy para copiar tres líneas)
"*p - pegar línea (s) en línea después del cursor
"*P - pegar línea (s) en línea antes del cursor
Le permite pegar entre ventanas Vim separadas o entre aplicaciones Vim y PC ( Bloc de notas , Microsoft Word , etc.).
fuente
+
como registro del portapapeles del sistema multiplataforma (Windows y Linux) vs.*
, que es solo Windows (+
funciona igual en Windows que*
).Use las variaciones de me
d
gustadd
para cortar.Para escribir un rango de líneas en otro archivo puede usar:
Donde
<n>
y<m>
son números (o símbolos) que designan un rango de líneas.Para usar el portapapeles del escritorio, eche un vistazo a los
+g
comandos.fuente
ma
, mover a la última líneamb
,. Luego anteponga un'
a la letra de la marca cuando esté usando el comando anterior::'a,'b w filename
Puede abrir el otro archivo y escribir
:r file_to_be_copied_from
. O puedes amortiguar. O vaya al primer archivo, vaya a la línea que desea copiar, escriba"qY
, vaya al archivo que desea pegar y escriba"qP
."
buffer_name, copia en el buffer.Y
Se tira yP
se pone. ¡Espero que ayude!fuente
Aquí hay una forma de hacerlo;
También podría tener ambos archivos visibles. Divida la pantalla con, por ejemplo, Ctrl+ w s.
En cuanto al corte, dcorta y coloca las cosas cortadas en el búfer de extracción. dd"cortará" una línea.
fuente
Estas son todas excelentes sugerencias, pero si conoce la ubicación del texto en otro archivo, use sed con facilidad.
:r! sed -n '1,10 p' < input_file.txt
Esto insertará 10 líneas en un archivo ya abierto en la posición actual del cursor.fuente
:r ! head -n2 file.py
Mientras edita el archivo, marque donde desea que se usen el inicio y el final
ma
- establece laa
marcamb
- establece lab
marcaLuego, para copiar eso en otro archivo, simplemente use el
w
comando:fuente
Actualización 2017-05:
Acabo de descubrir que si agrega la siguiente línea en su archivo vimrc,
entonces Vim está usando el portapapeles del sistema.
Acabo de encontrar que la forma de tirar no funcionará en la forma en que copie contenido entre diferentes ventanas de instancia de Vim. (Al menos, no funciona según mi conocimiento de Vim. No sé si hay otra forma de permitir que funcione).
La forma de tirar solo funciona en la forma en que se abren varios archivos en la misma ventana de acuerdo con mi prueba.
Si desea hacer eso, será mejor que use la forma de cortar y copiar del sistema operativo, como Ctrl+ x, Ctrl+ c(en Windows).
fuente
Estos remaps funcionan como un encanto para mí:
Entonces, cuando estoy en modo visual, selecciono las líneas que quiero y presiono Ctrl+ cy luego Ctrl+ vpara insertar el texto en el archivo receptor. Podrías usar "* y también, pero creo que esto es difícil de recordar a veces.
Esto también es útil para copiar texto de Vim al portapapeles.
Fuente: copiar y pegar entre sesiones utilizando un archivo temporal
fuente
Copiar texto entre dos buffers (== archivos) que se abren en la misma instancia de Vim no es un problema:
Simplemente dar un tirón en un buffer con y(suponiendo que haya marcado un área de copia en modo visual antes), y luego pegar en la otra memoria intermedia con p. También funciona con diferentes pestañas siempre que estén en la misma instancia de Vim.
Cómo abrir dos archivos en la misma instancia de Vim depende de su sistema:
vim file1 file2
--remote-silent
opción para asegurarse de que todos los archivos se abran en la misma instanciaSi abrió los dos archivos en dos instancias diferentes de Vim, entonces debe ir con el portapapeles del sistema: en la primera instancia de Vim, tire el texto en el portapapeles del sistema usando
"+y
(nuevamente, marque el área que se va a tirar en modo visual antes ), y luego ir a la segunda Vim y pegar el portapapeles existe:"+p
.fuente
Objetivo : guardar una parte de un archivo en otro archivo.
Solución :
Guarde el texto seleccionado en el nuevo archivo. Escriba :wSpacey el nombre del nuevo archivo. En realidad verás
:'<,'>w new.txt
Entonces presione Enter
fuente
Mi escenario era que necesito copiar n número de líneas en el medio, n desconocido, del archivo 1 al archivo 2.
fuente
:echo has('clipboard')
debería volver1
0
(por ejemplo, Mac OS X, al menos v10.11 (El Capitan), v10.9 (Mavericks) y v10.8 (Mountain Lion), viene con una versión Vim que no admite el portapapeles), debe instalar un Versión Vim con soporte para portapapeles, digamos víabrew install vim
(no olvides reiniciar tus terminales después de la instalación)PD:
set mouse+=a
a su.vimrc
- le permitirá seleccionar líneas en Vim usando el mouse, sin seleccionar elementos extraños (como números de línea, etc.) AVISO: bloqueará la capacidad de copiar texto seleccionado por el mouse al portapapeles del sistema de Vim .fuente
Ejemplo: archivo A y archivo B: comience en el archivo A en la línea 25, copie 50 líneas y péguelo en el archivo B
fuente
La siguiente opción funciona la mayor parte del tiempo y también para pegarla más tarde.
Las líneas arrancadas se almacenarán en el búfer
'x'
. Se puede usar en cualquier lugar de la edición.Para pegar líneas en el otro archivo,
Ejemplo: escriba el siguiente comando en la edición actual
Operación completa
abrir archivo 1:
-ahora abra el segundo archivo de la edición actual
-mover el cursor a la línea donde tiene que pegar
--Las líneas del búfer
'*a*'
se copiarán después de la posición actual del cursorfuente
Si desea copiar una parte de un archivo y pegar ese contenido en el medio de otro archivo, puede hacerlo de esta manera.
Ejemplo:
O
Ejemplo:
Ahora las líneas se copian a otro archivo. Si desea eliminar esas líneas después de copiar, puede hacer
O
Ahora, ve a otro archivo. Luego, mantenga el cursor en la línea donde desea pegar.
Tipo
Ahora, el contenido del archivo temporal se pega aquí. Puede eliminar el archivo temporal de la línea de comando en sí, después de pegar el contenido.
Esto ayudaría si quisiera copiar y pegar varias veces.
fuente
Otra forma podría ser abrir los dos archivos en dos buffers divididos y usar el siguiente "fragmento" después de la selección visual de las líneas de interés.
fuente
Ingrese al modo de comando y ejecute
Por ejemplo, para extraer líneas
20-30
delfilename
archivo abierto actualmentefuente