2011-08-29 3 views
46

Dire che ho la seguente linea:Modificare i prossimi N caratteri in VIM

|add_test()   (| == cursor position) 

E voglio sostituire il 'Add' con un 'del'.

del|_test() 

Posso premere X tre volte e quindi premere i per inserire e digitare del. Quello che voglio è qualcosa come 3c o 3r per sovrascrivere solo 3 caratteri. Entrambi questi non fanno quello che voglio, 3c sovrascrive 3 caratteri con lo stesso carattere , 3r fa molte altre cose.

C'è un modo semplice per farlo senza eseguire manualmente Xing e inserire il testo?

risposta

78

3s, "sostitutivi 3 caratteri" è la stessa di c3l. 3cl e c3l dovrebbero essere gli stessi, non so perché vedresti ripetere lo stesso personaggio. Sono anche un fan dell'uso di t, ad es. ct_ come menzionato in un altro poster, quindi non devo contare i caratteri e posso semplicemente digitare "del".

Ho lottato con "sostituire un paio di personaggi" anche per alcuni giorni; 'r' era eccezionale per i singoli personaggi, R era perfetto per una stringa di lunghezza corrispondente, ma volevo qualcosa come l'OP sta chiedendo. Così, ho digitato :help x e letto per un po ', si scopre che la descrizione di s e S sono solo un paio di pagine in basso da x.

In altre parole, :help è tuo amico. Leggi e impara.

+0

Sarebbe bello se dopo aver digitato "3s" e aver digitato 3 caratteri, tornasse automaticamente in modalità normale. Mi chiedo se c'è un modo per fare qualcosa di simile (in modo simile a '3r') –

+0

Sì, ho sempre desiderato una cosa del genere. Ahimè, non lo so se esiste. –

5

c3  ('c', '3', spazio), quindi digitare i caratteri che si desidera inserire. (Oppure è possibile utilizzare freccia a destra o l piuttosto che di spazio.)

O, come ha appena detto @ Mike in un commento, Control-R R funziona bene se il numero di caratteri avviene in base al numero di caratteri stai cancellando.

Oppure ct_ per passare dal cursore al successivo carattere _.

+0

Ora che ci penso, non è vero capitale R invece di CTRL + R? – Mike

+1

@Mike: Sì, è 'R'. –

6

Penso che 3cl sia quello che vuoi. Cambia 3 caratteri a destra. Mi piacerebbe digito ct_del<esc>, ma non è quello che hai chiesto

19

Usa c {movimento} comando:

  1. cf_ - cambiare fino al primo '_' (compreso);
  2. ct_ - passare al primo "_" (escluso);
  3. cw - cambia la prima parola;

La parola è determinata dalla variabile iskeyword. Controllalo con : set iskeyword? e rimuovere eventuali '_', come quella : impostare iskeyword = @, 48-57,192-255. proposito si veda : aiuto c e : aiuto movimento se si vuole di più.

+0

ct_ è in realtà meglio di quello che stavo cercando, ma tecnicamente il comando s risponde alla domanda ;-) – MrB

+0

Questa è la risposta migliore. Sebbene OP stia cambiando 3 caratteri nel suo esempio, questa risposta risolve il cambio di N caratteri in ogni parola. – DrStrangepork

3

Se le opere hanno la stessa lunghezza è possibile utilizzare il comando R che sostituisce quello che si aveva in precedenza con ciò che si digita.