我的F5密钥的当前映射是:
imap <F5> <esc>:w\|!python %<CR>
Run Code Online (Sandbox Code Playgroud)
现在我希望如果我正在编辑任何python文件(如果它还能识别除标准.py格式之外的其他文件会更好.pyd),那么这个映射就可以了.但是,如果我编辑Java文件,它将被映射到类似:
imap <F5> <esc>:w\|!javac %<CR>
Run Code Online (Sandbox Code Playgroud)
当我正在编辑任何文件.c或.cpp文件时,F5会映射到此:
imap <F5> <esc>:w\|!make %<CR>
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么办.
ZyX*_*ZyX 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>
Run Code Online (Sandbox Code Playgroud)