Cómo reemplazar texto entre comillas en vi

106

Digamos que tengo esta línea de código:

$query = "SELECT * FROM table";

¿Hay un comando en vi / vim que pueda eliminar instantáneamente todo entre comillas y colocar el cursor entre ellas para que pueda comenzar a escribir?

Nikola
fuente

Respuestas:

182

Use ci", lo que significa: cambiar lo que hay dentro de las comillas dobles.

También puede manipular otros objetos de texto de manera similar, por ejemplo:

  • ci' - cambiar dentro de las comillas simples
  • ciw - cambiar dentro de una palabra
  • ci( - cambiar entre paréntesis
  • dit - eliminar dentro de una etiqueta HTML, etc.

Más sobre diferentes objetos de texto vim aquí .

Eugene Yarmash
fuente
2
Parece que solo funciona con vim, pero NO vi. (No estoy seguro)
Ivan Chau
Para mí, esto solo funciona en la línea actual, no en cualquier parte del documento.
Y finalmente
¿Qué comando entonces haría esto al revés? Eso es si desea reemplazar el texto dentro de las comillas que está detrás del cursor.
dtburgess
1
@dtburgess: Una forma es F"ci".
Eugene Yarmash
ci 'y ci "funcionan bien, pero ci (no funciona para mí. ¿Alguien tiene alguna idea de por qué?)
Vram Vardanian
24

Puede seleccionar entre comillas y luego borrar ( d), cambiar ( c) etc. usando

vi"

Del mismo modo, puede sustituir llaves, corchetes, elementos XML, etc. así:

vi(
vi{
vit

o simplemente cambiar / eliminar, hacer lo correspondiente di", ci"etc. Sustituir apor iabarcará los elementos circundantes (por lo que marca o cambia los corchetes y el contenido, por ejemplo)

Brian Agnew
fuente
5

Hice un complemento vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Proporciona objetos de texto para los pares más cercanos de citas de cualquier tipo y admite citas que abarcan varias líneas. Usar solo iqo aqle permite operar en el contenido de comillas simples ('), dobles (") o posteriores (`) que actualmente rodean el cursor, están delante del cursor o detrás (en ese orden de preferencia) En otras palabras, salta hacia adelante o hacia atrás cuando es necesario para llegar a las comillas.

Es más fácil de entender mirando ejemplos (el cursor se muestra con |):

  1. Antes foo '1, |2, 3' bar:; después de presionar diq:foo '|' bar
  2. Antes foo| '1, 2, 3' bar:; después de presionar diq:foo '|' bar
  3. Antes foo '1, 2, 3' |bar:; después de presionar diq:foo '|' bar
  4. Antes foo '1, |2, 3' bar:; después de presionar daq:foo | bar
  5. Antes foo| '1, 2, 3' bar:; después de presionar daq:foo | bar
  6. Antes foo '1, 2, 3' |bar:; después de presionar daq:foo | bar

Los ejemplos anteriores se dan para comillas simples, el complemento funciona exactamente de la misma manera para comillas dobles (") y traseras (`).

También se puede utilizar cualquier otro operador: ciq, diq, yiq, viq, etc.

Por favor, eche un vistazo a la página de github vinculada arriba para obtener más detalles.

Anton Beloglazov
fuente
3

Desde ya dentro de las comillas puedes hacer

di"

Léelo como borrar dentro "

Sam Peacey
fuente
6
No se requiere que el cursor esté dentro de la cadena entre comillas dobles, ya que el comando predeterminado para cambiar la primera cadena de este tipo en la línea
Eugene Yarmash
1
¡Gracias, es bueno saberlo! Solo sirve para demostrar que debería leer las cosas un poco más detenidamente. :)
Sam Peacey
3

Además de la respuesta de Brian, también puede p(pegar) y y(tirar) el nuevo valor, por lo que si desea reemplazar el valor entre comillas con otro valor, puede hacer yi"en la selección que desea copiar, vi"para seleccionar el área que desea reemplazar y luego simplemente preemplazar correctamente el valor.

Ulisses Caon
fuente
0

La respuesta elegida es adecuada SOLO para ViM pero NO para vi. La pregunta también es inexacta porque el autor no mencionó cuál es la posición inicial del cursor. Si asumimos que el cursor está dentro de las comillas dobles, entonces para vi la respuesta será:

T"ct"

Dónde:

T ": retrocede justo después del carácter"

c - comando de cambio

t ": proporciona la posición final para el comando c, donde debería dejar de borrar caracteres, en otras palabras, el rango para cambiar

user1337
fuente