Vim-Hervorhebung für bestimmte Dateitypen (Speicherort von Syntaxdateien, Vim-Ereignissen, Zeile, die in Vimrc eingefügt werden soll)


17

Ich habe eine Dateizeit definiert jak.vim, um benutzerdefinierte Hervorhebungen beim Aufnehmen von Notizen zu ermöglichen. Sie wird jedoch auf einige Dateien angewendet, die nicht die .jakErweiterung haben. Insbesondere eine Datei mit dem Namen progress.jlog. Nur um zu testen , ob das Problem war spezifisch für diese Erweiterung I umbenannt progress.jlogzu progress(keine Verlängerung) , aber das gleiche Problem erlebt.

Was ich getan habe:

  • Ich habe jak.vimim Verzeichnis erstellt~/.vim/ftdetect
  • Ich habe die folgende Zeile hinzugefügt: "au BufRead, BufNewFile * .jak set filetype = jak", wie in der vim-Referenz beschrieben
  • Ich habe vim neu gestartet (: x, und dann wieder geöffnet)

So ~/.vim/ftdetect/jak.vimsieht mein aus:

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

Und nur für den Fall, dass Sie wissen müssen, wie ich .vimrcaussehe:

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

Hinweis: Ich habe alle Anführungszeichen (Kommentare) ausgefüllt, um das Lesen zu erleichtern


Aktualisieren

Ich fand nsharishs Post sehr hilfreich. Sie schlugen vor, dass ich dies meinem vimrc hinzufüge:

au BufRead,BufNewFile *.jak set filetype=jak

und füge meine jak.vimDatei hinzu~/.vim/syntax

Leider widerspricht dieser Code diesen beiden Zeilen (in meinem vimrc)

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

Ich verwende diese beiden, um meine Falten, Cursorpositionen usw. beim Laden von vim zu speichern (siehe :help lo). Wenn ich diese beiden Zeilen auskommentiere, wirkt der Vorschlag von nsharish wie ein Zauber. Mit diesen beiden Zeilen gibt es in keiner meiner Dateien eine Hervorhebung.

Fazit

Ich habe die Antwort von nsharish als die beste Antwort markiert (weil sie mir am hilfreichsten ist). Aber so habe ich das Problem gelöst:

Nsharish hatte recht, ich brauchte diese Zeile in meinem .vimrc:

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

Und ich musste meine jak.vimDatei nach verschieben ~/.vim/syntax.

Wie oben erwähnt, gab es jedoch einen Konflikt mit diesen Zeilen:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Als diese Zeilen kommentiert wurden, funktionierte die Hervorhebung.

Was ich tun musste, war das zu ändern ...set filetype...:

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

Ich denke, dass der BufWinEnter nach der BufRead / BufNew-Datei aufgerufen wird, so dass die Hervorhebung durch die vom letzten Mal gespeicherte Formatierung überschrieben wurde.

Nochmals vielen Dank an nsharish, der mir geholfen hat, diese Lösung zu finden.


1
In welchem ​​Sinne stehen die * .c-Anweisungen in Konflikt mit der * .jak-Anweisung?
Akira

Antworten:


10

Hast du das probiert ..

  • Legen Sie Ihre jak.vim im Ordner .vim / syntax ab
  • Fügen Sie die folgenden Zeilen nur in Ihre .vimrc-Datei ein.
Syntax aktivieren 
au BufRead, BufNewFile * .jak set filetype = jak
Ich habe das mit deiner jak.vim-Datei versucht .... Es hat gut funktioniert für mich ....
Ich benutze vim7.2 ...
edit:
Probiere das aus,
ich hatte das gleiche Problem mit diesen mkview- und loadview-Zeilen ... setze den Dateityp einfach einmal in der Datei und er bleibt dann erhalten

Öffne die Datei, dann mache " : set ft = jak ", speichere die Datei und beende vim .... Jetzt öffne die Datei erneut ... Syntax-Hervorhebung sollte jetzt funktionieren ...
mkview und loadview scheinen die letzten Einstellungen für die Syntax-Hervorhebung zu speichern ebenfalls....


versuche es gerade ... Aber weißt du, was der Ordner .vim / ftdetect / bewirkt? Ich habe das Problem, dass alle darin enthaltenen Formatierungsdateien für alle Dateitypen gelten.
Sixtyfootersdude

Huh, das hat teilweise geklappt. Es gab jedoch einen Konflikt mit zwei anderen Zeilen in meinem vimrc. Siehe mein Update.
Sixtyfootersdude

2

Ich muss zugeben, ich weiß nicht sicher, wie nützlich dies für Sie wäre ... Aber ...

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

Ich habe den Text angehängt, falls die Seite entfernt wurde ... oder geändert ...

So fügen Sie eine Dateierweiterung zu vim hinzu Syntax-Hervorhebung Gepostet von Artem Russakovskii am 2. April 2008 in Datenbanken, Linux, Programmierung 24 delicious saves 2 diggs Share 3retweet

Aktualisiert: 8. Juli 2009

Heute wurde mir eine Frage zum Definieren von benutzerdefinierten Erweiterungen für die Hervorhebung der vim-Syntax gestellt, sodass vim beispielsweise weiß, dass example.lmx tatsächlich vom Typ xml ist, und dass die Hervorhebung der xml-Syntax angewendet wird. Ich weiß, dass vim es nicht nur automatisch anhand der Erweiterung tut, sondern indem es nach bestimmten Zeichenfolgen im Text sucht, wie z

Nachdem ich mich umgegraben hatte, fand ich die Lösung. Fügen Sie ~ / .vimrc (der vim-Konfigurationsdatei) Folgendes hinzu:

1 2 3 Syntax für Dateityp in BufNewFile, BufRead * .lmx setze Dateityp = xml Nach dem Anwenden wird meine .lmx-Datei hervorgehoben:

Das gleiche Prinzip funktioniert zum Beispiel für MySQL-Dumps, die ich von Zeit zu Zeit ausführen muss. Wenn sie keine .sql-Erweiterung haben, erhalten Sie so etwas wie:

Nach

1 2 3 Syntax für den Dateityp in BufNewFile, BufRead * .dump set filetype = sql alles ist in Ordnung:

Aber warum und wie funktioniert das?

: help au: au [tocmd] [Gruppe] {Ereignis} {pat} [verschachtelt] {cmd}

Fügen Sie {cmd} zur Liste der Befehle hinzu, die Vim automatisch bei {event} für eine Datei ausführt, die {pat} entspricht. : help BufNewFile Beim Bearbeiten einer nicht vorhandenen Datei. : help BufRead Wenn Sie mit dem Bearbeiten eines neuen Puffers beginnen, nachdem Sie die Datei in den Puffer eingelesen haben. : help filetype wird diese ganze Geschichte in Teil B erzählen. Und so machst du es, Leute.


Huh, ich werde mir das gleich
genauer

Nun, das könnte möglicherweise ein Problem lösen, aber ich glaube nicht, dass es dieses Problem lösen wird ... Ich denke, dass der Schlüssel dazu mit dem .vim/ftdetectVerzeichnis zu tun hat ...
sixtyfootersdude

Ich benutze ehrlich gesagt nicht einmal VIM, also muss ich Ihr Wort darauf nehmen ...
Benjamin Schollnick

1

Ich habe versucht zu reproduzieren, was Sie getan haben, konnte den Dateityp jedoch nicht auf andere Erweiterungen anwenden.

Ich fand auch, dass dies half:

In der Vim-Hilfedatei für 'new-filetype' wird erwähnt, dass Sie Ihre eigene Datei 'filetype.vim' erstellen ~/.vim/filetype.vim und Ihre automatischen Befehle in diese Datei schreiben:

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

Alle diese Syntax- und Markierungsbefehle aus Ihrer jak.vim müssen unter gespeichert ~/.vim/syntaxwerden. Kopieren Sie sie also nach ~/.vim/syntax/jak.vim(ohne den auBefehl).

Sie müssen Vim auch beenden und neu starten, um die Änderungen zu übernehmen.


1

Ich denke, die Dinge könnten verdreht sein, aber ich bin kein Vim-Experte.

Ihre Syntaxhervorhebungsdatei sollte sich im Syntaxverzeichnis befinden. Die Dinge in nsharishs Rat könnten sein, was in die Datei passt, die Sie in ftdetect ablegen.

Dieser Teil:

au BufRead,BufNewFile *.jak set filetype=jak

In .vimrc müssen Sie möglicherweise auch eine Zeile wie die folgende hinzufügen:

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

IMHO macht es auf diese Weise mehr Sinn. Ich hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.