我有一个vim插件,它定义了一堆键映射。
我正在试图弄清楚如何根据文件类型更改键映射的定义。
例如:
如果文件是* .py:则将密钥映射到X. 如果文件是* .php:那么将键映射到Y
谢谢!
答案 0 :(得分:2)
是。一种方法是使用autocmd来调用设置地图的自定义函数。它看起来像粗略,如下所示(可能会破坏语法,所以这不是真正的复制和可接受的):
augroup foo
autocmd!
autocmd FileType python call MyPythonSettings()
augroup end
function !MyPythonSettings()
set noai
" set mappings...
endfunction
答案 1 :(得分:1)
当需要定义特定的命令/缩写/映射时,我总是将我的插件分成几个文件:
无用的例子:
自动加载插件
" autoload/lh/ThePlugin.vim
let g:multby = 42
function lh#ThePlugin#fn(arg)
return a:arg * g:multby
endfunction
function lh#ThePlugin#inc_mult()
let g:multby += 1
endfunction
“普通”插件
" plugin/ThePlugin.vim
if exist('g:ThePlugin_loaded') | finish | endif
let g:ThePlugin_loaded = '1.0.0'
nnoremap £ :call lh#ThePlugin#inc_mult()
一个ftplugin
" ftplugin/cpp/cpp_ThePlugin.vim
if exist('b:ThePlugin_loaded') | finish | endif
let b:ThePlugin_loaded = '1.0.0'
inoremap <buffer> µ <c-r>=lh#ThePlugin#fn(12)<cr>
PS:请注意<buffer>
的使用,以便不会使用无意义的映射污染其他文件类型,也不会覆盖以前定义的(和特定的)有意义的映射。
答案 2 :(得分:0)
当用户打开要编辑的文件时,会触发FileType
事件。但是,这要求用户在:filetype on
(或手动)中启用vimrc
,无论是针对这些特定扩展还是全局扩展。
如果用户正在编辑新文件,那么在他们第一次保存缓冲区或执行:setf autohotkey
:setf sql
等之前,您将无法获得该文件。