我的 F5 键的当前映射是:
imap <F5> <esc>:w\|!python %<CR>
现在我想要的是,如果我正在编辑任何python文件(如果它还能识别.py
等标准.pyd
格式以外的文件会更好那么这种映射可以正常工作。但是,如果我编辑Java文件,它将映射到类似:
imap <F5> <esc>:w\|!javac %<CR>
当我正在编辑任何.c
或.cpp
文件时, F5 会映射到此:
imap <F5> <esc>:w\|!make %<CR>
我不知道如何继续。
答案 0 :(得分:13)
给定答案和原始映射都存在问题。首先,对于缓冲区本地映射,存在*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>
答案 1 :(得分:1)
试试这个:
au BufEnter *.py map <F5> <esc>:w\|!python %<CR>
au BufEnter *.java imap <F5> <esc>:w\|!javac %<CR>
au BufEnter *.c, *.cpp imap <F5> <esc>:w\|!make %<CR>
我不是100%确定逗号分隔的文件类型,试图验证...
vim文档通常非常讨厌如何使用命令,但这些应该有助于您入门:
:h BufEnter
:h :autocmd
注意:您可能必须重新启动vim才能覆盖当前的自动命令组。