Commits

aef committed cb32150

Reduced nerdtree size, added neo complete cache

Comments (0)

Files changed (76)

vim/bundle/neocomplcache/.git/HEAD

+ref: refs/heads/master

vim/bundle/neocomplcache/.git/config

+[core]
+	repositoryformatversion = 0
+	filemode = true
+	bare = false
+	logallrefupdates = true
+[remote "origin"]
+	fetch = +refs/heads/*:refs/remotes/origin/*
+	url = https://github.com/Shougo/neocomplcache.git
+[branch "master"]
+	remote = origin
+	merge = refs/heads/master

vim/bundle/neocomplcache/.git/description

+Unnamed repository; edit this file 'description' to name the repository.

vim/bundle/neocomplcache/.git/hooks/applypatch-msg.sample

+#!/bin/sh
+#
+# An example hook script to check the commit log message taken by
+# applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.  The hook is
+# allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "applypatch-msg".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/commit-msg" &&
+	exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
+:

vim/bundle/neocomplcache/.git/hooks/commit-msg.sample

+#!/bin/sh
+#
+# An example hook script to check the commit log message.
+# Called by "git commit" with one argument, the name of the file
+# that has the commit message.  The hook should exit with non-zero
+# status after issuing an appropriate message if it wants to stop the
+# commit.  The hook is allowed to edit the commit message file.
+#
+# To enable this hook, rename this file to "commit-msg".
+
+# Uncomment the below to add a Signed-off-by line to the message.
+# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
+# hook is more suited to it.
+#
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
+
+# This example catches duplicate Signed-off-by lines.
+
+test "" = "$(grep '^Signed-off-by: ' "$1" |
+	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
+	echo >&2 Duplicate Signed-off-by lines.
+	exit 1
+}

vim/bundle/neocomplcache/.git/hooks/post-update.sample

+#!/bin/sh
+#
+# An example hook script to prepare a packed repository for use over
+# dumb transports.
+#
+# To enable this hook, rename this file to "post-update".
+
+exec git update-server-info

vim/bundle/neocomplcache/.git/hooks/pre-applypatch.sample

+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed
+# by applypatch from an e-mail message.
+#
+# The hook should exit with non-zero status after issuing an
+# appropriate message if it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-applypatch".
+
+. git-sh-setup
+test -x "$GIT_DIR/hooks/pre-commit" &&
+	exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
+:

vim/bundle/neocomplcache/.git/hooks/pre-commit.sample

+#!/bin/sh
+#
+# An example hook script to verify what is about to be committed.
+# Called by "git commit" with no arguments.  The hook should
+# exit with non-zero status after issuing an appropriate message if
+# it wants to stop the commit.
+#
+# To enable this hook, rename this file to "pre-commit".
+
+if git rev-parse --verify HEAD >/dev/null 2>&1
+then
+	against=HEAD
+else
+	# Initial commit: diff against an empty tree object
+	against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
+fi
+
+# If you want to allow non-ascii filenames set this variable to true.
+allownonascii=$(git config hooks.allownonascii)
+
+# Redirect output to stderr.
+exec 1>&2
+
+# Cross platform projects tend to avoid non-ascii filenames; prevent
+# them from being added to the repository. We exploit the fact that the
+# printable range starts at the space character and ends with tilde.
+if [ "$allownonascii" != "true" ] &&
+	# Note that the use of brackets around a tr range is ok here, (it's
+	# even required, for portability to Solaris 10's /usr/bin/tr), since
+	# the square bracket bytes happen to fall in the designated range.
+	test $(git diff --cached --name-only --diff-filter=A -z $against |
+	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
+then
+	echo "Error: Attempt to add a non-ascii file name."
+	echo
+	echo "This can cause problems if you want to work"
+	echo "with people on other platforms."
+	echo
+	echo "To be portable it is advisable to rename the file ..."
+	echo
+	echo "If you know what you are doing you can disable this"
+	echo "check using:"
+	echo
+	echo "  git config hooks.allownonascii true"
+	echo
+	exit 1
+fi
+
+# If there are whitespace errors, print the offending file names and fail.
+exec git diff-index --check --cached $against --

vim/bundle/neocomplcache/.git/hooks/pre-rebase.sample

+#!/bin/sh
+#
+# Copyright (c) 2006, 2008 Junio C Hamano
+#
+# The "pre-rebase" hook is run just before "git rebase" starts doing
+# its job, and can prevent the command from running by exiting with
+# non-zero status.
+#
+# The hook is called with the following parameters:
+#
+# $1 -- the upstream the series was forked from.
+# $2 -- the branch being rebased (or empty when rebasing the current branch).
+#
+# This sample shows how to prevent topic branches that are already
+# merged to 'next' branch from getting rebased, because allowing it
+# would result in rebasing already published history.
+
+publish=next
+basebranch="$1"
+if test "$#" = 2
+then
+	topic="refs/heads/$2"
+else
+	topic=`git symbolic-ref HEAD` ||
+	exit 0 ;# we do not interrupt rebasing detached HEAD
+fi
+
+case "$topic" in
+refs/heads/??/*)
+	;;
+*)
+	exit 0 ;# we do not interrupt others.
+	;;
+esac
+
+# Now we are dealing with a topic branch being rebased
+# on top of master.  Is it OK to rebase it?
+
+# Does the topic really exist?
+git show-ref -q "$topic" || {
+	echo >&2 "No such branch $topic"
+	exit 1
+}
+
+# Is topic fully merged to master?
+not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
+if test -z "$not_in_master"
+then
+	echo >&2 "$topic is fully merged to master; better remove it."
+	exit 1 ;# we could allow it, but there is no point.
+fi
+
+# Is topic ever merged to next?  If so you should not be rebasing it.
+only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
+only_next_2=`git rev-list ^master           ${publish} | sort`
+if test "$only_next_1" = "$only_next_2"
+then
+	not_in_topic=`git rev-list "^$topic" master`
+	if test -z "$not_in_topic"
+	then
+		echo >&2 "$topic is already up-to-date with master"
+		exit 1 ;# we could allow it, but there is no point.
+	else
+		exit 0
+	fi
+else
+	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
+	/usr/bin/perl -e '
+		my $topic = $ARGV[0];
+		my $msg = "* $topic has commits already merged to public branch:\n";
+		my (%not_in_next) = map {
+			/^([0-9a-f]+) /;
+			($1 => 1);
+		} split(/\n/, $ARGV[1]);
+		for my $elem (map {
+				/^([0-9a-f]+) (.*)$/;
+				[$1 => $2];
+			} split(/\n/, $ARGV[2])) {
+			if (!exists $not_in_next{$elem->[0]}) {
+				if ($msg) {
+					print STDERR $msg;
+					undef $msg;
+				}
+				print STDERR " $elem->[1]\n";
+			}
+		}
+	' "$topic" "$not_in_next" "$not_in_master"
+	exit 1
+fi
+
+exit 0
+
+################################################################
+
+This sample hook safeguards topic branches that have been
+published from being rewound.
+
+The workflow assumed here is:
+
+ * Once a topic branch forks from "master", "master" is never
+   merged into it again (either directly or indirectly).
+
+ * Once a topic branch is fully cooked and merged into "master",
+   it is deleted.  If you need to build on top of it to correct
+   earlier mistakes, a new topic branch is created by forking at
+   the tip of the "master".  This is not strictly necessary, but
+   it makes it easier to keep your history simple.
+
+ * Whenever you need to test or publish your changes to topic
+   branches, merge them into "next" branch.
+
+The script, being an example, hardcodes the publish branch name
+to be "next", but it is trivial to make it configurable via
+$GIT_DIR/config mechanism.
+
+With this workflow, you would want to know:
+
+(1) ... if a topic branch has ever been merged to "next".  Young
+    topic branches can have stupid mistakes you would rather
+    clean up before publishing, and things that have not been
+    merged into other branches can be easily rebased without
+    affecting other people.  But once it is published, you would
+    not want to rewind it.
+
+(2) ... if a topic branch has been fully merged to "master".
+    Then you can delete it.  More importantly, you should not
+    build on top of it -- other people may already want to
+    change things related to the topic as patches against your
+    "master", so if you need further changes, it is better to
+    fork the topic (perhaps with the same name) afresh from the
+    tip of "master".
+
+Let's look at this example:
+
+		   o---o---o---o---o---o---o---o---o---o "next"
+		  /       /           /           /
+		 /   a---a---b A     /           /
+		/   /               /           /
+	       /   /   c---c---c---c B         /
+	      /   /   /             \         /
+	     /   /   /   b---b C     \       /
+	    /   /   /   /             \     /
+    ---o---o---o---o---o---o---o---o---o---o---o "master"
+
+
+A, B and C are topic branches.
+
+ * A has one fix since it was merged up to "next".
+
+ * B has finished.  It has been fully merged up to "master" and "next",
+   and is ready to be deleted.
+
+ * C has not merged to "next" at all.
+
+We would want to allow C to be rebased, refuse A, and encourage
+B to be deleted.
+
+To compute (1):
+
+	git rev-list ^master ^topic next
+	git rev-list ^master        next
+
+	if these match, topic has not merged in next at all.
+
+To compute (2):
+
+	git rev-list master..topic
+
+	if this is empty, it is fully merged to "master".

vim/bundle/neocomplcache/.git/hooks/prepare-commit-msg.sample

+#!/bin/sh
+#
+# An example hook script to prepare the commit log message.
+# Called by "git commit" with the name of the file that has the
+# commit message, followed by the description of the commit
+# message's source.  The hook's purpose is to edit the commit
+# message file.  If the hook fails with a non-zero status,
+# the commit is aborted.
+#
+# To enable this hook, rename this file to "prepare-commit-msg".
+
+# This hook includes three examples.  The first comments out the
+# "Conflicts:" part of a merge commit.
+#
+# The second includes the output of "git diff --name-status -r"
+# into the message, just before the "git status" output.  It is
+# commented because it doesn't cope with --amend or with squashed
+# commits.
+#
+# The third example adds a Signed-off-by line to the message, that can
+# still be edited.  This is rarely a good idea.
+
+case "$2,$3" in
+  merge,)
+    /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;;
+
+# ,|template,)
+#   /usr/bin/perl -i.bak -pe '
+#      print "\n" . `git diff --cached --name-status -r`
+#	 if /^#/ && $first++ == 0' "$1" ;;
+
+  *) ;;
+esac
+
+# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
+# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

vim/bundle/neocomplcache/.git/hooks/update.sample

+#!/bin/sh
+#
+# An example hook script to blocks unannotated tags from entering.
+# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
+#
+# To enable this hook, rename this file to "update".
+#
+# Config
+# ------
+# hooks.allowunannotated
+#   This boolean sets whether unannotated tags will be allowed into the
+#   repository.  By default they won't be.
+# hooks.allowdeletetag
+#   This boolean sets whether deleting tags will be allowed in the
+#   repository.  By default they won't be.
+# hooks.allowmodifytag
+#   This boolean sets whether a tag may be modified after creation. By default
+#   it won't be.
+# hooks.allowdeletebranch
+#   This boolean sets whether deleting branches will be allowed in the
+#   repository.  By default they won't be.
+# hooks.denycreatebranch
+#   This boolean sets whether remotely creating branches will be denied
+#   in the repository.  By default this is allowed.
+#
+
+# --- Command line
+refname="$1"
+oldrev="$2"
+newrev="$3"
+
+# --- Safety check
+if [ -z "$GIT_DIR" ]; then
+	echo "Don't run this script from the command line." >&2
+	echo " (if you want, you could supply GIT_DIR then run" >&2
+	echo "  $0 <ref> <oldrev> <newrev>)" >&2
+	exit 1
+fi
+
+if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
+	echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
+	exit 1
+fi
+
+# --- Config
+allowunannotated=$(git config --bool hooks.allowunannotated)
+allowdeletebranch=$(git config --bool hooks.allowdeletebranch)
+denycreatebranch=$(git config --bool hooks.denycreatebranch)
+allowdeletetag=$(git config --bool hooks.allowdeletetag)
+allowmodifytag=$(git config --bool hooks.allowmodifytag)
+
+# check for no description
+projectdesc=$(sed -e '1q' "$GIT_DIR/description")
+case "$projectdesc" in
+"Unnamed repository"* | "")
+	echo "*** Project description file hasn't been set" >&2
+	exit 1
+	;;
+esac
+
+# --- Check types
+# if $newrev is 0000...0000, it's a commit to delete a ref.
+zero="0000000000000000000000000000000000000000"
+if [ "$newrev" = "$zero" ]; then
+	newrev_type=delete
+else
+	newrev_type=$(git cat-file -t $newrev)
+fi
+
+case "$refname","$newrev_type" in
+	refs/tags/*,commit)
+		# un-annotated tag
+		short_refname=${refname##refs/tags/}
+		if [ "$allowunannotated" != "true" ]; then
+			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
+			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,delete)
+		# delete tag
+		if [ "$allowdeletetag" != "true" ]; then
+			echo "*** Deleting a tag is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/tags/*,tag)
+		# annotated tag
+		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
+		then
+			echo "*** Tag '$refname' already exists." >&2
+			echo "*** Modifying a tag is not allowed in this repository." >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,commit)
+		# branch
+		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
+			echo "*** Creating a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/heads/*,delete)
+		# delete branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	refs/remotes/*,commit)
+		# tracking branch
+		;;
+	refs/remotes/*,delete)
+		# delete tracking branch
+		if [ "$allowdeletebranch" != "true" ]; then
+			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
+			exit 1
+		fi
+		;;
+	*)
+		# Anything else (is there anything else?)
+		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
+		exit 1
+		;;
+esac
+
+# --- Finished
+exit 0

vim/bundle/neocomplcache/.git/index

Binary file added.

vim/bundle/neocomplcache/.git/info/exclude

+# git ls-files --others --exclude-from=.git/info/exclude
+# Lines that start with '#' are comments.
+# For a project mostly in C, the following would be a good set of
+# exclude patterns (uncomment them if you want to use them):
+# *.[oa]
+# *~

vim/bundle/neocomplcache/.git/logs/HEAD

+0000000000000000000000000000000000000000 d07eab982a4500fe4ec6a7ce51aa7322b14a6775 Adrian Fraiha <aef@catch-colt.com> 1335816748 -0400	clone: from https://github.com/Shougo/neocomplcache.git

vim/bundle/neocomplcache/.git/logs/refs/heads/master

+0000000000000000000000000000000000000000 d07eab982a4500fe4ec6a7ce51aa7322b14a6775 Adrian Fraiha <aef@catch-colt.com> 1335816748 -0400	clone: from https://github.com/Shougo/neocomplcache.git

vim/bundle/neocomplcache/.git/logs/refs/remotes/origin/HEAD

+0000000000000000000000000000000000000000 d07eab982a4500fe4ec6a7ce51aa7322b14a6775 Adrian Fraiha <aef@catch-colt.com> 1335816748 -0400	clone: from https://github.com/Shougo/neocomplcache.git

vim/bundle/neocomplcache/.git/objects/pack/pack-9d6166de4cb6f922610385d11f40952ca3f88b65.idx

Binary file added.

vim/bundle/neocomplcache/.git/objects/pack/pack-9d6166de4cb6f922610385d11f40952ca3f88b65.pack

Binary file added.

vim/bundle/neocomplcache/.git/packed-refs

+# pack-refs with: peeled 
+d07eab982a4500fe4ec6a7ce51aa7322b14a6775 refs/remotes/origin/master
+4b2a8ea37df8c9e4924ed9fc8101ae1b87cf8cce refs/tags/v2.34
+ab9b01b59e17c1313390750524cb397adaae6448 refs/tags/v2.43
+fab158214678443c6d8d2c904c9ead626a40d4b2 refs/tags/v2.44
+b8adf4bad10d0d111a9c04a77f4fef671e5ce1c8 refs/tags/v2.50
+d7f49cd1a33369d421e094b5395b147e00847ac5 refs/tags/v2.52
+218b257bc60911b4aeb17af94197142378d3c70e refs/tags/v2.55
+133b5776ef94e9dd245227a037cf26c6f3a7e8ab refs/tags/v2.56
+0efb7b7d1a339b3b432a9f9b876ee7fcf9b113f0 refs/tags/v2.58
+3069092e98da22cfa4ec52ec12f05268a5d57f6f refs/tags/v2.60
+1e274e8c2381c75bc550e8607a29ac049d2ca4bc refs/tags/v2.61
+0d481d730964ba4248b4a4ceb7518c34cadf5ca4 refs/tags/v2.62
+4ebca3eba43de1b24e5b214ad4ab317e61f49118 refs/tags/v2.63
+731b2ec2873aeb2d26e7fe04863057b2b76121df refs/tags/v2.64
+ba06a110b112a8a8018c9392df0b157fcca1fa26 refs/tags/v2.65
+ab101d811e68b404437d45de03801b993c184ec6 refs/tags/v2.66
+92c55d32feaf0f02a7d4a1e1fb86ba624ab83768 refs/tags/v2.67
+f473156deb1f3e9339f50b0ee60ff5391b792f01 refs/tags/v2.68
+96449f27beb32f035f1e115c8d9bb33bc32a11fc refs/tags/v2.69
+63dc37c488c052ca123acec394ec1514b9c406bb refs/tags/v2.70
+fd696237e5703d3ef8b52cf167a5c42ec569c9b2 refs/tags/v2.72
+f70ee6631615a200a8e4c5a86f809cac88df6a82 refs/tags/v2.73
+b384a7efd7b16c75cd72d1157f34b17c88d87fa3 refs/tags/v2.75
+95a04207c2af7062ea0f28ed3b5ab9b5ff64963a refs/tags/v2.76
+d574f9ee754546958551f6fc9e0e118091896286 refs/tags/v2.77
+8dcc2234334484240d4b3fd63900a03fde637982 refs/tags/v2.78
+9bb36c83fdb32ff866530e64a92f4b1de25749d1 refs/tags/v3.00
+8f8a68f4e41d17e95a2ea61ed08f7eaa5117af62 refs/tags/v3.01
+b1cb08869cb8aeb63a32f4faa3d8c96b52ece860 refs/tags/v3.02
+d89f471ae4b7dc50bd6970ec096e0837f0ddf417 refs/tags/v3.03
+e90a44260aac6f6d95ba38944cfec616e1e26b14 refs/tags/v3.04
+8308cc7e0618c8b3fcf819a25dfd3013fa0c1956 refs/tags/v3.06
+78862ad02a2cc4783a08ec07338248381e7b72da refs/tags/v3.07
+a3620483aad56d8eb1bdde2e3369d39980bd0525 refs/tags/v3.08
+6def6495ce267fcbb309bb61c3fb861fec512f6a refs/tags/v3.09
+81e42a5ba726e998fe772c6658d766d516af403d refs/tags/v3.10
+03fc9acd57642284a0010dc766d87f2faf5cf496 refs/tags/v3.11
+ec81c099e222ab4e66cf821f06e5ed2bcebe71d6 refs/tags/v3.12
+d565d5e1869c32efebadf84ba13799c49c835a41 refs/tags/v3.13
+ddf375429c769407e52f9779d744a3346947074c refs/tags/v3.14
+2919435019d10363ddd4e1f41e5ff3593dcac51e refs/tags/v3.15
+c01499ade7bda5ef161d59f98233621d8fd56aeb refs/tags/v3.16
+23c8da97a422d02387016339a2aa34803e6dc3a9 refs/tags/v3.17
+8ed0a4ef6dd90de01003d0395f28828e8536a46d refs/tags/v3.18
+5112c5e1933ab2e240d9ca7e8b4bcbd462dc0c2d refs/tags/v3.19
+b2c440ced4fee5ac76b30fc4ea1ed3a9a29aa542 refs/tags/v3.20
+3e76b91c577dc10a425d9fb2019c0fb7407f0644 refs/tags/v3.21
+314029e4516d8930c4a3a50cbf0d4af983a0aaff refs/tags/v3.22
+e6e58450008293f09565bc6b6efb9420c2f8d466 refs/tags/v4.00
+6998d061685ad0e314207b63b3956a09456d6af6 refs/tags/v4.01
+609dd04231b084b34fab2b1ec4962eb10ba80bdc refs/tags/v4.02
+651dfcdbb2730e2161695602a4234f7cbc7a8c99 refs/tags/v4.03
+e4ab47cfd0e716195240db49f7c8157f18256e08 refs/tags/v4.04
+7f0fca958c2eb54fbcd6d6817d7e55293c2b332e refs/tags/v4.05
+af471bdf0e0cb458767ce2e885acfaf81caa58ba refs/tags/v4.06
+0f07230bddd83ca94de7267ea236c4f46fec77b2 refs/tags/v4.07
+36339be5d7a6cefe8a0b8d4260eb9b6a7e2a5118 refs/tags/v4.08
+b196c187db44e1c9283c22739e558268322ad60f refs/tags/v4.09
+ef16cc3d518a74710082c9d0baa2cd829dd9f3b4 refs/tags/ver.4.10
+b7471ecdf34ed9b191433426a9e17c29ba4cde02 refs/tags/ver.4.20
+4ec0ce112688af26bb10b53f2423d79c9ddb2504 refs/tags/ver.4.30
+3c0e776cbe5874a40aad9b006c25c649709f4865 refs/tags/ver.5.0
+cfbaecc330763519bad2eeb55c4e410bdd206e70 refs/tags/ver.5.1
+8c2d1182f0be8daf77c3d3648fe5d860ffd60980 refs/tags/ver.5.2
+8a7c171b55b4bb6a1c95db1d6f79d1408e2e6e14 refs/tags/ver.6.0
+c149e02c33aa65e2e2bac6eb52d585ec2c3b56d5 refs/tags/ver.6.1
+b029b5f3b7f5af45457e5aa5bd0af24e169df300 refs/tags/ver.6.2

vim/bundle/neocomplcache/.git/refs/heads/master

+d07eab982a4500fe4ec6a7ce51aa7322b14a6775

vim/bundle/neocomplcache/.git/refs/remotes/origin/HEAD

+ref: refs/remotes/origin/master

vim/bundle/neocomplcache/.gitignore

+doc/tags*
+*.swp

vim/bundle/neocomplcache/README.md

+**neocomplcache**
+=================
+
+Description
+-----------
+
+Neocomplcache performs keyword completion by making a cache of keywords in
+a buffer. I implemented it because unlike the Vim builtin keyword completion,
+neocomplcache can be customized flexibly. Unfortunately, neocomplcache may use
+more memory than other plugins.
+
+Installation
+============
+
+* Extract the file and put files in your Vim directory
+   (usually ~/.vim/ or Program Files/Vim/vimfiles on Windows).
+* Execute `|:NeoComplCacheEnable|` command or
+`let g:neocomplcache_enable_at_startup = 1`
+in your .vimrc.
+
+Caution
+-------
+
+Because all variable names were changed in neocomplcache Ver.5, it is not
+backwards compatible. If you want to upgrade, you should use the following
+script from Mr.thinca.
+
+http://gist.github.com/422503
+
+Snippets feature(snippets\_complete source) was splitted from Ver.7.
+If you used it, please install snippets\_complete source manually.
+
+https://github.com/Shougo/neocomplcache-snippets-complete
+
+Screen shots
+============
+
+Quick match
+-----------
+![Quick match.](http://3.bp.blogspot.com/_ci2yBnqzJgM/TD1PeahCmOI/AAAAAAAAADc/Rz_Pbpr92z4/s1600/quick_match.png)
+
+Snippet completion like snipMate.
+---------------------------------
+![Snippet completion like snipMate.](http://s14.postimage.org/6m073xpwh/Screenshot2.png)
+
+Original filename completion.
+-----------
+![Original filename completion.](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1O5_bOQ2I/AAAAAAAAADE/vHf9Xg_mrTI/s1600/filename_complete.png)
+
+Register completion.
+-----------
+![Register completion.](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1Pel4fomI/AAAAAAAAADk/YsAxF8i6r3w/s1600/register_complete.png)
+
+Omni completion.
+----------------
+![Omni completion.](http://2.bp.blogspot.com/_ci2yBnqzJgM/TD1PTolkTBI/AAAAAAAAADU/knJ3eniuHWI/s1600/omni_complete.png)
+
+Completion with vimshell(http://github.com/Shougo/vimshell).
+------------------------------------------------------------
+![Completion with vimshell(http://github.com/Shougo/vimshell).](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1PLfdQrwI/AAAAAAAAADM/2pSFRTHwYOY/s1600/neocomplcache_with_vimshell.png)
+
+Vim completion
+------------------------------------------------------------
+![Vim completion.](http://1.bp.blogspot.com/_ci2yBnqzJgM/TD1PfKTlwnI/AAAAAAAAADs/nOGWTRLuae8/s1600/vim_complete.png)
+
+Setting examples
+
+```vim
+" Disable AutoComplPop.
+let g:acp_enableAtStartup = 0
+" Use neocomplcache.
+let g:neocomplcache_enable_at_startup = 1
+" Use smartcase.
+let g:neocomplcache_enable_smart_case = 1
+" Use camel case completion.
+let g:neocomplcache_enable_camel_case_completion = 1
+" Use underbar completion.
+let g:neocomplcache_enable_underbar_completion = 1
+" Set minimum syntax keyword length.
+let g:neocomplcache_min_syntax_length = 3
+let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'
+
+" Define dictionary.
+let g:neocomplcache_dictionary_filetype_lists = {
+    \ 'default' : '',
+    \ 'vimshell' : $HOME.'/.vimshell_hist',
+    \ 'scheme' : $HOME.'/.gosh_completions'
+    \ }
+
+" Define keyword.
+if !exists('g:neocomplcache_keyword_patterns')
+  let g:neocomplcache_keyword_patterns = {}
+endif
+let g:neocomplcache_keyword_patterns['default'] = '\h\w*'
+
+" Plugin key-mappings.
+imap <C-k>     <Plug>(neocomplcache_snippets_expand)
+smap <C-k>     <Plug>(neocomplcache_snippets_expand)
+inoremap <expr><C-g>     neocomplcache#undo_completion()
+inoremap <expr><C-l>     neocomplcache#complete_common_string()
+
+" SuperTab like snippets behavior.
+"imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"
+
+" Recommended key-mappings.
+" <CR>: close popup and save indent.
+inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
+" <TAB>: completion.
+inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
+" <C-h>, <BS>: close popup and delete backword char.
+inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
+inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
+inoremap <expr><C-y>  neocomplcache#close_popup()
+inoremap <expr><C-e>  neocomplcache#cancel_popup()
+
+" AutoComplPop like behavior.
+"let g:neocomplcache_enable_auto_select = 1
+
+" Shell like behavior(not recommended).
+"set completeopt+=longest
+"let g:neocomplcache_enable_auto_select = 1
+"let g:neocomplcache_disable_auto_complete = 1
+"inoremap <expr><TAB>  pumvisible() ? "\<Down>" : "\<TAB>"
+"inoremap <expr><CR>  neocomplcache#smart_close_popup() . "\<CR>"
+
+" Enable omni completion.
+autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
+autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
+autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
+autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
+autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags
+
+" Enable heavy omni completion.
+if !exists('g:neocomplcache_omni_patterns')
+  let g:neocomplcache_omni_patterns = {}
+endif
+let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
+"autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete
+let g:neocomplcache_omni_patterns.php = '[^. \t]->\h\w*\|\h\w*::'
+let g:neocomplcache_omni_patterns.c = '\%(\.\|->\)\h\w*'
+let g:neocomplcache_omni_patterns.cpp = '\h\w*\%(\.\|->\)\h\w*\|\h\w*::'
+```

vim/bundle/neocomplcache/autoload/neocomplcache.vim

+"=============================================================================
+" FILE: neocomplcache.vim
+" AUTHOR:  Shougo Matsushita <Shougo.Matsu@gmail.com>
+" Last Modified: 20 Apr 2012.
+" License: MIT license  {{{
+"     Permission is hereby granted, free of charge, to any person obtaining
+"     a copy of this software and associated documentation files (the
+"     "Software"), to deal in the Software without restriction, including
+"     without limitation the rights to use, copy, modify, merge, publish,
+"     distribute, sublicense, and/or sell copies of the Software, and to
+"     permit persons to whom the Software is furnished to do so, subject to
+"     the following conditions:
+"
+"     The above copyright notice and this permission notice shall be included
+"     in all copies or substantial portions of the Software.
+"
+"     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+"     OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+"     MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+"     IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+"     CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+"     TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+"     SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+" }}}
+" Version: 7.0, for Vim 7.2
+"=============================================================================
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+scriptencoding utf-8
+
+" Check vimproc.
+try
+  call vimproc#version()
+  let s:exists_vimproc = 1
+catch
+  let s:exists_vimproc = 0
+endtry
+
+if !exists('s:is_enabled')
+  let s:is_enabled = 0
+endif
+
+function! neocomplcache#enable() "{{{
+  " Auto commands."{{{
+  augroup neocomplcache
+    autocmd!
+    autocmd InsertLeave * call s:on_insert_leave()
+    autocmd CursorMovedI * call s:on_moved_i()
+  augroup END
+
+  if g:neocomplcache_enable_insert_char_pre
+        \ && (v:version > 703 || v:version == 703 && has('patch418'))
+    autocmd neocomplcache InsertCharPre *
+          \ call s:do_auto_complete('InsertCharPre')
+  elseif g:neocomplcache_enable_cursor_hold_i
+    augroup neocomplcache
+      autocmd CursorHoldI *
+            \ call s:do_auto_complete('CursorHoldI')
+      autocmd InsertEnter *
+            \ call s:change_update_time()
+      autocmd InsertLeave *
+            \ call s:restore_update_time()
+    augroup END
+  else
+    autocmd neocomplcache CursorMovedI *
+          \ call s:do_auto_complete('CursorMovedI')
+  endif
+  "}}}
+
+  " Initialize"{{{
+  let s:is_enabled = 1
+  let s:complfunc_sources = {}
+  let s:plugin_sources = {}
+  let s:ftplugin_sources = {}
+  let s:loaded_ftplugin_sources = {}
+  let s:complete_lock = {}
+  let s:sources_lock = {}
+  let s:auto_completion_length = {}
+  let s:cur_keyword_str = ''
+  let s:complete_words = []
+  let s:complete_results = {}
+  let s:old_cur_keyword_pos = -1
+  let s:cur_text = ''
+  let s:old_cur_text = ''
+  let s:moved_cur_text = ''
+  let s:changedtick = b:changedtick
+  let s:context_filetype = ''
+  let s:is_text_mode = 0
+  let s:within_comment = 0
+  let s:skip_next_complete = 0
+  let s:is_prefetch = 0
+  let s:use_sources = {}
+  let s:update_time_save = &updatetime
+  "}}}
+
+  " Initialize sources table."{{{
+  " Search autoload.
+  for file in split(globpath(&runtimepath, 'autoload/neocomplcache/sources/*.vim'), '\n')
+    let source_name = fnamemodify(file, ':t:r')
+    if !has_key(s:plugin_sources, source_name)
+          \ && neocomplcache#is_source_enabled(source_name)
+      let source = call('neocomplcache#sources#' . source_name . '#define', [])
+      if empty(source)
+        " Ignore.
+      elseif source.kind ==# 'complfunc'
+        let s:complfunc_sources[source_name] = source
+      elseif source.kind ==# 'ftplugin'
+        let s:ftplugin_sources[source_name] = source
+
+        " Clear loaded flag.
+        let s:ftplugin_sources[source_name].loaded = 0
+      elseif source.kind ==# 'plugin'
+            \ && neocomplcache#is_source_enabled('keyword_complete')
+        let s:plugin_sources[source_name] = source
+      endif
+    endif
+  endfor
+  "}}}
+
+  " Initialize keyword patterns."{{{
+  if !exists('g:neocomplcache_keyword_patterns')
+    let g:neocomplcache_keyword_patterns = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'default',
+        \'\k\+')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'filename',
+        \ neocomplcache#util#is_windows() ?
+        \'\%(\a\+:[/\\]\)\?[\\/[:alnum:]()$+_\~.-]\+' :
+        \'[/\[\][:alnum:]()$+_\~.-]\+')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'lisp,scheme,clojure,int-gosh,int-clisp,int-clj',
+        \'[[:alpha:]+*/@$_=.!?-][[:alnum:]+*/@$_:=.!?-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'ruby,int-irb',
+        \'^=\%(b\%[egin]\|e\%[nd]\)\|\%(@@\|[:$@]\)\h\w*\|\h\w*\%(::\w*\)*[!?]\?')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'php,int-php',
+        \'</\?\%(\h[[:alnum:]_-]*\s*\)\?\%(/\?>\)\?\|\$\h\w*\|\h\w*\%(\%(\\\|::\)\w*\)*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'perl,int-perlsh',
+        \'<\h\w*>\?\|[$@%&*]\h\w*\|\h\w*\%(::\w*\)*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'perl6,int-perl6',
+        \'<\h\w*>\?\|[$@%&][!.*?]\?\h[[:alnum:]_-]*\|\h[[:alnum:]_-]*\%(::[[:alnum:]_-]*\)*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'pir',
+        \'[$@%.=]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'pasm',
+        \'[=]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'vim,help',
+        \'-\h[[:alnum:]-]*=\?\|\c\[:\%(\h\w*:\]\)\?\|&\h[[:alnum:]_:]*\|'
+        \'<SID>\%(\h\w*\)\?\|<Plug>([^)]*)\?\|<\h[[:alnum:]_-]*>\?\|\h[[:alnum:]_:#]*!\?\|$\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'tex',
+        \'\\\a{\a\{1,2}}\|\\[[:alpha:]@][[:alnum:]@]*\%({\%([[:alnum:]:_]\+\*\?}\?\)\?\)\?\|\a[[:alnum:]:_]*\*\?')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'sh,zsh,int-zsh,int-bash,int-sh',
+        \'\$\w\+\|[[:alpha:]_.-][[:alnum:]_.-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'vimshell',
+        \'\$\$\?\w*\|[[:alpha:]_.\\/~-][[:alnum:]_.\\/~-]*\|\d\+\%(\.\d\+\)\+')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'ps1,int-powershell',
+        \'\[\h\%([[:alnum:]_.]*\]::\)\?\|[$%@.]\?[[:alpha:]_.:-][[:alnum:]_.:-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'c',
+        \'^\s*#\s*\h\w*\|\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'cpp',
+        \'^\s*#\s*\h\w*\|\h\w*\%(::\w*\)*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'objc',
+        \'^\s*#\s*\h\w*\|\h\w*\|@\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'objcpp',
+        \'^\s*#\s*\h\w*\|\h\w*\%(::\w*\)*\|@\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'objj',
+        \'\h\w*\|@\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'d',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'python,int-python,int-ipython',
+        \'[@]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'cs',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'java',
+        \'[@]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'javascript,actionscript,int-js,int-kjs,int-rhino',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'coffee,int-coffee',
+        \'[@]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'awk',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'haskell,int-ghci',
+        \'\%(\u\w*\.\)\+[[:alnum:]_'']*\|[[:alpha:]_''][[:alnum:]_'']*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'ml,ocaml,int-ocaml,int-sml,int-smlsharp',
+        \'[''`#.]\?\h[[:alnum:]_'']*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'erlang,int-erl',
+        \'^\s*-\h\w*\|\%(\h\w*:\)*\h\w\|\h[[:alnum:]_@]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'html,xhtml,xml,markdown,eruby',
+        \'</\?\%([[:alnum:]_:-]\+\s*\)\?\%(/\?>\)\?\|&\h\%(\w*;\)\?\|\h[[:alnum:]_-]*="\%([^"]*"\?\)\?\|\h[[:alnum:]_:-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'css,stylus',
+        \'[@#.]\?[[:alpha:]_:-][[:alnum:]_:-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'tags',
+        \'^[^!][^/[:blank:]]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'pic',
+        \'^\s*#\h\w*\|\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'arm',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'asmh8300',
+        \'[[:alpha:]_.][[:alnum:]_.]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'masm',
+        \'\.\h\w*\|[[:alpha:]_@?$][[:alnum:]_@?$]*\|\h\w*:\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'nasm',
+        \'^\s*\[\h\w*\|[%.]\?\h\w*\|\%(\.\.@\?\|%[%$!]\)\%(\h\w*\)\?\|\h\w*:\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'asm',
+        \'[%$.]\?\h\w*\%(\$\h\w*\)\?')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'gas',
+        \'[$.]\?\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'gdb,int-gdb',
+        \'$\h\w*\|[[:alnum:]:._-]\+')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'make',
+        \'[[:alpha:]_.-][[:alnum:]_.-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'scala,int-scala',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'int-termtter',
+        \'\h[[:alnum:]_/-]*\|\$\a\+\|#\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'int-earthquake',
+        \'[:#$]\h\w*\|\h[[:alnum:]_/-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'dosbatch,int-cmdproxy',
+        \'\$\w+\|[[:alpha:]_./-][[:alnum:]_.-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'vb',
+        \'\h\w*\|#\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'lua',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \ 'zimbu',
+        \'\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'konoha',
+        \'[*$@%]\h\w*\|\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'cobol',
+        \'\a[[:alnum:]-]*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'coq',
+        \'\h[[:alnum:]_'']*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'tcl',
+        \'[.-]\h\w*\|\h\w*')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_keyword_patterns,
+        \'nyaos,int-nyaos',
+        \'\h\w*')
+  "}}}
+
+  " Initialize next keyword patterns."{{{
+  if !exists('g:neocomplcache_next_keyword_patterns')
+    let g:neocomplcache_next_keyword_patterns = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'perl',
+        \'\h\w*>')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'perl6',
+        \'\h\w*>')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'vim,help',
+        \'\w*()\?\|\w*:\]\|[[:alnum:]_-]*[)>=]')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'python',
+        \'\w*()\?')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'tex',
+        \'[[:alnum:]:_]\+[*[{}]')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_next_keyword_patterns, 'html,xhtml,xml,mkd',
+        \'[[:alnum:]_:-]*>\|[^"]*"')
+  "}}}
+
+  " Initialize same file type lists."{{{
+  if !exists('g:neocomplcache_same_filetype_lists')
+    let g:neocomplcache_same_filetype_lists = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'c', 'cpp')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'cpp', 'c')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'erb', 'ruby,html,xhtml')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'html,xml', 'xhtml')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'html,xhtml', 'css,stylus')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'stylus', 'css')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'xhtml', 'html,xml')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'help', 'vim')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'tex', 'bib')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'lingr-say', 'lingr-messages,lingr-members')
+
+  " Interactive filetypes.
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-irb', 'ruby')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-ghci,int-hugs', 'haskell')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-python,int-ipython', 'python')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-gosh', 'scheme')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-clisp', 'lisp')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-erl', 'erlang')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-zsh', 'zsh')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-bash', 'bash')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-sh', 'sh')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-cmdproxy', 'dosbatch')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-powershell', 'powershell')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-perlsh', 'perl')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-perl6', 'perl6')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-ocaml', 'ocaml')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-clj', 'clojure')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-sml,int-smlsharp', 'sml')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-js,int-kjs,int-rhino', 'javascript')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-coffee', 'coffee')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-gdb', 'gdb')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-scala', 'scala')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-nyaos', 'nyaos')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_same_filetype_lists,
+        \ 'int-php', 'php')
+  "}}}
+
+  " Initialize context filetype lists."{{{
+  if exists('g:neocomplcache_filetype_include_lists')
+    let g:neocomplcache_context_filetype_lists =
+          \ g:neocomplcache_filetype_include_lists
+  endif
+  if !exists('g:neocomplcache_context_filetype_lists')
+    let g:neocomplcache_context_filetype_lists = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'c,cpp', [
+        \ {'filetype' : 'masm', 'start' : '_*asm_*\s\+\h\w*', 'end' : '$'},
+        \ {'filetype' : 'masm', 'start' : '_*asm_*\s*\%(\n\s*\)\?{', 'end' : '}'},
+        \ {'filetype' : 'gas', 'start' : '_*asm_*\s*\%(_*volatile_*\s*\)\?(', 'end' : ');'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'd', [
+        \ {'filetype' : 'masm', 'start' : 'asm\s*\%(\n\s*\)\?{', 'end' : '}'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'perl6', [
+        \ {'filetype' : 'pir', 'start' : 'Q:PIR\s*{', 'end' : '}'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'vimshell', [
+        \ {'filetype' : 'vim', 'start' : 'vexe \([''"]\)', 'end' : '\\\@<!\1'},
+        \ {'filetype' : 'vim', 'start' : ' :\w*', 'end' : '\n'},
+        \ {'filetype' : 'vim', 'start' : ' vexe\s\+', 'end' : '\n'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'eruby', [
+        \ {'filetype' : 'ruby', 'start' : '<%[=#]\?', 'end' : '%>'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'vim', [
+        \ {'filetype' : 'python', 'start' : '^\s*python3\? <<\s*\(\h\w*\)', 'end' : '^\1'},
+        \ {'filetype' : 'ruby', 'start' : '^\s*ruby <<\s*\(\h\w*\)', 'end' : '^\1'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'html,xhtml', [
+        \ {'filetype' : 'javascript', 'start' : '<script type="text/javascript">', 'end' : '</script>'},
+        \ {'filetype' : 'css', 'start' : '<style type="text/css">', 'end' : '</style>'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'python', [
+        \ {'filetype' : 'vim', 'start' : 'vim.command\s*(\([''"]\)', 'end' : '\\\@<!\1\s*)'},
+        \ {'filetype' : 'vim', 'start' : 'vim.eval\s*(\([''"]\)', 'end' : '\\\@<!\1\s*)'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'help', [
+        \ {'filetype' : 'vim', 'start' : '^>', 'end' : '^<'},
+        \])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_context_filetype_lists,
+        \ 'nyaos,int-nyaos', [
+        \ {'filetype' : 'lua', 'start' : '\<lua_e\s\+\(["'']\)', 'end' : '^\1'},
+        \])
+  "}}}
+
+  " Initialize delimiter patterns."{{{
+  if !exists('g:neocomplcache_delimiter_patterns')
+    let g:neocomplcache_delimiter_patterns = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'vim,help', ['#'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'erlang,lisp,int-clisp', [':'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'lisp,int-clisp', ['/', ':'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'clojure,int-clj', ['/', '\.'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'perl,cpp', ['::'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'php', ['\', '::'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'java,d,javascript,actionscript,ruby,eruby,haskell,int-ghci,coffee,zimbu,konoha',
+        \ ['\.'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'lua', ['\.', ':'])
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_delimiter_patterns,
+        \ 'perl6', ['\.', '::'])
+  "}}}
+
+  " Initialize ctags arguments."{{{
+  if !exists('g:neocomplcache_ctags_arguments_list')
+    let g:neocomplcache_ctags_arguments_list = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_ctags_arguments_list, 'default', '')
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_ctags_arguments_list, 'vim',
+        \"--extra=fq --fields=afmiKlnsStz --regex-vim='/function!? ([a-z#:_0-9A-Z]+)/\\1/function/'")
+  if !neocomplcache#is_windows() && (has('macunix') || system('uname') =~? '^darwin')
+    call neocomplcache#set_dictionary_helper(g:neocomplcache_ctags_arguments_list, 'c',
+          \'--c-kinds=+p --fields=+iaS --extra=+q -I__DARWIN_ALIAS,__DARWIN_ALIAS_C,__DARWIN_ALIAS_I,__DARWIN_INODE64
+          \ -I__DARWIN_1050,__DARWIN_1050ALIAS,__DARWIN_1050ALIAS_C,__DARWIN_1050ALIAS_I,__DARWIN_1050INODE64
+          \ -I__DARWIN_EXTSN,__DARWIN_EXTSN_C
+          \ -I__DARWIN_LDBL_COMPAT,__DARWIN_LDBL_COMPAT2')
+  else
+    call neocomplcache#set_dictionary_helper(g:neocomplcache_ctags_arguments_list, 'c',
+          \'-R --sort=1 --c-kinds=+p --fields=+iaS --extra=+q -I __wur')
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_ctags_arguments_list, 'cpp',
+        \'-R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q -I __wur --language-force=C++')
+  "}}}
+
+  " Initialize text mode filetypes."{{{
+  if !exists('g:neocomplcache_text_mode_filetypes')
+    let g:neocomplcache_text_mode_filetypes = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_text_mode_filetypes,
+        \ 'text,help,tex,gitcommit,vcs-commit', 1)
+  "}}}
+
+  " Initialize tags filter patterns."{{{
+  if !exists('g:neocomplcache_tags_filter_patterns')
+    let g:neocomplcache_tags_filter_patterns = {}
+  endif
+  call neocomplcache#set_dictionary_helper(g:neocomplcache_tags_filter_patterns, 'c,cpp', 
+        \'v:val.word !~ ''^[~_]''')
+  "}}}
+
+  " Add commands."{{{
+  command! -nargs=? Neco call s:display_neco(<q-args>)
+  command! -nargs=1 NeoComplCacheAutoCompletionLength call s:set_auto_completion_length(<args>)
+  "}}}
+
+  " Must g:neocomplcache_auto_completion_start_length > 1.
+  if g:neocomplcache_auto_completion_start_length < 1
+    let g:neocomplcache_auto_completion_start_length = 1
+  endif
+  " Must g:neocomplcache_min_keyword_length > 1.
+  if g:neocomplcache_min_keyword_length < 1
+    let g:neocomplcache_min_keyword_length = 1
+  endif
+
+  " Save options.
+  let s:completefunc_save = &completefunc
+  let s:completeopt_save = &completeopt
+
+  " Set completefunc.
+  let &completefunc = 'neocomplcache#manual_complete'
+  let &l:completefunc = 'neocomplcache#manual_complete'
+
+  " Set options.
+  set completeopt-=menu
+  set completeopt+=menuone
+
+  " For auto complete keymappings.
+  inoremap <expr><silent> <Plug>(neocomplcache_start_unite_complete)
+        \ unite#sources#neocomplcache#start_complete()
+  inoremap <expr><silent> <Plug>(neocomplcache_start_unite_quick_match)
+        \ unite#sources#neocomplcache#start_quick_match()
+  inoremap <expr><silent> <Plug>(neocomplcache_start_unite_snippet)
+        \ unite#sources#snippet#start_complete()
+
+  " Check if "vim" command is executable.
+  if neocomplcache#has_vimproc() && !executable('vim')
+    echoerr '"vim" command is not executable. Asynchronous caching is disabled.'
+    let s:exists_vimproc = 0
+  endif
+
+  " Initialize.
+  for source in values(neocomplcache#available_complfuncs())
+    if has_key(source, 'initialize')
+      call source.initialize()
+    endif
+  endfor
+endfunction"}}}
+
+function! neocomplcache#disable()"{{{
+  if !neocomplcache#is_enabled()
+    call neocomplcache#print_warning('neocomplcache is disabled! This command is ignored.')
+    return
+  endif
+
+  let s:is_enabled = 0
+
+  " Restore options.
+  let &completefunc = s:completefunc_save
+  let &completeopt = s:completeopt_save
+
+  augroup neocomplcache
+    autocmd!
+  augroup END
+
+  delcommand NeoComplCacheDisable
+  delcommand Neco
+  delcommand NeoComplCacheAutoCompletionLength
+
+  for source in values(neocomplcache#available_complfuncs())
+    if has_key(source, 'finalize')
+      call source.finalize()
+    endif
+  endfor
+  for source in values(neocomplcache#available_ftplugins())
+    if source.loaded
+      if has_key(source, 'finalize')
+        call source.finalize()
+      endif
+    endif
+  endfor
+endfunction"}}}
+
+function! neocomplcache#manual_complete(findstart, base)"{{{
+  if a:findstart
+    if !neocomplcache#is_enabled()
+      let s:cur_keyword_str = ''
+      let s:complete_words = []
+      let s:is_prefetch = 0
+      let &l:completefunc = 'neocomplcache#manual_complete'
+      return (g:neocomplcache_enable_prefetch
+            \ || g:neocomplcache_enable_insert_char_pre) ?
+            \ -1 : -3
+    endif
+
+    " Get cur_keyword_pos.
+    if s:is_prefetch && !empty(s:complete_results)
+      " Use prefetch results.
+    else
+      let s:complete_results =
+            \ neocomplcache#get_complete_results(s:get_cur_text())
+    endif
+    let cur_keyword_pos =
+          \ neocomplcache#get_cur_keyword_pos(s:complete_results)
+
+    if cur_keyword_pos < 0
+      let s:cur_keyword_str = ''
+      let s:complete_words = []
+      let s:is_prefetch = 0
+      let s:complete_results = {}
+      return (g:neocomplcache_enable_prefetch
+            \ || g:neocomplcache_enable_insert_char_pre) ?
+            \ -1 : -3
+    endif
+
+    return cur_keyword_pos
+  endif
+
+  let cur_keyword_pos = neocomplcache#get_cur_keyword_pos(s:complete_results)
+  let s:complete_words = neocomplcache#get_complete_words(
+          \ s:complete_results, 1, cur_keyword_pos, a:base)
+  let s:cur_keyword_str = a:base
+  let s:is_prefetch = 0
+
+  if v:version > 703 || v:version == 703 && has('patch418')
+    let dict = { 'words' : s:complete_words }
+
+    if g:neocomplcache_enable_cursor_hold_i
+      " Note: Vim Still have broken register-. problem.
+      let dict.refresh = 'always'
+    endif
+    return dict
+  else
+    return s:complete_words
+  endif
+endfunction"}}}
+
+function! neocomplcache#sources_manual_complete(findstart, base)"{{{
+  if a:findstart
+    if !neocomplcache#is_enabled()
+      let s:cur_keyword_str = ''
+      let s:complete_words = []
+      return -2
+    endif
+
+    " Get cur_keyword_pos.
+    let complete_results = neocomplcache#get_complete_results(
+          \ s:get_cur_text(), s:use_sources)
+    let cur_keyword_pos = neocomplcache#get_cur_keyword_pos(complete_results)
+
+    if cur_keyword_pos < 0
+      let s:cur_keyword_str = ''
+      let s:complete_words = []
+      let s:complete_results = {}
+
+      return -2
+    endif
+
+    let s:complete_results = complete_results
+
+    return cur_keyword_pos
+  endif
+
+  let cur_keyword_pos = neocomplcache#get_cur_keyword_pos(s:complete_results)
+  let complete_words = neocomplcache#get_complete_words(
+        \ s:complete_results, 1, cur_keyword_pos, a:base)
+
+  let s:complete_words = complete_words
+  let s:cur_keyword_str = a:base
+
+  return complete_words
+endfunction"}}}
+
+function! neocomplcache#auto_complete(findstart, base)"{{{
+  return neocomplcache#manual_complete(a:findstart, a:base)
+endfunction"}}}
+
+function! s:do_auto_complete(event)"{{{
+  if (&buftype !~ 'nofile\|nowrite' && b:changedtick == s:changedtick)
+        \ || g:neocomplcache_disable_auto_complete
+        \ || neocomplcache#is_locked()
+    return
+  endif
+
+  " Detect completefunc.
+  if &l:completefunc != 'neocomplcache#manual_complete'
+        \ && &l:completefunc != 'neocomplcache#auto_complete'
+    if g:neocomplcache_force_overwrite_completefunc
+          \ || &l:completefunc == ''
+          \ || &l:completefunc ==# 'neocomplcache#sources_manual_complete'
+      " Set completefunc.
+      let &l:completefunc = 'neocomplcache#manual_complete'
+    else
+      " Warning.
+      redir => output
+      99verbose setl completefunc
+      redir END
+      call neocomplcache#print_error(output)
+      call neocomplcache#print_error(
+            \ 'Another plugin set completefunc! Disabled neocomplcache.')
+      NeoComplCacheLock
+      return
+    endif
+  endif
+
+  " Detect AutoComplPop.
+  if exists('g:acp_enableAtStartup') && g:acp_enableAtStartup
+    call neocomplcache#print_error(
+          \ 'Detected enabled AutoComplPop! Disabled neocomplcache.')
+    NeoComplCacheLock
+    return
+  endif
+
+  " Detect set paste.
+  if &paste
+    redir => output
+      99verbose set paste
+    redir END
+    call neocomplcache#print_error(output)
+    call neocomplcache#print_error(
+          \ 'Detected set paste! Disabled neocomplcache.')
+    return
+  endif
+
+  " Get cursor word.
+  let cur_text = s:get_cur_text()
+  if a:event ==# 'InsertCharPre'
+    let cur_text .= v:char
+  endif
+
+  " Prevent infinity loop.
+  if cur_text == ''
+        \ || cur_text == s:old_cur_text
+        \ || (neocomplcache#is_eskk_enabled()
+        \            && cur_text !~ '▽')
+        \ || (!neocomplcache#is_eskk_enabled() &&
+        \      (exists('b:skk_on') && b:skk_on)
+        \     || char2nr(split(cur_text, '\zs')[-1]) > 0x80)
+    let s:cur_keyword_str = ''
+    let s:complete_words = []
+    return
+  endif
+
+  let s:old_cur_text = cur_text
+  if s:skip_next_complete
+    let s:skip_next_complete = 0
+    return
+  endif
+
+  let &l:completefunc = 'neocomplcache#auto_complete'
+
+  if g:neocomplcache_enable_prefetch
+        \ && !g:neocomplcache_enable_insert_char_pre
+    " Do prefetch.
+    let s:complete_results =
+          \ neocomplcache#get_complete_results(s:get_cur_text())
+
+    if empty(s:complete_results)
+      " Skip completion.
+      let &l:completefunc = 'neocomplcache#manual_complete'
+      let s:complete_words = []
+      let s:is_prefetch = 0
+      return
+    endif
+  endif
+
+  let s:is_prefetch = g:neocomplcache_enable_prefetch
+  let s:changedtick = b:changedtick
+
+  " Set options.
+  set completeopt-=menu
+  set completeopt-=longest
+  set completeopt+=menuone
+
+  " Start auto complete.
+  if g:neocomplcache_enable_prefetch || &l:formatoptions =~# 'a'
+    call feedkeys((g:neocomplcache_enable_auto_select ?
+          \ "\<C-x>\<C-u>\<C-p>\<Down>" :
+          \ "\<C-x>\<C-u>\<C-p>"), "n")
+  else
+    call feedkeys("\<C-x>\<C-u>"
+          \."\<C-r>=neocomplcache#popup_post()\<CR>", "n")
+  endif
+
+  let s:changedtick = b:changedtick
+endfunction"}}}
+
+" Source helper."{{{
+function! neocomplcache#available_complfuncs()"{{{
+  return s:complfunc_sources
+endfunction"}}}
+function! neocomplcache#available_ftplugins()"{{{
+  return s:ftplugin_sources
+endfunction"}}}
+function! neocomplcache#available_loaded_ftplugins()"{{{
+  return s:loaded_ftplugin_sources
+endfunction"}}}
+function! neocomplcache#available_plugins()"{{{
+  return s:plugin_sources
+endfunction"}}}
+function! neocomplcache#available_sources()"{{{
+  call s:set_context_filetype()
+  return extend(extend(copy(s:complfunc_sources), s:plugin_sources), s:loaded_ftplugin_sources)
+endfunction"}}}
+function! neocomplcache#keyword_escape(cur_keyword_str)"{{{
+  " Escape."{{{
+  let keyword_escape = escape(a:cur_keyword_str, '~" \.^$[]')
+  if g:neocomplcache_enable_wildcard
+    let keyword_escape = substitute(substitute(keyword_escape, '.\zs\*', '.*', 'g'), '\%(^\|\*\)\zs\*', '\\*', 'g')
+    if '-' !~ '\k'
+      let keyword_escape = substitute(keyword_escape, '.\zs-', '.\\+', 'g')
+    endif
+  else
+    let keyword_escape = escape(keyword_escape, '*')
+  endif"}}}
+
+  " Fuzzy completion.
+  let keyword_len = len(keyword_escape)
+  if g:neocomplcache_enable_fuzzy_completion
+        \ && (g:neocomplcache_fuzzy_completion_start_length
+        \          <= keyword_len && keyword_len < 20)
+    let fuzzy_start = g:neocomplcache_fuzzy_completion_start_length
+    if fuzzy_start <= 1
+      let keyword_escape =
+            \ substitute(keyword_escape, '\w',
+            \   '\\%(\0\\|\U\0\E\\l*\\|\0\\w*\\W\\)', 'g')
+    elseif keyword_len < 8
+      let keyword_escape = keyword_escape[: fuzzy_start - 2]
+            \ . substitute(keyword_escape[fuzzy_start-1 :], '\w',
+            \     '\\%(\0\\|\U\0\E\\l*\\|\0\\w*\\W\\)', 'g')
+    else
+      let keyword_escape = keyword_escape[: 3] .
+            \ substitute(keyword_escape[4:12], '\w',
+            \     '\\%(\0\\|\U\0\E\\l*\\|\0\\w*\\W\\)', 'g') . keyword_escape[13:]
+    endif
+  else
+    " Underbar completion."{{{
+    if g:neocomplcache_enable_underbar_completion
+          \ && keyword_escape =~ '_'
+      let keyword_escape_orig = keyword_escape
+      let keyword_escape = substitute(keyword_escape,
+            \ '[^_]\zs_', '[^_]*_', 'g')
+    endif
+    if g:neocomplcache_enable_underbar_completion
+          \ && '-' =~ '\k' && keyword_escape =~ '-'
+      let keyword_escape = substitute(keyword_escape,
+            \ '[^-]\zs-', '[^-]*-', 'g')
+    endif
+    "}}}
+    " Camel case completion."{{{
+    if g:neocomplcache_enable_camel_case_completion
+          \ && keyword_escape =~ '\u'
+      let keyword_escape = substitute(keyword_escape, '\u\?\zs\U*',
+            \ '\\%(\0\\l*\\|\U\0\E\\u*_\\?\\)', 'g')
+    endif
+    "}}}
+  endif
+
+  " echomsg keyword_escape
+  return keyword_escape
+endfunction"}}}
+function! neocomplcache#keyword_filter(list, cur_keyword_str)"{{{
+  let cur_keyword_str = a:cur_keyword_str
+
+  " Delimiter check.
+  let filetype = neocomplcache#get_context_filetype()
+  if has_key(g:neocomplcache_delimiter_patterns, filetype)"{{{
+    for delimiter in g:neocomplcache_delimiter_patterns[filetype]
+      let cur_keyword_str = substitute(cur_keyword_str,
+            \ delimiter, '*' . delimiter, 'g')
+    endfor
+  endif"}}}
+
+  if cur_keyword_str == ''
+    return a:list
+  elseif neocomplcache#check_match_filter(cur_keyword_str)
+    " Match filter.
+    let expr = printf('v:val.word =~ %s',
+          \ string('^' . neocomplcache#keyword_escape(cur_keyword_str)))
+    if neocomplcache#is_auto_complete()
+      " Don't complete cursor word.
+      let expr .= ' && v:val.word !=? a:cur_keyword_str'
+    endif
+
+    return filter(a:list, expr)
+  else
+    " Use fast filter.
+    return neocomplcache#head_filter(a:list, cur_keyword_str)
+  endif
+endfunction"}}}
+function! neocomplcache#dup_filter(list)"{{{
+  let dict = {}
+  for keyword in a:list
+    if !has_key(dict, keyword.word)
+      let dict[keyword.word] = keyword
+    endif
+  endfor
+
+  return values(dict)
+endfunction"}}}
+function! neocomplcache#check_match_filter(cur_keyword_str)"{{{
+  return neocomplcache#keyword_escape(a:cur_keyword_str) =~ '[^\\]\*\|\\+'
+endfunction"}}}
+function! neocomplcache#check_completion_length_match(cur_keyword_str, completion_length)"{{{
+  return neocomplcache#keyword_escape(
+        \ a:cur_keyword_str[: a:completion_length-1]) =~
+        \'[^\\]\*\|\\+\|\\%(\|\\|'
+endfunction"}}}
+function! neocomplcache#head_filter(list, cur_keyword_str)"{{{
+  if &ignorecase
+   let expr = printf('!stridx(tolower(v:val.word), %s)',
+          \ string(tolower(a:cur_keyword_str)))
+  else
+    let expr = printf('!stridx(v:val.word, %s)',
+          \ string(a:cur_keyword_str))
+  endif
+
+  if neocomplcache#is_auto_complete()
+    " Don't complete cursor word.
+    let expr .= ' && v:val.word !=? a:cur_keyword_str'
+  endif
+
+  return filter(a:list, expr)
+endfunction"}}}
+function! neocomplcache#fuzzy_filter(list, cur_keyword_str)"{{{
+  let ret = []
+
+  let cur_keyword_str = a:cur_keyword_str[2:]
+  let max_str2 = len(cur_keyword_str)
+  let len = len(a:cur_keyword_str)
+  let m = range(max_str2+1)
+  for keyword in filter(a:list, 'len(v:val.word) >= '.max_str2)
+    let str1 = keyword.word[2 : len-1]
+
+    let i = 0
+    while i <= max_str2+1
+      let m[i] = range(max_str2+1)
+
+      let i += 1
+    endwhile
+    let i = 0
+    while i <= max_str2+1
+      let m[i][0] = i
+      let m[0][i] = i
+
+      let i += 1
+    endwhile
+
+    let i = 1
+    let max = max_str2 + 1
+    while i < max
+      let j = 1
+      while j < max
+        let m[i][j] = min([m[i-1][j]+1, m[i][j-1]+1,
+              \ m[i-1][j-1]+(str1[i-1] != cur_keyword_str[j-1])])
+
+        let j += 1
+      endwhile
+
+      let i += 1
+    endwhile
+    if m[-1][-1] <= 2
+      call add(ret, keyword)
+    endif
+  endfor
+
+  return ret
+endfunction"}}}
+function! neocomplcache#dictionary_filter(dictionary, cur_keyword_str, completion_length)"{{{
+  if empty(a:dictionary)
+    return []
+  endif
+
+  if len(a:cur_keyword_str) < a:completion_length ||
+        \ neocomplcache#check_completion_length_match(
+        \   a:cur_keyword_str, a:completion_length)
+    return neocomplcache#keyword_filter(
+          \ neocomplcache#unpack_dictionary(a:dictionary), a:cur_keyword_str)
+  else
+    let key = tolower(a:cur_keyword_str[: a:completion_length-1])
+
+    if !has_key(a:dictionary, key)
+      return []
+    endif
+
+    let list = a:dictionary[key]
+    if type(list) == type({})
+      " Convert dictionary dictionary.
+      unlet list
+      let list = values(a:dictionary[key])
+    endif
+
+    return (len(a:cur_keyword_str) == a:completion_length && &ignorecase)?
+          \ list : neocomplcache#keyword_filter(copy(list), a:cur_keyword_str)
+  endif
+endfunction"}}}
+function! neocomplcache#unpack_dictionary(dict)"{{{
+  let ret = []
+  for l in values(a:dict)
+    let ret += type(l) == type([]) ? l : values(l)
+  endfor
+
+  return ret
+endfunction"}}}
+function! neocomplcache#add_dictionaries(dictionaries)"{{{
+  if empty(a:dictionaries)
+    return {}
+  endif
+
+  let ret = a:dictionaries[0]
+  for dict in a:dictionaries[1:]
+    for [key, value] in items(dict)
+      if has_key(ret, key)
+        let ret[key] += value
+      else
+        let ret[key] = value
+      endif
+    endfor
+  endfor
+
+  return ret
+endfunction"}}}
+
+" RankOrder."{{{
+function! neocomplcache#compare_rank(i1, i2)
+  let diff = a:i2.rank - a:i1.rank
+  if !diff
+    let diff = (a:i1.word ># a:i2.word) ? 1 : -1
+  endif
+  return diff
+endfunction"}}}
+" PosOrder."{{{
+function! s:compare_pos(i1, i2)
+  return a:i1[0] == a:i2[0] ? a:i1[1] - a:i2[1] : a:i1[0] - a:i2[0]
+endfunction"}}}
+
+function! neocomplcache#rand(max)"{{{
+  if !has('reltime')
+