2011-08-29 13 views
6

En su mayor parte, me parece el caso de etiquetas sensibles a buscar ser apropiado. La mayoría de los idiomas que usamos distinguen entre mayúsculas y minúsculas, por lo que es deseable.Caso etiqueta insensibles búsqueda en Vim

Sin embargo, tengo una conexión DSL en mi lugar de trabajo que utiliza identificadores de casos insensibles. Genero etiquetas para este DSL, e incluso puedo ordenarlo con foldcase (y establecer el indicador apropiado en el archivo de etiqueta), pero Vim todavía parece hacer coincidir las mayúsculas y minúsculas en los identificadores.

lo que me gustaría es que si Vim podría comprender un 'caso plegada' de archivos de símbolos como "este lenguaje es sensible a mayúsculas." ¿Hay tal escenario?

Supongo que podría activar ignorecase para este tipo de archivo (cambio el archivo de etiquetas y cambio algunos otros ajustes de todos modos), pero luego Vim me ladra cuando la caja no coincide. Me encantaría una manera de decirle a Vim, "oye, esto no es sensible a mayúsculas, así que está bien, no es necesario que me grites al respecto". En general, me parece deseable que Vim pueda interpretar el intento por la forma en que se clasifica el archivo de etiqueta, pero tal vez ese no sea un deseo ampliamente aceptado ...

Respuesta

1

En última instancia que acabo de hacer la solución ignorecase. Tengo estos en mi vimrc:

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

Molesto pero problema resuelto; Yo esperaba que Vim se daría cuenta de la cabecera en el archivo de la etiqueta:

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

Por desgracia, parece que no es así.


Me encontré con un problema el otro día que contiene documentación adicional para las masas; algunas de las etiquetas que buscaría no se encontraron, pero cuando miré en el archivo de etiquetas estaban allí.Luego noté que había líneas sobre el elemento que se saltó que tenían los mismos caracteres principales pero luego un guión bajo; Me di cuenta de que el guión bajo estaba ordenando antes de las letras y me pregunté si eso podría haber sido un problema (el subrayado es uno de los seis caracteres que aparecen entre la Z y la minúscula A, pero la única válida en un identificador compatible con C).

Para risitas, recurrí manualmente a la sección ofensiva para que los guiones bajos aparecieran después de las letras. Incluso trabajé en un caso de prueba mínimo y escribí un gran informe de fallas para bugs @ vim y luego decidí buscar en la documentación de las etiquetas para "citar la referencia apropiada". Allí fue enterrado hacia el final de :help tagbsearch, es decir, de poco uso para aquellos de nosotros que somos crónicos.

Tenga en cuenta que la caja debe doblarse a mayúsculas para que funcione.

Un cambio una línea a mi script Python fijo mi archivo de la etiqueta:

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

Esta no es una respuesta adecuada, pero con suerte se convertirá en uno!

le dará más detalles? Como, un pequeño ejemplo de trabajo?

Aquí está mi intento de uno, pero no estoy seguro de si se ilustra lo que estás hablando. También lo mantendré en un gist en caso de que quiera colaborar, y quizás entonces podamos encontrar la respuesta juntos.

tags:

blah a.txt 1 

A.txt:

bLah 

Gist of same.

Pasos para reproducir:

  1. plazo vim
  2. hacer :set ignorecase
  3. hacer :tag blah
  4. mensaje deseando: "! Etiqueta 1 de 1 o más Usando la etiqueta con diferentes casos"

Además, parece someone asked this question recently on the Vim user mailing list, pero no veo ninguna respuesta.

+0

Sí, esto es lo más cerca que he llegado a una solución, aunque mi archivo 'tags' tiene el mismo caso que el archivo fuente que está etiquetado. Es decir. 'tags' tiene una L mayúscula, pero aún así': tag blah' y aparece el mensaje "using tag with different case". Esto es molesto. :) –

2

soy relativamente nuevo en vim, pero añade esto a mi .vimrc y parece que funciona bien para mí hasta ahora .

"Tag jumping 

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

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

También podría simplemente ': establecer ignorecase' en su' .vimrc' para lograr lo mismo. –

Cuestiones relacionadas