Come ottenere la selezione di diverse lunghezze di testi su righe diverse?


10

presumo che io abbia i seguenti testi:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

Voglio fare la selezione come di seguito:

aaa-dd-e:"aaa",
bb-x:"bb",
c-9:"c"

Ho provato a usare cv per creare un blocco visivo, ma dopo aver creato la selezione sulla prima colonna e ho premuto "f:" (intendevo espandere la selezione in due punti come sopra), quello che ottengo è:

aaa-dd-e: "aaa",:
bb-x"bb",
c-9:"c"

la selezione si ferma ai primi due punti e crea un rettangolo.


6
Cosa vuoi ottenere con quella selezione, potrebbe esserci un altro modo
Arjen Dijkstra,

Se è separato per carattere, puoi provare a riallineare prima il blocco e selezionarlo quindi. Vedi: Allinea il testo solo sul primo separatore in VIM
Kenorb

Risposte:


6

La selezione è generalmente un mezzo per un fine, tanto più in Vim dove la selezione spesso non è necessaria in primo luogo.

Supponendo che desideri ancora inserire virgolette attorno ai nomi delle proprietà nel tuo file non JSON per trasformarlo in JSON corretto:

  1. seleziona le linee da modificare, dal punto di vista del carattere o della linea, non importa,
  2. :'<,'>norm I"^[f:i"( '<,'>viene inserito automaticamente per te e ^[si ottiene con <C-v><Esc>).

Se hai il bellissimo plugin surround, il passaggio 2 diventa:

:'<,'>norm ^vt:S"

Con una sostituzione, il passaggio 2 potrebbe diventare:

:'<,'>s/^\s*\([^:]*\):/"\1"

ragazzi avete ragione, ora trovo che la selezione visiva probabilmente non sia necessaria. con l'aiuto o :g/regex/norm, posso semplicemente ottenere quello che voglio fare.
Aaron Shen,

Esiste un modo per mettere l'intero blocco selezionato negli Appunti di sistema e incollarlo in un altro file?
Aaron Shen,

Ovviamente. Supponendo che Vim sia compilato con il supporto degli Appunti che è possibile eseguire "+yo "*y, a seconda di quale Appunti si desidera targetizzare. Ci sono molte domande correlate qui intorno.
romainl,

14

Vim supporta solo selezioni rettangolari a blocchi, ad eccezione del bordo frastagliato destro quando si preme $.

Ci sono plugin (come vim cursori multipli ) che possono emulare selezioni multiple, ma dovresti anche essere in grado di raggiungere il tuo obiettivo reale (che sfortunatamente non hai menzionato) con comandi Vim puri, ad esempio :globale :substitute(se riesci a formulare un normale espressione che corrisponde alla selezione in ciascuna riga) o ripetendo le macro (se c'è un movimento particolare che copre la selezione in ciascuna riga).


cosa succede se voglio tagliare quelle linee e incollarle in un altro buffer?
Aaron Shen,

1

Solo per lanciare un altro cappello sul ring, se vuoi davvero usare la selezione visiva puoi usare il plugin Tabular per allineare i due punti, quindi effettuare la tua selezione visiva.

Se prendi il testo originale:

aaa-dd-e: "aaa",
bb-x: "bb",
c-9: "c"

:Tab /:\zs allineerà tutto dopo i due punti, come di seguito

aaa-dd-e:  "aaa",
bb-x:      "bb",
c-9:       "c"

E quindi puoi effettuare la selezione del blocco visivo.

Come altri hanno detto, tuttavia, la selezione visiva non è probabilmente necessaria in questa situazione. L'uso normo la sostituzione può probabilmente realizzare ciò che desideri senza doverti preoccupare delle selezioni visive.


1

Ho trovato una soluzione a questo problema che è sorprendentemente semplice! Avvia la modalità blocco visivo dalla parte inferiore della selezione del testo che desideri copiare e seleziona verso l'alto! Espanderà il blocco mentre si sale, mentre se si evidenzia verso il basso sembra ridurre la selezione.


Ma in questo modo sarà sempre un blocco rettangolare, giusto? Mentre lo leggo, questo non è ciò che l'OP vuole (dicono che hanno provato la modalità blocco visivo).
Martin Tournoij,

No. Sarà sempre un blocco rettangolare se tutte le linee hanno la stessa lunghezza. Ho scoperto che partendo dal basso, evidenziando verso l'alto e poi premendo $ per andare alla fine della linea, tutte le linee evidenziate verranno evidenziate alla fine della linea.
Arthur Bowers,
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.