给出的答案和原始映射都存在问题。首先,对于缓冲区本地映射,有*map <buffer>
. 其次,<buffer>
您不需要使用BufEnter
事件,而是可以使用Filetype
仅启动一次的事件。第三,您有一个错误 (2.)、一个潜在问题 (1.) 和一个可以在原始映射中优化的地方:
- 你不应该使用
imap
它,它很容易在添加新映射时意外破坏旧映射
!python %
一旦文件包含特殊符号(空格、分号、引号、美元……),将中断
- 在某些情况下使用
:update
而不是避免无用的写入:write
我的变种:
autocmd Filetype c,cpp inoremap <buffer> <F5> <C-o>:update<Bar>execute '!make '.shellescape(expand('%:r'), 1)<CR>
autocmd Filetype python inoremap <buffer> <F5> <C-o>:update<Bar>execute '!python '.shellescape(@%, 1)<CR>
autocmd Filetype java inoremap <buffer> <F5> <C-o>:update<Bar>execute '!javac '.shellescape(@%, 1)<CR>