vim文件类型插件与会话冲突



问题

当我从会话恢复时,将不可能加载我的文件类型插件。

例如,我有一个~/.vim/ftplugin/arduino.vim的arduino文件类型插件,内容是这样的。

SyntasticToggleMode
call feedkeys("<CR>")
nnoremap <leader>s :w<cr>:ArduinoVerify<cr>
nnoremap M :ArduinoUpload<cr>

我创建了一个名为test.ino的arduino文件来进行一些编码。每件事看起来都很顺利。文件类型插件加载正确。

然后我用以下命令关闭vim。

  • :mksession!
  • :wviminfo viminfo
  • :qa

现在有一个名为session.vim的会话文件。然后我再次打开vim,它会自动加载会话,因为我的.vimrc.中有这样的东西

filetype indent plugin on 
if filereadable("Session.vim")
    source Session.vim          
endif         
if filereadable("viminfo")
    rviminfo viminfo
endif      

现在出了问题,我的arduino文件类型插件中的密钥映射不起作用。它还打印了一些类似的错误消息。 Error detected while processing /home/lotp/.vim/ftplugin/arduino.vim: line 1: E492: Not an editor command: SyntasticToggleMode"sketch_dec06a.ino" "sketch_dec06a.ino" 12L, 150C E492: Not an editor command: SyntasticToggleMode

事实上,SyntasticToggleMode是一个有效的vim命令,属于一个名为syntastic的vim插件。

问题

有解决这个问题的办法吗?我的意思是同时使用会话和文件类型插件羽毛。

部分答案:

如果使用插件管理器,插件不会直接加载到.vimrc中。它们的路径只是被附加到'runtimepath',并且它们在初始化过程的后面被来源。

在插件初始化结束后,您可以尝试将自己的自定义路径添加(即在.vimrc中)到runtimepath。(例如,对于Vundle,在这一行之后:call vundle#end())然后在your_custom_path/plugin中添加一个vim文件,将代码放在该文件中以获取会话文件。

我没有检查我提供的所有信息,所以很抱歉出现错误,但希望它能给你一些想法。

参见:h startup:h 'runtimepath'

最后,我使用vim插件解决了这个问题。

这是内置vim会话系统的某种改进版本

它被称为vim会话

最新更新