我已经定义了一个文件时间,jak.vim
以便在我做笔记时提供自定义突出显示,但它被应用于一些没有.jak
扩展名的文件。特别是名为的文件progress.jlog
。为了测试问题是否特定于该扩展名,我将其重命名progress.jlog
为progress
(无扩展名),但遇到了同样的问题。
我做了什么:
- 我
jak.vim
在目录中创建~/.vim/ftdetect
- 我按照说明将这一行添加到顶部在 vim 参考中
au BufRead, BufNewFile *.jak set filetype=jak
- 我重新启动了 vim(:x,然后重新打开)
这就是我的~/.vim/ftdetect/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
如果你想知道我的.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: https://superuser.com/questions/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
更新
我发现nsharish 的帖子非常有帮助。他们建议我将以下内容添加到我的 vimrc 中:
au BufRead,BufNewFile *.jak set filetype=jak
并将我的jak.vim
文件添加到~/.vim/syntax
不幸的是,该代码与这两行冲突(在我的 vimrc 中)
au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview
我在加载 vim 时使用这两个命令保存折叠、光标位置等(请参阅:help lo
)。如果我注释掉这两行,nsharish 的建议就会奏效。有了这两行,我的任何文件都不会突出显示。
结论
我标记了nsharish 的回答作为最佳答案(因为它对我最有帮助)。然而,我是这样解决问题的:
Nsharish 是对的,我需要这行代码.vimrc
:
syntax enable
au BufRead,BufNewFile *.jak set filetype=jak
我需要将我的jak.vim
文件移动到~/.vim/syntax
。
然而如上所述,这些行存在冲突:
au BufWinLeave * mkview
au BufWinEnter * silent loadview
当这些行被注释时,突出显示就起作用了。
我需要做的是将其更改...set filetype...
为:
au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak
我认为 BufWinEnter 被称为后BufRead/BufNew 文件,因此突出显示将被上次保存的格式覆盖。
再次感谢 nsharish 帮助我找到这个解决方案。
答案1
你试过这个吗?
- 把你的 jak.vim 放进去.vim/语法文件夹
- 仅将以下几行放入您的 .vimrc 文件中。
语法启用我尝试使用你的 jak.vim 文件...对我来说效果很好....
au BufRead,BufNewFile *.jak 设置 filetype=jak
我正在使用 vim7.2...
编辑:
试试这个,
我在使用 mkview 和 loadview 行时遇到了同样的问题...只需在文件中设置一次文件类型,它就会被保留下来
打开文件,然后执行“:设置 ft=jak“,保存文件并退出 vim...现在重新打开文件...语法高亮现在应该可以工作了...
视图和加载视图似乎还保存了最后的语法高亮设置...
答案2
我必须承认,我不确定这对你有多大用处......但是......
http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/
我已经附加了文本以防页面被删除...或被更改......
如何为 vim 语法高亮添加文件扩展名 由 Artem Russakovskii 于 2008 年 4 月 2 日发布在数据库、Linux、编程 24 个 delicious 保存 2 个 diggs 分享 3 次转推
更新日期:2009 年 7 月 8 日
今天有人问我一个问题,关于为 vim 语法高亮定义自定义扩展,例如,vim 会知道 example.lmx 实际上是 xml 类型,并对其应用 xml 语法高亮。我知道 vim 已经自动执行此操作,不仅仅是基于扩展名,而是通过在文本中查找某些字符串,例如
经过一番研究,我找到了解决方案。将以下内容添加到 ~/.vimrc(vim 配置文件):
1 2 3 语法 on filetype on au BufNewFile,BufRead *.lmx set filetype=xml 应用后,我的.lmx 文件将突出显示:
例如,对于我有时必须进行的 mysql 转储,同样的原则也适用。如果它们没有 .sql 扩展名,您将得到类似以下内容:
后
1 2 3 文件类型上的语法在 au BufNewFile,BufRead *.dump 设置文件类型=sql 一切正常:
但您可能会问,为什么它起作用以及它是如何起作用的呢?
:help au :au[tocmd] [组] {事件} {pat} [嵌套] {cmd}
将 {cmd} 添加到 Vim 将在与 {pat} 匹配的文件的 {event} 上自动执行的命令列表中。:help BufNewFile 开始编辑不存在的文件时。:help BufRead 开始编辑新缓冲区时,将文件读入缓冲区后。:help filetype 实际上会在 B 部分讲述整个故事。这就是你们如何做的,伙计们。
答案3
我尝试重现您所做的事情,但无法将文件类型应用到其他扩展名。
我还发现这有帮助:
Vim 的“new-filetype”帮助文件提到创建自己的“filetype.vim”~/.vim/filetype.vim
并在该文件中写入自动命令:
if exists("did_load_filetypes")
finish
endif
augroup filetypedetect
au! BufRead,BufNewFile *.jak setfiletype jak
augroup END
jak.vim 中的所有语法和高亮命令都需要存储在下~/.vim/syntax
,因此将其复制到~/.vim/syntax/jak.vim
(不带au
命令)。
您还必须退出 Vim 并重新启动才能使更改生效。
答案4
我认为事情可能会发生扭曲,但我不是 vim 专家。
您的语法高亮文件应位于语法目录中。nsharish 的建议中的内容可能就是您放置在 ftdetect 中的文件中的内容。
这部分:
au BufRead,BufNewFile *.jak set filetype=jak
在 .vimrc 中,你可能还需要添加如下行:
au! syntax jak source $VIM/syntax/jak.vim
在我看来,这样更有意义。希望这对你有帮助。