Come sostituire il testo tra virgolette in vi


106

Diciamo che ho questa riga di codice:

$query = "SELECT * FROM table";

C'è un comando in vi / vim che può eliminare immediatamente tutto tra virgolette e posizionare il cursore tra di loro in modo che io possa iniziare a digitare?

Risposte:


182

Usa ci", che significa: cambia cosa c'è tra virgolette doppie.

Puoi anche manipolare altri oggetti di testo in modo simile, ad esempio:

  • ci' - modifica all'interno delle virgolette singole
  • ciw - cambiamento all'interno di una parola
  • ci( - cambia tra parentesi
  • dit - elimina all'interno di un tag HTML, ecc.

Maggiori informazioni sui diversi oggetti di testo vim qui .


2
Sembra funzionare solo con vim, ma NON vi. (Non sono sicuro)
Ivan Chau

Per me questo funziona solo sulla riga corrente, non da nessuna parte nel documento.
E infine il

quale comando allora lo farebbe al contrario? Cioè se vuoi sostituire il testo all'interno di virgolette che si trova dietro il cursore.
dtburgess

1
@dtburgess: un modo è F"ci".
Eugene Yarmash

ci 'e ci "funziona bene, ma ci (non funziona per me. Qualcuno ha idea del perché?
Vram Vardanian

24

È possibile selezionare tra virgolette e quindi eliminare ( d), modificare ( c) ecc. Utilizzando

vi"

Allo stesso modo, puoi sostituire parentesi graffe, parentesi, elementi XML ecc. In questo modo:

vi(
vi{
vit

o semplicemente per cambiare / cancellare, fare il corrispondente di", ci"ecc. Sostituire aper iincluderà gli elementi circostanti (così si contrassegnano o cambiano le parentesi e il contenuto, per esempio)


5

Ho creato un plugin vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Fornisce oggetti di testo per le coppie di virgolette più vicine di qualsiasi tipo e supporta le virgolette su più righe. Usare solo iqo aqti permette di operare sul contenuto di virgolette singole ('), doppie (") o indietro (`) che attualmente circondano il cursore, sono davanti al cursore o dietro (in quell'ordine di preferenza) In altre parole, salta avanti o indietro quando necessario per raggiungere le virgolette.

È più facile da capire guardando gli esempi (il cursore è mostrato con |):

  1. Prima foo '1, |2, 3' bar:; dopo la pressatura diq:foo '|' bar
  2. Prima foo| '1, 2, 3' bar:; dopo la pressatura diq:foo '|' bar
  3. Prima foo '1, 2, 3' |bar:; dopo la pressatura diq:foo '|' bar
  4. Prima foo '1, |2, 3' bar:; dopo la pressatura daq:foo | bar
  5. Prima foo| '1, 2, 3' bar:; dopo la pressatura daq:foo | bar
  6. Prima foo '1, 2, 3' |bar:; dopo la pressatura daq:foo | bar

Gli esempi precedenti sono forniti per virgolette singole, il plugin funziona esattamente allo stesso modo per virgolette doppie (") e indietro (`).

È inoltre possibile utilizzare tutti gli altri operatori: ciq, diq, yiq, viq, etc.

Dai un'occhiata alla pagina GitHub collegata sopra per maggiori dettagli.


3

Già dalle citazioni puoi fare

di"

Leggilo come elimina dentro "


6
Non è necessario che il cursore si trovi all'interno della stringa tra virgolette, poiché il comando di default cambia la prima stringa di questo tipo nella riga
Eugene Yarmash

1
Grazie, è molto bello saperlo! Mostra solo che dovrei leggere le cose un po 'più attentamente. :)
Sam Peacey

3

In aggiunta alla risposta di Brian, puoi anche p(incollare) e y(strattonare) il nuovo valore, quindi se vuoi sostituire il valore tra virgolette con un altro valore, puoi fare yi"sulla selezione che vuoi copiare, vi"per selezionare l'area che si desidera sostituire e quindi solo pper sostituire correttamente il valore.


0

La risposta scelta è adatta SOLO per ViM ma NON per vi. Anche la domanda è imprecisa perché l'autore non ha menzionato qual è la posizione iniziale del cursore. Se assumiamo che il cursore si trovi all'interno delle virgolette, per vi la risposta sarà:

T"ct"

Dove:

T "- torna indietro subito dopo il carattere"

c - cambia comando

t "- fornisce la posizione finale per il comando c, dove dovrebbe smettere di cancellare i caratteri, in altre parole l'intervallo da cambiare

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.