Vim:.vimrc清理后没有触发Autocmds

时间:2011-08-11 19:02:59

标签: vim

为了弄清楚为什么没有触发用于新Java源文件的某个autocmd,我决定清理我的.vimrc和我的.vim / ftplugin / java.vim。这导致了 所有与Java相关的autocmds都不会被触发。例如。我无法再使用:make进行编译。有人可以告诉我,我在下面的.vimrc中搞砸了什么吗?我也添加了我的java.vim。

的.vimrc:

set nocompatible
set bs=2
set tw=72
set cindent
set mouse=a
set nowrapscan
set showmatch
set showmode
set uc=0
map ^H X
map \e[3~ x
set mousehide
set hlsearch
let c_comment_strings=1

" Color for xiterm, rxvt, nxterm, color-xterm :
if has("terminfo")
set t_Co=8
set t_Sf=\e[3%p1%dm
set t_Sb=\e[4%p1%dm
else
set t_Co=8
set t_Sf=\e[3%dm
set t_Sb=\e[4%dm
endif

"Appearences
colorscheme wombat256 
set t_Co=256

set path+=.

syntax on
filetype plugin indent on

map gf <C-W>f
set number
set grepprg=grep\ -nH\ $*

"Typo/spelling abbreviations
ab weigth weight

java.vim里:

set shiftwidth=4
au BufRead,BufNewFile *.java set textwidth=80
au BufRead,BufNewFile *.java set makeprg=javac\ %
au BufRead,BufNewFile *.java set errorformat=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#
au BufRead *.java set include=^\s*import 
au BufRead *.java set includeexpr=substitute(v:fname,'\\.','/','g')

"Add some boiler plate
au! BufNewFile *.java
\ exe "normal O/*\r" . expand('%:t') . "\t" . strftime("%B %d %Y") .
\ "\r/\r\rpublic class " . expand('%:t:r') . " {\r\t" |
\ startinsert!

"Abbreviations
ab psvm  public static void main(String[] args) {<ESC>o
ab sopl  System.out.println();<ESC>hi
ab sepl  System.error.println();<ESC>hi
ab fori  for (int i = 0; i <; i++) {<ESC>7hi

编辑:当我打开扩展名为.java的文件时,set filetype?我得到filetype=java,但au没有被触发。

2 个答案:

答案 0 :(得分:0)

我认为你应该将java.vim移动到〜/ .vim / ftplugin / java /java.vim。

您不需要将java.vim中的设置放在'au'过滤器后面。整个文件将来源于java文件。

e.g。在我的.vim / ftplugin / java / java.vim我有类似的行:

setlocal textwidth=120 wm=120 smartindent expandtab softtabstop=4

" Compile maven
nmap <F5> :!mvn compile<cr>

答案 1 :(得分:0)

旁注:正如werkshy指出的那样,所有的定义都应该放到java-ftplugin中,它应该是自动命令的。在那里,所有定义都应该是缓冲本地的:例如

setlocal textwidth=80
...
ab <buffer> psvm  public static void main(String[] args) {<ESC>o
nnoremap <buffer> <F5> :make<cr>

回到您的问题:这里,模板加载自动命令的定义太晚了。它必须在插件/你的.vimrc中完成。最好的解决方案当然是依靠template-expander plugin。他们中的大多数现在都支持对viml函数的解释。这样,模板将更容易维护。