Saltar al contenido

¿Cómo puedo pegar (sobrescribir) con vim?

Nuestros mejores desarrolladores han agotado sus depósitos de café, investigando noche y día por la respuesta, hasta que Emilia encontró la solución en Bitbucket por lo tanto hoy la comparte contigo.

Solución:

De forma predeterminada, los comandos de pegado utilizan el " registro (“sin nombre”). Efectivamente, cualquier comando que escribe en un registro también escribe en el registro sin nombre, por lo que los tirones, las eliminaciones y los cambios lo afectan. Esta es la razón por la que su secuencia yank-delete-paste pega el texto eliminado en lugar del texto extraído.

Él 0 registrarse puede ayudar aquí. Cualquier comando de extracción que no especifique un registro coloca el texto extraído en el registro 0 (además de "). No se ve afectado por las operaciones de eliminación o cambio, por lo que puede usarlo para pegar una línea cortada varias veces, incluso si realiza cambios o eliminaciones intermedias.

  1. yy: Registros 0 y " ambos ahora tienen la línea tirada.
  2. Mover a una línea para reemplazar.
  3. dd: Registro " ahora tiene la línea eliminada, pero regístrese 0 todavía tiene la línea tirada.
    "0P: Pegue la línea extraída originalmente del registro 0.
  4. Pase a la siguiente línea para reemplazar.
  5. dd"0P (lo mismo que arriba)

(Debido a la forma en que funciona el posicionamiento del cursor al reemplazar la última línea de un búfer, querrá usar "0p en vez de "0P.)

Esto está muy cerca de la respuesta de Bruce Ediger, excepto que no tiene que especificar un registro al tirar inicialmente. Sin embargo, usar uno o más registros con nombre puede ser muy útil si necesita (por ejemplo) reemplazar algunas líneas con AAApero otras líneas con BBB (poner AAA en registro ay BBB en registro b (o dejar uno de ellos en el registro 0), luego péguelos según corresponda).

También puede pegar desde 0 en modo visual lineal (V) para guardar una pulsación de tecla: V"0p.

Si no te gusta tener que escribir "0puede encontrar una asignación más conveniente:

noremap p "0p
noremap P "0P
vnoremap p "0p

Un enfoque alternativo es eliminar al _ registro (“agujero negro”). Cuando lo elimina, el " el registro no se ve afectado, por lo que su secuencia yank-delete-paste aún puede pegar el texto extraído del registro sin nombre.

  1. yy: Registro 0 y " ambos ahora tienen la línea tirada.
  2. "_dd: Sin cambios en los registros.
    P: Pegue el texto extraído originalmente del registro ".

Nuevamente, puede encontrar una asignación más conveniente:

noremap d "_d

Parece que Kevin tiene una respuesta bastante buena, pero si desea ver cada línea que elimine y luego reemplace, existe una solución ligeramente diferente.

1. Find line to copy in some select number of places.
2. Put cursor on it.
3. "ayy copies that line into register 'a'.
4. Find line to replace. Put cursor on it.
5. dd deletes that line. "aP inserts the copied line above where the cursor now lies.
6. Repeat steps 4 and 5.

Este tipo de receta le permite usar la coincidencia de patrones para encontrar líneas para eliminar y reemplazar, y puede volver al inicio del archivo (1G) y buscar hacia adelante con la frecuencia que desee. Si tengo 2 o más líneas para juntar y colocar repetidamente, uso "ayy para la primera línea, "byy para el segundo, "cyy para el tercero, y así sucesivamente. Hice un hábito (lo que reduce la generalidad de la receta) para disminuir la carga mental sobre mí.

Hay un par de maneras de hacer esto con :s, según la cantidad de escritura que desee escribir. La forma más fácil es una simple búsqueda y reemplazo:

:%s/find this line/replace with this/

Él % buscará en todo el archivo y reemplazará todas las apariciones.

Si eso es demasiado escribir para usted, puede tirar del destino string (yy) y usa el " (predeterminado) registro, insertándolo con Control+r":

:%s/<">/replacement/

O, si tiene una copia del reemplazo stringpuede jalar los dos en registros separados con "ayy y "byy para tirar en el a y b registros, respectivamente (puede usar cualquier letra para sus registros). Entonces usa Control+run y Control+rb para pegarlos en los campos de búsqueda y reemplazo.

No para superar a Bruce, pero si desea verificar las líneas antes de reemplazarlas, simplemente agregue el c opción:

:%s/find this line/replace with this/c

Sección de Reseñas y Valoraciones

Al final de todo puedes encontrar las acotaciones de otros programadores, tú incluso puedes insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *