use super::utils::PathExt; use directories::BaseDirs; use std::fs; use std::path::PathBuf; #[derive(Debug, Clone, Copy)] pub enum PluginFramework { Plug, Vundle, NeoBundle, } impl PluginFramework { pub fn detect(vimrc: &PathBuf) -> Option { let content = fs::read_to_string(vimrc).ok()?; if content.contains("NeoBundle") { Some(PluginFramework::NeoBundle) } else if content.contains("Vundle") { Some(PluginFramework::Vundle) } else if content.contains("plug#begin") { Some(PluginFramework::Plug) } else { None } } pub fn upgrade_command(self) -> &'static str { match self { PluginFramework::NeoBundle => "NeoBundleUpdate", PluginFramework::Vundle => "PluginUpdate", PluginFramework::Plug => "PlugUpgrade | PlugUpdate", } } } pub fn vimrc(base_dirs: &BaseDirs) -> Option { base_dirs .home_dir() .join(".vimrc") .if_exists() .or_else(|| base_dirs.home_dir().join(".vim/vimrc").if_exists()) } pub fn nvimrc(base_dirs: &BaseDirs) -> Option { #[cfg(unix)] return base_dirs.config_dir().join("nvim/init.vim").if_exists(); #[cfg(windows)] return base_dirs.cache_dir().join("nvim/init.vim").if_exists(); }