525 lines
13 KiB
Bash
Executable File
525 lines
13 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 获取平台类型,mac还是linux平台
|
||
function get_platform_type()
|
||
{
|
||
echo $(uname)
|
||
}
|
||
|
||
# 获取linux发行版名称
|
||
function get_linux_distro()
|
||
{
|
||
if grep -Eq "Ubuntu" /etc/*-release; then
|
||
echo "Ubuntu"
|
||
elif grep -Eq "Deepin" /etc/*-release; then
|
||
echo "Deepin"
|
||
elif grep -Eq "LinuxMint" /etc/*-release; then
|
||
echo "LinuxMint"
|
||
elif grep -Eq "elementary" /etc/*-release; then
|
||
echo "elementaryOS"
|
||
elif grep -Eq "Debian" /etc/*-release; then
|
||
echo "Debian"
|
||
elif grep -Eq "Kali" /etc/*-release; then
|
||
echo "Kali"
|
||
elif grep -Eq "CentOS" /etc/*-release; then
|
||
echo "CentOS"
|
||
elif grep -Eq "fedora" /etc/*-release; then
|
||
echo "fedora"
|
||
elif grep -Eq "openSUSE" /etc/*-release; then
|
||
echo "openSUSE"
|
||
elif grep -Eq "Arch Linux" /etc/*-release; then
|
||
echo "ArchLinux"
|
||
elif grep -Eq "ManjaroLinux" /etc/*-release; then
|
||
echo "ManjaroLinux"
|
||
else
|
||
echo "Unknow"
|
||
fi
|
||
}
|
||
|
||
# 获取日期
|
||
function get_datetime()
|
||
{
|
||
time=$(date "+%Y%m%d%H%M%S")
|
||
echo $time
|
||
}
|
||
|
||
# 判断文件是否存在
|
||
function is_exist_file()
|
||
{
|
||
filename=$1
|
||
if [ -f $filename ]; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
# 判断目录是否存在
|
||
function is_exist_dir()
|
||
{
|
||
dir=$1
|
||
if [ -d $dir ]; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
#备份原有的.vimrc文件
|
||
function backup_vimrc_file()
|
||
{
|
||
old_vimrc=$HOME"/.vimrc"
|
||
is_exist=$(is_exist_file $old_vimrc)
|
||
if [ $is_exist == 1 ]; then
|
||
time=$(get_datetime)
|
||
backup_vimrc=$old_vimrc"_bak_"$time
|
||
read -p "Find "$old_vimrc" already exists,backup "$old_vimrc" to "$backup_vimrc"[Y/N]:" ch
|
||
if [ $ch == "Y" ] || [ $ch == "y" ]; then
|
||
cp $old_vimrc $backup_vimrc
|
||
fi
|
||
fi
|
||
}
|
||
|
||
#备份原有的.vim目录
|
||
function backup_vim_dir()
|
||
{
|
||
old_vim=$HOME"/.vim"
|
||
is_exist=$(is_exist_dir $old_vim)
|
||
if [ $is_exist == 1 ]; then
|
||
time=$(get_datetime)
|
||
backup_vim=$old_vim"_bak_"$time
|
||
read -p "Find "$old_vim" already exists,backup "$old_vim" to "$backup_vim"[Y/N]:" ch
|
||
if [ $ch == "Y" ] || [ $ch == "y" ]; then
|
||
cp -R $old_vim $backup_vim
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# 备份原有的.vimrc和.vim
|
||
function backup_vimrc_and_vim()
|
||
{
|
||
backup_vimrc_file
|
||
backup_vim_dir
|
||
}
|
||
|
||
# 判断是否是ubuntu14.04LTS版本
|
||
function is_ubuntu1404()
|
||
{
|
||
version=$(cat /etc/lsb-release | grep "DISTRIB_RELEASE")
|
||
if [ ${version} == "DISTRIB_RELEASE=14.04" ]; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
# 获取centos版本
|
||
function get_centos_version()
|
||
{
|
||
version=`cat /etc/redhat-release | awk '{print $4}' | awk -F . '{printf "%s",$1}'`
|
||
echo $version
|
||
}
|
||
|
||
# 判断是否是macos10.14版本
|
||
function is_macos1014()
|
||
{
|
||
product_version=$(sw_vers | grep ProductVersion)
|
||
if [[ $product_version =~ "10.14" ]]; then
|
||
echo 1
|
||
else
|
||
echo 0
|
||
fi
|
||
}
|
||
|
||
# 在ubuntu上源代码安装vim
|
||
function compile_vim_on_ubuntu()
|
||
{
|
||
sudo apt-get remove -y vim vim-runtime gvim
|
||
sudo apt-get remove -y vim-tiny vim-common vim-gui-common vim-nox
|
||
sudo rm -rf /usr/bin/vim*
|
||
sudo rm -rf /usr/local/bin/vim*
|
||
sudo rm -rf /usr/share/vim/vim*
|
||
sudo rm -rf /usr/local/share/vim/vim*
|
||
rm -rf ~/vim81
|
||
|
||
sudo apt-get install -y libncurses5-dev libncurses5 libgnome2-dev libgnomeui-dev \
|
||
libgtk2.0-dev libatk1.0-dev libbonoboui2-dev \
|
||
libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev python3-dev ruby-dev lua5.1 lua5.1-dev
|
||
|
||
git clone https://gitee.com/chxuan/vim81.git ~/vim81
|
||
cd ~/vim81
|
||
./configure --with-features=huge \
|
||
--enable-multibyte \
|
||
--enable-rubyinterp \
|
||
--enable-pythoninterp \
|
||
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
|
||
--enable-perlinterp \
|
||
--enable-luainterp \
|
||
--enable-gui=gtk2 \
|
||
--enable-cscope \
|
||
--prefix=/usr
|
||
make
|
||
sudo make install
|
||
cd -
|
||
}
|
||
|
||
# 在debian上源代码安装vim
|
||
function compile_vim_on_debian()
|
||
{
|
||
sudo apt-get remove -y vim vim-runtime gvim
|
||
sudo apt-get remove -y vim-tiny vim-common vim-gui-common vim-nox
|
||
sudo rm -rf /usr/bin/vim*
|
||
sudo rm -rf /usr/local/bin/vim*
|
||
sudo rm -rf /usr/share/vim/vim*
|
||
sudo rm -rf /usr/local/share/vim/vim*
|
||
rm -rf ~/vim81
|
||
|
||
sudo apt-get install -y libncurses5-dev libncurses5 libgtk2.0-dev libatk1.0-dev libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev python3-dev ruby-dev lua5.1 lua5.1-dev
|
||
|
||
git clone https://gitee.com/chxuan/vim81.git ~/vim81
|
||
cd ~/vim81
|
||
./configure --with-features=huge \
|
||
--enable-multibyte \
|
||
--enable-rubyinterp \
|
||
--enable-pythoninterp \
|
||
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
|
||
--enable-perlinterp \
|
||
--enable-luainterp \
|
||
--enable-gui=gtk2 \
|
||
--enable-cscope \
|
||
--prefix=/usr
|
||
make
|
||
sudo make install
|
||
cd -
|
||
}
|
||
|
||
# 在centos上源代码安装vim
|
||
function compile_vim_on_centos()
|
||
{
|
||
sudo rm -rf /usr/bin/vi
|
||
sudo rm -rf /usr/bin/vim*
|
||
sudo rm -rf /usr/local/bin/vim*
|
||
sudo rm -rf /usr/share/vim/vim*
|
||
sudo rm -rf /usr/local/share/vim/vim*
|
||
rm -rf ~/vim81
|
||
|
||
sudo yum install -y ruby ruby-devel lua lua-devel luajit \
|
||
luajit-devel ctags git python python-devel \
|
||
python34 python34-devel tcl-devel \
|
||
perl perl-devel perl-ExtUtils-ParseXS \
|
||
perl-ExtUtils-XSpp perl-ExtUtils-CBuilder \
|
||
perl-ExtUtils-Embed libX11-devel ncurses-devel
|
||
|
||
git clone https://gitee.com/chxuan/vim81.git ~/vim81
|
||
cd ~/vim81
|
||
./configure --with-features=huge \
|
||
--enable-multibyte \
|
||
--with-tlib=tinfo \
|
||
--enable-rubyinterp=yes \
|
||
--enable-pythoninterp=yes \
|
||
--with-python-config-dir=/lib64/python2.7/config \
|
||
--enable-perlinterp=yes \
|
||
--enable-luainterp=yes \
|
||
--enable-gui=gtk2 \
|
||
--enable-cscope \
|
||
--prefix=/usr
|
||
make
|
||
sudo make install
|
||
cd -
|
||
}
|
||
|
||
# 安装mac平台必要软件
|
||
function install_prepare_software_on_mac()
|
||
{
|
||
xcode-select --install
|
||
|
||
brew install vim gcc cmake ctags-exuberant curl ack
|
||
|
||
macos1014=$(is_macos1014)
|
||
if [ $macos1014 == 1 ]; then
|
||
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
|
||
fi
|
||
}
|
||
|
||
# 安装ubuntu必要软件
|
||
function install_prepare_software_on_ubuntu()
|
||
{
|
||
sudo apt-get update
|
||
|
||
ubuntu1404=`is_ubuntu1404`
|
||
if [ ${ubuntu1404} == 1 ]; then
|
||
sudo apt-get install -y cmake3
|
||
else
|
||
sudo apt-get install -y cmake
|
||
fi
|
||
|
||
sudo apt-get install -y exuberant-ctags build-essential python python-dev python3-dev fontconfig curl libfile-next-perl ack-grep git
|
||
compile_vim_on_ubuntu
|
||
}
|
||
|
||
# 安装debian必要软件
|
||
function install_prepare_software_on_debian()
|
||
{
|
||
sudo apt-get update
|
||
sudo apt-get install -y cmake exuberant-ctags build-essential python python-dev python3-dev fontconfig curl libfile-next-perl ack git
|
||
compile_vim_on_debian
|
||
}
|
||
|
||
# 安装centos必要软件
|
||
function install_prepare_software_on_centos()
|
||
{
|
||
version=$(get_centos_version)
|
||
if [ "$version" -gt 7 ];then
|
||
sudo dnf install -y epel-release
|
||
sudo dnf install -y ctags automake gcc gcc-c++ kernel-devel make cmake python2 python2-devel python3-devel curl fontconfig ack git
|
||
else
|
||
sudo yum install -y ctags automake gcc gcc-c++ kernel-devel cmake python-devel python3-devel curl fontconfig ack git
|
||
compile_vim_on_centos
|
||
fi
|
||
}
|
||
|
||
# 安装fedora必要软件
|
||
function install_prepare_software_on_fedora()
|
||
{
|
||
sudo dnf install -y vim ctags automake gcc gcc-c++ kernel-devel cmake python-devel python3-devel curl fontconfig ack git
|
||
}
|
||
|
||
# 安装archlinux必要软件
|
||
function install_prepare_software_on_archlinux()
|
||
{
|
||
sudo pacman -S --noconfirm vim ctags automake gcc cmake python3 python2 curl ack git fontconfig
|
||
sudo ln -s /usr/lib/libtinfo.so.6 /usr/lib/libtinfo.so.5
|
||
}
|
||
|
||
# 安装opensuse必要软件
|
||
function install_prepare_software_on_opensuse()
|
||
{
|
||
sudo zypper install -y vim ctags gcc gcc-c++ cmake python-devel python3-devel curl ack fontconfig git ncurses5-devel
|
||
}
|
||
|
||
# 拷贝文件
|
||
function copy_files()
|
||
{
|
||
rm -rf ~/.vimrc
|
||
ln -s ${PWD}/.vimrc ~
|
||
|
||
rm -rf ~/.vimrc.plugins
|
||
cp ${PWD}/.vimrc.plugins ~
|
||
|
||
rm -rf ~/.vimrc.config
|
||
cp ${PWD}/.vimrc.config ~
|
||
|
||
rm -rf ~/.ycm_extra_conf.py
|
||
ln -s ${PWD}/.ycm_extra_conf.py ~
|
||
|
||
mkdir ~/.vim
|
||
rm -rf ~/.vim/colors
|
||
ln -s ${PWD}/colors ~/.vim
|
||
|
||
rm -rf ~/.vim/ftplugin
|
||
ln -s ${PWD}/ftplugin ~/.vim
|
||
}
|
||
|
||
# 安装mac平台字体
|
||
function install_fonts_on_mac()
|
||
{
|
||
rm -rf ~/Library/Fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf
|
||
cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/Library/Fonts
|
||
}
|
||
|
||
# 安装linux平台字体
|
||
function install_fonts_on_linux()
|
||
{
|
||
mkdir -p ~/.local/share/fonts
|
||
rm -rf ~/.local/share/fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf
|
||
cp ./fonts/Droid\ Sans\ Mono\ Nerd\ Font\ Complete.otf ~/.local/share/fonts
|
||
|
||
fc-cache -vf ~/.local/share/fonts
|
||
}
|
||
|
||
# 下载插件管理软件vim-plug
|
||
function download_vim_plug()
|
||
{
|
||
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
|
||
}
|
||
|
||
# 安装vim插件
|
||
function install_vim_plugin()
|
||
{
|
||
vim -c "PlugInstall" -c "q" -c "q"
|
||
}
|
||
|
||
# 安装ycm插件
|
||
function install_ycm()
|
||
{
|
||
git clone https://gitee.com/chxuan/YouCompleteMe-clang.git ~/.vim/plugged/YouCompleteMe
|
||
|
||
cd ~/.vim/plugged/YouCompleteMe
|
||
|
||
read -p "Please choose to compile ycm with python2 or python3, if there is a problem with the current selection, please choose another one[2/3]:" version
|
||
if [ $version == "2" ]; then
|
||
echo "Compile ycm with python2."
|
||
python2.7 ./install.py --clang-completer
|
||
else
|
||
echo "Compile ycm with python3."
|
||
python3 ./install.py --clang-completer
|
||
fi
|
||
}
|
||
|
||
# 打印logo
|
||
function print_logo()
|
||
{
|
||
color="$(tput setaf 6)"
|
||
normal="$(tput sgr0)"
|
||
printf "${color}"
|
||
echo ' __ __ '
|
||
echo '__ __/_/___ ___ ____ / /_ _______ '
|
||
echo '\ \ / / / __ `__ \/ __ \/ / / / / ___/ '
|
||
echo ' \ V / / / / / / / /_/ / / /_/ (__ ) '
|
||
echo ' \_/_/_/ /_/ /_/ ,___/_/\____/____/ '
|
||
echo ' /_/ ...is now installed!'
|
||
echo ''
|
||
echo ''
|
||
echo 'Just enjoy it!'
|
||
echo 'p.s. Follow me at https://github.com/chxuan.'
|
||
echo ''
|
||
printf "${normal}"
|
||
}
|
||
|
||
# 在mac平台安装vimplus
|
||
function install_vimplus_on_mac()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_mac
|
||
copy_files
|
||
install_fonts_on_mac
|
||
install_ycm
|
||
download_vim_plug
|
||
install_vim_plugin
|
||
print_logo
|
||
}
|
||
|
||
# 开始安装vimplus
|
||
function begin_install_vimplus()
|
||
{
|
||
copy_files
|
||
install_fonts_on_linux
|
||
install_ycm
|
||
download_vim_plug
|
||
install_vim_plugin
|
||
print_logo
|
||
}
|
||
|
||
# 在ubuntu上安装vimplus
|
||
function install_vimplus_on_ubuntu()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_ubuntu
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在debian上安装vimplus
|
||
function install_vimplus_on_debian()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_debian
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在centos上安装vimplus
|
||
function install_vimplus_on_centos()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_centos
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在fedora上安装vimplus
|
||
function install_vimplus_on_fedora()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_fedora
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在archlinux上安装vimplus
|
||
function install_vimplus_on_archlinux()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_archlinux
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在opensuse上安装vimplus
|
||
function install_vimplus_on_opensuse()
|
||
{
|
||
backup_vimrc_and_vim
|
||
install_prepare_software_on_opensuse
|
||
begin_install_vimplus
|
||
}
|
||
|
||
# 在linux平上台安装vimplus
|
||
function install_vimplus_on_linux()
|
||
{
|
||
distro=`get_linux_distro`
|
||
echo "Linux distro: "${distro}
|
||
|
||
if [ ${distro} == "Ubuntu" ]; then
|
||
install_vimplus_on_ubuntu
|
||
elif [ ${distro} == "Deepin" ]; then
|
||
install_vimplus_on_ubuntu
|
||
elif [ ${distro} == "LinuxMint" ]; then
|
||
install_vimplus_on_ubuntu
|
||
elif [ ${distro} == "elementaryOS" ]; then
|
||
install_vimplus_on_ubuntu
|
||
elif [ ${distro} == "Debian" ]; then
|
||
install_vimplus_on_debian
|
||
elif [ ${distro} == "Kali" ]; then
|
||
install_vimplus_on_debian
|
||
elif [ ${distro} == "CentOS" ]; then
|
||
install_vimplus_on_centos
|
||
elif [ ${distro} == "fedora" ]; then
|
||
install_vimplus_on_fedora
|
||
elif [ ${distro} == "openSUSE" ]; then
|
||
install_vimplus_on_opensuse
|
||
elif [ ${distro} == "ArchLinux" ]; then
|
||
install_vimplus_on_archlinux
|
||
elif [ ${distro} == "ManjaroLinux" ]; then
|
||
install_vimplus_on_archlinux
|
||
else
|
||
echo "Not support linux distro: "${distro}
|
||
fi
|
||
}
|
||
|
||
# 获取当前时间戳
|
||
function get_now_timestamp()
|
||
{
|
||
cur_sec_and_ns=`date '+%s-%N'`
|
||
echo ${cur_sec_and_ns%-*}
|
||
}
|
||
|
||
# main函数
|
||
function main()
|
||
{
|
||
begin=`get_now_timestamp`
|
||
|
||
type=`get_platform_type`
|
||
echo "Platform type: "${type}
|
||
|
||
if [ ${type} == "Darwin" ]; then
|
||
install_vimplus_on_mac
|
||
elif [ ${type} == "Linux" ]; then
|
||
install_vimplus_on_linux
|
||
else
|
||
echo "Not support platform type: "${type}
|
||
fi
|
||
|
||
end=`get_now_timestamp`
|
||
second=`expr ${end} - ${begin}`
|
||
min=`expr ${second} / 60`
|
||
echo "It takes "${min}" minutes."
|
||
}
|
||
|
||
# 调用main函数
|
||
main
|