Vim配置特定的文件类型

时间:2011-04-22 03:10:30

标签: vim

我正在努力使用.vimrc根据文件类型应用特定配置。在autocmd FileType建议here之后,我尝试根据文件类型应用配置。这是我在.vimrc中的内容:

autocmd FileType tex call Tex_config()
  function Tex_config()
    let g:LatexBox_viewer = 'skim'
    let g:LatexBox_latexmk_options = '-pvc'
    let g:tex_flavor = "latex"
    setlocal spell spelllang=en_ca
  endfunction

我可以用以下函数调用函数Tex_config():debug Tex_config:Vim愉快地通过该函数。所以,一切似乎都应该有效。

但是,当我发出:set filetype=tex时会发生奇怪的事情:拼写检查会关闭。当我发出:set filetype=foo拼写检查时。与我希望从此配置代码段发生的情况相反!

非常感谢任何帮助。这是完整的vimrc(函数在44-50)。感谢。

2 个答案:

答案 0 :(得分:5)

不要将.vimrc用于特定于文件类型的东西,Lynch为文件类型或情境vimrc设置描述了一种非常精确的机制。

例如:我的.vim中的一些东西

.vim/ftdetect:
haml.vim       macports.vim   puppet.vim
hiveminder.vim markdown.vim   ruby.vim

.vim/ftplugin:
haml.vim             portfile.vim         sshconfig.vim
html_snip_helper.vim python.vim           tmux.vim
javascript.vim       python_match.vim     zsh.vim
markdown.vim         sass.vim
plist.vim            scss.vim

,比方说,我的sshconfig.vim文件(我设置了“K”,为我提供了sshconfig的联机帮助页面,其中包含我的光标所在的标题。好的,这个技巧。)

" sshconfig ftplugin. 
" At this point, only want to set man as the keywordprg

if exists("b:did_ftplugin")
    finish
endif
let b:did_ftplugin = 1

"  Customizations for sshconfig files
"  what I _want_ is to jump to the heading 
set keywordprg=man\ ssh_config\ -P\ \'less\ -p\ <cword>\'

现在,在.vim / ftdetect / macports.vim中,我有代码来确定这个文件是否是一个Portfile

" Portfile
au BufNewFile,BufRead Portfile  set filetype=portfile
au FileType portfile compiler portfile

我应该把那个编译器端口文件拉出来并放到ftplugins中,因为你可以看到这个系统会变得多么疯狂,但这就是ctags和git的用途。

答案 1 :(得分:2)

您可以将特定命令添加到.vim / ftplugin / tex.vim。然后,Vim会自动识别tex是一种文件类型,并从tex.vim加载其行为。

例如,我将此用于手册页.vim / ftplugin / man.vim:

setlocal nolist
setlocal nomod
setlocal nonumber

" Set scratch buffer"
setlocal buftype=nofile
setlocal bufhidden=hide
setlocal noswapfile

确保你的vimrc中有这一行来设置你的vim文件夹:

let $VIM='~/.vim/'