Evidenziazione Vim per tipi di file specifici (dove mettere i file di sintassi, eventi vim, linea da mettere in vimrc)


17

Ho definito un tempo di file jak.vimper offrire l'evidenziazione personalizzata quando prendo appunti, tuttavia viene applicato ad alcuni file che non hanno l' .jakestensione. In particolare un file denominato progress.jlog. Proprio per verificare se il problema fosse specifico per tale interno ho rinominato progress.jloga progress(senza estensione), ma ha sperimentato lo stesso problema.

Cosa ho fatto:

  • Ho creato jak.vimnella directory~/.vim/ftdetect
  • Ho aggiunto questa riga: "au BufRead, BufNewFile * .jak set filetype = jak" all'inizio come descritto nel riferimento vim
  • Ho riavviato vim (: x, quindi riaperto)

Ecco ~/.vim/ftdetect/jak.vimcome appare il mio :

~/.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

E nel caso in cui hai bisogno di sapere che questo è come .vimrcappare il mio :

~/.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: ho completato tutte le citazioni (commenti) per facilitarne la lettura


Aggiornare

Ho trovato molto utile il post di nsharish . Mi hanno suggerito di aggiungere questo al mio vimrc:

au BufRead,BufNewFile *.jak set filetype=jak

e aggiungi il mio jak.vimfile a~/.vim/syntax

Sfortunatamente quel codice è in conflitto con queste due righe (nel mio vimrc)

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

Uso questi due per salvare le mie pieghe, la posizione del cursore, ecc. Durante il caricamento di vim (vedi :help lo). Se commento queste due righe, il suggerimento di nsharish funziona come un incantesimo. Con queste due righe non c'è alcun evidenziazione in nessuno dei miei file.

Conclusione

Ho contrassegnato la risposta di nsharish come la migliore risposta (perché è la più utile per me). Tuttavia, è così che ho risolto il problema:

Nsharish aveva ragione, avevo bisogno di questa linea nel mio .vimrc:

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

E dovevo spostare il mio jak.vimfile in ~/.vim/syntax.

Tuttavia, come notato sopra, c'è stato un conflitto con queste linee:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Quando queste righe sono state commentate, l'evidenziazione ha funzionato.

Quello che dovevo fare era cambiare ...set filetype...in questo:

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

Penso che BufWinEnter sia chiamato dopo il file BufRead / BufNew, quindi l'evidenziazione veniva sovrascritta dalla formattazione salvata dall'ultima volta.

Grazie ancora a nsharish per avermi aiutato a trovare questa soluzione.


1
in che senso le istruzioni * .c sono in conflitto con l'istruzione * .jak?
Akira

Risposte:


10

Hai provato questo ..

  • Inserisci il tuo jak.vim nella cartella .vim / sintassi
  • inserisci le seguenti righe solo nel tuo file .vimrc.
sintassi abilita 
au BufRead, BufNewFile * .jak set filetype = jak
Ho provato questo con il tuo file jak.vim .... Ha funzionato bene per me ....
Sto usando vim7.2 ...
modifica:
prova questo,
ho avuto lo stesso problema con quelle linee mkview e loadview ... basta impostare il tipo di file una volta nel file e verrà quindi mantenuto

Apri il file, quindi fai " : set ft = jak ", salva il file ed esci da vim .... Ora riapri il file ... l'evidenziazione della sintassi dovrebbe funzionare ora ...
mkview e loadview sembrano salvare le ultime impostazioni di evidenziazione della sintassi anche....


prova ora ... Ma sai cosa fa la cartella .vim / ftdetect /? Il comportamento che sto riscontrando è che qualsiasi file di formattazione presente si applica a tutti i tipi di file.
sixtyfootersdude

Eh, ha funzionato in parte .. Comunque c'è stato un conflitto con altre due righe nel mio vimrc. Vedi il mio aggiornamento
sixtyfootersdude

2

Devo ammettere che non so per certo quanto ti sarebbe utile ... Ma ...

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

Ho aggiunto il testo in caso di rimozione della pagina ... O alterata ...

Come aggiungere un'estensione di file per evidenziare la sintassi di Vim, pubblicata da Artem Russakovskii il 2 aprile 2008 in Database, Linux, Programmazione 24 deliziosi salvataggi 2 digg Condividi 3retweet

Aggiornato: 8 luglio 2009

Oggi mi è stata posta una domanda sulla definizione di estensioni personalizzate per l'evidenziazione della sintassi di vim in modo tale che, ad esempio, vim sapesse che example.lmx è in realtà di tipo xml e applica l'evidenziazione della sintassi xml. So che vim lo fa già automaticamente non solo in base all'estensione, ma cercando determinate stringhe all'interno del testo, come

Dopo aver scavato ho trovato la soluzione. Aggiungi quanto segue a ~ / .vimrc (il file di configurazione di vim):

1 2 3 sintassi sul tipo di file su BufNewFile, BufRead * .lmx set filetype = xml Dopo averlo applicato, il mio file .lmx viene evidenziato:

Lo stesso principio funziona, ad esempio, per le discariche mysql che devo fare di tanto in tanto. Se non hanno un'estensione .sql, otterrai qualcosa del tipo:

Dopo

1 2 3 sintassi su filetype su au BufNewFile, BufRead * .dump set filetype = sql va tutto bene:

Ma perché e come funziona, chiedi?

: help au: au [tocmd] [group] {event} {pat} [nidificato] {cmd}

Aggiungi {cmd} all'elenco dei comandi che Vim eseguirà automaticamente su {event} per un file corrispondente a {pat}. : help BufNewFile Quando si inizia a modificare un file che non esiste. : help BufRead Quando si inizia a modificare un nuovo buffer, dopo aver letto il file nel buffer. : help filetype in realtà racconterà l'intera storia nella parte B. Ed è così che lo fai, gente.


Eh, avremo modo di approfondire presto, ma sembra utile ..
sixtyfootersdude

Bene, ciò potrebbe potenzialmente risolvere un problema, ma non credo che risolverà questo problema ... Penso che la chiave di ciò abbia a che fare con la .vim/ftdetectdirectory ...
sixtyfootersdude

Onestamente non uso nemmeno VIM, quindi dovrò prendere la tua parola su di esso ...
Benjamin Schollnick

1

Ho provato a riprodurre ciò che hai fatto, ma non sono riuscito ad applicare il tipo di file ad altre estensioni.

Ho anche scoperto che questo ha aiutato:

Il file di aiuto di Vim per "new-filetype" menziona la creazione del proprio "filetype.vim" ~/.vim/filetype.vim e la scrittura dei comandi automatici in quel file:

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

Tutte quelle sintassi e comandi di evidenziazione dal tuo jak.vim devono essere archiviate in ~/.vim/syntax, quindi copialo in ~/.vim/syntax/jak.vim(senza il aucomando).

Dovrai anche uscire da Vim e riavviare per raccogliere le modifiche.


1

Penso che le cose potrebbero essere distorte, ma non sono un esperto di VIM.

Il file di evidenziazione della sintassi dovrebbe trovarsi nella directory della sintassi. Le cose nel consiglio di nsharish potrebbero essere ciò che va nel file che inserisci all'interno di ftdetect.

Questa parte:

au BufRead,BufNewFile *.jak set filetype=jak

In .vimrc, potresti anche dover aggiungere una riga come:

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

IMHO, ha più senso in questo modo. Spero che questo possa essere d'aiuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.