¿Por qué ci “y ci (, ci {… comportarse de manera diferente?

todos sabemos lo que ci" ci' ci( ci[ … hace. Muy útil en la edición de todos los días. Encontré algo extraño, y revisé la ayuda, no descubrí por qué.

decir, tengo un archivo:

 foo "target" foo 'target' foo (target) foo {target} foo [target] foo  

si mi cursor al comienzo de cada línea, (en la ‘ f ‘), escribo ci “, ci ‘, ci (…

el cix solo funciona con comillas (simples o dobles), no funciona para corchetes. ¿Por qué se comportan de manera diferente?

( dix , vix lo mismo)

probado con –noplugin, vim 7.3

gracias.

Actualizar

gracias @romainl por la respuesta. Todavía tengo dudas con respecto al “procesamiento de pares en vim”

mira este ejemplo:

 foo "targ\"eti\" some\"thing else " 

si tengo una línea como la de arriba, ci" , no importa que el cursor esté al comienzo o entre comillas, funciona perfectamente, parece que vim tiene la idea de” par “?

y esto tal vez lo que querías decir sobre el maridaje?

 foo "target x some"thing else " foo (target x some(thing else ) 

Tengo más de dos líneas, si (cursor en x ) ci" y ci( , nada sucedió en la 2da línea, pero la primera línea cambió a:

 foo "I"thing else " (I is cursor) 

ci( es consistente con ci[ , ci{ y cit y todos los demás i . Solo ci' y ci" funcionan como lo hacen. Los valores atípicos son las comillas, aquí, no los corchetes.

Vim no considera que las citas vienen en pares mientras que las corcheas sí. Tiene una lógica interna para emparejar pares que funciona con pares reales, pero no con comillas, por lo tanto, la diferencia en el comportamiento.

No eres el primero en quejarse de esa discrepancia: esta es una solución , tal vez puedas encontrar otras.

editar

No tengo, por desgracia, un profundo conocimiento de los aspectos internos de Vim, así que solo puedo hacer suposiciones aquí.

Si le pide a Vim que haga ci" hace lo posible para encontrar un par de comillas dobles, pero las comillas dobles no van por pares: no hay forma de saber si un " es el de cierre o el de apertura contrario a los corchetes. Debido a eso, Vim debe tomar algunas decisiones. IMO, la opción que tendría más sentido teniendo en cuenta cómo trabajan los otros miembros de la familia, sería suponer que el cursor está entre las comillas y seleccionar de la primera a la derecha a la primera a la izquierda. Solo puedo suponer que este método demostró estar equivocado de alguna manera o que no funcionó por alguna razón y que el otro método (el actual) prevaleció.

Otra explicación podría ser que el mecanismo i está de alguna manera vinculado a un subsistema específico (¿quizás lo mismo que showmatch ?) Que no puede tratar correctamente las comillas.

De todos modos, al igual que tú, encuentro esta discrepancia extraña y de alguna manera la interioricé y alineé mi uso de i" con el funcionamiento de los demás. Hasta el punto de hacer realmente 2t"ci" o alguna variante en lugar de ci" ¡!! Ineficiente, lo sé.

¿Leíste :h a' ? ¡Me olvidé por completo de dónde obtuve mi “comprensión limitada” del problema, pero estaba allí! Dice:

“Solo funciona dentro de una línea. Cuando el cursor comienza con una comilla, Vim descubrirá qué pares de comillas forman una cadena buscando desde el principio de la línea”.

Lo que obtengo de esto es esto: por algunas razones desconocidas para nosotros, Vim usa otro mecanismo para hacer coincidir las comillas que para los otros pares y es por eso que ci" es diferente de cib y friends. La causa subyacente no está nada clara, pero yo Estoy bastante seguro de que el outlook se parece mucho a lo que imagino.

Para mí, se parece mucho a un error o una limitación disfrazada de característica.

Si aún sientes curiosidad, te sugiero que hagas más preguntas sobre vim-dev .