vim 插件自动配置安装脚本

153 阅读3分钟
#!/bin/bash

export BUNDLE_DIR_PATH=~/.vim/bundle
export VIMRC_FILE_PATH=~/.vimrc
export TEMP_DOWNLOAD_DIR_PATH=~/vim_plugin_installer_temp_dir
rm ~/.vimrc

# 通过apt安装部分插件
# 1. cscope
sudo apt-get install cscope -y
if [ $? -eq 0 ]; then
	echo "install cscope success!"
else
	echo "install cscope failed!"
fi
# 2. YouCompleteMe
sudo apt install vim-youcompleteme -y && vim-addon-manager install youcompleteme
if [ $? -eq 0 ]; then
    echo "install youcompleteme	success!"
else
    echo "install youcompleteme failed!"
fi

# 3. powerline字体安装
mkdir -p $TEMP_DOWNLOAD_DIR_PATH
pushd $TEMP_DOWNLOAD_DIR_PATH
if [ ! -d "fonts" ]; then
	git clone https://github.com/powerline/fonts.git
	cd fonts
	./install.sh
	popd
fi
popd

# 通过Plugin安装部分插件
# 1. Vundle
if [ ! -d "$BUNDLE_DIR_PATH" ]; then
	echo "Create bundle dir"
	mkdir -p $BUNDLE_DIR_PATH
	pushd $BUNDLE_DIR_PATH
	git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
	popd
fi

# 追加vimrc配置
# 1. Vundle配置
cat << EOF >> $VIMRC_FILE_PATH

" Vundle参数配置
set nocompatible
filetype off

" 设置包括 vundle 和初始化相关的 runtimepath
set rtp+=~/.vim/bundle/Vundle.vim

call vundle#begin()
" 另一种选择, 指定一个 vundle 安装插件的路径
"call vundle#begin('~/some/path/here')
" 让 vundle 管理插件版本,必须
Plugin 'VundleVim/Vundle.vim'

" 所有插件需要在下面这行之前配置
call vundle#end()            " 必须
filetype plugin indent on    " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
" 忽视插件改变缩进,可以使用以下替代:
"filetype plugin on
EOF

# 2. molokai主题安装
cat << EOF >> $VIMRC_FILE_PATH
" molokai theme plugin
Plugin 'tomasr/molokai'

colorscheme molokai "设置颜色主题"
set t_Co=256 "设置256色彩"
set background=dark
let g:molokai_original = 1
let g:rehash256 = 1
EOF

# 3. nerdtree目录树插件
cat << EOF >> $VIMRC_FILE_PATH
" nerdtree
Plugin 'scrooloose/nerdtree'

nmap <C-t> :NERDTreeToggle<cr> "打开目录树"
nmap <C-f> :NERDTreeFind<cr> "查找文件"
EOF

# 4. vim-arline状态栏美化插件
cat << EOF >> $VIMRC_FILE_PATH
" vim-arline
Plugin 'vim-airline/vim-airline'

let g:airline_powerline_fonts=1
let g:airline#extensions#tabline#enabled = 1      "tabline中当前buffer两端的分隔字符
nmap <tab> :bn<cr> " 设置tab键映射"
EOF

echo "请运行vim,并执行PluginInstall"

v0.2

#!/bin/bash
#set -x

function init_env() {
	export BUNDLE_DIR_PATH=~/.vim/bundle
	export VIMRC_FILE_PATH=~/.vimrc
	export TEMP_DOWNLOAD_DIR_PATH=~/vim_plugin_installer_temp_dir
	export DEFAULT_VIMRC_FILE_PATH=~/.vimrc
	export DEFAULT_VIMRC_BACKUP_FILE_PATH=~/.vimrc_$(whoami).bak
}

function delete_orig_vimrc() {
	if [ -f $DEFAULT_VIMRC_FILE_PATH ]; then
        	rm $DEFAULT_VIMRC_FILE_PATH
	fi
}

function _backup_vimrc() {
	cp $DEFAULT_VIMRC_FILE_PATH $1
}

function backup_vimrc() {
	cp $DEFAULT_VIMRC_FILE_PATH $DEFAULT_VIMRC_BACKUP_FILE_PATH
	echo -e "\033[47;30m备份文件路径: $DEFAULT_VIMRC_BACKUP_FILE_PATH \033[0m"
<<EOF
	echo -n "请输入备份文件路径(eg: ~/.vimrc.bak) > " 
	read back_vimrc_path
	echo $DEFAULT_VIMRC_BACKUP_FILE_PATH
	if [ ! -n "$back_vimrc_path" ]; then
		mv $DEFAULT_VIMRC_FILE_PATH $DEFAULT_VIMRC_BACKUP_FILE_PATH
	else
		_backup_vimrc $back_vimrc_path
	fi
EOF
	print_command_result "backup .vimrc file"
}

function print_command_result() {
	if [ $? -eq 0 ]; then
        	echo -e "\033[47;30mInstall $1 success! \033[0m" 
	else
        	echo -e "\033[47;30mInstall $1 failed! \033[0m"
		exit 1
	fi
}

function apt_install_plugin() {
	# 通过apt安装部分插件
	# 1. cscope
	sudo apt-get install cscope -y
	print_command_result "cscope"
	# 2. YouCompleteMe
	sudo apt install vim-youcompleteme -y && vim-addon-manager install youcompleteme
	print_command_result "youcompleteme"
}

function git_install_plugin() {
	# 3. powerline字体安装
	mkdir -p $TEMP_DOWNLOAD_DIR_PATH
	pushd $TEMP_DOWNLOAD_DIR_PATH
	if [ ! -d "fonts" ]; then
		git clone https://github.com/powerline/fonts.git
		cd fonts
		./install.sh
		popd
		print_command_result "powerline"
	fi
	popd
	
	# 通过Plugin安装部分插件
	# 1. Vundle
	if [ ! -f "$BUNDLE_DIR_PATH/Vundle.vim" ]; then
		echo "Create bundle dir"
		mkdir -p $BUNDLE_DIR_PATH
		pushd $BUNDLE_DIR_PATH
		git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
		popd
		print_command_result "Vundle"
	fi
}

function append_base_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	set nu " 开启行号
	set ts=4 " 设置缩进间隔为4
	set autoindent " 设置自动缩进
	syntax on " 设置语法高亮
EOF
}

function append_vundle_conf() {
	# 1. Vundle配置
cat << EOF >> $VIMRC_FILE_PATH
	
	" Vundle参数配置
	set nocompatible
	filetype off
	
	" 设置包括 vundle 和初始化相关的 runtimepath
	set rtp+=~/.vim/bundle/Vundle.vim
	
	call vundle#begin()
	" 另一种选择, 指定一个 vundle 安装插件的路径
	"call vundle#begin('~/some/path/here')
	" 让 vundle 管理插件版本,必须
	Plugin 'VundleVim/Vundle.vim'
	
	" 所有插件需要在下面这行之前配置
	call vundle#end()            " 必须
	filetype plugin indent on    " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
	" 忽视插件改变缩进,可以使用以下替代:
	"filetype plugin on
EOF
}

function append_molokai_conf() {
	# 2. molokai主题安装
cat << EOF >> $VIMRC_FILE_PATH
	" molokai theme plugin
	Plugin 'tomasr/molokai'
	
	colorscheme molokai "设置颜色主题"
	set t_Co=256 "设置256色彩"
	set background=dark
	let g:molokai_original = 1
	let g:rehash256 = 1
EOF
}

function append_nerdtree_conf() {
	# 3. nerdtree目录树插件
cat << EOF >> $VIMRC_FILE_PATH
	" nerdtree
	Plugin 'scrooloose/nerdtree'

	nmap <C-t> :NERDTreeToggle<cr> "打开目录树"
	nmap <C-f> :NERDTreeFind<cr> "查找文件"
EOF
}

function append_vim_arline_conf() {
	# 4. vim-arline状态栏美化插件
cat << EOF >> $VIMRC_FILE_PATH
	" vim-arline
	Plugin 'vim-airline/vim-airline'

	let g:airline_powerline_fonts=1
	let g:airline#extensions#tabline#enabled = 1      "tabline中当前buffer两端的分隔字符
	nmap <tab> :bn<cr> " 设置tab键映射"
EOF
}

function append_all_conf() {
	append_base_conf
	append_vundle_conf
	append_molokai_conf
	append_nerdtree_conf
	append_vim_arline_conf
}

function print_finish_tips() {
	echo -e "\033[47;30m请运行vim,并执行PluginInstall \033[0m"
}

function work_func() {
	init_env
	backup_vimrc
	delete_orig_vimrc
	apt_install_plugin
	git_install_plugin
	append_all_conf

	if [ $? -eq 0 ]; then
		print_finish_tips
	fi
}

function print_start_tips() {
	echo -e "\033[2J"  # 清屏
	echo "使用本工具会重置vim原有配置"
	read -p "确定使用本工具吗[Y/N] > " select
	case $select in
		"Y")	echo -e "\033[47;30m你牛逼 \033[0m";
			work_func;;
		"N")	echo -e "\033[47;30m你怂了 ByeBye\033[0m";
			exit 1;;
		*)	echo -e "\033[47;30m没有这个选项啦 \033[0m";
			read -p "输入任意键重新输入";
			echo -e "\033[2J";
			print_start_tips;;
	esac
}

print_start_tips
#!/bin/bash
#set -x

function init_env() {
	export BUNDLE_DIR_PATH=~/.vim/bundle
	export VIMRC_FILE_PATH=~/.vimrc
	export TEMP_DOWNLOAD_DIR_PATH=~/vim_plugin_installer_temp_dir
	export DEFAULT_VIMRC_FILE_PATH=~/.vimrc
	export DEFAULT_VIMRC_BACKUP_FILE_PATH=~/.vimrc_$(whoami).bak
}

function delete_orig_vimrc() {
	if [ -f $DEFAULT_VIMRC_FILE_PATH ]; then
        	rm $DEFAULT_VIMRC_FILE_PATH
	fi
}

function _backup_vimrc() {
	cp $DEFAULT_VIMRC_FILE_PATH $1
}

function backup_vimrc() {
	cp $DEFAULT_VIMRC_FILE_PATH $DEFAULT_VIMRC_BACKUP_FILE_PATH
	echo -e "\033[47;30m备份文件路径: $DEFAULT_VIMRC_BACKUP_FILE_PATH \033[0m"
<<EOF
	echo -n "请输入备份文件路径(eg: ~/.vimrc.bak) > " 
	read back_vimrc_path
	echo $DEFAULT_VIMRC_BACKUP_FILE_PATH
	if [ ! -n "$back_vimrc_path" ]; then
		mv $DEFAULT_VIMRC_FILE_PATH $DEFAULT_VIMRC_BACKUP_FILE_PATH
	else
		_backup_vimrc $back_vimrc_path
	fi
EOF
	print_command_result "backup .vimrc file"
}

function print_command_result() {
	if [ $? -eq 0 ]; then
        	echo -e "\033[47;30mInstall $1 success! \033[0m" 
	else
        	echo -e "\033[47;30mInstall $1 failed! \033[0m"
		exit 1
	fi
}

function apt_install_plugin() {
	# 通过apt安装部分插件
	# 1. cscope
	sudo apt-get install cscope -y
	print_command_result "cscope"
	# 2. YouCompleteMe
	sudo apt install vim-youcompleteme -y && vim-addon-manager install youcompleteme
	print_command_result "youcompleteme"
	# 3. ctags
	sudo apt-get install exuberant-ctags
	print_command_result "ctags"
	# 4. tmux
	sudo apt-get install tmux
	print_command_result "tmux"
}

function git_install_plugin() {
	# 3. powerline字体安装
	mkdir -p $TEMP_DOWNLOAD_DIR_PATH
	pushd $TEMP_DOWNLOAD_DIR_PATH
	if [ ! -d "fonts" ]; then
		git clone https://github.com/powerline/fonts.git
		cd fonts
		./install.sh
		popd
		print_command_result "powerline"
	fi
	popd
	
	# 通过Plugin安装部分插件
	# 1. Vundle
	if [ ! -d $BUNDLE_DIR_PATH/Vundle.vim ]; then
		echo "Create bundle dir"
		mkdir -p $BUNDLE_DIR_PATH
		pushd $BUNDLE_DIR_PATH
		git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
		popd
		print_command_result "Vundle"
	fi

  # 2. taglist
  if [ ! -d $HOME/.vim/pack/downloads/start/taglist ]; then
	  mkdir -p $HOME/.vim/pack/downloads/start
	  pushd $HOME/.vim/pack/downloads/start
	  git clone https://github.com/yegappan/taglist
	  popd
    print_command_result "taglist"
  fi
}

function curl_install_plugin() {
	curl http://www.vim.org/scripts/download_script.php?src_id=7701 > ~/.vim/taglist.zip
	pushd ~/.vim
	unzip taglist.zip
	popd
	print_command_result "ctags"
}

function append_base_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	set nu " 开启行号
	set ts=4 " 设置缩进间隔为4
	set autoindent " 设置自动缩进
	syntax on " 设置语法高亮
EOF
}

function append_vundle_conf() {
	# 1. Vundle配置
cat << EOF >> $VIMRC_FILE_PATH
	
	" Vundle参数配置
	set nocompatible
	filetype off
	
	" 设置包括 vundle 和初始化相关的 runtimepath
	set rtp+=~/.vim/bundle/Vundle.vim
	
	call vundle#begin()
	" 另一种选择, 指定一个 vundle 安装插件的路径
	"call vundle#begin('~/some/path/here')
	" 让 vundle 管理插件版本,必须
	Plugin 'VundleVim/Vundle.vim'
	
	" 所有插件需要在下面这行之前配置
	call vundle#end()            " 必须
	filetype plugin indent on    " 必须 加载vim自带和插件相应的语法和文件类型相关脚本
	" 忽视插件改变缩进,可以使用以下替代:
	"filetype plugin on
EOF
}

function append_molokai_conf() {
	# 2. molokai主题安装
cat << EOF >> $VIMRC_FILE_PATH
	" molokai theme plugin
	Plugin 'tomasr/molokai'
	
	colorscheme molokai "设置颜色主题"
	set t_Co=256 "设置256色彩"
	set background=dark
	let g:molokai_original = 1
	let g:rehash256 = 1
EOF
}

function append_solarized_conf() {
	# 2. molokai主题安装
cat << EOF >> $VIMRC_FILE_PATH
	" vim-colors-solarized theme plugin
	Plugin 'altercation/vim-colors-solarized'
	
	set background=dark
	set t_Co=256
	colorscheme solarized
EOF
}

function append_tokyonight_conf() {
	# tokyonight主题安装
cat << EOF >> $VIMRC_FILE_PATH
	Plugin 'ghifarit53/tokyonight-vim'
	set termguicolors
	
	set t_Co=256 "设置256色彩"
	let g:tokyonight_style = 'storm' " available: night, storm
	let g:tokyonight_enable_italic = 1
	let g:rehash256 = 1

	colorscheme tokyonight
	let g:tokyonight_transparent_background = 1 
EOF
}

function append_tomorrow_conf() {
	# 2. tomorrow主题安装
cat << EOF >> $VIMRC_FILE_PATH
	" vim-tomorrow theme plugin
	Plugin 'chriskempson/vim-tomorrow-theme-all-too-well'
EOF
}

function append_zenburn_conf() {
	# 2. tomorrow主题安装
cat << EOF >> $VIMRC_FILE_PATH
	" zenburn theme plugin
	Plugin 'jnurmine/Zenburn'

	colorscheme zenburn
EOF
}

function append_seoul256_theme_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	Plugin 'junegunn/seoul256.vim'
	colorscheme seoul256
EOF
}

function append_default_theme_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	colorscheme industry
EOF
}



function append_nerdtree_conf() {
	# 3. nerdtree目录树插件
cat << EOF >> $VIMRC_FILE_PATH
	" nerdtree
	Plugin 'scrooloose/nerdtree'

	nmap <C-t> :NERDTreeToggle<cr> "打开目录树"
	nmap <C-f> :NERDTreeFind<cr> "查找文件"
EOF
}

function append_vim_arline_conf() {
	# 4. vim-arline状态栏美化插件
cat << EOF >> $VIMRC_FILE_PATH
	" vim-arline
	Plugin 'vim-airline/vim-airline'
	Plugin 'vim-airline/vim-airline-themes'	" 主题插件

	let g:airline_powerline_fonts=1
	let g:airline_theme='angr'
	let g:airline#extensions#tabline#enabled = 1      "tabline中当前buffer两端的分隔字符
	nmap <tab> :bn<cr> " 设置tab键映射"
EOF
}

function append_ctags_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	" 配置 taglist 插件
	nmap <F8> :TlistToggle<CR>
	let Tlist_Close_On_Select = 1
	let Tlist_Use_Right_Window = 1
EOF
}

function append_indent_line_conf() {
cat << EOF >> $VIMRC_FILE_PATH
	" 配置自动缩进插件
	Plugin 'Yggdroot/indentLine'

	let g:indentLine_char='┆'                   "缩进指示线符   
	let g:indentLine_enabled = 1             "开启缩进指示
	let g:indentLine_setColors = 0           "设置缩进线颜色
EOF
}

function append_cscope_conf() {
cat << EOF >> $VIMRC_FILE_PATH

" usage: cscope -Rbqk
if has("cscope")
	set csprg=$(which cscope)
	set csto=0
	set cst
	set nocsverb
	" add any database in current directory
	if filereadable("cscope.out")
	  cs add cscope.out
	" else add database pointed to by environment
	"elseif $CSCOPE_DB != ""
	"  cs add $CSCOPE_DB
	endif
	set csverb
endif

nmap <C-@>s :cs find s <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>c :cs find c <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>t :cs find t <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>e :cs find e <C-R>=expand("<cword>")<CR><CR>
nmap <C-@>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
nmap <C-@>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
nmap <C-@>d :cs find d <C-R>=expand("<cword>")<CR><CR>
EOF
}

function append_all_conf() {
	append_base_conf
	append_vundle_conf
	#append_molokai_conf
	#append_tokyonight_conf
	#append_solarized_conf
	#append_tomorrow_conf
	#append_zenburn_conf
	append_seoul256_theme_conf
	#append_default_theme_conf
	append_nerdtree_conf
	append_vim_arline_conf
	append_indent_line_conf
	append_ctags_conf
	append_cscope_conf
}

function print_finish_tips() {
	echo -e "\033[47;30m请运行vim,并执行PluginInstall \033[0m"
}

function work_func() {
	init_env
	backup_vimrc
	delete_orig_vimrc
	apt_install_plugin
	git_install_plugin
	#curl_install_plugin
	append_all_conf

	if [ $? -eq 0 ]; then
		print_finish_tips
	fi
}

function print_start_tips() {
	echo -e "\033[2J"  # 清屏
	echo "使用本工具会重置vim原有配置"
	read -p "确定使用本工具吗[Y/N] > " select
	case $select in
		"Y")	echo -e "\033[47;30m你牛逼 \033[0m";
			work_func;;
		"N")	echo -e "\033[47;30m你怂了 ByeBye\033[0m";
			exit 1;;
		*)	echo -e "\033[47;30m没有这个选项啦 \033[0m";
			read -p "输入任意键重新输入";
			echo -e "\033[2J";
			print_start_tips;;
	esac
}

print_start_tips