├── vimfiles └── tools │ ├── gawk │ ├── null-terminal-files.awk │ ├── file-filter-exc.awk │ ├── file-filter-inc.awk │ ├── no-strip-symbol.awk │ └── inherits.awk │ ├── shell │ ├── bash │ │ ├── update-inherits.sh │ │ ├── update-symbols.sh │ │ ├── update-cscope.sh │ │ ├── update-idutils.sh │ │ ├── update-tags.sh │ │ └── update-filelist.sh │ └── batch │ │ ├── update-inherits.bat │ │ ├── update-symbols.bat │ │ ├── update-cscope.bat │ │ ├── update-tags.bat │ │ ├── update-idutils.bat │ │ └── update-filelist.bat │ └── idutils │ └── id-lang.map ├── dist ├── vimrc_for_win_installer ├── gen-package.sh ├── ctags_lang ├── gen-installer.iss └── modpath.iss ├── osx ├── update-plugins.sh ├── replace-my-vim.sh ├── vim.sh ├── mvim.sh └── install.sh ├── unix ├── update-plugins.sh ├── replace-my-vim.sh ├── gvim.sh ├── vim.sh └── install.sh ├── .vimrc.local ├── windows ├── update-plugins.bat ├── gvim.bat ├── gvim73.bat ├── replace-my-vim.bat └── install.bat ├── .gitattributes ├── .vimrc.plugins.local ├── git ├── status.sh ├── push.sh └── commit.sh ├── .gitignore ├── LICENSE ├── CHANGELOG.md ├── .vimrc.mini ├── README.md ├── .vimrc.plugins └── .vimrc /vimfiles/tools/gawk/null-terminal-files.awk: -------------------------------------------------------------------------------- 1 | BEGIN{ORS="\0"}1 2 | -------------------------------------------------------------------------------- /dist/vimrc_for_win_installer: -------------------------------------------------------------------------------- 1 | let g:exvim_custom_path=$VIM 2 | source $VIM/.vimrc 3 | -------------------------------------------------------------------------------- /vimfiles/tools/gawk/file-filter-exc.awk: -------------------------------------------------------------------------------- 1 | $0 ~ file_filter && $0 !~ folder_filter && $0 !~ /.*\\\..*/ { 2 | print ($0) 3 | } 4 | 5 | -------------------------------------------------------------------------------- /vimfiles/tools/gawk/file-filter-inc.awk: -------------------------------------------------------------------------------- 1 | $0 ~ file_filter && $0 ~ folder_filter && $0 !~ /.*\\\..*/ { 2 | print ($0) 3 | } 4 | 5 | -------------------------------------------------------------------------------- /osx/update-plugins.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | vim -u .vimrc.mini --cmd "set rtp=./vimfiles,\$VIMRUNTIME,./vimfiles/after" +PluginClean +PluginUpdate +qall 4 | -------------------------------------------------------------------------------- /unix/update-plugins.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | vim -u .vimrc.mini --cmd "set rtp=./vimfiles,\$VIMRUNTIME,./vimfiles/after" +PluginClean +PluginUpdate +qall 4 | -------------------------------------------------------------------------------- /.vimrc.local: -------------------------------------------------------------------------------- 1 | " This file will be loaded at the end of .vimrc. 2 | " This file is designed to add your own vim scripts or override the exVim's .vimrc settings. 3 | -------------------------------------------------------------------------------- /windows/update-plugins.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | vim -u .vimrc.mini --cmd "set rtp=./vimfiles,$VIMRUNTIME,./vimfiles/after" +PluginClean +PluginUpdate +qall 3 | @echo on 4 | -------------------------------------------------------------------------------- /windows/gvim.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set cwd=%cd% 3 | gvim ^ 4 | -u %cwd%\.vimrc ^ 5 | --cmd "let g:exvim_custom_path='%cwd%'" ^ 6 | --cmd "set runtimepath=%cwd%\vimfiles,$VIMRUNTIME,%cwd%\vimfiles\after" ^ 7 | %1 8 | @echo on 9 | -------------------------------------------------------------------------------- /vimfiles/tools/gawk/no-strip-symbol.awk: -------------------------------------------------------------------------------- 1 | !/^!_TAG/{ 2 | FS = "[\t]"; 3 | KeyStr = $1; 4 | Mask[KeyStr] = KeyStr; 5 | } 6 | END{ 7 | n = asort(Mask); 8 | for (i=1;i<=n;++i) 9 | print(Mask[i]); 10 | } 11 | 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behaviour, in case users don't have core.autocrlf set. 2 | * binary=auto 3 | 4 | # Explicitly declare text files we want to always be normalized and converted 5 | # to native line endings on checkout. 6 | id-lang.map text eol=lf 7 | 8 | -------------------------------------------------------------------------------- /windows/gvim73.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set cwd=%cd% 3 | "c:\Program Files\Vim\vim73\gvim" ^ 4 | -u %cwd%\.vimrc ^ 5 | --cmd "let g:exvim_custom_path='%cwd%'" ^ 6 | --cmd "set runtimepath=%cwd%\vimfiles,$VIMRUNTIME,%cwd%\vimfiles\after" ^ 7 | %1 8 | @echo on 9 | -------------------------------------------------------------------------------- /osx/replace-my-vim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cp ./dist/ctags_lang ~/.ctags 4 | cp .vimrc ~/.vimrc 5 | cp .vimrc.plugins ~/.vimrc.plugins 6 | cp .vimrc.local ~/.vimrc.local 7 | cp .vimrc.plugins.local ~/.vimrc.plugins.local 8 | rm -rf ~/.vim 9 | cp -r vimfiles ~/.vim 10 | -------------------------------------------------------------------------------- /unix/replace-my-vim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cp ./dist/ctags_lang ~/.ctags 4 | cp .vimrc ~/.vimrc 5 | cp .vimrc.plugins ~/.vimrc.plugins 6 | cp .vimrc.local ~/.vimrc.local 7 | cp .vimrc.plugins.local ~/.vimrc.plugins.local 8 | rm -rf ~/.vim 9 | cp -r vimfiles ~/.vim 10 | -------------------------------------------------------------------------------- /osx/vim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cwd=$(pwd) 4 | escape_cwd=$(printf "%q" "$(pwd)") 5 | vim \ 6 | -u "${cwd}/.vimrc" \ 7 | --cmd "let g:exvim_custom_path='${cwd}'" \ 8 | --cmd "set runtimepath=${escape_cwd}/vimfiles,\$VIMRUNTIME,${escape_cwd}/vimfiles/after" \ 9 | ${1:+"$@"} 10 | -------------------------------------------------------------------------------- /osx/mvim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cwd=$(pwd) 4 | escape_cwd=$(printf "%q" "$(pwd)") 5 | mvim \ 6 | -u "${cwd}/.vimrc" \ 7 | --cmd "let g:exvim_custom_path='${cwd}'" \ 8 | --cmd "set runtimepath=${escape_cwd}/vimfiles,\$VIMRUNTIME,${escape_cwd}/vimfiles/after" \ 9 | ${1:+"$@"} 10 | -------------------------------------------------------------------------------- /unix/gvim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cwd=$(pwd) 4 | escape_cwd=$(printf "%q" "$(pwd)") 5 | gvim \ 6 | -u "${cwd}/.vimrc" \ 7 | --cmd "let g:exvim_custom_path='${cwd}'" \ 8 | --cmd "set runtimepath=${escape_cwd}/vimfiles,\$VIMRUNTIME,${escape_cwd}/vimfiles/after" \ 9 | ${1:+"$@"} 10 | -------------------------------------------------------------------------------- /unix/vim.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cwd=$(pwd) 4 | escape_cwd=$(printf "%q" "$(pwd)") 5 | vim \ 6 | -u "${cwd}/.vimrc" \ 7 | --cmd "let g:exvim_custom_path='${cwd}'" \ 8 | --cmd "set runtimepath=${escape_cwd}/vimfiles,\$VIMRUNTIME,${escape_cwd}/vimfiles/after" \ 9 | ${1:+"$@"} 10 | -------------------------------------------------------------------------------- /.vimrc.plugins.local: -------------------------------------------------------------------------------- 1 | " This file will be loaded after .vimrc.plugins, 2 | " but before 'filetype plugin on', 'filetype indent on' and 'syntax on' been executed. 3 | " This file is designed to be safe to add your own plugins and plugins' configuration. 4 | 5 | " Add your customized plugins: 6 | " Example: Plugin 'foo/bar/foobar' 7 | -------------------------------------------------------------------------------- /git/status.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export ORIGINAL_PATH=`pwd` 4 | 5 | # for repo in "./vimfiles/bundle/"ex_* 6 | for repo in "./vimfiles/bundle/"$1* 7 | do 8 | echo ------------------------------------------ 9 | echo ${repo} 10 | echo ------------------------------------------ 11 | 12 | cd ${repo} 13 | 14 | # git status -s -b 15 | git status -s 16 | git cherry -v 17 | 18 | cd ${ORIGINAL_PATH} 19 | echo 20 | done 21 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-inherits.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create inherits 4 | echo "Creating Inherits..." 5 | 6 | # process 7 | if [ -f "${DEST}/tags" ]; then 8 | echo " |- generate ${TMP}" 9 | gawk -f "${TOOLS}/gawk/inherits.awk" "${DEST}/tags">"${TMP}" 10 | fi 11 | 12 | # replace old file 13 | if [ -f "${TMP}" ]; then 14 | echo " |- move ${TMP} to ${TARGET}" 15 | mv -f "${TMP}" "${TARGET}" 16 | fi 17 | echo " |- done!" 18 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-symbols.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create symbols 4 | echo "Creating Symbols..." 5 | 6 | # process 7 | if [ -f "${DEST}/tags" ]; then 8 | echo " |- generate ${TMP}" 9 | gawk -f "${TOOLS}/gawk/no-strip-symbol.awk" "${DEST}/tags">"${TMP}" 10 | fi 11 | 12 | # replace old file 13 | if [ -f "${TMP}" ]; then 14 | echo " |- move ${TMP} to ${TARGET}" 15 | mv -f "${TMP}" "${TARGET}" 16 | fi 17 | echo " |- done!" 18 | -------------------------------------------------------------------------------- /windows/replace-my-vim.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | REM Reference: http://www.wilsonmar.com/1envvars.htm 4 | set home=%USERPROFILE% 5 | 6 | copy /Y .\dist\ctags_lang "%home%\.ctags" 7 | copy /Y .vimrc "%home%\.vimrc" 8 | copy /Y .vimrc.plugins "%home%\.vimrc.plugins" 9 | copy /Y .vimrc.local "%home%\.vimrc.local" 10 | copy /Y .vimrc.plugins.local "%home%\.vimrc.plugins.local" 11 | rmdir /S /Q "%home%\.vim" 12 | xcopy /Y /E vimfiles "%home%\.vim\" 13 | 14 | @echo on 15 | -------------------------------------------------------------------------------- /git/push.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export ORIGINAL_PATH=`pwd` 4 | 5 | # for repo in "./vimfiles/bundle/"ex_* 6 | for repo in "./vimfiles/bundle/"ex-* 7 | do 8 | echo ------------------------------------------ 9 | echo ${repo} 10 | echo ------------------------------------------ 11 | cd ${repo} 12 | 13 | # check if we have uncommit changes 14 | result=$(git cherry -v) 15 | if [ ! "${result}" == "" ]; then 16 | git push 17 | fi 18 | 19 | cd ${ORIGINAL_PATH} 20 | echo 21 | done 22 | -------------------------------------------------------------------------------- /dist/gen-package.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export version="v0.5.0" 4 | export ORIGINAL_PATH=`pwd` 5 | 6 | if [ ! -d "~/exvim/build/" ]; then 7 | mkdir ~/exvim/build/ 8 | fi 9 | 10 | rsync -Cavz --exclude=".git*" --exclude=".DS_Store" --exclude="*.exvim" . ~/exvim/build/exvim-${version} 11 | 12 | cd ~/exvim/build/exvim-${version} 13 | tar -cvzf ~/exvim/build/exvim-${version}.tar.gz * .vimrc .vimrc.plugins .vimrc.mini 14 | zip -r ~/exvim/build/exvim-${version}.zip * .vimrc .vimrc.plugins .vimrc.mini 15 | 16 | cd ${ORIGINAL_PATH} 17 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-inherits.bat: -------------------------------------------------------------------------------- 1 | rem create inherits 2 | echo Creating Inherits... 3 | 4 | set GAWK_CMD="%TOOLS%\windows\gawk.exe" 5 | if not exist %GAWK_CMD% ( 6 | set GAWK_CMD=gawk 7 | ) 8 | 9 | rem process 10 | if exist "%DEST%\tags" ( 11 | echo ^|- generate %TMP% 12 | %GAWK_CMD% -f "%TOOLS%\gawk\inherits.awk" "%DEST%\tags">"%TMP%" 13 | ) 14 | 15 | rem replace old file 16 | if exist "%TMP%" ( 17 | echo ^|- move %TMP% to %TARGET% 18 | move /Y "%TMP%" "%TARGET%" > nul 19 | ) 20 | echo ^|- done! 21 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-symbols.bat: -------------------------------------------------------------------------------- 1 | rem create symbols 2 | echo Creating Symbols... 3 | 4 | set GAWK_CMD="%TOOLS%\windows\gawk.exe" 5 | if not exist %GAWK_CMD% ( 6 | set GAWK_CMD=gawk 7 | ) 8 | 9 | rem process 10 | if exist "%DEST%\tags" ( 11 | echo ^|- generate %TMP% 12 | %GAWK_CMD% -f "%TOOLS%\gawk\no-strip-symbol.awk" "%DEST%\tags">"%TMP%" 13 | ) 14 | 15 | rem replace old file 16 | if exist "%TMP%" ( 17 | echo ^|- move %TMP% to %TARGET% 18 | move /Y "%TMP%" "%TARGET%" > nul 19 | ) 20 | echo ^|- done! 21 | -------------------------------------------------------------------------------- /git/commit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export ORIGINAL_PATH=`pwd` 4 | 5 | # for repo in "./vimfiles/bundle/"ex_* 6 | for repo in "./vimfiles/bundle/"ex-* 7 | do 8 | echo ------------------------------------------ 9 | echo ${repo} 10 | echo ------------------------------------------ 11 | cd ${repo} 12 | 13 | # check if we have unstaged, uncommit changes 14 | git add --all . 15 | if ! git diff-index --quiet HEAD --; then 16 | git commit -m "$1" 17 | fi 18 | 19 | cd ${ORIGINAL_PATH} 20 | echo 21 | done 22 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-cscope.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create cscope.out 4 | echo "Creating Cscope..." 5 | 6 | # choose cscope path first 7 | if [ -f "${DEST}/files" ]; then 8 | FILES="${DEST}/files" 9 | # else 10 | # FILES="-R ." 11 | fi 12 | 13 | # process tags by langugage 14 | echo " |- generate ${TMP}" 15 | ${CSCOPE_CMD} -f "${TMP}" ${OPTIONS} "${FILES}" 16 | 17 | # replace old file 18 | if [ -f "${TMP}" ]; then 19 | echo " |- move ${TMP} to ${TARGET}" 20 | mv -f "${TMP}" "${TARGET}" 21 | fi 22 | echo " |- done!" 23 | -------------------------------------------------------------------------------- /vimfiles/tools/gawk/inherits.awk: -------------------------------------------------------------------------------- 1 | /inherits:/{ 2 | FS="[\t]" 3 | for ( i = NF; i >= 1; i = i - 1) { 4 | if ( $i ~ /inherits:/ ) { 5 | str_parents=$i 6 | sub(/inherits:/,"",str_parents) 7 | split(str_parents,parent_list,",") 8 | for ( i in parent_list ) { 9 | line = sprintf( "\"%s\" -> \"%s\"", parent_list[i], $1 ) 10 | Mask[line] = line; 11 | } 12 | break 13 | } 14 | } 15 | } 16 | END{ 17 | # n = asort(Mask); 18 | for ( i in Mask ) 19 | print(Mask[i]) 20 | } 21 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-cscope.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem create cscope.out 3 | echo Creating Cscope... 4 | 5 | if exist "%TOOLS%\windows\cscope.exe" ( 6 | set CSCOPE_CMD="%TOOLS%\windows\cscope.exe" 7 | ) 8 | 9 | rem choose ctags path first 10 | if exist "%DEST%\files" ( 11 | set FILES="%DEST%\files" 12 | ) 13 | 14 | rem process tags by langugage 15 | echo ^|- generate %TMP% 16 | %CSCOPE_CMD% -f"%TMP%" %OPTIONS% %FILES% 17 | 18 | rem replace old file 19 | if exist "%TMP%" ( 20 | echo ^|- move %TMP% to %TARGET% 21 | move /Y "%TMP%" "%TARGET%" > nul 22 | ) 23 | echo ^|- done! 24 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-tags.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem create tags 3 | echo Creating Tags... 4 | 5 | if exist "%TOOLS%\windows\ctags.exe" ( 6 | set CTAGS_CMD="%TOOLS%\windows\ctags.exe" 7 | ) 8 | 9 | rem choose ctags path first 10 | if exist "%DEST%\files" ( 11 | set FILES=-L "%DEST%\files" 12 | ) else ( 13 | set FILES=-R . 14 | ) 15 | 16 | rem process tags by langugage 17 | echo ^|- generate %TMP% 18 | %CTAGS_CMD% -o"%TMP%" %OPTIONS% %FILES% 19 | 20 | rem replace old file 21 | if exist "%TMP%" ( 22 | echo ^|- move %TMP% to %TARGET% 23 | move /Y "%TMP%" "%TARGET%" > nul 24 | ) 25 | echo ^|- done! 26 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-idutils.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create ID 4 | echo "Creating ID..." 5 | 6 | # try to use auto-gen id language map 7 | echo " |- generate ${TMP}" 8 | if [ -f "${DEST}/id-lang-autogen.map" ]; then 9 | LANG_MAP="${DEST}/id-lang-autogen.map" 10 | 11 | # if auto-gen map not exists we use default one in tools directory 12 | else 13 | LANG_MAP="${TOOLS}/idutils/id-lang.map" 14 | fi 15 | mkid --file="${TMP}" --include="text" --lang-map="${LANG_MAP}" --files0-from="${DEST}/idutils-files" 16 | 17 | # replace old file 18 | if [ -f "${TMP}" ]; then 19 | echo " |- move ${TMP} to ${TARGET}" 20 | mv -f "${TMP}" "${TARGET}" 21 | fi 22 | echo " |- done!" 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # mac-osx files 2 | .DS_store 3 | profile 4 | 5 | # visual-studio files 6 | *.ncb 7 | *.suo 8 | *.vcproj.*.user 9 | *.pdb 10 | *.idb 11 | 12 | # xcode files 13 | PLBlocks.framework/* 14 | *.pbxuser 15 | *.mode1v3 16 | *~.nib/ 17 | *.perspective 18 | *.perspectivev3 19 | xcuserdata/ 20 | 21 | # gcc files 22 | *.gch 23 | 24 | # exvim files 25 | *.err 26 | *.err.meta 27 | *.exvim 28 | *.exvim.meta 29 | *.vimentry 30 | *.vimentry.meta 31 | *.vimproject 32 | *.vimproject.meta 33 | .vimfiles.*/ 34 | .exvim.*/ 35 | quick_gen_project_*_autogen.bat 36 | quick_gen_project_*_autogen.bat.meta 37 | quick_gen_project_*_autogen.sh 38 | quick_gen_project_*_autogen.sh.meta 39 | 40 | # project files 41 | vimfiles/bundle/* 42 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-tags.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create tags 4 | echo "Creating Tags..." 5 | 6 | if [ "${CUSTOM}" = "true" ]; then 7 | echo " |- move custom ctags to ${TARGET}" 8 | cp "${SOURCE}" "${TARGET}" 9 | else 10 | # choose ctags path first 11 | if [ -f "${DEST}/files" ]; then 12 | FILES="-L ${DEST}/files" 13 | else 14 | FILES="-R ." 15 | fi 16 | 17 | # process tags by langugage 18 | echo " |- generate ${TMP}" 19 | ${CTAGS_CMD} -o "${TMP}" ${OPTIONS} "${FILES}" 20 | 21 | # replace old file 22 | if [ -f "${TMP}" ]; then 23 | echo " |- move ${TMP} to ${TARGET}" 24 | mv -f "${TMP}" "${TARGET}" 25 | fi 26 | fi 27 | echo " |- done!" 28 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-idutils.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem create ID 3 | echo Creating ID... 4 | 5 | set MKID_CMD="%TOOLS%\windows\mkid.exe" 6 | if not exist %MKID_CMD% ( 7 | set MKID_CMD=mkid 8 | ) 9 | 10 | rem try to use auto-gen id language map 11 | echo ^|- generate %TMP% 12 | if exist "%DEST%\id-lang-autogen.map" ( 13 | set LANG_MAP=%DEST%\id-lang-autogen.map 14 | ) else ( 15 | rem if auto-gen map not exists we use default one in tools directory 16 | set LANG_MAP=%TOOLS%\idutils\id-lang.map 17 | ) 18 | %MKID_CMD% --file="%TMP%" --include="text" --lang-map="%LANG_MAP%" --prune="%EXCLUDE_FOLDERS%" 19 | 20 | rem replace old file 21 | if exist "%TMP%" ( 22 | echo ^|- move %TMP% to %TARGET% 23 | move /Y "%TMP%" "%TARGET%" > nul 24 | ) 25 | echo ^|- done! 26 | -------------------------------------------------------------------------------- /windows/install.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | set ORIGINAL_PATH=%cd% 3 | 4 | echo Check and install Vundle. 5 | 6 | rem if we don't have folder vimfiles, create it. 7 | if not exist .\vimfiles\ (mkdir .\vimfiles\) 8 | cd .\vimfiles\ 9 | 10 | rem if we don't have bundle, create it. 11 | if not exist .\bundle\ (mkdir .\bundle\) 12 | cd .\bundle\ 13 | 14 | rem download or update vundle in ./vimfiles/bundle/ 15 | if not exist .\vundle\ (git clone https://github.com/gmarik/Vundle.vim Vundle.vim) 16 | 17 | rem download and install bundles through Vundle in this repository 18 | echo Update vim-plugins. 19 | cd %ORIGINAL_PATH% 20 | start /B /WAIT vim -u .vimrc.mini --cmd "set rtp=.\vimfiles,$VIMRUNTIME,.\vimfiles\after" +PluginClean +PluginUpdate +qall 21 | 22 | rem NOTE: Windows will stop batch after other process running 23 | @echo on 24 | -------------------------------------------------------------------------------- /unix/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export ORIGINAL_PATH=`pwd` 4 | 5 | echo "Check and install Vundle." 6 | 7 | # if we don't have folder vimfiles, create it. 8 | if [ ! -d "./vimfiles/" ]; then 9 | mkdir ./vimfiles/ 10 | fi 11 | cd ./vimfiles/ 12 | 13 | # if we don't have bundle, create it. 14 | if [ ! -d "./bundle/" ]; then 15 | mkdir ./bundle/ 16 | fi 17 | cd ./bundle/ 18 | 19 | # download or update vundle in ./vimfiles/bundle/ 20 | if [ ! -d "./Vundle.vim/" ]; then 21 | git clone https://github.com/gmarik/Vundle.vim Vundle.vim 22 | fi 23 | 24 | # download and install bundles through Vundle in this repository 25 | echo "Update vim-plugins." 26 | cd ${ORIGINAL_PATH} 27 | vim -u .vimrc.mini --cmd "set rtp=./vimfiles,\$VIMRUNTIME,./vimfiles/after" +PluginClean +PluginUpdate +qall 28 | 29 | # go back 30 | cd ${ORIGINAL_PATH} 31 | 32 | # 33 | echo "|" 34 | echo "exVim installed successfully!" 35 | echo "|" 36 | echo "You can run 'sh unix/gvim.sh' to preview exVim." 37 | echo "You can also run 'sh unix/replace-my-vim.sh' to replace exVim with your Vim." 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 exvim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /vimfiles/tools/shell/batch/update-filelist.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem Create fileslist 3 | echo Creating Filelist... 4 | 5 | set SED_CMD="%TOOLS%\windows\sed.exe" 6 | if not exist %SED_CMD% ( 7 | set SED_CMD=sed 8 | ) 9 | 10 | set GAWK_CMD="%TOOLS%\windows\gawk.exe" 11 | if not exist %GAWK_CMD% ( 12 | set GAWK_CMD=gawk 13 | ) 14 | 15 | rem create cwd pattern for sed 16 | set CWD_PATTERN=%cd% 17 | for /f "delims=" %%a in ('echo %cd%^|%SED_CMD% "s,\\,\\\\,g"') do ( 18 | set CWD_PATTERN=%%a 19 | ) 20 | 21 | rem process 22 | echo ^|- generate %TMP% 23 | dir /s /b %FILE_SUFFIXS%|%SED_CMD% "s,\(%CWD_PATTERN%\)\(.*\),.\2,gI" > "%TMP%" 24 | 25 | echo ^|- apply filter 26 | rem NOTE: dir /s /b *.cpp will list xxx.cpp~, too. So use gawk here to filter out thoes things. 27 | %GAWK_CMD% -v filter_pattern=%FILE_FILTER_PATTERN% -v folder_filter=%FOLDER_FILTER_PATTERN% -f "%TOOLS%\gawk\file-filter-%GAWK_SUFFIX%.awk" "%TMP%">"%TMP2%" 28 | del "%TMP%" > nul 29 | if exist "%TMP2%" ( 30 | echo ^|- move %TMP2% to %TARGET% 31 | move /Y "%TMP2%" "%TARGET%" > nul 32 | ) 33 | 34 | rem process id-utils files 35 | if exist "%TARGET%" ( 36 | echo ^|- generate %ID_TARGET% 37 | %GAWK_CMD% -f "%TOOLS%/gawk/null-terminal-files.awk" "%TARGET%">"%ID_TARGET%" 38 | ) 39 | 40 | echo ^|- done! 41 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 0.5.0 (developing) 4 | 5 | ## New Features 6 | 7 | - Add vim-better-whitespace plugin, and use w to quickly strip extra white-space 8 | 9 | ## Changes 10 | 11 | - Support erlang in id-utils 12 | - Different syntax highlight for gulpfile, bower.json, package.json in ex-project 13 | - Use maparg instead of mapcheck 14 | - Unset cap of 10,000 files limited in ctrlp, so we find everything 15 | - Disable ex-minibufexpl by default for the performance problem 16 | - Disable vim-airline by default for the performance problem 17 | - Add php into default id-lang-autogen.map 18 | 19 | ## Bug Fixes 20 | 21 | - Fix [Issue #79](https://github.com/exvim/main/issues/79) undotree close will make cursor jump to minibufexpl 22 | - Fix [Issue #82](https://github.com/exvim/main/issues/82) `sg` will delete the edit buffer contents if first time create the exvim proejct without `:Update` 23 | - Fix [Issue #84](https://github.com/exvim/main/issues/84) exvim did not open correctly #define for tags 24 | - Fix [Issue #85](https://github.com/exvim/main/issues/85) when set cursorline is used color of the minibuff explorer get messed up 25 | - Fix [Issue #83](https://github.com/exvim/main/issues/83) ctrlp must follow the folder include/exclude filter 26 | - Fix .exvim set to nerdtree with folder_filter will raise an error. 27 | - Fix ex-searchcompl will not unregister `` command after search stops. 28 | 29 | -------------------------------------------------------------------------------- /dist/ctags_lang: -------------------------------------------------------------------------------- 1 | --langdef=js 2 | --langmap=js:.js.ts.coffee 3 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\{/\5/,object/ 4 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*function[ \t]*\(/\5/,function/ 5 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*\[/\5/,array/ 6 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[^"]'[^']*/\5/,string/ 7 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*(true|false)/\5/,boolean/ 8 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*[0-9]+/\5/,number/ 9 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*=[ \t]*.+([,;=]|$)/\5/,variable/ 10 | --regex-js=/(,|(;|^)[ \t]*(var|let|([A-Za-z_$][A-Za-z0-9_$.]+\.)*))[ \t]*([A-Za-z0-9_$]+)[ \t]*[ \t]*([,;]|$)/\5/,variable/ 11 | --regex-js=/function[ \t]+([A-Za-z0-9_$]+)[ \t]*\([^)]*\)/\1/,function/ 12 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\{/\2/,object/ 13 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*function[ \t]*\(/\2/,function/ 14 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*\[/\2/,array/ 15 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^"]'[^']*/\2/,string/ 16 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*(true|false)/\2/,boolean/ 17 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[0-9]+/\2/,number/ 18 | --regex-js=/(,|^)[ \t]*([A-Za-z_$][A-Za-z0-9_$]+)[ \t]*:[ \t]*[^=]+([,;]|$)/\2/,variable/ 19 | 20 | --langmap=c:+.glsl.hlsl.vsh.psh.fx.fxh.cg.shd 21 | --c-kinds=+p 22 | 23 | --c++-kinds=+p 24 | -------------------------------------------------------------------------------- /.vimrc.mini: -------------------------------------------------------------------------------- 1 | 2 | set nocompatible " be iMproved, required 3 | filetype off " required 4 | 5 | let cwd = getcwd() 6 | let g:ex_tools_path = cwd.'/vimfiles/tools/' 7 | exec 'set rtp+=' . fnameescape ( cwd . '/vimfiles/bundle/Vundle.vim/' ) 8 | call vundle#rc(cwd.'/vimfiles/bundle/') 9 | 10 | " ======================================================= 11 | 12 | Plugin 'gmarik/Vundle.vim' 13 | Plugin 'exvim/ex-config' 14 | Plugin 'exvim/ex-utility' 15 | Plugin 'exvim/ex-aftercolors' 16 | Plugin 'exvim/ex-vimentry' 17 | Plugin 'exvim/ex-project' 18 | Plugin 'exvim/ex-gsearch' 19 | Plugin 'exvim/ex-tags' 20 | Plugin 'exvim/ex-symbol' 21 | Plugin 'exvim/ex-cscope' 22 | Plugin 'exvim/ex-qfix' 23 | Plugin 'exvim/ex-hierarchy' 24 | Plugin 'exvim/ex-taglist' 25 | Plugin 'exvim/ex-autocomplpop' 26 | Plugin 'exvim/ex-showmarks' 27 | Plugin 'exvim/ex-visincr' 28 | Plugin 'exvim/ex-matchit' 29 | Plugin 'exvim/ex-easyhl' 30 | Plugin 'exvim/ex-searchcompl' 31 | Plugin 'exvim/ex-colorschemes' 32 | Plugin 'altercation/vim-colors-solarized' 33 | Plugin 'morhetz/gruvbox' 34 | Plugin 'kien/ctrlp.vim' 35 | Plugin 'tpope/vim-fugitive' 36 | Plugin 'tpope/vim-surround' 37 | Plugin 'scrooloose/nerdtree' 38 | Plugin 'scrooloose/nerdcommenter' 39 | Plugin 'scrooloose/syntastic' 40 | Plugin 'mbbill/undotree' 41 | Plugin 'godlygeek/tabular' 42 | Plugin 'Lokaltog/vim-easymotion' 43 | Plugin 'vim-scripts/LargeFile' 44 | Plugin 'exvim/ex-cref' 45 | Plugin 'ntpeters/vim-better-whitespace' 46 | Plugin 'exvim/ex-typescript' 47 | Plugin 'mattn/emmet-vim' 48 | Plugin 'Yggdroot/indentLine' 49 | Plugin 'pangloss/vim-javascript' 50 | Plugin 'kchmck/vim-coffee-script' 51 | Plugin 'exvim/ex-indenthtml.vim' 52 | Plugin 'hail2u/vim-css3-syntax' 53 | Plugin 'digitaltoad/vim-jade' 54 | Plugin 'groenewege/vim-less' 55 | Plugin 'wavded/vim-stylus' 56 | Plugin 'plasticboy/vim-markdown' 57 | 58 | " ======================================================= 59 | 60 | filetype plugin indent on " required 61 | 62 | -------------------------------------------------------------------------------- /osx/install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export ORIGINAL_PATH=`pwd` 4 | 5 | echo "Check and install Vundle." 6 | 7 | # if we don't have folder vimfiles, create it. 8 | if [ ! -d "./vimfiles/" ]; then 9 | mkdir ./vimfiles/ 10 | fi 11 | cd ./vimfiles/ 12 | 13 | # if we don't have bundle, create it. 14 | if [ ! -d "./bundle/" ]; then 15 | mkdir ./bundle/ 16 | fi 17 | cd ./bundle/ 18 | 19 | # download or update vundle in ./vimfiles/bundle/ 20 | if [ ! -d "./Vundle.vim/" ]; then 21 | # TODO: please check if the vundle is latest version 22 | git clone https://github.com/gmarik/Vundle.vim Vundle.vim 23 | fi 24 | 25 | # download and install bundles through Vundle in this repository 26 | echo "Update vim-plugins." 27 | cd ${ORIGINAL_PATH} 28 | vim -u .vimrc.mini --cmd "set rtp=./vimfiles,\$VIMRUNTIME,./vimfiles/after" +PluginClean +PluginUpdate +qall 29 | 30 | # TODO 31 | # install powerline-fonts on MacOSX 32 | # cd ./ext/powerline-fonts/DejaVuSansMono/ 33 | # if [ ! -f "~/Library/Fonts/DejaVu\ Sans\ Mono\ Bold\ Oblique\ for\ Powerline.ttf" ]; then 34 | # cp ./DejaVu\ Sans\ Mono\ Bold\ Oblique\ for\ Powerline.ttf ~/Library/Fonts/ 35 | # fi 36 | # if [ ! -f "~/Library/Fonts/DejaVu\ Sans\ Mono\ Bold\ for\ Powerline.ttf" ]; then 37 | # cp ./DejaVu\ Sans\ Mono\ Bold\ for\ Powerline.ttf ~/Library/Fonts/ 38 | # fi 39 | # if [ ! -f "~/Library/Fonts/DejaVu\ Sans\ Mono\ Oblique\ for\ Powerline.ttf" ]; then 40 | # cp ./DejaVu\ Sans\ Mono\ Oblique\ for\ Powerline.ttf ~/Library/Fonts/ 41 | # fi 42 | # if [ ! -f "~/Library/Fonts/DejaVu\ Sans\ Mono\ for\ Powerline.ttf" ]; then 43 | # cp ./DejaVu\ Sans\ Mono\ for\ Powerline.ttf ~/Library/Fonts/ 44 | # fi 45 | echo "Please install powerline-fonts manually." 46 | 47 | # go back 48 | cd ${ORIGINAL_PATH} 49 | 50 | # 51 | echo "|" 52 | echo "exVim installed successfully!" 53 | echo "|" 54 | echo "You can run 'sh osx/mvim.sh' to preview exVim." 55 | echo "You can also run 'sh osx/replace-my-vim.sh' to replace exVim with your Vim." 56 | -------------------------------------------------------------------------------- /vimfiles/tools/shell/bash/update-filelist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # create files 4 | echo "Creating Filelist..." 5 | 6 | # test posix regex 7 | find . -maxdepth 1 -regextype posix-extended -regex "test" > /dev/null 2>&1 8 | if test "$?" = "0"; then 9 | FORCE_POSIX_REGEX_1="" 10 | FORCE_POSIX_REGEX_2="-regextype posix-extended" 11 | else 12 | FORCE_POSIX_REGEX_1="-E" 13 | FORCE_POSIX_REGEX_2="" 14 | fi 15 | 16 | # get filelist 17 | echo " |- generate ${TMP}" 18 | 19 | if test "${FOLDERS}" != ""; then 20 | find ${FORCE_POSIX_REGEX_1} . -type f -not -path "*/\.*" ${FORCE_POSIX_REGEX_2} ${IS_EXCLUDE} -regex ".*/("${FOLDERS}")/.*" ${FORCE_POSIX_REGEX_2} -regex ".*\.("${FILE_SUFFIXS}")$" > "${TMP}" 21 | 22 | if [[ "${FILE_SUFFIXS}" =~ __EMPTY__ ]]; then 23 | find ${FORCE_POSIX_REGEX_1} . -type f -not -path "*/\.*" ${FORCE_POSIX_REGEX_2} ${IS_EXCLUDE} -regex ".*/("${FOLDERS}")/.*" ${FORCE_POSIX_REGEX_2} |grep -v "\.\w*$" |xargs -i sh -c 'file="{}";type=$(file $file);[[ $type =~ "text" ]] && echo $file' >> "${TMP}" 24 | fi 25 | 26 | else 27 | find ${FORCE_POSIX_REGEX_1} . -type f -not -path "*/\.*" ${FORCE_POSIX_REGEX_2} -regex ".*\.("${FILE_SUFFIXS}")$" > "${TMP}" 28 | 29 | if [[ "${FILE_SUFFIXS}" =~ __EMPTY__ ]]; then 30 | find ${FORCE_POSIX_REGEX_1} . -type f -not -path "*/\.*" ${FORCE_POSIX_REGEX_2} -regex ".*\.("${FILE_SUFFIXS}")$" |grep -v "\.\w*$" |xargs -i sh -c 'file="{}";type=$(file $file);[[ $type =~ "text" ]] && echo $file' >> "${TMP}" 31 | fi 32 | 33 | fi 34 | 35 | # DISABLE 36 | # # find . -type f -not -path "*/\.*" > "${TMP}" 37 | # if [ -f "${TMP}" ]; then 38 | # echo " |- filter by gawk ${TMP}" 39 | # gawk -v file_filter=${FILE_FILTER_PATTERN} -v folder_filter=${FOLDER_FILTER_PATTERN} -f "${TOOLS}/gawk/file-filter-${GAWK_SUFFIX}.awk" "${TMP}">"${TMP2}" 40 | # rm "${TMP}" 41 | # fi 42 | 43 | 44 | # replace old file 45 | if [ -f "${TMP}" ]; then 46 | echo " |- move ${TMP} to ${TARGET}" 47 | mv -f "${TMP}" "${TARGET}" 48 | fi 49 | 50 | if [ -f "${TARGET}" ]; then 51 | echo " |- generate ${ID_TARGET}" 52 | gawk -f "${TOOLS}/gawk/null-terminal-files.awk" "${TARGET}">"${ID_TARGET}" 53 | fi 54 | 55 | echo " |- done!" 56 | -------------------------------------------------------------------------------- /vimfiles/tools/idutils/id-lang.map: -------------------------------------------------------------------------------- 1 | # Welcome to the mkid language mapper. 2 | # 3 | # The format of each line is: 4 | # 5 | # [options] 6 | # 7 | # Filenames are matched top-to-bottom against the patterns, and the 8 | # first match is chosen. The special language `IGNORE' means that 9 | # this file should be ignored by mkid. The options are 10 | # language-specific command-line options to mkid. 11 | # 12 | # If a file name doesn't match any pattern, it is assigned the default 13 | # language. The default language may be specified here with the 14 | # special pattern `**', or overridden from the mkid command-line with 15 | # the `--default-lang=LANG' option. 16 | # 17 | # The special pattern `***' means to include the named file that 18 | # immediately follows. If no file is named, then the default system 19 | # language mapper file (i.e., this file) is included. 20 | 21 | # Default language 22 | ** IGNORE # Although this is listed first, 23 | # the default language pattern is 24 | # logically matched last. 25 | 26 | # Backup files 27 | *~ IGNORE 28 | *.bak IGNORE 29 | *.bk[0-9] IGNORE 30 | 31 | # SCCS files 32 | [sp].* IGNORE 33 | 34 | # C dependencies created by automake 35 | */.deps/* IGNORE 36 | 37 | # ignore svn file 38 | */.svn/* IGNORE 39 | *.svn-base IGNORE 40 | 41 | # ignore git file 42 | .git/* IGNORE 43 | 44 | # ignore vimentry files 45 | .exvim.*/* IGNORE 46 | 47 | # c/cpp header 48 | *.h text 49 | *.h++ text 50 | *.h.in text 51 | *.H text 52 | *.hh text 53 | *.hp text 54 | *.hpp text 55 | *.hxx text 56 | *.inl text 57 | 58 | # c/cpp srouce 59 | *.c text 60 | *.C text 61 | *.cc text 62 | *.cp text 63 | *.cpp text 64 | *.cxx text 65 | 66 | # csharp 67 | *.cs text 68 | 69 | # objective-c/matlab/octave 70 | *.m text 71 | 72 | # shader 73 | *.hlsl text 74 | *.vsh text 75 | *.psh text 76 | *.fx text 77 | *.fxh text 78 | *.cg text 79 | *.shd text 80 | 81 | # asmble 82 | *.asm text 83 | *.ASM text 84 | *.s text 85 | *.S text 86 | 87 | # python 88 | *.py text 89 | *.pyx text 90 | *.pxd text 91 | *.scons text 92 | 93 | # ruby 94 | *.rb text 95 | 96 | # javascript/typescript/coffee-script 97 | *.js text 98 | *.as text 99 | *.ts text 100 | *.coffee text 101 | 102 | # lua 103 | *.lua text 104 | 105 | # max-script 106 | *.ms text 107 | 108 | # perl 109 | *.pl text 110 | *.pm text 111 | 112 | # vim 113 | *.vim text 114 | 115 | # html 116 | *.html text 117 | *.htm text 118 | *.shtml text 119 | *.stm text 120 | 121 | # xml 122 | *.xml text 123 | *.mms text 124 | *.glm text 125 | 126 | # json 127 | *.json text 128 | 129 | # misc file 130 | *.l text 131 | *.lex text 132 | *.y text 133 | *.yacc text 134 | -------------------------------------------------------------------------------- /dist/gen-installer.iss: -------------------------------------------------------------------------------- 1 | ; Script generated by the Inno Setup Script Wizard. 2 | ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 3 | 4 | #define MyAppName "exVim" 5 | #define MyAppVersion "v0.5.0" 6 | #define MyAppPublisher "Johnny Wu" 7 | #define MyAppURL "http://exvim.github.io/" 8 | #define MyAppExeName "vim74\gvim.exe" 9 | 10 | [Setup] 11 | ; NOTE: The value of AppId uniquely identifies this application. 12 | ; Do not use the same AppId value in installers for other applications. 13 | ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) 14 | AppId={{1BC8C5B3-EB6F-410F-9C26-20ED937DB8CE} 15 | AppName={#MyAppName} 16 | AppVersion={#MyAppVersion} 17 | ;AppVerName={#MyAppName} {#MyAppVersion} 18 | AppPublisher={#MyAppPublisher} 19 | AppPublisherURL={#MyAppURL} 20 | AppSupportURL={#MyAppURL} 21 | AppUpdatesURL={#MyAppURL} 22 | DefaultDirName=c:\{#MyAppName} 23 | DefaultGroupName={#MyAppName} 24 | AllowNoIcons=yes 25 | OutputBaseFilename=exvim-{#MyAppVersion} 26 | OutputDir=C:\dev\exvim\build 27 | Compression=lzma 28 | SolidCompression=yes 29 | 30 | [Languages] 31 | Name: "english"; MessagesFile: "compiler:Default.isl" 32 | 33 | [Tasks] 34 | Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked 35 | Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 0,6.1 36 | Name: "modifypath"; Description: Add Environment Path; 37 | 38 | [Files] 39 | Source: "C:\dev\exvim\main\dist\vimrc_for_win_installer"; DestDir: "{%HOMEPATH}"; DestName: ".vimrc"; Flags: ignoreversion 40 | Source: "C:\dev\exvim\main\dist\ctags_lang"; DestDir: "{%HOMEPATH}"; DestName: ".ctags"; Flags: ignoreversion 41 | Source: "C:\dev\exvim\build\exvim-v0.5.0\.vimrc*"; DestDir: "{app}"; Flags: ignoreversion 42 | Source: "C:\dev\exvim\build\exvim-v0.5.0\vimfiles\*"; DestDir: "{app}\vimfiles"; Flags: ignoreversion recursesubdirs createallsubdirs 43 | Source: "C:\dev\exvim\build\graphviz\*"; DestDir: "{app}\graphviz"; Flags: ignoreversion recursesubdirs createallsubdirs 44 | Source: "C:\dev\exvim\build\tools\*"; DestDir: "{app}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs 45 | Source: "C:\dev\exvim\build\vim74\*"; DestDir: "{app}\vim74"; Flags: ignoreversion recursesubdirs createallsubdirs 46 | Source: "C:\dev\exvim\build\DejaVuSansMono\DejaVu Sans Mono for Powerline.ttf"; DestDir: "{fonts}"; FontInstall: "DejaVu Sans Mono for Powerline"; Flags: onlyifdoesntexist uninsneveruninstall 47 | ; NOTE: Don't use "Flags: ignoreversion" on any shared system files 48 | 49 | [Icons] 50 | Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" 51 | Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" 52 | Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon 53 | Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon 54 | 55 | [Code] 56 | const 57 | ModPathName = 'modifypath'; 58 | ModPathType = 'user'; 59 | 60 | function ModPathDir(): TArrayOfString; 61 | begin 62 | setArrayLength(Result, 3) 63 | Result[0] := ExpandConstant('{app}\bin'); 64 | Result[1] := ExpandConstant('{app}\graphviz\bin'); 65 | Result[2] := ExpandConstant('{app}\vim74'); 66 | end; 67 | 68 | #include "modpath.iss" 69 | 70 | [Run] 71 | Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent 72 | 73 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![exVim Logo](http://exvim.github.io/images/logo.png) 2 | 3 | [Documentation](http://exvim.github.io/docs/) | 4 | [Downloads](http://exvim.github.io/downloads/) | 5 | [Plugins](http://exvim.github.io/docs/plugins/) | 6 | [Installation](http://exvim.github.io/docs/install/) | 7 | [Getting Start](http://exvim.github.io/docs/getting-start/) | 8 | [Known Issues](http://exvim.github.io/docs/known-issues/) | 9 | [Community](#community) 10 | 11 | # Intro 12 | 13 | exVim is a project to turn Vim into a nice programming environment. exVim introduce the project file concept (.exvim) in Vim. By editing this project file (.exvim) through Vim, the exVim plugins will be invoked. In this way, it makes you possible to apply different Vim settings, plugin settings and even loading plugins on demand by different projects. In general, it makes Vim become the best IDE in the world! 14 | 15 | **EVEN COOLER IS --- WE USE EXVIM TO DEVELOP EXVIM! (\\(-_-)/)** 16 | 17 | ## Features 18 | 19 | - Manage your project with a `.exvim` setting file. 20 | - Update your project files with a single command. (tags, cscope-db, search-index, makefile, ...) 21 | - Project files are stored in one place (in the folder `./.exvim.your_project_name/` under your project). 22 | - Load Vim plugins on demand for different projects based on your `.exvim` settings. 23 | - Better management of plugin windows in Vim. (avoid getting multiple plugin windows messed up) 24 | - Browse and work on your project files and folders in the project window. 25 | - Class, variable, and function tag jumping. 26 | - Global search in project scope. 27 | - Global search engine customization (user can choose grep, idutils, or even his own) 28 | - A powerful way to filter your global search results. 29 | - Generate class hierarchy pictures. 30 | - Enhanced quick-fix window. 31 | - Popular Vim plugin integrated. 32 | 33 | ## How does it work? 34 | 35 | By editing and saving your project settings in a `your_project_name.exvim` file and opening it with Vim, the exVim plugins will be loaded. exVim will parse the `your_project_name.exvim` file and apply the settings for your project after Vim 36 | has started. 37 | 38 | The settings include: 39 | 40 | - The window layout of your Vim. (Where to open the plugin window, initial opened window, last used layout...) 41 | - File and Folder filter. 42 | - Plugins you wish to use in the project. 43 | - Plugin settings for the project. 44 | - External tools. Such as grep, idutils, ctags, cscope.... 45 | - External tools settings for the project. 46 | - Your extension settings. 47 | - ... 48 | 49 | exVim also makes sure project files are stored in one place (in the folder `./.exvim.your_project_name/` under your project). 50 | This makes your project clean and much better to work with external tools. These project files can be: 51 | 52 | - global search index and results (idutils) 53 | - tags 54 | - cscope files 55 | - hierarchy graph pictures 56 | - error messages 57 | - temporary files 58 | - ... 59 | 60 | After Vim has loaded `your_project_name.exvim` and started, exVim helps you update your project files so you 61 | can use your favorite plugins with these files. 62 | 63 | ## How does it integrate Vim plugins? 64 | 65 | exVim aims to implement as many functions and features as possible in **pure Vim language**. 66 | We try to avoid re-inventing the wheel. As a result, we carefully select and integrate popular Vim plugins 67 | for some of the tasks. For those features that are lacking or for those we think we can do it better, 68 | we develop ourselves. They are put in [exVim organization](https://github.com/exvim) on GitHub. 69 | 70 | Here are the standards we use for patches and development for Vim plugins: 71 | 72 | - Developed in pure Vim language 73 | - Follow the unix philosophy: do one thing well 74 | - Minimal dependencies 75 | - High quality code and good performance 76 | - Highly active community 77 | - Can be installed with a variety of plugin managers, Vundle or pathogen. (Repo in GitHub, standard runtime path structure) 78 | 79 | Read the [Plugins](http://exvim.github.io/docs/plugins/) page for details of the plugins 80 | in exVim. 81 | 82 | ## About exVim organization and this repository 83 | 84 | The exVim is an organization in Github. The repositories under exVim are the plugins used in 85 | exVim project. They follow the standard Vim plugin structures so that people can install them on 86 | demand. 87 | 88 | The [exvim/main](https://github.com/exvim/main#installation) is the repository for 89 | managing the plugins, external tools, and custom scripts. It is the main entry point for the 90 | exVim project. 91 | 92 | The repository contains: 93 | 94 | - An essential `.vimrc` settings for exVim. 95 | - Configuration files for external tools. 96 | - Templates for vim-plugins and external tools. 97 | - exVim develop environment. 98 | 99 | ## Community 100 | 101 | - [Chinese] QQ群: 319248144 102 | - [English] Comming Soon... 103 | -------------------------------------------------------------------------------- /dist/modpath.iss: -------------------------------------------------------------------------------- 1 | // ---------------------------------------------------------------------------- 2 | // 3 | // Inno Setup Ver: 5.4.2 4 | // Script Version: 1.4.2 5 | // Author: Jared Breland 6 | // Homepage: http://www.legroom.net/software 7 | // License: GNU Lesser General Public License (LGPL), version 3 8 | // http://www.gnu.org/licenses/lgpl.html 9 | // 10 | // Script Function: 11 | // Allow modification of environmental path directly from Inno Setup installers 12 | // 13 | // Instructions: 14 | // Copy modpath.iss to the same directory as your setup script 15 | // 16 | // Add this statement to your [Setup] section 17 | // ChangesEnvironment=true 18 | // 19 | // Add this statement to your [Tasks] section 20 | // You can change the Description or Flags 21 | // You can change the Name, but it must match the ModPathName setting below 22 | // Name: modifypath; Description: &Add application directory to your environmental path; Flags: unchecked 23 | // 24 | // Add the following to the end of your [Code] section 25 | // ModPathName defines the name of the task defined above 26 | // ModPathType defines whether the 'user' or 'system' path will be modified; 27 | // this will default to user if anything other than system is set 28 | // setArrayLength must specify the total number of dirs to be added 29 | // Result[0] contains first directory, Result[1] contains second, etc. 30 | // const 31 | // ModPathName = 'modifypath'; 32 | // ModPathType = 'user'; 33 | // 34 | // function ModPathDir(): TArrayOfString; 35 | // begin 36 | // setArrayLength(Result, 1); 37 | // Result[0] := ExpandConstant('{app}'); 38 | // end; 39 | // #include "modpath.iss" 40 | // ---------------------------------------------------------------------------- 41 | 42 | procedure ModPath(); 43 | var 44 | oldpath: String; 45 | newpath: String; 46 | updatepath: Boolean; 47 | pathArr: TArrayOfString; 48 | aExecFile: String; 49 | aExecArr: TArrayOfString; 50 | i, d: Integer; 51 | pathdir: TArrayOfString; 52 | regroot: Integer; 53 | regpath: String; 54 | 55 | begin 56 | // Get constants from main script and adjust behavior accordingly 57 | // ModPathType MUST be 'system' or 'user'; force 'user' if invalid 58 | if ModPathType = 'system' then begin 59 | regroot := HKEY_LOCAL_MACHINE; 60 | regpath := 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment'; 61 | end else begin 62 | regroot := HKEY_CURRENT_USER; 63 | regpath := 'Environment'; 64 | end; 65 | 66 | // Get array of new directories and act on each individually 67 | pathdir := ModPathDir(); 68 | for d := 0 to GetArrayLength(pathdir)-1 do begin 69 | updatepath := true; 70 | 71 | // Modify WinNT path 72 | if UsingWinNT() = true then begin 73 | 74 | // Get current path, split into an array 75 | RegQueryStringValue(regroot, regpath, 'Path', oldpath); 76 | oldpath := oldpath + ';'; 77 | i := 0; 78 | 79 | while (Pos(';', oldpath) > 0) do begin 80 | SetArrayLength(pathArr, i+1); 81 | pathArr[i] := Copy(oldpath, 0, Pos(';', oldpath)-1); 82 | oldpath := Copy(oldpath, Pos(';', oldpath)+1, Length(oldpath)); 83 | i := i + 1; 84 | 85 | // Check if current directory matches app dir 86 | if pathdir[d] = pathArr[i-1] then begin 87 | // if uninstalling, remove dir from path 88 | if IsUninstaller() = true then begin 89 | continue; 90 | // if installing, flag that dir already exists in path 91 | end else begin 92 | updatepath := false; 93 | end; 94 | end; 95 | 96 | // Add current directory to new path 97 | if i = 1 then begin 98 | newpath := pathArr[i-1]; 99 | end else begin 100 | newpath := newpath + ';' + pathArr[i-1]; 101 | end; 102 | end; 103 | 104 | // Append app dir to path if not already included 105 | if (IsUninstaller() = false) AND (updatepath = true) then 106 | newpath := newpath + ';' + pathdir[d]; 107 | 108 | // Write new path 109 | RegWriteStringValue(regroot, regpath, 'Path', newpath); 110 | 111 | // Modify Win9x path 112 | end else begin 113 | 114 | // Convert to shortened dirname 115 | pathdir[d] := GetShortName(pathdir[d]); 116 | 117 | // If autoexec.bat exists, check if app dir already exists in path 118 | aExecFile := 'C:\AUTOEXEC.BAT'; 119 | if FileExists(aExecFile) then begin 120 | LoadStringsFromFile(aExecFile, aExecArr); 121 | for i := 0 to GetArrayLength(aExecArr)-1 do begin 122 | if IsUninstaller() = false then begin 123 | // If app dir already exists while installing, skip add 124 | if (Pos(pathdir[d], aExecArr[i]) > 0) then 125 | updatepath := false; 126 | break; 127 | end else begin 128 | // If app dir exists and = what we originally set, then delete at uninstall 129 | if aExecArr[i] = 'SET PATH=%PATH%;' + pathdir[d] then 130 | aExecArr[i] := ''; 131 | end; 132 | end; 133 | end; 134 | 135 | // If app dir not found, or autoexec.bat didn't exist, then (create and) append to current path 136 | if (IsUninstaller() = false) AND (updatepath = true) then begin 137 | SaveStringToFile(aExecFile, #13#10 + 'SET PATH=%PATH%;' + pathdir[d], True); 138 | 139 | // If uninstalling, write the full autoexec out 140 | end else begin 141 | SaveStringsToFile(aExecFile, aExecArr, False); 142 | end; 143 | end; 144 | end; 145 | end; 146 | 147 | // Split a string into an array using passed delimeter 148 | procedure MPExplode(var Dest: TArrayOfString; Text: String; Separator: String); 149 | var 150 | i: Integer; 151 | begin 152 | i := 0; 153 | repeat 154 | SetArrayLength(Dest, i+1); 155 | if Pos(Separator,Text) > 0 then begin 156 | Dest[i] := Copy(Text, 1, Pos(Separator, Text)-1); 157 | Text := Copy(Text, Pos(Separator,Text) + Length(Separator), Length(Text)); 158 | i := i + 1; 159 | end else begin 160 | Dest[i] := Text; 161 | Text := ''; 162 | end; 163 | until Length(Text)=0; 164 | end; 165 | 166 | 167 | procedure CurStepChanged(CurStep: TSetupStep); 168 | var 169 | taskname: String; 170 | begin 171 | taskname := ModPathName; 172 | if CurStep = ssPostInstall then 173 | if IsTaskSelected(taskname) then 174 | ModPath(); 175 | end; 176 | 177 | procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); 178 | var 179 | aSelectedTasks: TArrayOfString; 180 | i: Integer; 181 | taskname: String; 182 | regpath: String; 183 | regstring: String; 184 | appid: String; 185 | begin 186 | // only run during actual uninstall 187 | if CurUninstallStep = usUninstall then begin 188 | // get list of selected tasks saved in registry at install time 189 | appid := '{#emit SetupSetting("AppId")}'; 190 | if appid = '' then appid := '{#emit SetupSetting("AppName")}'; 191 | regpath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+appid+'_is1'); 192 | RegQueryStringValue(HKLM, regpath, 'Inno Setup: Selected Tasks', regstring); 193 | if regstring = '' then RegQueryStringValue(HKCU, regpath, 'Inno Setup: Selected Tasks', regstring); 194 | 195 | // check each task; if matches modpath taskname, trigger patch removal 196 | if regstring <> '' then begin 197 | taskname := ModPathName; 198 | MPExplode(aSelectedTasks, regstring, ','); 199 | if GetArrayLength(aSelectedTasks) > 0 then begin 200 | for i := 0 to GetArrayLength(aSelectedTasks)-1 do begin 201 | if comparetext(aSelectedTasks[i], taskname) = 0 then 202 | ModPath(); 203 | end; 204 | end; 205 | end; 206 | end; 207 | end; 208 | 209 | function NeedRestart(): Boolean; 210 | var 211 | taskname: String; 212 | begin 213 | taskname := ModPathName; 214 | if IsTaskSelected(taskname) and not UsingWinNT() then begin 215 | Result := True; 216 | end else begin 217 | Result := False; 218 | end; 219 | end; 220 | -------------------------------------------------------------------------------- /.vimrc.plugins: -------------------------------------------------------------------------------- 1 | " Pathogen or Vundle (deafult is Vundle) {{{ 2 | 3 | " Comment-out if you want to use pahogen 4 | " execute pathogen#infect() 5 | " com! -nargs=+ Bundle 6 | 7 | " man.vim: invoked by :Man {name} 8 | source $VIMRUNTIME/ftplugin/man.vim 9 | 10 | " let Vundle manage Vundle, required 11 | " --------------------------------------------------- 12 | Plugin 'gmarik/Vundle.vim' 13 | 14 | "}}} 15 | 16 | " general plugins {{{ 17 | 18 | " ex-config: 19 | " --------------------------------------------------- 20 | Plugin 'exvim/ex-config' 21 | nnoremap ve :call exconfig#edit_cur_vimentry () 22 | 23 | " ex-utility: 24 | " --------------------------------------------------- 25 | Plugin 'exvim/ex-utility' 26 | 27 | nnoremap bd :EXbd 28 | nnoremap :EXbn 29 | nnoremap :EXbp 30 | nnoremap :EXbalt 31 | nnoremap :EXsw 32 | nmap :EXgp 33 | 34 | " ex-aftercolor 35 | " --------------------------------------------------- 36 | Plugin 'exvim/ex-aftercolors' 37 | 38 | " ex-vimentry 39 | " --------------------------------------------------- 40 | Plugin 'exvim/ex-vimentry' 41 | 42 | " ex-project 43 | " --------------------------------------------------- 44 | Plugin 'exvim/ex-project' 45 | 46 | " ex-gsearch 47 | " --------------------------------------------------- 48 | Plugin 'exvim/ex-gsearch' 49 | 50 | call exgsearch#register_hotkey( 100, 0, 'gs', ":EXGSearchToggle", 'Toggle global search window.' ) 51 | call exgsearch#register_hotkey( 101, 0, 'gg', ":EXGSearchCWord", 'Search current word.' ) 52 | call exgsearch#register_hotkey( 102, 0, '', ":GS ", 'Shortcut for :GS' ) 53 | 54 | " ex-tagselect 55 | " --------------------------------------------------- 56 | Plugin 'exvim/ex-tags' 57 | 58 | call extags#register_hotkey( 100, 0, 'ts', ":EXTagsToggle", 'Toggle tag select window.' ) 59 | call extags#register_hotkey( 101, 0, ']', ":EXTagsCWord", 'Tag select current word.' ) 60 | " DISABLE: nnoremap ] :exec 'ts ' . expand('') 61 | 62 | " ex-symbol 63 | " --------------------------------------------------- 64 | Plugin 'exvim/ex-symbol' 65 | 66 | call exsymbol#register_hotkey( 100, 0, 'ss', ":EXSymbolList", 'List all symbols.' ) 67 | call exsymbol#register_hotkey( 101, 0, 'sq', ":EXSymbolOpen", 'Open symbols window.' ) 68 | call exsymbol#register_hotkey( 102, 0, 'sg', ":EXSymbolCWord", 'List symbols contains current word.' ) 69 | 70 | if has('gui_running') 71 | if has ('mac') 72 | call exsymbol#register_hotkey( 102, 0, 'Ò', ":EXSymbolList:redraw/", 'List all symbols and stay in search mode.' ) 73 | else 74 | call exsymbol#register_hotkey( 102, 0, '', ":EXSymbolList:redraw/", 'List all symbols and stay in search mode.' ) 75 | endif 76 | endif 77 | let g:ex_symbol_select_cmd = 'TS' 78 | 79 | " ex-cscope 80 | " --------------------------------------------------- 81 | Plugin 'exvim/ex-cscope' 82 | 83 | call excscope#register_hotkey( 100, 0, 'cd', ":EXCSToggle", 'Toggle cscope window.' ) 84 | 85 | " ex-qfix 86 | " --------------------------------------------------- 87 | Plugin 'exvim/ex-qfix' 88 | 89 | call exqfix#register_hotkey( 100, 0, 'qf', ":EXQFixToggle", 'Toggle quickfix window.' ) 90 | call exqfix#register_hotkey( 101, 0, 'qq', ":EXQFixPaste", 'Open quickfix window and paste error list from register *.' ) 91 | 92 | " ex-hierarchy 93 | " --------------------------------------------------- 94 | Plugin 'exvim/ex-hierarchy' 95 | 96 | nnoremap hv :EXHierarchyCWord 97 | 98 | " ex-taglist: invoke by 99 | " --------------------------------------------------- 100 | Plugin 'exvim/ex-taglist' 101 | 102 | " F4: Switch on/off TagList 103 | nnoremap :TlistToggle 104 | 105 | "let Tlist_Ctags_Cmd = $VIM.'/vimfiles/ctags.exe' " location of ctags tool 106 | let Tlist_Show_One_File = 1 " Displaying tags for only one file~ 107 | let Tlist_Exist_OnlyWindow = 1 " if you are the last, kill yourself 108 | let Tlist_Use_Right_Window = 1 " split to the right side of the screen 109 | let Tlist_Sort_Type = "order" " sort by order or name 110 | let Tlist_Display_Prototype = 0 " do not show prototypes and not tags in the taglist window. 111 | let Tlist_Compart_Format = 1 " Remove extra information and blank lines from the taglist window. 112 | let Tlist_GainFocus_On_ToggleOpen = 1 " Jump to taglist window on open. 113 | let Tlist_Display_Tag_Scope = 1 " Show tag scope next to the tag name. 114 | let Tlist_Close_On_Select = 0 " Close the taglist window when a file or tag is selected. 115 | let Tlist_BackToEditBuffer = 0 " If no close on select, let the user choose back to edit buffer or not 116 | let Tlist_Enable_Fold_Column = 0 " Don't Show the fold indicator column in the taglist window. 117 | let Tlist_WinWidth = 40 118 | let Tlist_Compact_Format = 1 " do not show help 119 | " let Tlist_Ctags_Cmd = 'ctags --c++-kinds=+p --fields=+iaS --extra=+q --languages=c++' 120 | " very slow, so I disable this 121 | " let Tlist_Process_File_Always = 1 " To use the :TlistShowTag and the :TlistShowPrototype commands without the taglist window and the taglist menu, you should set this variable to 1. 122 | ":TlistShowPrototype [filename] [linenumber] 123 | 124 | " add javascript language 125 | let tlist_javascript_settings = 'javascript;v:global variable:0:0;c:class;p:property;m:method;f:function;r:object' 126 | " add hlsl shader language 127 | let tlist_hlsl_settings = 'c;d:macro;g:enum;s:struct;u:union;t:typedef;v:variable;f:function' 128 | " add actionscript language 129 | let tlist_actionscript_settings = 'actionscript;c:class;f:method;p:property;v:variable' 130 | 131 | " DISABLE: use tlist instead 132 | " " exvim/ex-tagbar: invoke by 133 | " " --------------------------------------------------- 134 | " Plugin 'exvim/ex-tagbar' 135 | 136 | " nnoremap :TagbarToggle 137 | 138 | " let g:tagbar_sort = 0 139 | " let g:tagbar_map_preview = '' 140 | " if has('gui_running') 141 | " let g:tagbar_map_close = '' 142 | " else 143 | " let g:tagbar_map_close = '' 144 | " endif 145 | " let g:tagbar_map_zoomwin = '' 146 | " let g:tagbar_zoomwidth = 80 147 | " let g:tagbar_autofocus = 1 148 | " let g:tagbar_iconchars = ['+', '-'] 149 | 150 | " " use command ':TagbarGetTypeConfig lang' change your settings 151 | " let g:tagbar_type_javascript = { 152 | " \ 'ctagsbin': 'ctags', 153 | " \ 'kinds' : [ 154 | " \ 'v:global variables:0:0', 155 | " \ 'c:classes', 156 | " \ 'p:properties:0:0', 157 | " \ 'm:methods', 158 | " \ 'f:functions', 159 | " \ 'r:object', 160 | " \ ], 161 | " \ } 162 | " let g:tagbar_type_c = { 163 | " \ 'kinds' : [ 164 | " \ 'd:macros:0:0', 165 | " \ 'p:prototypes:0:0', 166 | " \ 'g:enums', 167 | " \ 'e:enumerators:0:0', 168 | " \ 't:typedefs:0:0', 169 | " \ 's:structs', 170 | " \ 'u:unions', 171 | " \ 'm:members:0:0', 172 | " \ 'v:variables:0:0', 173 | " \ 'f:functions', 174 | " \ ], 175 | " \ } 176 | " let g:tagbar_type_cpp = { 177 | " \ 'kinds' : [ 178 | " \ 'd:macros:0:0', 179 | " \ 'p:prototypes:0:0', 180 | " \ 'g:enums', 181 | " \ 'e:enumerators:0:0', 182 | " \ 't:typedefs:0:0', 183 | " \ 'n:namespaces', 184 | " \ 'c:classes', 185 | " \ 's:structs', 186 | " \ 'u:unions', 187 | " \ 'f:functions', 188 | " \ 'm:members:0:0', 189 | " \ 'v:variables:0:0', 190 | " \ ], 191 | " \ } 192 | 193 | " DISABLE: minibufexpl makes Vim editing slow when there are too many buffers opened 194 | " if you don't mind, and love this plugin, uncomment the script below 195 | " to enable it 196 | " ex-minibufexpl 197 | " --------------------------------------------------- 198 | " Plugin 'exvim/ex-minibufexpl' 199 | " let g:miniBufExplBuffersNeeded = 0 200 | " let g:miniBufExplUseSingleClick = 1 " If you would like to single click on tabs rather than double clicking on them to goto the selected buffer. 201 | " let g:miniBufExplMaxSize = 1 " setting this to 0 will mean the window gets as big as needed to fit all your buffers. 202 | " let g:miniBufExplTabWrap = 1 203 | " " let g:miniBufExplDebugMode = 3 204 | " " let g:miniBufExplDebugLevel = 0 205 | 206 | " ex-autocomplpop: invoke when you input text 207 | " --------------------------------------------------- 208 | Plugin 'exvim/ex-autocomplpop' 209 | 210 | " ex-showmarks: invoke by m... or mm, ma 211 | " --------------------------------------------------- 212 | Plugin 'exvim/ex-showmarks' 213 | 214 | " TODO: bootleq/ShowMarks on github is well organized in code, but have lots 215 | " bugs, consider merge his code and fixes the bugs 216 | let g:showmarks_enable = 1 217 | let g:showmarks_include = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 218 | let g:showmarks_ignore_type = 'hqm' " Ignore help, quickfix, non-modifiable buffers 219 | " Hilight lower & upper marks 220 | let g:showmarks_hlline_lower = 1 221 | let g:showmarks_hlline_upper = 0 222 | 223 | " ex-visincr: invoke when select text and type ':II' 224 | " --------------------------------------------------- 225 | Plugin 'exvim/ex-visincr' 226 | 227 | " ex-matchit: invoke by % 228 | " --------------------------------------------------- 229 | Plugin 'exvim/ex-matchit' 230 | 231 | " ex-easyhl: 232 | " --------------------------------------------------- 233 | Plugin 'exvim/ex-easyhl' 234 | 235 | " searchcompl: invoke by / 236 | " --------------------------------------------------- 237 | Plugin 'exvim/ex-searchcompl' 238 | 239 | " ex-colorschemes 240 | " --------------------------------------------------- 241 | Plugin 'exvim/ex-colorschemes' 242 | 243 | " vim-color-solarized 244 | " --------------------------------------------------- 245 | Plugin 'altercation/vim-colors-solarized' 246 | 247 | " vim-color-gruvbox 248 | " --------------------------------------------------- 249 | Plugin 'morhetz/gruvbox' 250 | 251 | " let g:gruvbox_contrast_dark = 'soft' 252 | 253 | " DISABLE: vim-airline makes Vim editing slow when there are too many buffers opened 254 | " if you don't mind, and love this plugin, uncomment the script below 255 | " to enable it 256 | " vim-airline 257 | " --------------------------------------------------- 258 | " Plugin 'bling/vim-airline' 259 | 260 | " if has('gui_running') 261 | " let g:airline_powerline_fonts = 1 262 | " else 263 | " let g:airline_powerline_fonts = 0 264 | " endif 265 | 266 | " let g:airline#extensions#tabline#enabled = 0 " NOTE: When you open lots of buffers and typing text, it is so slow. 267 | " let g:airline#extensions#tabline#show_buffers = 1 268 | " let g:airline#extensions#tabline#buffer_nr_show = 1 269 | " let g:airline#extensions#tabline#fnamemod = ':t' 270 | " " let g:airline_section_b = "%{fnamemodify(bufname('%'),':p:.:h').'/'}" 271 | " " let g:airline_section_c = '%t' 272 | " " let g:airline_section_warning = airline#section#create(['whitespace']) " NOTE: airline#section#create has no effect in .vimrc initialize pahse 273 | " " let g:airline_section_warning = '%{airline#util#wrap(airline#extensions#whitespace#check(),0)}' 274 | " let g:airline_section_warning = '' 275 | 276 | " ctrlp: invoke by 277 | Plugin 'kien/ctrlp.vim' 278 | let g:ctrlp_working_path_mode = '' 279 | let g:ctrlp_match_window = 'bottom,order:ttb,min:1,max:10,results:10' 280 | let g:ctrlp_follow_symlinks = 2 281 | let g:ctrlp_max_files = 0 " Unset cap of 10,000 files so we find everything 282 | nnoremap bs :CtrlPBuffer 283 | 284 | " vim-fugitive: invoke most by :Gdiff 285 | " --------------------------------------------------- 286 | Plugin 'tpope/vim-fugitive' 287 | 288 | " vim-surround: invoke when you select words and press 's' 289 | " --------------------------------------------------- 290 | Plugin 'tpope/vim-surround' 291 | 292 | xmap s VSurround 293 | 294 | " DISABLE 295 | " " Plugin 'tpope/vim-dispatch' 296 | " " --------------------------------------------------- 297 | 298 | " nerdtree: invoke by :NERDTreeToggle 299 | " --------------------------------------------------- 300 | Plugin 'scrooloose/nerdtree' 301 | 302 | let g:NERDTreeWinSize = 30 303 | let g:NERDTreeMouseMode = 1 304 | let g:NERDTreeMapToggleZoom = '' 305 | 306 | " nerdcommenter: invoke by c, cl, cu, or 307 | " --------------------------------------------------- 308 | Plugin 'scrooloose/nerdcommenter' 309 | 310 | let g:NERDSpaceDelims = 1 311 | let g:NERDRemoveExtraSpaces = 1 312 | let g:NERDCustomDelimiters = { 313 | \ 'vimentry': { 'left': '--' }, 314 | \ } 315 | map NERDCommenterAlignBoth 316 | map NERDCommenterUncomment 317 | 318 | " syntastic: invoke when you save file and have syntac-checker 319 | " --------------------------------------------------- 320 | Plugin 'scrooloose/syntastic' 321 | 322 | " this will make html file by Angular.js ignore errors 323 | let g:syntastic_html_tidy_ignore_errors=[" proprietary attribute \"ng-"] 324 | let g:syntastic_javascript_checkers = ['eslint'] 325 | 326 | " DISABLE: use ex-autocomplpop instead 327 | " " neocomplcache: invoke when you insert words 328 | " Plugin 'Shougo/neocomplcache.vim' 329 | " " --------------------------------------------------- 330 | 331 | " let g:neocomplcache_enable_at_startup = 1 332 | " let g:neocomplcache_auto_completion_start_length = 2 333 | " let g:neocomplcache_enable_smart_case = 1 334 | " let g:neocomplcache_enable_auto_select = 1 " let neocomplcache's completion behavior like AutoComplPop 335 | " " let g:neocomplcache_disable_auto_complete = 1 " Enable this if you like TAB for complete 336 | " " inoremap 337 | " " inoremap pumvisible() ? '\' : '' 338 | " " inoremap pumvisible() ? '\' : '' 339 | 340 | " DISABLE: use ex-autocomplpop instead 341 | " " neocomplete: invoke when you insert words 342 | " Plugin 'Shougo/neocomplete.vim' 343 | " " --------------------------------------------------- 344 | 345 | " let g:neocomplete#enable_at_startup = 1 346 | " let g:neocomplete#enable_smart_case = 1 347 | " let g:neocomplete#enable_auto_select = 1 " let neocomplete's completion behavior like AutoComplPop 348 | " " Enable omni completion. 349 | " autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS 350 | " autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags 351 | " autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS 352 | " autocmd FileType python setlocal omnifunc=pythoncomplete#Complete 353 | " autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags 354 | 355 | " DISABLE: use ex-autocomplpop instead 356 | " " YouCompleteMe 357 | " Plugin 'Valloric/YouCompleteMe' 358 | " " --------------------------------------------------- 359 | 360 | " TODO: choose a snippet plugin 361 | " Plugin 'Shougo/neosnippet.vim' 362 | " " --------------------------------------------------- 363 | 364 | " Plugin 'msanders/snipmate.vim' 365 | " " --------------------------------------------------- 366 | 367 | " Plugin 'spf13/snipmate-snippets' 368 | " " --------------------------------------------------- 369 | 370 | " undotree: invoke by u 371 | " --------------------------------------------------- 372 | Plugin 'mbbill/undotree' 373 | 374 | nnoremap u :UndotreeToggle 375 | let g:undotree_SetFocusWhenToggle=1 376 | let g:undotree_WindowLayout = 4 377 | 378 | " NOTE: this will prevent undotree closed then jump to minibufexpl 379 | function! g:CloseUndotree() 380 | call UndotreeHide() 381 | call ex#window#goto_edit_window() 382 | endfunction 383 | 384 | function g:Undotree_CustomMap() 385 | if has('gui_running') 386 | nnoremap