vim autocmd BufNewfile多次执行

时间:2015-11-11 02:23:36

标签: vim autocmd

我的〜/ .vimrc仅包含

so ~/config/vim/vimrc

〜/ config / vim / vimrc包含常用选项,几个映射和不同文件类型的源文件,我有:

autocmd FileType cpp so ~/config/vim/filetype/cpp.vimrc

在该文件中,我定义了以下函数,每次打开新的cpp头时都要调用它以避免双重包含:

python import vim

function! s:insert_gates()
python << endPython
hpp = vim.current.buffer.name
hpp = hpp[hpp.rfind('/') + 1:]
hpp = hpp.upper()
hpp = hpp.replace('.', '_')
vim.current.buffer.append("#ifndef " + hpp)
vim.current.buffer.append("# define " + hpp)
vim.current.buffer.append("")
vim.current.buffer.append("#endif")
endPython
endfunction

autocmd BufNewFile *.hpp call <SID>insert_gates()

然后,如果我问我的shell:

vim -O3 t1.hpp t2.hpp t3.hpp

我得到了:

|                     |#ifndef T2_HPP       |#ifndef T3_HPP       |
|                     |# define T2_HPP      |# define T3_HPP      |
|                     |                     |                     |
|                     |#endif               |#endif               |
|                     |                     |#ifndef T3_HPP       |
|                     |                     |# define T3_HPP      |
|                     |                     |                     |
|                     |                     |#endif               |
|                     |                     |                     |
|_____________________|_____________________|_____________________|
|t1.h                 |t2.h                 |t3.h                 |

这不完全是我想要的......你看到我的错误吗?感谢。

1 个答案:

答案 0 :(得分:2)

引用here时,每次打开新文件时,Vim都会创建 new autocmd。为防止出现这种情况,请将.vimrc的该部分替换为:

python import vim

function! s:insert_gates()
python << endPython
hpp = vim.current.buffer.name
hpp = hpp[hpp.rfind('/') + 1:]
hpp = hpp.upper()
hpp = hpp.replace('.', '_')
vim.current.buffer.append("#ifndef " + hpp)
vim.current.buffer.append("# define " + hpp)
vim.current.buffer.append("")
vim.current.buffer.append("#endif")
endPython
endfunction

augroup insertgates
    autocmd!
    autocmd BufNewFile *.hpp call <SID>insert_gates()
augroup END