Added a new script that can be used to update the repo if bash is
available. Updated the README. Improved the theme by adding a bunch
of syntax highlighting definitions (mostly rooted in html, though
a bunch of other languages base their colours on it), as well as
tweaking visual selection to longer invert on the block with the cursor,
and parenthesis matching to look the same at both ends. Added a plugin
that improves the theme and adds some keyboard shortcuts to markdown,
which is what the README.md files in Github are written in. I realized
that the h,j,k,l shortcuts equivalent to the ones with arrow keys I'd
added were overwriting other shortcuts with the shift combinations, so
I removed those and the ctrl-ones for consistency. The diff shortcuts
weren't intuitive or easy on the hands, so I tried something else and
I think it works much better now (check vim/keyboard.vim). An update
script has also been added to simplify updating submodules; I'm not
completely clear as to whether following this method will properly
update the submodules in certain conditions like when one is removed,
but this should add new ones and update the existing ones after pulling
from the repo.
2014-04-01 00:03:52 -04:00
#!/usr/bin/env bash
2014-06-17 01:49:46 -04:00
##############################################################
# #
# Darkcloud Vim Config: update script #
# #
# By: Kevin MacMartin (prurigro@gmail.com) #
# Website: https://github.com/prurigro/darkcloud-vimconfig #
# #
# License: MIT #
# #
##############################################################
# change to the the directory containing this script
Tons of changes all in one commit because I'd broken a commit a while
back and opted to simply reverse them all- Lots of colour changes, the
update script now removes decommissioned bundles, gentags script can now
have additional paths added to it when generating a tags file, README is
much improved, fixed a few issues that required remapping some toggles,
fixed a bunch of issues with the colourscheme between the terminal and
gvim. You can now setup a custom config file to have loaded after the
darkcloud-vimconfig ones, and there's a custom location for pathogen
modules too, to make things tidier without necessarily needing to use
an additional runtimepath. You can also create a file in your home
directory to assign filetypes to programs, for use with the file
manager. A file can be placed in ~/.vim/ with file associations and
prorams to launch them with. The file manager will also open a file with
vim by hitting shift+enter, since e isn't all that comfortablly placed.
The vimrc can now also point to the darkcloud-vimconfig folder, rather
than relying on the vim folder being in a specific location, and the
after folder is now configured to work in the project too.
2014-04-04 19:49:02 -04:00
cd "${0%/*}"
2014-06-17 01:49:46 -04:00
# set the name of this script without including the path
SCRIPT_NAME=`echo "$0" | grep -o -e "[^\/]*$"`
# set the version based on the number and date of the current commit
VERSION=$(printf "%s.r%s" "$(git show -s --format=%ci master | sed 's/\ .*//g;s/-//g')" "$(git rev-list --count HEAD)")
# this function configures the env using arguments its passed
function command_parse {
for param in $@; do
case "$param" in
-n|--no-color|--no-colour)
NO_COLOUR=true
;;
-h|--help)
SHOW_HELP=true
;;
-v|--version)
SHOW_VERSION=true
;;
*)
ERROR="\"${param}\" is not a valid argument"
;;
esac
done
}
2014-06-16 05:37:52 -04:00
2014-06-17 01:49:46 -04:00
# this function both outputs error messages as well as writing them to a log when they occur
2014-06-16 05:37:52 -04:00
function error() {
2014-06-17 01:49:46 -04:00
echo -e "${HEADINGCOLOUR} ${RESETCOLOUR}${ERRORCOLOUR} ! ERROR: ${RESETCOLOUR}${FAILCOLOUR} ${2} "
echo -e "${HEADINGCOLOUR} ${RESETCOLOUR}${ERRORCOLOUR} ! ${RESETCOLOUR} ${NOACTIONCOLOUR}=> ${1}${RESETCOLOUR}"
[[ -n "$3" ]] && echo -e "${HEADINGCOLOUR} ${RESETCOLOUR}${ERRORCOLOUR} ! ${RESETCOLOUR}${NOACTIONCOLOUR} ${3}"
2014-06-16 05:37:52 -04:00
echo "${1} @ $(date)" >> "$ERRORLOG"
echo " ! Error: ${2}" >> "$ERRORLOG"
[[ -n "$3" ]] && echo " ! ${3}" >> "$ERRORLOG"
echo >> "$ERRORLOG"
}
2014-06-17 01:49:46 -04:00
# this function displays version information
function show_version() {
echo -e "Update tool for darkcloud-vimconfig (${SCRIPT_NAME}) v${VERSION}\n"
}
# this function displays help output
function show_help() {
echo -e "Usage: ${SCRIPT_NAME} [OPTION]\n"
echo " Options:"
echo -e "\t-n, --no-colour (or --no-color)"
echo -e "\t\tdisable colour output\n"
echo -e "\t-v, --version"
echo -e "\t\toutput version information and exit\n"
echo -e "\t-h, --help"
echo -e "\t\tdisplay this help and exit\n"
echo -e "\tRun with no arguments to update darkcloud-vimconfig\n"
}
# initialize the error log
ERRORLOG="update-errors.log"
[[ -f "$ERRORLOG" ]] && rm "$ERRORLOG"
# parse for commandline arguments and respond accordingly
[[ ! -z "$@" ]] && command_parse "$@"
# set colours unless user specifies otherwise
if [ ! "$NO_COLOUR" = "true" ]; then
TITLECOLOUR="\e[40m"
HEADINGCOLOUR="\e[44m"
SUBHEADINGCOLOUR="\e[43m"
SUCCESSCOLOUR="\e[1;32m"
FAILCOLOUR="\e[1;31m"
NOACTIONCOLOUR="\e[1;37m"
ERRORCOLOUR="\e[1;41m"
RESETCOLOUR="\e[0m"
else
HEADINGCOLOUR="#"
fi
# display an error for an invalid argument, then the help and exit
[[ -n "$ERROR" ]] && error "$ERROR" "Invalid option supplied at runtime" && echo && show_help && exit 1
# show the help and exit
[[ "$SHOW_HELP" = "true" ]] && show_version && show_help && exit 0
# show version information and exit
[[ "$SHOW_VERSION" = "true" ]] && show_version && exit 0
2014-06-16 05:37:52 -04:00
# create vim/vimrc.user and vim/bundle.user if they don't already exist
[[ ! -d vim/bundle.user ]] && install -d vim/bundle.user
2014-04-08 03:39:10 -04:00
if [ ! -e vim/vimrc.user ]; then
2014-06-17 01:49:46 -04:00
echo -e "\n${TITLECOLOUR} ~~~ DarkCloud Vimconfig Setup ~~~ ${RESETCOLOUR}"
echo -n -e "\n${HEADINGCOLOUR} >> Creating User Config 'vim/vimrc.user': ${RESETCOLOUR}"
2014-06-04 03:18:29 -04:00
if [ -w vim ]; then
echo -e '"Disable Linebreaks: (*1:force disabled globally | 0: disabled by default)\n"let g:disablelinebreaks=0\n' >> vim/vimrc.user
echo -e '"Autostart Filer: (*1:filer loads in new empty buffers | 0: filer must be triggered)\n"let g:autostartfiler=0\n' >> vim/vimrc.user
echo -e '"Syntax Autostart: (1:start toggled on | *0: start toggled off)\n"let g:autostartchecker=1\n' >> vim/vimrc.user
echo -e '"Tagbar Autostart: (1:start open | *0:start closed)\n"let g:autostarttagbar=1\n' >> vim/vimrc.user
echo -e '"Powerline Fonts: (1:enabled | *0:disabled)\n"let g:powerlinefonts=1 "(set powerline font for gvim and terminal when enabled)\n' >> vim/vimrc.user
echo -e '"GVim Font Selection: (Escaping spaces and use powerline if appropriate)\nset guifont=Monospace\ 12' >> vim/vimrc.user
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
else
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
error "vim/vimrc.user" "User config couldn't be created" "The 'vim' folder is read-only and must be set read/write"
2014-04-08 03:39:10 -04:00
fi
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "\n${TITLECOLOUR} ~~~ DarkCloud Vimconfig Update Tool ~~~ ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
fi
# update darkcloud-vimconfig
2014-06-17 01:49:46 -04:00
echo -n -e "\n${HEADINGCOLOUR} >> Updating Repository: ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
GIT_STATUS=$(git pull origin master 2>&1)
if [ $? = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
error "git pull origin master" "Git failed to sync the repo" "Git output: ${GIT_STATUS}"
exit 1
2014-04-08 03:39:10 -04:00
fi
2014-04-05 00:55:40 -04:00
2014-06-16 05:37:52 -04:00
# setup and sync the submodules
2014-06-17 01:49:46 -04:00
echo -e "\n${HEADINGCOLOUR} >> Updating Plugin Submodules >> ${RESETCOLOUR}"
echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Updating Plugin URLs: ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
GIT_STATUS=$(git submodule sync 2>&1)
if [ $? = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
error "git submodule sync" "Git failed to sync the submodules" "Git output: ${GIT_STATUS}"
fi
2014-06-17 01:49:46 -04:00
echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Fetching Updates: ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
GIT_STATUS=$(git submodule foreach git fetch --all 2>&1)
if [ $? = 0 ]; then
GIT_STATUS=$(git submodule update --init --recursive 2>&1)
if [ $? = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
error "git submodule update --init --recursive" "Git failed to update the submodules" "Git output: ${GIT_STATUS}"
fi
else
2014-06-17 01:49:46 -04:00
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
error "git submodule foreach git fetch --all" "Git failed to fetch the submodules from their respective remotes" "Git output: ${GIT_STATUS}"
fi
2014-05-05 08:57:38 -04:00
2014-06-17 01:49:46 -04:00
echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Checkout Origin/Master: ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
GIT_STATUS=$(git submodule foreach git checkout -f origin/master 2>&1)
if [ $? = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
error "git submodule foreach git checkout -f origin/master" "Git failed to checkout the submodules into origin/master" "Git output: ${GIT_STATUS}"
fi
Tons of changes all in one commit because I'd broken a commit a while
back and opted to simply reverse them all- Lots of colour changes, the
update script now removes decommissioned bundles, gentags script can now
have additional paths added to it when generating a tags file, README is
much improved, fixed a few issues that required remapping some toggles,
fixed a bunch of issues with the colourscheme between the terminal and
gvim. You can now setup a custom config file to have loaded after the
darkcloud-vimconfig ones, and there's a custom location for pathogen
modules too, to make things tidier without necessarily needing to use
an additional runtimepath. You can also create a file in your home
directory to assign filetypes to programs, for use with the file
manager. A file can be placed in ~/.vim/ with file associations and
prorams to launch them with. The file manager will also open a file with
vim by hitting shift+enter, since e isn't all that comfortablly placed.
The vimrc can now also point to the darkcloud-vimconfig folder, rather
than relying on the vim folder being in a specific location, and the
after folder is now configured to work in the project too.
2014-04-04 19:49:02 -04:00
2014-06-16 05:37:52 -04:00
# clean plugin directories and remove plugins no longer in the repo
2014-06-17 01:49:46 -04:00
echo -e "\n${HEADINGCOLOUR} >> Cleaning Plugin Directories >> ${RESETCOLOUR}"
echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Removing Untracked Files: ${RESETCOLOUR}"
git submodule foreach git clean -dxf > /dev/null 2>&1 && echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}" || echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"
Tons of changes all in one commit because I'd broken a commit a while
back and opted to simply reverse them all- Lots of colour changes, the
update script now removes decommissioned bundles, gentags script can now
have additional paths added to it when generating a tags file, README is
much improved, fixed a few issues that required remapping some toggles,
fixed a bunch of issues with the colourscheme between the terminal and
gvim. You can now setup a custom config file to have loaded after the
darkcloud-vimconfig ones, and there's a custom location for pathogen
modules too, to make things tidier without necessarily needing to use
an additional runtimepath. You can also create a file in your home
directory to assign filetypes to programs, for use with the file
manager. A file can be placed in ~/.vim/ with file associations and
prorams to launch them with. The file manager will also open a file with
vim by hitting shift+enter, since e isn't all that comfortablly placed.
The vimrc can now also point to the darkcloud-vimconfig folder, rather
than relying on the vim folder being in a specific location, and the
after folder is now configured to work in the project too.
2014-04-04 19:49:02 -04:00
[[ -f .gitmodules ]] && for each in vim/bundle/*; do
if [ -d "$each" ]; then
if [ -f "${each}/.git" ]; then
FILE=$(echo $each | grep -o -e "[^\/]*$")
2014-06-16 05:37:52 -04:00
if [ $(cat .gitmodules | grep "path = " | grep -o -e "[^\/]*$" | grep -c -e "${FILE}$") = 0 ]; then
2014-06-17 01:49:46 -04:00
[[ -z "$FIRST_OLD" ]] && export FIRST_OLD=1 && echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Removing Old Plugins: ${RESETCOLOUR}\n"
2014-06-16 05:37:52 -04:00
rm -rf "$each"
if [ $? = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} = ${RESETCOLOUR}$(echo ${each}\ | sed -re 's|^(.*)/([^/]*)$|\\e\[1;37m\1/\\e\[1;31m\2\\e\[0m|')"
2014-06-16 05:37:52 -04:00
else
error "$each" "The folder could not be deleted" "Try deleting manually to resolve"
exit 1
fi
fi
Tons of changes all in one commit because I'd broken a commit a while
back and opted to simply reverse them all- Lots of colour changes, the
update script now removes decommissioned bundles, gentags script can now
have additional paths added to it when generating a tags file, README is
much improved, fixed a few issues that required remapping some toggles,
fixed a bunch of issues with the colourscheme between the terminal and
gvim. You can now setup a custom config file to have loaded after the
darkcloud-vimconfig ones, and there's a custom location for pathogen
modules too, to make things tidier without necessarily needing to use
an additional runtimepath. You can also create a file in your home
directory to assign filetypes to programs, for use with the file
manager. A file can be placed in ~/.vim/ with file associations and
prorams to launch them with. The file manager will also open a file with
vim by hitting shift+enter, since e isn't all that comfortablly placed.
The vimrc can now also point to the darkcloud-vimconfig folder, rather
than relying on the vim folder being in a specific location, and the
after folder is now configured to work in the project too.
2014-04-04 19:49:02 -04:00
fi
fi
2014-06-16 05:37:52 -04:00
done && unset FIRST_OLD && echo
2014-05-05 08:57:38 -04:00
# update git-based plugins in vim/bundle.user if any exist
if [ ! $(find vim/bundle.user | grep ".git/config" | wc -l) = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${HEADINGCOLOUR} >> Updating User Plugins >> ${RESETCOLOUR}"
2014-05-05 08:57:38 -04:00
pushd vim/bundle.user > /dev/null 2>&1
for each in *; do
if [ -d "$each" ]; then
pushd "$each" > /dev/null 2>&1
if [ -d .git ]; then
2014-06-17 01:49:46 -04:00
echo -n -e "${HEADINGCOLOUR} ${RESETCOLOUR}${SUBHEADINGCOLOUR} + Updating 'vim/bundle.user/${each}' ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
GIT_STATUS=$(git pull origin master 2>&1)
if [ $? = 0 ]; then
if [ $(echo $GIT_STATUS | grep -c "Already up-to-date") = 0 ]; then
2014-06-17 01:49:46 -04:00
echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
else
2014-06-17 01:49:46 -04:00
echo -e "${NOACTIONCOLOUR} UP TO DATE ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
fi
else
error "vim/bundle.user/${each}" "Git failed to pull the latest changes" "Git output: ${GIT_STATUS}"
fi
2014-05-05 08:57:38 -04:00
fi
popd > /dev/null 2>&1
fi
done
popd > /dev/null 2>&1
echo
fi
2014-04-07 19:16:58 -04:00
2014-06-17 01:49:46 -04:00
echo -n -e "${HEADINGCOLOUR} >> Generating Plugin Helpdocs: ${RESETCOLOUR}"
2014-06-16 05:37:52 -04:00
[[ $(type -P vim) ]] && vim -c "Helptags|qa!" &> /dev/null 2>&1 \
2014-06-17 01:49:46 -04:00
&& echo -e "${SUCCESSCOLOUR} SUCCESS! ${RESETCOLOUR}" \
|| (echo -e "${FAILCOLOUR} FAIL! ${RESETCOLOUR}"; error "$vim -c \"Helptags|qa!\"" "Generating helpdocs for the submodules failed")
2014-04-07 19:16:58 -04:00
2014-06-17 01:49:46 -04:00
echo -e "\n${TITLECOLOUR} ~~~ Update Complete ~~~ ${RESETCOLOUR}\n"
Tons of changes all in one commit because I'd broken a commit a while
back and opted to simply reverse them all- Lots of colour changes, the
update script now removes decommissioned bundles, gentags script can now
have additional paths added to it when generating a tags file, README is
much improved, fixed a few issues that required remapping some toggles,
fixed a bunch of issues with the colourscheme between the terminal and
gvim. You can now setup a custom config file to have loaded after the
darkcloud-vimconfig ones, and there's a custom location for pathogen
modules too, to make things tidier without necessarily needing to use
an additional runtimepath. You can also create a file in your home
directory to assign filetypes to programs, for use with the file
manager. A file can be placed in ~/.vim/ with file associations and
prorams to launch them with. The file manager will also open a file with
vim by hitting shift+enter, since e isn't all that comfortablly placed.
The vimrc can now also point to the darkcloud-vimconfig folder, rather
than relying on the vim folder being in a specific location, and the
after folder is now configured to work in the project too.
2014-04-04 19:49:02 -04:00
exit 0