diff --git a/.gitignore b/.gitignore
index 8bff474..81f9343 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,15 +10,15 @@
 # We do need src/auto/configure.
 src/auto/config.aap
 src/auto/config.cache
-src/auto/config.h
+# src/auto/config.h
 src/auto/config.log
-src/auto/config.mk
+# src/auto/config.mk
 src/auto/config.status
 src/auto/configure.aap
-src/auto/osdef.h
+# src/auto/osdef.h
 src/auto/link.log
 src/auto/link.sed
-src/auto/pathdef.c
+# src/auto/pathdef.c
 
 # Windows
 *.exe
diff --git a/Android.mk b/Android.mk
new file mode 100644
index 0000000..4bb58e0
--- /dev/null
+++ b/Android.mk
@@ -0,0 +1,211 @@
+
+vim_src := $(call my-dir)
+
+# ========================================================
+# etc/vimrc
+# ========================================================
+
+LOCAL_PATH := $(vim_src)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := vimrc
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_CLASS := ETC
+
+LOCAL_SRC_FILES := vimrc.android
+
+include $(BUILD_PREBUILT)
+
+# ========================================================
+# vim
+# ========================================================
+
+LOCAL_PATH := $(vim_src)/src
+include $(CLEAR_VARS)
+
+# vim variants: TINY SMALL CM NORMAL BIG HUGE
+#
+# NORMAL, BIG and HUGE are almost the same (1.1M)
+# TINY and SMALL are similar to busybox vi (460K)
+#
+# CM profile is between SMALL and NORMAL (780K)
+# with syntax and utf8 (mbyte) support
+#
+vim_variant := CM
+
+LOCAL_SRC_FILES := \
+	auto/pathdef.c \
+	blowfish.c \
+	buffer.c \
+	channel.c \
+	charset.c \
+	dict.c \
+	diff.c \
+	digraph.c \
+	edit.c \
+	eval.c \
+	evalfunc.c \
+	ex_cmds.c \
+	ex_cmds2.c \
+	ex_docmd.c \
+	ex_eval.c \
+	ex_getln.c \
+	fileio.c \
+	fold.c \
+	getchar.c \
+	hardcopy.c \
+	hashtab.c \
+	if_cscope.c \
+	if_xcmdsrv.c \
+	json.c \
+	list.c \
+	main.c \
+	mark.c \
+	mbyte.c \
+	memfile.c \
+	memline.c \
+	menu.c \
+	message.c \
+	misc1.c \
+	misc2.c \
+	move.c \
+	normal.c \
+	ops.c \
+	option.c \
+	os_unix.c \
+	popupmnu.c \
+	quickfix.c \
+	regexp.c \
+	screen.c \
+	search.c \
+	sha256.c \
+	spell.c \
+	syntax.c \
+	tag.c \
+	term.c \
+	ui.c \
+	undo.c \
+	userfunc.c \
+	version.c \
+	window.c
+
+# to reduce vim size, manually define wanted features
+ifeq ($(vim_variant),CM)
+    LOCAL_CFLAGS += -DFEAT_SMALL=1 -DFEAT_MBYTE=1 \
+	-DFEAT_SYN_HL=1 -DFEAT_CINDENT=1 -DFEAT_COMMENTS=1 -DFEAT_EVAL=1 -DFEAT_AUTOCMD=1 \
+	-DFEAT_USR_CMDS=1 -DFEAT_EX_EXTRA=1 -DFEAT_CMDL_COMPL=1 \
+	-DFEAT_LISTCMDS=1 -DFEAT_CMDL_INFO=1 -DFEAT_SEARCH_EXTRA=1
+ifeq ($(TARGET_IS_64_BIT), true)
+    LOCAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+endif
+endif
+
+LOCAL_C_INCLUDES += \
+	external/libselinux/include \
+	external/libncurses/include \
+	$(LOCAL_PATH)/proto \
+	$(LOCAL_PATH)/auto
+
+LOCAL_SHARED_LIBRARIES += \
+	libselinux \
+	libncurses \
+	libm \
+	libdl
+
+LOCAL_CFLAGS += \
+	-DFEAT_$(vim_variant)=1 \
+	-DHAVE_CONFIG_H \
+	-DSYS_VIMRC_FILE=\"/system/etc/vimrc\"
+
+LOCAL_MODULE := vim
+LOCAL_MODULE_TAGS := eng
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+LOCAL_REQUIRED_MODULES := vimrc
+include $(BUILD_EXECUTABLE)
+
+# ========================================================
+# vim runtime files
+# ========================================================
+ifeq (vim,$(filter vim, $(ALL_MODULES)))
+
+vim_runtime_path := $(vim_src)/runtime
+
+vim_runtime_files := \
+	scripts.vim \
+	indent.vim \
+	indoff.vim \
+	filetype.vim \
+	ftoff.vim
+
+vim_doc_files := \
+	help.txt intro.txt tags \
+	motion.txt editing.txt scroll.txt \
+	options.txt term.txt
+
+vim_colors_files := \
+	default.vim \
+	desert.vim
+
+vim_syntax_files := \
+	logcat.vim \
+	awk.vim \
+	config.vim \
+	conf.vim \
+	cpp.vim \
+	c.vim \
+	css.vim \
+	diff.vim \
+	doxygen.vim \
+	html.vim vb.vim \
+	xml.vim dtd.vim \
+	context.vim \
+	gitcommit.vim \
+	help.vim \
+	javascript.vim \
+	java.vim \
+	lua.vim \
+	manual.vim \
+	markdown.vim \
+	pod.vim \
+	sh.vim \
+	syncolor.vim \
+	synload.vim \
+	syntax.vim \
+	vim.vim
+
+vim_plugin_files := \
+	matchparen.vim \
+
+vim_autoload_files := \
+	spacehi.vim
+
+VIM_SHARED := $(TARGET_OUT)/usr/share/vim
+
+vim_runtime_files := \
+  $(vim_runtime_files) \
+  $(addprefix doc/, $(vim_doc_files)) \
+  $(addprefix colors/, $(vim_colors_files)) \
+  $(addprefix syntax/, $(vim_syntax_files)) \
+  $(addprefix plugin/, $(vim_plugin_files)) \
+  $(addprefix autoload/, $(vim_autoload_files)) \
+
+$(vim_runtime_files): $(LOCAL_BUILT_MODULE)
+	@echo "Install: $(VIM_SHARED)/$@"
+	@mkdir -p $(dir $(VIM_SHARED)/$@)
+	$(hide) cp $(vim_runtime_path)/$@ $(VIM_SHARED)/$@
+
+ALL_DEFAULT_INSTALLED_MODULES += $(vim_runtime_files)
+
+ALL_MODULES.$(LOCAL_MODULE).INSTALLED := \
+  $(ALL_MODULES.$(LOCAL_MODULE).INSTALLED) \
+  $(addprefix $(VIM_SHARED)/, $(vim_runtime_files))
+
+ifneq ($(filter B wB,$(MAKEFLAGS)),)
+# Allow to push runtime files with 'mmp -B'
+vim: $(vim_runtime_files)
+	@echo "Forced install of runtime files..."
+endif
+
+endif
+
+include $(vim_src)/src/xxd/Android.mk
diff --git a/runtime/autoload/spacehi.vim b/runtime/autoload/spacehi.vim
new file mode 100644
index 0000000..31a72de
--- /dev/null
+++ b/runtime/autoload/spacehi.vim
@@ -0,0 +1,117 @@
+" vim600: set foldmethod=marker:
+"
+" Version:      1.4
+" Description:  Per buffer, togglable syntax highlighting of tabs and trailing
+"               spaces. 	 	 	 	 	 	 
+" Author:       Adam Lazur <adam@lazur.org>, extended by Jonathan Palardy
+" URL:          https://github.com/jpalardy/spacehi.vim
+" License:      Redistribution and use of this file, with or without
+"               modification, are permitted without restriction.
+"
+" Section: Documentation {{{1
+"
+" This plugin will highlight tabs, nbsps and trailing spaces on a line, with the
+" ability to toggle the highlighting on and off. Using highlighting to
+" illuminate these characters is preferrable to using listchars and set list
+" because it allows you to copy from the vim window without getting shrapnel
+" in your buffer.
+"
+" NOTE: "set list" will override SpaceHi's highlighting.
+"
+" Highlighting can be turned on and off with the functions SpaceHi() and
+" NoSpaceHi() respectively. You can also toggle the highlighting state by
+" using ToggleSpaceHi(). By default, ToggleSpaceHi is bound to the key F3.
+"
+" You can customize the colors by setting the following variables to a string
+" of key=val that would normally follow "highlight group" command:
+"
+"       g:spacehi_spacecolor
+"       g:spacehi_tabcolor
+"       g:spacehi_nbspcolor
+"
+" The defaults can be found in the "Default Global Vars" section below.
+"
+" You can give a list of filetypes to exclude 
+"
+" If you want to highlight tabs and trailing spaces by default for every file
+" that is syntax highlighted, you can add the following to your vimrc:
+"
+"       autocmd syntax * SpaceHi
+"
+" The author currently uses the following (a little overboard) in his vimrc:
+"
+"   autocmd BufNewFile,BufReadPost,FilterReadPost,FileReadPost,Syntax * SpaceHi
+"   au FileType help NoSpaceHi
+
+" Section: Plugin header {{{1
+" If we have already loaded this file, don't load it again.
+if exists("loaded_spacehi")
+    finish
+endif
+let loaded_spacehi=1
+
+" Section: Default Global Vars {{{1
+if !exists("g:spacehi_tabcolor")
+    " highlight tabs with red underline
+    let g:spacehi_tabcolor="ctermfg=White ctermbg=Red guifg=White guibg=Red"
+endif
+if !exists("g:spacehi_spacecolor")
+    " highlight trailing spaces in blue underline
+    let g:spacehi_spacecolor="ctermfg=Black ctermbg=Yellow guifg=Blue guibg=Yellow"
+endif
+if !exists("g:spacehi_nbspcolor")
+    " highlight nbsps with red underline
+    let g:spacehi_nbspcolor="ctermfg=White ctermbg=Red guifg=White guibg=Red"
+endif
+
+" Section: Functions {{{1
+" Function: s:SpaceHi() {{{2
+" Turn on highlighting of spaces and tabs
+function! s:SpaceHi()
+    " highlight tabs
+    syntax match spacehiTab /\t/ containedin=ALL
+    execute("highlight spacehiTab " . g:spacehi_tabcolor)
+
+    " highlight trailing spaces
+    syntax match spacehiTrailingSpace /\s\+$/ containedin=ALL
+    execute("highlight spacehiTrailingSpace " . g:spacehi_spacecolor)
+
+    " highlight nbsps
+    syntax match spacehiNbsp /\%d160/ containedin=ALL
+    execute("highlight spacehiNbsp " . g:spacehi_nbspcolor)
+
+    let b:spacehi = 1
+endfunction
+
+" Function: s:NoSpaceHi() {{{2
+" Turn off highlighting of spaces and tabs
+function! s:NoSpaceHi()
+    syntax clear spacehiTab
+    syntax clear spacehiTrailingSpace
+    syntax clear spacehiNbsp
+    let b:spacehi = 0
+endfunction
+
+" Function: s:ToggleSpaceHi() {{{2
+" Toggle highlighting of spaces and tabs
+function! s:ToggleSpaceHi()
+    if exists("b:spacehi") && b:spacehi
+        call s:NoSpaceHi()
+        echo "spacehi off"
+    else
+        call s:SpaceHi()
+        echo "spacehi on"
+    endif
+endfunction
+
+" Section: Commands {{{1
+com! SpaceHi call s:SpaceHi()
+com! NoSpaceHi call s:NoSpaceHi()
+com! ToggleSpaceHi call s:ToggleSpaceHi()
+
+" Section: Default mappings {{{1
+" Only insert a map to ToggleSpaceHi if they don't already have a map to
+" the function and don't have something bound to F3
+if !hasmapto('ToggleSpaceHi') && maparg("<F3>") == ""
+  map <silent> <unique> <F3> :ToggleSpaceHi<CR>
+endif
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
index 2763828..8337276 100644
--- a/runtime/scripts.vim
+++ b/runtime/scripts.vim
@@ -336,6 +336,10 @@
   elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
     set ft=git
 
+  " Logcat
+  elseif s:line1 == '--------- beginning of '
+    set ft=logcat
+
    " Gprof (gnu profiler)
    elseif s:line1 == 'Flat profile:'
      \ && s:line2 == ''
diff --git a/runtime/syntax/logcat.vim b/runtime/syntax/logcat.vim
new file mode 100644
index 0000000..595d0a2
--- /dev/null
+++ b/runtime/syntax/logcat.vim
@@ -0,0 +1,31 @@
+" Vim syntax file
+" Language:         logcat
+" Maintainer:       Naseer Ahmed <naseer.ahmed@gmail.com>
+" Latest Revision:  2014-07-06 <tpruvot@github>
+
+if exists("b:current_syntax")
+    finish
+endif
+
+" Define colors
+hi def LogF_color ctermfg=white guifg=white ctermbg=red guibg=red
+hi def LogE_color ctermfg=red guifg=red
+hi def LogW_color ctermfg=brown guifg=brown
+hi def LogI_color ctermfg=darkgreen guifg=darkgreen
+hi def LogD_color ctermfg=blue guifg=blue
+hi def LogV_color ctermfg=gray guifg=gray
+
+syn match LogF 'F/.*' 
+syn match LogE 'E/.*' 
+syn match LogW 'W/.*' 
+syn match LogI 'I/.*' 
+syn match LogD 'D/.*' 
+syn match LogV 'V/.*' 
+
+hi def link LogF LogF_color
+hi def link LogE LogE_color
+hi def link LogW LogW_color
+hi def link LogI LogI_color
+hi def link LogD LogD_color
+hi def link LogV LogV_color
+
diff --git a/runtime/syntax/xml.vim b/runtime/syntax/xml.vim
index 7b503ab..2fd5e1f 100644
--- a/runtime/syntax/xml.vim
+++ b/runtime/syntax/xml.vim
@@ -286,9 +286,11 @@
 
 syn keyword xmlDocTypeKeyword contained DOCTYPE PUBLIC SYSTEM
 syn region  xmlInlineDTD contained matchgroup=xmlDocTypeDecl start="\[" end="]" contains=@xmlDTD
-syn include @xmlDTD <sfile>:p:h/dtd.vim
-unlet b:current_syntax
 
+if exists('g:xml_syntax_folding')
+    syn include @xmlDTD <sfile>:p:h/dtd.vim
+    unlet b:current_syntax
+endif
 
 " synchronizing
 " TODO !!! to be improved !!!
diff --git a/src/auto/config.h b/src/auto/config.h
new file mode 100644
index 0000000..f78e072
--- /dev/null
+++ b/src/auto/config.h
@@ -0,0 +1,473 @@
+/* auto/config.h.  Generated from config.h.in by configure.  */
+/*
+ * config.h.in.  Originally generated automatically from configure.ac by
+ * autoheader and manually changed after that.
+ */
+
+/* Define if we have EBCDIC code */
+/* #undef EBCDIC */
+
+/* Define unless no X support found */
+/* #undef HAVE_X11 */
+
+/* Define when terminfo support found */
+#define TERMINFO 1
+
+/* Define when termcap.h contains ospeed */
+#define HAVE_OSPEED 1
+
+/* Define when ospeed can be extern */
+/* #undef OSPEED_EXTERN */
+
+/* Define when termcap.h contains UP, BC and PC */
+#define HAVE_UP_BC_PC 1
+
+/* Define when UP, BC and PC can be extern */
+/* #undef UP_BC_PC_EXTERN */
+
+/* Define when termcap.h defines outfuntype */
+/* #undef HAVE_OUTFUNTYPE */
+
+/* Define when __DATE__ " " __TIME__ can be used */
+#define HAVE_DATE_TIME 1
+
+/* Define when __attribute__((unused)) can be used */
+#define HAVE_ATTRIBUTE_UNUSED 1
+
+/* defined always when using configure */
+#define UNIX 1
+
+/* Defined to the size of an int */
+#define VIM_SIZEOF_INT 4
+
+/* Defined to the size of a long */
+#define VIM_SIZEOF_LONG 8
+
+/* Defined to the size of off_t */
+#define SIZEOF_OFF_T 8
+
+/* Defined to the size of time_t */
+#define SIZEOF_TIME_T 8
+
+/* Define when wchar_t is only 2 bytes. */
+/* #undef SMALL_WCHAR_T */
+
+/*
+ * If we cannot trust one of the following from the libraries, we use our
+ * own safe but probably slower vim_memmove().
+ */
+/* #undef USEBCOPY */
+#define USEMEMMOVE 1
+/* #undef USEMEMCPY */
+
+/* Define when "man -s 2" is to be used */
+/* #undef USEMAN_S */
+
+/* Define to empty if the keyword does not work.  */
+/* #undef const */
+
+/* Define to empty if the keyword does not work.  */
+/* #undef volatile */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef mode_t */
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+/* #undef off_t */
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+/* #undef pid_t */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+/* #undef size_t */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef uid_t */
+
+/* Define to `unsigned int' or other type that is 32 bit.  */
+/* #undef uint32_t */
+
+/* Define to `int' if <sys/types.h> doesn't define.  */
+/* #undef gid_t */
+
+/* Define to `long' if <sys/types.h> doesn't define.  */
+/* #undef ino_t */
+
+/* Define to `unsigned' if <sys/types.h> doesn't define.  */
+/* #undef dev_t */
+
+/* Define on big-endian machines */
+/* #undef WORDS_BIGENDIAN */
+
+/* Define to `unsigned long' if <sys/types.h> doesn't define.  */
+/* #undef rlim_t */
+
+/* Define to `struct sigaltstack' if <signal.h> doesn't define.  */
+/* #undef stack_t */
+
+/* Define if stack_t has the ss_base field. */
+/* #undef HAVE_SS_BASE */
+
+/* Define if you can safely include both <sys/time.h> and <time.h>.  */
+#define TIME_WITH_SYS_TIME 1
+
+/* Define if you can safely include both <sys/time.h> and <sys/select.h>.  */
+#define SYS_SELECT_WITH_SYS_TIME 1
+
+/* Define if you have /dev/ptc */
+/* #undef HAVE_DEV_PTC */
+
+/* Define if you have Sys4 ptys */
+#define HAVE_SVR4_PTYS 1
+
+/* Define to range of pty names to try */
+/* #undef PTYRANGE0 */
+/* #undef PTYRANGE1 */
+
+/* Define mode for pty */
+/* #undef PTYMODE */
+
+/* Define group for pty */
+/* #undef PTYGROUP */
+
+/* Define as the return type of signal handlers (int or void).  */
+#define RETSIGTYPE void
+
+/* Define as the command at the end of signal handlers ("" or "return 0;").  */
+#define SIGRETURN return
+
+/* Define if struct sigcontext is present */
+#define HAVE_SIGCONTEXT 1
+
+/* Define if touuper/tolower only work on lower/upercase characters */
+/* #undef BROKEN_TOUPPER */
+
+/* Define if stat() ignores a trailing slash */
+/* #undef STAT_IGNORES_SLASH */
+
+/* Define if tgetstr() has a second argument that is (char *) */
+/* #undef TGETSTR_CHAR_P */
+
+/* Define if tgetent() returns zero for an error */
+#define TGETENT_ZERO_ERR 0
+
+/* Define if the getcwd() function should not be used.  */
+/* #undef BAD_GETCWD */
+
+/* Define if you the function: */
+#define HAVE_BCMP 1
+#define HAVE_FCHDIR 1
+#define HAVE_FCHOWN 1
+#define HAVE_FSEEKO 1
+#define HAVE_FSYNC 1
+#define HAVE_GETCWD 1
+/* #undef HAVE_GETPSEUDOTTY */
+/* #undef HAVE_GETPWENT */
+#define HAVE_GETPWNAM 1
+#define HAVE_GETPWUID 1
+#define HAVE_GETRLIMIT 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_GETWD 1
+/* #undef HAVE_ICONV */
+/* #undef HAVE_NL_LANGINFO_CODESET */
+#define HAVE_LSTAT 1
+#define HAVE_MEMCMP 1
+#define HAVE_MEMSET 1
+#define HAVE_MKDTEMP 1
+#define HAVE_NANOSLEEP 1
+#define HAVE_OPENDIR 1
+#define HAVE_FLOAT_FUNCS 1
+#define HAVE_PUTENV 1
+#define HAVE_QSORT 1
+#define HAVE_READLINK 1
+#define HAVE_RENAME 1
+#define HAVE_SELECT 1
+#define HAVE_SELINUX 1
+#define HAVE_SETENV 1
+#define HAVE_SETPGID 1
+#define HAVE_SETSID 1
+#define HAVE_SIGACTION 1
+#define HAVE_SIGALTSTACK 1
+/* #undef HAVE_SIGSET */
+/* #undef HAVE_SIGSETJMP */
+#define HAVE_SIGSTACK 1
+#define HAVE_SIGPROCMASK 1
+/* #undef HAVE_SIGVEC */
+/* #undef HAVE_SMACK */
+#define HAVE_STRCASECMP 1
+#define HAVE_STRERROR 1
+#define HAVE_STRFTIME 1
+/* #undef HAVE_STRICMP */
+#define HAVE_STRNCASECMP 1
+/* #undef HAVE_STRNICMP */
+#define HAVE_STRPBRK 1
+#define HAVE_STRTOL 1
+#define HAVE_ST_BLKSIZE 1
+#define HAVE_SYSCONF 1
+/* #undef HAVE_SYSCTL */
+#define HAVE_SYSINFO 1
+#define HAVE_SYSINFO_MEM_UNIT 1
+#define HAVE_TGETENT 1
+#define HAVE_TOWLOWER 1
+#define HAVE_TOWUPPER 1
+#define HAVE_ISWUPPER 1
+#define HAVE_USLEEP 1
+#define HAVE_UTIME 1
+#define HAVE_BIND_TEXTDOMAIN_CODESET 1
+
+/* Define, if needed, for accessing large files. */
+/* #undef _LARGE_FILES */
+/* #undef _FILE_OFFSET_BITS */
+/* #undef _LARGEFILE_SOURCE */
+
+/* Define if you do not have utime(), but do have the utimes() function. */
+#define HAVE_UTIMES 1
+
+/* Define if you have the header file: */
+#define HAVE_DIRENT_H 1
+#define HAVE_ERRNO_H 1
+#define HAVE_FCNTL_H 1
+/* #undef HAVE_FRAME_H */
+#define HAVE_ICONV_H 1
+#define HAVE_INTTYPES_H 1
+/* #undef HAVE_LANGINFO_H */
+/* #undef HAVE_LIBC_H */
+#define HAVE_LIBGEN_H 1
+/* #undef HAVE_LIBINTL_H */
+#define HAVE_LOCALE_H 1
+#define HAVE_MATH_H 1
+/* #undef HAVE_NDIR_H */
+#define HAVE_POLL_H 1
+/* #undef HAVE_PTHREAD_NP_H */
+#define HAVE_PWD_H 1
+#define HAVE_SETJMP_H 1
+#define HAVE_SGTTY_H 1
+#define HAVE_STDINT_H 1
+#define HAVE_STRINGS_H 1
+/* #undef HAVE_STROPTS_H */
+/* #undef HAVE_SYS_ACCESS_H */
+/* #undef HAVE_SYS_ACL_H */
+/* #undef HAVE_SYS_DIR_H */
+#define HAVE_SYS_IOCTL_H 1
+/* #undef HAVE_SYS_NDIR_H */
+#define HAVE_SYS_PARAM_H 1
+#define HAVE_SYS_POLL_H 1
+/* #undef HAVE_SYS_PTEM_H */
+#define HAVE_SYS_RESOURCE_H 1
+#define HAVE_SYS_SELECT_H 1
+#define HAVE_SYS_STATFS_H 1
+/* #undef HAVE_SYS_STREAM_H */
+#define HAVE_SYS_SYSCTL_H 1
+#define HAVE_SYS_SYSINFO_H 1
+/* #undef HAVE_SYS_SYSTEMINFO_H */
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_SYS_UTSNAME_H 1
+#define HAVE_TERMCAP_H 1
+#define HAVE_TERMIOS_H 1
+#define HAVE_TERMIO_H 1
+#define HAVE_WCHAR_H 1
+#define HAVE_WCTYPE_H 1
+#define HAVE_UNISTD_H 1
+/* #undef HAVE_UTIL_DEBUG_H */
+/* #undef HAVE_UTIL_MSGI18N_H */
+#define HAVE_UTIME_H 1
+/* #undef HAVE_X11_SUNKEYSYM_H */
+/* #undef HAVE_XM_XM_H */
+/* #undef HAVE_XM_XPMP_H */
+/* #undef HAVE_XM_TRAITP_H */
+/* #undef HAVE_XM_MANAGER_H */
+/* #undef HAVE_XM_UNHIGHLIGHTT_H */
+/* #undef HAVE_XM_JOINSIDET_H */
+/* #undef HAVE_XM_NOTEBOOK_H */
+/* #undef HAVE_X11_XPM_H */
+/* #undef HAVE_X11_XMU_EDITRES_H */
+/* #undef HAVE_X11_SM_SMLIB_H */
+
+/* Define to the type of the XpmAttributes type. */
+/* #undef XPMATTRIBUTES_TYPE */
+
+/* Define if you have <sys/wait.h> that is POSIX.1 compatible.  */
+#define HAVE_SYS_WAIT_H 1
+
+/* Define if you have a <sys/wait.h> that is not POSIX.1 compatible. */
+/* #undef HAVE_UNION_WAIT */
+
+/* This is currently unused in vim: */
+/* Define if you have the ANSI C header files. */
+/* #undef STDC_HEADERS */
+
+/* instead, we check a few STDC things ourselves */
+#define HAVE_STDLIB_H 1
+#define HAVE_STRING_H 1
+
+/* Define if strings.h cannot be included when strings.h already is */
+/* #undef NO_STRINGS_WITH_STRING_H */
+
+/* Define if you want tiny features. */
+/* #undef FEAT_TINY */
+
+/* Define if you want small features. */
+/* #undef FEAT_SMALL */
+
+/* Define if you want normal features. */
+/* #undef FEAT_NORMAL */
+
+/* Define if you want big features. */
+/* #undef FEAT_BIG */
+
+/* Define if you want huge features. */
+/* #undef FEAT_HUGE */
+
+/* Define if you want to include the Lua interpreter. */
+/* #undef FEAT_LUA */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_LUA */
+
+/* Define if you want to include the MzScheme interpreter. */
+/* #undef FEAT_MZSCHEME */
+
+/* Define if you want to include the Perl interpreter. */
+/* #undef FEAT_PERL */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_PERL */
+
+/* Define if you want to include the Python interpreter. */
+/* #undef FEAT_PYTHON */
+
+/* Define if you want to include the Python3 interpreter. */
+/* #undef FEAT_PYTHON3 */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_PYTHON */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_PYTHON3 */
+
+/* Define if dynamic python does not require RTLD_GLOBAL */
+/* #undef PY_NO_RTLD_GLOBAL */
+
+/* Define if dynamic python3 does not require RTLD_GLOBAL */
+/* #undef PY3_NO_RTLD_GLOBAL */
+
+/* Define if you want to include the Ruby interpreter. */
+/* #undef FEAT_RUBY */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_RUBY */
+
+/* Define if you want to include the Tcl interpreter. */
+/* #undef FEAT_TCL */
+
+/* Define for linking via dlopen() or LoadLibrary() */
+/* #undef DYNAMIC_TCL */
+
+/* Define if you want to add support for ACL */
+/* #undef HAVE_POSIX_ACL */
+/* #undef HAVE_SOLARIS_ZFS_ACL */
+/* #undef HAVE_SOLARIS_ACL */
+/* #undef HAVE_AIX_ACL */
+
+/* Define if pango_shape_full() is available. */
+/* #undef HAVE_PANGO_SHAPE_FULL */
+
+/* Define if you want to add support of GPM (Linux console mouse daemon) */
+/* #undef HAVE_GPM */
+
+/* Define if you want to add support of sysmouse (*BSD console mouse) */
+/* #undef HAVE_SYSMOUSE */
+
+/* Define if you want to include the Cscope interface. */
+/* #undef FEAT_CSCOPE */
+
+/* Define if you want to include multibyte support. */
+/* #undef FEAT_MBYTE */
+
+/* Define if you want to include fontset support. */
+/* #undef FEAT_XFONTSET */
+
+/* Define if you want to include XIM support. */
+/* #undef FEAT_XIM */
+
+/* Define if you want to include Hangul input support. */
+/* #undef FEAT_HANGULIN */
+
+/* Define if you use GTK and want GNOME support. */
+/* #undef FEAT_GUI_GNOME */
+
+/* Define if you use KDE and want KDE Toolbar support. */
+/* #undef FEAT_KDETOOLBAR */
+
+/* Define if GTK+ multihead support is available (requires GTK+ >= 2.1.1). */
+/* #undef HAVE_GTK_MULTIHEAD */
+
+/* Define if your X has own locale library */
+/* #undef X_LOCALE */
+
+/* Define if we have dlfcn.h. */
+#define HAVE_DLFCN_H 1
+
+/* Define if there is a working gettext(). */
+#define HAVE_GETTEXT 1
+
+/* Define if _nl_msg_cat_cntr is present. */
+/* #undef HAVE_NL_MSG_CAT_CNTR */
+
+/* Define if we have dlopen() */
+#define HAVE_DLOPEN 1
+
+/* Define if we have dlsym() */
+#define HAVE_DLSYM 1
+
+/* Define if we have dl.h. */
+/* #undef HAVE_DL_H */
+
+/* Define if we have shl_load() */
+/* #undef HAVE_SHL_LOAD */
+
+/* Define if you want to include Sun Visual Workshop support. */
+/* #undef FEAT_SUN_WORKSHOP */
+
+/* Define if you want to include NetBeans integration. */
+/* #undef FEAT_NETBEANS_INTG */
+
+/* Define if you want to include process communication. */
+#define FEAT_JOB_CHANNEL 1
+
+/* Define default global runtime path */
+/* #undef RUNTIME_GLOBAL */
+
+/* Define name of who modified a released Vim */
+/* #undef MODIFIED_BY */
+
+/* Define if you want XSMP interaction as well as vanilla swapfile safety */
+#define USE_XSMP_INTERACT 1
+
+/* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */
+#define HAVE_FD_CLOEXEC 1
+
+/* Define if you want Cygwin to use the WIN32 clipboard, not compatible with X11*/
+/* #undef FEAT_CYGWIN_WIN32_CLIPBOARD */
+
+/* Define if we have AvailabilityMacros.h on Mac OS X */
+/* #undef HAVE_AVAILABILITYMACROS_H */
+
+/* Define if Xutf8SetWMProperties() is in an X library. */
+/* #undef HAVE_XUTF8SETWMPROPERTIES */
+
+/* Define if GResource is used to load icons */
+/* #undef USE_GRESOURCE */
+
+/* Define if GTK+ GUI is to be linked against GTK+ 3 */
+/* #undef USE_GTK3 */
+
+/* Define if we have isinf() */
+#define HAVE_ISINF 1
+
+/* Define if we have isnan() */
+#define HAVE_ISNAN 1
+
+/* Define to inline symbol or empty */
+/* #undef inline */
diff --git a/src/auto/config.mk b/src/auto/config.mk
new file mode 100644
index 0000000..32652fd
--- /dev/null
+++ b/src/auto/config.mk
@@ -0,0 +1,179 @@
+#
+# config.mk.in -- autoconf template for Vim on Unix		vim:ts=8:sw=8:
+#
+# DO NOT EDIT config.mk!!  It will be overwritten by configure.
+# Edit Makefile and run "make" or run ./configure with other arguments.
+#
+# Configure does not edit the makefile directly. This method is not the
+# standard use of GNU autoconf, but it has two advantages:
+#   a) The user can override every choice made by configure.
+#   b) Modifications to the makefile are not lost when configure is run.
+#
+# I hope this is worth being nonstandard. jw.
+
+
+
+VIMNAME		= vim
+EXNAME		= ex
+VIEWNAME	= view
+
+CC		= gcc
+DEFS		= -DHAVE_CONFIG_H
+CFLAGS		= -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+CPPFLAGS	= 
+srcdir		= .
+
+LDFLAGS		=  -L/usr/local/lib -Wl,--as-needed
+LIBS		= -lm -lncurses -lelf -lnsl  -lacl -lattr -lgpm -ldl
+TAGPRG		= ctags -I INIT+ --fields=+S
+
+CPP		= gcc -E
+CPP_MM		= M
+DEPEND_CFLAGS_FILTER = | sed 's+-I */+-isystem /+g'
+LINK_AS_NEEDED	= yes
+X_CFLAGS	= 
+X_LIBS_DIR	= 
+X_PRE_LIBS	= 
+X_EXTRA_LIBS	= 
+X_LIBS		= 
+
+LUA_LIBS	= 
+LUA_SRC		= 
+LUA_OBJ		= 
+LUA_CFLAGS	= 
+LUA_PRO		= 
+
+MZSCHEME_LIBS	= 
+MZSCHEME_SRC	= 
+MZSCHEME_OBJ	= 
+MZSCHEME_CFLAGS	= 
+MZSCHEME_PRO	= 
+MZSCHEME_EXTRA	= 
+MZSCHEME_MZC	= 
+
+PERL		= 
+PERLLIB		= 
+PERL_XSUBPP	= 
+PERL_LIBS	= 
+SHRPENV		= 
+PERL_SRC	= 
+PERL_OBJ	= 
+PERL_PRO	= 
+PERL_CFLAGS	= 
+
+PYTHON_SRC	= 
+PYTHON_OBJ	= 
+PYTHON_CFLAGS	= 
+PYTHON_LIBS	= 
+PYTHON_CONFDIR	= 
+PYTHON_GETPATH_CFLAGS = 
+
+PYTHON3_SRC	= 
+PYTHON3_OBJ	= 
+PYTHON3_CFLAGS	= 
+PYTHON3_LIBS	= 
+PYTHON3_CONFDIR	= 
+
+TCL		= 
+TCL_SRC		= 
+TCL_OBJ		= 
+TCL_PRO		= 
+TCL_CFLAGS	= 
+TCL_LIBS	= 
+
+HANGULIN_SRC	= 
+HANGULIN_OBJ	= 
+
+WORKSHOP_SRC	= 
+WORKSHOP_OBJ	= 
+
+NETBEANS_SRC	= netbeans.c
+NETBEANS_OBJ	= objects/netbeans.o
+CHANNEL_SRC	= channel.c
+CHANNEL_OBJ	= objects/channel.o
+
+RUBY		= 
+RUBY_SRC	= 
+RUBY_OBJ	= 
+RUBY_PRO	= 
+RUBY_CFLAGS	= 
+RUBY_LIBS	= 
+
+AWK		= gawk
+
+STRIP		= strip
+
+EXEEXT		= 
+CROSS_COMPILING = 
+
+COMPILEDBY	= 
+
+INSTALLVIMDIFF	= installvimdiff
+INSTALLGVIMDIFF	= installgvimdiff
+INSTALL_LANGS	= install-languages
+INSTALL_TOOL_LANGS	= install-tool-languages
+
+### sed command to fix quotes while creating pathdef.c
+QUOTESED        = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+
+### Line break character as octal number for "tr"
+NL		= "\\012"
+
+### Top directory for everything
+prefix		= /usr/local
+
+### Top directory for the binary
+exec_prefix	= ${prefix}
+
+### Prefix for location of data files
+BINDIR		= ${exec_prefix}/bin
+
+### For autoconf 2.60 and later (avoid a warning)
+datarootdir	= ${prefix}/share
+
+### Prefix for location of data files
+DATADIR		= ${datarootdir}
+
+### Prefix for location of man pages
+MANDIR		= ${datarootdir}/man
+
+### Do we have a GUI
+GUI_INC_LOC	= 
+GUI_LIB_LOC	= 
+GUI_SRC		= $(NONE_SRC)
+GUI_OBJ		= $(NONE_OBJ)
+GUI_DEFS	= $(NONE_DEFS)
+GUI_IPATH	= $(NONE_IPATH)
+GUI_LIBS_DIR	= $(NONE_LIBS_DIR)
+GUI_LIBS1	= $(NONE_LIBS1)
+GUI_LIBS2	= $(NONE_LIBS2)
+GUI_INSTALL	= $(NONE_INSTALL)
+GUI_TARGETS	= $(NONE_TARGETS)
+GUI_MAN_TARGETS	= $(NONE_MAN_TARGETS)
+GUI_TESTTARGET	= $(NONE_TESTTARGET)
+GUI_TESTARG	= $(NONE_TESTARG)
+GUI_BUNDLE	= $(NONE_BUNDLE)
+NARROW_PROTO	= 
+GUI_X_LIBS	= 
+MOTIF_LIBNAME	= 
+GTK_LIBNAME	= 
+
+GLIB_COMPILE_RESOURCES = 
+GRESOURCE_SRC = 
+GRESOURCE_OBJ = 
+
+GTK_UPDATE_ICON_CACHE = 
+UPDATE_DESKTOP_DATABASE = 
+
+### Any OS dependent extra source and object file
+OS_EXTRA_SRC	= 
+OS_EXTRA_OBJ	= 
+
+### If the *.po files are to be translated to *.mo files.
+MAKEMO		= yes
+
+MSGFMT		= msgfmt
+
+# Make sure that "make first" will run "make all" once configure has done its
+# work.  This is needed when using the Makefile in the top directory.
+first: all
diff --git a/src/auto/osdef.h b/src/auto/osdef.h
new file mode 100644
index 0000000..0d21011
--- /dev/null
+++ b/src/auto/osdef.h
@@ -0,0 +1,136 @@
+/*
+ * osdef.h is automagically created from osdef?.h.in by osdef.sh -- DO NOT EDIT
+ */
+/* autoconf cannot fiddle out declarations. Use our homebrewn tools. (jw) */
+/*
+ * Declarations that may cause conflicts belong here so that osdef.sh
+ * can clean out the forest. Everything else belongs in os_unix.h
+ *
+ * How this works:
+ * - This file contains all unix prototypes that Vim might need.
+ * - The shell script osdef.sh is executed at compile time to remove all the
+ *   prototypes that are in an include file. This results in osdef.h.
+ * - osdef.h is included in vim.h.
+ *
+ * sed cannot always handle so many commands, this is file 1 of 2
+ */
+
+#ifndef fopen	/* could be redefined to fopen64() */
+#endif
+#ifdef HAVE_FSEEKO
+#endif
+#ifdef HAVE_FSEEKO
+#endif
+#ifndef ferror	/* let me say it again: "macros should never have prototypes" */
+#endif
+#if defined(sun) || defined(_SEQUENT_)
+/* used inside of stdio macros getc(), puts(), putchar()... */
+extern int	_flsbuf(int, FILE *);
+extern int	_filbuf(FILE *);
+#endif
+
+#if !defined(HAVE_SELECT)
+struct pollfd;			/* for poll() */
+extern int	poll(struct pollfd *, long, int);
+#endif
+
+#ifdef HAVE_MEMSET
+#endif
+#ifdef HAVE_BCMP
+#endif
+#ifdef HAVE_MEMCMP
+#endif
+#ifdef HAVE_STRPBRK
+#endif
+#ifdef USEBCOPY
+#else
+# ifdef USEMEMCPY
+# else
+#  ifdef USEMEMMOVE
+#  endif
+# endif
+#endif
+/* used inside of FD_ZERO macro: */
+#ifdef HAVE_SETSID
+#endif
+#ifdef HAVE_SETPGID
+#endif
+#ifdef HAVE_STRTOL
+#endif
+#ifdef HAVE_STRFTIME
+#endif
+#ifdef HAVE_STRCASECMP
+#endif
+#ifdef HAVE_STRNCASECMP
+#endif
+#ifndef strdup
+#endif
+
+#ifndef USE_SYSTEM
+# ifndef __TANDEM
+# endif
+#endif
+
+
+#ifdef HAVE_SIGSET
+extern RETSIGTYPE (*sigset(int, RETSIGTYPE (*func) SIGPROTOARG)) SIGPROTOARG;
+#endif
+
+#if defined(HAVE_SETJMP_H)
+# ifdef HAVE_SIGSETJMP
+extern int	sigsetjmp(sigjmp_buf, int);
+# else
+# endif
+#endif
+
+
+#ifndef __TANDEM
+#endif
+#if defined(HAVE_GETCWD) && !defined(sun) && !defined(__TANDEM)
+#else
+#endif
+#ifndef __alpha	/* suggested by Campbell */
+#endif
+/*
+ * osdef2.h.in - See osdef1.h.in for a description.
+ */
+
+
+#ifndef __TANDEM
+#endif
+
+#ifndef __TANDEM
+#endif
+#ifndef __TANDEM
+#endif
+#ifndef stat	/* could be redefined to stat64() */
+#endif
+#ifndef lstat	/* could be redefined to lstat64() */
+#endif
+#ifndef __TANDEM
+#endif
+
+
+
+#ifdef HAVE_TERMIOS_H
+#endif
+
+#ifdef HAVE_SYS_STATFS_H
+#endif
+
+#ifdef HAVE_GETTIMEOFDAY
+#endif
+
+#ifdef HAVE_GETPWNAM
+#endif
+
+#ifdef USE_TMPNAM
+#else
+#endif
+
+#ifdef ISC
+extern int	_Xmblen(char const *, size_t);
+#else
+		/* This is different from the header but matches mblen() */
+extern int	_Xmblen(char *, size_t);
+#endif
diff --git a/src/auto/pathdef.c b/src/auto/pathdef.c
new file mode 100644
index 0000000..6503bc4
--- /dev/null
+++ b/src/auto/pathdef.c
@@ -0,0 +1,10 @@
+/* pathdef.c */
+/* This file is automatically created by Makefile
+ * DO NOT EDIT!  Change Makefile only. */
+#include "vim.h"
+char_u *default_vim_dir = (char_u *)"/system/usr/share/vim";
+char_u *default_vimruntime_dir = (char_u *)"/system/usr/share/vim";
+char_u *all_cflags = (char_u *)"gcc -c -I. -Iproto -DHAVE_CONFIG_H -g -O2        ";
+char_u *all_lflags = (char_u *)"gcc -L/system/lib -o vim -lm -lselinux           ";
+char_u *compiled_user = (char_u *)"tpruvot";
+char_u *compiled_sys = (char_u *)"CyanogenMod";
diff --git a/src/version.c b/src/version.c
index e259000..497746f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -50,7 +50,7 @@
     strcat(longVersion, ")");
 }
 # else
-char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
+char	*longVersion = VIM_VERSION_LONG;
 # endif
 #else
 char	*longVersion = VIM_VERSION_LONG;
diff --git a/src/xxd/Android.mk b/src/xxd/Android.mk
new file mode 100644
index 0000000..03f3bef
--- /dev/null
+++ b/src/xxd/Android.mk
@@ -0,0 +1,17 @@
+LOCAL_PATH:= $(call my-dir)
+
+# ========================================================
+# xxd (hex editor)
+# ========================================================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES:= \
+	xxd.c
+
+LOCAL_CFLAGS := -DUNIX
+
+LOCAL_MODULE := xxd
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
+include $(BUILD_EXECUTABLE)
+
diff --git a/vimrc.android b/vimrc.android
new file mode 100644
index 0000000..3c95fdb
--- /dev/null
+++ b/vimrc.android
@@ -0,0 +1,111 @@
+" vimrc default android config file
+" 
+" Adapted for Android by tpruvot@github
+" Last change: 2014 Jul 22 (UTF-8)
+
+" When started as "evim", evim.vim will already have done these settings.
+if v:progname =~? "evim"
+  finish
+endif
+
+" Use Vim settings, rather than Vi settings (much better!).
+" This must be first, because it changes other options as a side effect.
+set nocompatible
+
+" allow backspacing over everything in insert mode
+set backspace=indent,eol,start
+
+" swap directories
+set directory=.,/data/local/tmp,/tmp
+
+if has("vms")
+  set nobackup		" do not keep a backup file, use versions instead
+else
+" set backup		" keep a backup file (restore to previous version)
+  set undofile		" keep an undo file (undo changes after closing)
+endif
+set history=50		" keep 50 lines of command line history
+set ruler		" show the cursor position all the time
+set showcmd		" display incomplete commands
+set incsearch		" do incremental searching
+
+set viminfo="NONE"
+
+" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
+" let &guioptions = substitute(&guioptions, "t", "", "g")
+
+" Don't use Ex mode, use Q for formatting
+map Q gq
+
+" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
+" so that you can undo CTRL-U after inserting a line break.
+inoremap <C-U> <C-G>u<C-U>
+
+" In many terminal emulators the mouse works just fine, thus enable it.
+if has('mouse')
+  set mouse=a
+endif
+
+" Switch syntax highlighting on, when the terminal has colors
+" Also switch on highlighting the last used search pattern.
+if &t_Co > 2 || has("gui_running")
+  syntax on
+  set hlsearch
+endif
+
+" Only do this part when compiled with support for autocommands.
+if has("autocmd")
+
+  " Enable file type detection.
+  " Use the default filetype settings, so that mail gets 'tw' set to 72,
+  " 'cindent' is on in C files, etc.
+  " Also load indent files, to automatically do language-dependent indenting.
+  filetype plugin indent on
+
+  " Put these in an autocmd group, so that we can delete them easily.
+  augroup vimrcEx
+  au!
+
+  " For all text files set 'textwidth' to 78 characters.
+  autocmd FileType text setlocal textwidth=78
+
+  " When editing a file, always jump to the last known cursor position.
+  " Don't do it when the position is invalid or when inside an event handler
+  " (happens when dropping a file on gvim).
+  " Also don't do it when the mark is in the first line, that is the default
+  " position when opening a file.
+  autocmd BufReadPost *
+    \ if line("'\"") > 1 && line("'\"") <= line("$") |
+    \   exe "normal! g`\"" |
+    \ endif
+
+  augroup END
+
+else
+
+  set autoindent		" always set autoindenting on
+
+endif " has("autocmd")
+
+" UTF-8 support
+if has("multi_byte")
+  if &termencoding == ""
+    let &termencoding = "utf-8"
+  endif
+  set encoding=utf-8
+  setglobal fileencoding=utf-8
+  " setglobal bomb " Do not force BOM headers
+  set fileencodings=ucs-bom,utf-8,latin1
+endif
+
+if has("syntax")
+  source /system/usr/share/vim/autoload/spacehi.vim
+endif
+
+" Convenient command to see the difference between the current buffer and the
+" file it was loaded from, thus the changes you made.
+" Only define it when not defined already.
+if !exists(":DiffOrig")
+  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
+		  \ | wincmd p | diffthis
+endif
