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?

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í .


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)


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.


3

Desde ya dentro de las comillas puedes hacer

di"

Léelo como borrar dentro "


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.