2011-08-29 11 views
6

Per la maggior parte, trovo che la ricerca di tag maiuscole e minuscole sia appropriata. La maggior parte delle lingue che usiamo sono case sensitive, quindi è auspicabile.Ricerca tag senza maiuscole/minuscole in Vim

Tuttavia, ho un DSL sul mio posto di lavoro che utilizza identificatori maiuscole e minuscole. Genero tag per questo DSL e posso persino ordinarlo con foldcase (e impostare il flag appropriato nel file di tag), ma Vim sembra ancora fare corrispondenze case sensitive sugli identificatori.

Quello che mi piacerebbe sarebbe se Vim potesse capire un file di tag "caso piegato" come "questo linguaggio è insensibile alle maiuscole e minuscole". C'è un ambiente simile?

Suppongo che potrei accendere ignorecase per questo tipo di file (cambio il file dei tag e comunque modificare alcune altre impostazioni), ma poi Vim mi abbaia quando il caso non corrisponde. Mi piacerebbe solo un modo per dire a Vim, "hey, questo non è sensibile alle maiuscole e minuscole, quindi va bene, non hai bisogno di urlarmi contro." In generale, mi sembra desiderabile che Vim possa interpretare l'intento dal modo in cui il file di tag è ordinato, ma forse non è un desiderio generalizzato ...

risposta

1

In definitiva ho appena fatto la soluzione ignorecase. Ho questi nel mio vimrc:

autocmd BufEnter *     setlocal noignorecase 
autocmd BufEnter *.{dsl-a,dsl-b*} setlocal ignorecase 

Fastidioso ma problema risolto; Speravo che Vim notasse l'intestazione nel file di tag:

!_TAG_FILE_SORTED 2 /0=unsorted, 1=sorted, 2=foldcase/ 

Purtroppo sembra che non sia così.


Mi sono imbattuto in un problema l'altro giorno che porta ulteriore documentazione per le masse; alcuni dei tag che avrei cercato non sono stati trovati, ma quando ho cercato nel file dei tag c'erano.Poi ho notato che c'erano delle linee sopra l'elemento che veniva saltato che aveva gli stessi personaggi principali ma poi un trattino basso; Mi sono reso conto che il carattere di sottolineatura stava selezionando prima le lettere e mi chiedevo se questo potesse essere un problema (il carattere di sottolineatura è uno dei sei caratteri che appaiono tra captial Z e minuscolo A, ma l'unico valido in un identificativo C compatibile).

Per risatine ho fatto ricorso manualmente alla sezione incriminata in modo che i caratteri di sottolineatura comparissero dopo le lettere. Ho persino elaborato un caso di test minimale e ho scritto un grosso bug report per bug @ vim e poi ho deciso di cercare nella documentazione sui tag "citare il riferimento appropriato". Lì fu sepolto verso la fine del :help tagbsearch, cioè di poco utile per quelli di noi che sono cronici tl; dr-ers.

Si noti che il caso deve essere piegato in maiuscolo affinché funzioni.

Un cambiamento di una riga al mio script Python fissato il mio file di tag:

if casefold: 
    tags.sort(key=str.upper) # tag file requires case folding to be folded to upper case 
else: 
    tags.sort() 
1

Questa non è una risposta adatta, ma si spera che sia diventerà uno!

Fornirai maggiori dettagli? Come, un piccolo esempio di lavoro?

Ecco il mio tentativo in uno, ma non sono sicuro se illustra ciò di cui stai parlando. Lo terrò anche in un gist nel caso tu voglia collaborare, e forse allora possiamo trovare la risposta insieme.

tags:

blah a.txt 1 

A.txt:

bLah 

Gist of same.

Procedura per riprodurre:

  1. corsa vim
  2. fare :set ignorecase
  3. fare :tag blah
  4. messaggio Get: "tag 1 di 1 o più Utilizzando tag con caso diverso"

Inoltre, si presenta come someone asked this question recently on the Vim user mailing list, ma non vedo alcuna risposta.

+0

Sì questo è il più vicino Sono venuto a una soluzione, anche se il mio file 'tags' ha lo stesso caso del file di origine è etichettato. Cioè 'tags' ha una L maiuscola, ma faccio ancora': tag blah' e ottengo il messaggio "using tag with different case". È noioso. :) –

2

Sono relativamente nuovo per vim, ma ho aggiunto questo al mio .vimrc e sembra funzionare bene per me finora .

"Tag jumping 

function! TagInsensitiveJump() 
    execute ":tj /\\c" . expand("<cword>") 
endfunction 

nnoremap <C-]> :call TagInsensitiveJump()<CR> 
+1

Si potrebbe anche solo ': set ignorecase' nel proprio' .vimrc' per ottenere la stessa cosa. –