2009-02-28 29 views
5

Mi pregunta anterior parece ser un poco ambigua, voy a reformular:Vim copiar y pegar

Tengo un archivo de la siguiente manera:

copythis abc 
replacethis1 xyz 
qwerty replacethis2 
hasfshd replacethis3 fslfs 
And so on... 

NOTA: replacethis1, replacethis2, replacethis3, ... podría ser cualquier palabra

¿Cómo puedo reemplazar "replacethis1", "replacethis2", "replacethis3", ... palabra por "copythis" palabra mediante el uso de comandos mínimos vim.

Una forma que puedo hacer es mediante estos pasos:

  1. borrado "replacethis1", "replacethis2", "replacethis3", .. utilizando
  2. copia "copythis" dw '' usando 'yw '
  3. mueve el cursor a donde estaba "replacethis1" y haz' p '; mover el cursor a donde estaba "replacethis2" y hacer 'p' y así sucesivamente ...

¿Hay una mejor manera de hacerlo en VIM (utilizando menos comandos vim)?

Respuesta

6

Puesto que usted cambió su pregunta, lo haría de esta manera:

Vaya al primer "replacethis1" y escriba cw (cambie la palabra), luego escriba "copythis" manualmente.

Pase a la siguiente "replacethis", pulse. (Repetir la última operación)

pasar a la siguiente "replacethis", golpe.,

y así sucesivamente, y así sucesivamente.

Si "copythis" es una palabra pequeña, creo que esta es la mejor solución.

+0

dependiendo de cómo pase a las diferentes palabras que se reemplazarán, podría ser mejor usar ciw (o caw) en lugar de cw. Para que cw funcione, debes estar al comienzo de reemplazarla. – user55400

0

¿Has probado la sustitución de cadenas?

%s/replacethis/copythis 

Una gran cantidad de otros parámetros son posibles para ajustar la sustitución. Sumérgete en la ayuda de Vim para más detalles. Algunos ejemplos más here.

1
:%s/copythis/replacethis/g 

Para reemplazar todas las apariciones de copythis con replacethis. O bien, puede especificar un rango de números de línea como:

:8,10 s/copythis/replacethis/g 

Nota, la/g en el extremo le dirá que para reemplazar todas las ocurrencias. Si lo dejas, simplemente hará el primero.

+0

Consulte mi pregunta reformulada –

+0

Tiene los dos términos revertidos. –

0

si u necesidad de hacer esencialmente la misma acción varias veces - permuta primera palabra de una línea con la segunda palabra de la siguiente línea, dije podría grabar una macro y llamarlo cada vez que necesite

+0

Consulte mi pregunta reformulada –

1
  1. crear este mapeo:

    : mapa z cwcopythis^[

    (^ [es el carácter de escape, puede escribirlo en vim usando Ctrl + V Ctrl + [)

  2. vaya a cada palabra que desee reemplazar y presione z

+0

Esto no funciona ya que dw sobrescribe el buffer de copia –

+0

Funcionará, es la misma sugerencia que la mía pero crea un enlace personalizado en lugar de usar el comando de punto incorporado. Probablemente sea mejor usar esto si no está reemplazando todas las palabras a la vez. –

+0

He usado dw inicialmente, pero me di cuenta del error tan pronto como presioné la publicación, así que lo edité :) – Adnan

4

El dígito debe estar incluido, y allí puede d ser más de una instancia por línea:

:%s/replacethis\d/copythis/g 
3

Dado que "replacethis [1-3]" pueden ser palabras no relacionadas arbitrarias, la forma más rápida/más sencilla de hacer esto a nivel mundial sería:

:%s/replacethis1\|replacethis2\|replacethis3/copythis/g 

(Tenga en cuenta que debe usar \ | para que las tuberías funcionen como "o". De lo contrario, vim buscará el literal | . Caracteres)

1

He estado luchando con esto durante mucho tiempo también, creo que sólo funcionó la manera más limpia:

Utilice el que comando es más limpio para poner copythis en el registro r:

/copythis 
"rye 

y luego ir a la sustitución y sustituirlo por el contenido de r:

/replacethis 
cw<CTRL-R>r<ESC> 

a continuación, puedes n.n.n.n.n.n.n. para el resto de ellos, o si son tremendamente di Cada vez que vaya al principio de cada uno y presione .

La clave está reemplazando y pegando en un solo paso para poder usar . más adelante.

0

Puede reasignar, p. la tecla m en modo normal para eliminar la palabra debajo del cursor y pegar el búfer: :nnoremap m "_diwP. Luego, puede copiar la palabra deseada, mover el cursor a cualquier parte de la palabra que se reemplazará y escribir m.

EDITAR: Mapear en m es una mala idea ya que se usa para marcar ubicaciones. Pero puedes usar, p. ; de todos modos.

Cuestiones relacionadas