我有一個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>
爲了不污染其他具有沒有意義的映射的文件類型,也不會覆蓋以前定義的(和特定的)映射,這些映射確實有意義。