2011-08-29 21 views
46

Decir que tengo la siguiente línea:Cambie los siguientes N caracteres en VIM

|add_test()   (| == cursor position) 

Y quiero reemplazar 'agregar' con un 'del'.

del|_test() 

Puedo presionar X tres veces y luego presionar i para insertar y escribir del. Lo que quiero es algo así como 3c o 3r para sobrescribir solo 3 caracteres. Ambos no hacen lo que quiero, 3c sobrescribe 3 caracteres con el mismo carácter , 3r hace varias otras cosas.

¿Hay una manera fácil de hacer esto sin Xing manualmente e insertar el texto?

Respuesta

78

3s, "sustituir 3 caracteres" es lo mismo que c3l. 3cl y c3l deben ser lo mismo, no sé por qué verías repetir el mismo personaje. También soy fanático del uso de t, p. ct_ como otro cartel mencionado, entonces no tengo que contar caracteres y puedo simplemente escribir "del".

Tuve problemas con "reemplazar un par de caracteres" durante algunos días también; 'r' fue genial para caracteres únicos, R fue genial para una cadena de longitud coincidente, pero quería algo como lo que el OP está pidiendo. Entonces, escribí :help x y leí por un tiempo, resulta que la descripción de s y S están a solo un par de páginas más abajo de x.

En otras palabras, :help es tu amigo. Lee y aprende.

+0

Sería genial si después de escribir "3s" y haber escrito 3 caracteres, volvería automáticamente al modo Normal. Me pregunto si hay una manera de hacer algo así (similar a '3r') –

+0

Sí, a menudo también he querido algo así. Por desgracia, no sé si existe. –

5

c3  ('c', '3', espacio), luego escriba los caracteres que desea insertar. (O puede utilizar de flecha derecha o l en lugar de espacio.)

O, como @ Mike acaba de decir en un comentario, Control-R R funciona muy bien si el número de caracteres que sucede para que coincida con el número de caracteres estás eliminando

O ct_ para cambiar del cursor al siguiente carácter _.

+0

Ahora que lo pienso ¿no es capital R en lugar de CTRL + R? – Mike

+1

@Mike: Sí, es 'R'. –

6

Creo que 3cl es lo que quieres. Cambia 3 caracteres a la derecha. Escribiría ct_del<esc>, pero eso no es lo que pidió

19

Uso {c} movimiento de comandos:

  1. cf_ - cambiar hasta el primer '_' (incluido);
  2. ct_ - cambie hasta el primer '_' (excluyendo);
  3. cw - cambie la primera palabra;

La palabra está determinada por variable iskeyword. Verifíquelo con : configure iskeyword? y eliminar cualquier '_', al igual que : establecer iskeyword = @, 48-57,192-255. Por cierto, vea : help c y : help motion si quiere más.

+0

ct_ es en realidad mejor de lo que estaba buscando, pero técnicamente el comando s responde la pregunta ;-) – MrB

+0

Esta es la mejor respuesta. Aunque OP estaba cambiando 3 caracteres en su ejemplo, esta respuesta se dirige al cambio de N caracteres en cualquier palabra. – DrStrangepork

3

Si las obras tienen la misma longitud, puede usar el comando R que reemplaza lo que tenía anteriormente con lo que escribe.

Cuestiones relacionadas