salir por pegar editar copiar consola archivo vim copy-paste vi cut

vim - por - salir del editor vi



Copie y pegue el contenido de un archivo a otro archivo en vi (18)

  1. Asegúrate de tener la versión Vim compilada con soporte para portapapeles
    • :echo has(''clipboard'') debe devolver 1
    • Si devuelve 0 (por ejemplo, OSX, al menos El Capitan, Mavericks y Mountain Lion, viene con la versión Vim, sin soporte para el portapapeles), tiene que instalar la versión Vim con soporte para el portapapeles, por ejemplo, a través de brew install vim (no olvide relanzar su terminal (s) después de la instalación)
  2. Ingrese un modo visual ( V - multilínea, v - plano, o Ctrl v - bloque visual)
  3. Seleccione la (s) línea (s) que desea copiar
  4. " * y - para copiar seleccionado
  5. " * p - para pegar copiado

PD:

  • puede reemplazar los pasos 2-5 con las instrucciones de la respuesta de , si necesita copiar y pegar una sola línea
  • para facilitar la selección de líneas, puede agregar set mouse+=a a su .vimrc - le permitirá seleccionar líneas en vim usando el mouse, mientras no selecciona elementos extraños (como números de línea, etc.) texto seleccionado al portapapeles del sistema de Vim

Estoy trabajando con dos archivos, necesito copiar unas pocas líneas de un archivo y pegar en otro. 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 una manera de cortar y pegar? He intentado buscar en Google, pero la mayoría de los recursos solo hablan de copiar y pegar.


Actualización 201705:

Acabo de descubrir que si agrega la siguiente línea en su archivo vimrc,

establecer portapapeles = sin nombre

entonces VIM está utilizando el portapapeles del sistema

Acabo de encontrar que el método de yank no funcionará en la forma en que copio contenidos entre diferentes ventanas de instancias de VIM. (Al menos, no funciona en base a mi conocimiento de VIM. No sé si hay otra manera de permitir que funcione).

El método de yank solo funciona en la forma en que se abren varios archivos en la misma ventana según mi prueba.

Si quieres hacer eso, es mejor que utilices el modo de cortar-copiar-pasar OS como ctrl + x, ctrl + c (Bajo Windows).


Aquí hay una manera de hacerlo;

  • Inicia vim y abre el archivo 1, que es el archivo en el que estás trabajando.
  • : e file2 que mostrará file2, el archivo desde el que desea copiar las líneas.
  • localiza las líneas que deseas copiar, si son 3 líneas, golpeas 3 y y
  • : b 1 esto cambiará al búfer 1, donde file1 es
  • averigua dónde quieres insertar las líneas que tiraste y pulsa p

También puede tener ambos archivos visibles, dividir la pantalla con, por ejemplo, CTRL + w s

En cuanto al corte, d corta y coloca el material cortado en el búfer de tirón. d d "cortará" una línea.


Como ya sabe cómo cortar / copiar texto, aquí hay algunas ideas para volver a pegarlo en otro archivo:

  • Edite el primer archivo, tirando del texto que desee. Luego abra su segundo archivo desde vi ( :e /path/to/other/file ) y péguelo
  • Abra ambos archivos juntos en una ventana dividida y navegue entre ellos usando Ctrl + w , arriba / abajo ya sea por:

    • vi -o /path/to/file1 /path/to/file2
    • Desde dentro del primer archivo, Ctrl + w , s

Copiar texto entre dos búferes (== archivos) que se abren en la misma instancia de VIM no es un problema: simplemente jale en un búfer con y (asumiendo que marcó un área de copia en modo visual antes), luego pegue en el otro buffer 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:

  • En Win32, hay una opción en el menú contextual que dice Editar con una vim si selecciona dos o más archivos
  • Cuando estás en la consola, puedes lograrlo con vim file1 file2
  • Si usa VIM como editor para otra herramienta, asegúrese de especificar la opción --remote-silent para asegurarse de que todos los archivos se abran en la misma instancia

Si abrió los dos archivos en dos instancias diferentes de VIM, entonces tiene que ir con el portapapeles del sistema: en el primer VIM, jale el texto hacia el portapapeles del sistema usando "+y (nuevamente, marque el área a ser anulada en visual modo anterior), luego vaya al segundo VIM y pegue el portapapeles allí: "+p .


Ejemplo: fileA y fileB: comience en fileA en la línea 25, copie 50 líneas y pegue en fileB

fileA Goto 25th line 25G copy 50 lines into buffer v "v50yy Goto fileB :e fileB Goto line 10 10G paste contents of buffer v "vp


Estas remapsulaciones funcionan como un encanto para mí:

vmap <C-c> "*y " Yank current selection into system clipboard nmap <C-c> "*Y " Yank current line into system clipboard (if nothing is selected) nmap <C-v> "*p " Paste from system clipboard

Entonces, cuando estoy en modo visual, selecciono las líneas que quiero y presiono Ctrl + c y luego Ctrl + v para insertar el texto en el archivo del receptor. Podría usar "* y también, pero creo que a veces es difícil de recordar.

Esto también es útil para copiar texto desde vim al portapapeles.

Fuente: http://vim.wikia.com/wiki/Copy_and_paste_between_sessions_using_a_temporary_file


Ingrese al modo de comando y ejecute

:r! sed -n ''<start_line_num>, <end_line_num> p'' file_to_extract_text_from

Por ejemplo, para extraer las líneas 20-30 del filename de filename en el archivo abierto actualmente

:r! sed -n ''20, 30p'' filename


La siguiente opción funciona la mayor parte del tiempo y también para pegar más tarde.

"xnyy x - buffer name n - number of line to Yank - optional

Las líneas tiradas se almacenarán en el búfer ''x'' . Se puede utilizar en cualquier parte de la edición.

Para pegar línea (s) en el otro archivo,

:e filename&location

Ejemplo: escriba el siguiente comando en la edición actual

:e /u/test/Test2.sh and paste using "xP P - before cursor p - after cursor

Operación completa

abrir archivo 1:

vi Test1.sh a10yy -Yanked 10 lines

-Ahora abre el segundo archivo de la edición actual

*:e /u/test/Test2.sh*

-Mueve el cursor a la línea donde tienes que pegar.

*"ap*

--Las líneas del búfer ''*a*'' se copiarán después de la posición actual del cursor


Mi situación es que necesito copiar n número de líneas en medio, n desconocido, del archivo 1 al archivo 2.

:''a,''bw /name/of/output/file.txt


Mientras edita el archivo, haga marcas donde desee que se usen el inicio y el final

ma - establece la a marca

mb - establece la marca b

Luego, para copiar eso en otro archivo, simplemente use el comando w :

:''a,''bw /name/of/output/file.txt


No he encontrado una respuesta simple aquí, así que publico la mía.

Objetivo : guardar una parte de un archivo en otro archivo.

Solución :

  1. Seleccione el texto que desea guardar:
    • Posiciona el cursor donde quieres comenzar la selección.
    • Presione v para seleccionar caracteres O mayúsculas V para seleccionar líneas enteras
    • Mueve el cursor al final de lo que quieres seleccionar
  2. Guardar el texto seleccionado en el nuevo archivo. Escriba : w Espacio y el nombre del nuevo archivo. En realidad ya veras

    :''<,''>w new.txt

    Luego presiona Enter


Otra forma podría ser abrir los dos archivos en dos buffers divididos y usar el siguiente "fragmento de código" después de la selección visual de las líneas de interés.

:vnoremap <F4> :y<CR><C-W>Wr<Esc>p


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 .

" búfer, copias al búfer. Y es tirón y P se pone. ¡Espero que eso ayude!


Si desea copiar una parte de un archivo y pegar ese contenido en medio de otro archivo, puede hacerlo de esta manera.

:linenumber,linenumber write newfile

Ejemplo:

:2,34 write temp1

O

:''mark, ''mark write newfile

Ejemplo:

:''a,''b write temp1

Ahora las líneas se copian a otro archivo. Si desea eliminar esas líneas después de copiar, puede hacer

:linenumber1,linenumber2 d

O

:''mark1,''mark2 d

Ahora, ve a otro archivo. A continuación, mantenga el cursor en la línea donde desea pegar.

Tipo

:r!cat temp1

Ahora, el contenido del archivo temporal se pega aquí. Puede eliminar el archivo temporal de la propia línea de comandos, después de pegar el contenido.

:!rm temp1

Esto te ayudaría si quisieras copiar y pegar varias veces.


Si está utilizando VIM en Windows, puede obtener acceso al portapapeles (MS copiar / pegar) utilizando:

" * d d - cortar una línea (o 3dd para cortar 3 líneas)

" * y y - copia una línea (o 3yy para copiar 3 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, word, etc.).


Todas estas sugerencias son excelentes, pero si conoce la ubicación del texto en otro archivo, use sed con facilidad. :r! sed -n ''1,10 p'' < input_file.txt :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.


Usa las variaciones de d como dd para cortar.

Para escribir un rango de líneas en otro archivo puede usar:

:<n>,<m> w filename

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 comandos +g .