Come sostituire parzialmente il testo in un blocco di testo selezionato?


14

Non è facile trovare un bel titolo per il mio problema.

Sono a conoscenza di inserire davanti a un blocco di testo:

Ctrl- v seleziona le righe I digita il testo ESC

Ora vorrei farlo, ma anche con la sostituzione di una parte nella mia selezione di blocchi. Attualmente sto facendo due operazioni

Ctrl- v seleziona il blocco x torna indietro per iniziare

Seguita dalla sequenza che ho menzionato sopra.

C'è un modo per combinare queste due operazioni selezionando ( Ctrl- v) il blocco una sola volta?

Ecco un piccolo esempio:

Vorrei trasformare il seguente blocco

1  text
2  text
3  text
4  text
5  text

in

new text 
new text 
new text 
new text 
new text

facendo solo una "operazione".


1
Non sono sicuro al 100% di ciò che vuoi, forse un vero esempio sarebbe di aiuto (cosa hai e cosa vuoi). Sei a conoscenza di gv? Riseleziona l'ultima selezione visiva e potrebbe essere di aiuto qui.
PhilippFrank,

Risposte:


21

Digitando cdopo aver selezionato il blocco anziché xrimuoverà il testo nel blocco di selezione e si accederà alla modalità di inserimento. Dopo aver digitato qualcosa e uscire dalla modalità di inserimento, dovresti avere la stessa modifica su ogni riga.

Provare

Ctrl- v- seleziona blocco - c- inserisci qualunque cosa -Esc


1
    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1

Immagina una fila di tre diverse lettere maiuscole come quella sopra. ^Vselezionando quanto sopra, non ho potuto cambiare tutti quelli Anell'ultima lettera della riga a causa di linee di lunghezza disuguali. Le lettere maiuscole precedenti funzionavano bene con :s/\%V1/T/g "La lettera maiuscola precedente era una T ricavata da '1'. Cambia /T/in qualunque cosa.

Ma selezionando l'ultima lettera maiuscola mostrata sopra ha cambiato solo tutti gli '1 in' A nel punto di A *, e il resto è rimasto uno.

* La linea più breve.

Per rendere tutte le linee della stessa lunghezza le ho riempite di spazi. (Sono nuovo di Vim, quindi sono sicuro che si potrebbe scrivere una sceneggiatura migliore.)

Nota: il picco di A è iniziato sulla linea 2.

let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor

Successivamente, ha :s/\%V1/T/g funzionato come pubblicizzato sull'ultima lettera maiuscola nella riga.

PS Ho letto che la executeriga sopra dovrebbe funzionare senza i punti, ma non ha funzionato per me.


La riga di esecuzione, vai all'inizio della riga i della lettera maiuscola e aggiungi spazi b alla fine della riga. 'b' è la differenza di lunghezza tra la linea corrente e la linea più lunga.
Ron,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.