2013-02-01 21 views
19

sappiamo tutti cosa ci"ci'ci(ci[ ... fa. Molto utile nel montaggio di tutti i giorni. Ho trovato qualcosa di strano, e controllato l'aiuto, didn' t scoprire perchéPerché ci" e CI (, ci {.... comportarsi in modo diverso?

dire, ho un file:.

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

se il mio cursore alla inizio di ogni riga, (il 'f'), poi digito ci", ci ', ci (...

il cix funziona solo con virgolette (singole o doppie), non funziona per parentesi. perché si comportano in modo diverso?

(dix, vix lo stesso)

testata con --noplugin, vim 7.3

grazie.

Aggiornamento

grazie @romainl per la risposta. Ho ancora dubbio sulla "coppia trasformazione in vim"

controllo questo esempio:

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

se ho una linea come sopra, ho tipo ci", nessun cursore materia è all'inizio o tra apici, esso funziona perfettamente, sembra che vim abbia l'idea di "coppia"?

e questo forse cosa intendevi per l'abbinamento?

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

devo sopra due linee, se (cursore a x) digito ci" e ci(, non è successo niente di 2a linea, ma prima linea cambiato in:

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

Vim non associa le virgolette. L'euristica che usa è davvero molto semplice: scansiona verso sinistra per trovare un '' o '' '. Ripeti a destra se non c'è hit, quindi ripeti di nuovo a destra per trovare la citazione di chiusura. mai preso in considerazione. – glts

+4

Vedere anche [risposta mia] (http://stackoverflow.com/a/7804666/254635) alla domanda "[Selezione di testo all'interno di una parestesi al di fuori della parentesi in Vim] (http://stackoverflow.com/q/7803905/254.635)". –

+0

@ib. e glts, grazie per i commenti. upvote! – Kent

risposta

13

ci( è coerente con ci[, ci{ e cit e tutti gli altri <action>i<something>. Solo ci' e ci" funzionano come fanno. I valori anomali sono le virgolette, qui, non le parentesi.

Vim non ritiene che le virgolette vengano fornite in coppia mentre le parentesi sono presenti. Ha una logica interna per la corrispondenza di coppie che funziona con coppie reali ma non con virgolette quindi la differenza di comportamento.

Non sei il primo a lamentarsi di tale discrepanza: this is one solution, forse puoi trovarne altri.

modificare

Non ho una profonda conoscenza dei meccanismi interni di Vim, purtroppo, così posso solo fare supposizioni, qui.

Se chiedete Vim fare ci" che fa del suo meglio per trovare un paio di virgolette, ma le virgolette doppie non andare da coppie: non c'è modo di dire se un " è la chiusura di uno o l'apertura uno in contrasto con parentesi. Per questo motivo, Vim deve fare delle scelte. IMO, la scelta che avrebbe più senso considerando come funzionano gli altri membri della famiglia, sarebbe assumere che il cursore sia tra le virgolette e selezionare dal primo a destra al primo a sinistra. Posso solo supporre che questo metodo si sia rivelato in qualche modo sbagliato o non funzionasse per qualche motivo e che l'altro metodo (quello attuale) prevalesse.

Un'altra spiegazione potrebbe essere che il meccanismo i<something> sia in qualche modo collegato a un sottosistema specifico (forse lo stesso di showmatch?) Che non è in grado di gestire correttamente le virgolette.

In ogni caso, proprio come te, trovo questa discrepanza strana e in qualche modo l'ho interiorizzata e allineato il mio uso di <action>i" a come funzionano gli altri. Al punto di fare effettivamente 2t"ci" o qualche variante invece di ci" !! Inefficiente, lo so.

Hai letto :h a'? Ho completamente dimenticato dove ho ottenuto la mia "comprensione limitata" del problema ma era lì! Dice:

"Funziona solo all'interno di una riga Quando il cursore inizia su una citazione, Vim calcolerà quali coppie di quote formano una stringa cercando dall'inizio della riga."

Quello che ricevo da che è questa: per alcuni motivi a noi sconosciuti, Vim usa un altro meccanismo per corrispondenza preventivi rispetto per le altre coppie ed è per questo ci" è diverso da cib e amici. La causa sottostante non è chiara, ma sono abbastanza sicuro che il quadro generale assomigli molto a quello che immagino.

Per me, sembra molto un bug o una limitazione mascherata da funzionalità.

Se sei ancora curioso, ti suggerisco di fare altre domande su vim-dev.

+0

grazie per la risposta. Ho ancora dei dubbi, aggiorno la domanda, per ottenere migliori supporti di formato. puoi dare un'occhiata? grazie. – Kent

+0

@Kent, vedere la mia modifica. – romainl

+0

grazie per la spiegazione! Farò qualche mappatura nel mio .vimrc per cercare di farli comportare allo stesso modo. risposta accettata! – Kent