Resaltado de Vim para tipos de archivo específicos (dónde colocar archivos de sintaxis, eventos de vim, línea para colocar en vimrc)

17

He definido un tiempo de archivo jak.vimpara ofrecer resaltado personalizado cuando tomo notas, sin embargo, se aplica a algunos archivos que no tienen la .jakextensión. Específicamente un archivo llamado progress.jlog. Sólo para probar si el problema era específico para esa extensión Retitulé progress.jloga progress(sin extensión), pero experimentó el mismo problema.

Lo que hice:

  • Creé jak.vimen el directorio~/.vim/ftdetect
  • Agregué esta línea: "au BufRead, BufNewFile * .jak set filetype = jak" en la parte superior como se describe en la referencia de vim
  • Reinicié vim (: x, y luego volví a abrir)

Así es ~/.vim/ftdetect/jak.vimcomo se ve mi :

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

Y en caso de que necesites saber, así es .vimrccomo se ve mi :

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: /superuser/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

Nota: Completé todas las citas (comentarios) para que sea más fácil de leer.


Actualizar

La publicación de nsharish me pareció muy útil. Sugirieron que agregue esto a mi vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

y agrego mi jak.vimarchivo a~/.vim/syntax

Desafortunadamente, ese código entra en conflicto con estas dos líneas (en mi vimrc)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

Utilizo estos dos para guardar mis pliegues, la ubicación del cursor, etc. al cargar vim (ver :help lo). Si comento esas dos líneas, la sugerencia de nsharish funciona a las mil maravillas. Con esas dos líneas no hay resaltado en ninguno de mis archivos.

Conclusión

Marqué respuesta de nsharish como la mejor respuesta (ya que como más útil para mí). Sin embargo, así es como resolví el problema:

Nsharish tenía razón, necesitaba esta línea en mi .vimrc:

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

Y necesitaba mover mi jak.vimarchivo a ~/.vim/syntax.

Sin embargo, como se señaló anteriormente, hubo un conflicto con estas líneas:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Cuando se comentaron estas líneas, el resaltado funcionó.

Lo que tenía que hacer era cambiar ...set filetype...esto a esto:

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

Creo que se llama al BufWinEnter después del archivo BufRead / BufNew, por lo que el formato se sobrescribió con el formato guardado la última vez.

Gracias nuevamente a nsharish por ayudarme a encontrar esta solución.

Sixtyfootersdude
fuente
1
¿en qué sentido las declaraciones * .c entran en conflicto con la declaración * .jak?
akira

Respuestas:

10

¿Intentaste esto?

  • Pon tu jak.vim en la carpeta .vim / syntax
  • ponga las siguientes líneas solo en su archivo .vimrc.
sintaxis enable 
au BufRead, BufNewFile * .jak set filetype = jak
Intenté esto con su archivo jak.vim ... Funcionó bien para mí ...
Estoy usando vim7.2 ...
editar:
Pruebe esto,
tuve el mismo problema con esas líneas mkview y loadview ... solo establezca el tipo de archivo una vez en el archivo y luego se retendrá

Abra el archivo, luego haga " : set ft = jak ", guarde el archivo y salga de vim .... Ahora vuelva a abrir el archivo ... el resaltado de sintaxis debería funcionar ahora ...
mkview y loadview parecen guardar la última configuración de resaltado de sintaxis además....

asdfg
fuente
intentando ahora ... Pero, ¿sabes qué hace la carpeta .vim / ftdetect /? El comportamiento que estoy experimentando es que cualquier archivo de formato allí se aplica a todos los tipos de archivos.
sixtyfootersdude
Huh, eso funcionó parcialmente. Sin embargo, hubo un conflicto con otras dos líneas en mi vimrc. Mira mi actualización.
sixtyfootersdude
2

Debo admitir que no sé con certeza lo útil que esto sería para ti ... Pero ...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

He agregado el texto en caso de que la página se retire ... o se modifique ...

Cómo agregar una extensión de archivo para resaltar la sintaxis de vim Publicado por Artem Russakovskii el 2 de abril de 2008 en Bases de datos, Linux, Programación 24 deliciosas salvaciones 2 diggs Compartir 3retweet

Actualizado: 8 de julio de 2009

Hoy me hicieron una pregunta sobre cómo definir extensiones personalizadas para resaltar la sintaxis de vim de modo que, por ejemplo, vim supiera que example.lmx es en realidad de tipo xml y le aplique el resaltado de sintaxis xml. Sé que vim ya lo hace automáticamente, no solo en función de la extensión, sino al buscar ciertas cadenas dentro del texto, como

Después de cavar, encontré la solución. Agregue lo siguiente a ~ / .vimrc (el archivo de configuración de vim):

1 2 3 sintaxis en filetype en au BufNewFile, BufRead * .lmx set filetype = xml Después de aplicarlo, mi archivo .lmx se resalta:

El mismo principio funciona, por ejemplo, para los volcados de mysql que tengo que hacer de vez en cuando. Si no tienen una extensión .sql, obtendrás algo como:

Después

1 2 3 sintaxis en filetype en au BufNewFile, BufRead * .dump set filetype = sql todo está bien:

¿Pero por qué y cómo funciona, preguntas?

: ayuda au: au [tocmd] [grupo] {evento} {pat} [anidado] {cmd}

Agregue {cmd} a la lista de comandos que Vim ejecutará automáticamente en {event} para un archivo que coincida con {pat}. : help BufNewFile Al comenzar a editar un archivo que no existe. : help BufRead Al comenzar a editar un nuevo búfer, después de leer el archivo en el búfer. : tipo de archivo de ayuda realmente contará toda esta historia en la parte B. Y así es como lo hacen, amigos.

Benjamin Schollnick
fuente
Eh, voy a tener una mejor
visión de
Bueno, eso puede potencialmente resolver un problema, pero no creo que va a resolver este prob ... Creo que la clave para esto tiene que ver con el .vim/ftdetectdirectorio de ...
sixtyfootersdude
Sinceramente, ni siquiera uso VIM, así que tendré que
confiar
1

Intenté reproducir lo que has hecho, pero no pude aplicar el tipo de archivo a otras extensiones.

También descubrí que esto ayudó:

El archivo de ayuda de Vim para 'new-filetype' menciona la creación de su propio 'filetype.vim' ~/.vim/filetype.vim y la escritura de sus comandos automáticos en ese archivo:

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

Todos esos comandos de sintaxis y resaltado de su jak.vim deben almacenarse en ~/.vim/syntax, así que cópielos en ~/.vim/syntax/jak.vim(sin el aucomando).

También tendrá que salir de Vim y reiniciar para recoger los cambios.

njd
fuente
1

Creo que las cosas podrían cambiar, pero no soy un experto.

Su archivo de resaltado de sintaxis debe estar en el directorio de sintaxis. Las cosas en el consejo de nsharish podrían ser lo que va en el archivo que coloca dentro de ftdetect.

Esta parte:

au BufRead,BufNewFile *.jak set filetype=jak

En .vimrc, también puede necesitar agregar una línea como:

au! syntax jak source $VIM/syntax/jak.vim

En mi humilde opinión, tiene más sentido de esta manera. Espero que esto ayude.


fuente