我有一个vim插件,它定义了一堆键映射。从VIM插件中检测文件类型?
我想弄清楚如何改变基于文件类型的键映射的定义。
例如:
如果该文件是一个*的.py:然后映射键X 如果该文件是一个* .PHP:那么键映射为Y
谢谢!
我有一个vim插件,它定义了一堆键映射。从VIM插件中检测文件类型?
我想弄清楚如何改变基于文件类型的键映射的定义。
例如:
如果该文件是一个*的.py:然后映射键X 如果该文件是一个* .PHP:那么键映射为Y
谢谢!
是。一种方法是使用autocmd来调用设置地图的自定义函数。它看起来大致如下内容(可能已经毁损了语法,所以这是不是真的复制& pastable):
augroup foo
autocmd!
autocmd FileType python call MyPythonSettings()
augroup end
function !MyPythonSettings() set noai " set mappings... endfunction
当用户打开要编辑的文件时,会触发FileType
事件。但是,这要求用户在其vimrc
(或手动)中启用:filetype on
,无论是针对这些特定分机还是全局分机。
如果用户正在编辑一个新的文件,你就无法得到那个,直到他们先保存缓冲区或做:setf autohotkey
:setf sql
等
当特定的命令/缩写/映射需要定义,我总是拆我的插件成几个文件:
无用例如:
自动加载插件
" 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/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>
为了不污染其他具有没有意义的映射的文件类型,也不会覆盖以前定义的(和特定的)映射,这些映射确实有意义。