#!/usr/bin/env bash # package_dirs records directories of all installed packages. It is used # to help clean unused packages. package_dirs_file=/tmp/my-vim-package-dirs [ -f $package_dirs_file ] && rm $package_dirs_file package_dirs=() update_package () { name=$1 remote_url=$2 load_type='start' [ $# -ge 3 ] && load_type=$3 package_dir="$HOME/.vim/pack/vendor/$load_type/$name" echo "$package_dir" >> $package_dirs_file if [ ! -d $package_dir ]; then echo "$name : Installing ... " mkdir -p $package_dir git clone --depth 1 $remote_url $package_dir && echo "$name : Done" || echo "$name : FAIL" fi cd $package_dir git fetch origin > /dev/null UPSTREAM='@{u}' LOCAL=$(git rev-parse @) REMOTE=$(git rev-parse "$UPSTREAM") BASE=$(git merge-base @ "$UPSTREAM") UPDATED=0 if [ $LOCAL != $REMOTE -a $LOCAL = $BASE ]; then echo "$name : Updating ... " git pull && echo "$name : Done" || echo "$name : FAIL" UPDATED=1 else echo "$name : Up to date" fi git submodule update --init --recursive --depth 1 if [ $UPDATED -eq 1 -a $# -ge 4 ]; then $4 fi } clean () { if [ ! -f $package_dirs_file ]; then return fi while IFS= read -r line; do package_dirs+=("$line") done < $package_dirs_file for load_type in 'opt' 'start'; do for package_name in $(ls $HOME/.vim/pack/vendor/$load_type); do package_dir=$HOME/.vim/pack/vendor/$load_type/$package_name if [[ ! " ${package_dirs[*]} " =~ " ${package_dir} " ]]; then read -r -p "rm -rf $package_dir? [y/N]: " response response=${response,,} if [[ "$response" =~ ^(yes|y)$ ]]; then rm -rf $package_dir fi fi done done rm $package_dirs_file } install_ycm () { opts=' --clangd-completer' if [ -f /usr/bin/go -o -f /usr/local/bin/go ]; then opts="$opts --go-completer" fi python3 ./install.py $opts } update_package 'YouCompleteMe' 'https://github.com/ycm-core/YouCompleteMe.git' 'start' 'install_ycm' & update_package "nnn.vim" "https://github.com/mcchrish/nnn.vim.git" & update_package 'vim-fugitive' 'https://github.com/tpope/vim-fugitive.git' & update_package 'fzf' 'https://github.com/junegunn/fzf.git' & update_package 'fzf.vim' 'https://github.com/junegunn/fzf.vim.git' & update_package 'ultisnips' 'https://github.com/SirVer/ultisnips.git' & update_package 'vim-snippets' 'https://github.com/honza/vim-snippets.git' & update_package 'onedark.vim' 'https://github.com/joshdick/onedark.vim.git' 'opt' & update_package undotree https://github.com/mbbill/undotree.git & update_package ale https://github.com/dense-analysis/ale.git & update_package vim-eunuch https://github.com/tpope/vim-eunuch.git & update_package vim-sleuth https://github.com/tpope/vim-sleuth.git & update_package tabular https://github.com/godlygeek/tabular.git & update_package vim-rooter https://github.com/airblade/vim-rooter.git & update_package vim-gutentags https://github.com/ludovicchabant/vim-gutentags.git & update_package vim-airline https://github.com/vim-airline/vim-airline.git & update_package vim-airline-themes https://github.com/vim-airline/vim-airline-themes.git & update_package vim-easymotion https://github.com/easymotion/vim-easymotion.git & update_package editorconfig-vim https://github.com/editorconfig/editorconfig-vim.git & update_package vim-godot https://github.com/habamax/vim-godot.git & update_package vim-ledger https://github.com/ledger/vim-ledger.git & update_package vim-signify https://github.com/mhinz/vim-signify.git & update_package vim-unimpaired https://github.com/tpope/vim-unimpaired.git & update_package vim-surround https://github.com/tpope/vim-surround.git & update_package vim-rsi https://github.com/tpope/vim-rsi.git & update_package vim-dispatch https://github.com/tpope/vim-dispatch.git & update_package org.vim https://github.com/axvr/org.vim.git & update_package fcitx.vim https://github.com/lilydjwg/fcitx.vim.git opt & wait vim '"+helptags ALL"' +q clean