Index: tches/coreutils-5.97-suppress_uptime_kill_su-1.patch
===================================================================
--- patches/coreutils-5.97-suppress_uptime_kill_su-1.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,272 +1,0 @@
-Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
-Date: 2006-03-15
-Initial Package Version: 5.94
-Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly)
-Upstream Status: N/A
-Description: This patch supresses the building of uptime, and kill.  The su
-command is built so the testsuite can run, use './src/su', but it will not
-be installed. Also see:
-           http://www.linuxfromscratch.org/patches/downloads/coreutils/
-           coreutils-5.0-dupes-2.patch
-
-diff -Naur coreutils-5.94.orig/AUTHORS coreutils-5.94/AUTHORS
---- coreutils-5.94.orig/AUTHORS	2004-11-03 23:10:50.000000000 +0000
-+++ coreutils-5.94/AUTHORS	2006-03-15 22:20:49.000000000 +0000
-@@ -34,7 +34,6 @@
- hostname: Jim Meyering
- id: Arnold Robbins, David MacKenzie
- join: Mike Haertel
--kill: Paul Eggert
- link: Michael Stone
- ln: Mike Parker, David MacKenzie
- logname: FIXME: unknown
-@@ -83,7 +82,6 @@
- unexpand: David MacKenzie
- uniq: Richard Stallman, David MacKenzie
- unlink: Michael Stone
--uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
- users: Joseph Arceneaux, David MacKenzie
- vdir: Richard Stallman, David MacKenzie
- wc: Paul Rubin, David MacKenzie
-diff -Naur coreutils-5.94.orig/Makefile.in coreutils-5.94/Makefile.in
---- coreutils-5.94.orig/Makefile.in	2006-02-13 12:52:03.000000000 +0000
-+++ coreutils-5.94/Makefile.in	2006-03-15 22:20:49.000000000 +0000
-@@ -148,7 +148,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-diff -Naur coreutils-5.94.orig/README coreutils-5.94/README
---- coreutils-5.94.orig/README	2005-09-28 18:34:26.000000000 +0000
-+++ coreutils-5.94/README	2006-03-15 22:20:49.000000000 +0000
-@@ -9,11 +9,11 @@
- 
-   [ basename cat chgrp chmod chown chroot cksum comm cp csplit cut date dd
-   df dir dircolors dirname du echo env expand expr factor false fmt fold
--  ginstall groups head hostid hostname id join kill link ln logname ls
-+  ginstall groups head hostid hostname id join link ln logname ls
-   md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
-   printenv printf ptx pwd readlink rm rmdir seq sha1sum shred sleep sort
-   split stat stty su sum sync tac tail tee test touch tr true tsort tty
--  uname unexpand uniq unlink uptime users vdir wc who whoami yes
-+  uname unexpand uniq unlink users vdir wc who whoami yes
- 
- See the file NEWS for a list of major changes in the current release.
- 
-diff -Naur coreutils-5.94.orig/configure coreutils-5.94/configure
---- coreutils-5.94.orig/configure	2006-02-13 12:52:04.000000000 +0000
-+++ coreutils-5.94/configure	2006-03-15 22:20:49.000000000 +0000
-@@ -50418,8 +50418,7 @@
- { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5
- echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; }
-   if test $gnulib_cv_have_boot_time = yes; then
--  OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
--  MAN="$MAN uptime.1"
-+echo "uptime is suppressed"
- fi
- 
- 
-diff -Naur coreutils-5.94.orig/man/Makefile.in coreutils-5.94/man/Makefile.in
---- coreutils-5.94.orig/man/Makefile.in	2006-02-13 12:51:58.000000000 +0000
-+++ coreutils-5.94/man/Makefile.in	2006-03-15 22:20:50.000000000 +0000
-@@ -142,7 +142,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -303,13 +303,13 @@
-   basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \
-   cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \
-   echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \
--  head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \
-+  head.1 hostid.1 hostname.1 id.1 install.1 join.1 \
-   link.1 ln.1 logname.1 \
-   ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \
-   paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \
-   rm.1 rmdir.1 seq.1 sha1sum.1 shred.1 sleep.1 sort.1 split.1 stat.1 stty.1 \
--  su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
--  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \
-+  sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
-+  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \
-   who.1 whoami.1 yes.1
- 
- man_aux = $(dist_man_MANS:.1=.x)
-@@ -575,7 +575,6 @@
- id.1:		$(common_dep)	$(srcdir)/id.x		../src/id.c
- install.1:	$(common_dep)	$(srcdir)/install.x	../src/install.c
- join.1:		$(common_dep)	$(srcdir)/join.x	../src/join.c
--kill.1:		$(common_dep)	$(srcdir)/kill.x	../src/kill.c
- link.1:		$(common_dep)	$(srcdir)/link.x	../src/link.c
- ln.1:		$(common_dep)	$(srcdir)/ln.x		../src/ln.c
- logname.1:	$(common_dep)	$(srcdir)/logname.x	../src/logname.c
-@@ -608,7 +607,6 @@
- split.1:	$(common_dep)	$(srcdir)/split.x	../src/split.c
- stat.1:		$(common_dep)	$(srcdir)/stat.x	../src/stat.c
- stty.1:		$(common_dep)	$(srcdir)/stty.x	../src/stty.c
--su.1:		$(common_dep)	$(srcdir)/su.x		../src/su.c
- sum.1:		$(common_dep)	$(srcdir)/sum.x		../src/sum.c
- sync.1:		$(common_dep)	$(srcdir)/sync.x	../src/sync.c
- tac.1:		$(common_dep)	$(srcdir)/tac.x		../src/tac.c
-@@ -624,7 +622,6 @@
- unexpand.1:	$(common_dep)	$(srcdir)/unexpand.x	../src/unexpand.c
- uniq.1:		$(common_dep)	$(srcdir)/uniq.x	../src/uniq.c
- unlink.1:	$(common_dep)	$(srcdir)/unlink.x	../src/unlink.c
--uptime.1:	$(common_dep)	$(srcdir)/uptime.x	../src/uptime.c
- users.1:	$(common_dep)	$(srcdir)/users.x	../src/users.c
- vdir.1:		$(common_dep)	$(srcdir)/vdir.x	../src/ls.c
- wc.1:		$(common_dep)	$(srcdir)/wc.x		../src/wc.c
-@@ -656,7 +653,7 @@
- check-x-vs-1:
- 	PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH;		\
- 	t=ls-files.$$$$;						\
--	(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
-+	(cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\
- 	echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//'	\
- 	  | $(ASSORT) | diff - $$t || { rm $$t; exit 1; };		\
- 	rm $$t
-diff -Naur coreutils-5.94.orig/src/Makefile.in coreutils-5.94/src/Makefile.in
---- coreutils-5.94.orig/src/Makefile.in	2006-02-13 13:08:11.000000000 +0000
-+++ coreutils-5.94/src/Makefile.in	2006-03-15 22:20:50.000000000 +0000
-@@ -39,7 +39,7 @@
- host_triplet = @host@
- EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \
- 	nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \
--	uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
-+	uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
- bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \
- 	cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \
- 	ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \
-@@ -56,7 +56,7 @@
- 	uniq$(EXEEXT) wc$(EXEEXT) basename$(EXEEXT) date$(EXEEXT) \
- 	dirname$(EXEEXT) echo$(EXEEXT) env$(EXEEXT) expr$(EXEEXT) \
- 	factor$(EXEEXT) false$(EXEEXT) hostname$(EXEEXT) id$(EXEEXT) \
--	kill$(EXEEXT) logname$(EXEEXT) pathchk$(EXEEXT) \
-+	logname$(EXEEXT) pathchk$(EXEEXT) \
- 	printenv$(EXEEXT) printf$(EXEEXT) pwd$(EXEEXT) seq$(EXEEXT) \
- 	sleep$(EXEEXT) tee$(EXEEXT) test$(EXEEXT) true$(EXEEXT) \
- 	tty$(EXEEXT) whoami$(EXEEXT) yes$(EXEEXT) $(am__EXEEXT_1) \
-@@ -169,7 +169,7 @@
- 	$(top_srcdir)/m4/ullong_max.m4 $(top_srcdir)/m4/ulonglong.m4 \
- 	$(top_srcdir)/m4/unicodeio.m4 $(top_srcdir)/m4/unistd-safer.m4 \
- 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
--	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
-+	$(top_srcdir)/m4/unlocked-io.m4 \
- 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
- 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
- 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
-@@ -350,11 +350,6 @@
- join_LDADD = $(LDADD)
- join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
- 	../lib/libcoreutils.a
--kill_SOURCES = kill.c
--kill_OBJECTS = kill.$(OBJEXT)
--kill_LDADD = $(LDADD)
--kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
--	../lib/libcoreutils.a
- link_SOURCES = link.c
- link_OBJECTS = link.$(OBJEXT)
- link_LDADD = $(LDADD)
-@@ -577,9 +572,6 @@
- unlink_LDADD = $(LDADD)
- unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
- 	../lib/libcoreutils.a
--uptime_SOURCES = uptime.c
--uptime_OBJECTS = uptime.$(OBJEXT)
--uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1)
- users_SOURCES = users.c
- users_OBJECTS = users.$(OBJEXT)
- users_LDADD = $(LDADD)
-@@ -622,28 +614,28 @@
- 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
- 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
- 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
- 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
- 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
- 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
- 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
- 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
- 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
- 	wc.c who.c whoami.c yes.c
- DIST_SOURCES = $(__SOURCES) basename.c cat.c $(chgrp_SOURCES) chmod.c \
- 	$(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \
- 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
- 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
- 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
--	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
-+	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
- 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
- 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
- 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
- 	rmdir.c seq.c setuidgid.c $(sha1sum_SOURCES) shred.c sleep.c \
- 	sort.c split.c stat.c stty.c su.c sum.c sync.c tac.c tail.c \
- 	tee.c test.c touch.c tr.c true.c tsort.c tty.c uname.c \
--	unexpand.c uniq.c unlink.c uptime.c users.c $(vdir_SOURCES) \
-+	unexpand.c uniq.c unlink.c users.c $(vdir_SOURCES) \
- 	wc.c who.c whoami.c yes.c
- HEADERS = $(noinst_HEADERS)
- ETAGS = etags
-@@ -840,7 +832,6 @@
- nanosec_libs = $(LDADD) $(POW_LIB) $(LIB_NANOSLEEP)
- sleep_LDADD = $(nanosec_libs)
- tail_LDADD = $(nanosec_libs)
--uptime_LDADD = $(LDADD) $(GETLOADAVG_LIBS)
- su_LDADD = $(LDADD) $(LIB_CRYPT)
- SUFFIXES = .sh
- installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
-@@ -1076,9 +1067,6 @@
- join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) 
- 	@rm -f join$(EXEEXT)
- 	$(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS)
--kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) 
--	@rm -f kill$(EXEEXT)
--	$(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
- link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) 
- 	@rm -f link$(EXEEXT)
- 	$(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS)
-@@ -1226,9 +1214,6 @@
- unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) 
- 	@rm -f unlink$(EXEEXT)
- 	$(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS)
--uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) 
--	@rm -f uptime$(EXEEXT)
--	$(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS)
- users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) 
- 	@rm -f users$(EXEEXT)
- 	$(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS)
-@@ -1322,7 +1307,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@
-@@ -1378,7 +1362,6 @@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
--@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@
-@@ -1606,7 +1589,7 @@
- 	  && can_create_suid_root_executable=yes; \
- 	rm -f $$TMPFILE; \
- 	if test $$can_create_suid_root_executable = yes; then \
--	  $(INSTALL_SU); \
-+	  echo "Installation of su is suppressed"; \
- 	else \
- 	  echo "WARNING: insufficient access; not installing su"; \
- 	  echo "NOTE: to install su, run 'make install-root' as root"; \
Index: tches/coreutils-5.97-uname-2.patch
===================================================================
--- patches/coreutils-5.97-uname-2.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,161 +1,0 @@
-Submitted By: Jim Gifford <jim at linuxfromscratch dot org>
-Date: 2006-08-24
-Initial Package Version: 5.97
-Upstream Status: Not Accepted
-Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils
-Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo
-
-Original Patch by - Matthew Burgess and Scot McPherson
-
-diff -Naur coreutils-5.97.orig/src/uname.c coreutils-5.97/src/uname.c
---- coreutils-5.97.orig/src/uname.c	2005-09-15 12:57:04.000000000 -0700
-+++ coreutils-5.97/src/uname.c	2006-08-24 15:52:53.000000000 -0700
-@@ -51,6 +51,11 @@
- # include <mach-o/arch.h>
- #endif
- 
-+#if defined (__linux__)
-+# define USE_PROCINFO
-+# define UNAME_HARDWARE_PLATFORM
-+#endif
-+
- #include "system.h"
- #include "error.h"
- #include "quote.h"
-@@ -138,6 +143,106 @@
-   exit (status);
- }
- 
-+#if defined(USE_PROCINFO)
-+
-+# if defined(__s390__) || defined(__s390x__)
-+#  define CPUINFO_FILE    "/proc/sysinfo"
-+#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c"
-+# else
-+#  define CPUINFO_FILE    "/proc/cpuinfo"
-+#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c"
-+# endif
-+
-+# define PROCINFO_PROCESSOR      0
-+# define PROCINFO_HARDWARE_PLATFORM 1
-+
-+static void __eat_cpuinfo_space(char *buf)
-+{
-+	/* first eat trailing space */
-+	char *tmp = buf + strlen(buf) - 1;
-+	while (tmp > buf && isspace(*tmp))
-+		*tmp-- = '\0';
-+	/* then eat leading space */
-+	tmp = buf;
-+	while (*tmp && isspace(*tmp))
-+		tmp++;
-+	if (tmp != buf)
-+		memmove(buf, tmp, strlen(tmp)+1);
-+}
-+
-+static int __linux_procinfo (int x, char *fstr, size_t s)
-+{
-+	FILE *fp;
-+
-+	char *procinfo_keys[] = {
-+		/* --processor --hardware-platform */
-+		#if defined(__alpha__)
-+			"cpu model", "system type"
-+		#elif defined(__arm__)
-+			"Processor", "Hardware"
-+		#elif defined(bfin)
-+			"CPU", "BOARD Name"
-+		#elif defined(__cris__)
-+			"cpu", "cpu model"
-+		#elif defined(__frv__)
-+			"CPU-Core", "System"
-+		#elif defined(__i386__) || defined(__x86_64__)
-+			"model name", "vendor_id"
-+		#elif defined(__ia64__)
-+			"family", "vendor"
-+		#elif defined(__hppa__)
-+			"cpu", "model"
-+		#elif defined(__m68k__)
-+			"CPU", "MMU"
-+		#elif defined(__mips__)
-+			"cpu model", "system type"
-+		#elif defined(__powerpc__) || defined(__powerpc64__)
-+			"cpu", "machine"
-+		#elif defined(__s390__) || defined(__s390x__)
-+			"Type", "Manufacturer"
-+		#elif defined(__sh__)
-+			"cpu type", "machine"
-+		#elif defined(sparc) || defined(__sparc__)
-+			"type", "cpu"
-+		#elif defined(__vax__)
-+			"cpu type", "cpu"
-+		#else
-+			"unknown", "unknown"
-+		#endif
-+	};
-+
-+	if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
-+		char key[65], value[257], eol, *ret = NULL;
-+
-+		while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
-+			__eat_cpuinfo_space(key);
-+			if (!strcmp(key, procinfo_keys[x])) {
-+				__eat_cpuinfo_space(value);
-+				ret = value;
-+				break;
-+			}
-+			if (eol != '\n') {
-+				/* we need two fscanf's here in case the previous
-+				 * length limit caused us to read right up to the
-+				 * newline ... doing "%*[^\n]\n" wont eat the newline
-+				 */
-+				fscanf(fp, "%*[^\n]");
-+				fscanf(fp, "\n");
-+			}
-+		}
-+		fclose(fp);
-+
-+		if (ret) {
-+			strncpy(fstr, ret, s);
-+			return 0;
-+		}
-+	}
-+
-+	return -1;
-+}
-+
-+#endif
-+
- /* Print ELEMENT, preceded by a space if something has already been
-    printed.  */
- 
-@@ -250,10 +355,14 @@
-   if (toprint & PRINT_PROCESSOR)
-     {
-       char const *element = unknown;
--#if HAVE_SYSINFO && defined SI_ARCHITECTURE
-+#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
-       {
- 	static char processor[257];
-+#if defined(USE_PROCINFO)
-+	if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
-+#else
- 	if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
-+#endif
- 	  element = processor;
-       }
- #endif
-@@ -306,9 +415,13 @@
-       if (element == unknown)
- 	{
- 	  static char hardware_platform[257];
-+#if defined(USE_PROCINFO)
-+	  if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
-+#else
- 	  size_t s = sizeof hardware_platform;
- 	  static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
- 	  if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
-+#endif
- 	    element = hardware_platform;
- 	}
- #endif
Index: patches/coreutils-6.3-suppress_uptime_kill_su-1.patch
===================================================================
--- patches/coreutils-6.3-suppress_uptime_kill_su-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
+++ patches/coreutils-6.3-suppress_uptime_kill_su-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
@@ -0,0 +1,276 @@
+Submitted By: Matthew Burgess <matthew at linuxfromscratch dot org>
+Date: 2006-03-15
+Initial Package Version: 5.94
+Origin: original suppress_hotname_uptame_kill_su patch (Robert Connolly)
+Upstream Status: N/A
+Description: This patch supresses the building of uptime, and kill.  The su
+command is built so the testsuite can run, use './src/su', but it will not
+be installed. Also see:
+           http://www.linuxfromscratch.org/patches/downloads/coreutils/
+           coreutils-5.0-dupes-2.patch
+
+diff -Naur coreutils-6.3.orig/AUTHORS coreutils-6.3/AUTHORS
+--- coreutils-6.3.orig/AUTHORS	2006-08-09 00:42:31.000000000 -0700
++++ coreutils-6.3/AUTHORS	2006-09-30 11:53:24.000000000 -0700
+@@ -35,7 +35,6 @@
+ hostname: Jim Meyering
+ id: Arnold Robbins, David MacKenzie
+ join: Mike Haertel
+-kill: Paul Eggert
+ link: Michael Stone
+ ln: Mike Parker, David MacKenzie
+ logname: FIXME: unknown
+@@ -89,7 +88,6 @@
+ unexpand: David MacKenzie
+ uniq: Richard Stallman, David MacKenzie
+ unlink: Michael Stone
+-uptime: Joseph Arceneaux, David MacKenzie, Kaveh Ghazi
+ users: Joseph Arceneaux, David MacKenzie
+ vdir: Richard Stallman, David MacKenzie
+ wc: Paul Rubin, David MacKenzie
+diff -Naur coreutils-6.3.orig/configure coreutils-6.3/configure
+--- coreutils-6.3.orig/configure	2006-09-30 02:09:13.000000000 -0700
++++ coreutils-6.3/configure	2006-09-30 11:53:24.000000000 -0700
+@@ -58175,8 +58175,7 @@
+ { echo "$as_me:$LINENO: result: $gnulib_cv_have_boot_time" >&5
+ echo "${ECHO_T}$gnulib_cv_have_boot_time" >&6; }
+   if test $gnulib_cv_have_boot_time = yes; then
+-  OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uptime\$(EXEEXT)"
+-  MAN="$MAN uptime.1"
++echo "uptime is suppressed"
+ fi
+ 
+ 
+diff -Naur coreutils-6.3.orig/Makefile.in coreutils-6.3/Makefile.in
+--- coreutils-6.3.orig/Makefile.in	2006-09-30 02:09:28.000000000 -0700
++++ coreutils-6.3/Makefile.in	2006-09-30 11:53:24.000000000 -0700
+@@ -179,7 +179,7 @@
+ 	$(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unicodeio.m4 \
+ 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+diff -Naur coreutils-6.3.orig/man/Makefile.in coreutils-6.3/man/Makefile.in
+--- coreutils-6.3.orig/man/Makefile.in	2006-09-30 02:09:23.000000000 -0700
++++ coreutils-6.3/man/Makefile.in	2006-09-30 11:56:34.000000000 -0700
+@@ -174,7 +174,7 @@
+ 	$(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unicodeio.m4 \
+ 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+@@ -377,14 +377,14 @@
+   base64.1 basename.1 cat.1 chgrp.1 chmod.1 chown.1 chroot.1 cksum.1 comm.1 \
+   cp.1 csplit.1 cut.1 date.1 dd.1 df.1 dir.1 dircolors.1 dirname.1 du.1 \
+   echo.1 env.1 expand.1 expr.1 factor.1 false.1 fmt.1 fold.1 groups.1 \
+-  head.1 hostid.1 hostname.1 id.1 install.1 join.1 kill.1 \
++  head.1 hostid.1 hostname.1 id.1 install.1 join.1 \
+   link.1 ln.1 logname.1 \
+   ls.1 md5sum.1 mkdir.1 mkfifo.1 mknod.1 mv.1 nice.1 nl.1 nohup.1 od.1 \
+   paste.1 pathchk.1 pinky.1 pr.1 printenv.1 printf.1 ptx.1 pwd.1 readlink.1 \
+   rm.1 rmdir.1 seq.1 sha1sum.1 sha224sum.1 sha256sum.1 sha384sum.1 sha512sum.1 \
+   shred.1 shuf.1 sleep.1 sort.1 split.1 stat.1 stty.1 \
+-  su.1 sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
+-  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 uptime.1 users.1 vdir.1 wc.1 \
++  sum.1 sync.1 tac.1 tail.1 tee.1 test.1 touch.1 tr.1 true.1 tsort.1 \
++  tty.1 uname.1 unexpand.1 uniq.1 unlink.1 users.1 vdir.1 wc.1 \
+   who.1 whoami.1 yes.1
+ 
+ man_aux = $(dist_man_MANS:.1=.x)
+@@ -651,7 +651,6 @@
+ id.1:		$(common_dep)	$(srcdir)/id.x		../src/id.c
+ install.1:	$(common_dep)	$(srcdir)/install.x	../src/install.c
+ join.1:		$(common_dep)	$(srcdir)/join.x	../src/join.c
+-kill.1:		$(common_dep)	$(srcdir)/kill.x	../src/kill.c
+ link.1:		$(common_dep)	$(srcdir)/link.x	../src/link.c
+ ln.1:		$(common_dep)	$(srcdir)/ln.x		../src/ln.c
+ logname.1:	$(common_dep)	$(srcdir)/logname.x	../src/logname.c
+@@ -689,7 +688,6 @@
+ split.1:	$(common_dep)	$(srcdir)/split.x	../src/split.c
+ stat.1:		$(common_dep)	$(srcdir)/stat.x	../src/stat.c
+ stty.1:		$(common_dep)	$(srcdir)/stty.x	../src/stty.c
+-su.1:		$(common_dep)	$(srcdir)/su.x		../src/su.c
+ sum.1:		$(common_dep)	$(srcdir)/sum.x		../src/sum.c
+ sync.1:		$(common_dep)	$(srcdir)/sync.x	../src/sync.c
+ tac.1:		$(common_dep)	$(srcdir)/tac.x		../src/tac.c
+@@ -705,7 +703,6 @@
+ unexpand.1:	$(common_dep)	$(srcdir)/unexpand.x	../src/unexpand.c
+ uniq.1:		$(common_dep)	$(srcdir)/uniq.x	../src/uniq.c
+ unlink.1:	$(common_dep)	$(srcdir)/unlink.x	../src/unlink.c
+-uptime.1:	$(common_dep)	$(srcdir)/uptime.x	../src/uptime.c
+ users.1:	$(common_dep)	$(srcdir)/users.x	../src/users.c
+ vdir.1:		$(common_dep)	$(srcdir)/vdir.x	../src/ls.c
+ wc.1:		$(common_dep)	$(srcdir)/wc.x		../src/wc.c
+@@ -737,7 +734,7 @@
+ check-x-vs-1:
+ 	PATH=../src$(PATH_SEPARATOR)$$PATH; export PATH;		\
+ 	t=ls-files.$$$$;						\
+-	(cd $(srcdir) && ls -1 *.x) | sed 's/\.x$$//' | $(ASSORT) > $$t;\
++	(cd $(srcdir) && ls -1 *.x) | grep -v -e 'kill.x' -e 'su.x' -e 'uptime.x' | sed 's/\.x$$//' | $(ASSORT) > $$t;\
+ 	echo $(dist_man_MANS) | tr -s ' ' '\n' | sed 's/\.1$$//'	\
+ 	  | $(ASSORT) | diff - $$t || { rm $$t; exit 1; };		\
+ 	rm $$t
+diff -Naur coreutils-6.3.orig/README coreutils-6.3/README
+--- coreutils-6.3.orig/README	2006-09-26 06:02:57.000000000 -0700
++++ coreutils-6.3/README	2006-09-30 11:54:45.000000000 -0700
+@@ -9,11 +9,11 @@
+ 
+   [ base64 basename cat chgrp chmod chown chroot cksum comm cp csplit cut date
+   dd df dir dircolors dirname du echo env expand expr factor false fmt fold
+-  ginstall groups head hostid hostname id join kill link ln logname ls
++  ginstall groups head hostid hostname id join link ln logname ls
+   md5sum mkdir mkfifo mknod mv nice nl nohup od paste pathchk pinky pr
+   printenv printf ptx pwd readlink rm rmdir seq sha1sum sha224sum sha256sum
+   sha384sum sha512sum shred shuf sleep sort split stat stty su sum sync tac
+-  tail tee test touch tr true tsort tty uname unexpand uniq unlink uptime
++  tail tee test touch tr true tsort tty uname unexpand uniq unlink
+   users vdir wc who whoami yes
+ 
+ See the file NEWS for a list of major changes in the current release.
+diff -Naur coreutils-6.3.orig/src/Makefile.in coreutils-6.3/src/Makefile.in
+--- coreutils-6.3.orig/src/Makefile.in	2006-09-30 02:11:14.000000000 -0700
++++ coreutils-6.3/src/Makefile.in	2006-09-30 11:58:34.000000000 -0700
+@@ -39,7 +39,7 @@
+ host_triplet = @host@
+ EXTRA_PROGRAMS = chroot$(EXEEXT) df$(EXEEXT) hostid$(EXEEXT) \
+ 	nice$(EXEEXT) pinky$(EXEEXT) stty$(EXEEXT) su$(EXEEXT) \
+-	uname$(EXEEXT) uptime$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
++	uname$(EXEEXT) users$(EXEEXT) who$(EXEEXT)
+ bin_PROGRAMS = [$(EXEEXT) chgrp$(EXEEXT) chown$(EXEEXT) chmod$(EXEEXT) \
+ 	cp$(EXEEXT) dd$(EXEEXT) dircolors$(EXEEXT) du$(EXEEXT) \
+ 	ginstall$(EXEEXT) link$(EXEEXT) ln$(EXEEXT) dir$(EXEEXT) \
+@@ -57,7 +57,7 @@
+ 	tsort$(EXEEXT) unexpand$(EXEEXT) uniq$(EXEEXT) wc$(EXEEXT) \
+ 	basename$(EXEEXT) date$(EXEEXT) dirname$(EXEEXT) echo$(EXEEXT) \
+ 	env$(EXEEXT) expr$(EXEEXT) factor$(EXEEXT) false$(EXEEXT) \
+-	hostname$(EXEEXT) id$(EXEEXT) kill$(EXEEXT) logname$(EXEEXT) \
++	hostname$(EXEEXT) id$(EXEEXT) logname$(EXEEXT) \
+ 	pathchk$(EXEEXT) printenv$(EXEEXT) printf$(EXEEXT) \
+ 	pwd$(EXEEXT) seq$(EXEEXT) sleep$(EXEEXT) tee$(EXEEXT) \
+ 	test$(EXEEXT) true$(EXEEXT) tty$(EXEEXT) whoami$(EXEEXT) \
+@@ -182,7 +182,7 @@
+ 	$(top_srcdir)/m4/tzset.m4 $(top_srcdir)/m4/unicodeio.m4 \
+ 	$(top_srcdir)/m4/unistd-safer.m4 $(top_srcdir)/m4/unistd_h.m4 \
+ 	$(top_srcdir)/m4/unlink-busy.m4 $(top_srcdir)/m4/unlinkdir.m4 \
+-	$(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/uptime.m4 \
++	$(top_srcdir)/m4/unlocked-io.m4 \
+ 	$(top_srcdir)/m4/userspec.m4 $(top_srcdir)/m4/utimbuf.m4 \
+ 	$(top_srcdir)/m4/utime.m4 $(top_srcdir)/m4/utimecmp.m4 \
+ 	$(top_srcdir)/m4/utimens.m4 $(top_srcdir)/m4/utimes-null.m4 \
+@@ -370,11 +370,6 @@
+ join_LDADD = $(LDADD)
+ join_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+ 	../lib/libcoreutils.a
+-kill_SOURCES = kill.c
+-kill_OBJECTS = kill.$(OBJEXT)
+-kill_LDADD = $(LDADD)
+-kill_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+-	../lib/libcoreutils.a
+ link_SOURCES = link.c
+ link_OBJECTS = link.$(OBJEXT)
+ link_LDADD = $(LDADD)
+@@ -623,10 +618,6 @@
+ unlink_LDADD = $(LDADD)
+ unlink_DEPENDENCIES = ../lib/libcoreutils.a $(am__DEPENDENCIES_1) \
+ 	../lib/libcoreutils.a
+-uptime_SOURCES = uptime.c
+-uptime_OBJECTS = uptime.$(OBJEXT)
+-uptime_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
+-	$(am__DEPENDENCIES_1)
+ users_SOURCES = users.c
+ users_OBJECTS = users.$(OBJEXT)
+ users_LDADD = $(LDADD)
+@@ -670,7 +661,7 @@
+ 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
+ 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
+ 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
+-	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
++	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
+ 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
+ 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
+ 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
+@@ -679,14 +670,14 @@
+ 	$(sha512sum_SOURCES) shred.c shuf.c sleep.c sort.c split.c \
+ 	stat.c stty.c su.c sum.c sync.c tac.c tail.c tee.c test.c \
+ 	touch.c tr.c true.c tsort.c tty.c uname.c unexpand.c uniq.c \
+-	unlink.c uptime.c users.c $(vdir_SOURCES) wc.c who.c whoami.c \
++	unlink.c users.c $(vdir_SOURCES) wc.c who.c whoami.c \
+ 	yes.c
+ DIST_SOURCES = $(__SOURCES) base64.c basename.c cat.c $(chgrp_SOURCES) \
+ 	chmod.c $(chown_SOURCES) chroot.c cksum.c comm.c $(cp_SOURCES) \
+ 	csplit.c cut.c date.c dd.c df.c $(dir_SOURCES) dircolors.c \
+ 	dirname.c du.c echo.c env.c expand.c expr.c factor.c false.c \
+ 	fmt.c fold.c $(ginstall_SOURCES) head.c hostid.c hostname.c \
+-	id.c join.c kill.c link.c ln.c logname.c $(ls_SOURCES) \
++	id.c join.c link.c ln.c logname.c $(ls_SOURCES) \
+ 	$(md5sum_SOURCES) mkdir.c mkfifo.c mknod.c $(mv_SOURCES) \
+ 	nice.c nl.c nohup.c od.c paste.c pathchk.c pinky.c pr.c \
+ 	printenv.c printf.c ptx.c pwd.c readlink.c $(rm_SOURCES) \
+@@ -695,7 +686,7 @@
+ 	$(sha512sum_SOURCES) shred.c shuf.c sleep.c sort.c split.c \
+ 	stat.c stty.c su.c sum.c sync.c tac.c tail.c tee.c test.c \
+ 	touch.c tr.c true.c tsort.c tty.c uname.c unexpand.c uniq.c \
+-	unlink.c uptime.c users.c $(vdir_SOURCES) wc.c who.c whoami.c \
++	unlink.c users.c $(vdir_SOURCES) wc.c who.c whoami.c \
+ 	yes.c
+ HEADERS = $(noinst_HEADERS)
+ ETAGS = etags
+@@ -946,7 +937,6 @@
+ tail_LDADD = $(nanosec_libs)
+ 
+ # If necessary, add -lm to resolve use of pow in lib/strtod.c.
+-uptime_LDADD = $(LDADD) $(POW_LIB) $(GETLOADAVG_LIBS)
+ su_LDADD = $(LDADD) $(LIB_CRYPT)
+ SUFFIXES = .sh
+ installed_su = $(DESTDIR)$(bindir)/`echo su|sed '$(transform)'`
+@@ -1193,9 +1183,6 @@
+ join$(EXEEXT): $(join_OBJECTS) $(join_DEPENDENCIES) 
+ 	@rm -f join$(EXEEXT)
+ 	$(LINK) $(join_LDFLAGS) $(join_OBJECTS) $(join_LDADD) $(LIBS)
+-kill$(EXEEXT): $(kill_OBJECTS) $(kill_DEPENDENCIES) 
+-	@rm -f kill$(EXEEXT)
+-	$(LINK) $(kill_LDFLAGS) $(kill_OBJECTS) $(kill_LDADD) $(LIBS)
+ link$(EXEEXT): $(link_OBJECTS) $(link_DEPENDENCIES) 
+ 	@rm -f link$(EXEEXT)
+ 	$(LINK) $(link_LDFLAGS) $(link_OBJECTS) $(link_LDADD) $(LIBS)
+@@ -1358,9 +1345,6 @@
+ unlink$(EXEEXT): $(unlink_OBJECTS) $(unlink_DEPENDENCIES) 
+ 	@rm -f unlink$(EXEEXT)
+ 	$(LINK) $(unlink_LDFLAGS) $(unlink_OBJECTS) $(unlink_LDADD) $(LIBS)
+-uptime$(EXEEXT): $(uptime_OBJECTS) $(uptime_DEPENDENCIES) 
+-	@rm -f uptime$(EXEEXT)
+-	$(LINK) $(uptime_LDFLAGS) $(uptime_OBJECTS) $(uptime_LDADD) $(LIBS)
+ users$(EXEEXT): $(users_OBJECTS) $(users_DEPENDENCIES) 
+ 	@rm -f users$(EXEEXT)
+ 	$(LINK) $(users_LDFLAGS) $(users_OBJECTS) $(users_LDADD) $(LIBS)
+@@ -1455,7 +1439,6 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/install.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/join.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lbracket.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/link.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ln.Po@am__quote@
+@@ -1515,7 +1498,6 @@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unexpand.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uniq.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@
+-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uptime.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/users.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wc.Po@am__quote@
+ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/who.Po@am__quote@
+@@ -1826,7 +1808,7 @@
+ 	  && can_create_suid_root_executable=yes; \
+ 	rm -f $$TMPFILE; \
+ 	if test $$can_create_suid_root_executable = yes; then \
+-	  $(INSTALL_SU); \
++	  echo "Installation of su is suppressed"; \
+ 	else \
+ 	  echo "WARNING: insufficient access; not installing su"; \
+ 	  echo "NOTE: to install su, run 'make install-root' as root"; \
Index: patches/coreutils-6.3-uname-1.patch
===================================================================
--- patches/coreutils-6.3-uname-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
+++ patches/coreutils-6.3-uname-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
@@ -0,0 +1,161 @@
+Submitted By: Jim Gifford <jim at linuxfromscratch dot org>
+Date: 2006-08-24
+Initial Package Version: 5.97
+Upstream Status: Not Accepted
+Origin: Gentoo - http://sources.gentoo.org/viewcvs.py/gentoo/src/patchsets/coreutils
+Description: Display CPU Information from /proc/cpuinfo or /proc/sysinfo
+
+Original Patch by - Matthew Burgess and Scot McPherson
+
+diff -Naur coreutils-5.97.orig/src/uname.c coreutils-5.97/src/uname.c
+--- coreutils-5.97.orig/src/uname.c	2005-09-15 12:57:04.000000000 -0700
++++ coreutils-5.97/src/uname.c	2006-08-24 15:52:53.000000000 -0700
+@@ -51,6 +51,11 @@
+ # include <mach-o/arch.h>
+ #endif
+ 
++#if defined (__linux__)
++# define USE_PROCINFO
++# define UNAME_HARDWARE_PLATFORM
++#endif
++
+ #include "system.h"
+ #include "error.h"
+ #include "quote.h"
+@@ -138,6 +143,106 @@
+   exit (status);
+ }
+ 
++#if defined(USE_PROCINFO)
++
++# if defined(__s390__) || defined(__s390x__)
++#  define CPUINFO_FILE    "/proc/sysinfo"
++#  define CPUINFO_FORMAT  "%64[^\t :]%*[ :]%256[^\n]%c"
++# else
++#  define CPUINFO_FILE    "/proc/cpuinfo"
++#  define CPUINFO_FORMAT  "%64[^\t:]\t:%256[^\n]%c"
++# endif
++
++# define PROCINFO_PROCESSOR      0
++# define PROCINFO_HARDWARE_PLATFORM 1
++
++static void __eat_cpuinfo_space(char *buf)
++{
++	/* first eat trailing space */
++	char *tmp = buf + strlen(buf) - 1;
++	while (tmp > buf && isspace(*tmp))
++		*tmp-- = '\0';
++	/* then eat leading space */
++	tmp = buf;
++	while (*tmp && isspace(*tmp))
++		tmp++;
++	if (tmp != buf)
++		memmove(buf, tmp, strlen(tmp)+1);
++}
++
++static int __linux_procinfo (int x, char *fstr, size_t s)
++{
++	FILE *fp;
++
++	char *procinfo_keys[] = {
++		/* --processor --hardware-platform */
++		#if defined(__alpha__)
++			"cpu model", "system type"
++		#elif defined(__arm__)
++			"Processor", "Hardware"
++		#elif defined(bfin)
++			"CPU", "BOARD Name"
++		#elif defined(__cris__)
++			"cpu", "cpu model"
++		#elif defined(__frv__)
++			"CPU-Core", "System"
++		#elif defined(__i386__) || defined(__x86_64__)
++			"model name", "vendor_id"
++		#elif defined(__ia64__)
++			"family", "vendor"
++		#elif defined(__hppa__)
++			"cpu", "model"
++		#elif defined(__m68k__)
++			"CPU", "MMU"
++		#elif defined(__mips__)
++			"cpu model", "system type"
++		#elif defined(__powerpc__) || defined(__powerpc64__)
++			"cpu", "machine"
++		#elif defined(__s390__) || defined(__s390x__)
++			"Type", "Manufacturer"
++		#elif defined(__sh__)
++			"cpu type", "machine"
++		#elif defined(sparc) || defined(__sparc__)
++			"type", "cpu"
++		#elif defined(__vax__)
++			"cpu type", "cpu"
++		#else
++			"unknown", "unknown"
++		#endif
++	};
++
++	if ((fp = fopen(CPUINFO_FILE, "r")) != NULL) {
++		char key[65], value[257], eol, *ret = NULL;
++
++		while (fscanf(fp, CPUINFO_FORMAT, key, value, &eol) != EOF) {
++			__eat_cpuinfo_space(key);
++			if (!strcmp(key, procinfo_keys[x])) {
++				__eat_cpuinfo_space(value);
++				ret = value;
++				break;
++			}
++			if (eol != '\n') {
++				/* we need two fscanf's here in case the previous
++				 * length limit caused us to read right up to the
++				 * newline ... doing "%*[^\n]\n" wont eat the newline
++				 */
++				fscanf(fp, "%*[^\n]");
++				fscanf(fp, "\n");
++			}
++		}
++		fclose(fp);
++
++		if (ret) {
++			strncpy(fstr, ret, s);
++			return 0;
++		}
++	}
++
++	return -1;
++}
++
++#endif
++
+ /* Print ELEMENT, preceded by a space if something has already been
+    printed.  */
+ 
+@@ -250,10 +355,14 @@
+   if (toprint & PRINT_PROCESSOR)
+     {
+       char const *element = unknown;
+-#if HAVE_SYSINFO && defined SI_ARCHITECTURE
++#if ( HAVE_SYSINFO && defined SI_ARCHITECTURE ) || defined(USE_PROCINFO)
+       {
+ 	static char processor[257];
++#if defined(USE_PROCINFO)
++	if (0 <= __linux_procinfo (PROCINFO_PROCESSOR, processor, sizeof processor))
++#else
+ 	if (0 <= sysinfo (SI_ARCHITECTURE, processor, sizeof processor))
++#endif
+ 	  element = processor;
+       }
+ #endif
+@@ -306,9 +415,13 @@
+       if (element == unknown)
+ 	{
+ 	  static char hardware_platform[257];
++#if defined(USE_PROCINFO)
++	  if (0 <= __linux_procinfo (PROCINFO_HARDWARE_PLATFORM, hardware_platform, sizeof hardware_platform))
++#else
+ 	  size_t s = sizeof hardware_platform;
+ 	  static int mib[] = { CTL_HW, UNAME_HARDWARE_PLATFORM };
+ 	  if (sysctl (mib, 2, hardware_platform, &s, 0, 0) >= 0)
++#endif
+ 	    element = hardware_platform;
+ 	}
+ #endif
Index: tches/readline-5.1-fixes-3.patch
===================================================================
--- patches/readline-5.1-fixes-3.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,128 +1,0 @@
-Submitted By: Matthew Burgess (matthew at linuxfromscratch dot org)
-Date: 2006-03-17
-Initial Package Version: 5.1
-Origin: http://ftp.gnu.org/gnu/readline/readline-5.1-patches/
-Upstream Status: From Upstream 
-Description: Contains Patch 001-004 from Upstream
-
-diff -Naur readline-5.1.orig/display.c readline-5.1/display.c
---- readline-5.1.orig/display.c	2005-11-30 19:05:02.000000000 +0000
-+++ readline-5.1/display.c	2006-03-17 16:03:09.000000000 +0000
-@@ -1983,11 +1983,15 @@
-      int pchar;
- {
-   int len;
--  char *pmt;
-+  char *pmt, *p;
- 
-   rl_save_prompt ();
- 
--  if (saved_local_prompt == 0)
-+  /* We've saved the prompt, and can do anything with the various prompt
-+     strings we need before they're restored.  We want the unexpanded
-+     portion of the prompt string after any final newline. */
-+  p = rl_prompt ? strrchr (rl_prompt, '\n') : 0;
-+  if (p == 0)
-     {
-       len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
-       pmt = (char *)xmalloc (len + 2);
-@@ -1998,19 +2002,17 @@
-     }
-   else
-     {
--      len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
-+      p++;
-+      len = strlen (p);
-       pmt = (char *)xmalloc (len + 2);
-       if (len)
--	strcpy (pmt, saved_local_prompt);
-+	strcpy (pmt, p);
-       pmt[len] = pchar;
-       pmt[len+1] = '\0';
--      local_prompt = savestring (pmt);
--      prompt_last_invisible = saved_last_invisible;
--      prompt_visible_length = saved_visible_length + 1;
--    }
-+    }  
- 
-+  /* will be overwritten by expand_prompt, called from rl_message */
-   prompt_physical_chars = saved_physical_chars + 1;
--
-   return pmt;
- }
- 
-diff -Naur readline-5.1.orig/readline.c readline-5.1/readline.c
---- readline-5.1.orig/readline.c	2005-07-05 02:29:35.000000000 +0000
-+++ readline-5.1/readline.c	2006-03-17 16:03:05.000000000 +0000
-@@ -282,6 +282,7 @@
- {
-   FREE (rl_prompt);
-   rl_prompt = prompt ? savestring (prompt) : (char *)NULL;
-+  rl_display_prompt = rl_prompt ? rl_prompt : "";
- 
-   rl_visible_prompt_length = rl_expand_prompt (rl_prompt);
-   return 0;
-@@ -714,7 +715,7 @@
- 
- 	  rl_dispatching = 1;
- 	  RL_SETSTATE(RL_STATE_DISPATCHING);
--	  r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
-+	  (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
- 	  RL_UNSETSTATE(RL_STATE_DISPATCHING);
- 	  rl_dispatching = 0;
- 
-diff -Naur readline-5.1.orig/terminal.c readline-5.1/terminal.c
---- readline-5.1.orig/terminal.c	2005-11-13 01:46:54.000000000 +0000
-+++ readline-5.1/terminal.c	2006-03-17 16:03:02.000000000 +0000
-@@ -122,7 +122,7 @@
- static char *_rl_visible_bell;
- 
- /* Non-zero means the terminal can auto-wrap lines. */
--int _rl_term_autowrap;
-+int _rl_term_autowrap = -1;
- 
- /* Non-zero means that this terminal has a meta key. */
- static int term_has_meta;
-@@ -274,6 +274,9 @@
- _rl_set_screen_size (rows, cols)
-      int rows, cols;
- {
-+  if (_rl_term_autowrap == -1)
-+    _rl_init_terminal_io (rl_terminal_name);
-+
-   if (rows > 0)
-     _rl_screenheight = rows;
-   if (cols > 0)
-diff -Naur readline-5.1.orig/text.c readline-5.1/text.c
---- readline-5.1.orig/text.c	2005-09-24 23:06:07.000000000 +0000
-+++ readline-5.1/text.c	2006-03-17 16:02:58.000000000 +0000
-@@ -1071,8 +1071,6 @@
- rl_delete (count, key)
-      int count, key;
- {
--  int r;
--
-   if (count < 0)
-     return (_rl_rubout_char (-count, key));
- 
-@@ -1090,17 +1088,17 @@
-       else
- 	rl_forward_byte (count, key);
- 
--      r = rl_kill_text (orig_point, rl_point);
-+      rl_kill_text (orig_point, rl_point);
-       rl_point = orig_point;
--      return r;
-     }
-   else
-     {
-       int new_point;
- 
-       new_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
--      return (rl_delete_text (rl_point, new_point));
-+      rl_delete_text (rl_point, new_point);
-     }
-+  return 0;
- }
- 
- /* Delete the character under the cursor, unless the insertion
Index: tches/tar-1.15.1-gcc4_fix_tests-1.patch
===================================================================
--- patches/tar-1.15.1-gcc4_fix_tests-1.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,25 +1,0 @@
-Submitted By: Matthew Burgess <matthew@linuxfromscratch.org>
-Date: 2005-07-15
-Initial Package Version: 1.15.1
-Upstream Status: From Upstream
-Origin: Ryan Oliver
-Description: Fixes a compilation problem with gcc-4.0.x that results in:
-
-genfile.c:63: error: static declaration of 'argp_program_version' follows non-static declaration
-../lib/argp.h:428: error: previous declaration of 'argp_program_version' was here
-genfile.c:64: error: static declaration of 'argp_program_bug_address' follows non-static declaration
-../lib/argp.h:444: error: previous declaration of 'argp_program_bug_address' was here
-
---- tar-1.15.1/tests/genfile.c-orig	2005-04-25 15:23:47.000000000 +1000
-+++ tar-1.15.1/tests/genfile.c	2005-04-25 15:24:08.000000000 +1000
-@@ -60,8 +60,8 @@
- /* Block buffer for sparse file */
- char *buffer;
- 
--static const char *argp_program_version = "genfile (" PACKAGE ") " VERSION;
--static const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
-+const char *argp_program_version = "genfile (" PACKAGE ") " VERSION;
-+const char *argp_program_bug_address = "<" PACKAGE_BUGREPORT ">";
- static char doc[] = N_("genfile generates data files for GNU paxutils test suite");
- 
- static struct argp_option options[] = {
Index: tches/tar-1.15.1-security_fixes-1.patch
===================================================================
--- patches/tar-1.15.1-security_fixes-1.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,128 +1,0 @@
-Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
-Date: 2006-04-14
-Initial Package Version: 1.15.1
-Origin: gentoo, backported from CVS, rediffed to apply with -p1
-Description: addresses vulnerability CVE-2006-0300
-
-diff -Naurp tar-1.15.1-vanilla/src/xheader.c tar-1.15.1/src/xheader.c
---- tar-1.15.1-vanilla/src/xheader.c	2004-09-06 12:31:14.000000000 +0100
-+++ tar-1.15.1/src/xheader.c	2006-04-14 16:26:26.000000000 +0100
-@@ -783,6 +783,32 @@ code_num (uintmax_t value, char const *k
-   xheader_print (xhdr, keyword, sbuf);
- }
- 
-+static bool
-+decode_num (uintmax_t *num, char const *arg, uintmax_t maxval,
-+        char const *keyword)
-+{
-+  uintmax_t u;
-+  char *arg_lim;
-+
-+  if (! (ISDIGIT (*arg)
-+     && (errno = 0, u = strtoumax (arg, &arg_lim, 10), !*arg_lim)))
-+    {
-+      ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
-+          keyword, arg));
-+      return false;
-+    }
-+
-+  if (! (u <= maxval && errno != ERANGE))
-+    {
-+      ERROR ((0, 0, _("Extended header %s=%s is out of range"),
-+        keyword, arg));
-+      return false;
-+    }
-+
-+  *num = u;
-+  return true;
-+}
-+
- static void
- dummy_coder (struct tar_stat_info const *st __attribute__ ((unused)),
- 	     char const *keyword __attribute__ ((unused)),
-@@ -821,7 +847,7 @@ static void
- gid_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, TYPE_MAXIMUM (gid_t), "gid"))
-     st->stat.st_gid = u;
- }
- 
-@@ -903,7 +929,7 @@ static void
- size_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "size"))
-     st->archive_file_size = st->stat.st_size = u;
- }
- 
-@@ -918,7 +944,7 @@ static void
- uid_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, TYPE_MAXIMUM (uid_t), "uid"))
-     st->stat.st_uid = u;
- }
- 
-@@ -946,7 +972,7 @@ static void
- sparse_size_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "GNU.sparse.size"))
-     st->stat.st_size = u;
- }
- 
-@@ -962,10 +988,10 @@ static void
- sparse_numblocks_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, SIZE_MAX, "GNU.sparse.numblocks"))
-     {
-       st->sparse_map_size = u;
--      st->sparse_map = calloc(st->sparse_map_size, sizeof(st->sparse_map[0]));
-+      st->sparse_map = xcalloc (u, sizeof st->sparse_map[0]);
-       st->sparse_map_avail = 0;
-     }
- }
-@@ -982,8 +1008,14 @@ static void
- sparse_offset_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), "GNU.sparse.offset"))
-+    {
-+      if (st->sparse_map_avail < st->sparse_map_size)
-     st->sparse_map[st->sparse_map_avail].offset = u;
-+      else
-+    ERROR ((0, 0, _("Malformed extended header: excess %s=%s"),
-+        "GNU.sparse.offset", arg));
-+    }
- }
- 
- static void
-@@ -998,15 +1030,13 @@ static void
- sparse_numbytes_decoder (struct tar_stat_info *st, char const *arg)
- {
-   uintmax_t u;
--  if (xstrtoumax (arg, NULL, 10, &u, "") == LONGINT_OK)
-+  if (decode_num (&u, arg, SIZE_MAX, "GNU.sparse.numbytes"))
-     {
-       if (st->sparse_map_avail == st->sparse_map_size)
--	{
--	  st->sparse_map_size *= 2;
--	  st->sparse_map = xrealloc (st->sparse_map,
--				     st->sparse_map_size
--				     * sizeof st->sparse_map[0]);
--	}
-+        st->sparse_map = x2nrealloc (st->sparse_map,
-+                                    &st->sparse_map_size,
-+                                    sizeof st->sparse_map[0]);
-+
-       st->sparse_map[st->sparse_map_avail++].numbytes = u;
-     }
- }
Index: tches/tar-1.15.1-sparse_fix-1.patch
===================================================================
--- patches/tar-1.15.1-sparse_fix-1.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,26 +1,0 @@
-Submitted By: Jim Gifford (patches at jg555 dot com)
-Date: 2005-03-19
-Initial Package Version: 1.15.1
-Origin: Tar Bug Reports List
-Upstream Status: Applied
-Description: Fixes large file corruptions using option -S
-	http://lists.gnu.org/archive/html/bug-tar/2005-03/msg00004.html
---- tar-1.15.1/src/sparse.c.orig	2005-03-20 04:23:34.144506120 +0000
-+++ tar-1.15.1/src/sparse.c	2005-03-20 04:23:56.842055568 +0000
-@@ -1,6 +1,6 @@
- /* Functions for dealing with sparse files
- 
--   Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-+   Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
- 
-    This program is free software; you can redistribute it and/or modify it
-    under the terms of the GNU General Public License as published by the
-@@ -182,7 +182,7 @@
- {
-   static char buffer[BLOCKSIZE];
-   size_t count;
--  size_t offset = 0;
-+  off_t offset = 0;
-   struct sp_array sp = {0, 0};
- 
-   if (!lseek_or_error (file, 0, SEEK_SET))
Index: tches/udev-102-lib64-1.patch
===================================================================
--- patches/udev-102-lib64-1.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,205 +1,0 @@
-Submitted By: Jim Gifford <jim@linuxfromscratch.org>
-Date: 2006-09-16
-Upstream Status: Unknown
-Origin: Jim Gifford
-Description: Change /lib/udev to /lib64/udev
-
-diff -Naur udev-096.orig/extras/ata_id/Makefile udev-096/extras/ata_id/Makefile
---- udev-096.orig/extras/ata_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/ata_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/cdrom_id/Makefile udev-096/extras/cdrom_id/Makefile
---- udev-096.orig/extras/cdrom_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/cdrom_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/dasd_id/Makefile udev-096/extras/dasd_id/Makefile
---- udev-096.orig/extras/dasd_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/dasd_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/edd_id/Makefile udev-096/extras/edd_id/Makefile
---- udev-096.orig/extras/edd_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/edd_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/firmware/firmware.sh udev-096/extras/firmware/firmware.sh
---- udev-096.orig/extras/firmware/firmware.sh	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/firmware/firmware.sh	2006-09-16 14:41:40.000000000 -0700
-@@ -1,6 +1,6 @@
- #!/bin/sh -e
- 
--FIRMWARE_DIRS="/lib/firmware /usr/local/lib/firmware"
-+FIRMWARE_DIRS="/lib64/firmware /usr/local/lib64/firmware"
- 
- err() {
-     echo "$@" >&2
-diff -Naur udev-096.orig/extras/firmware/Makefile udev-096/extras/firmware/Makefile
---- udev-096.orig/extras/firmware/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/firmware/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -13,7 +13,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/floppy/Makefile udev-096/extras/floppy/Makefile
---- udev-096.orig/extras/floppy/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/floppy/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/path_id/Makefile udev-096/extras/path_id/Makefile
---- udev-096.orig/extras/path_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/path_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -13,7 +13,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/run_directory/Makefile udev-096/extras/run_directory/Makefile
---- udev-096.orig/extras/run_directory/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/run_directory/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -15,7 +15,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/scsi_id/Makefile udev-096/extras/scsi_id/Makefile
---- udev-096.orig/extras/scsi_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/scsi_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -19,7 +19,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/usb_id/Makefile udev-096/extras/usb_id/Makefile
---- udev-096.orig/extras/usb_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/usb_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -16,7 +16,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/extras/volume_id/lib/Makefile udev-096/extras/volume_id/lib/Makefile
---- udev-096.orig/extras/volume_id/lib/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/volume_id/lib/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -5,8 +5,8 @@
- # Released under the GNU General Public License, version 2.
- #
- includedir = 	${prefix}/usr/include
--libdir =	${prefix}/lib
--usrlibdir =	${prefix}/usr/lib
-+libdir =	${prefix}/lib64
-+usrlibdir =	${prefix}/usr/lib64
- 
- INSTALL = /usr/bin/install -c
- INSTALL_DATA  = ${INSTALL} -m 644
-diff -Naur udev-096.orig/extras/volume_id/Makefile udev-096/extras/volume_id/Makefile
---- udev-096.orig/extras/volume_id/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/extras/volume_id/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -14,7 +14,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev/
- 
-diff -Naur udev-096.orig/Makefile udev-096/Makefile
---- udev-096.orig/Makefile	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/Makefile	2006-09-16 14:40:50.000000000 -0700
-@@ -98,7 +98,7 @@
- sbindir =	${prefix}/sbin
- usrbindir =	${prefix}/usr/bin
- usrsbindir =	${prefix}/usr/sbin
--libudevdir =	${prefix}/lib/udev
-+libudevdir =	${prefix}/lib64/udev
- mandir =	${prefix}/usr/share/man
- configdir =	${etcdir}/udev
- udevdir =	/dev
-diff -Naur udev-096.orig/udev_rules_parse.c udev-096/udev_rules_parse.c
---- udev-096.orig/udev_rules_parse.c	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/udev_rules_parse.c	2006-09-16 14:40:50.000000000 -0700
-@@ -396,9 +396,9 @@
- 				if (pos)
- 					pos[0] = '\0';
- 
--				/* allow programs in /lib/udev called without the path */
-+				/* allow programs in /lib64/udev called without the path */
- 				if (strchr(file, '/') == NULL) {
--					strlcpy(file, "/lib/udev/", sizeof(file));
-+					strlcpy(file, "/lib64/udev/", sizeof(file));
- 					strlcat(file, value, sizeof(file));
- 					pos = strchr(file, ' ');
- 					if (pos)
-diff -Naur udev-096.orig/udev_utils_run.c udev-096/udev_utils_run.c
---- udev-096.orig/udev_utils_run.c	2006-07-09 12:48:19.000000000 -0700
-+++ udev-096/udev_utils_run.c	2006-09-16 14:40:50.000000000 -0700
-@@ -124,9 +124,9 @@
- 		}
- 	}
- 
--	/* allow programs in /lib/udev called without the path */
-+	/* allow programs in /lib64/udev called without the path */
- 	if (strchr(argv[0], '/') == NULL) {
--		strlcpy(program, "/lib/udev/", sizeof(program));
-+		strlcpy(program, "/lib64/udev/", sizeof(program));
- 		strlcat(program, argv[0], sizeof(program));
- 		argv[0] = program;
- 	}
Index: patches/udev-103-lib64-1.patch
===================================================================
--- patches/udev-103-lib64-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
+++ patches/udev-103-lib64-1.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
@@ -0,0 +1,205 @@
+Submitted By: Jim Gifford <jim@linuxfromscratch.org>
+Date: 2006-09-16
+Upstream Status: Unknown
+Origin: Jim Gifford
+Description: Change /lib/udev to /lib64/udev
+
+diff -Naur udev-096.orig/extras/ata_id/Makefile udev-096/extras/ata_id/Makefile
+--- udev-096.orig/extras/ata_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/ata_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/cdrom_id/Makefile udev-096/extras/cdrom_id/Makefile
+--- udev-096.orig/extras/cdrom_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/cdrom_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/dasd_id/Makefile udev-096/extras/dasd_id/Makefile
+--- udev-096.orig/extras/dasd_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/dasd_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/edd_id/Makefile udev-096/extras/edd_id/Makefile
+--- udev-096.orig/extras/edd_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/edd_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/firmware/firmware.sh udev-096/extras/firmware/firmware.sh
+--- udev-096.orig/extras/firmware/firmware.sh	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/firmware/firmware.sh	2006-09-16 14:41:40.000000000 -0700
+@@ -1,6 +1,6 @@
+ #!/bin/sh -e
+ 
+-FIRMWARE_DIRS="/lib/firmware /usr/local/lib/firmware"
++FIRMWARE_DIRS="/lib64/firmware /usr/local/lib64/firmware"
+ 
+ err() {
+     echo "$@" >&2
+diff -Naur udev-096.orig/extras/firmware/Makefile udev-096/extras/firmware/Makefile
+--- udev-096.orig/extras/firmware/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/firmware/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -13,7 +13,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/floppy/Makefile udev-096/extras/floppy/Makefile
+--- udev-096.orig/extras/floppy/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/floppy/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/path_id/Makefile udev-096/extras/path_id/Makefile
+--- udev-096.orig/extras/path_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/path_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -13,7 +13,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/run_directory/Makefile udev-096/extras/run_directory/Makefile
+--- udev-096.orig/extras/run_directory/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/run_directory/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -15,7 +15,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/scsi_id/Makefile udev-096/extras/scsi_id/Makefile
+--- udev-096.orig/extras/scsi_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/scsi_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -19,7 +19,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/usb_id/Makefile udev-096/extras/usb_id/Makefile
+--- udev-096.orig/extras/usb_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/usb_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -16,7 +16,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/extras/volume_id/lib/Makefile udev-096/extras/volume_id/lib/Makefile
+--- udev-096.orig/extras/volume_id/lib/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/volume_id/lib/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -5,8 +5,8 @@
+ # Released under the GNU General Public License, version 2.
+ #
+ includedir = 	${prefix}/usr/include
+-libdir =	${prefix}/lib
+-usrlibdir =	${prefix}/usr/lib
++libdir =	${prefix}/lib64
++usrlibdir =	${prefix}/usr/lib64
+ 
+ INSTALL = /usr/bin/install -c
+ INSTALL_DATA  = ${INSTALL} -m 644
+diff -Naur udev-096.orig/extras/volume_id/Makefile udev-096/extras/volume_id/Makefile
+--- udev-096.orig/extras/volume_id/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/extras/volume_id/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -14,7 +14,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev/
+ 
+diff -Naur udev-096.orig/Makefile udev-096/Makefile
+--- udev-096.orig/Makefile	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/Makefile	2006-09-16 14:40:50.000000000 -0700
+@@ -98,7 +98,7 @@
+ sbindir =	${prefix}/sbin
+ usrbindir =	${prefix}/usr/bin
+ usrsbindir =	${prefix}/usr/sbin
+-libudevdir =	${prefix}/lib/udev
++libudevdir =	${prefix}/lib64/udev
+ mandir =	${prefix}/usr/share/man
+ configdir =	${etcdir}/udev
+ udevdir =	/dev
+diff -Naur udev-096.orig/udev_rules_parse.c udev-096/udev_rules_parse.c
+--- udev-096.orig/udev_rules_parse.c	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/udev_rules_parse.c	2006-09-16 14:40:50.000000000 -0700
+@@ -396,9 +396,9 @@
+ 				if (pos)
+ 					pos[0] = '\0';
+ 
+-				/* allow programs in /lib/udev called without the path */
++				/* allow programs in /lib64/udev called without the path */
+ 				if (strchr(file, '/') == NULL) {
+-					strlcpy(file, "/lib/udev/", sizeof(file));
++					strlcpy(file, "/lib64/udev/", sizeof(file));
+ 					strlcat(file, value, sizeof(file));
+ 					pos = strchr(file, ' ');
+ 					if (pos)
+diff -Naur udev-096.orig/udev_utils_run.c udev-096/udev_utils_run.c
+--- udev-096.orig/udev_utils_run.c	2006-07-09 12:48:19.000000000 -0700
++++ udev-096/udev_utils_run.c	2006-09-16 14:40:50.000000000 -0700
+@@ -124,9 +124,9 @@
+ 		}
+ 	}
+ 
+-	/* allow programs in /lib/udev called without the path */
++	/* allow programs in /lib64/udev called without the path */
+ 	if (strchr(argv[0], '/') == NULL) {
+-		strlcpy(program, "/lib/udev/", sizeof(program));
++		strlcpy(program, "/lib64/udev/", sizeof(program));
+ 		strlcat(program, argv[0], sizeof(program));
+ 		argv[0] = program;
+ 	}
Index: tches/vim-7.0-fixes-14.patch
===================================================================
--- patches/vim-7.0-fixes-14.patch	(revision 054bf2ad80bb9093cfc5a03a427e5647eb349c36)
+++ 	(revision )
@@ -1,9265 +1,0 @@
-Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
-Date: 2006-10-13
-Initial Package Version: 7.0
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains all upstream patches up to 7.0.132
-	     The following patches were skipped
-		005 027 028 032 045 057 065 074 108 130 131 132
-
-diff -Naur vim70.orig/configure vim70/configure
---- vim70.orig/configure	2004-07-05 02:02:24.000000000 -0700
-+++ vim70/configure	2006-10-13 01:02:48.000000000 -0700
-@@ -3,4 +3,4 @@
- # This is just a stub for the Unix configure script, to provide support for
- # doing "./configure" in the top Vim directory.
- 
--cd src && ./configure "$@"
-+cd src && exec ./configure "$@"
-diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
---- vim70.orig/runtime/autoload/ccomplete.vim	2006-05-03 07:35:56.000000000 -0700
-+++ vim70/runtime/autoload/ccomplete.vim	2006-10-13 01:02:42.000000000 -0700
-@@ -1,7 +1,7 @@
- " Vim completion script
- " Language:	C
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 May 03
-+" Last Change:	2006 May 08
- 
- 
- " This function is used for the 'omnifunc' option.
-@@ -458,7 +458,7 @@
- " member.
- function! s:StructMembers(typename, items, all)
-   " Todo: What about local structures?
--  let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
-+  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
-   if fnames == ''
-     return []
-   endif
-diff -Naur vim70.orig/runtime/autoload/gzip.vim vim70/runtime/autoload/gzip.vim
---- vim70.orig/runtime/autoload/gzip.vim	2006-03-31 07:12:15.000000000 -0800
-+++ vim70/runtime/autoload/gzip.vim	2006-10-13 01:03:07.000000000 -0700
-@@ -1,6 +1,6 @@
- " Vim autoload file for editing compressed files.
- " Maintainer: Bram Moolenaar <Bram@vim.org>
--" Last Change: 2006 Mar 31
-+" Last Change: 2006 Oct 03
- 
- " These functions are used by the gzip plugin.
- 
-@@ -68,9 +68,9 @@
-   let tmp = tempname()
-   let tmpe = tmp . "." . expand("<afile>:e")
-   " write the just read lines to a temp file "'[,']w tmp.gz"
--  execute "silent '[,']w " . tmpe
-+  execute "silent '[,']w " . escape(tmpe, ' ')
-   " uncompress the temp file: call system("gzip -dn tmp.gz")
--  call system(a:cmd . " " . tmpe)
-+  call system(a:cmd . " " . s:escape(tmpe))
-   if !filereadable(tmp)
-     " uncompress didn't work!  Keep the compressed file then.
-     echoerr "Error: Could not read uncompressed file"
-@@ -127,9 +127,9 @@
-     let nmt = s:tempname(nm)
-     if rename(nm, nmt) == 0
-       if exists("b:gzip_comp_arg")
--	call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
-+	call system(a:cmd . " " . b:gzip_comp_arg . " " . s:escape(nmt))
-       else
--	call system(a:cmd . " " . nmt)
-+	call system(a:cmd . " " . s:escape(nmt))
-       endif
-       call rename(nmt . "." . expand("<afile>:e"), nm)
-     endif
-@@ -154,10 +154,10 @@
-     if rename(nm, nmte) == 0
-       if &patchmode != "" && getfsize(nm . &patchmode) == -1
- 	" Create patchmode file by creating the decompressed file new
--	call system(a:cmd . " -c " . nmte . " > " . nmt)
-+	call system(a:cmd . " -c " . s:escape(nmte) . " > " . s:escape(nmt))
- 	call rename(nmte, nm . &patchmode)
-       else
--	call system(a:cmd . " " . nmte)
-+	call system(a:cmd . " " . s:escape(nmte))
-       endif
-       call rename(nmt, nm)
-     endif
-@@ -175,4 +175,12 @@
-   return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
- endfun
- 
-+fun s:escape(name)
-+  " shellescape() was added by patch 7.0.111
-+  if v:version > 700 || (v:version == 700 && has('patch111'))
-+    return shellescape(a:name)
-+  endif
-+  return "'" . a:name . "'"
-+endfun
-+
- " vim: set sw=2 :
-diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim
---- vim70.orig/runtime/autoload/paste.vim	2006-04-21 11:31:01.000000000 -0700
-+++ vim70/runtime/autoload/paste.vim	2006-10-13 01:02:46.000000000 -0700
-@@ -1,6 +1,6 @@
- " Vim support file to help with paste mappings and menus
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 Apr 21
-+" Last Change:	2006 Jun 23
- 
- " Define the string to use for items that are present both in Edit, Popup and
- " Toolbar menu.  Also used in mswin.vim and macmap.vim.
-@@ -12,7 +12,7 @@
- if has("virtualedit")
-   let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
-   let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
--  let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
-+  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'
- 
-   func! paste#Paste()
-     let ove = &ve
-diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
---- vim70.orig/runtime/autoload/spellfile.vim	2006-02-01 04:12:24.000000000 -0800
-+++ vim70/runtime/autoload/spellfile.vim	2006-10-13 01:02:54.000000000 -0700
-@@ -1,9 +1,9 @@
- " Vim script to download a missing spell file
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 Feb 01
-+" Last Change:	2006 Aug 29
- 
- if !exists('g:spellfile_URL')
--  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
-+  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
- endif
- let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
- 
-@@ -61,13 +61,13 @@
-     new
-     setlocal bin
-     echo 'Downloading ' . fname . '...'
--    exe 'Nread ' g:spellfile_URL . '/' . fname
-+    call spellfile#Nread(fname)
-     if getline(2) !~ 'VIMspell'
-       " Didn't work, perhaps there is an ASCII one.
-       g/^/d
-       let fname = a:lang . '.ascii.spl'
-       echo 'Could not find it, trying ' . fname . '...'
--      exe 'Nread ' g:spellfile_URL . '/' . fname
-+      call spellfile#Nread(fname)
-       if getline(2) !~ 'VIMspell'
- 	echo 'Sorry, downloading failed'
- 	bwipe!
-@@ -95,7 +95,7 @@
- 	g/^/d
- 	let fname = substitute(fname, '\.spl$', '.sug', '')
- 	echo 'Downloading ' . fname . '...'
--	exe 'Nread ' g:spellfile_URL . '/' . fname
-+	call spellfile#Nread(fname)
- 	if getline(2) !~ 'VIMsug'
- 	  echo 'Sorry, downloading failed'
- 	else
-@@ -109,3 +109,15 @@
-     bwipe
-   endif
- endfunc
-+
-+" Read "fname" from the server.
-+function! spellfile#Nread(fname)
-+  if g:spellfile_URL =~ '^ftp://'
-+    " for an ftp server use a default login and password to avoid a prompt
-+    let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
-+    let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
-+    exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
-+  else
-+    exe 'Nread ' g:spellfile_URL . '/' . a:fname
-+  endif
-+endfunc
-diff -Naur vim70.orig/runtime/doc/eval.txt vim70/runtime/doc/eval.txt
---- vim70.orig/runtime/doc/eval.txt	2006-05-07 05:16:44.000000000 -0700
-+++ vim70/runtime/doc/eval.txt	2006-10-13 01:03:07.000000000 -0700
-@@ -1,4 +1,4 @@
--*eval.txt*      For Vim version 7.0.  Last change: 2006 May 06
-+*eval.txt*      For Vim version 7.0.  Last change: 2006 Sep 22
- 
- 
- 		  VIM REFERENCE MANUAL    by Bram Moolenaar
-@@ -1709,6 +1709,8 @@
- settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
- 					{winnr} in tab page {tabnr} to {val}
- setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
-+shellescape( {string})		String	escape {string} for use as shell
-+					command argument
- simplify( {filename})		String	simplify filename as much as possible
- sort( {list} [, {func}])	List	sort {list}, using {func} to compare
- soundfold( {word})		String	sound-fold {word}
-@@ -4434,6 +4436,21 @@
- 			:call setwinvar(1, "&list", 0)
- 			:call setwinvar(2, "myvar", "foobar")
- 
-+shellescape({string})					*shellescape()*
-+		Escape {string} for use as shell command argument.
-+		On MS-Windows and MS-DOS, when 'shellslash' is not set, it
-+		will enclose {string} double quotes and double all double
-+		quotes within {string}.
-+		For other systems, it will enclose {string} in single quotes
-+		and replace all "'" with "'\''".
-+		Example: >
-+			:echo shellescape('c:\program files\vim')
-+<		results in:
-+			"c:\program files\vim" ~
-+		Example usage: >
-+			:call system("chmod +x -- " . shellescape(expand("%")))
-+
-+
- simplify({filename})					*simplify()*
- 		Simplify the file name as much as possible without changing
- 		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
-diff -Naur vim70.orig/runtime/menu.vim vim70/runtime/menu.vim
---- vim70.orig/runtime/menu.vim	2006-04-17 06:47:28.000000000 -0700
-+++ vim70/runtime/menu.vim	2006-10-13 01:03:05.000000000 -0700
-@@ -2,7 +2,7 @@
- " You can also use this as a start for your own set of menus.
- "
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2006 Apr 17
-+" Last Change:	2006 Sep 14
- 
- " Note that ":an" (short for ":anoremenu") is often used to make a menu work
- " in all modes and avoid side effects from mappings defined by the user.
-@@ -885,6 +885,8 @@
-     if exists("s:changeitem") && s:changeitem != ''
-       call <SID>SpellDel()
-     endif
-+
-+    " Return quickly if spell checking is not enabled.
-     if !&spell || &spelllang == ''
-       return
-     endif
-@@ -908,18 +910,18 @@
- 	let s:fromword = w
- 	let pri = 1
- 	for sug in s:suglist
--	  exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
-+	  exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
- 		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
- 	  let pri += 1
- 	endfor
- 
- 	let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
--	exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
-+	exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
- 
- 	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
--	exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
-+	exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
- 
--	amenu 1.8 PopUp.-SpellSep- :
-+	anoremenu 1.8 PopUp.-SpellSep- :
-       endif
-     endif
-   endfunc
-@@ -938,7 +940,9 @@
-     let s:changeitem = ''
-   endfun
- 
--  au! MenuPopup * call <SID>SpellPopup()
-+  augroup SpellPopupMenu
-+    au! MenuPopup * call <SID>SpellPopup()
-+  augroup END
- endif
- 
- " The GUI toolbar (for MS-Windows and GTK)
-@@ -1013,9 +1017,9 @@
-     tmenu ToolBar.FindPrev	Find Previous
-     tmenu ToolBar.Replace		Find / Replace...
-   endif
--  tmenu ToolBar.LoadSesn	Chose a session to load
-+  tmenu ToolBar.LoadSesn	Choose a session to load
-   tmenu ToolBar.SaveSesn	Save current session
--  tmenu ToolBar.RunScript	Chose a Vim Script to run
-+  tmenu ToolBar.RunScript	Choose a Vim Script to run
-   tmenu ToolBar.Make		Make current project (:make)
-   tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
-   tmenu ToolBar.TagJump		Jump to tag under cursor
-diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
---- vim70.orig/runtime/plugin/matchparen.vim	2006-04-27 06:31:26.000000000 -0700
-+++ vim70/runtime/plugin/matchparen.vim	2006-10-13 01:02:59.000000000 -0700
-@@ -1,6 +1,6 @@
- " Vim plugin for showing matching parens
- " Maintainer:  Bram Moolenaar <Bram@vim.org>
--" Last Change: 2006 Apr 27
-+" Last Change: 2006 Sep 09
- 
- " Exit quickly when:
- " - this plugin was already loaded (or disabled)
-@@ -44,7 +44,7 @@
-   let before = 0
- 
-   let c = getline(c_lnum)[c_col - 1]
--  let plist = split(&matchpairs, ':\|,')
-+  let plist = split(&matchpairs, '.\zs[:,]')
-   let i = index(plist, c)
-   if i < 0
-     " not found, in Insert mode try character before the cursor
-@@ -90,19 +90,19 @@
-   " Find the match.  When it was just before the cursor move it there for a
-   " moment.
-   if before > 0
--    let save_cursor = getpos('.')
-+    let save_cursor = winsaveview()
-     call cursor(c_lnum, c_col - before)
-   endif
- 
-   " When not in a string or comment ignore matches inside them.
-   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
--	\ '=~?  "string\\|comment"'
-+	\ '=~?  "string\\|character\\|singlequote\\|comment"'
-   execute 'if' s_skip '| let s_skip = 0 | endif'
- 
-   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
- 
-   if before > 0
--    call setpos('.', save_cursor)
-+    call winrestview(save_cursor)
-   endif
- 
-   " If a match is found setup match highlighting.
-diff -Naur vim70.orig/runtime/scripts.vim vim70/runtime/scripts.vim
---- vim70.orig/runtime/scripts.vim	2006-03-28 11:30:49.000000000 -0800
-+++ vim70/runtime/scripts.vim	2006-10-13 01:02:48.000000000 -0700
-@@ -1,7 +1,7 @@
- " Vim support file to detect file types in scripts
- "
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last change:	2006 Mar 28
-+" Last change:	2006 Jul 08
- 
- " This file is called by an autocommand for every file that has just been
- " loaded into a buffer.  It checks if the type of file can be recognized by
-@@ -54,6 +54,12 @@
-     let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
-   endif
- 
-+  " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
-+  " third line.  Suggested by Steven Atkinson.
-+  if getline(3) =~ '^exec wish'
-+    let s:name = 'wish'
-+  endif
-+
-   " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
-   if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
-     call SetFileTypeSH(s:line1)	" defined in filetype.vim
-diff -Naur vim70.orig/runtime/tutor/Makefile vim70/runtime/tutor/Makefile
---- vim70.orig/runtime/tutor/Makefile	2004-06-07 07:32:39.000000000 -0700
-+++ vim70/runtime/tutor/Makefile	2006-10-13 01:02:59.000000000 -0700
-@@ -2,8 +2,13 @@
- #
- # The Japanese tutor exists in three encodings.  Use the UTF-8 version as the
- # original and create the others with conversion.
-+#
-+# Similarly for Russian and Korean
- 
--all: tutor.ja.sjis tutor.ja.euc tutor.ko.euc
-+all: tutor.ja.sjis tutor.ja.euc \
-+	tutor.ko.euc \
-+	tutor.ru tutor.ru.cp1251 \
-+	tutor.gr tutor.gr.cp737
- 
- tutor.ja.sjis: tutor.ja.utf-8
- 	nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
-@@ -13,3 +18,15 @@
- 
- tutor.ko.euc: tutor.ko.utf-8
- 	iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
-+
-+tutor.ru: tutor.ru.utf-8
-+	iconv -f UTF-8 -t KOI8-R tutor.ru.utf-8 > tutor.ru
-+
-+tutor.ru.cp1251: tutor.ru.utf-8
-+	iconv -f UTF-8 -t cp1251 tutor.ru.utf-8 > tutor.ru.cp1251
-+
-+tutor.gr: tutor.gr.utf-8
-+	iconv -f UTF-8 -t ISO-8859-7 tutor.gr.utf-8 > tutor.gr
-+
-+tutor.gr.cp737: tutor.gr.utf-8
-+	iconv -f UTF-8 -t cp737 tutor.gr.utf-8 > tutor.gr.cp737
-diff -Naur vim70.orig/runtime/tutor/tutor.gr.utf-8 vim70/runtime/tutor/tutor.gr.utf-8
---- vim70.orig/runtime/tutor/tutor.gr.utf-8	1969-12-31 16:00:00.000000000 -0800
-+++ vim70/runtime/tutor/tutor.gr.utf-8	2006-10-13 01:02:59.000000000 -0700
-@@ -0,0 +1,815 @@
-+===============================================================================
-+=    Î Î±Î» Ï Ï Î® Ï Îž Î± Ï Îµ    Ï Ï Î¿   V I M   T u t o r    -    ÎÎºÎŽÎ¿ÏÎ· 1.5     =
-+===============================================================================
-+
-+     Î Vim ÎµÎ¯ÎœÎ±Î¹ Î­ÎœÎ±Ï ÏÎ±ÎœÎ¯ÏÏÏ
-ÏÎ¿Ï ÏÏ
-ÎœÏÎ¬ÎºÏÎ·Ï ÏÎ¿Ï
- Î­ÏÎµÎ¹ ÏÎ¿Î»Î»Î­Ï ÎµÎœÏÎ¿Î»Î­Ï, ÏÎ¬ÏÎ±
-+     ÏÎ¿Î»Î»Î­Ï Î³Î¹Î± ÎœÎ± ÎµÎŸÎ·Î³Î®ÏÎ¿Ï
-ÎŒÎµ ÏÎµ ÎŒÎ¯Î± ÏÎµÏÎ¹Î®Î³Î·ÏÎ· ÏÏÏÏ Î±Ï
-ÏÎ®. ÎÏ
-ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ·
-+     ÏÏÎµÎŽÎ¹Î¬ÏÏÎ·ÎºÎµ Î³Î¹Î± ÎœÎ± ÏÎµÏÎ¹Î³ÏÎ¬ÏÎµÎ¹ Î¹ÎºÎ±ÎœÎ¿ÏÎ¿Î¹Î·ÏÎ¹ÎºÎ¬ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï ÏÎ¿Ï
- ÎžÎ± ÏÎ±Ï
-+     ÎºÎ¬ÎœÎ¿Ï
-Îœ ÎœÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎµ ÎµÏÎºÎ¿Î»Î± ÏÎ¿Îœ Vim ÏÎ±Îœ Î­ÎœÎ±Îœ Î³ÎµÎœÎ¹ÎºÎ®Ï ÏÏÎ®ÏÎ·Ï ÏÏ
-ÎœÏÎ¬ÎºÏÎ·.
-+
-+     Î ÎºÎ±ÏÎ¬ ÏÏÎ¿ÏÎ­Î³Î³Î¹ÏÎ· ÏÏÏÎœÎ¿Ï ÏÎ¿Ï
- Î±ÏÎ±Î¹ÏÎµÎ¯ÏÎ±Î¹ Î³Î¹Î± ÎœÎ± Î¿Î»Î¿ÎºÎ»Î·ÏÏÏÎµÏÎµ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·
-+     ÎµÎ¯ÎœÎ±Î¹ 25-30 Î»ÎµÏÏÎ¬, ÎµÎŸÎ±ÏÏÏÎœÏÎ±Ï Î±ÏÏ ÏÎ¿ ÏÏÏÎ¿ ÏÏÏÎœÎ¿ ÎžÎ± ÎŸÎ¿ÎŽÎ­ÏÎµÏÎµ Î³Î¹Î±
-+     ÏÎµÎ¹ÏÎ±ÎŒÎ±ÏÎ¹ÏÎŒÎ¿ÏÏ.
-+
-+     ÎÎ¹ ÎµÎœÏÎ¿Î»Î­Ï ÏÏÎ± ÎŒÎ±ÎžÎ®ÎŒÎ±ÏÎ± ÎžÎ± ÏÏÎ¿ÏÎ¿ÏÎ¿Î¹Î®ÏÎ¿Ï
-Îœ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿. ÎÎ·ÎŒÎ¹Î¿Ï
-ÏÎ³Î®ÏÏÎµ Î­ÎœÎ±
-+     Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿ Î±Ï
-ÏÎ¿Ï ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
- Î³Î¹Î± ÎœÎ± ÎµÎŸÎ±ÏÎºÎ·ÎžÎµÎ¯ÏÎµ (Î±Îœ ÎŸÎµÎºÎ¹ÎœÎ®ÏÎ±ÏÎµ ÏÎ¿
-+     "Vimtutor" Î±Ï
-ÏÏ ÎµÎ¯ÎœÎ±Î¹ Î®ÎŽÎ· Î­ÎœÎ± Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿).
-+
-+     ÎÎ¯ÎœÎ±Î¹ ÏÎ·ÎŒÎ±ÎœÏÎ¹ÎºÏ ÎœÎ± ÎžÏ
-ÎŒÎ¬ÏÏÎµ ÏÏÎ¹ Î±Ï
-ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ· ÎµÎ¯ÎœÎ±Î¹ Î¿ÏÎ³Î±ÎœÏÎŒÎ­ÎœÎ· Î­ÏÏÎ¹
-+     ÏÏÏÎµ ÎœÎ± ÎŽÎ¹ÎŽÎ¬ÏÎºÎµÎ¹ ÎŒÎ­ÏÏ ÏÎ·Ï ÏÏÎ®ÏÎ·Ï. ÎÏ
-ÏÏ ÏÎ·ÎŒÎ±Î¯ÎœÎµÎ¹ ÏÏÎ¹ ÏÏÎµÎ¹Î¬Î¶ÎµÏÎ±Î¹ ÎœÎ±
-+     ÎµÎºÏÎµÎ»ÎµÎ¯ÏÎµ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï Î³Î¹Î± ÎœÎ± ÏÎ¹Ï ÎŒÎ¬ÎžÎµÏÎµ ÏÏÏÏÎ¬. ÎÎœ ÎŽÎ¹Î±Î²Î¬Î¶ÎµÏÎµ ÎŒÏÎœÎ¿ ÏÎ¿
-+     ÎºÎµÎ¯ÎŒÎµÎœÎ¿, ÎžÎ± ÏÎ¹Ï ÎŸÎµÏÎ¬ÏÎµÏÎµ!
-+
-+     Î€ÏÏÎ±, Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ Shift-Lock ÎÎÎ ÎµÎ¯ÎœÎ±Î¹ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÎºÎ±Î¹
-+     ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ j Î±ÏÎºÎµÏÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± Î­ÏÏÎ¹
-+     ÏÏÏÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.1 ÎœÎ± Î³ÎµÎŒÎ¯ÏÎµÎ¹ ÏÎ»Î®ÏÏÏ ÏÎ·Îœ Î¿ÎžÏÎœÎ·.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		      ÎÎ¬ÎžÎ·ÎŒÎ± 1.1:  ÎÎÎ€ÎÎÎÎÎÎÎ€ÎÎ£ Î€ÎÎ ÎÎ¡ÎÎÎÎ
-+
-+  ** ÎÎ¹Î± ÎœÎ± ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ ÏÎ± ÏÎ»Î®ÎºÏÏÎ± h,j,k,l ÏÏÏÏ ÎŽÎµÎ¯ÏÎœÎµÏÎ±Î¹. **
-+	     ^
-+	     k	      Hint: Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ h ÎµÎ¯ÎœÎ±Î¹ Î±ÏÎ¹ÏÏÎµÏÎ¬ ÎºÎ±Î¹ ÎºÎ¹ÎœÎµÎ¯ ÏÏ' Î±ÏÎ¹ÏÏÎµÏÎ¬.
-+       < h	 l >	    Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ l ÎµÎ¯ÎœÎ±Î¹ ÎŽÎµÎŸÎ¹Î¬ ÎºÎ±Î¹ ÎºÎ¹ÎœÎµÎ¯ ÏÏÎ± ÎŽÎµÎŸÎ¹Î¬.
-+	     j		    Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ j ÎŒÎ¿Î¹Î¬Î¶ÎµÎ¹ ÎŒÎµ Î²ÎµÎ»Î¬ÎºÎ¹ ÏÏÎ¿Ï ÏÎ± ÎºÎ¬ÏÏ.
-+	     v
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¹Î³ÏÏÏ ÏÏÎ·Îœ Î¿ÎžÏÎœÎ· ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎœÎ¿Î¹ÏÎžÎµÏÎµ Î¬ÎœÎµÏÎ±.
-+
-+  2. ÎÏÎ±ÏÎ®ÏÏÎµ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÎºÎ¬ÏÏ ÏÎ»Î®ÎºÏÏÎ¿ (j) ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÏÎ±ÎœÎ±Î»Î·ÏÎžÎµÎ¯.
-+---> Î€ÏÏÎ± ÎŸÎ­ÏÎµÏÎµ ÏÏÏ ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±.
-+
-+  3. Î§ÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ¿ ÎºÎ¬ÏÏ ÏÎ»Î®ÎºÏÏÎ¿, ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.2.
-+
-+Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎœ Î±ÎŒÏÎ¹Î²Î¬Î»Î»ÎµÏÎµ Î³Î¹Î± ÎºÎ¬ÏÎ¹ ÏÎ¿Ï
- ÏÎ±ÏÎ®ÏÎ±ÏÎµ, ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ± Î²ÏÎµÎžÎµÎ¯ÏÎµ
-+	  ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·. ÎÎµÏÎ¬ ÏÎ±ÏÎ®ÏÏÎµ ÎŸÎ±ÎœÎ¬ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ÏÎ¿Ï
- ÎžÎ­Î»Î±ÏÎµ.
-+
-+Î£Î·ÎŒÎµÎ¯ÏÏÎ·: Î€Î± ÏÎ»Î®ÎºÏÏÎ± ÏÎ¿Ï
- ÎŽÏÎ¿ÎŒÎ­Î± ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎµÏÎ¯ÏÎ·Ï ÎœÎ± ÎŽÎ¿Ï
-Î»ÎµÏÎ¿Ï
-Îœ. ÎÎ»Î»Î¬ ÎŒÎµ ÏÎ± hjkl
-+	  ÎžÎ± ÎŒÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÎ¿Î»Ï Î³ÏÎ·Î³Î¿ÏÏÏÎµÏÎ±, ÎŒÏÎ»Î¹Ï ÏÎ± ÏÏ
-ÎœÎ·ÎžÎ¯ÏÎµÏÎµ.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		ÎÎ¬ÎžÎ·ÎŒÎ± 1.2:  ÎÎ ÎÎÎÎÎÎ€ÎÎ£ ÎÎÎ ÎÎÎÎÎÎÎÎ€ÎÎ£ Î£Î€ÎÎ VIM
-+
-+  !! Î£ÎÎÎÎÎ©Î£Î: Î ÏÎ¹Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± Î²Î®ÎŒÎ±ÏÎ±, ÎŽÎ¹Î±Î²Î¬ÏÏÎµ ÏÎ»Î¿ ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±!!
-+
-+  1. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <ESC> (Î³Î¹Î± ÎœÎ± ÎµÎ¯ÏÏÎµ ÏÎ¯Î³Î¿Ï
-ÏÎ± ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·).
-+
-+  2. Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ:		:q! <ENTER>.
-+
-+---> ÎÏ
-ÏÏ ÎµÎŸÎ­ÏÏÎµÏÎ±Î¹ Î±ÏÏ ÏÎ¿Îœ ÏÏ
-ÎœÏÎ¬ÎºÏÎ· Î§Î©Î¡ÎÎ£ ÎœÎ± ÏÏÏÎµÎ¹ ÏÏÎ¿Î¹ÎµÏ Î±Î»Î»Î±Î³Î­Ï Î­ÏÎµÏÎµ ÎºÎ¬ÎœÎµÎ¹.
-+     ÎÎœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÏÏÎµÏÎµ ÏÎ¹Ï Î±Î»Î»Î±Î³Î­Ï ÎºÎ±Î¹ ÎœÎ± ÎµÎŸÎ­ÏÎžÎµÏÎµ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ:
-+	      :wq <ENTER>
-+
-+  3. ÎÏÎ±Îœ ÎŽÎµÎ¯ÏÎµ ÏÎ·Îœ ÏÏÎ¿ÏÏÎ¿ÏÎ® ÏÎ¿Ï
- ÏÎ»Î¿Î¹Î¿Ï, ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ÎŒÎµ ÏÎ·Îœ Î¿ÏÎ¿Î¯Î±
-+     ÎŒÏÎ®ÎºÎ±ÏÎµ ÏÎµ Î±Ï
-ÏÎ®Îœ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·. ÎÏÎ¿ÏÎµÎ¯ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹:	vimtutor <ENTER>
-+     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ¬ ÎžÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î¿ÏÏÎ±ÏÎµ:			vim tutor <ENTER>
-+
-+---> 'vim' ÏÎ·ÎŒÎ±Î¯ÎœÎµÎ¹ ÎµÎ¹ÏÎ±Î³ÏÎ³Î® ÏÏÎ¿Îœ ÏÏ
-ÎœÏÎ¬ÎºÏÎ· vim, 'tutor' ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
-
-+     ÎžÎ­Î»Î¿Ï
-ÎŒÎµ ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎ¿Ï
-ÎŒÎµ.
-+
-+  4. ÎÎœ Î­ÏÎµÏÎµ Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÏÎµÎ¹ Î±Ï
-ÏÎ¬ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± ÎºÎ±Î¹ Î­ÏÎµÏÎµ Î±Ï
-ÏÎ¿ÏÎµÏÎ¿Î¯ÎžÎ·ÏÎ·, ÎµÎºÏÎµÎ»Î­ÏÏÎµ
-+     ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 1 Î­ÏÏ 3 Î³Î¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ ÎºÎ±Î¹ ÎœÎ± ÎŒÏÎµÎ¯ÏÎµ ÎŸÎ±ÎœÎ¬ ÏÏÎ¿Îœ ÏÏ
-ÎœÏÎ¬ÎºÏÎ·. ÎÎµÏÎ¬
-+     ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ¬ÏÏ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.3.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 1.3:  ÎÎÎÎ¡ÎÎ©Î£Î ÎÎÎÎÎÎÎÎ¥ - ÎÎÎÎÎ¡ÎÎŠÎ
-+
-+   ** ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  x  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ
-+      ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ ÏÎ± Î»Î¬ÎžÎ·, ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ Î±ÏÏ
-+     ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÎ¿Ï
- ÎžÎ± ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯.
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ x Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.
-+
-+  4. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎŒÎ­ÏÏÎ¹ 4 ÎŒÎ­ÏÏÎ¹ Î· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ®.
-+
-+---> The ccow jumpedd ovverr thhe mooon.
-+
-+  5. Î€ÏÏÎ± ÏÎ¿Ï
- Î· Î³ÏÎ±ÎŒÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ®, ÏÎ·Î³Î±Î¯ÎœÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.4.
-+
-+Î£ÎÎÎÎÎ©Î£Î: ÎÎ±ÎžÏÏ ÎŽÎ¹Î±ÏÏÎ­ÏÎµÏÎµ Î±Ï
-ÏÎ®Îœ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·, ÏÏÎ¿ÏÏÎ±ÎžÎ®ÏÏÎµ ÎœÎ± ÎŒÎ·Îœ
-+	  Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÎµÏÎµ, ÎŒÎ±ÎžÎ±Î¯ÎœÎµÏÎµ ÎŒÎµ ÏÎ· ÏÏÎ®ÏÎ·.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 1.4: ÎÎÎÎ¡ÎÎ©Î£Î ÎÎÎÎÎÎÎÎ¥ - Î ÎÎ¡ÎÎÎÎÎÎ
-+
-+ ** ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  i  Î³Î¹Î± ÎœÎ± ÏÎ±ÏÎµÎŒÎ²Î¬Î»Î»ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. ÎÎ¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î¯ÎŽÎ¹Î± ÎŒÎµ ÏÎ·Îœ ÎŽÎµÏÏÎµÏÎ·, ÎŒÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ
-+     ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¬ÎœÏ ÏÏÎ¿Îœ ÏÏÏÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎÎÎ€Î Î±ÏÏ ÏÏÎ¿Ï
- ÎžÎ± ÏÎ±ÏÎµÎŒÎ²Î»Î·ÎžÎµÎ¯ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿  i  ÎºÎ±Î¹ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ¹Ï Î±ÏÎ±ÏÎ±Î¯ÏÎ·ÏÎµÏ ÏÏÎ¿ÏÎžÎ®ÎºÎµÏ.
-+
-+  4. ÎÎ±ÎžÏÏ ÎŽÎ¹Î¿ÏÎžÏÎœÎµÏÎµ ÎºÎ¬ÎžÎµ Î»Î¬ÎžÎ¿Ï ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ± ÎµÏÎ¹ÏÏÏÎ­ÏÎµÏÎµ ÏÏÎ·Îœ
-+     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎŒÎ­ÏÏÎ¹ 4 Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ
-+     ÏÎ·Îœ ÏÏÏÏÎ±ÏÎ·.
-+
-+---> There is text misng this .
-+---> There is some text missing from this line.
-+
-+  5. ÎÏÎ±Îœ ÎµÎ¯ÏÏÎµ Î¬ÎœÎµÏÎ¿Î¹ ÎŒÎµ ÏÎ·Îœ ÏÎ±ÏÎµÎŒÎ²Î¿Î»Î® ÎºÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
- ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ
-+     ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎµÏÎ¯Î»Î·ÏÎ·.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 1 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1. Î ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎºÎ¹ÎœÎµÎ¯ÏÎ±Î¹ ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÎµÎ¯ÏÎµ ÏÎ± ÏÎ»Î®ÎºÏÏÎ± ÎŽÏÎ¿ÎŒÎ­Î± Î® ÏÎ± hjkl.
-+	 h (Î±ÏÎ¹ÏÏÎ­ÏÎ±)	j (ÎºÎ¬ÏÏ)	k (ÏÎ¬ÎœÏ)	l (ÎŽÎµÎŸÎ¹Î¬)
-+
-+  2. ÎÎ¹Î± ÎœÎ± ÎŒÏÎµÎ¯ÏÎµ ÏÏÎ¿Îœ Vim (Î±ÏÏ ÏÎ·Îœ ÏÏÎ¿ÏÏÎ¿ÏÎ® %) Î³ÏÎ¬ÏÏÎµ:  vim ÎÎ¡Î§ÎÎÎ <ENTER>
-+
-+  3. ÎÎ¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ Î³ÏÎ¬ÏÏÎµ:  <ESC>   :q!   <ENTER>   Î³Î¹Î± Î±ÏÏÏÏÎ¹ÏÎ· ÏÏÎœ Î±Î»Î»Î±Î³ÏÎœ.
-+		 Î Î³ÏÎ¬ÏÏÎµ:  <ESC>   :wq   <ENTER>   Î³Î¹Î± Î±ÏÎ¿ÎžÎ®ÎºÎµÏ
-ÏÎ· ÏÏÎœ Î±Î»Î»Î±Î³ÏÎœ.
-+
-+  4. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î­ÎœÎ±Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎµ
-+     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ:  x
-+
-+  5. ÎÎ¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· Î³ÏÎ¬ÏÏÎµ:
-+	 i     ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿	<ESC>
-+
-+Î£ÎÎÎÎÎ©Î£Î: Î Î±ÏÏÎœÏÎ±Ï <ESC> ÎžÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· Î® ÎžÎ±
-+	  Î±ÎºÏ
-ÏÏÏÎµÏÎµ ÎŒÎ¯Î± Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ· ÎºÎ±Î¹ ÎŒÎµÏÎ¹ÎºÏÏ Î¿Î»Î¿ÎºÎ»Î·ÏÏÎŒÎ­ÎœÎ· ÎµÎœÏÎ¿Î»Î®.
-+
-+Î€ÏÏÎ± ÏÏ
-ÎœÎµÏÎ¯ÏÏÎµ ÎŒÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 ÎÎ¬ÎžÎ·ÎŒÎ± 2.1: ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎ¡ÎÎŠÎÎ£
-+
-+	 ** ÎÏÎ¬ÏÏÎµ  dw  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÎŒÎ¯Î±Ï Î»Î­ÎŸÎ·Ï. **
-+
-+  1. Î Î±ÏÎ®ÏÏÎµ  <ESC>  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
-+
-+  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  3. Î Î·Î³Î±Î¯ÎœÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÏÏÎ® ÏÎ·Ï Î»Î­ÎŸÎ·Ï ÏÎ¿Ï
- ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯.
-+
-+  4. ÎÏÎ¬ÏÏÎµ  dw  Î³Î¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ Î»Î­ÎŸÎ· ÎœÎ± ÎµÎŸÎ±ÏÎ±ÎœÎ¹ÏÏÎµÎ¯.
-+
-+Î£ÎÎÎÎÎ©Î£Î: Î€Î± Î³ÏÎ¬ÎŒÎŒÎ±ÏÎ± dw ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎ¿ÏÎœ ÏÏÎ·Îœ ÏÎµÎ»ÎµÏ
-ÏÎ±Î¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï ÏÏÎ¿
-+	  ÏÎ± ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³ÎµÎ¯ÏÎµ. ÎÎœ Î³ÏÎ¬ÏÎ±ÏÎµ ÎºÎ¬ÏÎ¹ Î»Î¬ÎžÎ¿Ï, ÏÎ±ÏÎ®ÏÏÎµ  <ESC>  ÎºÎ±Î¹
-+	  ÎŸÎµÎºÎ¹ÎœÎ®ÏÏÎµ Î±ÏÏ ÏÎ·Îœ Î±ÏÏÎ®.
-+
-+---> There are a some words fun that don't belong paper in this sentence.
-+
-+  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 3 ÎºÎ±Î¹ 4 ÎŒÎ­ÏÏÎ¹ Î· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ® ÎºÎ±Î¹
-+     ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.2.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 2.2: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡ÎÎ£ ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎ¡ÎÎŠÎÎ£
-+
-+    ** Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ  d$  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï. **
-+
-+  1. Î Î±ÏÎ®ÏÏÎµ  <ESC>  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
-+
-+  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï ÏÏÏÏÎ®Ï Î³ÏÎ±ÎŒÎŒÎ®Ï (ÎÎÎ€Î ÏÎ·Îœ ÏÏÏÏÎ· . ).
-+
-+  4. Î Î±ÏÎ®ÏÏÎµ   d$   Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+
-+---> Somebody typed the end of this line twice. end of this line twice.
-+
-+  5. Î Î·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.3 Î³Î¹Î± ÎœÎ± ÎºÎ±ÏÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ¹ ÏÏ
-ÎŒÎ²Î±Î¯ÎœÎµÎ¹.
-+
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 2.3: Î ÎÎ¡Î ÎÎÎ€ÎÎÎ©Î ÎÎÎ ÎÎÎ€ÎÎÎÎÎÎÎÎ©Î
-+
-+
-+Î ÎŒÎ¿ÏÏÎ® ÏÎ·Ï ÎµÎœÏÎ¿Î»Î®Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï  d  ÎµÎ¯ÎœÎ±Î¹ ÏÏ ÎµÎŸÎ®Ï:
-+
-+	 [Î±ÏÎ¹ÎžÎŒÏÏ]   d   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿	Î	d   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
-+  ÎÏÎ¿Ï
-:
-+    Î±ÏÎ¹ÎžÎŒÏÏ - ÏÏÏÎµÏ ÏÎ¿ÏÎ­Ï ÎžÎ± ÎµÎºÏÎµÎ»ÎµÏÏÎµÎ¯ Î· ÎµÎœÏÎ¿Î»Î® (ÏÏÎ¿Î±Î¹ÏÎµÏÎ¹ÎºÏ, ÎµÎŸ' Î¿ÏÎ¹ÏÎŒÎ¿Ï=1).
-+    d - Î· ÎµÎœÏÎ¿Î»Î® ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï.
-+    Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ - ÏÎ¬ÎœÏ ÏÎµ ÏÎ¹ ÎžÎ± Î»ÎµÎ¹ÏÎ¿Ï
-ÏÎ³Î®ÏÎµÎ¹ Î· ÎµÎœÏÎ¿Î»Î® (ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î»Î¯ÏÏÎ±).
-+
-+  ÎÎ¯Î± ÎŒÎ¹ÎºÏÎ® Î»Î¯ÏÏÎ± Î±ÏÏ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ±:
-+    w - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, ÏÎµÏÎ¹Î»Î±ÎŒÎ²Î¬ÎœÎ¿ÎœÏÎ±Ï ÏÎ¿ ÎŽÎ¹Î¬ÏÏÎ·ÎŒÎ±.
-+    e - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, Î§Î©Î¡ÎÎ£ ÏÎ¿ ÎŽÎ¹Î¬ÏÏÎ·ÎŒÎ±.
-+    $ - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+
-+Î£ÎÎÎÎÎ©Î£Î:  ÎÎ¹Î± ÏÎ¿Ï
-Ï ÏÏÏÎ¿Ï
-Ï ÏÎ·Ï ÏÎµÏÎ¹ÏÎ­ÏÎµÎ¹Î±Ï, ÏÎ±ÏÏÎœÏÎ±Ï Î±ÏÎ»ÏÏ ÏÎ¿ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿
-+	   ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÏÎ¯Ï ÎºÎ¬ÏÎ¿Î¹Î± ÎµÎœÏÎ¿Î»Î® ÎžÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ
-+	   ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÏÏ ÎºÎ±ÎžÎ¿ÏÎ¯Î¶ÎµÏÎ±Î¹ ÏÏÎ·Îœ Î»Î¯ÏÏÎ± Î±ÎœÏÎ¹ÎºÎµÎ¹ÎŒÎ­ÎœÏÎœ.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+	       ÎÎ¬ÎžÎ·ÎŒÎ± 2.4: ÎÎÎ ÎÎÎÎÎ¡ÎÎ£Î Î£Î€ÎÎ 'ÎÎÎ€ÎÎÎ-ÎÎÎ€ÎÎÎÎÎÎÎÎ'
-+
-+	   ** Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ»Î· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. **
-+
-+  ÎÎŸÎ±Î¹ÏÎ¯Î±Ï ÏÎ·Ï ÏÏ
-ÏÎœÏÏÎ·ÏÎ±Ï ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï Î¿Î»ÏÎºÎ»Î·ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï, Î¿Î¹ ÏÏÎµÎŽÎ¹Î±ÏÏÎ­Ï
-+  ÏÎ¿Ï
- Vim Î±ÏÎ¿ÏÎ¬ÏÎ¹ÏÎ±Îœ ÏÏÎ¹ ÎžÎ± Î®ÏÎ±Îœ ÎµÏ
-ÎºÎ¿Î»ÏÏÎµÏÎ¿ ÎœÎ± Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÎ»ÏÏ ÎŽÏÎ¿ d ÏÏÎ·
-+  ÏÎµÎ¹ÏÎ¬ Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ· ÎŽÎµÏÏÎµÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÏÎ¬ÏÎ·Ï.
-+  2. ÎÏÎ¬ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+  3. Î€ÏÏÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÏÎ­ÏÎ±ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+  4. ÎÏÎ¬ÏÏÎµ  2dd  (ÎžÏ
-ÎŒÎ·ÎžÎµÎ¯ÏÎµ  Î±ÏÎ¹ÎžÎŒÏÏ-ÎµÎœÏÎ¿Î»Î®-Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿) Î³Î¹Î± ÎœÎ±
-+     ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÎ­Ï.
-+
-+      1)  Roses are red,
-+      2)  Mud is fun,
-+      3)  Violets are blue,
-+      4)  I have a car,
-+      5)  Clocks tell time,
-+      6)  Sugar is sweet
-+      7)  And so are you.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 ÎÎ¬ÎžÎ·ÎŒÎ± 2.5: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎ¡ÎÎ£ÎÎ£
-+
-+	    ** Î Î±ÏÎ®ÏÏÎµ  u  Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï ÏÎµÎ»ÎµÏ
-ÏÎ±Î¯ÎµÏ ÎµÎœÏÎ¿Î»Î­Ï,
-+	       U Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ ÏÎ»Î· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> ÎºÎ±Î¹
-+     ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ¬ÎœÏ ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
-+  2. Î Î±ÏÎ®ÏÏÎµ  x  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ ÏÏÏÏÎ¿ Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.
-+  3. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  u  Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ·Îœ ÏÎµÎ»ÎµÏ
-ÏÎ±Î¯Î± ÎµÎºÏÎµÎ»ÎµÏÎŒÎ­ÎœÎ· ÎµÎœÏÎ¿Î»Î®.
-+  4. ÎÏ
-ÏÎ® ÏÎ· ÏÎ¿ÏÎ¬ ÎŽÎ¹Î¿ÏÎžÏÏÏÎµ ÏÎ»Î± ÏÎ± Î»Î¬ÎžÎ· ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® x.
-+  5. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ Î­ÎœÎ± ÎºÎµÏÎ±Î»Î±Î¯Î¿  U  Î³Î¹Î± ÎœÎ± ÎµÏÎ¹ÏÏÏÎ­ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ·Îœ Î±ÏÏÎ¹ÎºÎ®
-+     ÏÎ·Ï ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
-+  6. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  u  ÎŒÎµÏÎ¹ÎºÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ·Îœ  U  ÎºÎ±Î¹
-+     ÏÏÎ¿Î·Î³Î¿ÏÎŒÎµÎœÎµÏ ÎµÎœÏÎ¿Î»Î­Ï.
-+  7. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ CTRL-R (ÎºÏÎ±ÏÏÎœÏÎ±Ï ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ CTRL ÎºÎ±ÎžÏÏ ÏÎ±ÏÎ¬ÏÎµ ÏÎ¿ R)
-+     ÎŒÎµÏÎ¹ÎºÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± ÎµÏÎ±ÎœÎ±ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï (Î±ÎœÎ±Î¯ÏÎµÏÎ· ÏÏÎœ Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎœ).
-+
-+---> Fiix the errors oon thhis line and reeplace them witth undo.
-+
-+  8. ÎÏ
-ÏÎ­Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÏÏÎ®ÏÎ¹ÎŒÎµÏ ÎµÎœÏÎ¿Î»Î­Ï.  Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ·Îœ
-+     Î ÎµÏÎ¯Î»Î·ÏÎ· ÏÎ¿Ï
- ÎÎ±ÎžÎ®ÎŒÎ±ÏÎ¿Ï 2.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 2 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î»Î­ÎŸÎ·Ï Î³ÏÎ¬ÏÏÎµ:      dw
-+
-+  2. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï Î³ÏÎ¬ÏÏÎµ:    d$
-+
-+  3. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î¿Î»ÏÎºÎ»Î·ÏÎ· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ:    dd
-+
-+  4. Î ÎŒÎ¿ÏÏÎ® Î³Î¹Î± ÎŒÎ¯Î± ÎµÎœÏÎ¿Î»Î® ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎµÎ¯ÎœÎ±Î¹:
-+
-+      [Î±ÏÎ¹ÎžÎŒÏÏ]   ÎµÎœÏÎ¿Î»Î®   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿    Î    ÎµÎœÏÎ¿Î»Î®   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
-+     ÏÏÎ¿Ï
-:
-+       Î±ÏÎ¹ÎžÎŒÏÏ - ÏÏÏÎµÏ ÏÎ¿ÏÎ­Ï ÎœÎ± ÎµÏÎ±ÎœÎ±Î»Î·ÏÎžÎµÎ¯ Î· ÎµÎœÏÎ¿Î»Î®
-+       ÎµÎœÏÎ¿Î»Î® - ÏÎ¹ ÎœÎ± Î³Î¯ÎœÎµÎ¹, ÏÏÏÏ Î·  d  Î³Î¹Î± ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®
-+       Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ - ÏÎ¬ÎœÏ ÏÎµ ÏÎ¹ ÎœÎ± ÎµÎœÎµÏÎ³Î®ÏÎµÎ¹ Î· ÎµÎœÏÎ¿Î»Î®, ÏÏÏÏ  w  (Î»Î­ÎŸÎ·),
-+		     $ (ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï), ÎºÏÎ».
-+
-+  5. ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÏÎ¿Î·Î³Î¿ÏÎŒÎµÎœÎµÏ ÎµÎœÎ­ÏÎ³ÎµÎ¹ÎµÏ, ÏÎ±ÏÎ®ÏÏÎµ:        u   (ÏÎµÎ¶Ï u)
-+     ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï Î±Î»Î»Î±Î³Î­Ï ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®, ÏÎ±ÏÎ®ÏÏÎµ:  U  (ÎºÎµÏÎ±Î»Î±Î¯Î¿ U)
-+     ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï Î±ÎœÎ±Î¹ÏÎ­ÏÎµÎ¹Ï, ÏÎ±ÏÎ®ÏÏÎµ:               CTRL-R
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			ÎÎ¬ÎžÎ·ÎŒÎ± 3.1: Î ÎÎÎ€ÎÎÎ Î€ÎÎ ÎÎÎÎ€ÎÎ£ÎÎ£
-+
-+
-+  ** Î Î±ÏÎ®ÏÏÎµ  p  Î³Î¹Î± ÎœÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÎµÏÎµ ÏÎ·Îœ ÏÎµÎ»ÎµÏ
-ÏÎ±Î¯Î± ÎŽÎ¹Î±Î³ÏÎ±ÏÎ® ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.  **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î¿ÎŒÎ¬ÎŽÎ±Ï.
-+
-+  2. Î Î±ÏÎ®ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ±Î¹ ÎœÎ± ÏÎ·Îœ Î±ÏÎ¿ÎžÎ·ÎºÎµÏÏÎµÏÎµ ÏÎµ
-+     ÏÏÎ¿ÏÏÏÎ¹ÎœÎ® ÎŒÎœÎ®ÎŒÎ· ÏÎ¿Ï
- Vim.
-+
-+  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î ÎÎÎ© Î±ÏÏ ÎµÎºÎµÎ¯ ÏÎ¿Ï
- ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎ¬ÎµÎ¹
-+     Î· ÎŽÎ¹Î±Î³ÏÎ±ÎŒÎŒÎ­ÎœÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+  4. ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ  p  Î³Î¹Î± ÎœÎ± Î²Î¬Î»ÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 Î­ÏÏ 4 Î³Î¹Î± ÎœÎ± Î²Î¬Î»ÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï Î³ÏÎ±ÎŒÎŒÎ­Ï ÏÏÎ·
-+     ÏÏÏÏÎ® ÏÎµÎ¹ÏÎ¬.
-+
-+     d) Can you learn too?
-+     b) Violets are blue,
-+     c) Intelligence is learned,
-+     a) Roses are red,
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		      ÎÎ¬ÎžÎ·ÎŒÎ± 3.2: Î ÎÎÎ€ÎÎÎ ÎÎÎ€ÎÎÎÎ€ÎÎ£Î€ÎÎ£ÎÎ£
-+
-+
-+    ** Î Î±ÏÎ®ÏÏÎµ  r  ÎºÎ±Î¹ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ Î±Ï
-ÏÏÎœ ÏÎ¿Ï
- ÎµÎ¯ÎœÎ±Î¹
-+       ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± Î­ÏÏÎ¹ ÏÏÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ  r  ÎºÎ±Î¹ ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î¿ Î¿ÏÎ¿Î¯Î¿Ï ÎŽÎ¹Î¿ÏÎžÏÎœÎµÎ¹ ÏÎ¿ Î»Î¬ÎžÎ¿Ï.
-+
-+  4. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎºÎ±Î¹ 3 ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ® Î· ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
-+--->  When this line was typed in, someone pressed some wrong keys!
-+
-+  5. Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 3.2.
-+
-+Î£ÎÎÎÎÎ©Î£Î: ÎÎ± ÎžÏ
-ÎŒÎ¬ÏÏÎµ ÏÏÎ¹ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŒÎ±ÎžÎ±Î¯ÎœÎµÏÎµ ÎŒÎµ ÏÎ· ÏÏÎ®ÏÎ·, ÎºÎ±Î¹ ÏÏÎ¹ ÎŒÎµ
-+	  ÏÎ·Îœ Î±ÏÎ¿ÎŒÎœÎ·ÎŒÏÎœÎµÏ
-ÏÎ·.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  ÎÎ¬ÎžÎ·ÎŒÎ± 3.3: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎÎ£
-+
-+	   ** ÎÎ¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎŒÎ®ÎŒÎ± Î® ÏÎ»Î· ÏÎ· Î»Î­ÎŸÎ·, ÏÎ±ÏÎ®ÏÏÎµ  cw  . **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¬ÎœÏ ÏÏÎ¿ u ÏÎ·Ï Î»Î­ÎŸÎ·Ï lubw.
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ  cw  ÎºÎ±Î¹ ÏÎ· ÏÏÏÏÎ® Î»Î­ÎŸÎ· (ÏÏÎ·Îœ ÏÎµÏÎ¯ÏÏÏÏÎ· Î±Ï
-ÏÎ®, Î³ÏÎ¬ÏÏÎµ  'ine'.)
-+
-+  4. Î Î±ÏÎ®ÏÏÎµ <ESC> ÎºÎ±Î¹ ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ Î»Î¬ÎžÎ¿Ï (ÏÏÎ¿Îœ ÏÏÏÏÎ¿
-+     ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÏÎ¿Ï Î±Î»Î»Î±Î³Î®).
-+
-+  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 3 ÎºÎ±Î¹ 4 ÎŒÎ­ÏÏÎ¹Ï ÏÏÎ¿Ï
- Î· ÏÏÏÏÎ· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹
-+     Î¯ÎŽÎ¹Î± ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·.
-+
-+---> This lubw has a few wptfd that mrrf changing usf the change command.
-+---> This line has a few words that need changing using the change command.
-+
-+Î Î±ÏÎ±ÏÎ·ÏÎµÎ¯ÏÏÎµ ÏÏÎ¹ Î·  cw  ÏÏÎ¹ ÎŒÏÎœÎ¿ Î±ÎœÏÎ¹ÎºÎ±ÎžÎ¹ÏÏÎ¬ÎµÎ¹ ÏÎ· Î»Î­ÎŸÎ·, Î±Î»Î»Î¬ ÏÎ±Ï ÎµÎ¹ÏÎ¬Î³ÎµÎ¹
-+ÎµÏÎ¯ÏÎ·Ï ÏÎµ ÏÎ±ÏÎµÎŒÎ²Î¿Î»Î®.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		     ÎÎ¬ÎžÎ·ÎŒÎ± 3.4: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡ÎÎ£ ÎÎÎÎÎÎÎ£ ÎÎ c
-+
-+
-+  ** Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎ±Î¹ ÎŒÎµ ÏÎ± Î¯ÎŽÎ¹Î± Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ± ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï. **
-+
-+
-+  1. Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÎŽÎ¿Ï
-Î»ÎµÏÎµÎ¹ ÎŒÎµ ÏÎ¿Îœ Î¯ÎŽÎ¹Î¿ ÏÏÏÏÎ¿ ÏÏÏÏ Î· ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®. Î ÎŒÎ¿ÏÏÎ® ÎµÎ¯ÎœÎ±Î¹:
-+
-+       [Î±ÏÎ¹ÎžÎŒÏÏ]   c   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿     Î     c   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
-+
-+  2. Î€Î± Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬Î»Î¹ ÏÎ± Î¯ÎŽÎ¹Î±, ÏÏÏÏ w (Î»Î­ÎŸÎ·), $ (ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï), ÎºÏÎ».
-+
-+  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  4. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
-+
-+  5. ÎÏÎ¬ÏÏÎµ  c$  Î³Î¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ¿ Ï
-ÏÏÎ»Î¿Î¹ÏÎ¿ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï Î¯ÎŽÎ¹Î¿ ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·
-+     ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ESC>.
-+
-+---> The end of this line needs some help to make it like the second.
-+---> The end of this line needs to be corrected using the  c$  command.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 3 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1. ÎÎ¹Î± ÎœÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ¿Ï
- ÎŒÏÎ»Î¹Ï Î­ÏÎµÎ¹ ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯, ÏÎ±ÏÎ®ÏÏÎµ  p .
-+     ÎÏ
-ÏÏ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ ÏÎ¿ ÎŽÎ¹Î±Î³ÏÎ±ÎŒÎŒÎ­ÎœÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± (Î±Îœ ÎŽÎ¹Î±Î³ÏÎ¬ÏÏÎ·ÎºÎµ
-+     Î³ÏÎ±ÎŒÎŒÎ® ÎžÎ± ÏÎ¬ÎµÎ¹ ÎŒÎµÏÎ¬ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.
-+
-+  2. ÎÎ¹Î± ÎœÎ± Î±ÎœÏÎ¹ÎºÎ±ÏÎ±ÏÏÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ  r
-+     ÎºÎ±Î¹ ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÎ¿Ï
- ÎžÎ± Î±ÎœÏÎ¹ÎºÎ±ÏÎ±ÏÏÎ®ÏÎµÎ¹ ÏÎ¿Îœ Î±ÏÏÎ¹ÎºÏ.
-+
-+  3. Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎ¿ ÎºÎ±ÎžÎ¿ÏÎ¹ÏÎŒÎ­ÎœÎ¿ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
-+     Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
- Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿. Î .Ï. Î³ÏÎ¬ÏÏÎµ  cw  Î³Î¹Î± ÎœÎ±
-+     Î±Î»Î»Î¬ÎŸÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, c$ Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ
-+     ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+
-+  4. Î ÎŒÎ¿ÏÏÎ® Î³Î¹Î± ÏÎ·Îœ Î±Î»Î»Î±Î³Î® ÎµÎ¯ÎœÎ±Î¹:
-+
-+	 [Î±ÏÎ¹ÎžÎŒÏÏ]   c   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿     Î     c   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
-+
-+Î€ÏÏÎ± ÏÏ
-ÎœÎµÏÎ¯ÏÏÎµ ÎŒÎµ ÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		     ÎÎ¬ÎžÎ·ÎŒÎ± 4.1: ÎÎÎ£Î ÎÎÎ ÎÎÎ€ÎÎ£Î€ÎÎ£Î ÎÎ¡Î§ÎÎÎÎ¥
-+
-+
-+ ** Î Î±ÏÎ®ÏÏÎµ CTRL-g Î³Î¹Î± ÎœÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎµÎ¯ Î· ÎžÎ­ÏÎ· ÏÎ±Ï ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎºÎ±Î¹ Î· ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ® ÏÎ¿Ï
-.
-+    Î Î±ÏÎ®ÏÏÎµ SHIFT-G Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµ ÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿. **
-+
-+  Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ¹Î±Î²Î¬ÏÏÎµ Î¿Î»ÏÎºÎ»Î·ÏÎ¿ ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ± ÏÏÎ¹Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± Î²Î®ÎŒÎ±ÏÎ±!!
-+
-+  1. ÎÏÎ±ÏÎ®ÏÏÎµ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ Ctrl ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ  g . ÎÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·Ï
-+     ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎµÎ¯ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
- ÎºÎ±Î¹ ÏÎ·
-+     Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¿Ï
- ÎµÎ¯ÏÏÎµ. ÎÏ
-ÎŒÎ·ÎžÎµÎ¯ÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ Î³ÏÎ±ÎŒÎŒÎ®Ï Î³Î¹Î± ÏÎ¿ ÎÎ®ÎŒÎ± 3.
-+
-+  2. Î Î±ÏÎ®ÏÏÎµ shift-G Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
-.
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï ÏÎ¿Ï
- Î®ÏÎ±ÏÏÎ±Îœ ÎºÎ±Î¹ ÎŒÎµÏÎ¬ shift-G. ÎÏ
-ÏÏ ÎžÎ±
-+     ÏÎ±Ï ÎµÏÎ¹ÏÏÏÎ­ÏÎµÎ¹ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¿Ï
- Î®ÏÎ±ÏÏÎ±Îœ ÏÏÎ¹Îœ ÏÎ±ÏÎ®ÏÎµÏÎµ Î³Î¹Î± ÏÏÏÏÎ· ÏÎ¿ÏÎ¬ Ctrl-g.
-+     (ÎÏÎ±Îœ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³ÎµÎ¯ÏÎµ ÏÎ¿Ï
-Ï Î±ÏÎ¹ÎžÎŒÎ¿ÏÏ, ÎÎÎ ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÏÎ·Îœ Î¿ÎžÏÎœÎ·).
-+
-+  4. ÎÎœ ÎœÎ¿Î¹ÏÎžÎµÏÎµ ÏÎ¯Î³Î¿Ï
-ÏÎ¿Ï Î³Î¹Î± Î±Ï
-ÏÏ, ÎµÎºÏÎµÎ»Î­ÏÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 1 Î­ÏÏ 3.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			ÎÎ¬ÎžÎ·ÎŒÎ± 4.2: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎ€ÎÎ£ÎÎ£
-+
-+
-+	  ** Î Î±ÏÎ®ÏÏÎµ   /   Î±ÎºÎ¿Î»Î¿Ï
-ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÏÎ· ÏÏÎ¬ÏÎ· ÏÎ¿Ï
- ÏÎ¬ÏÎœÎµÏÎµ. **
-+
-+  1. Î£Îµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±  / . Î Î±ÏÎ±ÏÎ·ÏÎ®ÏÏÎµ ÏÏÎ¹ Î±Ï
-ÏÏÏ ÎºÎ±Î¹
-+     Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎŒÏÎ±ÎœÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï ÏÏÏÏ ÎŒÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  : .
-+
-+  2. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ 'errroor' <ENTER>. ÎÏ
-ÏÎ® ÎµÎ¯ÎœÎ±Î¹ Î· Î»Î­ÎŸÎ· ÏÎ¿Ï
- ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ.
-+
-+  3. ÎÎ¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ ÎŸÎ±ÎœÎ¬ Î³Î¹Î± ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÏÏÎ¬ÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ Î±ÏÎ»ÏÏ  n .
-+     ÎÎ¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÏÏÎ¬ÏÎ· ÏÏÎ·Îœ Î±ÎœÏÎ¯ÎžÎµÏÎ· ÎºÎ±ÏÎµÏÎžÏ
-ÎœÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ  Shift-N .
-+
-+  4. ÎÎœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ Î³Î¹Î± ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÏÎ¿Ï ÏÎ± ÏÎ¯ÏÏ, ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  ?  Î±ÎœÏÎ¯ ÏÎ·Ï  / .
-+
-+---> ÎÏÎ±Îœ Î· Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÏÏÎ¬ÏÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
- ÎžÎ± ÏÏ
-ÎœÎµÏÎ¯ÏÎµÎ¹ Î±ÏÏ ÏÎ·Îœ Î±ÏÏÎ®.
-+
-+  "errroor" is not the way to spell error;  errroor is an error.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 4.3: ÎÎ¥Î¡ÎÎ£Î Î€ÎÎÎ¡ÎÎÎ£Î€Î©Î Î ÎÎ¡ÎÎÎÎÎ£ÎÎ©Î
-+
-+
-+	  ** Î Î±ÏÎ®ÏÏÎµ   %   Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ·Îœ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ· ), ], Î® } . **
-+
-+  1. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎµ ÎºÎ¬ÏÎ¿Î¹Î± (, [, Î® { ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ®
-+     ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±  % .
-+
-+  3. Î ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÎ·Îœ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ· ÏÎ±ÏÎ­ÎœÎžÎµÏÎ· Î® Î±Î³ÎºÏÎ»Î·.
-+
-+  4. Î Î±ÏÎ®ÏÏÎµ  %  Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¯ÏÏ ÏÏÎ·Îœ ÏÏÏÏÎ· Î±Î³ÎºÏÎ»Î·
-+    (ÏÎ¿Ï
- Î¶ÎµÏ
-Î³Î±ÏÎ¹Î¿Ï).
-+
-+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
-+
-+Î£ÎÎÎÎÎ©Î£Î: ÎÏ
-ÏÏ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÏÏÎ®ÏÎ¹ÎŒÎ¿ ÏÏÎ·Îœ Î±ÏÎ¿ÏÏÎ±Î»ÎŒÎ¬ÏÏÏÎ· ÎµÎœÏÏ ÏÏÎ¿Î³ÏÎ¬ÎŒÎŒÎ±ÏÎ¿Ï
-+	  ÎŒÎµ ÎŒÎ· ÏÎ±Î¹ÏÎ¹Î±ÏÏÎ­Ï ÏÎ±ÏÎµÎœÎžÎ­ÏÎµÎ¹Ï!
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		    ÎÎ¬ÎžÎ·ÎŒÎ± 4.4: ÎÎÎÎ£ Î€Î¡ÎÎ ÎÎ£ ÎÎÎ ÎÎÎÎÎÎ ÎÎÎÎ©Î
-+
-+
-+       ** ÎÏÎ¬ÏÏÎµ  :s/old/new/g  Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎ¿ 'new' ÎŒÎµ ÏÎ¿ 'old'. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. ÎÏÎ¬ÏÏÎµ  :s/thee/the <ENTER> . Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ Î±Ï
-ÏÎ® Î· ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î¬Î¶ÎµÎ¹ ÎŒÏÎœÎ¿
-+     ÏÎ·Îœ ÏÏÏÏÎ· ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+  3. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ   :s/thee/the/g    ÎµÎœÎœÎ¿ÏÎœÏÎ±Ï Î³ÎµÎœÎ¹ÎºÎ® Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÎ·
-+     Î³ÏÎ±ÎŒÎŒÎ®. ÎÏ
-ÏÏ Î±Î»Î»Î¬Î¶ÎµÎ¹ ÏÎ»ÎµÏ ÏÎ¹Ï ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÎ¹Ï ÎµÏÎ¯ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+
-+---> thee best time to see thee flowers is in thee spring.
-+
-+  4. ÎÎ¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÎºÎ¬ÎžÎµ ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÎŒÎ¯Î±Ï ÏÏ
-ÎŒÎ²Î¿Î»Î¿ÏÎµÎ¹ÏÎ¬Ï ÎŒÎµÏÎ±ÎŸÏ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÏÎœ,
-+     Î³ÏÎ¬ÏÏÎµ   :#,#s/old/new/g   ÏÏÎ¿Ï
- #,# Î¿Î¹ Î±ÏÎ¹ÎžÎŒÎ¿Î¯ ÏÏÎœ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÏÎœ.
-+     ÎÏÎ¬ÏÏÎµ   :%s/old/new/g     Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÎºÎ¬ÎžÎµ ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÎµ ÏÎ»Î¿ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿.
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 4 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1. Î€Î¿  Ctrl-g  ÎµÎŒÏÎ±ÎœÎ¯Î¶ÎµÎ¹ ÏÎ· ÎžÎ­ÏÎ· ÏÎ±Ï ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎºÎ±Î¹ ÏÎ·Îœ ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ® ÏÎ¿Ï
-.
-+     Î€Î¿  Shift-G  ÏÎ·Î³Î±Î¯ÎœÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
-. ÎÎœÎ±Ï Î±ÏÎ¹ÎžÎŒÏÏ Î³ÏÎ±ÎŒÎŒÎ®Ï
-+     Î±ÎºÎ¿Î»Î¿Ï
-ÎžÎ¿ÏÎŒÎµÎœÎ¿Ï Î±ÏÏ  Shift-G  ÏÎ·Î³Î±Î¯ÎœÎµÎ¹ ÏÎµ ÎµÎºÎµÎ¯ÎœÎ· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
-+
-+  2. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï  /  Î±ÎºÎ¿Î»Î¿Ï
-ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÎ¬ÏÎœÎµÎ¹ ÏÏÎ¿Ï ÏÎ± ÎÎ Î¡ÎÎ£Î€Î Î³Î¹Î±
-+     ÏÎ· ÏÏÎ¬ÏÎ·. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï  ?  Î±ÎºÎ¿Î»Î¿Ï
-ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÎ¬ÏÎœÎµÎ¹ ÏÏÎ¿Ï ÏÎ± Î ÎÎ£Î©
-+     Î³Î¹Î± ÏÎ· ÏÏÎ¬ÏÎ·. ÎÎµÏÎ¬ Î±ÏÏ ÎŒÎ¯Î± Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  n  Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ·Îœ
-+     ÎµÏÏÎŒÎµÎœÎ· ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÏÎ¿Ï ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÎºÎ±ÏÎµÏÎžÏ
-ÎœÏÎ· Î®  Shift-N  Î³Î¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ
-+     ÏÏÎ¿Ï ÏÎ·Îœ Î±ÎœÏÎ¯ÎžÎµÏÎ· ÎºÎ±ÏÎµÏÎžÏ
-ÎœÏÎ·.
-+
-+  3. Î Î±ÏÏÎœÏÎ±Ï  %  ÏÏÎ¿ Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ ÏÎµ ÎŒÎ¯Î± (,),[,],{, Î® }  ÎµÎœÏÎ¿ÏÎ¯Î¶ÎµÎ¹
-+     ÏÎ¿ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ¿ ÏÎ±Î¯ÏÎ¹ ÏÎ¿Ï
- Î¶ÎµÏ
-Î³Î±ÏÎ¹Î¿Ï.
-+
-+  4. ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎŒÎµ new ÏÎ¿Ï
- ÏÏÏÏÎ¿Ï
- old ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ  :s/old/new
-+     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎŒÎµ new ÏÎ»ÏÎœ ÏÏÎœ 'old' ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ  :s/old/new/g
-+     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÎ¬ÏÎµÏÎœ ÎŒÎµÏÎ±ÎŸÏ ÎŽÏÎ¿ # Î³ÏÎ±ÎŒÎŒÏÎœ Î³ÏÎ¬ÏÏÎµ      :#,#s/old/new/g
-+     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ»ÏÎœ ÏÏÎœ ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÏÎœ ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î³ÏÎ¬ÏÏÎµ    :%s/old/new/g
-+     ÎÎ¹Î± ÎµÏÏÏÎ·ÏÎ· ÎµÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ·Ï ÎºÎ¬ÎžÎµ ÏÎ¿ÏÎ¬ ÏÏÎ¿ÏÎžÎ­ÏÏÎµ Î­ÎœÎ± 'c'       "%s/old/new/gc
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  ÎÎ¬ÎžÎ·ÎŒÎ± 5.1: Î Î©Î£ ÎÎÎ€ÎÎÎ© ÎÎÎ ÎÎÎ©Î€ÎÎ¡ÎÎÎ ÎÎÎ€ÎÎÎ
-+
-+
-+** ÎÏÎ¬ÏÏÎµ  :!  Î±ÎºÎ¿Î»Î¿Ï
-ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î® Î³Î¹Î± ÎœÎ± ÏÎ·Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ. **
-+
-+  1. Î Î±ÏÎ®ÏÏÎµ ÏÎ·Îœ Î¿Î¹ÎºÎµÎ¯Î± ÎµÎœÏÎ¿Î»Î®  :  Î³Î¹Î± ÎœÎ± ÎžÎ­ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï
-+     ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï. ÎÏ
-ÏÏ ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŽÏÏÎµÏÎµ ÎŒÎ¯Î± ÎµÎœÏÎ¿Î»Î®.
-+
-+  2. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  ÏÎ¿  !  (ÎžÎ±Ï
-ÎŒÎ±ÏÏÎ¹ÎºÏ). ÎÏ
-ÏÏ ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ
-+     Î¿ÏÎ¿Î¹Î±ÎŽÎ®ÏÎ¿ÏÎµ ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î® ÏÎ¿Ï
- ÏÎ»Î¿Î¹Î¿Ï.
-+
-+  3. Î£Î±Îœ ÏÎ±ÏÎ¬ÎŽÎµÎ¹Î³ÎŒÎ± Î³ÏÎ¬ÏÏÎµ  ls  ÎŒÎµÏÎ¬ Î±ÏÏ ÏÎ¿ ! ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ENTER>. ÎÏ
-ÏÏ ÎžÎ±
-+     ÏÎ±Ï ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÎ¹ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± ÏÎ¿Ï
- ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
- ÏÎ±Ï, Î±ÎºÏÎ¹Î²ÏÏ ÏÎ±Îœ ÎœÎ± Î®ÏÎ±ÏÏÎ±Îœ ÏÏÎ·Îœ
-+     ÏÏÎ¿ÏÏÎ¿ÏÎ® ÏÎ¿Ï
- ÏÎ»Î¿Î¹Î¿Ï. Î ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ  :!dir  Î±Îœ ÏÎ¿ ls ÎŽÎµÎœ ÎŽÎ¿Ï
-Î»ÎµÏÎµÎ¹.
-+
-+---> Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ¯ÎœÎ±Î¹ ÎŽÏ
-ÎœÎ±ÏÏÎœ ÎœÎ± ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ Î¿ÏÎ¿Î¹Î±ÎŽÎ®ÏÎ¿ÏÎµ ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î®
-+     ÎŒÎµ Î±Ï
-ÏÏÎœ ÏÎ¿Îœ ÏÏÏÏÎ¿.
-+
-+---> Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ»ÎµÏ Î¿Î¹ ÎµÎœÏÎ¿Î»Î­Ï  :  ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎŒÎ±ÏÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ <ENTER>.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		 ÎÎ¬ÎžÎ·ÎŒÎ± 5.2: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡Î Î ÎÎ¡Î ÎÎÎÎ¡ÎÎŠÎÎ£ ÎÎ¡Î§ÎÎÎ©Î
-+
-+
-+   ** ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÏÎ¹Ï Î±Î»Î»Î¬Î³ÎµÏ ÏÎ¿Ï
- ÎºÎ¬ÎœÎ±ÏÎµ ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿, Î³ÏÎ¬ÏÏÎµ  :w ÎÎ¡Î§ÎÎÎ.  **
-+
-+  1. ÎÏÎ¬ÏÏÎµ  :!dir  Î®  :!ls  Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± ÏÎ¿Ï
- ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
- ÏÎ±Ï.
-+     ÎÎŽÎ· ÎŸÎ­ÏÎµÏÎµ ÏÏÎ¹ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎ±ÏÎ®ÏÎµÏÎµ <ENTER> ÎŒÎµÏÎ¬ Î±ÏÏ Î±Ï
-ÏÏ.
-+
-+  2. ÎÎ¹Î±Î»Î­ÎŸÏÎµ Î­ÎœÎ± ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
- ÏÎ¿Ï
- ÎŽÎµÎœ Ï
-ÏÎ¬ÏÏÎµÎ¹ Î±ÎºÏÎŒÎ±, ÏÏÏÏ ÏÎ¿ TEST.
-+
-+  3. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ:  :w TEST  (ÏÏÎ¿Ï
- TEST ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
- ÏÎ¿Ï
- ÎŽÎ¹Î±Î»Î­ÎŸÎ±ÏÎµ).
-+
-+  4. ÎÏ
-ÏÏ ÏÏÎ¶ÎµÎ¹ ÏÎ»Î¿ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ (vim Tutor) ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± TEST. ÎÎ¹Î± ÎœÎ± ÏÎ¿
-+     ÎµÏÎ±Î»Î·ÎžÎµÏÏÎµÏÎµ, Î³ÏÎ¬ÏÏÎµ ÎŸÎ±ÎœÎ¬  :!dir Î³Î¹Î± ÎœÎ± ÎŽÎµÎ¯ÏÎµ ÏÎ¿Îœ ÎºÎ±ÏÎ¬Î»Î¿Î³Ï ÏÎ±Ï.
-+
-+---> Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ Î±Îœ Î²Î³Î±Î¯ÎœÎ±ÏÎµ Î±ÏÏ ÏÎ¿Îœ Vim ÎºÎ±Î¹ ÎŒÏÎ±Î¯ÎœÎ±ÏÎµ ÎŸÎ±ÎœÎ¬ ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ±
-+     Î±ÏÏÎµÎ¯Î¿Ï
- TEST, ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎžÎ± Î®ÏÎ±Îœ Î±ÎºÏÎ¹Î²Î­Ï Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿ ÏÎ¿Ï
- tutor ÏÏÎ±Îœ ÏÎ¿ ÏÏÏÎ±ÏÎµ.
-+
-+  5. Î€ÏÏÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï (MS-DOS):      :!del TEST
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		     ÎÎ¬ÎžÎ·ÎŒÎ± 5.3: ÎÎ ÎÎÎÎÎ€ÎÎÎ ÎÎÎ€ÎÎÎ ÎÎÎÎ¡ÎÎŠÎÎ£
-+
-+
-+	  ** ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÏÎŒÎ®ÎŒÎ± ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
-, Î³ÏÎ¬ÏÏÎµ  :#,# w ÎÎ¡Î§ÎÎÎ **
-+
-+  1. ÎÎ»Î»Î· ÎŒÎ¹Î± ÏÎ¿ÏÎ¬, Î³ÏÎ¬ÏÏÎµ  :!dir  Î®  :!ls  Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± Î±ÏÏ ÏÎ¿Îœ
-+     ÎºÎ±ÏÎ¬Î»Î¿Î³Ï ÏÎ±Ï ÎºÎ±Î¹ ÎŽÎ¹Î±Î»Î­ÎŸÏÎµ Î­ÎœÎ± ÎºÎ±ÏÎ¬Î»Î»Î·Î»Î¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
- ÏÏÏÏ ÏÎ¿ TEST.
-+
-+  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ¬ÎœÏ ÎŒÎ­ÏÎ¿Ï Î±Ï
-ÏÎ®Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ
-+     Ctrl-g  Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ Î±Ï
-ÏÎ®Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+     ÎÎ ÎÎ¥ÎÎÎ£Î€Î ÎÎ¥Î€ÎÎ Î€ÎÎ ÎÎ¡ÎÎÎÎ!
-+
-+  3. Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ  Ctrl-g  ÎŸÎ±ÎœÎ¬.
-+     ÎÎ ÎÎ¥ÎÎÎ£Î€Î ÎÎÎ ÎÎ¥Î€ÎÎ Î€ÎÎ ÎÎ¡ÎÎÎÎ!
-+
-+  4. ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÎÎÎÎ Î­ÎœÎ± ÏÎŒÎ®ÎŒÎ± ÏÎµ Î±ÏÏÎµÎ¯Î¿, Î³ÏÎ¬ÏÏÎµ   :#,# w TEST
-+     ÏÏÎ¿Ï
- #,# Î¿Î¹ ÎŽÏÎ¿ Î±ÏÎ¹ÎžÎŒÎ¿Î¯ ÏÎ¿Ï
- Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÏÎ±ÏÎµ (ÏÎ¬ÎœÏ,ÎºÎ¬ÏÏ) ÎºÎ±Î¹ TEST ÏÎ¿
-+     ÏÎœÎ¿ÎŒÎ± ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
- ÏÎ±Ï.
-+
-+  5. ÎÎ±ÎœÎ¬, ÎŽÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÎµÎºÎµÎ¯ ÎŒÎµ ÏÎ·Îœ  :!dir Î±Î»Î»Î¬ ÎÎÎ ÏÎ¿ ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  ÎÎ¬ÎžÎ·ÎŒÎ± 5.4: ÎÎÎÎÎ€Î©ÎÎ€ÎÎ£ ÎÎÎ ÎÎÎ©ÎÎÎÎ€ÎÎ£ ÎÎ¡Î§ÎÎÎ
-+
-+
-+     ** ÎÎ¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ± ÏÎµÏÎ¹ÎµÏÏÎŒÎµÎœÎ± ÎµÎœÏÏ Î±ÏÏÎµÎ¯Î¿Ï
-, Î³ÏÎ¬ÏÏÎµ   :r ÎÎ¡Î§ÎÎÎ **
-+
-+  1. ÎÏÎ¬ÏÏÎµ  :!dir  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ TEST Ï
-ÏÎ¬ÏÏÎµÎ¹ Î±ÏÏ ÏÏÎ¹Îœ.
-+
-+  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ¬ÎœÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï.
-+
-+Î£ÎÎÎÎÎ©Î£Î:  ÎÏÏÏÎ¿Ï
- ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÏÎ¿ ÎÎ®ÎŒÎ± 3 ÎžÎ± ÎŽÎµÎ¯ÏÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 5.3.
-+	   ÎÎµÏÎ¬ ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÎÎÎ€Î© ÎŸÎ±ÎœÎ¬ ÏÏÎ¿Ï ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ± Î±Ï
-ÏÏ.
-+
-+  3. Î€ÏÏÎ± Î±ÎœÎ±ÎºÏÎ®ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ±Ï TEST ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  :r TEST
-+     ÏÏÎ¿Ï
- TEST ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
-.
-+
-+Î£ÎÎÎÎÎ©Î£Î:  Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
- Î±ÎœÎ±ÎºÏÎ¬ÏÎµ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ÏÎ±Î¹ ÎŸÎµÎºÎ¹ÎœÏÎœÏÎ±Ï ÎµÎºÎµÎ¯ ÏÎ¿Ï
- Î²ÏÎ¯ÏÎºÎµÏÎ±Î¹
-+	   Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï.
-+
-+  4. ÎÎ¹Î± ÎœÎ± ÎµÏÎ±Î»Î·ÎžÎµÏÏÎµÏÎµ ÏÏÎ¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î±ÎœÎ±ÎºÏÎ®ÎžÎ·ÎºÎµ, ÏÎ¯ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹
-+     ÏÎ±ÏÎ±ÏÎ·ÏÎ®ÏÏÎµ ÏÏÎ¹ Ï
-ÏÎ¬ÏÏÎ¿Ï
-Îœ ÏÏÏÎ± ÎŽÏÎ¿ Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ± ÏÎ¿Ï
- ÎÎ±ÎžÎ®ÎŒÎ±ÏÎ¿Ï 5.3, ÏÎ¿
-+     Î±ÏÏÎ¹ÎºÏ ÎºÎ±Î¹ Î· Î­ÎºÎŽÎ¿ÏÎ· ÏÎ¿Ï
- Î±ÏÏÎµÎ¯Î¿Ï
-.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 5 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1.  :!ÎµÎœÏÎ¿Î»Î®  ÎµÎºÏÎµÎ»ÎµÎ¯ ÎŒÎ¯Î± ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î®.
-+
-+      ÎÎµÏÎ¹ÎºÎ¬ ÏÏÎ®ÏÎ¹ÎŒÎ± ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ± ÎµÎ¯ÎœÎ±Î¹ (MS-DOS):
-+      :!dir            - ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· Î»Î¯ÏÏÎ±Ï ÎµÎœÏÏ ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
-.
-+      :!del ÎÎ¡Î§ÎÎÎ     - ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÎ¹ ÏÎ¿ ÎÎ¡Î§ÎÎÎ.
-+
-+  2.  :w ÎÎ¡Î§ÎÎÎ   Î³ÏÎ¬ÏÎµÎ¹ ÏÎ¿ ÏÏÎ­ÏÏÎœ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
- Vim ÏÏÎ¿ ÎŽÎ¯ÏÎºÎ¿ ÎŒÎµ ÏÎœÎ¿ÎŒÎ± ÎÎ¡Î§ÎÎÎ.
-+
-+  3.  :#,#w ÎÎ¡Î§ÎÎÎ   ÏÏÎ¶ÎµÎ¹ ÏÎ¹Ï Î³ÏÎ±ÎŒÎŒÎ­Ï Î±ÏÏ # ÎŒÎ­ÏÏÎ¹ # ÏÏÎ¿ ÎÎ¡Î§ÎÎÎ.
-+
-+  4.  :r ÎÎ¡Î§ÎÎÎ  Î±ÎœÎ±ÎºÏÎµÎ¯ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎ¯ÏÎºÎ¿Ï
- ÎÎ¡Î§ÎÎÎ ÎºÎ±Î¹ ÏÎ¿ ÏÎ±ÏÎµÎŒÎ²Î¬Î»Î»ÎµÎ¹ ÎŒÎ­ÏÎ±
-+      ÏÏÎ¿ ÏÏÎ­ÏÎ¿Îœ Î±ÏÏÎµÎ¯Î¿ ÎŒÎµÏÎ¬ Î±ÏÏ ÏÎ· ÎžÎ­ÏÎ· ÏÎ¿Ï
- ÎŽÏÎ¿ÎŒÎ­Î±.
-+
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			ÎÎ¬ÎžÎ·ÎŒÎ± 6.1: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎÎÎ€ÎÎ£
-+
-+
-+      ** Î Î±ÏÎ®ÏÏÎµ  o  Î³Î¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÎœÎ±
-+	 Î²ÏÎµÎžÎµÎ¯ÏÎµ ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
-. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. Î Î±ÏÎ®ÏÏÎµ  o (ÏÎµÎ¶Ï) Î³Î¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎÎÎ€Î© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÎœÎ±
-+     Î²ÏÎµÎžÎµÎ¯ÏÎµ ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
-.
-+
-+  3. Î€ÏÏÎ± Î±ÎœÏÎ¹Î³ÏÎ¬ÏÏÎµ ÏÎ· ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> Î³ÏÎ±ÎŒÎŒÎ®  ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ±
-+     Î²Î³ÎµÎ¯ÏÎµ Î±ÏÏ ÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
-.
-+
-+---> After typing  o  the cursor is placed on the open line in Insert mode.
-+
-+  4. ÎÎ¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® Î ÎÎÎ© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ Î±ÏÎ»Î¬ Î­ÎœÎ± ÎºÎµÏÎ±Î»Î±Î¯Î¿
-+     O, Î±ÎœÏÎ¯ Î³Î¹Î± Î­ÎœÎ± ÏÎµÎ¶Ï  o.  ÎÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ ÏÎ¿ ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ®.
-+ÎÎœÎ¿Î¯Î³ÎµÏÎµ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¬ÎœÏ Î±ÏÏ Î±Ï
-ÏÎ®Îœ ÏÎ±ÏÏÎœÏÎ±Ï Shift-O ÏÏÎ¿ Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 ÎÎ¬ÎžÎ·ÎŒÎ± 6.2: Î ÎÎÎ€ÎÎÎ Î Î¡ÎÎ£ÎÎÎÎÎ£
-+
-+	  ** Î Î±ÏÎ®ÏÏÎµ   a   Î³Î¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï ÏÏÏÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ
-+     ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> ÏÎ±ÏÏÎœÏÎ±Ï  $  ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
-+
-+  2. Î Î±ÏÎ®ÏÏÎµ Î­ÎœÎ±  a  (ÏÎµÎ¶Ï) Î³Î¹Î± ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î Î±ÏÏ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±
-+     ÏÎ¿Ï
- ÎµÎ¯ÎœÎ±Î¹ ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.  (Î€Î¿ ÎºÎµÏÎ±Î»Î±Î¯Î¿  A  ÏÏÎ¿ÏÎžÎ­ÏÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï
-+     ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï).
-+
-+Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÏ
-ÏÏ Î±ÏÎ¿ÏÎµÏÎ³ÎµÎ¹ ÏÎ¿ ÏÎ¬ÏÎ·ÎŒÎ± ÏÎ¿Ï
-  i , ÏÎ¿Îœ ÏÎµÎ»ÎµÏ
-ÏÎ±Î¯Î¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±, ÏÎ¿
-+	  ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ·Ï ÎµÎ¹ÏÎ±Î³ÏÎ³Î®Ï, <ESC>, ÎŽÏÎ¿ÎŒÎ­Î±-ÎŽÎµÎŸÎ¹Î¬, ÎºÎ±Î¹ ÏÎ­Î»Î¿Ï, x, ÎŒÏÎœÎ¿ ÎºÎ±Î¹
-+	  ÎŒÏÎœÎ¿ Î³Î¹Î± ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï!
-+
-+  3. Î£Ï
-ÎŒÏÎ»Î·ÏÏÏÏÎµ ÏÏÏÎ± ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÎµÏÎ¯ÏÎ·Ï ÏÏÎ¹ Î· ÏÏÎ¿ÏÎžÎ®ÎºÎ· ÎµÎ¯ÎœÎ±Î¹
-+     Î±ÎºÏÎ¹Î²ÏÏ Î¯ÎŽÎ¹Î± ÏÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
- ÎŒÎµ ÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎ¹ÏÎ±Î³ÏÎ³Î®Ï, ÎµÎºÏÏÏ
-+     Î±ÏÏ ÏÎ· ÎžÎ­ÏÎ· ÏÎ¿Ï
- ÎµÎ¹ÏÎ¬Î³ÎµÏÎ±Î¹ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
-+
-+---> This line will allow you to practice
-+---> This line will allow you to practice appending text to the end of a line.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   ÎÎ¬ÎžÎ·ÎŒÎ± 6.3: ÎÎÎÎ ÎÎÎÎÎ£Î Î€ÎÎ£ ÎÎÎ€ÎÎÎÎ€ÎÎ£Î€ÎÎ£ÎÎ£
-+
-+
-+ ** Î Î±ÏÎ®ÏÏÎµ ÎºÎµÏÎ±Î»Î±Î¯Î¿  R  Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿Ï
-Ï Î±ÏÏ Î­ÎœÎ±Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ. **
-+
-+  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
-+
-+  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÏÏÎ® ÏÎ·Ï ÏÏÏÏÎ·Ï Î»Î­ÎŸÎ·Ï ÏÎ¿Ï
- ÎµÎ¯ÎœÎ±Î¹ ÎŽÎ¹Î±ÏÎ¿ÏÎµÏÎ¹ÎºÎ®
-+     Î±ÏÏ ÏÎ· ÎŽÎµÏÏÎµÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> (Î· Î»Î­ÎŸÎ· 'last').
-+
-+  3. Î Î±ÏÎ®ÏÏÎµ ÏÏÏÎ±  R   ÎºÎ±Î¹ Î±Î»Î»Î¬ÎŸÏÎµ ÏÎ¿ Ï
-ÏÏÎ»Î¿Î¹ÏÎ¿ ÏÎ¿Ï
- ÎºÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
- ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®
-+     Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï ÏÎ¬ÎœÏ Î±ÏÏ ÏÎ¿ ÏÎ±Î»Î¹Ï ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÏÎµ ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î¯ÎŽÎ¹Î±
-+     ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·.
-+
-+---> To make the first line the same as the last on this page use the keys.
-+---> To make the first line the same as the second, type R and the new text.
-+
-+  4. Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ ÏÏÎ±Îœ ÏÎ±ÏÎ¬ÏÎµ <ESC> Î³Î¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ, ÏÎ±ÏÎ±ÎŒÎ­ÎœÎµÎ¹ Î¿ÏÎ¿Î¹Î¿ÎŽÎ®ÏÎ¿ÏÎµ
-+     Î±ÎœÎ±Î»Î»Î¿Î¯ÏÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  ÎÎ¬ÎžÎ·ÎŒÎ± 6.4: Î¡Î¥ÎÎÎÎ£Î ÎÎ ÎÎÎÎÎÎ£
-+
-+
-+   ** Î¡Ï
-ÎžÎŒÎ¯ÏÏÎµ ÎŒÎ¯Î± ÎµÏÎ¹Î»Î¿Î³Î® Î­ÏÏÎ¹ ÏÏÏÎµ Î· Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· Î® Î· Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎœÎ± Î±Î³ÎœÎ¿ÎµÎ¯
-+      ÏÎ· ÎŽÎ¹Î±ÏÎ¿ÏÎ¬ ÏÎµÎ¶ÏÎœ-ÎºÎµÏÎ±Î»Î±Î¯ÏÎœ **
-+
-+  1. ÎšÎ¬ÎŸÏÎµ Î³Î¹Î± 'ignore' ÎµÎ¹ÏÎ¬Î³Î¿ÎœÏÎ±Ï:
-+     /ignore
-+     Î£Ï
-ÎœÎµÏÎ¯ÏÏÎµ Î±ÏÎºÎµÏÎ­Ï ÏÎ¿ÏÎ­Ï ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ n.
-+
-+  2. ÎÎ­ÏÏÎµ ÏÎ·Îœ ÎµÏÎ¹Î»Î¿Î³Î® 'ic' (Ignore case) Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï:
-+     :set ic
-+
-+  3. ÎšÎ¬ÎŸÏÎµ ÏÏÏÎ± ÎŸÎ±ÎœÎ¬ Î³Î¹Î± 'ignore' ÏÎ±ÏÏÎœÏÎ±Ï: n
-+     Î£Ï
-ÎœÎµÏÎ¯ÏÏÎµ ÏÎ·Îœ Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÎŒÎµÏÎ¹ÎºÎ­Ï Î±ÎºÏÎŒÎ± ÏÎ¿ÏÎ­Ï ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ n
-+
-+  4. ÎÎ­ÏÏÎµ ÏÎ¹Ï ÎµÏÎ¹Î»Î¿Î³Î­Ï 'hlsearch' ÎºÎ±Î¹ 'incsearch':
-+     :set hls is
-+
-+  5. ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÏÏÎ± ÎŸÎ±ÎœÎ¬ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ·Ï, ÎºÎ±Î¹ ÎŽÎµÎ¯ÏÎµ ÏÎ¹ ÏÏ
-ÎŒÎ²Î±Î¯ÎœÎµÎ¹
-+     /ignore
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			       ÎÎÎÎÎÎ 6 Î ÎÎ¡ÎÎÎÎšÎ
-+
-+
-+  1. Î Î±ÏÏÎœÏÎ±Ï  o  Î±ÎœÎ¿Î¯Î³ÎµÎ¹ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎÎÎ€Î© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ ÏÎ¿Îœ
-+     ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÎœÎ¿Î¹ÏÏÎ® Î³ÏÎ±ÎŒÎŒÎ® ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
-.
-+
-+  2. Î Î±ÏÎ®ÏÏÎµ  a  Î³Î¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÏÎ¿Îœ Î¿ÏÎ¿Î¯Î¿ ÎµÎ¯ÎœÎ±Î¹
-+     Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï. Î Î±ÏÏÎœÏÎ±Ï ÎºÎµÏÎ±Î»Î±Î¯Î¿  A  Î±Ï
-ÏÏÎŒÎ±ÏÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÎ¹ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿ ÏÎ­Î»Î¿Ï
-+     ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
-+
-+  3. Î Î±ÏÏÎœÏÎ±Ï ÎºÎµÏÎ±Î»Î±Î¯Î¿  R  ÎµÎ¹ÏÎ­ÏÏÎµÏÎ±Î¹ ÏÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±Î· ÎÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·Ï ÎŒÎ­ÏÏÎ¹ ÎœÎ±
-+     ÏÎ±ÏÎ·ÎžÎµÎ¯ ÏÎ¿ <ESC> ÎºÎ±Î¹ ÎœÎ± ÎµÎŸÎ­Î»ÎžÎµÎ¹.
-+
-+  4. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï ":set xxx" ÏÏ
-ÎžÎŒÎ¯Î¶ÎµÎ¹ ÏÎ·Îœ ÎµÏÎ¹Î»Î¿Î³Î® "xxx".
-+
-+
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		       ÎÎÎÎÎÎ 7: ON-LINE ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎÎÎÎ£
-+
-+
-+		** Î§ÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ¿ on-line ÏÏÏÏÎ·ÎŒÎ± Î²Î¿Î®ÎžÎµÎ¹Î±Ï **
-+
-+  Î Vim Î­ÏÎµÎ¹ Î­ÎœÎ± ÏÎµÏÎ¹ÎµÎºÏÎ¹ÎºÏ on-line ÏÏÏÏÎ·ÎŒÎ± Î²Î¿Î®ÎžÎµÎ¹Î±Ï. ÎÎ¹Î± ÎœÎ± ÎŸÎµÎºÎ¹ÎœÎ®ÏÎµÎ¹,
-+  ÎŽÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± ÏÏÎ¯Î±:
-+	- ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <HELP> (Î±Îœ Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿)
-+	- ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <F1> (Î±Îœ Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿)
-+	- Î³ÏÎ¬ÏÏÎµ   :help <ENTER>
-+
-+  ÎÏÎ¬ÏÏÎµ  :q <ENTER>   Î³Î¹Î± ÎœÎ± ÎºÎ»ÎµÎ¯ÏÎµÏÎµ ÏÎ¿ ÏÎ±ÏÎ¬ÎžÏ
-ÏÎ¿ ÏÎ·Ï Î²Î¿Î®ÎžÎµÎ¹Î±Ï.
-+
-+  ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± Î²ÏÎµÎ¯ÏÎµ Î²Î¿Î®ÎžÎµÎ¹Î± ÏÎ¬ÎœÏ ÏÎµ ÎºÎ¬ÎžÎµ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿, ÎŽÎ¯ÎœÎ¿ÎœÏÎ±Ï ÎŒÎ¯Î± ÏÎ±ÏÎ¬ÎŒÎµÏÏÎ¿
-+  ÏÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ":help".  ÎÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ Î±Ï
-ÏÎ¬ (ÎŒÎ·Îœ ÎŸÎµÏÎœÎ¬ÏÎµ ÎœÎ± ÏÎ±ÏÎ¬ÏÎµ <ENTER>):
-+
-+	:help w
-+	:help c_<T
-+	:help insert-index
-+	:help user-manual
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  ÎÎÎÎÎÎ 8: ÎÎÎÎÎÎ¥Î¡ÎÎÎ£Î€Î ÎÎÎ SCRIPT ÎÎÎÎÎÎÎ£ÎÎ£
-+
-+		   ** ÎÎœÎµÏÎ³Î¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ ÏÎ¿Ï
- Vim **
-+
-+  Î Vim Î­ÏÎµÎ¹ ÏÎ¿Î»Î»Î¬ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ Î±Ï' Ï,ÏÎ¹ Î¿ Vi, Î±Î»Î»Î¬ ÏÎ±
-+  ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÎµÎ¯ÎœÎ±Î¹ Î±ÏÏÎ¹ÎºÎ¬ Î±ÏÎµÎœÎµÏÎ³Î¿ÏÎ¿Î¹Î·ÎŒÎ­ÎœÎ±. ÎÎ¹Î± ÎœÎ± Î±ÏÏÎ¯ÏÎµÏÎµ ÎœÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎµ
-+  ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÏÎ¹Î¬ÎŸÎµÏÎµ Î­ÎœÎ± Î±ÏÏÎµÎ¯Î¿ "vimrc".
-+
-+  1. ÎÏÏÎ¯ÏÏÎµ ÎŽÎ¹Î¿ÏÎžÏÎœÎ¿ÎœÏÎ±Ï ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ "vimrc", Î±Ï
-ÏÏ ÎµÎŸÎ±ÏÏÎ¬ÏÎ±Î¹ Î±ÏÏ ÏÎ¿ ÏÏÏÏÎ·ÎŒÎ¬ ÏÎ±Ï:
-+	:edit ~/.vimrc               Î³Î¹Î± Unix
-+	:edit $VIM/_vimrc            Î³Î¹Î± MS-Windows
-+
-+  2. Î€ÏÏÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ¿Ï Î³Î¹Î± Î±ÏÏÎµÎ¯Î¿ "vimrc":
-+	:read $VIMRUNTIME/vimrc_example.vim
-+
-+  3. ÎÏÎ¬ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎŒÎµ ÏÎ·Îœ:
-+	:write
-+
-+  Î€Î·Îœ ÎµÏÏÎŒÎµÎœÎ· ÏÎ¿ÏÎ¬ ÏÎ¿Ï
- ÎžÎ± ÎŸÎµÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ Vim ÎžÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÎµÎ¹ ÏÏÏÎ¹ÏÎŒÏ
-+  ÏÏÎœÏÎ±ÎŸÎ·Ï.  ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï ÏÏÎ¿ÏÎ¹ÎŒÏÎŒÎµÎœÎµÏ ÎµÏÎ¹Î»Î¿Î³Î­Ï Ï' Î±Ï
-ÏÏ
-+  ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ "vimrc".
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+
-+  ÎÎŽÏ Î¿Î»Î¿ÎºÎ»Î·ÏÏÎœÎµÏÎ±Î¹ ÏÎ¿ Vim Tutor. Î£ÎºÎ¿ÏÏÏ ÏÎ¿Ï
- Î®ÏÎ±Îœ ÎœÎ± ÎŽÏÏÎµÎ¹ ÎŒÎ¯Î± ÏÏÎœÏÎ¿ÎŒÎ·
-+  ÏÎµÏÎ¯Î»Î·ÏÎ· ÏÎ¿Ï
- ÏÏ
-ÎœÏÎ¬ÎºÏÎ· Vim, ÏÎ¿Ï
-Î»Î¬ÏÎ¹ÏÏÎ¿Îœ ÏÏÏÎ· ÏÏÏÎµ ÎœÎ± ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ±
-+  ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÎµÏÎµ ÏÎ¿Îœ ÏÏ
-ÎœÏÎ¬ÎºÏÎ· Î±ÏÎºÎµÏÎ¬ ÎµÏÎºÎ¿Î»Î±. ÎÏÎ­ÏÎµÎ¹ ÏÎ¿Î»Ï Î±ÏÏ ÎŒÎ¯Î±
-+  Î¿Î»Î¿ÎºÎ»Î·ÏÏÎŒÎ­ÎœÎ· ÏÎ±ÏÎ¿Ï
-ÏÎ¯Î±ÏÎ· ÎºÎ±ÎžÏÏ Î¿ Vim Î­ÏÎµÎ¹ ÏÎ¬ÏÎ± ÏÎ¿Î»Î»Î­Ï ÎµÎœÏÎ¿Î»Î­Ï. ÎÎ¹Î±Î²Î¬ÏÏÎµ
-+  ÎºÎ±ÏÏÏÎ¹Îœ ÏÎ¿ ÎµÎ³ÏÎµÎ¹ÏÎ¯ÎŽÎ¹Î¿ ÏÏÎ®ÏÎ·Ï:
-+	":help user-manual".
-+
-+  ÎÎ¹Î± ÏÎµÏÎ±Î¹ÏÎ­ÏÏ ÎŽÎ¹Î¬Î²Î±ÏÎŒÎ± ÎºÎ±Î¹ ÎŒÎµÎ»Î­ÏÎ·, ÏÏ
-ÏÏÎ®ÎœÎµÏÎ±Î¹ Î±Ï
-ÏÏ ÏÎ¿ Î²Î¹Î²Î»Î¯Î¿:
-+	Vim - Vi Improved - by Steve Oualline
-+	Publisher: New Riders
-+	Î€Î¿ ÏÏÏÏÎ¿ Î²Î¹Î²Î»Î¯Î¿ ÏÎ»Î®ÏÏÏ Î±ÏÎ¹ÎµÏÏÎŒÎ­ÎœÎ¿ ÏÏÎ¿Îœ Vim.
-+	ÎÎŽÎ¹Î±Î¯ÏÎµÏÎ± ÏÏÎ®ÏÎ¹ÎŒÎ¿ Î³Î¹Î± Î±ÏÏÎ¬ÏÎ¹Î¿Ï
-Ï.
-+	Î¥ÏÎ¬ÏÏÎ¿Ï
-Îœ ÏÎ¿Î»Î»Î¬ ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ± ÎºÎ±Î¹ ÎµÎ¹ÎºÏÎœÎµÏ.
-+	ÎÎµÎ¯ÏÎµ ÏÎ·Îœ http://iccf-holland.org/click5.html
-+
-+  ÎÏ
-ÏÏ ÏÎ¿ Î²Î¹Î²Î»Î¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÏÎ±Î»Î¹ÏÏÎµÏÎ¿ ÎºÎ±Î¹ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿ Î³Î¹Î± ÏÎ¿Îœ Vi ÏÎ±ÏÎ¬ Î³Î¹Î± ÏÎ¿Îœ Vim,
-+  Î±Î»Î»Î¬ ÎµÏÎ¯ÏÎ·Ï ÏÏ
-ÎœÎ¹ÏÏÏÎŒÎµÎœÎ¿:
-+	Learning the Vi Editor - by Linda Lamb
-+	Publisher: O'Reilly & Associates Inc.
-+	ÎÎ¯ÎœÎ±Î¹ Î­ÎœÎ± ÎºÎ±Î»Ï Î²Î¹Î²Î»Î¯Î¿ Î³Î¹Î± ÎœÎ± ÎŒÎ¬ÎžÎµÏÎµ ÏÏÎµÎŽÏÎœ ÏÎ± ÏÎ¬ÎœÏÎ± ÏÎ¿Ï
- ÎžÎ­Î»ÎµÏÎµ
-+	ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÎŒÎµ ÏÎ¿Îœ Vi.
-+	Î Î­ÎºÏÎ· Î­ÎºÎŽÎ¿ÏÎ· ÏÎµÏÎ¹Î­ÏÎµÎ¹ Î±ÎºÏÎŒÎ± ÏÎ»Î·ÏÎ¿ÏÎ¿ÏÎ¯ÎµÏ Î³Î¹Î± ÏÎ¿Îœ Vim.
-+
-+  ÎÏ
-ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ· Î³ÏÎ¬ÏÏÎ·ÎºÎµ Î±ÏÏ ÏÎ¿Ï
-Ï Michael C. Pierce ÎºÎ±Î¹ Robert K. Ware,
-+  Colorado School of Mines ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï Î¹ÎŽÎ­ÎµÏ Î±ÏÏ ÏÎ¿Îœ Charles Smith,
-+  Colorado State University.  E-mail: bware@mines.colorado.edu.
-+
-+  Î ÏÎ¿ÏÎ±ÏÎŒÎ¿Î³Î® Î³Î¹Î± ÏÎ¿Îœ Vim Î±ÏÏ ÏÎ¿Îœ Bram Moolenaar.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-diff -Naur vim70.orig/runtime/tutor/tutor.ru.utf-8 vim70/runtime/tutor/tutor.ru.utf-8
---- vim70.orig/runtime/tutor/tutor.ru.utf-8	1969-12-31 16:00:00.000000000 -0800
-+++ vim70/runtime/tutor/tutor.ru.utf-8	2006-10-13 01:02:54.000000000 -0700
-@@ -0,0 +1,834 @@
-+===============================================================================
-+=    Ð ÐŸ Ð± Ñ ÐŸ   Ð¿ ÐŸ Ð¶ Ð° Ð» ÐŸ Ð² Ð° Ñ Ñ   Ð²   Ñ Ñ Ðµ Ð± Ðœ Ðž Ðº   VIM  -  ÐÐµÑÑÐžÑ 1.5 =
-+===============================================================================
-+     Vim --- ÑÑÐŸ ÐŸÑÐµÐœÑ ÐŒÐŸÑÐœÑÐ¹ ÑÐµÐŽÐ°ÐºÑÐŸÑ, ÐžÐŒÐµÑÑÐžÐ¹ ÐŒÐœÐŸÐ¶ÐµÑÑÐ²ÐŸ ÐºÐŸÐŒÐ°ÐœÐŽ, ÑÐ»ÐžÑÐºÐŸÐŒ
-+     ÐŒÐœÐŸÐ³ÐŸ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐžÑ
- Ð²ÑÐµ ÐŒÐŸÐ¶ÐœÐŸ Ð±ÑÐ»ÐŸ ÐŸÐ¿ÐžÑÐ°ÑÑ Ð² ÑÐ°ÐºÐŸÐŒ ÑÑÐµÐ±ÐœÐžÐºÐµ, ÐºÐ°Ðº
-+     ÑÑÐŸÑ. Ð­ÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð¿ÑÐžÐ·Ð²Ð°Ðœ ÐŸÐ±ÑÑÑÐœÐžÑÑ ÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐŸÐµ ÑÐžÑÐ»ÐŸ ÐºÐŸÐŒÐ°ÐœÐŽ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
-+     ÑÑÐŸÐ±Ñ ÐÑ ÐŒÐŸÐ³Ð»Ðž Ñ Ð»ÐµÐ³ÐºÐŸÑÑÑÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ Vim Ð² ÐºÐ°ÑÐµÑÑÐ²Ðµ ÑÐµÐŽÐ°ÐºÑÐŸÑÐ° ÐŸÐ±ÑÐµÐ³ÐŸ
-+     ÐœÐ°Ð·ÐœÐ°ÑÐµÐœÐžÑ.
-+
-+     ÐÐ°ÐŒ Ð¿ÐŸÑÑÐµÐ±ÑÐµÑÑÑ Ð¿ÑÐžÐ±Ð»ÐžÐ·ÐžÑÐµÐ»ÑÐœÐŸ 25-30 ÐŒÐžÐœÑÑ ÐœÐ° ÐŸÑÐ²ÐŸÐµÐœÐžÐµ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÑÑÐµÐ±ÐœÐžÐºÐ° Ð²
-+     Ð·Ð°Ð²ÐžÑÐžÐŒÐŸÑÑÐž ÐŸÑ ÑÐŸÐ³ÐŸ, ÑÐºÐŸÐ»ÑÐºÐŸ Ð²ÑÐµÐŒÐµÐœÐž ÐÑ Ð¿ÐŸÑÑÐ°ÑÐžÑÐµ ÐœÐ° ÑÐºÑÐ¿ÐµÑÐžÐŒÐµÐœÑÑ.
-+
-+     ÐÐŸÐŒÐ°ÐœÐŽÑ Ð² ÑÑÐŸÐºÐ°Ñ
- Ð±ÑÐŽÑÑ ÐŒÐŸÐŽÐžÑÐžÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐºÑÑ. Ð¡ÐŸÐ·ÐŽÐ°Ð¹ÑÐµ ÐºÐŸÐ¿ÐžÑ ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°,
-+     ÑÑÐŸÐ±Ñ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ ÐœÐ° ÐœÐµÐ¹ (ÐµÑÐ»Ðž ÐÑ Ð·Ð°Ð¿ÑÑÑÐžÐ»Ðž "vimtutor", ÑÐŸ ÑÑÐŸ ÑÐ¶Ðµ
-+     ÐºÐŸÐ¿ÐžÑ).
-+
-+     ÐÐ°Ð¶ÐœÐŸ Ð¿ÐŸÐŒÐœÐžÑÑ, ÑÑÐŸ ÑÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð¿ÑÐµÐŽÐœÐ°Ð·ÐœÐ°ÑÐµÐœ ÐŽÐ»Ñ ÐŸÐ±ÑÑÐµÐœÐžÑ Ð² Ð¿ÑÐŸÑÐµÑÑÐµ
-+     ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ. Ð­ÑÐŸ ÐŸÐ·ÐœÐ°ÑÐ°ÐµÑ, ÑÑÐŸ ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð·Ð°Ð¿ÑÑÐºÐ°ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
-+     ÑÑÐŸÐ±Ñ ÐºÐ°Ðº ÑÐ»ÐµÐŽÑÐµÑ ÐžÑ
- ÐžÐ·ÑÑÐžÑÑ. ÐÑÐ»Ðž ÐÑ Ð¿ÑÐŸÑÑÐŸ Ð¿ÑÐŸÑÐžÑÐ°ÐµÑÐµ ÑÐµÐºÑÑ, ÑÐŸ
-+     Ð·Ð°Ð±ÑÐŽÐµÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ!
-+
-+     Ð¢ÐµÐ¿ÐµÑÑ ÑÐ±ÐµÐŽÐžÑÐµÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ° CapsLock ÐœÐµ Ð²ÐºÐ»ÑÑÐµÐœÐ° Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ
-+     ÐºÐ»Ð°Ð²ÐžÑÑ   j   ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÑÐ°Ðº, ÑÑÐŸÐ±Ñ Ð£ÑÐŸÐº 1.1 Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ Ð¿ÐŸÐŒÐµÑÑÐžÐ»ÑÑ ÐœÐ°
-+     ÑÐºÑÐ°ÐœÐµ.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			Ð£ÑÐŸÐº 1.1:  ÐÐÐ ÐÐÐÐ©ÐÐÐÐ ÐÐ£Ð Ð¡ÐÐ Ð
-+
-+** ÐÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ ÐºÑÑÑÐŸÑÐ° ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž h,j,k,l ÑÐ°Ðº, ÐºÐ°Ðº Ð¿ÐŸÐºÐ°Ð·Ð°ÐœÐŸ ÐœÐžÐ¶Ðµ. **
-+	     ^
-+	     k		Ð¡ÐŸÐ²ÐµÑÑ:	ÐÐ»Ð°Ð²ÐžÑÐ° h ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ ÑÐ»ÐµÐ²Ð° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ Ð²Ð»ÐµÐ²ÐŸ.
-+       < h	 l >		ÐÐ»Ð°Ð²ÐžÑÐ° l ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ ÑÐ¿ÑÐ°Ð²Ð° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ Ð²Ð¿ÑÐ°Ð²ÐŸ.
-+	     j			ÐÐ»Ð°Ð²ÐžÑÐ° j Ð¿ÐŸÑ
-ÐŸÐ¶Ð° ÐœÐ° ÑÑÑÐµÐ»ÐºÑ `Ð²ÐœÐžÐ·'.
-+	     v
-+  1. ÐÐŸÐŽÐ²ÐžÐ³Ð°Ð¹ÑÐµ ÐºÑÑÑÐŸÑ Ð¿ÐŸ ÑÐºÑÐ°ÐœÑ, Ð¿ÐŸÐºÐ° ÐœÐµ Ð¿ÐŸÑÑÐ²ÑÑÐ²ÑÐµÑÐµ ÑÐµÐ±Ñ ÑÐ²ÐµÑÐµÐœÐœÐŸ.
-+
-+  2. ÐÐ°ÐŽÐ°Ð²ÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ `Ð²ÐœÐžÐ·' (j) Ð¿ÐŸÐºÐ° ÐŸÐœÐ° ÐœÐµ ÐœÐ°ÑÐœÐµÑ Ð¿ÐŸÐ²ÑÐŸÑÑÑÑÑÑ.
-+---> Ð¢ÐµÐ¿ÐµÑÑ ÐÑ Ð·ÐœÐ°ÐµÑÐµ, ÐºÐ°Ðº Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÑÑÐŸÐºÑ.
-+
-+  3. ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐ»Ð°Ð²ÐžÑÑ `Ð²ÐœÐžÐ·' Ð¿ÐµÑÐµÐ¹ÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 1.2.
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐ»Ðž Ð²Ñ Ð¿ÐŸÐºÐ° ÐœÐµ ÑÐ²ÐµÑÐµÐœÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÐœÐ°Ð±ÐžÑÐ°ÐµÑÐµ, ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ
-+	   Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐ° Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ (Normal mode). ÐÐŸÑÐ»Ðµ ÑÑÐŸÐ³ÐŸ Ð¿ÐµÑÐµÐœÐ°Ð±ÐµÑÐžÑÐµ
-+	   ÑÑÐµÐ±ÑÐµÐŒÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÐ±ÑÑÐœÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ ÐºÑÑÑÐŸÑÐŸÐŒ (ÑÑÑÐµÐ»ÐºÐž) ÑÐ°ÐºÐ¶Ðµ ÐŽÐŸÐ»Ð¶ÐœÑ
-+	   ÑÐ°Ð±ÐŸÑÐ°ÑÑ. ÐÐŽÐœÐ°ÐºÐŸ, ÐºÐ»Ð°Ð²ÐžÑÐž hjkl Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÑ ÐÐ°ÐŒ Ð¿ÐµÑÐµÐŒÐµÑÐ°ÑÑÑÑ
-+	   Ð·ÐœÐ°ÑÐžÑÐµÐ»ÑÐœÐŸ Ð±ÑÑÑÑÐµÐµ, ÐºÐ°Ðº ÑÐŸÐ»ÑÐºÐŸ ÐÑ ÐœÐ°ÑÑÐžÑÐµÑÑ ÐžÐŒÐž Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑÑÑ.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  Ð£ÑÐŸÐº 1.2: ÐÐÐÐ£Ð¡Ð Ð ÐÐÐÐÐ ÐšÐÐÐÐ Ð ÐÐÐÐ¢Ð« Ð¡ VIM
-+
-+!! ÐÐÐÐÐÐÐÐ! ÐÑÐµÐ¶ÐŽÐµ, ÑÐµÐŒ Ð²ÑÐ¿ÐŸÐ»ÐœÑÑÑ Ð»ÑÐ±ÐŸÐ¹ ÐžÐ· ÐŸÐ¿ÐžÑÐ°ÐœÐœÑÑ
- ÐœÐžÐ¶Ðµ ÑÐ°Ð³ÐŸÐ², Ð¿ÑÐŸÑÑÐžÑÐµ
-+			       ÑÑÐŸÐº ÑÐµÐ»ÐžÐºÐŸÐŒ !!
-+
-+  1. ÐÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <ESC> (ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŽÐŸÑÑÐŸÐ²ÐµÑÐžÑÑÑÑ, ÑÑÐŸ ÐÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ
-+     ÑÐµÐ¶ÐžÐŒÐµ (Normal mode)).
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ:			:q! <ENTER>.
-+
-+---> Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð²ÑÐ¹ÑÐž ÐžÐ· ÑÐµÐŽÐ°ÐºÑÐŸÑÐ° ÐÐÐ Ð¡ÐÐ¥Ð ÐÐÐÐÐÐ¯ Ð»ÑÐ±ÑÑ
- ÑÐŽÐµÐ»Ð°ÐœÐœÑÑ
-
-+     ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹. ÐÑÐ»Ðž ÐÑ Ñ
-ÐŸÑÐžÑÐµ ÑÐŸÑ
-ÑÐ°ÐœÐžÑÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ðž Ð²ÑÐ¹ÑÐž:
-+				:wq  <ENTER>
-+
-+  3. ÐÐŸÐ³ÐŽÐ° ÐÑ ÑÐ²ÐžÐŽÐžÑÐµ Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÐµ ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ¹ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ,
-+     ÐºÐŸÑÐŸÑÐ°Ñ Ð¿ÑÐžÐ²ÐµÐ»Ð° ÐÐ°Ñ Ð² ÑÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº. Ð­ÑÐŸ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ
-+				vimtutor ru <ENTER>
-+     ÐÐ±ÑÑÐœÐŸ ÐŒÐŸÐ¶ÐœÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ:	vim tutor.ru <ENTER>
-+
-+---> 'vim' Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð·Ð°Ð¿ÑÑÑÐžÑÑ ÑÐµÐŽÐ°ÐºÑÐŸÑ vim, 'tutor.ru' --- ÑÑÐŸ ÑÐ°Ð¹Ð», ÐºÐŸÑÐŸÑÑÐ¹
-+     ÐÑ Ð±ÑÐŽÐµÑÐµ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ.
-+
-+  4. ÐÑÐ»Ðž ÐÑ ÑÐ²ÐµÑÐµÐœÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž ÑÑÐž ÑÐ°Ð³Ðž, Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÐµ ÑÐ°Ð³Ðž ÐŸÑ 1 ÐŽÐŸ 3
-+     ÑÑÐŸÐ±Ñ Ð²ÑÐ¹ÑÐž ÑÐœÐŸÐ²Ð° Ð·Ð°Ð¿ÑÑÑÐžÑÑ ÑÐµÐŽÐ°ÐºÑÐŸÑ. ÐÐ°ÑÐµÐŒ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ· Ðº
-+     Ð£ÑÐŸÐºÑ 1.3.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  Ð£ÑÐŸÐº 1.3: Ð ÐÐÐÐÐ¢ÐÐ ÐÐÐÐÐÐ Ð¢ÐÐÐ¡Ð¢Ð - Ð£ÐÐÐÐÐÐÐ
-+
-+
-+** ÐÐ°Ñ
-ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐœÐ°Ð¶ÐŒÐžÑÐµ x, ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÑÐžÐŒÐ²ÐŸÐ» Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. ÐÐ»Ñ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ ÐŸÑÐžÐ±ÐŸÐº, Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ, Ð¿ÐŸÐºÐ° ÐŸÐœ ÐœÐµ ÐŸÐºÐ°Ð¶ÐµÑÑÑ ÐœÐ°ÐŽ
-+     ÑÐŽÐ°Ð»ÑÐµÐŒÑÐŒ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐŒ.
-+
-+  3. ÐÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ x ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÐµÐ±ÑÐµÐŒÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°.
-+
-+  4. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4 Ð¿ÐŸÐºÐ° ÑÑÑÐŸÐºÐ° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ°.
-+
-+---> ÐÑ ÑÑÑÐŸÐ¿ÐŸÑÐ° ÐºÐŸÐ¿ÑÑÑ Ð¿Ð¿Ð¿ÑÐ»Ñ Ð¿Ð¿ÐŸ Ð¿Ð¿Ð¿ÐŸÐ»Ñ Ð»ÐµÑÑÐžÑÑ.
-+
-+  5. Ð¢ÐµÐ¿ÐµÑÑ, ÐºÐŸÐ³ÐŽÐ° ÑÑÑÐŸÐºÐ° ÐŸÑÐºÐŸÑÑÐµÐºÑÐžÑÐŸÐ²Ð°ÐœÐ°, Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº ÑÑÐŸÐºÑ 1.4.
-+
-+ÐÐÐÐÐ§ÐÐÐÐ: Ð Ñ
-ÐŸÐŽÐµ ÐŸÑÐ²ÐŸÐµÐœÐžÑ ÑÑÐŸÐ³ÐŸ ÑÑÐµÐ±ÐœÐžÐºÐ° ÐœÐµ Ð¿ÑÑÐ°Ð¹ÑÐµÑÑ Ð·Ð°Ð¿ÐŸÐŒÐžÐœÐ°ÑÑ, ÑÑÐžÑÐµ
-+	   Ð² Ð¿ÑÐŸÑÐµÑÑÐµ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  Ð£ÑÐŸÐº 1.4: Ð ÐÐÐÐÐ¢ÐÐ ÐÐÐÐÐÐ Ð¢ÐÐÐ¡Ð¢Ð - ÐÐ¡Ð¢ÐÐÐÐ
-+
-+
-+ ** ÐÐ°Ñ
-ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode), ÐœÐ°Ð¶ÐŒÐžÑÐµ i ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ°. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŽÐµÐ»Ð°ÑÑ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐžÐŽÐµÐœÑÐžÑÐœÐŸÐ¹ Ð²ÑÐŸÑÐŸÐ¹, Ð¿ÐŸÐŒÐµÑÑÐžÑÐµ
-+     ÐºÑÑÑÐŸÑ ÐœÐ° ÑÐžÐŒÐ²ÐŸÐ» ÐÐÐ ÐÐ ÐºÐŸÑÐŸÑÑÐŒ ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ.
-+
-+  3. ÐÐ°Ð¶ÐŒÐžÑÐµ i Ðž ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÑÐµÐ±ÑÐµÐŒÑÐµ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ.
-+
-+  4. ÐÐŸÑÐ»Ðµ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ Ð²ÑÐµÑ
- ÐŸÑÐžÐ±ÐŸÐº ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
-+     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4, Ð¿ÐŸÐºÐ° ÑÑÐ°Ð·Ð° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ° Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ.
-+
-+---> Ð§Ð°ÑÑÑ ÑÐµÐºÑÑÐ° Ð² ÑÑÑÐŸÐºÐµ Ð±ÐµÑÐ»ÐµÐŽÐœÐŸ .
-+---> Ð§Ð°ÑÑÑ ÑÐµÐºÑÑÐ° Ð² ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð±ÐµÑÑÐ»ÐµÐŽÐœÐŸ Ð¿ÑÐŸÐ¿Ð°Ð»Ð°.
-+
-+  5. ÐÐŸÐ³ÐŽÐ° ÐŸÑÐ²ÐŸÐžÑÐµ Ð²ÑÑÐ°Ð²ÐºÑ ÑÐµÐºÑÑÐ°, Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ ÐŽÐ°Ð»ÑÑÐµ Ðº Ð ÐµÐ·ÑÐŒÐµ.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 1
-+
-+  1. ÐÑÑÑÐŸÑ Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑÑÑ Ð»ÐžÐ±ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒÐž ÑÐŸ ÑÑÑÐµÐ»ÐºÐ°ÐŒÐž, Ð»ÐžÐ±ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒÐž hjkl.
-+	 h (Ð²Ð»ÐµÐ²ÐŸ)	j (Ð²ÐœÐžÐ·)       k (Ð²Ð²ÐµÑÑ
-)	    l (Ð²Ð¿ÑÐ°Ð²ÐŸ)
-+
-+  2. ÐÐ»Ñ Ð·Ð°Ð¿ÑÑÐºÐ° Vim (ÐžÐ· Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÑ % ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ¹ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž) ÐœÐ°Ð±ÐµÑÐžÑÐµ:
-+     vim ÐÐÐ¯_Ð€ÐÐÐÐ <ENTER>
-+
-+  3. ÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ ÑÐ°Ð±ÐŸÑÑ Ñ Vim ÐœÐ°Ð±ÐµÑÐžÑÐµ:
-+     <ESC>   :q!	 <ENTER>  ÑÑÐŸÐ±Ñ ÐŸÑÐºÐ°Ð·Ð°ÑÑÑÑ ÐŸÑ ÑÐŸÑ
-ÑÐ°ÐœÐµÐœÐžÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹.
-+     ÐÐ»Ðž ÐœÐ°Ð±ÐµÑÐžÑÐµ:
-+     <ESC>   :wq	 <ENTER>  ÑÑÐŸÐ±Ñ ÑÐŸÑ
-ÑÐ°ÐœÐžÑÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ.
-+
-+  4. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐžÐŒÐ²ÐŸÐ»Ð° Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ: x
-+
-+  5. Ð§ÑÐŸÐ±Ñ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ Ð¿ÐµÑÐµÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ:
-+	 i     Ð²Ð²ÐŸÐŽÐžÑÐµ ÑÐµÐºÑÑ	<ESC>
-+
-+ÐÐÐÐÐ§ÐÐÐÐ: ÐÐ°Ð¶Ð°ÑÐžÐµ <ESC> Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑ ÐÐ°Ñ Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ (Normal mode) Ð»ÐžÐ±ÐŸ
-+	   Ð¿ÑÐµÑÐ²ÐµÑ ÐœÐµÐ¶ÐµÐ»Ð°ÑÐµÐ»ÑÐœÑÑ Ðž ÑÐ°ÑÑÐžÑÐœÐŸ Ð·Ð°Ð²ÐµÑÑÐµÐœÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+
-+Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÐŒ Ðº Ð£ÑÐŸÐºÑ 2.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  Ð£ÑÐŸÐº 2.1: ÐÐÐÐÐÐÐ« Ð£ÐÐÐÐÐÐÐ¯
-+
-+
-+	** ÐÐ°Ð±ÐµÑÐžÑÐµ dw ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÐ°ÑÑÐºÐ° ÑÐµÐºÑÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°. **
-+
-+  1. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC>, ÑÑÐŸÐ±Ñ Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
-+
-+  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² ÐœÐ°ÑÐ°Ð»ÐŸ ÑÐ»ÐŸÐ²Ð°, ÐºÐŸÑÐŸÑÐŸÐµ ÑÐ»ÐµÐŽÑÐµÑ ÑÐŽÐ°Ð»ÐžÑÑ.
-+
-+  4. ÐÐ°Ð±ÐµÑÐžÑÐµ  dw , ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÑÑÐŸ ÑÐ»ÐŸÐ²ÐŸ.
-+
-+ÐÐÐÐÐ§ÐÐÐÐ: ÐÐŸ Ð²ÑÐµÐŒÑ ÐœÐ°Ð±ÐŸÑÐ° Ð±ÑÐºÐ²Ñ dw Ð¿ÐŸÑÐ²ÑÑÑÑ Ð² Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ ÑÑÑÐŸÐºÐµ ÑÐºÑÐ°ÐœÐ°. ÐÑÐ»Ðž
-+	   ÐÑ ÑÑÐŸ-ÑÐŸ ÐœÐ°Ð±ÐµÑÐµÑÐµ ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸ, ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> Ðž ÐœÐ°ÑÐœÐžÑÐµ ÑÐœÐ°ÑÐ°Ð»Ð°.
-+
-+---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ² ÑÐ°ÑÐžÐœÐ°ÐŽ Ð² ÑÑÐŸÐŒ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐž Ð°Ð²ÑÐŸÐºÑÐ°Ðœ ÐžÐ·Ð»ÐžÑÐœÐž.
-+
-+  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 3 Ðž 4, Ð¿ÐŸÐºÐ° ÐœÐµ ÐžÑÐ¿ÑÐ°Ð²ÐžÑÐµ Ð²ÑÐµ ÐŸÑÐžÐ±ÐºÐž Ðž Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº
-+     Ð£ÑÐŸÐºÑ 2.2.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  Ð£ÑÐŸÐº 2.2: ÐÐÐÐÐÐÐÐ¢ÐÐÐ¬ÐÐ«Ð ÐÐÐÐÐÐÐ« Ð£ÐÐÐÐÐÐÐ¯
-+
-+
-+	    ** ÐÐ°Ð±ÐµÑÐžÑÐµ d$ ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž. **
-+
-+  1. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC>, ÑÑÐŸÐ±Ñ Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
-+
-+  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÐºÐŸÐœÑÑ Ð¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸÐ¹ ÑÑÑÐŸÐºÐž (ÐÐÐ¡ÐÐ Ð¿ÐµÑÐ²ÐŸÐ¹ . ).
-+
-+  4. Ð§ÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÐŸÑÑÐ°ÑÐŸÐº ÑÑÑÐŸÐºÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ  d$ .
-+
-+---> ÐÑÐŸ-ÑÐŸ ÐœÐ°Ð±ÑÐ°Ð» ÐŸÐºÐŸÐœÑÐ°ÐœÐžÐµ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐŽÐ²Ð°Ð¶ÐŽÑ. ÐŸÐºÐŸÐœÑÐ°ÐœÐžÐµ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐŽÐ²Ð°Ð¶ÐŽÑ.
-+
-+
-+  5.Ð§ÑÐŸÐ±Ñ Ð»ÑÑÑÐµ ÑÐ°Ð·ÐŸÐ±ÑÐ°ÑÑÑÑ Ð² ÑÑÐŸÐŒ, Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 2.3.
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 Ð£ÑÐŸÐº 2.3: ÐÐÐÐÐÐÐ« Ð ÐÐÐªÐÐÐ¢Ð«
-+
-+
-+  Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ `ÑÐŽÐ°Ð»ÐµÐœÐžÐµ' d ÑÐ°ÐºÐŸÐ²:
-+
-+	 [ÑÐžÑÐ»ÐŸ]   d	ÐŸÐ±ÑÐµÐºÑ	    ÐÐÐ	     d	 [ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
-+  ÐÐŽÐµÑÑ:
-+    ÑÐžÑÐ»ÐŸ  - ÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐžÑÐ¿ÐŸÐ»ÐœÐžÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ (ÐœÐµÐŸÐ±ÑÐ·Ð°ÑÐµÐ»ÑÐœÐŸ, Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ=1).
-+    d      - ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ.
-+    ÐŸÐ±ÑÐµÐºÑ - Ñ ÑÐµÐŒ ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÐŽÐŸÐ»Ð¶ÐœÐ° Ð±ÑÑÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐ° (Ð¿ÐµÑÐµÑÐžÑÐ»ÐµÐœÐŸ ÐœÐžÐ¶Ðµ).
-+
-+  ÐÑÐ°ÑÐºÐžÐ¹ ÑÐ¿ÐžÑÐŸÐº ÐŸÐ±ÑÐµÐºÑÐŸÐ²:
-+    w - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, Ð²ÐºÐ»ÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÐžÐ¹ Ð¿ÑÐŸÐ±ÐµÐ».
-+    e - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, ÐÐ Ð²ÐºÐ»ÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÐžÐ¹ Ð¿ÑÐŸÐ±ÐµÐ».
-+    $ - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž.
-+    ^ - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐœÐ°ÑÐ°Ð»Ð° ÑÑÑÐŸÐºÐž.
-+
-+ÐÐÐÐÐ§ÐÐÐÐ: ÐÑÐŸÑÑÐŸÐµ ÐœÐ°Ð¶Ð°ÑÐžÐµ ÐœÐ° ÑÐžÐŒÐ²ÐŸÐ» ÐŸÐ±ÑÐµÐºÑÐ° Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode)
-+	   Ð±ÐµÐ· ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÑÑ
- ÐºÐŸÐŒÐ°ÐœÐŽ Ð¿ÐµÑÐµÐŽÐ²ÐžÐœÐµÑ ÐºÑÑÑÐŸÑ ÑÐ°Ðº, ÐºÐ°Ðº ÑÐºÐ°Ð·Ð°ÐœÐŸ Ð²
-+	   ÑÐ¿ÐžÑÐºÐµ ÐŸÐ±ÑÐµÐºÑÐŸÐ².
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+	       Ð£ÑÐŸÐº 2.4: ÐÐ¡ÐÐÐ®Ð§ÐÐÐÐ ÐÐ ÐÐ ÐÐÐÐÐ `ÐÐÐÐÐÐÐ-ÐÐÐªÐÐÐ¢'
-+
-+
-+		 ** ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž. **
-+
-+  ÐÑÐ»ÐµÐŽÑÑÐ²ÐžÐµ ÑÐ°ÑÑÐŸÐ³ÐŸ Ð¿ÑÐžÐŒÐµÐœÐµÐœÐžÑ ÐŸÐ¿ÐµÑÐ°ÑÐžÐž ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž, ÑÐ°Ð·ÑÐ°Ð±ÐŸÑÑÐžÐºÐž
-+  Vim ÑÐµÑÐžÐ»Ðž, ÑÑÐŸ ÐŽÐ»Ñ ÑÑÐŸÐ³ÐŸ Ð¿ÑÐŸÑÐµ Ð²ÑÐµÐ³ÐŸ Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð±ÑÐ°ÑÑ d ÐŽÐ²Ð°Ð¶ÐŽÑ.
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, ÐºÐŸ Ð²ÑÐŸÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ ÑÑÐ°Ð·Ñ.
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÑÐŸÐºÐž.
-+  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ Ðº ÑÐµÑÐ²ÐµÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ.
-+  4. ÐÐ°Ð±ÐµÑÐžÑÐµ 2dd (Ð²ÑÐ¿ÐŸÐŒÐœÐžÑÐµ Ð¿ÑÐ°Ð²ÐžÐ»ÐŸ `ÑÐžÑÐ»ÐŸ-ÐºÐŸÐŒÐ°ÐœÐŽÐ°-ÐŸÐ±ÑÐµÐºÑ'), ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ
-+     ÐŽÐ²Ðµ ÑÑÑÐŸÐºÐž.
-+
-+      1)  ÐÐµÑÐŸÐŒ Ñ Ñ
-ÐŸÐ¶Ñ ÐœÐ° ÑÑÐ°ÐŽÐžÐŸÐœ,
-+      2)  Ð, ÐºÐ°Ðº Ð²ÐœÐµÐ·Ð°Ð¿ÐœÐŸ ÐºÐŸÐœÑÐžÐ»ÑÑ ÐŽÐžÐ²Ð°Ðœ!
-+      3)  Ð¯ Ð±ÐŸÐ»ÐµÑ Ð·Ð° ``ÐÐµÐœÐžÑ'', ``ÐÐµÐœÐžÑ'' --- ÑÐµÐŒÐ¿ÐžÐŸÐœ!
-+      4)  ÐÐµÑÐ°Ð»ÑÐœÐŸ Ñ Ð³Ð»ÑÐ¶Ñ ÐœÐ° ÐœÐ°ÑÐµ Ð¿ÐŸÐºÐŸÐ»ÐµÐœÐžÐµ!
-+      5)  ÐÐ³ÐŸ Ð³ÑÑÐŽÑÑÐµÐµ ÐžÐ»Ñ Ð¿ÑÑÑÐŸ ÐžÐ»Ñ ÑÐµÐŒÐœÐŸ...
-+      6)  Ð¯ ÑÐžÐ¶Ñ ÐœÐ° ÑÐºÐ°ÐŒÐµÐ¹ÐºÐµ Ð² Ð»ÐŸÐ¶Ðµ `Ð'
-+      7)  Ð ÐžÐ³ÑÐ°Ñ ÐœÐ° Ð±ÐŸÐ»ÑÑÐŸÐ¹ Ð¶ÐµÑÑÑÐœÐŸÐ¹ ÑÑÑÐ±Ðµ.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  Ð£ÑÐŸÐº 2.5: ÐÐÐÐÐÐÐ `ÐÐ¢ÐÐÐ¢'
-+
-+
-+  ** ÐÐ°Ð¶ÐŒÐžÑÐµ u	ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÐ° ÑÐ°Ð±ÐŸÑÑ Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐ¹ ÐºÐŸÐŒÐ°ÐœÐŽÑ, U ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ
-+			ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÐ¹ Ð²ÐŸ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐµ. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> Ðž ÑÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐµÐ³ÐŸ ÐœÐ°
-+     Ð¿ÐµÑÐ²ÑÑ ÐŸÑÐžÐ±ÐºÑ.
-+  2. ÐÐ°Ð¶ÐŒÐžÑÐµ x ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°.
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð¶ÐŒÐžÑÐµ u ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐœÐŸÐ¹ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+  4. ÐÑÐ¿ÑÐ°Ð²ÑÑÐµ Ð²ÑÐµ ÐŸÑÐžÐ±ÐºÐž Ð² ÑÑÑÐŸÐºÐµ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ x .
-+  5. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð¶ÐŒÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ U ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ð²ÐµÑÐœÑÑÑ Ð²ÑÑ ÑÑÑÐŸÐºÑ Ð² ÐžÑÑ
-ÐŸÐŽÐœÐŸÐµ
-+     ÑÐŸÑÑÐŸÑÐœÐžÐµ.
-+  6. ÐÐ°Ð¶ÐŒÐžÑÐµ u ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ U Ðž Ð¿ÑÐµÐŽÑÐŽÑÑÐžÑ
- ÐºÐŸÐŒÐ°ÐœÐŽ.
-+  7. ÐÐ°Ð¶ÐŒÐžÑÐµ ÑÐµÐ¿ÐµÑÑ CTRL-R (ÑÐŽÐµÑÐ¶ÐžÐ²Ð°Ð¹ÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ CTRL ÐœÐ°Ð¶Ð°ÑÐŸÐ¹ Ð² ÐŒÐŸÐŒÐµÐœÑ ÐœÐ°Ð¶Ð°ÑÐžÑ
-+  R)     ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽ (ÐŸÑÐºÐ°Ñ ÐŸÑÐºÐ°ÑÐ°).
-+
-+---> ÐÑÐ¿ÑÑÐ°Ð²ÑÑÐµ ÐŸÐŸÑÐžÐ±ÐºÐž Ð² ÑÑÐŸÐ¹Ð¹ ÑÑÑÐŸÐºÐµ Ðž Ð²ÐµÑÐœÐžÑÑÐµ ÐžÑ
- ÑÑ Ð¿ÐŸÐŒÐŸÑÑÑÑ `ÐŸÑÐºÐ°ÑÐ°'.
-+
-+  8. Ð­ÑÐŸ Ð±ÑÐ»Ðž ÐŸÑÐµÐœÑ Ð¿ÐŸÐ»ÐµÐ·ÐœÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ. ÐÐ°Ð»ÐµÐµ Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº Ð ÐµÐ·ÑÐŒÐµ Ð£ÑÐŸÐºÐ° 2.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 2
-+
-+
-+  1. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ:    dw
-+
-+  2. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž ÐœÐ°Ð±ÐµÑÐžÑÐµ:    d$
-+
-+  3. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž ÐœÐ°Ð±ÐµÑÐžÑÐµ:    dd
-+
-+  4. Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐžÐŒÐµÐµÑ Ð²ÐžÐŽ:
-+
-+       [ÑÐžÑÐ»ÐŸ]   ÐºÐŸÐŒÐ°ÐœÐŽÐ°   ÐŸÐ±ÑÐµÐºÑ     ÐÐÐ     ÐºÐŸÐŒÐ°ÐœÐŽÐ°	[ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
-+     Ð³ÐŽÐµ:
-+       ÑÐžÑÐ»ÐŸ   - ÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· Ð¿ÐŸÐ²ÑÐŸÑÐžÑÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ
-+       ÐºÐŸÐŒÐ°ÐœÐŽÐ° - ÑÑÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ d ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ
-+       ÐŸÐ±ÑÐµÐºÑ  - ÐœÐ° ÑÑÐŸ ÐŽÐŸÐ»Ð¶ÐœÐ° Ð²ÐŸÐ·ÐŽÐµÐ¹ÑÑÐ²ÐŸÐ²Ð°ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐ°, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ w (ÑÐ»ÐŸÐ²ÐŸ),
-+		$ (ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž), Ðž Ñ.ÐŽ.
-+
-+  5. ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð¿ÑÐµÐŽÑÐµÑÑÐ²ÑÑÑÐžÑ
- ÐŽÐµÐ¹ÑÑÐ²ÐžÐ¹ ÐœÐ°Ð±ÐµÑÐžÑÐµ:  u (ÑÑÑÐŸÑÐœÐ°Ñ u)
-+     ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð²ÑÐµÑ
- ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹ Ð² ÑÑÑÐŸÐºÐµ ÐœÐ°Ð±ÐµÑÐžÑÐµ:  U (Ð¿ÑÐŸÐ¿ÐžÑÐœÐ°Ñ U)
-+     ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÐŸÑÐºÐ°ÑÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ:  CTRL-R
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  Ð£ÑÐŸÐº 3.1: ÐÐÐÐÐÐÐ ÐÐ¡Ð¢ÐÐÐÐ
-+
-+
-+   ** ÐÐ°Ð±ÐµÑÐžÑÐµ p ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ³ÐŸ ÑÐŽÐ°Ð»ÐµÐœÐœÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ° Ð¿ÐŸÑÐ»Ðµ ÐºÑÑÑÐŸÑÐ°. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ· Ðº Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ ÑÑÑÐŸÐºÐµ ÐžÐ· ÐœÐ°Ð±ÐŸÑÐ°.
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÑÐŸÐºÐž Ðž ÐµÐµ ÑÐŸÑ
-ÑÐ°ÐœÐµÐœÐžÑ Ð² Ð±ÑÑÐµÑÐµ Vim'Ð°.
-+
-+  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÑÑÑÐŸÐºÐµ ÐÐÐ ÑÐµÐŒ ÐŒÐµÑÑÐŸÐŒ, ÐºÑÐŽÐ° ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÑÐ°Ð²ÐžÑÑ
-+     ÑÐŽÐ°Ð»ÐµÐœÐœÑÑ ÑÑÑÐŸÐºÑ.
-+
-+  4. ÐÐ°Ñ
-ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐœÐ°Ð±ÐµÑÐžÑÐµ p ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÑÑÑÐŸÐºÐž.
-+
-+  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4, Ð¿ÐŸÐºÐ° ÐœÐµ ÑÐ°ÑÑÑÐ°Ð²ÐžÑÐµ Ð²ÑÐµ ÑÑÑÐŸÐºÐž Ð² ÐœÑÐ¶ÐœÐŸÐŒ Ð¿ÐŸÑÑÐŽÐºÐµ.
-+
-+     Ð³) Ð Ð»ÑÑÑÐµ Ð²ÑÐŽÑÐŒÐ°ÑÑ ÐœÐµ ÐŒÐŸÐ³.
-+     Ð±) ÐÐŸÐ³ÐŽÐ° ÐœÐµ Ð² ÑÑÑÐºÑ Ð·Ð°ÐœÐµÐŒÐŸÐ³,
-+     Ð²) ÐÐœ ÑÐ²Ð°Ð¶Ð°ÑÑ ÑÐµÐ±Ñ Ð·Ð°ÑÑÐ°Ð²ÐžÐ»
-+     Ð°) ÐÐŸÐ¹ ÐŽÑÐŽÑ ÑÐ°ÐŒÑÑ
- ÑÐµÑÑÐœÑÑ
- Ð¿ÑÐ°Ð²ÐžÐ»
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		       Ð£ÑÐŸÐº 3.2: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐ«
-+
-+
-+	  ** ÐÐ°Ð±ÐµÑÐžÑÐµ r Ðž ÑÐžÐŒÐ²ÐŸÐ», Ð·Ð°ÐŒÐµÐœÑÑÑÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐºÑÑÑÐŸÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐœ ÐœÐ°Ñ
-ÐŸÐŽÐžÐ»ÑÑ ÐœÐ°ÐŽ Ð¿ÐµÑÐ²ÐŸÐ¹ ÐŸÑÐžÐ±ÐºÐŸÐ¹.
-+
-+  3. ÐÐ°Ð±ÐµÑÐžÑÐµ r	Ðž Ð·Ð°ÑÐµÐŒ ÑÐžÐŒÐ²ÐŸÐ», ÐžÑÐ¿ÑÐ°Ð²Ð»ÑÑÑÐžÐ¹ ÐŸÑÐžÐ±ÐºÑ.
-+
-+  4. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2 Ðž 3, Ð¿ÐŸÐºÐ° Ð¿ÐµÑÐ²Ð°Ñ ÑÑÑÐŸÐºÐ° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ°.
-+
-+--->  Ð ÐŒÐŸÐŒÐµÐ³Ñ ÐœÐ°Ð±ÑÑÐ° ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐºÐŸÐµ0ÐºÑÐŸ Ñ ÑÑÑÐŽÐŸÐŒ Ð¿ÐŸÐ¿Ð²ÐŽÐ°Ð» Ð¿ÐŸ ÐºÐ»Ð²Ð°ÐžÑÐ°ÐŒ!
-+--->  Ð ÐŒÐŸÐŒÐµÐœÑ ÐœÐ°Ð±ÐŸÑÐ° ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐºÐŸÐµ-ÐºÑÐŸ Ñ ÑÑÑÐŽÐŸÐŒ Ð¿ÐŸÐ¿Ð°ÐŽÐ°Ð» Ð¿ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒ!
-+
-+  5. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 3.2.
-+
-+ÐÐÐÐÐ§ÐÐÐÐ: ÐÐŸÐŒÐœÐžÑÐµ, ÑÑÐŸ Ð²Ñ ÐŽÐŸÐ»Ð¶ÐœÑ ÑÑÐžÑÑÑÑ Ð² Ð¿ÑÐŸÑÐµÑÑÐµ ÑÐ°Ð±ÐŸÑÑ, Ð° ÐœÐµ Ð¿ÑÐŸÑÑÐŸ
-+	   Ð·Ð°Ð¿ÐŸÐŒÐžÐœÐ°Ñ.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 Ð£ÑÐŸÐº 3.3: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐÐÐÐ¯
-+
-+
-+		** ÐÐ»Ñ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÑÐ°ÑÑÐž ÑÐ»ÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ cw . **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. Ð Ð°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµ ÐºÑÑÑÐŸÑ ÐœÐ°ÐŽ Ð±ÑÐºÐ²ÐŸÐ¹ `o' Ð² ÑÐ»ÐŸÐ²Ðµ `ÑÐŸÐ»Ð°'.
-+
-+  3. ÐÐ°Ð±ÐµÑÐžÑÐµ cw Ðž ÐžÑÐ¿ÑÐ°Ð²ÑÑÐµ ÑÐ»ÐŸÐ²ÐŸ (Ð² ÐŽÐ°ÐœÐœÐŸÐŒ ÑÐ»ÑÑÐ°Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ `Ð»ÐŸÐ²'.)
-+
-+  4. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC> Ðž Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐžÑÐµ Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÐŸÑÐžÐ±ÐºÐµ (Ðº Ð¿ÐµÑÐ²ÐŸÐŒÑ ÑÐžÐŒÐ²ÐŸÐ»Ñ, ÐºÐŸÑÐŸÑÑÐ¹
-+     ÐœÐ°ÐŽÐŸ ÐžÐ·ÐŒÐµÐœÐžÑÑ.)
-+
-+  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 3--4 Ð¿ÐŸÐºÐ° Ð¿ÐµÑÐ²ÐŸÐµ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐµ ÐœÐµ ÑÑÐ°ÐœÐµÑ ÐžÐŽÐµÐœÑÐžÑÐœÑÐŒ Ð²ÑÐŸÑÐŸÐŒÑ.
-+
-+---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐŸÐ»Ð° Ð² ÑÑÐ³Ñ ÑÑÑÐŸÐºÐµ ÑÐ¿Ð³ÑÑÐ±Ñ ÑÐµÐŽÐ°Ð»Ð·ÐºÑÑÐžÐµÑÐ²Ñ
-.
-+---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ² Ð² ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ ÑÑÐµÐ±ÑÑÑ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÐœÐžÑ.
-+
-+ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ, ÑÑÐŸ cw ÐœÐµ ÑÐŸÐ»ÑÐºÐŸ Ð·Ð°ÐŒÐµÐœÑÐµÑ ÑÐ»ÐŸÐ²ÐŸ, ÐœÐŸ Ðž Ð¿ÐµÑÐµÐ²ÐŸÐŽÐžÑ Ð²Ð°Ñ Ð² ÑÐµÐ¶ÐžÐŒ
-+Ð²ÑÑÐ°Ð²ÐºÐž.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		  Ð£ÑÐŸÐº 3.4: ÐÐ ÐÐÐÐÐÐÐÐ ÐÐÐÐÐÐ¯Ð¢Ð¬ Ð¡ ÐÐÐÐÐÐÐÐ c
-+
-+
-+** ÐÐŸÐŒÐ°ÐœÐŽÐ° Ð·Ð°ÐŒÐµÐœÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ Ñ ÑÐµÐŒÐž Ð¶Ðµ ÐŸÐ±ÑÐµÐºÑÐ°ÐŒÐž, ÑÑÐŸ Ðž ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ. **
-+
-+  1. ÐÐŸÐŒÐ°ÐœÐŽÐ° ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ð¿ÑÐžÐŒÐµÐœÑÐµÑÑÑ ÑÐ°ÐºÐžÐŒ Ð¶Ðµ ÐŸÐ±ÑÐ°Ð·ÐŸÐŒ, ÐºÐ°Ðº Ðž ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ.
-+     ÐÐµ ÑÐŸÑÐŒÐ°Ñ ÑÐ°ÐºÐŸÐ²:
-+
-+       [ÑÐžÑÐ»ÐŸ]   c   ÐŸÐ±ÑÐµÐºÑ	   ÐÐÐ	    c	[ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
-+
-+  2. ÐÐ±ÑÐµÐºÑÑ ÑÐ°ÐºÐ¶Ðµ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÑÑ: w (ÑÐ»ÐŸÐ²ÐŸ), $ (ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž) Ðž Ñ.Ð¿.
-+
-+  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  4. ÐÐµÑÐµÐ¹ÐŽÐžÑÐµ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÐŸÑÐžÐ±ÐºÐµ.
-+
-+  5. ÐÐ°Ð±ÐµÑÐžÑÐµ c$ Ðž ÐŸÑÑÐµÐŽÐ°ÐºÑÐžÑÑÐ¹ÑÐµ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐœÐ° ÑÐŸÐ²Ð¿Ð°ÐŽÐ°Ð»Ð° ÑÐŸ
-+     Ð²ÑÐŸÑÐŸÐ¹, Ð¿ÐŸÑÐ»Ðµ ÑÐµÐ³ÐŸ ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC>.
-+
-+---> ÐÐŸÐœÐµÑ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐœÑÐ¶ÐŽÐ°ÐµÑÑÑ Ð² Ð¿ÐŸÐŒÐŸÑÐž, ÑÑÐŸÐ±Ñ ÑÑÐ°ÑÑ Ð¿ÐŸÑ
-ÐŸÐ¶ÐžÐŒ ÐœÐ° Ð²ÑÐŸÑÐŸÐ¹.
-+---> ÐÐŸÐœÐµÑ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐœÑÐ¶ÐŽÐ°ÐµÑÑÑ Ð² Ð¿ÐŸÐŒÐŸÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ c$ .
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 3
-+
-+
-+  1. ÐÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ°, ÐºÐŸÑÐŸÑÑÐ¹ ÑÐŸÐ»ÑÐºÐŸ ÑÑÐŸ Ð±ÑÐ» ÑÐŽÐ°Ð»ÐµÐœ, ÐœÐ°Ð±ÐµÑÐžÑÐµ p . Ð­ÑÐ°
-+     ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÑÑÐ°Ð²ÐžÑ ÑÐŽÐ°Ð»ÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ ÐÐÐ¡ÐÐ ÐºÑÑÑÐŸÑÐ° (ÐµÑÐ»Ðž Ð±ÑÐ»Ð° ÑÐŽÐ°Ð»ÐµÐœÐ° ÑÑÑÐŸÐºÐ°,
-+     ÑÐŸ ÐŸÐœÐ° Ð±ÑÐŽÐµÑ Ð¿ÐŸÐŒÐµÑÐµÐœÐ° Ð² ÑÑÑÐŸÐºÐµ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ).
-+
-+  2. ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÑÐžÐŒÐ²ÐŸÐ»Ð° Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ ÐœÐ°Ð±ÐµÑÐžÑÐµ r Ðž Ð·Ð°ÑÐµÐŒ Ð·Ð°ÐŒÐµÐœÑÑÑÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ».
-+
-+  3. ÐÐŸÐŒÐ°ÐœÐŽÐ° ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐÐ°ÐŒ ÐžÐ·ÐŒÐµÐœÐžÑÑ ÑÐºÐ°Ð·Ð°ÐœÐœÑÐ¹ ÐŸÐ±ÑÐµÐºÑ ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ
-+     ÐºÐŸÐœÑÐ° ÑÑÐŸÐ³ÐŸ ÐŸÐ±ÑÐµÐºÑÐ°. ÐÐ°Ð¿ÑÐžÐŒÐµÑ, ÐœÐ°Ð±ÐµÑÐžÑÐµ cw ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ
-+     ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, c$ ÐŽÐ»Ñ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž.
-+
-+  4. Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÑÐ°ÐºÐŸÐ²:
-+
-+	 [ÑÐžÑÐ»ÐŸ]   c	ÐŸÐ±ÑÐµÐºÑ	      ÐÐÐ	c   [ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
-+
-+Ð¢ÐµÐ¿ÐµÑÑ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÑÐ¹ÑÐµÑÑ Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÑÑÐŸÐºÑ.
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+	      Ð£ÑÐŸÐº 4.1: ÐÐÐ€ÐÐ ÐÐÐŠÐÐ¯ Ð Ð€ÐÐÐÐ Ð Ð ÐÐ¡ÐÐÐÐÐÐÐÐÐ Ð ÐÐÐ
-+
-+
-+ ** ÐÐ°Ð±ÐµÑÐžÑÐµ CTRL-g ÑÑÐŸÐ±Ñ ÑÐ²ÐžÐŽÐµÑÑ ÐÐ°ÑÐµ ÐŒÐµÑÑÐŸÑÐ°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð² ÑÐ°Ð¹Ð»Ðµ Ðž ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ
-+				    ÐŸ ÐœÐµÐŒ.
-+	ÐÐ°Ð±ÐµÑÐžÑÐµ SHIFT-G ÐŽÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ Ðº Ð·Ð°ÐŽÐ°ÐœÐœÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð² ÑÐ°Ð¹Ð»Ðµ. **
-+
-+  ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐŸÑÐžÑÐ°Ð¹ÑÐµ Ð²ÐµÑÑ ÑÑÐŸÐº Ð¿ÑÐµÐ¶ÐŽÐµ ÑÐµÐŒ Ð²ÑÐ¿ÐŸÐ»ÐœÑÑÑ Ð»ÑÐ±ÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ!!
-+
-+  1. Ð£ÐŽÐµÑÐ¶ÐžÐ²Ð°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ Ctrl ÐœÐ°Ð¶ÐŒÐžÑÐµ g . ÐÐœÐžÐ·Ñ ÑÐºÑÐ°ÐœÐ° Ð¿ÐŸÑÐ²ÐžÑÑÑ ÑÑÑÐŸÐºÐ° ÑÑÐ°ÑÑÑÐ° Ñ
-+     ÐžÐŒÐµÐœÐµÐŒ ÑÐ°Ð¹Ð»Ð° Ðž ÐœÐŸÐŒÐµÑÐŸÐŒ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐÑ ÐœÐ°Ñ
-ÐŸÐŽÐžÑÐµÑÑ. ÐÐ°Ð¿ÐŸÐŒÐœÐžÑÐµ ÐœÐŸÐŒÐµÑ
-+     ÑÑÑÐŸÐºÐž, ÐŸÐœ Ð¿ÐŸÑÑÐµÐ±ÑÐµÑÑÑ ÐœÐ° ÐšÐ°Ð³Ðµ 3.
-+
-+  2. ÐÐ°Ð¶ÐŒÐžÑÐµ shift-G ÐŽÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ Ðº ÐºÐŸÐœÑÑ ÑÐ°Ð¹Ð»Ð°.
-+
-+  3. ÐÐ°Ð±ÐµÑÐžÑÐµ ÐœÐŸÐŒÐµÑ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ Ð²Ñ ÐœÐ°Ñ
-ÐŸÐŽÐžÐ»ÐžÑÑ Ðž Ð·Ð°ÑÐµÐŒ shift-G. Ð­ÑÐŸ
-+     Ð²ÐµÑÐœÐµÑ ÐÐ°Ñ Ðº ÑÑÑÐŸÐºÐµ, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐÑ Ð±ÑÐ»Ðž, ÐºÐŸÐ³ÐŽÐ° Ð² Ð¿ÐµÑÐ²ÑÐ¹ ÑÐ°Ð· ÐœÐ°Ð¶Ð°Ð»Ðž Ctrl-g.
-+     (ÐÐŸÐ³ÐŽÐ° ÐÑ Ð±ÑÐŽÐµÑÐµ ÐœÐ°Ð±ÐžÑÐ°ÑÑ ÑÐžÑÑÑ, ÐŸÐœÐž ÐÐ ÐŸÑÐŸÐ±ÑÐ°Ð·ÑÑÑÑ ÐœÐ° ÑÐºÑÐ°ÐœÐµ.)
-+
-+  4. ÐÑÐ»Ðž ÐÑ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž Ð²ÑÐµ Ð²ÑÑÐµÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐµ, Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÐµ ÑÐ°Ð³Ðž 1--3.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			   Ð£ÑÐŸÐº 4.2: ÐÐÐÐÐÐÐ ÐÐÐÐ¡ÐÐ
-+
-+	      ** ÐÐ°Ð±ÐµÑÐžÑÐµ  /  Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐµÐŽÐžÑÐµ ÐžÑÐºÐŸÐŒÑÑ ÑÑÐ°Ð·Ñ. **
-+
-+  1. Ð ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode) ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ»  / . ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ,
-+     ÑÑÐŸ ÐŸÐœ Ð²ÐŒÐµÑÑÐµ Ñ ÐºÑÑÑÐŸÑÐŸÐŒ Ð¿ÐŸÑÐ²ÐžÑÑÑ Ð²ÐœÐžÐ·Ñ ÑÐºÑÐ°ÐœÐ°, ÐºÐ°Ðº ÑÑÐŸ Ð¿ÑÐŸÐžÑÑ
-ÐŸÐŽÐžÑ Ñ
-+     ÐºÐŸÐŒÐ°ÐœÐŽÐŸÐ¹ :	.
-+
-+  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ 'ÐŸÑÑÑÐžÐ±ÐºÐ°' <ENTER>. Ð­ÑÐŸ ÑÐŸ ÑÐ»ÐŸÐ²ÐŸ, ÐºÐŸÑÐŸÑÐŸÐµ ÐÑ Ð±ÑÐŽÐµÑÐµ
-+     ÐžÑÐºÐ°ÑÑ.
-+
-+  3. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ð¿ÐŸÐ²ÑÐŸÑÐžÑÑ Ð¿ÐŸÐžÑÐº, Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð¶ÐŒÐžÑÐµ n .
-+     ÐÐ»Ñ Ð¿ÐŸÐžÑÐºÐ° ÑÑÐŸÐ¹ ÑÑÐ°Ð·Ñ Ð² ÐŸÐ±ÑÐ°ÑÐœÐŸÐŒ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž, ÐœÐ°Ð¶ÐŒÐžÑÐµ Shift-N .
-+
-+  4. ÐÑÐ»Ðž ÐÑ Ð¶ÐµÐ»Ð°ÐµÑÐµ ÑÑÐ°Ð·Ñ ÐžÑÐºÐ°ÑÑ Ð² ÐŸÐ±ÑÐ°ÑÐœÐŸÐŒ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ
-+     ÐºÐŸÐŒÐ°ÐœÐŽÑ ? Ð²ÐŒÐµÑÑÐŸ / .
-+
-+---> ÐÐŸÐ³ÐŽÐ° ÐÑ Ð¿ÑÐž Ð¿ÐŸÐžÑÐºÐµ ÐŽÐŸÑÑÐžÐ³ÐœÐµÑÐµ ÐºÐŸÐœÑÐ° ÑÐ°Ð¹Ð»Ð°, Ð¿ÐŸÐžÑÐº Ð±ÑÐŽÐµÑ Ð¿ÑÐŸÐŽÐŸÐ»Ð¶ÐµÐœ Ñ
-+     ÐœÐ°ÑÐ°Ð»Ð°.
-+
-+  "ÐŸÑÑÑÐžÐ±ÐºÐ°" ÑÑÐŸ ÐœÐµ ÑÐ¿ÐŸÑÐŸÐ± Ð¿ÑÐŸÐžÐ·ÐœÐµÑÐµÐœÐžÑ ÑÐ»ÐŸÐ²Ð° `ÐŸÑÐžÐ±ÐºÐ°';  ÐŸÑÑÑÐžÐ±ÐºÐ° ÑÑÐŸ ÐŸÑÐžÐ±ÐºÐ°.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			Ð£ÑÐŸÐº 4.3: ÐÐÐÐ¡Ð ÐÐÐ ÐÐ«Ð¥ Ð¡ÐÐÐÐÐ
-+
-+
-+		** ÐÐ°Ð±ÐµÑÐžÑÐµ % ÐŽÐ»Ñ Ð¿ÐŸÐžÑÐºÐ° Ð¿Ð°ÑÐœÑÑ
- ),] ÐžÐ»Ðž } . **
-+
-+  1. ÐÐŸÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ ÐœÐ°ÐŽ Ð»ÑÐ±ÐŸÐ¹ ÐžÐ· (, [ ÐžÐ»Ðž { Ð² ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ» % .
-+
-+  3. ÐÑÑÑÐŸÑ ÐŽÐŸÐ»Ð¶ÐµÐœ Ð¿ÐµÑÐµÑÐºÐŸÑÐžÑÑ ÐœÐ° Ð¿Ð°ÑÐœÑÑ ÑÐºÐŸÐ±ÐºÑ.
-+
-+  4. ÐÐ°Ð±ÐµÑÐžÑÐµ % ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° ÐºÑÑÑÐŸÑÐ° ÐœÐ°Ð·Ð°ÐŽ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÐºÐŸÐ±ÐºÐµ.
-+
-+---> Ð­ÑÐŸ ( ÑÑÑÐŸÐºÐ°, ÑÐŸÐŽÐµÑÐ¶Ð°ÑÐ°Ñ ÑÐ°ÐºÐžÐµ (, ÑÐ°ÐºÐžÐµ [ ] Ðž ÑÐ°ÐºÐžÐµ { } ÑÐºÐŸÐ±ÐºÐž. ))
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð­ÑÐŸ ÐŸÑÐµÐœÑ ÑÐŽÐŸÐ±ÐœÐŸ Ð¿ÑÐž ÐŸÑÐ»Ð°ÐŽÐºÐµ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒ Ñ Ð¿ÑÐŸÐ¿ÑÑÐµÐœÐœÑÐŒÐž ÑÐºÐŸÐ±ÐºÐ°ÐŒÐž!
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		      Ð£ÑÐŸÐº 4.4: Ð¡ÐÐÐ¡ÐÐ ÐÐ¡ÐÐ ÐÐÐÐÐÐÐ¯ ÐÐšÐÐÐÐ
-+
-+
-+	 ** ÐÐ°Ð±ÐµÑÐžÑÐµ :s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ 'Ð±ÑÐ»ÐŸ' ÐœÐ° 'ÑÑÐ°Ð»ÐŸ'. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ :s/ÑÐ²ÐŸÐŽÑ/ÑÐ²ÐŸÐ¶Ñ <ENTER> . ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ ÐœÐ° ÑÐŸ, ÑÑÐŸ ÑÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ°
-+     Ð·Ð°ÐŒÐµÐœÐžÑ ÑÐŸÐ»ÑÐºÐŸ Ð¿ÐµÑÐ²ÐŸÐµ ÐœÐ°Ð¹ÐŽÐµÐœÐœÐŸÐµ Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÐµ Ð² ÑÑÑÐŸÐºÐµ.
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ :s/ÑÐ²ÐŸÐŽÑ/ÑÐ²ÐŸÐ¶Ñ/g , ÐŸÐ·ÐœÐ°ÑÐ°ÑÑÐµÐµ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÑ Ð³Ð»ÐŸÐ±Ð°Ð»ÑÐœÐŸ Ð²ÐŸ
-+     Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐµ. Ð­ÑÐŸ Ð·Ð°ÐŒÐµÐœÐžÑ Ð²ÑÐµ ÐœÐ°Ð¹ÐŽÐµÐœÐœÑÐµ Ð² ÑÑÑÐŸÐºÐµ Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÑ.
-+
-+---> Ð¯ ÑÐ²ÐŸÐŽÑ Ðº ÐŸÑÐ²ÐµÑÐ¶ÐµÐœÐœÑÐŒ ÑÐµÐ»ÐµÐœÑÑÐŒ, Ñ ÑÐ²ÐŸÐŽÑ ÑÐºÐ²ÐŸÐ·Ñ Ð²ÐµÐºÐŸÐ²ÐµÑÐœÑÐ¹ ÑÑÐŸÐœ, Ñ ÑÐ²ÐŸÐŽÑ Ðº
-+     Ð·Ð°Ð±ÑÑÑÐŒ Ð¿ÐŸÐºÐŸÐ»ÐµÐœÑÑÐŒ.
-+
-+  4. ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
- Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ Ð¿ÐŸÑÐ»ÐµÐŽÐŸÐ²Ð°ÑÐµÐ»ÑÐœÐŸÑÑÐž ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² ÐŒÐµÐ¶ÐŽÑ ÐŽÐ²ÑÐŒÑ
-+     ÑÑÑÐŸÐºÐ°ÐŒÐž,
-+     ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,#s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g  Ð³ÐŽÐµ #,# --- ÐœÐŸÐŒÐµÑÐ° ÑÑÐžÑ
- ÑÑÑÐŸÐº.
-+     ÐÐ°Ð±ÐµÑÐžÑÐµ :%s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g    ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
- Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ Ð²ÐŸ Ð²ÑÐµÐŒ ÑÐ°Ð¹Ð»Ðµ.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 4
-+  1. Ctrl-g Ð¿ÐŸÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð²Ð°ÑÐµ Ð¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð² ÑÐ°Ð¹Ð»Ðµ Ðž ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ ÐœÐµÐŒ.
-+     Shift-G Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐÐ°Ñ Ð² ÐºÐŸÐœÐµÑ ÑÐ°Ð¹Ð»Ð°. ÐÐŸÐŒÐµÑ, Ð·Ð° ÐºÐŸÑÐŸÑÑÐŒ ÑÐ»ÐµÐŽÑÐµÑ Shift-G
-+     Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÑÑÐŸÐºÐµ Ñ ÑÑÐžÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ.
-+
-+  2. ÐÐ°Ð¶Ð°ÑÐžÐµ / Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐŸÐŽ ÑÑÑÐŸÐºÐž Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÑÐŸÐžÐ·Ð²ÐµÑÑÐž Ð¿ÐŸÐžÑÐº ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž
-+     ÐÐÐÐ ÐÐ Ð¿ÐŸ ÑÐµÐºÑÑÑ.
-+     ÐÐ°Ð¶Ð°ÑÐžÐµ ? Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐŸÐŽ ÑÑÑÐŸÐºÐž Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÑÐŸÐžÐ·Ð²ÐµÑÑÐž Ð¿ÐŸÐžÑÐº ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž
-+     ÐÐÐÐÐ Ð¿ÐŸ ÑÐµÐºÑÑÑ.
-+     ÐÐŸÑÐ»Ðµ Ð¿ÐŸÐžÑÐºÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ n ÐŽÐ»Ñ Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐ° Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÑ ÐžÑÐºÐŸÐŒÐŸÐ¹
-+     ÑÑÑÐŸÐºÐž Ð² ÑÐŸÐŒ Ð¶Ðµ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž ÐžÐ»Ðž Shift-N ÐŽÐ»Ñ Ð¿ÐµÑÐµÑ
-ÐŸÐŽÐ° Ð² Ð¿ÑÐŸÑÐžÐ²ÐŸÐ¿ÐŸÐ»ÐŸÐ¶ÐœÐŸÐŒ
-+     ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž.
-+
-+  3. ÐÐ°Ð¶Ð°ÑÐžÐµ % , ÐºÐŸÐ³ÐŽÐ° ÐºÑÑÑÐŸÑ ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ ÐœÐ° (,),[,],{, ÐžÐ»Ðž } Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐœÐ°Ð¹ÑÐž
-+     Ð¿Ð°ÑÐœÑÑ ÑÐºÐŸÐ±ÐºÑ.
-+
-+  4. ÐÐ»Ñ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÐž `ÑÑÐ°Ð»ÐŸ' Ð²ÐŒÐµÑÑÐŸ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ `Ð±ÑÐ»ÐŸ' Ð² ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
-+     :s/old/new
-+     ÐÐ»Ñ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÐž `ÑÑÐ°Ð»ÐŸ' Ð²ÐŒÐµÑÑÐŸ Ð²ÑÐµÑ
- `Ð±ÑÐ»ÐŸ' Ð² ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
-+     :s/old/new/g
-+     ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð² ÐžÐœÑÐµÑÐ²Ð°Ð»Ðµ ÐŒÐµÐ¶ÐŽÑ ÐŽÐ²ÑÐŒÑ ÑÑÑÐŸÐºÐ°ÐŒÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ
-+     :#,#s/old/new/g
-+     ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
- Ð²Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ `Ð±ÑÐ»ÐŸ' ÐœÐ° `ÑÑÐ°Ð»ÐŸ' Ð² ÑÐ°Ð¹Ð»Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
-+     :%s/old/new/g
-+     Ð§ÑÐŸÐ±Ñ ÑÐµÐŽÐ°ÐºÑÐŸÑ ÐºÐ°Ð¶ÐŽÑÐ¹ ÑÐ°Ð· Ð·Ð°Ð¿ÑÐ°ÑÐžÐ²Ð°Ð» Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÐµ, ÐŽÐŸÐ±Ð°Ð²ÑÑÐµ 'c'
-+     :%s/old/new/gc
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		   Ð£ÑÐŸÐº 5.1: ÐÐÐ ÐÐ«ÐÐÐÐÐÐ¢Ð¬ ÐÐÐÐšÐÐ®Ð® ÐÐÐÐÐÐÐ£
-+
-+
-+    ** ÐÐ°Ð±ÐµÑÐžÑÐµ :! Ðž Ð·Ð°ÑÐµÐŒ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐºÐŸÑÐŸÑÑÑ ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ. **
-+
-+  1. ÐÐ°Ð±ÐµÑÐžÑÐµ ÑÐ¶Ðµ Ð·ÐœÐ°ÐºÐŸÐŒÑÑ ÐÐ°ÐŒ ÐºÐŸÐŒÐ°ÐœÐŽÑ : ÐŽÐ»Ñ ÑÑÑÐ°ÐœÐŸÐ²ÐºÐž ÐºÑÑÑÐŸÑÐ° Ð² ÐºÐŸÐŒÐ°ÐœÐŽÐœÑÑ
-+     ÑÑÑÐŸÐºÑ ÑÐµÐŽÐ°ÐºÑÐŸÑÐ°. Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð²Ð²ÐµÑÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+
-+  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ» ! (Ð²ÐŸÑÐºÐ»ÐžÑÐ°ÑÐµÐ»ÑÐœÑÐ¹ Ð·ÐœÐ°Ðº). Ð¢ÐµÐ¿ÐµÑÑ ÐŒÐŸÐ¶ÐœÐŸ ÐžÑÐ¿ÐŸÐ»ÐœÐžÑÑ
-+     Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐœÑÑ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÑ.
-+
-+  3. ÐÐ»Ñ Ð¿ÑÐžÐŒÐµÑÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ ls Ð¿ÐŸÑÐ»Ðµ ! Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ <ENTER>. Ð­ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÑÐ²ÐµÐŽÐµÑ
-+     ÑÐ¿ÐžÑÐŸÐº ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ, ÑÐŸÑÐœÐŸ ÑÐ°ÐºÐ¶Ðµ, ÐºÐ°Ðº ÐµÑÐ»Ðž Ð±Ñ ÐÑ Ð²Ð²ÐµÐ»Ðž ÑÑÑ
-+     ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð² Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÐž ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž. ÐÐ»Ðž Ð¿ÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ :!dir , ÐµÑÐ»Ðž Ð¿ÑÐµÐŽÑÐŽÑÑÐ°Ñ
-+     ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÐœÐµ ÑÑÐ°Ð±ÐŸÑÐ°Ð»Ð°.
-+
-+---> ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð¢Ð°ÐºÐžÐŒ ÑÐ¿ÐŸÑÐŸÐ±ÐŸÐŒ ÐŒÐŸÐ¶ÐœÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ Ð»ÑÐ±ÑÑ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+
-+---> ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐœÐ°ÑÐžÐœÐ°ÑÑÐžÐµÑÑ Ñ : , ÐŽÐŸÐ»Ð¶ÐœÑ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÑÑ ÐœÐ°Ð¶Ð°ÑÐžÐµÐŒ
-+     <ENTER>.
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 Ð£ÑÐŸÐº 5.2: ÐÐÐ ÐÐÐÐÐ¡ÐÐ¢Ð¬ Ð€ÐÐÐ
-+
-+
-+** ÐÐ»Ñ ÑÐŸÑ
-ÑÐ°ÐœÐµÐœÐžÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹, Ð¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐœÑÑ
- Ð² ÑÐ°Ð¹Ð»Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ :w ÐÐÐ¯_Ð€ÐÐÐÐ. **
-+
-+  1. ÐÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐžÐ»Ðž :!ls ÐŽÐ»Ñ Ð¿ÐŸÐ»ÑÑÐµÐœÐžÑ ÑÐ¿ÐžÑÐºÐ° ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ.
-+     ÐÐ°Ðº ÐÐ°ÐŒ ÑÐ¶Ðµ ÐžÐ·Ð²ÐµÑÑÐœÐŸ, ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ ÐœÐ°Ð¶Ð°ÑÑ <ENTER> Ð¿ÐŸÑÐ»Ðµ Ð²Ð²ÐŸÐŽÐ° ÑÑÐžÑ
- ÐºÐŸÐŒÐ°ÐœÐŽ.
-+
-+  2. ÐÑÐžÐŽÑÐŒÐ°Ð¹ÑÐµ ÐœÐ°Ð·Ð²Ð°ÐœÐžÐµ ÐŽÐ»Ñ ÑÐ°Ð¹Ð»Ð°, ÐºÐŸÑÐŸÑÐŸÐµ ÐµÑÐµ ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÐµÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ TEST.
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ :w TEST (Ð³ÐŽÐµ TEST --- ÑÑÐŸ ÐžÐŒÑ ÑÐ°Ð¹Ð»Ð°, Ð¿ÑÐžÐŽÑÐŒÐ°ÐœÐœÐŸÐµ ÐÐ°ÐŒÐž.)
-+
-+  4. Ð­ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŸÑ
-ÑÐ°ÐœÐžÑ Ð²ÐµÑÑ ÑÐ°Ð¹Ð» (Ð£ÑÐµÐ±ÐœÐžÐº Ð¿ÐŸ Vim) Ð¿ÐŸÐŽ ÐžÐŒÐµÐœÐµÐŒ TEST. Ð§ÑÐŸÐ±Ñ
-+     ÑÐŽÐŸÑÑÐŸÐ²ÐµÑÐžÑÑÑÑ Ð² ÑÑÐŸÐŒ, ÑÐœÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ :!dir Ðž Ð¿ÑÐŸÑÐŒÐŸÑÑÐžÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³.
-+
-+---> ÐÐ°ÐŒÐµÑÑÑÐµ, ÑÑÐŸ ÐµÑÐ»Ðž ÐÑ Ð²ÑÐ¹ÐŽÐµÑÐµ ÐžÐ· Vim Ðž Ð·Ð°ÑÐµÐŒ Ð·Ð°Ð¿ÑÑÑÐžÑÐµ ÐµÐ³ÐŸ ÑÐœÐŸÐ²Ð° Ñ
-+     ÑÐ°Ð¹Ð»ÐŸÐŒ TEST, ÑÑÐŸÑ ÑÐ°Ð¹Ð» Ð±ÑÐŽÐµÑ ÑÐŸÑÐœÐŸÐ¹ ÐºÐŸÐ¿ÐžÐµÐ¹ ÑÑÐµÐ±ÐœÐžÐºÐ° Ð² ÑÐŸÑ ÐŒÐŸÐŒÐµÐœÑ, ÐºÐŸÐ³ÐŽÐ°
-+     ÐÑ ÐµÐ³ÐŸ ÑÐŸÑ
-ÑÐ°ÐœÐžÐ»Ðž.
-+
-+  5. Ð¢ÐµÐ¿ÐµÑÑ ÑÐŽÐ°Ð»ÐžÑÐµ ÑÑÐŸÑ ÑÐ°Ð¹Ð», ÐœÐ°Ð±ÑÐ°Ð² :!del TEST
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		       Ð£ÑÐŸÐº 5.3: ÐÐ«ÐÐÐ ÐÐ§ÐÐÐ Ð¡ÐÐ¥Ð ÐÐÐÐÐÐ
-+
-+
-+	 ** ÐÐ»Ñ ÑÐŸÑ
-ÑÐ°ÐœÐµÐœÐžÑ ÑÐ°ÑÑÐž ÑÐ°Ð¹Ð»Ð°, ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,# w ÐÐÐ¯_Ð€ÐÐÐÐ **
-+
-+  1. ÐÑÐµ ÑÐ°Ð· ÐœÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐžÐ»Ðž :!ls ÐŽÐ»Ñ Ð¿ÐŸÐ»ÑÑÐµÐœÐžÑ ÑÐ¿ÐžÑÐºÐ° ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ
-+     ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ Ðž Ð²ÑÐ±ÐµÑÐžÑÐµ Ð¿ÐŸÐŽÑ
-ÐŸÐŽÑÑÐµÐµ ÐžÐŒÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ TEST.
-+
-+  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÐœÐ°ÑÐ°Ð»Ñ ÑÑÐŸÐ¹ ÑÑÑÐ°ÐœÐžÑÑ Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ Ctrl-g ÐŽÐ»Ñ ÐœÐ°Ñ
-ÐŸÐ¶ÐŽÐµÐœÐžÑ
-+     ÐœÐŸÐŒÐµÑÐ° ÑÑÑÐŸÐºÐžto. ÐÐÐÐÐÐÐÐ¢Ð Ð­Ð¢ÐÐ¢ ÐÐÐÐÐ !
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐ°ÐœÐžÑÑ Ðž Ð²ÐœÐŸÐ²Ñ ÐœÐ°Ð±ÐµÑÐžÑÐµ Ctrl-g. ÐÐÐÐÐÐÐÐ¢Ð
-+     Ð Ð­Ð¢ÐÐ¢ ÐÐÐÐÐ  Ð¢ÐÐÐ!
-+
-+  4. ÐÐ»Ñ ÑÐŸÑ
-ÑÐ°ÐœÐµÐœÐžÑ Ð¢ÐÐÐ¬ÐÐ Ð§ÐÐ¡Ð¢Ð ÑÐ°Ð¹Ð»Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,# w TEST , Ð³ÐŽÐµ #,# --- ÑÑÐŸ
-+     ÐœÐŸÐŒÐµÑÐ°, ÐºÐŸÑÐŸÑÑÐµ ÐÑ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž (ÐœÐ°ÑÐ°Ð»ÐŸ, ÐºÐŸÐœÐµÑ), Ð° TEST --- ÐžÐŒÑ Ð²Ð°ÑÐµÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°.
-+
-+  5. ÐÐ°Ðº Ðž Ð¿ÑÐµÐ¶ÐŽÐµ, ÑÐ±ÐµÐŽÐžÑÐµÑÑ Ð² ÐœÐ°Ð»ÐžÑÐžÐž ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð° ÐºÐŸÐŒÐ°ÐœÐŽÐŸÐ¹ :!dir , ÐœÐŸ ÐÐ
-+     Ð£ÐÐÐÐ¯ÐÐ¢Ð ÐµÐ³ÐŸ.
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		    Ð£ÑÐŸÐº 5.4: Ð§Ð¢ÐÐÐÐ Ð ÐÐÐªÐÐÐÐÐÐÐÐ Ð€ÐÐÐÐÐ
-+
-+	  ** ÐÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐŸÐŽÐµÑÐ¶ÐžÐŒÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°, ÐœÐ°Ð±ÐµÑÐžÑÐµ  :r FILENAME **
-+
-+  1. ÐÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐ±ÐµÐŽÐžÑÑÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÑÐ°Ð¹Ð» TEST Ð²ÑÐµ ÐµÑÐµ
-+     ÑÑÑÐµÑÑÐ²ÑÐµÑ.
-+
-+  2. Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² Ð²ÐµÑÑ
-ÐœÐµÐ¹ ÑÐ°ÑÑÐž ÑÑÐŸÐ¹ ÑÑÑÐ°ÐœÐžÑÑ.
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÐŸÑÐ»Ðµ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑÐ°Ð³Ð° 3 ÐÑ ÑÐ²ÐžÐŽÐžÑÐµ Ð£ÑÐŸÐº 5.3.	ÐÐŸÑÐ»Ðµ ÑÑÐŸÐ³ÐŸ
-+	   Ð¿ÐµÑÐµÐŒÐµÑÐ°Ð¹ÑÐµÑÑ ÐÐÐÐ, ÑÐœÐŸÐ²Ð° Ðº ÑÑÐŸÐŒÑ ÑÑÐŸÐºÑ.
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐŸÑÐžÑÐ°Ð¹ÑÐµ ÐÐ°Ñ ÑÐ°Ð¹Ð» TEST, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ :r TEST , Ð³ÐŽÐµ
-+     TEST --- ÑÑÐŸ ÐžÐŒÑ ÑÐ°Ð¹Ð»Ð°.
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐŸÑÐžÑÐ°ÐœÐœÑÐ¹ ÐÐ°ÐŒÐž ÑÐ°Ð¹Ð» Ð±ÑÐŽÐµÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐœ Ð² ÑÐŸÐŒ ÐŒÐµÑÑÐµ, Ð³ÐŽÐµ ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ
-+	   ÐºÑÑÑÐŸÑ.
-+
-+  4. Ð§ÑÐŸÐ±Ñ ÑÐ±ÐµÐŽÐžÑÑÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÑÐ°Ð¹Ð» Ð¿ÑÐŸÑÐžÑÐ°Ðœ, Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ ÐœÐµÐŒÐœÐŸÐ³ÐŸ ÐœÐ°Ð·Ð°ÐŽ Ð¿ÐŸ
-+     ÑÐµÐºÑÑÑ Ðž [A[BÐ·Ð°ÐŒÐµÑÑÑÐµ, ÑÑÐŸ ÑÐµÐ¿ÐµÑÑ ÑÑÑÐµÑÑÐ²ÑÑÑ ÐŽÐ²Ðµ ÐºÐŸÐ¿ÐžÐž Ð£ÑÐŸÐºÐ° 5.3, ÐžÑÑ
-ÐŸÐŽÐœÐ°Ñ
-+     Ðž Ð¿ÐŸÐ»ÑÑÐµÐœÐœÐ°Ñ ÐžÐ· ÑÐ°Ð¹Ð»Ð°.
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 5
-+
-+
-+  1.  :!ÐºÐŸÐŒÐ°ÐœÐŽÐ°  ÐžÑÐ¿ÐŸÐ»ÐœÑÐµÑ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
-+
-+      ÐÐµÐºÐŸÑÐŸÑÑÐµ Ð¿ÐŸÐ»ÐµÐ·ÐœÑÐµ Ð¿ÑÐžÐŒÐµÑÑ:
-+	  :!dir --- Ð²ÑÐ²ÐŸÐŽÐžÑ ÑÐ¿ÐžÑÐŸÐº ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ.
-+	  :!del FILENAME --- ÑÐŽÐ°Ð»ÑÐµÑ ÑÐ°Ð¹Ð» FILENAME.
-+
-+  2.  :w FILENAME Ð·Ð°Ð¿ÐžÑÑÐ²Ð°ÐµÑ ÑÐµÐºÑÑÐžÐ¹ ÑÐµÐŽÐ°ÐºÑÐžÑÑÐµÐŒÑÐ¹ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÐžÑÐº
-+      Ð¿ÐŸÐŽ ÐžÐŒÐµÐœÐµÐŒ FILENAME.
-+
-+  3.  :#,#w FILENAME ÑÐŸÑ
-ÑÐ°ÐœÑÐµÑ ÑÑÑÐŸÐºÐž ÐŸÑ # ÐŽÐŸ # Ð² ÑÐ°Ð¹Ð» FILENAME.
-+
-+  4.  :r FILENAME ÑÑÐžÑÑÐ²Ð°ÐµÑ Ñ ÐŽÐžÑÐºÐ° ÑÐ°Ð¹Ð» FILENAME Ðž Ð¿ÐŸÐŒÐµÑÐ°ÐµÑ ÐµÐ³ÐŸ Ð² ÑÐµÐºÑÑÐžÐ¹
-+      ÑÐ°Ð¹Ð» ÑÐ»ÐµÐŽÐŸÐŒ Ð·Ð° Ð¿ÐŸÐ·ÐžÑÐžÐµÐ¹ ÐºÑÑÑÐŸÑÐ°.
-+
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			  Ð£ÑÐŸÐº 6.1: ÐÐÐÐÐÐÐ Ð¡ÐÐÐÐÐÐÐ¯
-+
-+
-+ ** ÐÐ°Ð±ÐµÑÐžÑÐµ o ÑÑÐŸÐ±Ñ ÑÐŸÐ·ÐŽÐ°ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÑÐµÐ¶ÐžÐŒ
-+			   Ð²ÑÑÐ°Ð²ÐºÐž (Insert mode) **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ o (Ð² ÐœÐžÐ¶ÐœÐµÐŒ ÑÐµÐ³ÐžÑÑÑÐµ) ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŸÐ·ÐŽÐ°ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ
-+     ÐÐÐÐ ÐºÑÑÑÐŸÑÐ° Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÑÐµÐ¶ÐžÐŒ Ð²ÑÑÐ°Ð²ÐºÐž (Insert mode).
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÑÐºÐŸÐ¿ÐžÑÑÐ¹ÑÐµ Ð¿ÐŸÐŒÐµÑÐµÐœÐœÑÑ ---> ÑÑÑÐŸÐºÑ Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ Ð²ÑÑ
-ÐŸÐŽÐ° ÐžÐ·
-+     ÑÐµÐ¶ÐžÐŒÐ° Ð²ÑÑÐ°Ð²ÐºÐž.
-+
-+---> ÐÐŸÑÐ»Ðµ ÐœÐ°Ð¶Ð°ÑÐžÑ o ÐºÑÑÑÐŸÑ Ð¿ÐµÑÐµÐ¹ÐŽÐµÑ ÐœÐ° ÐœÐŸÐ²ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ Ð² ÑÐµÐ¶ÐžÐŒÐµ Ð²ÑÑÐ°Ð²ÐºÐž.
-+
-+  4. ÐÐ»Ñ ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÑÑÑÐŸÐºÐž ÐÐ«ÐšÐ ÐºÑÑÑÐŸÑÐ°, Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð±ÐµÑÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ O, Ð²ÐŒÐµÑÑÐŸ
-+     ÑÑÑÐŸÑÐœÐŸÐ¹ o. ÐÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ Ð¿ÑÐŸÐŽÐµÐ»Ð°ÑÑ ÑÑÐŸ Ñ ÐœÐžÐ¶ÐµÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÑÑÑÐŸÐºÐŸÐ¹.
-+Ð¡ÐŸÐ·ÐŽÐ°Ð¹ÑÐµ ÐœÐŸÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐœÐ°ÐŽ ÑÑÐŸÐ¹, ÐœÐ°Ð¶Ð°Ð² Shift-O, Ð¿ÐŸÐŒÐµÑÑÐžÐ² ÐºÑÑÑÐŸÑ ÐœÐ° ÑÑÑ ÑÑÑÐŸÐºÑ.
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			 Ð£ÑÐŸÐº 6.2: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐÐÐÐÐ¯
-+
-+	    ** ÐÐ°Ð±ÐµÑÐžÑÐµ a , ÑÑÐŸÐ±Ñ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ ÐÐÐ¡ÐÐ ÐºÑÑÑÐŸÑÐ°. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ð² ÐºÐŸÐœÐµÑ Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐž, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> ,
-+     ÐœÐ°Ð±ÑÐ°Ð² $ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode).
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ a (Ð² ÐœÐžÐ¶ÐœÐµÐŒ ÑÐµÐ³ÐžÑÑÑÐµ) ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐÐÐ¡ÐÐ ÑÐžÐŒÐ²ÐŸÐ»Ð°,
-+     ÐœÐ°Ñ
-ÐŸÐŽÑÑÐµÐ³ÐŸÑÑ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. (ÐÐ°Ð³Ð»Ð°Ð²ÐœÐ°Ñ A Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ Ð² ÐºÐŸÐœÐµÑ
-+     ÑÑÑÐŸÐºÐž.)
-+
-+ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐžÐ·Ð±ÐµÐ¶Ð°ÑÑ ÐœÐ°Ð¶Ð°ÑÐžÑ i , Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°, ÑÐµÐºÑÑÐ° ÐŽÐ»Ñ
-+	   Ð²ÑÑÐ°Ð²ÐºÐž, <ESC>, ÐºÑÑÑÐŸÑ-Ð²Ð¿ÑÐ°Ð²ÐŸ, Ðž, ÐœÐ°ÐºÐŸÐœÐµÑ, x , Ð¿ÑÐŸÑÑÐŸ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
-+	   ÑÑÐŸÐ±Ñ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ ÑÐµÑÑ Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž!
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ Ð·Ð°Ð²ÐµÑÑÐžÑÐµ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ. ÐÐ°ÐŒÐµÑÑÑÐµ ÑÐ°ÐºÐ¶Ðµ, ÑÑÐŸ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ ÑÑÐŸ Ð²
-+     ÑÐŸÑÐœÐŸÑÑÐž ÑÐŸ Ð¶Ðµ ÑÐ°ÐŒÐŸÐµ, ÑÑÐŸ Ðž ÑÐµÐ¶ÐžÐŒ Ð²ÑÑÐ°Ð²ÐºÐž, Ð·Ð° ÐžÑÐºÐ»ÑÑÐµÐœÐžÐµÐŒ Ð¿ÐŸÐ·ÐžÑÐžÐž, Ð²
-+     ÐºÐŸÑÐŸÑÑÑ Ð±ÑÐŽÐµÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐœ ÑÐµÐºÑÑ.
-+
-+---> Ð­ÑÐ° ÑÑÑÐŸÑÐºÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ
-+---> Ð­ÑÐ° ÑÑÑÐŸÑÐºÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ Ð² ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐž ÑÐµÐºÑÑÐ° Ð² ÐºÐŸÐœÐµÑ
-+     ÑÑÑÐŸÐºÐž.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		       Ð£ÑÐŸÐº 6.3: ÐÐ©Ð ÐÐÐÐ Ð¡ÐÐÐ¡ÐÐ ÐÐÐÐÐÐ«
-+
-+
-+       ** ÐÐ°Ð±ÐµÑÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ R ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð±ÐŸÐ»ÐµÐµ, ÑÐµÐŒ ÐŸÐŽÐœÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°. **
-+
-+  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
-+
-+  2. Ð Ð°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² ÐœÐ°ÑÐ°Ð»Ðµ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ ÑÐ»ÐŸÐ²Ð°, ÐŸÑÐ»ÐžÑÐ°ÑÑÐµÐ³ÐŸÑÑ ÐŸÑ
-+     ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐµÐ³ÐŸ Ð² ÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> (ÑÐ»ÐŸÐ²ÐŸ 'Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹').
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ R Ðž Ð·Ð°ÐŒÐµÐœÐžÑÐµ ÐŸÑÑÐ°ÑÐŸÐº ÑÐµÐºÑÑÐ° Ð² Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÑÐ°Ð²
-+     Ð¿ÐŸÐ²ÐµÑÑ
- ÑÑÐ°ÑÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ° ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐ±Ðµ ÑÑÑÐŸÐºÐž ÑÑÐ°Ð»Ðž ÐŸÐŽÐžÐœÐ°ÐºÐŸÐ²ÑÐŒÐž.
-+
-+---> ÐÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐŒÐŸÐ¶ÐœÐŸ ÑÑÐ°Ð²ÐœÑÑÑ Ñ Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐ»Ð°Ð²ÐžÑÐž.
-+---> ÐÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐŒÐŸÐ¶ÐœÐŸ ÑÑÐ°Ð²ÐœÑÑÑ Ñ Ð²ÑÐŸÑÐŸÐ¹, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ R Ðž ÐœÐ°Ð±ÑÐ°Ð² ÐœÐŸÐ²ÑÐ¹ ÑÐµÐºÑÑ.
-+
-+  4. ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ, ÑÑÐŸ Ð¿ÑÐž ÐœÐ°Ð¶Ð°ÑÐžÐž <ESC> ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ, Ð»ÑÐ±ÐŸÐ¹
-+     ÐœÐµ ÐžÐ·ÐŒÐµÐœÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ ÑÐŸÑ
-ÑÐ°ÐœÐžÑÑÑ.
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+			Ð£ÑÐŸÐº 6.4: Ð£Ð¡Ð¢ÐÐÐÐÐÐ ÐÐÐ ÐÐÐÐ¢Ð ÐÐ
-+
-+
-+** Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÐŒ Ð¿Ð°ÑÐ°ÐŒÐµÑÑÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐ³ÐžÑÑÑ Ð¿ÑÐž Ð¿ÐŸÐžÑÐºÐµ ÐžÐ»Ðž Ð·Ð°ÐŒÐµÐœÐµ **
-+
-+
-+  1. ÐÐŸÐžÑÐžÑÐµ ÑÐ»ÐŸÐ²ÐŸ 'ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ', ÐœÐ°Ð±ÑÐ°Ð²:
-+     /ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ
-+     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ Ð¿ÐŸÐžÑÐº ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÐœÐ°Ð¶ÐžÐŒÐ°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ n
-+
-+  2. ÐÐºÐ»ÑÑÐžÑÐµ Ð¿Ð°ÑÐ°ÐŒÐµÑÑ 'ic' (ÐÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐ³ÐžÑÑÑ), ÐœÐ°Ð±ÑÐ°Ð²:
-+     :set ic
-+
-+  3. Ð¢ÐµÐ¿ÐµÑÑ ÑÐœÐŸÐ²Ð° ÑÐŽÐµÐ»Ð°Ð¹ÑÐµ Ð¿ÐŸÐžÑÐº ÑÐ»ÐŸÐ²Ð° 'ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ', ÐœÐ°Ð¶Ð°Ð²: n
-+     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ Ð¿ÐŸÐžÑÐº ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÐœÐ°Ð¶ÐžÐŒÐ°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ n
-+
-+  4. ÐÐºÐ»ÑÑÐžÑÐµ Ð¿Ð°ÑÐ°ÐŒÐµÑÑÑ 'hlsearch' Ðž 'incsearch':
-+     :set hls is
-+
-+  5. Ð¢ÐµÐ¿ÐµÑÑ ÐŸÐ¿ÑÑÑ Ð²Ð²ÐµÐŽÐžÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð¿ÐŸÐžÑÐºÐ° Ðž Ð¿ÐŸÑÐŒÐŸÑÑÐžÑÐµ, ÑÑÐŸ Ð¿ÐŸÐ»ÑÑÐžÑÑÑ:
-+     /ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 6
-+
-+
-+  1. ÐÐ°Ð¶Ð°ÑÐžÐµ o ÑÐŸÐ·ÐŽÐ°ÐµÑ ÑÑÑÐŸÐºÑ ÐÐÐÐ ÐºÑÑÑÐŸÑÐ° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐºÑÑÑÐŸÑ Ð² ÐœÐµÐµ Ð² ÑÐµÐ¶ÐžÐŒÐµ
-+     Ð²ÑÑÐ°Ð²ÐºÐž.
-+     ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ O ÑÐŸÐ·ÐŽÐ°ÐµÑ ÑÑÑÐŸÐºÑ ÐÐ«ÐšÐ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ
-+     ÐºÑÑÑÐŸÑ.
-+
-+  2. ÐÐ°Ð±ÐµÑÐžÑÐµ a ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ° ÐÐÐ¡ÐÐ ÑÐžÐŒÐ²ÐŸÐ»Ð°, ÐœÐ° ÐºÐŸÑÐŸÑÐŸÐŒ ÐœÐ°Ñ
-ÐŸÐŽÐžÑÑÑ ÐºÑÑÑÐŸÑ.
-+     ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ A Ð°Ð²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐÐ°Ñ ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ°
-+     Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž.
-+
-+  3. ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ R Ð¿ÐµÑÐµÐ²ÐŸÐŽÐžÑ ÐÐ°Ñ Ð² ÑÐµÐ¶ÐžÐŒ Ð·Ð°ÐŒÐµÐœÑ ÐŽÐŸ ÑÐµÑ
- Ð¿ÐŸÑ, Ð¿ÐŸÐºÐ° ÐœÐµ
-+     Ð±ÑÐŽÐµÑ ÐœÐ°Ð¶Ð°ÑÐ° ÐºÐ»Ð°Ð²ÐžÑÐ° <ESC> ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ.
-+
-+  4. ÐÐ°Ð±ÑÐ°Ð² ":set xxx" Ð²Ñ ÑÐŒÐŸÐ¶ÐµÑÐµ Ð²ÐºÐ»ÑÑÐžÑÑ Ð¿Ð°ÑÐ°ÐŒÐµÑÑ "xxx"
-+
-+
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		 Ð£ÑÐŸÐº 7: ÐÐÐÐÐÐÐ« ÐÐÐÐ£Ð§ÐÐÐÐ¯ ÐÐ¡Ð¢Ð ÐÐÐÐÐÐ Ð¡ÐÐ ÐÐÐÐ
-+
-+	       ** ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ Ð²ÑÑÑÐŸÐµÐœÐœÑÑ ÑÐ¿ÑÐ°Ð²ÐŸÑÐœÑÑ ÑÐžÑÑÐµÐŒÑ **
-+
-+  Vim ÐŸÐ±Ð»Ð°ÐŽÐ°ÐµÑ ÐŒÐŸÑÐœÐŸÐ¹ Ð²ÑÑÑÐŸÐµÐœÐœÐŸÐ¹ ÑÐ¿ÑÐ°Ð²ÐŸÑÐœÐŸÐ¹ ÑÐžÑÑÐµÐŒÐŸÐ¹. ÐÐ»Ñ ÐœÐ°ÑÐ°Ð»Ð° Ð¿ÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ
-+  ÐŸÐŽÐžÐœ ÐžÐ· ÑÑÐµÑ
- Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ²:
-+	- ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <HELP> (ÐµÑÐ»Ðž ÑÐ°ÐºÐŸÐ²Ð°Ñ ÐžÐŒÐµÐµÑÑÑ ÐœÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÐµ)
-+	- ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <F1> (ÐµÑÐ»Ðž ÑÐ°ÐºÐŸÐ²Ð°Ñ ÐžÐŒÐµÐµÑÑÑ ÐœÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÐµ)
-+	- ÐœÐ°Ð±ÐµÑÐžÑÐµ   :help <ENTER>
-+
-+  ÐÐ°Ð±ÐµÑÐžÑÐµ   :q <ENTER>   ÑÑÐŸÐ±Ñ Ð·Ð°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ ÑÐ¿ÑÐ°Ð²ÐºÐž.
-+
-+  ÐÑ ÐŒÐŸÐ¶ÐµÑÐµ ÐœÐ°Ð¹ÑÐž ÑÐ¿ÑÐ°Ð²ÐºÑ ÐŽÐ»Ñ Ð»ÑÐ±ÐŸÐ³ÐŸ Ð¿ÐŸÐœÑÑÐžÑ ÐžÐ»Ðž ÐºÐŸÐŒÐ°ÐœÐŽÑ, Ð¿ÑÐŸÑÑÐŸ Ð·Ð°ÐŽÐ°Ð²
-+  ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐžÐ¹ Ð°ÑÐ³ÑÐŒÐµÐœÑ ÐºÐŸÐŒÐ°ÐœÐŽÐµ ":help". ÐÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ ÑÐ»ÐµÐŽÑÑÑÐµÐµ (ÐœÐµ Ð·Ð°Ð±ÑÐŽÑÑÐµ
-+  ÐœÐ°Ð¶Ð°ÑÑ <ENTER>):
-+
-+  :help w
-+  :help c_<T
-+  :help insert-index
-+
-+
-+
-+
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+		     Ð£ÑÐŸÐº 8: Ð¡ÐÐÐÐÐÐÐ Ð¡Ð¢ÐÐ Ð¢ÐÐÐÐÐ Ð¡ÐÐ ÐÐÐ¢Ð
-+
-+			** ÐÐºÐ»ÑÑÐžÐŒ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐž Vim **
-+
-+  Vim ÐžÐŒÐµÐµÑ ÐœÐ°ÐŒÐœÐŸÐ³ÐŸ Ð±ÐŸÐ»ÑÑÐµ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐµÐ¹, ÑÐµÐŒ Vi, ÐŸÐŽÐœÐ°ÐºÐŸ Ð±ÐŸÐ»ÑÑÐžÐœÑÑÐ²Ð°ÐŸ ÐžÐ· ÐœÐžÑ
-
-+  Ð²ÑÐºÐ»ÑÑÐµÐœÑ Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐœÐ°ÑÐ°ÑÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ ÐœÐŸÐ²ÑÐµ
-+  Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐž ÐÐ°ÐŒ ÑÐ»ÐµÐŽÑÐµÑ ÑÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð¹Ð» "vimrc".
-+
-+  1. ÐÑÑÐµÐŽÐ°ÐºÑÐžÑÑÐ¹ÑÐµ ÑÐ°Ð¹Ð» "vimrc", ÐµÐ³ÐŸ ÑÐ°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð·Ð°Ð²ÐžÑÐžÑ ÐŸÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÐŒÐŸÐ¹
-+     ÑÐžÑÑÐµÐŒÑ:
-+
-+       :edit ~/.vimrc			ÐŽÐ»Ñ Unix
-+       :edit $VIM/_vimrc		ÐŽÐ»Ñ MS-Windows
-+
-+  2. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐŸÑÐžÑÐ°Ð¹ÑÐµ Ð¿ÑÐžÐŒÐµÑ ÑÐ°Ð¹Ð»Ð° "vimrc":
-+
-+       :read $VIMRUNTIME/vimrc_example.vim
-+
-+  3. ÐÐ°Ð¿ÐžÑÐžÑÐµ ÑÐ°Ð¹Ð»:
-+
-+       :write
-+
-+  Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐž ÑÐ»ÐµÐŽÑÑÑÐµÐŒ Ð·Ð°Ð¿ÑÑÐºÐµ Vim Ð±ÑÐŽÐµÑ Ð²ÐºÐ»ÑÑÐµÐœÐ° Ð¿ÐŸÐŽÑÐ²ÐµÑÐºÐ° ÑÐžÐœÑÐ°ÐºÑÐžÑÐ°. ÐÑÐµ
-+  ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž, Ð¿ÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÑÐµ ÐÐ°ÐŒÐž, ÐŒÐŸÐ³ÑÑ Ð±ÑÑÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÑ Ð² ÑÐ°Ð¹Ð» "vimrc".
-+
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-+  ÐÐ° ÑÑÐŸÐŒ Ð·Ð°Ð²ÐµÑÑÐ°ÐµÑÑÑ Ð£ÑÐµÐ±ÐœÐžÐº Vim. ÐÐœ Ð±ÑÐ» Ð¿ÑÐµÐŽÐœÐ°Ð·ÐœÐ°ÑÐµÐœ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐŽÐ°ÑÑ
-+  ÐŸÐ±ÑÐµÐµ Ð¿ÑÐµÐŽÑÑÐ°Ð²Ð»ÐµÐœÐžÐµ ÐŸ ÑÐµÐŽÐ°ÐºÑÐŸÑÐµ Vim, ÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐŸÐµ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ñ Ð»ÐµÐ³ÐºÐŸÑÑÑÑ
-+  ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ ÐµÐ³ÐŸ. Ð£ÑÐµÐ±ÐœÐžÐº ÐŽÐ°Ð»ÐµÐº ÐŸÑ Ð¿ÐŸÐ»ÐœÐŸÑÑ, Ð¿ÐŸÑÐºÐŸÐ»ÑÐºÑ Vim ÐžÐŒÐµÐµÑ ÐŸÑÐµÐœÑ ÐŒÐœÐŸÐ³ÐŸ
-+  ÐºÐŸÐŒÐ°ÐœÐŽ. ÐÑÐŸÑÐžÑÐ°Ð¹ÑÐµ ÑÐµÐ¿ÐµÑÑ ÑÑÐºÐŸÐ²ÐŸÐŽÑÑÐ²ÐŸ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»Ñ: ":help user-manual".
-+
-+  ÐÐ»Ñ ÐŽÐ°Ð»ÑÐœÐµÐ¹ÑÐµÐ³ÐŸ ÑÑÐµÐœÐžÑ ÑÐµÐºÐŸÐŒÐµÐœÐŽÑÐµÑÑÑ ÐºÐœÐžÐ³Ð°:
-+	Vim - Vi Improved - ÐÐ²ÑÐŸÑ: Steve Oualline
-+	ÐÐ·ÐŽÐ°ÑÐµÐ»Ñ: New Riders
-+  Ð­ÑÐ° ÐºÐœÐžÐ³Ð° Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ Ð¿ÐŸÑÐ²ÑÑÐµÐœÐ° Vim. ÐÑÐŸÐ±ÐµÐœÐœÐŸ Ð¿ÐŸÐ»ÐµÐ·ÐœÐ° ÐœÐŸÐ²ÐžÑÐºÐ°ÐŒ. Ð¡ÐŸÐŽÐµÑÐ¶ÐžÑ
-+  ÐŒÐœÐŸÐ¶ÐµÑÑÐ²ÐŸ Ð¿ÑÐžÐŒÐµÑÐŸÐ² Ðž ÐžÐ»Ð»ÑÑÑÑÐ°ÑÐžÐ¹.
-+  ÐÐ·Ð³Ð»ÑÐœÐžÑÐµ ÐœÐ° See http://iccf-holland.org/click5.html
-+
-+  Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ ÐºÐœÐžÐ³Ð° Ð±ÐŸÐ»ÐµÐµ Ð¿ÐŸÑÑÐµÐœÐœÐŸÐ³ÐŸ Ð²ÐŸÐ·ÑÐ°ÑÑÐ° Ðž Ð¿ÐŸÑÐ²ÑÑÐµÐœÐ° Ð±ÐŸÐ»ÑÑÐµ Vi, ÑÐµÐŒ Vim,
-+  ÐŸÐŽÐœÐ°ÐºÐŸ ÑÐ°ÐºÐ¶Ðµ ÑÐµÐºÐŸÐŒÐµÐœÐŽÑÐµÑÑÑ:
-+	Learning the Vi Editor - ÐÐ²ÑÐŸÑ: Linda Lamb
-+	ÐÐ·ÐŽÐ°ÑÐµÐ»Ñ: O'Reilly & Associates Inc.
-+  Ð­ÑÐŸ Ñ
-ÐŸÑÐŸÑÐ°Ñ ÐºÐœÐžÐ³Ð° ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐ·ÐœÐ°ÑÑ Ð²ÑÐµ, ÑÑÐŸ ÑÐŸÐ»ÑÐºÐŸ ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÑÐŸÐŽÐµÐ»ÑÐ²Ð°ÑÑ Ñ
-+  Vi. ÐšÐµÑÑÐŸÐµ ÐžÐ·ÐŽÐ°ÐœÐžÐµ ÑÐ°ÐºÐ¶Ðµ Ð²ÐºÐ»ÑÑÐ°ÐµÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ Vim.
-+
-+  Ð­ÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð±ÑÐ» ÐœÐ°Ð¿ÐžÑÐ°Ðœ Michael C. Pierce Ðž Robert K. Ware, Colorado School
-+  of Mines Ñ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÐµÐŒ ÐžÐŽÐµÐ¹, Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐœÑÑ
- Charles Smith, Colorado State
-+  University. E-mail: bware@mines.colorado.edu.
-+
-+  ÐÐŸÑÐ°Ð±ÐŸÑÐ°ÐœÐŸ ÐŽÐ»Ñ Vim Bram Moolenaar.
-+
-+  ÐÐµÑÐµÐ²ÐŸÐŽ: ÐÐœÐŽÑÐµÐ¹ ÐÐžÑÐµÐ»ÐµÐ² <a_kissel@eudoramail.com>, 2002.
-+  Translator: Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
-+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-diff -Naur vim70.orig/runtime/tutor/tutor.vim vim70/runtime/tutor/tutor.vim
---- vim70.orig/runtime/tutor/tutor.vim	2006-03-18 12:20:36.000000000 -0800
-+++ vim70/runtime/tutor/tutor.vim	2006-10-13 01:02:59.000000000 -0700
-@@ -1,6 +1,6 @@
- " Vim tutor support file
- " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
--" Last Change:	2006 Mar 18
-+" Last Change:	2006 Sep 09
- 
- " This small source file is used for detecting if a translation of the
- " tutor file exist, i.e., a tutor.xx file, where xx is the language.
-@@ -93,9 +93,16 @@
-   endif
- endif
- 
--" The Greek tutor is available in two encodings, guess which one to use
--if s:ext =~? '\.gr' && &enc =~ 737
--  let s:ext = ".gr.cp737"
-+" The Greek tutor is available in three encodings, guess what to use.
-+" We used ".gr" (Greece) instead of ".el" (Greek); accept both.
-+if s:ext =~? '\.gr\|\.el'
-+  if &enc == "iso-8859-7"
-+    let s:ext = ".gr"
-+  elseif &enc == "utf-8"
-+    let s:ext = ".gr.utf-8"
-+  elseif &enc =~ 737
-+    let s:ext = ".gr.cp737"
-+  endif
- endif
- 
- " The Slovak tutor is available in two encodings, guess which one to use
-@@ -103,11 +110,15 @@
-   let s:ext = ".sk.cp1250"
- endif
- 
--" The Russian tutor is available in two encodings, guess which one to use.
--" This segment is from the above lines and modified by
--" Alexey I. Froloff <raorn@altlinux.org> for Russian vim tutorial
--if s:ext =~? '\.ru' && &enc =~ 1251
--  let s:ext = ".ru.cp1251"
-+" The Russian tutor is available in three encodings, guess which one to use.
-+if s:ext =~? '\.ru'
-+  if &enc == 'utf-8'
-+    let s:ext = '.ru.utf-8'
-+  elseif &enc =~ '1251'
-+    let s:ext = '.ru.cp1251'
-+  elseif &enc =~ 'koi8'
-+    let s:ext = '.ru'
-+  endif
- endif
- 
- " Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch).
-diff -Naur vim70.orig/src/auto/configure vim70/src/auto/configure
---- vim70.orig/src/auto/configure	2006-05-04 03:46:19.000000000 -0700
-+++ vim70/src/auto/configure	2006-10-13 01:03:10.000000000 -0700
-@@ -4014,7 +4014,7 @@
-       LDFLAGS=$ldflags_save
-       if test $perl_ok = yes; then
- 	if test "X$perlcppflags" != "X"; then
--	  PERL_CFLAGS="$perlcppflags"
-+	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
- 	fi
- 	if test "X$perlldflags" != "X"; then
- 	  LDFLAGS="$perlldflags $LDFLAGS"
-@@ -4256,7 +4256,7 @@
- echo $ECHO_N "checking if -pthread should be used... $ECHO_C" >&6
- 	threadsafe_flag=
- 	thread_lib=
--	if test "x$MACOSX" != "xyes"; then
-+	        if test "`(uname) 2>/dev/null`" != Darwin; then
- 	  test "$GCC" = yes && threadsafe_flag="-pthread"
- 	  if test "`(uname) 2>/dev/null`" = FreeBSD; then
- 	    threadsafe_flag="-D_THREAD_SAFE"
-@@ -11555,8 +11555,8 @@
- else
-   echo "$as_me:$LINENO: result: empty: automatic terminal library selection" >&5
- echo "${ECHO_T}empty: automatic terminal library selection" >&6
--            case "`uname -s 2>/dev/null`" in
--	OSF1)	tlibs="ncurses curses termlib termcap";;
-+              case "`uname -s 2>/dev/null`" in
-+	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
- 	*)	tlibs="ncurses termlib termcap curses";;
-   esac
-   for libname in $tlibs; do
-diff -Naur vim70.orig/src/buffer.c vim70/src/buffer.c
---- vim70.orig/src/buffer.c	2006-04-26 14:37:23.000000000 -0700
-+++ vim70/src/buffer.c	2006-10-13 01:02:59.000000000 -0700
-@@ -434,12 +434,8 @@
-     if (usingNetbeans)
- 	netbeans_file_closed(buf);
- #endif
--#ifdef FEAT_AUTOCHDIR
--    /* Change directories when the acd option is set on. */
--    if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	shorten_fnames(TRUE);
--#endif
-+    /* Change directories when the 'acd' option is set. */
-+    DO_AUTOCHDIR
- 
-     /*
-      * Remove the buffer from the list.
-@@ -1390,7 +1386,8 @@
-     }
-     else
-     {
--	need_fileinfo = TRUE;		/* display file info after redraw */
-+	if (!msg_silent)
-+	    need_fileinfo = TRUE;	/* display file info after redraw */
- 	(void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
- #ifdef FEAT_AUTOCMD
- 	curwin->w_topline = 1;
-@@ -1422,12 +1419,8 @@
- 	netbeans_file_activated(curbuf);
- #endif
- 
--#ifdef FEAT_AUTOCHDIR
--    /* Change directories when the acd option is set on. */
--    if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	shorten_fnames(TRUE);
--#endif
-+    /* Change directories when the 'acd' option is set. */
-+    DO_AUTOCHDIR
- 
- #ifdef FEAT_KEYMAP
-     if (curbuf->b_kmap_state & KEYMAP_INIT)
-@@ -1436,6 +1429,18 @@
-     redraw_later(NOT_VALID);
- }
- 
-+#if defined(FEAT_AUTOCHDIR) || defined(PROTO)
-+/*
-+ * Change to the directory of the current buffer.
-+ */
-+    void
-+do_autochdir()
-+{
-+    if (curbuf->b_ffname != NULL && vim_chdirfile(curbuf->b_ffname) == OK)
-+	shorten_fnames(TRUE);
-+}
-+#endif
-+
- /*
-  * functions for dealing with the buffer list
-  */
-@@ -3324,7 +3329,7 @@
-     {
- 	usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
- 	if (usefmt == NULL)
--	    usefmt = (char_u *)"";
-+	    usefmt = fmt;
-     }
- #endif
- 
-@@ -5420,11 +5425,7 @@
-     buf_T	*newbuf;
-     int		differ = TRUE;
-     linenr_T	lnum;
--#ifdef FEAT_AUTOCMD
-     aco_save_T	aco;
--#else
--    buf_T	*old_curbuf = curbuf;
--#endif
-     exarg_T	ea;
- 
-     /* Allocate a buffer without putting it in the buffer list. */
-@@ -5439,13 +5440,8 @@
- 	return TRUE;
-     }
- 
--#ifdef FEAT_AUTOCMD
-     /* set curwin/curbuf to buf and save a few things */
-     aucmd_prepbuf(&aco, newbuf);
--#else
--    curbuf = newbuf;
--    curwin->w_buffer = newbuf;
--#endif
- 
-     if (ml_open(curbuf) == OK
- 	    && readfile(buf->b_ffname, buf->b_fname,
-@@ -5466,13 +5462,8 @@
-     }
-     vim_free(ea.cmd);
- 
--#ifdef FEAT_AUTOCMD
-     /* restore curwin/curbuf and a few other things */
-     aucmd_restbuf(&aco);
--#else
--    curbuf = old_curbuf;
--    curwin->w_buffer = old_curbuf;
--#endif
- 
-     if (curbuf != newbuf)	/* safety check */
- 	wipe_buffer(newbuf, FALSE);
-diff -Naur vim70.orig/src/configure vim70/src/configure
---- vim70.orig/src/configure	2006-05-07 07:17:49.000000000 -0700
-+++ vim70/src/configure	2006-10-13 01:02:48.000000000 -0700
-@@ -2,5 +2,9 @@
- # run the automatically generated configure script
- CONFIG_STATUS=auto/config.status \
- 	auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
-+result=$?
-+
- # Stupid autoconf 2.5x causes this file to be left behind.
- if test -f configure.lineno; then rm -f configure.lineno; fi
-+
-+exit $result
-diff -Naur vim70.orig/src/configure.in vim70/src/configure.in
---- vim70.orig/src/configure.in	2006-05-04 03:46:11.000000000 -0700
-+++ vim70/src/configure.in	2006-10-13 01:03:09.000000000 -0700
-@@ -508,7 +508,8 @@
-       LDFLAGS=$ldflags_save
-       if test $perl_ok = yes; then
- 	if test "X$perlcppflags" != "X"; then
--	  PERL_CFLAGS="$perlcppflags"
-+	  dnl remove -pipe, it confuses cproto
-+	  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
- 	fi
- 	if test "X$perlldflags" != "X"; then
- 	  LDFLAGS="$perlldflags $LDFLAGS"
-@@ -680,7 +681,8 @@
- 	AC_MSG_CHECKING([if -pthread should be used])
- 	threadsafe_flag=
- 	thread_lib=
--	if test "x$MACOSX" != "xyes"; then
-+	dnl if test "x$MACOSX" != "xyes"; then
-+        if test "`(uname) 2>/dev/null`" != Darwin; then
- 	  test "$GCC" = yes && threadsafe_flag="-pthread"
- 	  if test "`(uname) 2>/dev/null`" = FreeBSD; then
- 	    threadsafe_flag="-D_THREAD_SAFE"
-@@ -2150,8 +2152,9 @@
-   dnl  Newer versions of ncurses are preferred over anything.
-   dnl  Older versions of ncurses have bugs, get a new one!
-   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
-+  dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
-   case "`uname -s 2>/dev/null`" in
--	OSF1)	tlibs="ncurses curses termlib termcap";;
-+	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
- 	*)	tlibs="ncurses termlib termcap curses";;
-   esac
-   for libname in $tlibs; do
-diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
---- vim70.orig/src/edit.c	2006-05-07 04:48:51.000000000 -0700
-+++ vim70/src/edit.c	2006-10-13 01:03:10.000000000 -0700
-@@ -129,7 +129,7 @@
- 
- static void ins_ctrl_x __ARGS((void));
- static int  has_compl_option __ARGS((int dict_opt));
--static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int dup));
-+static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup));
- static int  ins_compl_equal __ARGS((compl_T *match, char_u *str, int len));
- static void ins_compl_longest_match __ARGS((compl_T *match));
- static void ins_compl_add_matches __ARGS((int num_matches, char_u **matches, int icase));
-@@ -707,6 +707,11 @@
- 	lastc = c;			/* remember previous char for CTRL-D */
- 	c = safe_vgetc();
- 
-+#ifdef FEAT_AUTOCMD
-+	/* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */
-+	did_cursorhold = TRUE;
-+#endif
-+
- #ifdef FEAT_RIGHTLEFT
- 	if (p_hkmap && KeyTyped)
- 	    c = hkmap(c);		/* Hebrew mode mapping */
-@@ -719,9 +724,14 @@
- #ifdef FEAT_INS_EXPAND
- 	/*
- 	 * Special handling of keys while the popup menu is visible or wanted
--	 * and the cursor is still in the completed word.
-+	 * and the cursor is still in the completed word.  Only when there is
-+	 * a match, skip this when no matches were found.
- 	 */
--	if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
-+	if (compl_started
-+		&& pum_wanted()
-+		&& curwin->w_cursor.col >= compl_col
-+		&& (compl_shown_match == NULL
-+		    || compl_shown_match != compl_shown_match->cp_next))
- 	{
- 	    /* BS: Delete one character from "compl_leader". */
- 	    if ((c == K_BS || c == Ctrl_H)
-@@ -751,7 +761,7 @@
- 		    continue;
- 		}
- 
--		/* Pressing CTRL-Y selects the current match.  Shen
-+		/* Pressing CTRL-Y selects the current match.  When
- 		 * compl_enter_selects is set the Enter key does the same. */
- 		if (c == Ctrl_Y || (compl_enter_selects
- 				   && (c == CAR || c == K_KENTER || c == NL)))
-@@ -877,6 +887,7 @@
- 		/* Close the cmdline window. */
- 		cmdwin_result = K_IGNORE;
- 		got_int = FALSE; /* don't stop executing autocommands et al. */
-+		nomove = TRUE;
- 		goto doESCkey;
- 	    }
- #endif
-@@ -912,6 +923,7 @@
- 		if (cmdchar != 'r' && cmdchar != 'v')
- 		    apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL,
- 							       FALSE, curbuf);
-+		did_cursorhold = FALSE;
- #endif
- 		return (c == Ctrl_O);
- 	    }
-@@ -1383,6 +1395,12 @@
- 	    break;
- 	}   /* end of switch (c) */
- 
-+#ifdef FEAT_AUTOCMD
-+	/* If typed something may trigger CursorHoldI again. */
-+	if (c != K_CURSORHOLD)
-+	    did_cursorhold = FALSE;
-+#endif
-+
- 	/* If the cursor was moved we didn't just insert a space */
- 	if (arrow_used)
- 	    inserted_space = FALSE;
-@@ -2112,7 +2130,7 @@
-  * maybe because alloc() returns NULL, then FAIL is returned.
-  */
-     static int
--ins_compl_add(str, len, icase, fname, cptext, cdir, flags, dup)
-+ins_compl_add(str, len, icase, fname, cptext, cdir, flags, adup)
-     char_u	*str;
-     int		len;
-     int		icase;
-@@ -2120,7 +2138,7 @@
-     char_u	**cptext;   /* extra text for popup menu or NULL */
-     int		cdir;
-     int		flags;
--    int		dup;	    /* accept duplicate match */
-+    int		adup;	    /* accept duplicate match */
- {
-     compl_T	*match;
-     int		dir = (cdir == 0 ? compl_direction : cdir);
-@@ -2134,13 +2152,13 @@
-     /*
-      * If the same match is already present, don't add it.
-      */
--    if (compl_first_match != NULL && !dup)
-+    if (compl_first_match != NULL && !adup)
-     {
- 	match = compl_first_match;
- 	do
- 	{
- 	    if (    !(match->cp_flags & ORIGINAL_TEXT)
--		    && ins_compl_equal(match, str, len)
-+		    && STRNCMP(match->cp_str, str, len) == 0
- 		    && match->cp_str[len] == NUL)
- 		return NOTDONE;
- 	    match = match->cp_next;
-@@ -2399,7 +2417,7 @@
-     /* compl_pattern doesn't need to be set */
-     compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
-     if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
--			-1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
-+			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
- 	return;
- 
-     /* Handle like dictionary completion. */
-@@ -2409,6 +2427,7 @@
-     compl_matches = ins_compl_make_cyclic();
-     compl_started = TRUE;
-     compl_used_match = TRUE;
-+    compl_cont_status = 0;
- 
-     compl_curr_match = compl_first_match;
-     ins_complete(Ctrl_N);
-@@ -2753,6 +2772,7 @@
- 	}
- 	else
- # endif
-+	    if (count > 0)	/* avoid warning for using "files" uninit */
- 	{
- 	    ins_compl_files(count, files, thesaurus, flags,
- 							&regmatch, buf, &dir);
-@@ -2813,7 +2833,7 @@
- 			ptr = find_word_end(ptr);
- 		    add_r = ins_compl_add_infercase(regmatch->startp[0],
- 					  (int)(ptr - regmatch->startp[0]),
--						     FALSE, files[i], *dir, 0);
-+						     p_ic, files[i], *dir, 0);
- 		    if (thesaurus)
- 		    {
- 			char_u *wstart;
-@@ -2849,7 +2869,7 @@
- 				ptr = find_word_end(ptr);
- 			    add_r = ins_compl_add_infercase(wstart,
- 				    (int)(ptr - wstart),
--				    FALSE, files[i], *dir, 0);
-+				    p_ic, files[i], *dir, 0);
- 			}
- 		    }
- 		    if (add_r == OK)
-@@ -3015,9 +3035,6 @@
-     if ((int)(p - line) - (int)compl_col <= 0)
- 	return K_BS;
- 
--    /* For redo we need to repeat this backspace. */
--    AppendCharToRedobuff(K_BS);
--
-     /* Deleted more than what was used to find matches or didn't finish
-      * finding all matches: need to look for matches all over again. */
-     if (curwin->w_cursor.col <= compl_col + compl_length
-@@ -3046,7 +3063,6 @@
-     ins_compl_delete();
-     ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
-     compl_used_match = FALSE;
--    compl_enter_selects = FALSE;
- 
-     if (compl_started)
- 	ins_compl_set_original_text(compl_leader);
-@@ -3076,6 +3092,7 @@
- 	compl_restarting = FALSE;
-     }
- 
-+#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
-     if (!compl_used_match)
-     {
- 	/* Go to the original text, since none of the matches is inserted. */
-@@ -3087,9 +3104,15 @@
- 	compl_curr_match = compl_shown_match;
- 	compl_shows_dir = compl_direction;
-     }
-+#endif
-+    compl_enter_selects = !compl_used_match;
- 
-     /* Show the popup menu with a different set of matches. */
-     ins_compl_show_pum();
-+
-+    /* Don't let Enter select the original text when there is no popup menu. */
-+    if (compl_match_array == NULL)
-+	compl_enter_selects = FALSE;
- }
- 
- /*
-@@ -3115,10 +3138,6 @@
- #endif
- 	ins_char(c);
- 
--    /* For redo we need to count this character so that the number of
--     * backspaces is correct. */
--    AppendCharToRedobuff(c);
--
-     /* If we didn't complete finding matches we must search again. */
-     if (compl_was_interrupted)
- 	ins_compl_restart();
-@@ -3175,10 +3194,33 @@
-     char_u	*p;
-     int		len = curwin->w_cursor.col - compl_col;
-     int		c;
-+    compl_T	*cp;
- 
-     p = compl_shown_match->cp_str;
-     if ((int)STRLEN(p) <= len)   /* the match is too short */
--	return;
-+    {
-+	/* When still at the original match use the first entry that matches
-+	 * the leader. */
-+	if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
-+	{
-+	    p = NULL;
-+	    for (cp = compl_shown_match->cp_next; cp != NULL
-+				 && cp != compl_first_match; cp = cp->cp_next)
-+	    {
-+		if (compl_leader == NULL
-+			|| ins_compl_equal(cp, compl_leader,
-+						   (int)STRLEN(compl_leader)))
-+		{
-+		    p = cp->cp_str;
-+		    break;
-+		}
-+	    }
-+	    if (p == NULL || (int)STRLEN(p) <= len)
-+		return;
-+	}
-+	else
-+	    return;
-+    }
-     p += len;
- #ifdef FEAT_MBYTE
-     c = mb_ptr2char(p);
-@@ -3198,7 +3240,6 @@
-     int	    c;
- {
-     char_u	*ptr;
--    int		temp;
-     int		want_cindent;
-     int		retval = FALSE;
- 
-@@ -3354,6 +3395,7 @@
- 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
- 	    {
- 		char_u	*p;
-+		int	temp = 0;
- 
- 		/*
- 		 * If any of the original typed text has been changed, eg when
-@@ -3369,16 +3411,21 @@
- 		    ptr = compl_leader;
- 		else
- 		    ptr = compl_orig_text;
--		p = compl_orig_text;
--		for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
--		    ;
-+		if (compl_orig_text != NULL)
-+		{
-+		    p = compl_orig_text;
-+		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
-+								       ++temp)
-+			;
- #ifdef FEAT_MBYTE
--		if (temp > 0)
--		    temp -= (*mb_head_off)(compl_orig_text, p + temp);
-+		    if (temp > 0)
-+			temp -= (*mb_head_off)(compl_orig_text, p + temp);
- #endif
--		for (p += temp; *p != NUL; mb_ptr_adv(p))
--		    AppendCharToRedobuff(K_BS);
--		AppendToRedobuffLit(ptr + temp, -1);
-+		    for (p += temp; *p != NUL; mb_ptr_adv(p))
-+			AppendCharToRedobuff(K_BS);
-+		}
-+		if (ptr != NULL)
-+		    AppendToRedobuffLit(ptr + temp, -1);
- 	    }
- 
- #ifdef FEAT_CINDENT
-@@ -3578,7 +3625,7 @@
- {
-     char_u	*word;
-     int		icase = FALSE;
--    int		dup = FALSE;
-+    int		adup = FALSE;
-     char_u	*(cptext[CPT_COUNT]);
- 
-     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
-@@ -3595,7 +3642,7 @@
- 	if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
- 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
- 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
--	    dup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
-+	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
-     }
-     else
-     {
-@@ -3604,7 +3651,7 @@
-     }
-     if (word == NULL || *word == NUL)
- 	return FAIL;
--    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, dup);
-+    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
- }
- #endif
- 
-@@ -3796,7 +3843,7 @@
- 		    TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0),
- 		    TAG_MANY, curbuf->b_ffname) == OK && num_matches > 0)
- 	    {
--		ins_compl_add_matches(num_matches, matches, FALSE);
-+		ins_compl_add_matches(num_matches, matches, p_ic);
- 	    }
- 	    p_ic = save_p_ic;
- 	    break;
-@@ -3837,7 +3884,7 @@
- 	    num_matches = expand_spelling(first_match_pos.lnum,
- 				 first_match_pos.col, compl_pattern, &matches);
- 	    if (num_matches > 0)
--		ins_compl_add_matches(num_matches, matches, FALSE);
-+		ins_compl_add_matches(num_matches, matches, p_ic);
- #endif
- 	    break;
- 
-@@ -3971,7 +4018,7 @@
- 			    continue;
- 		    }
- 		}
--		if (ins_compl_add_infercase(ptr, len, FALSE,
-+		if (ins_compl_add_infercase(ptr, len, p_ic,
- 				 ins_buf == curbuf ? NULL : ins_buf->b_sfname,
- 					   0, flags) != NOTDONE)
- 		{
-@@ -3996,7 +4043,7 @@
- 	    if (got_int)
- 		break;
- 	    /* Fill the popup menu as soon as possible. */
--	    if (pum_wanted() && type != -1)
-+	    if (type != -1)
- 		ins_compl_check_keys(0);
- 
- 	    if ((ctrl_x_mode != 0 && ctrl_x_mode != CTRL_X_WHOLE_LINE)
-@@ -4100,6 +4147,21 @@
- 		&& compl_shown_match->cp_next != NULL
- 		&& compl_shown_match->cp_next != compl_first_match)
- 	    compl_shown_match = compl_shown_match->cp_next;
-+
-+	/* If we didn't find it searching forward, and compl_shows_dir is
-+	 * backward, find the last match. */
-+	if (compl_shows_dir == BACKWARD
-+		&& !ins_compl_equal(compl_shown_match,
-+				      compl_leader, (int)STRLEN(compl_leader))
-+		&& (compl_shown_match->cp_next == NULL
-+		    || compl_shown_match->cp_next == compl_first_match))
-+	{
-+	    while (!ins_compl_equal(compl_shown_match,
-+				      compl_leader, (int)STRLEN(compl_leader))
-+		    && compl_shown_match->cp_prev != NULL
-+		    && compl_shown_match->cp_prev != compl_first_match)
-+		compl_shown_match = compl_shown_match->cp_prev;
-+	}
-     }
- 
-     if (allow_get_expansion && insert_match
-@@ -4124,8 +4186,6 @@
-     {
- 	if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
- 	{
--	    if (compl_pending != 0)
--		--compl_pending;
- 	    compl_shown_match = compl_shown_match->cp_next;
- 	    found_end = (compl_first_match != NULL
- 			   && (compl_shown_match->cp_next == compl_first_match
-@@ -4134,14 +4194,24 @@
- 	else if (compl_shows_dir == BACKWARD
- 					&& compl_shown_match->cp_prev != NULL)
- 	{
--	    if (compl_pending != 0)
--		++compl_pending;
- 	    found_end = (compl_shown_match == compl_first_match);
- 	    compl_shown_match = compl_shown_match->cp_prev;
- 	    found_end |= (compl_shown_match == compl_first_match);
- 	}
- 	else
- 	{
-+	    if (!allow_get_expansion)
-+	    {
-+		if (advance)
-+		{
-+		    if (compl_shows_dir == BACKWARD)
-+			compl_pending -= todo + 1;
-+		    else
-+			compl_pending += todo + 1;
-+		}
-+		return -1;
-+	    }
-+
- 	    if (advance)
- 	    {
- 		if (compl_shows_dir == BACKWARD)
-@@ -4149,14 +4219,27 @@
- 		else
- 		    ++compl_pending;
- 	    }
--	    if (!allow_get_expansion)
--		return -1;
- 
- 	    /* Find matches. */
- 	    num_matches = ins_compl_get_exp(&compl_startpos);
--	    if (compl_pending != 0 && compl_direction == compl_shows_dir
-+
-+	    /* handle any pending completions */
-+	    while (compl_pending != 0 && compl_direction == compl_shows_dir
- 								   && advance)
--		compl_shown_match = compl_curr_match;
-+	    {
-+		if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
-+		{
-+		    compl_shown_match = compl_shown_match->cp_next;
-+		    --compl_pending;
-+		}
-+		if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
-+		{
-+		    compl_shown_match = compl_shown_match->cp_prev;
-+		    ++compl_pending;
-+		}
-+		else
-+		    break;
-+	    }
- 	    found_end = FALSE;
- 	}
- 	if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
-@@ -4265,9 +4348,9 @@
- 	return;
-     count = 0;
- 
--    ++no_mapping;
-+    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
-+     * can't do its work correctly. */
-     c = vpeekc_any();
--    --no_mapping;
-     if (c != NUL)
-     {
- 	if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
-@@ -4277,12 +4360,27 @@
- 	    (void)ins_compl_next(FALSE, ins_compl_key2count(c),
- 						    c != K_UP && c != K_DOWN);
- 	}
--	else if (c != Ctrl_R)
--	    compl_interrupted = TRUE;
-+	else
-+	{
-+	    /* Need to get the character to have KeyTyped set.  We'll put it
-+	     * back with vungetc() below. */
-+	    c = safe_vgetc();
-+
-+	    /* Don't interrupt completion when the character wasn't typed,
-+	     * e.g., when doing @q to replay keys. */
-+	    if (c != Ctrl_R && KeyTyped)
-+		compl_interrupted = TRUE;
-+
-+	    vungetc(c);
-+	}
-     }
-     if (compl_pending != 0 && !got_int)
--	(void)ins_compl_next(FALSE, compl_pending > 0
--				      ? compl_pending : -compl_pending, TRUE);
-+    {
-+	int todo = compl_pending > 0 ? compl_pending : -compl_pending;
-+
-+	compl_pending = 0;
-+	(void)ins_compl_next(FALSE, todo, TRUE);
-+    }
- }
- 
- /*
-@@ -4611,10 +4709,12 @@
- 				     (int)STRLEN(compl_pattern), curs_col);
- 	    if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
- 		    || compl_xp.xp_context == EXPAND_NOTHING)
--		return FAIL;
--	    startcol = (int)(compl_xp.xp_pattern - compl_pattern);
--	    compl_col = startcol;
--	    compl_length = curs_col - startcol;
-+		/* No completion possible, use an empty pattern to get a
-+		 * "pattern not found" message. */
-+		compl_col = curs_col;
-+	    else
-+		compl_col = (int)(compl_xp.xp_pattern - compl_pattern);
-+	    compl_length = curs_col - compl_col;
- 	}
- 	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
- 	{
-@@ -4668,11 +4768,17 @@
- 	    else
- 		compl_col = spell_word_start(startcol);
- 	    if (compl_col >= (colnr_T)startcol)
--		return FAIL;
--	    spell_expand_check_cap(compl_col);
-+	    {
-+		compl_length = 0;
-+		compl_col = curs_col;
-+	    }
-+	    else
-+	    {
-+		spell_expand_check_cap(compl_col);
-+		compl_length = (int)curs_col - compl_col;
-+	    }
- 	    /* Need to obtain "line" again, it may have become invalid. */
- 	    line = ml_get(curwin->w_cursor.lnum);
--	    compl_length = (int)curs_col - compl_col;
- 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
- 	    if (compl_pattern == NULL)
- #endif
-@@ -4720,7 +4826,7 @@
- 	vim_free(compl_orig_text);
- 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
- 	if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
--			-1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
-+			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
- 	{
- 	    vim_free(compl_pattern);
- 	    compl_pattern = NULL;
-@@ -5227,8 +5333,16 @@
- 	/* Format with 'formatexpr' when it's set.  Use internal formatting
- 	 * when 'formatexpr' isn't set or it returns non-zero. */
- #if defined(FEAT_EVAL)
--	if (*curbuf->b_p_fex == NUL
--			     || fex_format(curwin->w_cursor.lnum, 1L, c) != 0)
-+	int do_internal = TRUE;
-+
-+	if (*curbuf->b_p_fex != NUL)
-+	{
-+	    do_internal = (fex_format(curwin->w_cursor.lnum, 1L, c) != 0);
-+	    /* It may be required to save for undo again, e.g. when setline()
-+	     * was called. */
-+	    ins_need_undo = TRUE;
-+	}
-+	if (do_internal)
- #endif
- 	    internal_format(textwidth, second_indent, flags, c == NUL);
-     }
-@@ -8508,7 +8622,12 @@
-     tpos = curwin->w_cursor;
-     if (oneleft() == OK)
-     {
--	start_arrow(&tpos);
-+#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
-+	/* Only call start_arrow() when not busy with preediting, it will
-+	 * break undo.  K_LEFT is inserted in im_correct_cursor(). */
-+	if (!im_is_preediting())
-+#endif
-+	    start_arrow(&tpos);
- #ifdef FEAT_RIGHTLEFT
- 	/* If exit reversed string, position is fixed */
- 	if (revins_scol != -1 && (int)curwin->w_cursor.col >= revins_scol)
-diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
---- vim70.orig/src/eval.c	2006-05-05 10:15:26.000000000 -0700
-+++ vim70/src/eval.c	2006-10-13 01:03:10.000000000 -0700
-@@ -454,7 +454,7 @@
- static char_u *deref_func_name __ARGS((char_u *name, int *lenp));
- static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
- static int call_func __ARGS((char_u *name, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
--static void emsg_funcname __ARGS((char *msg, char_u *name));
-+static void emsg_funcname __ARGS((char *ermsg, char_u *name));
- 
- static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -622,6 +622,7 @@
- static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_sort __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_soundfold __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -701,6 +702,7 @@
- static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string));
- static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
- static int var_check_ro __ARGS((int flags, char_u *name));
-+static int var_check_fixed __ARGS((int flags, char_u *name));
- static int tv_check_lock __ARGS((int lock, char_u *name));
- static void copy_tv __ARGS((typval_T *from, typval_T *to));
- static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
-@@ -2260,7 +2262,7 @@
- 	    EMSG(_(e_letunexp));
- 	else
- 	{
--	    char_u	*tofree = NULL;
-+	    char_u	*ptofree = NULL;
- 	    char_u	*s;
- 
- 	    p = get_tv_string_chk(tv);
-@@ -2269,7 +2271,7 @@
- 		s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE);
- 		if (s != NULL)
- 		{
--		    p = tofree = concat_str(s, p);
-+		    p = ptofree = concat_str(s, p);
- 		    vim_free(s);
- 		}
- 	    }
-@@ -2278,7 +2280,7 @@
- 		write_reg_contents(*arg == '@' ? '"' : *arg, p, -1, FALSE);
- 		arg_end = arg + 1;
- 	    }
--	    vim_free(tofree);
-+	    vim_free(ptofree);
- 	}
-     }
- 
-@@ -3364,6 +3366,8 @@
- 	hi = hash_find(ht, varname);
- 	if (!HASHITEM_EMPTY(hi))
- 	{
-+	    if (var_check_fixed(HI2DI(hi)->di_flags, name))
-+		return FAIL;
- 	    if (var_check_ro(HI2DI(hi)->di_flags, name))
- 		return FAIL;
- 	    delete_var(ht, hi);
-@@ -6059,6 +6063,10 @@
-     tabpage_T	*tp;
- #endif
- 
-+    /* Only do this once. */
-+    want_garbage_collect = FALSE;
-+    may_garbage_collect = FALSE;
-+
-     /*
-      * 1. Go through all accessible variables and mark all lists and dicts
-      *    with copyID.
-@@ -7139,6 +7147,7 @@
-     {"setreg",		2, 3, f_setreg},
-     {"settabwinvar",	4, 4, f_settabwinvar},
-     {"setwinvar",	3, 3, f_setwinvar},
-+    {"shellescape",	1, 1, f_shellescape},
-     {"simplify",	1, 1, f_simplify},
-     {"sort",		1, 2, f_sort},
-     {"soundfold",	1, 1, f_soundfold},
-@@ -7595,8 +7604,8 @@
-  * Give an error message with a function name.  Handle <SNR> things.
-  */
-     static void
--emsg_funcname(msg, name)
--    char	*msg;
-+emsg_funcname(ermsg, name)
-+    char	*ermsg;
-     char_u	*name;
- {
-     char_u	*p;
-@@ -7605,7 +7614,7 @@
- 	p = concat_str((char_u *)"<SNR>", name + 3);
-     else
- 	p = name;
--    EMSG2(_(msg), p);
-+    EMSG2(_(ermsg), p);
-     if (p != name)
- 	vim_free(p);
- }
-@@ -8252,6 +8261,12 @@
- 	EMSG(_("E785: complete() can only be used in Insert mode"));
- 	return;
-     }
-+
-+    /* Check for undo allowed here, because if something was already inserted
-+     * the line was already saved for undo and this check isn't done. */
-+    if (!undo_allowed())
-+	return;
-+
-     if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
-     {
- 	EMSG(_(e_invarg));
-@@ -9173,25 +9188,25 @@
-     typval_T	save_key;
-     int		rem;
-     int		todo;
--    char_u	*msg = map ? (char_u *)"map()" : (char_u *)"filter()";
-+    char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
-     int		save_did_emsg;
- 
-     rettv->vval.v_number = 0;
-     if (argvars[0].v_type == VAR_LIST)
-     {
- 	if ((l = argvars[0].vval.v_list) == NULL
--		|| (map && tv_check_lock(l->lv_lock, msg)))
-+		|| (map && tv_check_lock(l->lv_lock, ermsg)))
- 	    return;
-     }
-     else if (argvars[0].v_type == VAR_DICT)
-     {
- 	if ((d = argvars[0].vval.v_dict) == NULL
--		|| (map && tv_check_lock(d->dv_lock, msg)))
-+		|| (map && tv_check_lock(d->dv_lock, ermsg)))
- 	    return;
-     }
-     else
-     {
--	EMSG2(_(e_listdictarg), msg);
-+	EMSG2(_(e_listdictarg), ermsg);
- 	return;
-     }
- 
-@@ -9223,7 +9238,7 @@
- 		{
- 		    --todo;
- 		    di = HI2DI(hi);
--		    if (tv_check_lock(di->di_tv.v_lock, msg))
-+		    if (tv_check_lock(di->di_tv.v_lock, ermsg))
- 			break;
- 		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
- 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
-@@ -9242,7 +9257,7 @@
- 	{
- 	    for (li = l->lv_first; li != NULL; li = nli)
- 	    {
--		if (tv_check_lock(li->li_tv.v_lock, msg))
-+		if (tv_check_lock(li->li_tv.v_lock, ermsg))
- 		    break;
- 		nli = li->li_next;
- 		if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL
-@@ -9598,7 +9613,9 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
--    garbage_collect();
-+    /* This is postponed until we are back at the toplevel, because we may be
-+     * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
-+    want_garbage_collect = TRUE;
- }
- 
- /*
-@@ -9792,6 +9809,9 @@
-     varnumber_T		n;
-     int			error = FALSE;
- 
-+    /* Position the cursor.  Needed after a message that ends in a space. */
-+    windgoto(msg_row, msg_col);
-+
-     ++no_mapping;
-     ++allow_keys;
-     if (argvars[0].v_type == VAR_UNKNOWN)
-@@ -10412,20 +10432,14 @@
- 
-     if (win != NULL && varname != NULL)
-     {
--	if (*varname == '&')	/* window-local-option */
--	{
--	    /* Set curwin to be our win, temporarily.  Also set curbuf, so
--	     * that we can get buffer-local options. */
--	    oldcurwin = curwin;
--	    curwin = win;
--	    curbuf = win->w_buffer;
-+	/* Set curwin to be our win, temporarily.  Also set curbuf, so
-+	 * that we can get buffer-local options. */
-+	oldcurwin = curwin;
-+	curwin = win;
-+	curbuf = win->w_buffer;
- 
-+	if (*varname == '&')	/* window-local-option */
- 	    get_option_tv(&varname, rettv, 1);
--
--	    /* restore previous notion of curwin */
--	    curwin = oldcurwin;
--	    curbuf = curwin->w_buffer;
--	}
- 	else
- 	{
- 	    if (*varname == NUL)
-@@ -10438,6 +10452,10 @@
- 	    if (v != NULL)
- 		copy_tv(&v->di_tv, rettv);
- 	}
-+
-+	/* restore previous notion of curwin */
-+	curwin = oldcurwin;
-+	curbuf = curwin->w_buffer;
-     }
- 
-     --emsg_off;
-@@ -11312,14 +11330,19 @@
- 
- static int inputsecret_flag = 0;
- 
-+static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog));
-+
- /*
-- * "input()" function
-- *     Also handles inputsecret() when inputsecret is set.
-+ * This function is used by f_input() and f_inputdialog() functions. The third
-+ * argument to f_input() specifies the type of completion to use at the
-+ * prompt. The third argument to f_inputdialog() specifies the value to return
-+ * when the user cancels the prompt.
-  */
-     static void
--f_input(argvars, rettv)
-+get_user_input(argvars, rettv, inputdialog)
-     typval_T	*argvars;
-     typval_T	*rettv;
-+    int		inputdialog;
- {
-     char_u	*prompt = get_tv_string_chk(&argvars[0]);
-     char_u	*p = NULL;
-@@ -11369,10 +11392,10 @@
- 	    if (defstr != NULL)
- 		stuffReadbuffSpec(defstr);
- 
--	    if (argvars[2].v_type != VAR_UNKNOWN)
-+	    if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN)
- 	    {
- 		char_u	*xp_name;
--		int		xp_namelen;
-+		int	xp_namelen;
- 		long	argt;
- 
- 		rettv->vval.v_string = NULL;
-@@ -11404,6 +11427,18 @@
- }
- 
- /*
-+ * "input()" function
-+ *     Also handles inputsecret() when inputsecret is set.
-+ */
-+    static void
-+f_input(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    get_user_input(argvars, rettv, FALSE);
-+}
-+
-+/*
-  * "inputdialog()" function
-  */
-     static void
-@@ -11443,7 +11478,7 @@
-     }
-     else
- #endif
--	f_input(argvars, rettv);
-+	get_user_input(argvars, rettv, TRUE);
- }
- 
- /*
-@@ -11471,6 +11506,7 @@
-     }
- 
-     msg_start();
-+    msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
-     lines_left = Rows;	/* avoid more prompt */
-     msg_scroll = TRUE;
-     msg_clr_eos();
-@@ -13250,7 +13286,7 @@
- 	if (argvars[2].v_type != VAR_UNKNOWN)
- 	    EMSG2(_(e_toomanyarg), "remove()");
- 	else if ((d = argvars[0].vval.v_dict) != NULL
--		&& !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
-+		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
- 	{
- 	    key = get_tv_string_chk(&argvars[1]);
- 	    if (key != NULL)
-@@ -13270,7 +13306,7 @@
-     else if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listdictarg), "remove()");
-     else if ((l = argvars[0].vval.v_list) != NULL
--	    && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
-+	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
-     {
- 	int	    error = FALSE;
- 
-@@ -14157,11 +14193,7 @@
-     typval_T	*rettv;
- {
-     buf_T	*buf;
--#ifdef FEAT_AUTOCMD
-     aco_save_T	aco;
--#else
--    buf_T	*save_curbuf;
--#endif
-     char_u	*varname, *bufvarname;
-     typval_T	*varp;
-     char_u	nbuf[NUMBUFLEN];
-@@ -14178,12 +14210,7 @@
-     if (buf != NULL && varname != NULL && varp != NULL)
-     {
- 	/* set curbuf to be our buf, temporarily */
--#ifdef FEAT_AUTOCMD
- 	aucmd_prepbuf(&aco, buf);
--#else
--	save_curbuf = curbuf;
--	curbuf = buf;
--#endif
- 
- 	if (*varname == '&')
- 	{
-@@ -14210,11 +14237,7 @@
- 	}
- 
- 	/* reset notion of buffer */
--#ifdef FEAT_AUTOCMD
- 	aucmd_restbuf(&aco);
--#else
--	curbuf = save_curbuf;
--#endif
-     }
- }
- 
-@@ -14582,6 +14605,18 @@
- }
- 
- /*
-+ * "shellescape({string})" function
-+ */
-+    static void
-+f_shellescape(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_string = vim_strsave_shellescape(get_tv_string(&argvars[0]));
-+    rettv->v_type = VAR_STRING;
-+}
-+
-+/*
-  * "simplify()" function
-  */
-     static void
-@@ -16173,7 +16208,7 @@
- 	curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
- 	curwin->w_set_curswant = FALSE;
- 
--	curwin->w_topline = get_dict_number(dict, (char_u *)"topline");
-+	set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
- #ifdef FEAT_DIFF
- 	curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
- #endif
-@@ -16218,6 +16253,7 @@
- #ifdef FEAT_VIRTUALEDIT
-     dict_add_nr_str(dict, "coladd", (long)curwin->w_cursor.coladd, NULL);
- #endif
-+    update_curswant();
-     dict_add_nr_str(dict, "curswant", (long)curwin->w_curswant, NULL);
- 
-     dict_add_nr_str(dict, "topline", (long)curwin->w_topline, NULL);
-@@ -16438,9 +16474,12 @@
-     long	i = 0;
-     long	n;
- 
--    /* List must be: [fnum, lnum, col, coladd] */
--    if (arg->v_type != VAR_LIST || l == NULL
--				      || l->lv_len != (fnump == NULL ? 3 : 4))
-+    /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
-+     * when "fnump" isn't NULL and "coladd" is optional. */
-+    if (arg->v_type != VAR_LIST
-+	    || l == NULL
-+	    || l->lv_len < (fnump == NULL ? 2 : 3)
-+	    || l->lv_len > (fnump == NULL ? 3 : 4))
- 	return FAIL;
- 
-     if (fnump != NULL)
-@@ -16466,8 +16505,9 @@
- #ifdef FEAT_VIRTUALEDIT
-     n = list_find_nr(l, i, NULL);
-     if (n < 0)
--	return FAIL;
--    posp->coladd = n;
-+	posp->coladd = 0;
-+    else
-+	posp->coladd = n;
- #endif
- 
-     return OK;
-@@ -17759,6 +17799,13 @@
-     }
-     else		    /* add a new variable */
-     {
-+	/* Can't add "v:" variable. */
-+	if (ht == &vimvarht)
-+	{
-+	    EMSG2(_(e_illvar), name);
-+	    return;
-+	}
-+
- 	/* Make sure the variable name is valid. */
- 	for (p = varname; *p != NUL; ++p)
- 	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
-@@ -17792,7 +17839,7 @@
- }
- 
- /*
-- * Return TRUE if di_flags "flags" indicate read-only variable "name".
-+ * Return TRUE if di_flags "flags" indicates variable "name" is read-only.
-  * Also give an error message.
-  */
-     static int
-@@ -17814,6 +17861,23 @@
- }
- 
- /*
-+ * Return TRUE if di_flags "flags" indicates variable "name" is fixed.
-+ * Also give an error message.
-+ */
-+    static int
-+var_check_fixed(flags, name)
-+    int		flags;
-+    char_u	*name;
-+{
-+    if (flags & DI_FLAGS_FIX)
-+    {
-+	EMSG2(_("E795: Cannot delete variable %s"), name);
-+	return TRUE;
-+    }
-+    return FALSE;
-+}
-+
-+/*
-  * Return TRUE if typeval "tv" is set to be locked (immutable).
-  * Also give an error message, using "name".
-  */
-@@ -18786,6 +18850,7 @@
- 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
- 		{
- 		    vim_free(fudi.fd_di);
-+		    vim_free(fp);
- 		    goto erret;
- 		}
- 	    }
-@@ -18963,7 +19028,8 @@
-     else if (lead > 0)
-     {
- 	lead = 3;
--	if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
-+	if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
-+						       || eval_fname_sid(*pp))
- 	{
- 	    /* It's "s:" or "<SID>" */
- 	    if (current_SID <= 0)
-@@ -19685,6 +19751,7 @@
-     v->di_tv.vval.v_list = &fc.l_varlist;
-     vim_memset(&fc.l_varlist, 0, sizeof(list_T));
-     fc.l_varlist.lv_refcount = 99999;
-+    fc.l_varlist.lv_lock = VAR_FIXED;
- 
-     /*
-      * Set a:firstline to "firstline" and a:lastline to "lastline".
-@@ -19761,7 +19828,7 @@
- 	    if (p_verbose >= 14)
- 	    {
- 		char_u	buf[MSG_BUF_LEN];
--		char_u	numbuf[NUMBUFLEN];
-+		char_u	numbuf2[NUMBUFLEN];
- 		char_u	*tofree;
- 
- 		msg_puts((char_u *)"(");
-@@ -19773,8 +19840,8 @@
- 			msg_outnum((long)argvars[i].vval.v_number);
- 		    else
- 		    {
--			trunc_string(tv2string(&argvars[i], &tofree, numbuf, 0),
--							    buf, MSG_BUF_CLEN);
-+			trunc_string(tv2string(&argvars[i], &tofree,
-+					      numbuf2, 0), buf, MSG_BUF_CLEN);
- 			msg_puts(buf);
- 			vim_free(tofree);
- 		    }
-@@ -19852,13 +19919,13 @@
- 	else
- 	{
- 	    char_u	buf[MSG_BUF_LEN];
--	    char_u	numbuf[NUMBUFLEN];
-+	    char_u	numbuf2[NUMBUFLEN];
- 	    char_u	*tofree;
- 
- 	    /* The value may be very long.  Skip the middle part, so that we
- 	     * have some idea how it starts and ends. smsg() would always
- 	     * truncate it at the end. */
--	    trunc_string(tv2string(fc.rettv, &tofree, numbuf, 0),
-+	    trunc_string(tv2string(fc.rettv, &tofree, numbuf2, 0),
- 							   buf, MSG_BUF_CLEN);
- 	    smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
- 	    vim_free(tofree);
-diff -Naur vim70.orig/src/ex_cmds2.c vim70/src/ex_cmds2.c
---- vim70.orig/src/ex_cmds2.c	2006-04-17 03:19:07.000000000 -0700
-+++ vim70/src/ex_cmds2.c	2006-10-13 01:02:52.000000000 -0700
-@@ -3648,13 +3648,13 @@
-  * Return FALSE when not sourcing a file.
-  */
-     int
--source_finished(getline, cookie)
--    char_u	*(*getline) __ARGS((int, void *, int));
-+source_finished(fgetline, cookie)
-+    char_u	*(*fgetline) __ARGS((int, void *, int));
-     void	*cookie;
- {
--    return (getline_equal(getline, cookie, getsourceline)
-+    return (getline_equal(fgetline, cookie, getsourceline)
- 	    && ((struct source_cookie *)getline_cookie(
--						 getline, cookie))->finished);
-+						fgetline, cookie))->finished);
- }
- #endif
- 
-diff -Naur vim70.orig/src/ex_cmds.c vim70/src/ex_cmds.c
---- vim70.orig/src/ex_cmds.c	2006-04-22 11:56:56.000000000 -0700
-+++ vim70/src/ex_cmds.c	2006-10-13 01:02:58.000000000 -0700
-@@ -95,7 +95,10 @@
- 		_("<%s>%s%s  %d,  Hex %02x,  Octal %03o"),
- 					   transchar(c), buf1, buf2, c, c, c);
- #ifdef FEAT_MBYTE
--	c = cc[ci++];
-+	if (enc_utf8)
-+	    c = cc[ci++];
-+	else
-+	    c = 0;
- #endif
-     }
- 
-@@ -108,7 +111,7 @@
- 	if (len > 0)
- 	    IObuff[len++] = ' ';
- 	IObuff[len++] = '<';
--	if (utf_iscomposing(c)
-+	if (enc_utf8 && utf_iscomposing(c)
- # ifdef USE_GUI
- 		&& !gui.in_use
- # endif
-@@ -120,7 +123,10 @@
- 				    : _("> %d, Hex %08x, Octal %o"), c, c, c);
- 	if (ci == MAX_MCO)
- 	    break;
--	c = cc[ci++];
-+	if (enc_utf8)
-+	    c = cc[ci++];
-+	else
-+	    c = 0;
-     }
- #endif
- 
-@@ -185,6 +191,7 @@
- 	    new_indent = indent;
- 	else
- 	{
-+	    has_tab = FALSE;	/* avoid uninit warnings */
- 	    len = linelen(eap->cmdidx == CMD_right ? &has_tab
- 						   : NULL) - get_indent();
- 
-@@ -1772,10 +1779,9 @@
- 				? (st_old.st_mode & 0020)
- 				: (st_old.st_mode & 0002))))
- 	{
--	    int	tt;
-+	    int	tt = msg_didany;
- 
- 	    /* avoid a wait_return for this message, it's annoying */
--	    tt = msg_didany;
- 	    EMSG2(_("E137: Viminfo file is not writable: %s"), fname);
- 	    msg_didany = tt;
- 	    fclose(fp_in);
-@@ -2458,6 +2464,8 @@
- #ifdef FEAT_AUTOCMD
- 	apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
- #endif
-+	/* Change directories when the 'acd' option is set. */
-+	DO_AUTOCHDIR
-     }
-     /* print full file name if :cd used */
-     fileinfo(FALSE, FALSE, eap->forceit);
-@@ -2675,8 +2683,13 @@
- 				 eap, eap->append, eap->forceit, TRUE, FALSE);
- 
- 	/* After ":saveas fname" reset 'readonly'. */
--	if (eap->cmdidx == CMD_saveas && retval == OK)
--	    curbuf->b_p_ro = FALSE;
-+	if (eap->cmdidx == CMD_saveas)
-+	{
-+	    if (retval == OK)
-+		curbuf->b_p_ro = FALSE;
-+	    /* Change directories when the 'acd' option is set. */
-+	    DO_AUTOCHDIR
-+	}
-     }
- 
- theend:
-@@ -3547,11 +3560,9 @@
- 	foldUpdateAll(curwin);
- #endif
- 
--#ifdef FEAT_AUTOCHDIR
--	if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	    shorten_fnames(TRUE);
--#endif
-+	/* Change directories when the 'acd' option is set. */
-+	DO_AUTOCHDIR
-+
- 	/*
- 	 * Careful: open_buffer() and apply_autocmds() may change the current
- 	 * buffer and window.
-@@ -3718,12 +3729,8 @@
-     if (p_im)
- 	need_start_insertmode = TRUE;
- 
--#ifdef FEAT_AUTOCHDIR
--    /* Change directories when the acd option is set on. */
--    if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	shorten_fnames(TRUE);
--#endif
-+    /* Change directories when the 'acd' option is set. */
-+    DO_AUTOCHDIR
- 
- #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
-     if (gui.in_use && curbuf->b_ffname != NULL)
-diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h
---- vim70.orig/src/ex_cmds.h	2006-04-07 02:44:46.000000000 -0700
-+++ vim70/src/ex_cmds.h	2006-10-13 01:02:46.000000000 -0700
-@@ -262,7 +262,7 @@
- EX(CMD_comclear,	"comclear",	ex_comclear,
- 			TRLBAR|CMDWIN),
- EX(CMD_compiler,	"compiler",	ex_compiler,
--			BANG|TRLBAR|WORD1),
-+			BANG|TRLBAR|WORD1|CMDWIN),
- EX(CMD_continue,	"continue",	ex_continue,
- 			TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
-diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
---- vim70.orig/src/ex_docmd.c	2006-05-05 09:33:19.000000000 -0700
-+++ vim70/src/ex_docmd.c	2006-10-13 01:03:00.000000000 -0700
-@@ -58,9 +58,9 @@
- #endif
- 
- #ifdef FEAT_EVAL
--static char_u	*do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*getline)(int, void *, int), void *cookie));
-+static char_u	*do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie));
- #else
--static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*getline)(int, void *, int), void *cookie));
-+static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
- static int	if_level = 0;		/* depth in :if */
- #endif
- static char_u	*find_command __ARGS((exarg_T *eap, int *full));
-@@ -831,10 +831,13 @@
- 
-     /*
-      * If requested, store and reset the global values controlling the
--     * exception handling (used when debugging).
-+     * exception handling (used when debugging).  Otherwise clear it to avoid
-+     * a bogus compiler warning when the optimizer uses inline functions...
-      */
--    else if (flags & DOCMD_EXCRESET)
-+    if (flags & DOCMD_EXCRESET)
- 	save_dbg_stuff(&debug_saved);
-+    else
-+	memset(&debug_saved, 0, 1);
- 
-     initial_trylevel = trylevel;
- 
-@@ -1574,24 +1577,24 @@
- #endif
- 
- /*
-- * If "getline" is get_loop_line(), return TRUE if the getline it uses equals
-- * "func".  * Otherwise return TRUE when "getline" equals "func".
-+ * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
-+ * "func".  * Otherwise return TRUE when "fgetline" equals "func".
-  */
- /*ARGSUSED*/
-     int
--getline_equal(getline, cookie, func)
--    char_u	*(*getline) __ARGS((int, void *, int));
--    void	*cookie;		/* argument for getline() */
-+getline_equal(fgetline, cookie, func)
-+    char_u	*(*fgetline) __ARGS((int, void *, int));
-+    void	*cookie;		/* argument for fgetline() */
-     char_u	*(*func) __ARGS((int, void *, int));
- {
- #ifdef FEAT_EVAL
-     char_u		*(*gp) __ARGS((int, void *, int));
-     struct loop_cookie *cp;
- 
--    /* When "getline" is "get_loop_line()" use the "cookie" to find the
-+    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
-      * function that's orignally used to obtain the lines.  This may be nested
-      * several levels. */
--    gp = getline;
-+    gp = fgetline;
-     cp = (struct loop_cookie *)cookie;
-     while (gp == get_loop_line)
-     {
-@@ -1600,29 +1603,29 @@
-     }
-     return gp == func;
- #else
--    return getline == func;
-+    return fgetline == func;
- #endif
- }
- 
- #if defined(FEAT_EVAL) || defined(FEAT_MBYTE) || defined(PROTO)
- /*
-- * If "getline" is get_loop_line(), return the cookie used by the original
-+ * If "fgetline" is get_loop_line(), return the cookie used by the original
-  * getline function.  Otherwise return "cookie".
-  */
- /*ARGSUSED*/
-     void *
--getline_cookie(getline, cookie)
--    char_u	*(*getline) __ARGS((int, void *, int));
--    void	*cookie;		/* argument for getline() */
-+getline_cookie(fgetline, cookie)
-+    char_u	*(*fgetline) __ARGS((int, void *, int));
-+    void	*cookie;		/* argument for fgetline() */
- {
- # ifdef FEAT_EVAL
-     char_u		*(*gp) __ARGS((int, void *, int));
-     struct loop_cookie *cp;
- 
--    /* When "getline" is "get_loop_line()" use the "cookie" to find the
-+    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
-      * cookie that's orignally used to obtain the lines.  This may be nested
-      * several levels. */
--    gp = getline;
-+    gp = fgetline;
-     cp = (struct loop_cookie *)cookie;
-     while (gp == get_loop_line)
-     {
-@@ -1648,7 +1651,7 @@
-  * 5. parse arguments
-  * 6. switch on command name
-  *
-- * Note: "getline" can be NULL.
-+ * Note: "fgetline" can be NULL.
-  *
-  * This function may be called recursively!
-  */
-@@ -1663,14 +1666,14 @@
- #ifdef FEAT_EVAL
- 			    cstack,
- #endif
--				    getline, cookie)
-+				    fgetline, cookie)
-     char_u		**cmdlinep;
-     int			sourcing;
- #ifdef FEAT_EVAL
-     struct condstack	*cstack;
- #endif
--    char_u		*(*getline) __ARGS((int, void *, int));
--    void		*cookie;		/* argument for getline() */
-+    char_u		*(*fgetline) __ARGS((int, void *, int));
-+    void		*cookie;		/* argument for fgetline() */
- {
-     char_u		*p;
-     linenr_T		lnum;
-@@ -1698,7 +1701,7 @@
-     if (quitmore
- #ifdef FEAT_EVAL
- 	    /* avoid that a function call in 'statusline' does this */
--	    && !getline_equal(getline, cookie, get_func_line)
-+	    && !getline_equal(fgetline, cookie, get_func_line)
- #endif
- 	    )
- 	--quitmore;
-@@ -1710,6 +1713,10 @@
-     save_cmdmod = cmdmod;
-     vim_memset(&cmdmod, 0, sizeof(cmdmod));
- 
-+    /* "#!anything" is handled like a comment. */
-+    if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
-+	goto doend;
-+
-     /*
-      * Repeat until no more command modifiers are found.
-      */
-@@ -1724,8 +1731,8 @@
- 
- 	/* in ex mode, an empty line works like :+ */
- 	if (*ea.cmd == NUL && exmode_active
--			&& (getline_equal(getline, cookie, getexmodeline)
--			    || getline_equal(getline, cookie, getexline))
-+			&& (getline_equal(fgetline, cookie, getexmodeline)
-+			    || getline_equal(fgetline, cookie, getexline))
- 			&& curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
- 	{
- 	    ea.cmd = (char_u *)"+";
-@@ -1914,9 +1921,9 @@
-     /* Count this line for profiling if ea.skip is FALSE. */
-     if (do_profiling == PROF_YES && !ea.skip)
-     {
--	if (getline_equal(getline, cookie, get_func_line))
--	    func_line_exec(getline_cookie(getline, cookie));
--	else if (getline_equal(getline, cookie, getsourceline))
-+	if (getline_equal(fgetline, cookie, get_func_line))
-+	    func_line_exec(getline_cookie(fgetline, cookie));
-+	else if (getline_equal(fgetline, cookie, getsourceline))
- 	    script_line_exec();
-     }
- #endif
-@@ -2585,7 +2592,7 @@
-  * The "ea" structure holds the arguments that can be used.
-  */
-     ea.cmdlinep = cmdlinep;
--    ea.getline = getline;
-+    ea.getline = fgetline;
-     ea.cookie = cookie;
- #ifdef FEAT_EVAL
-     ea.cstack = cstack;
-@@ -2623,9 +2630,9 @@
- 	do_throw(cstack);
-     else if (check_cstack)
-     {
--	if (source_finished(getline, cookie))
-+	if (source_finished(fgetline, cookie))
- 	    do_finish(&ea, TRUE);
--	else if (getline_equal(getline, cookie, get_func_line)
-+	else if (getline_equal(fgetline, cookie, get_func_line)
- 						   && current_func_returned())
- 	    do_return(&ea, TRUE, FALSE, NULL);
-     }
-@@ -6289,7 +6296,6 @@
-     exarg_T	*eap;
- {
-     tabpage_T	*tp;
--    int		h = tabline_height();
- 
- # ifdef FEAT_CMDWIN
-     if (cmdwin_type != 0)
-@@ -6321,9 +6327,6 @@
- 	       )
- 		tabpage_close(eap->forceit);
- 	}
--
--    if (h != tabline_height())
--	shell_new_rows();
- }
- 
- /*
-@@ -6335,7 +6338,6 @@
- {
-     tabpage_T	*tp;
-     int		done;
--    int		h = tabline_height();
- 
- # ifdef FEAT_CMDWIN
-     if (cmdwin_type != 0)
-@@ -6364,9 +6366,6 @@
- 		    break;
- 	    }
- 	}
--
--    if (h != tabline_height())
--	shell_new_rows();
- }
- 
- /*
-@@ -6390,6 +6389,8 @@
- /*
-  * Close tab page "tp", which is not the current tab page.
-  * Note that autocommands may make "tp" invalid.
-+ * Also takes care of the tab pages line disappearing when closing the
-+ * last-but-one tab page.
-  */
-     void
- tabpage_close_other(tp, forceit)
-@@ -6398,6 +6399,7 @@
- {
-     int		done = 0;
-     win_T	*wp;
-+    int		h = tabline_height();
- 
-     /* Limit to 1000 windows, autocommands may add a window while we close
-      * one.  OK, so I'm paranoid... */
-@@ -6411,7 +6413,10 @@
- 	if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
- 	    break;
-     }
-+
-     redraw_tabline = TRUE;
-+    if (h != tabline_height())
-+	shell_new_rows();
- }
- 
- /*
-@@ -8417,6 +8422,15 @@
- 	else
- 	    EMSG2(_(e_invarg2), eap->arg);
-     }
-+
-+    /* Make sure redirection is not off.  Can happen for cmdline completion
-+     * that indirectly invokes a command to catch its output. */
-+    if (redir_fd != NULL
-+#ifdef FEAT_EVAL
-+			  || redir_reg || redir_vname
-+#endif
-+							)
-+	redir_off = FALSE;
- }
- 
- /*
-diff -Naur vim70.orig/src/ex_getln.c vim70/src/ex_getln.c
---- vim70.orig/src/ex_getln.c	2006-04-30 08:32:01.000000000 -0700
-+++ vim70/src/ex_getln.c	2006-10-13 01:03:05.000000000 -0700
-@@ -324,6 +324,9 @@
-      */
-     for (;;)
-     {
-+	redir_off = TRUE;	/* Don't redirect the typed command.
-+				   Repeated, because a ":redir" inside
-+				   completion may switch it on. */
- #ifdef USE_ON_FLY_SCROLL
- 	dont_scroll = FALSE;	/* allow scrolling here */
- #endif
-@@ -1753,6 +1756,11 @@
- 		end_pos = curwin->w_cursor; /* shutup gcc 4 */
- 
- 	    validate_cursor();
-+# ifdef FEAT_WINDOWS
-+	    /* May redraw the status line to show the cursor position. */
-+	    if (p_ru && curwin->w_status_height > 0)
-+		curwin->w_redr_status = TRUE;
-+# endif
- 
- 	    save_cmdline(&save_ccline);
- 	    update_screen(SOME_VALID);
-@@ -2360,7 +2368,7 @@
- {
-     if ((State & CMDLINE)
- 	    && xic != NULL
--	    && im_get_status()
-+	    /* && im_get_status()  doesn't work when using SCIM */
- 	    && !p_imdisable
- 	    && im_is_preediting())
-     {
-@@ -4521,7 +4529,9 @@
-     flags |= EW_FILE | EW_EXEC;
- 
-     /* For an absolute name we don't use $PATH. */
--    if ((pat[0] == '.' && (vim_ispathsep(pat[1])
-+    if (mch_isFullName(pat))
-+	path = (char_u *)" ";
-+    else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
- 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
- 	path = (char_u *)".";
-     else
-@@ -4534,6 +4544,9 @@
-     ga_init2(&ga, (int)sizeof(char *), 10);
-     for (s = path; *s != NUL; s = e)
-     {
-+	if (*s == ' ')
-+	    ++s;	/* Skip space used for absolute path name. */
-+
- #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
- 	e = vim_strchr(s, ';');
- #else
-@@ -5982,6 +5995,8 @@
-     typestr[0] = cmdwin_type;
-     typestr[1] = NUL;
-     apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
-+    if (restart_edit != 0)	/* autocmd with ":startinsert" */
-+	stuffcharReadbuff(K_NOP);
- # endif
- 
-     i = RedrawingDisabled;
-diff -Naur vim70.orig/src/fileio.c vim70/src/fileio.c
---- vim70.orig/src/fileio.c	2006-04-30 08:28:57.000000000 -0700
-+++ vim70/src/fileio.c	2006-10-13 01:03:05.000000000 -0700
-@@ -316,6 +316,9 @@
-      * display the line. */
-     ex_no_reprint = TRUE;
- 
-+    /* don't display the file info for another buffer now */
-+    need_fileinfo = FALSE;
-+
-     /*
-      * For Unix: Use the short file name whenever possible.
-      * Avoids problems with networks and when directory names are changed.
-@@ -6450,17 +6453,10 @@
-     int		old_ro = buf->b_p_ro;
-     buf_T	*savebuf;
-     int		saved = OK;
--#ifdef FEAT_AUTOCMD
-     aco_save_T	aco;
- 
-     /* set curwin/curbuf for "buf" and save some things */
-     aucmd_prepbuf(&aco, buf);
--#else
--    buf_T	*save_curbuf = curbuf;
--
--    curbuf = buf;
--    curwin->w_buffer = buf;
--#endif
- 
-     /* We only want to read the text from the file, not reset the syntax
-      * highlighting, clear marks, diff status, etc.  Force the fileformat
-@@ -6573,14 +6569,9 @@
- 	    curbuf->b_p_ro |= old_ro;
-     }
- 
--#ifdef FEAT_AUTOCMD
-     /* restore curwin/curbuf and a few other things */
-     aucmd_restbuf(&aco);
-     /* Careful: autocommands may have made "buf" invalid! */
--#else
--    curwin->w_buffer = save_curbuf;
--    curbuf = save_curbuf;
--#endif
- }
- 
- /*ARGSUSED*/
-@@ -6992,6 +6983,7 @@
-     {"FocusLost",	EVENT_FOCUSLOST},
-     {"FuncUndefined",	EVENT_FUNCUNDEFINED},
-     {"GUIEnter",	EVENT_GUIENTER},
-+    {"GUIFailed",	EVENT_GUIFAILED},
-     {"InsertChange",	EVENT_INSERTCHANGE},
-     {"InsertEnter",	EVENT_INSERTENTER},
-     {"InsertLeave",	EVENT_INSERTLEAVE},
-@@ -8088,6 +8080,7 @@
-  * Search a window for the current buffer.  Save the cursor position and
-  * screen offset.
-  * Set "curbuf" and "curwin" to match "buf".
-+ * When FEAT_AUTOCMD is not defined another version is used, see below.
-  */
-     void
- aucmd_prepbuf(aco, buf)
-@@ -8151,6 +8144,7 @@
- /*
-  * Cleanup after executing autocommands for a (hidden) buffer.
-  * Restore the window as it was (if possible).
-+ * When FEAT_AUTOCMD is not defined another version is used, see below.
-  */
-     void
- aucmd_restbuf(aco)
-@@ -8295,7 +8289,11 @@
- {
-     int		state;
- 
--    if (!did_cursorhold && has_cursorhold() && !Recording)
-+    if (!did_cursorhold && has_cursorhold() && !Recording
-+#ifdef FEAT_INS_EXPAND
-+	    && !ins_compl_active()
-+#endif
-+	    )
-     {
- 	state = get_real_state();
- 	if (state == NORMAL_BUSY || (state & INSERT) != 0)
-@@ -9063,8 +9061,38 @@
-     return retval;
- }
- 
-+#else	/* FEAT_AUTOCMD */
-+
-+/*
-+ * Prepare for executing commands for (hidden) buffer "buf".
-+ * This is the non-autocommand version, it simply saves "curbuf" and sets
-+ * "curbuf" and "curwin" to match "buf".
-+ */
-+    void
-+aucmd_prepbuf(aco, buf)
-+    aco_save_T	*aco;		/* structure to save values in */
-+    buf_T	*buf;		/* new curbuf */
-+{
-+    aco->save_buf = buf;
-+    curbuf = buf;
-+    curwin->w_buffer = buf;
-+}
-+
-+/*
-+ * Restore after executing commands for a (hidden) buffer.
-+ * This is the non-autocommand version.
-+ */
-+    void
-+aucmd_restbuf(aco)
-+    aco_save_T	*aco;		/* structure holding saved values */
-+{
-+    curbuf = aco->save_buf;
-+    curwin->w_buffer = curbuf;
-+}
-+
- #endif	/* FEAT_AUTOCMD */
- 
-+
- #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO)
- /*
-  * Try matching a filename with a "pattern" ("prog" is NULL), or use the
-diff -Naur vim70.orig/src/getchar.c vim70/src/getchar.c
---- vim70.orig/src/getchar.c	2006-05-03 10:29:21.000000000 -0700
-+++ vim70/src/getchar.c	2006-10-13 01:03:08.000000000 -0700
-@@ -1451,7 +1451,8 @@
- {
-     updatescript(0);
- #ifdef FEAT_EVAL
--    garbage_collect();
-+    if (may_garbage_collect)
-+	garbage_collect();
- #endif
- }
- 
-@@ -1502,6 +1503,13 @@
-     int		i;
- #endif
- 
-+#ifdef FEAT_EVAL
-+    /* Do garbage collection when garbagecollect() was called previously and
-+     * we are now at the toplevel. */
-+    if (may_garbage_collect && want_garbage_collect)
-+	garbage_collect();
-+#endif
-+
-     /*
-      * If a character was put back with vungetc, it was already processed.
-      * Return it directly.
-@@ -1511,13 +1519,13 @@
- 	c = old_char;
- 	old_char = -1;
- 	mod_mask = old_mod_mask;
--	return c;
-     }
--
--    mod_mask = 0x0;
--    last_recorded_len = 0;
--    for (;;)			/* this is done twice if there are modifiers */
-+    else
-     {
-+      mod_mask = 0x0;
-+      last_recorded_len = 0;
-+      for (;;)			/* this is done twice if there are modifiers */
-+      {
- 	if (mod_mask)		/* no mapping after modifier has been read */
- 	{
- 	    ++no_mapping;
-@@ -1695,8 +1703,20 @@
- 	}
- #endif
- 
--	return c;
-+	break;
-+      }
-     }
-+
-+#ifdef FEAT_EVAL
-+    /*
-+     * In the main loop "may_garbage_collect" can be set to do garbage
-+     * collection in the first next vgetc().  It's disabled after that to
-+     * avoid internally used Lists and Dicts to be freed.
-+     */
-+    may_garbage_collect = FALSE;
-+#endif
-+
-+    return c;
- }
- 
- /*
-@@ -1940,10 +1960,13 @@
- 			c = Ctrl_C;
- 		    flush_buffers(TRUE);	/* flush all typeahead */
- 
--		    /* Also record this character, it might be needed to
--		     * get out of Insert mode. */
--		    *typebuf.tb_buf = c;
--		    gotchars(typebuf.tb_buf, 1);
-+		    if (advance)
-+		    {
-+			/* Also record this character, it might be needed to
-+			 * get out of Insert mode. */
-+			*typebuf.tb_buf = c;
-+			gotchars(typebuf.tb_buf, 1);
-+		    }
- 		    cmd_silent = FALSE;
- 
- 		    break;
-diff -Naur vim70.orig/src/globals.h vim70/src/globals.h
---- vim70.orig/src/globals.h	2006-04-30 06:16:23.000000000 -0700
-+++ vim70/src/globals.h	2006-10-13 01:02:55.000000000 -0700
-@@ -300,9 +300,16 @@
- #endif
- 
- #ifdef FEAT_EVAL
--EXTERN scid_T	current_SID INIT(= 0);	    /* ID of script being sourced or
--					       was sourced to define the
--					       current function. */
-+/* Garbage collection can only take place when we are sure there are no Lists
-+ * or Dictionaries being used internally.  This is flagged with
-+ * "may_garbage_collect" when we are at the toplevel.
-+ * "want_garbage_collect" is set by the garbagecollect() function, which means
-+ * we do garbage collection before waiting for a char at the toplevel. */
-+EXTERN int	may_garbage_collect INIT(= FALSE);
-+EXTERN int	want_garbage_collect INIT(= FALSE);
-+
-+/* ID of script being sourced or was sourced to define the current function. */
-+EXTERN scid_T	current_SID INIT(= 0);
- #endif
- 
- #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
-@@ -1441,7 +1448,7 @@
- EXTERN char_u e_readonly[]	INIT(= N_("E45: 'readonly' option is set (add ! to override)"));
- #ifdef FEAT_EVAL
- EXTERN char_u e_readonlyvar[]	INIT(= N_("E46: Cannot change read-only variable \"%s\""));
--EXTERN char_u e_readonlysbx[]	INIT(= N_("E46: Cannot set variable in the sandbox: \"%s\""));
-+EXTERN char_u e_readonlysbx[]	INIT(= N_("E794: Cannot set variable in the sandbox: \"%s\""));
- #endif
- #ifdef FEAT_QUICKFIX
- EXTERN char_u e_readerrf[]	INIT(= N_("E47: Error while reading errorfile"));
-diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
---- vim70.orig/src/gui_at_fs.c	2005-07-09 04:30:17.000000000 -0700
-+++ vim70/src/gui_at_fs.c	2006-10-13 01:02:44.000000000 -0700
-@@ -1861,27 +1861,27 @@
-     XtPointer	pnew;
- {
-     SFDir	*dir;
--    int		nw;
-+    int		nw = (int)(long)pnew;
- 
-     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFvScrollHeight)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFvScrollHeight)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -SFlistSize;
-+	    nw = -SFlistSize;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFvScrollHeight)
--	    (int)(long)pnew = 1;
-+	if (nw < SFvScrollHeight)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = SFlistSize;
-+	    nw = SFlistSize;
-     }
- #endif
--    nw = dir->vOrigin + (int)(long)pnew;
-+    nw += dir->vOrigin;
- 
-     if (nw > dir->nEntries - SFlistSize)
- 	nw = dir->nEntries - SFlistSize;
-@@ -1941,27 +1941,27 @@
-     XtPointer	pnew;
- {
-     SFDir	*dir;
--    int		nw;
-+    int		nw = (int)(long)pnew;
- 
-     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFhScrollWidth)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFhScrollWidth)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -SFcharsPerEntry;
-+	    nw = -SFcharsPerEntry;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFhScrollWidth)
--	    (int)(long)pnew = 1;
-+	if (nw < SFhScrollWidth)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = SFcharsPerEntry;
-+	    nw = SFcharsPerEntry;
-     }
- #endif
--    nw = dir->hOrigin + (int)(long)pnew;
-+    nw += dir->hOrigin;
- 
-     if (nw > dir->nChars - SFcharsPerEntry)
- 	nw = dir->nChars - SFcharsPerEntry;
-@@ -2038,26 +2038,26 @@
-     XtPointer	client_data;
-     XtPointer	pnew;
- {
--    int		nw;
-+    int		nw = (int)(long)pnew;
-     float	f;
- 
- #ifdef FEAT_GUI_NEXTAW
--    if ((int)(long)pnew < 0)
-+    if (nw < 0)
-     {
--	if ((int)(long)pnew > -SFpathScrollWidth)
--	    (int)(long)pnew = -1;
-+	if (nw > -SFpathScrollWidth)
-+	    nw = -1;
- 	else
--	    (int)(long)pnew = -3;
-+	    nw = -3;
-     }
--    else if ((int)(long)pnew > 0)
-+    else if (nw > 0)
-     {
--	if ((int)(long)pnew < SFpathScrollWidth)
--	    (int)(long)pnew = 1;
-+	if (nw < SFpathScrollWidth)
-+	    nw = 1;
- 	else
--	    (int)(long)pnew = 3;
-+	    nw = 3;
-     }
- #endif
--    nw = SFdirPtr + (int)(long)pnew;
-+    nw += SFdirPtr;
- 
-     if (nw > SFdirEnd - 3)
- 	nw = SFdirEnd - 3;
-diff -Naur vim70.orig/src/gui_beval.c vim70/src/gui_beval.c
---- vim70.orig/src/gui_beval.c	2006-05-04 12:29:51.000000000 -0700
-+++ vim70/src/gui_beval.c	2006-10-13 01:02:52.000000000 -0700
-@@ -926,7 +926,7 @@
- #  define IS_NONPRINTABLE(c) (((c) < 0x20 && (c) != TAB && (c) != NL) \
- 			      || (c) == DEL)
-     static void
--set_printable_label_text(GtkLabel *label, char_u *msg)
-+set_printable_label_text(GtkLabel *label, char_u *text)
- {
-     char_u	    *convbuf = NULL;
-     char_u	    *buf;
-@@ -940,14 +940,14 @@
-     /* Convert to UTF-8 if it isn't already */
-     if (output_conv.vc_type != CONV_NONE)
-     {
--	convbuf = string_convert(&output_conv, msg, NULL);
-+	convbuf = string_convert(&output_conv, text, NULL);
- 	if (convbuf != NULL)
--	    msg = convbuf;
-+	    text = convbuf;
-     }
- 
-     /* First let's see how much we need to allocate */
-     len = 0;
--    for (p = msg; *p != NUL; p += charlen)
-+    for (p = text; *p != NUL; p += charlen)
-     {
- 	if ((*p & 0x80) == 0)	/* be quick for ASCII */
- 	{
-@@ -992,7 +992,7 @@
- 				     (unsigned long)pixel, &color);
- 
- 	pdest = buf;
--	p = msg;
-+	p = text;
- 	while (*p != NUL)
- 	{
- 	    /* Be quick for ASCII */
-diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
---- vim70.orig/src/gui.c	2006-05-03 04:00:59.000000000 -0700
-+++ vim70/src/gui.c	2006-10-13 01:03:11.000000000 -0700
-@@ -187,9 +187,10 @@
- #endif
- 
- #ifdef FEAT_AUTOCMD
--    /* If the GUI started successfully, trigger the GUIEnter event */
--    if (gui.in_use)
--	apply_autocmds(EVENT_GUIENTER, NULL, NULL, FALSE, curbuf);
-+    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
-+     * the GUIFailed event. */
-+    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
-+						   NULL, NULL, FALSE, curbuf);
- #endif
- 
-     --recursive;
-@@ -636,6 +637,7 @@
- 
- #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_MSWIN) \
- 	|| defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) || defined(PROTO)
-+# define NEED_GUI_UPDATE_SCREEN 1
- /*
-  * Called when the GUI shell is closed by the user.  If there are no changed
-  * files Vim exits, otherwise there will be a dialog to ask the user what to
-@@ -664,8 +666,7 @@
- 
-     exiting = FALSE;
-     cmdmod = save_cmdmod;
--    setcursor();		/* position cursor */
--    out_flush();
-+    gui_update_screen();	/* redraw, window may show changed buffer */
- }
- #endif
- 
-@@ -2872,6 +2873,9 @@
-      */
-     if ((State == NORMAL || State == NORMAL_BUSY || (State & INSERT))
- 	    && Y_2_ROW(y) >= topframe->fr_height
-+# ifdef FEAT_WINDOWS
-+						+ firstwin->w_winrow
-+# endif
- 	    && button != MOUSE_DRAG
- # ifdef FEAT_MOUSESHAPE
- 	    && !drag_status_line
-@@ -3733,6 +3737,12 @@
-     if (dont_scroll || input_available())
- 	return;
- #endif
-+#ifdef FEAT_INS_EXPAND
-+    /* Disallow scrolling the current window when the completion popup menu is
-+     * visible. */
-+    if ((sb->wp == NULL || sb->wp == curwin) && pum_visible())
-+	return;
-+#endif
- 
- #ifdef FEAT_RIGHTLEFT
-     if (sb->wp == NULL && curwin->w_p_rl)
-@@ -4207,6 +4217,12 @@
- 	updateWindow(wp);   /* update window, status line, and cmdline */
-     }
- 
-+#ifdef FEAT_INS_EXPAND
-+    /* May need to redraw the popup menu. */
-+    if (pum_visible())
-+	pum_redraw();
-+#endif
-+
-     return (wp == curwin && !equalpos(curwin->w_cursor, old_cursor));
- }
- 
-@@ -4515,7 +4531,7 @@
-     int		y;
- {
-     win_T	*wp;
--    char_u	st[6];
-+    char_u	st[8];
- 
-     /* Ignore this while still starting up. */
-     if (!gui.in_use || gui.starting)
-@@ -4603,11 +4619,11 @@
-     /* Don't move the mouse when it's left or right of the Vim window */
-     if (x < 0 || x > Columns * gui.char_width)
- 	return;
-+    if (y >= 0
- # ifdef FEAT_WINDOWS
--    if (Y_2_ROW(y) >= tabline_height())
--# else
--    if (y >= 0)
-+	    && Y_2_ROW(y) >= tabline_height()
- # endif
-+       )
- 	wp = xy2win(x, y);
-     if (wp != curwin && wp != NULL)	/* If in other than current window */
-     {
-@@ -4807,6 +4823,7 @@
- #endif
- 
- #if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \
-+	|| defined(NEED_GUI_UPDATE_SCREEN) \
- 	|| defined(PROTO)
- /*
-  * Update the current window and the screen.
-diff -Naur vim70.orig/src/gui_gtk.c vim70/src/gui_gtk.c
---- vim70.orig/src/gui_gtk.c	2006-05-05 04:52:52.000000000 -0700
-+++ vim70/src/gui_gtk.c	2006-10-13 01:03:11.000000000 -0700
-@@ -957,15 +957,15 @@
- get_menu_position(vimmenu_T *menu)
- {
-     vimmenu_T	*node;
--    int		index = 0;
-+    int		idx = 0;
- 
-     for (node = menu->parent->children; node != menu; node = node->next)
-     {
- 	g_return_val_if_fail(node != NULL, -1);
--	++index;
-+	++idx;
-     }
- 
--    return index;
-+    return idx;
- }
- #endif /* FEAT_TOOLBAR && HAVE_GTK2 */
- 
-@@ -1275,18 +1275,13 @@
-     title = CONVERT_TO_UTF8(title);
- # endif
- 
--    /* Concatenate "initdir" and "dflt". */
-+    /* GTK has a bug, it only works with an absolute path. */
-     if (initdir == NULL || *initdir == NUL)
- 	mch_dirname(dirbuf, MAXPATHL);
--    else if (STRLEN(initdir) + 2 < MAXPATHL)
--	STRCPY(dirbuf, initdir);
--    else
-+    else if (vim_FullName(initdir, dirbuf, MAXPATHL - 2, FALSE) == FAIL)
- 	dirbuf[0] = NUL;
-     /* Always need a trailing slash for a directory. */
-     add_pathsep(dirbuf);
--    if (dflt != NULL && *dflt != NUL
--			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
--	STRCAT(dirbuf, dflt);
- 
-     /* If our pointer is currently hidden, then we should show it. */
-     gui_mch_mousehide(FALSE);
-@@ -1341,6 +1336,11 @@
-     else
- 	gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title);
- 
-+    /* Concatenate "initdir" and "dflt". */
-+    if (dflt != NULL && *dflt != NUL
-+			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
-+	STRCAT(dirbuf, dflt);
-+
-     gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg),
- 						      (const gchar *)dirbuf);
- # ifndef HAVE_GTK2
-@@ -2127,7 +2127,7 @@
-     char    **ync;  /* "yes no cancel" */
-     char    **buttons;
-     int	    n_buttons = 0;
--    int	    index;
-+    int	    idx;
- 
-     button_string = vim_strsave(button_string); /* must be writable */
-     if (button_string == NULL)
-@@ -2161,12 +2161,12 @@
-      * Well, apparently somebody changed his mind: with GTK 2.2.4 it works the
-      * other way around...
-      */
--    for (index = 1; index <= n_buttons; ++index)
-+    for (idx = 1; idx <= n_buttons; ++idx)
-     {
- 	char	*label;
- 	char_u	*label8;
- 
--	label = buttons[index - 1];
-+	label = buttons[idx - 1];
- 	/*
- 	 * Perform some guesswork to find appropriate stock items for the
- 	 * buttons.  We have to compare with a sample of the translated
-@@ -2188,7 +2188,7 @@
- 	    else if (button_equal(label, "Cancel")) label = GTK_STOCK_CANCEL;
- 	}
- 	label8 = CONVERT_TO_UTF8((char_u *)label);
--	gtk_dialog_add_button(dialog, (const gchar *)label8, index);
-+	gtk_dialog_add_button(dialog, (const gchar *)label8, idx);
- 	CONVERT_TO_UTF8_FREE(label8);
-     }
- 
-diff -Naur vim70.orig/src/gui_gtk_x11.c vim70/src/gui_gtk_x11.c
---- vim70.orig/src/gui_gtk_x11.c	2006-05-04 23:58:59.000000000 -0700
-+++ vim70/src/gui_gtk_x11.c	2006-10-13 01:02:52.000000000 -0700
-@@ -3233,12 +3233,12 @@
- on_select_tab(
- 	GtkNotebook	*notebook,
- 	GtkNotebookPage *page,
--	gint		index,
-+	gint		idx,
- 	gpointer	data)
- {
-     if (!ignore_tabline_evt)
-     {
--	if (send_tabline_event(index + 1) && gtk_main_level() > 0)
-+	if (send_tabline_event(idx + 1) && gtk_main_level() > 0)
- 	    gtk_main_quit();
-     }
- }
-@@ -5303,13 +5303,13 @@
- # ifdef HAVE_GTK2
-     if (font != NOFONT)
-     {
--	char	*name = pango_font_description_to_string(font);
-+	char	*pangoname = pango_font_description_to_string(font);
- 
--	if (name != NULL)
-+	if (pangoname != NULL)
- 	{
--	    char_u	*s = vim_strsave((char_u *)name);
-+	    char_u	*s = vim_strsave((char_u *)pangoname);
- 
--	    g_free(name);
-+	    g_free(pangoname);
- 	    return s;
- 	}
-     }
-@@ -6241,24 +6241,20 @@
- {
-     GdkGCValues values;
-     GdkGC *invert_gc;
--    GdkColor foreground;
--    GdkColor background;
- 
-     if (gui.drawarea->window == NULL)
- 	return;
- 
--    foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
--    background.pixel = gui.norm_pixel ^ gui.back_pixel;
--
--    values.foreground = foreground;
--    values.background = background;
-+    values.foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
-+    values.background.pixel = gui.norm_pixel ^ gui.back_pixel;
-     values.function = GDK_XOR;
-     invert_gc = gdk_gc_new_with_values(gui.drawarea->window,
- 				       &values,
- 				       GDK_GC_FOREGROUND |
- 				       GDK_GC_BACKGROUND |
- 				       GDK_GC_FUNCTION);
--    gdk_gc_set_exposures(invert_gc, gui.visibility != GDK_VISIBILITY_UNOBSCURED);
-+    gdk_gc_set_exposures(invert_gc, gui.visibility !=
-+						   GDK_VISIBILITY_UNOBSCURED);
-     gdk_draw_rectangle(gui.drawarea->window, invert_gc,
- 		       TRUE,
- 		       FILL_X(c), FILL_Y(r),
-diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
---- vim70.orig/src/gui_xmebw.c	2006-04-30 08:32:32.000000000 -0700
-+++ vim70/src/gui_xmebw.c	2006-10-13 01:02:44.000000000 -0700
-@@ -47,13 +47,13 @@
- #include "gui_xmebwp.h"
- 
- /* Provide some missing wrappers, which are missed from the LessTif
-- * implementation.
-+ * implementation.  Also missing in Motif 1.2 and earlier.
-  *
-  * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
-  * pixmap will not appear in it's caches properly. We cache the interresting
-  * values in XmEnhancedButtonPart instead ourself.
-  */
--#ifdef LESSTIF_VERSION
-+#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
- # ifndef Lab_IsMenupane
- #  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
- 		    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
-@@ -480,7 +480,7 @@
- 	    || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
- 	return;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     {
- 	XmDisplay	dpy;
- 
-@@ -641,7 +641,7 @@
-     GC		tmp_gc = NULL;
-     Boolean	replaceGC = False;
-     Boolean	deadjusted = False;
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     XmDisplay	dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
-     Boolean	etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -726,7 +726,7 @@
- 	if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
- 		&& _XmGetInDragMode((Widget) eb))
- 	{
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	    XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
- 	    Boolean etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -810,7 +810,7 @@
- 
-     if (Lab_IsMenupane(eb))
-     {
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
- 	Boolean etched_in = dpy->display.enable_etched_in_menu;
- #else
-@@ -1150,7 +1150,7 @@
- Redisplay(Widget w, XEvent *event, Region region)
- {
-     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     XmDisplay		    dpy;
-     XtEnum		    default_button_emphasis;
- #endif
-@@ -1162,7 +1162,7 @@
-     if (!XtIsRealized((Widget)eb))
- 	return;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
-     dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
-     default_button_emphasis = dpy->display.default_button_emphasis;
- #endif
-@@ -1241,7 +1241,7 @@
-     {
- 	int adjust = 0;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	/*
- 	 *  NOTE: PushButton has two types of shadows: primitive-shadow and
- 	 *  default-button-shadow.  If pushbutton is in a menu only primitive
-@@ -1289,7 +1289,7 @@
- 			  adjust, adjust, rectwidth, rectheight, borderwidth);
- 	    }
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 	    switch (default_button_emphasis)
- 	    {
- 		case XmINTERNAL_HIGHLIGHT:
-@@ -1365,7 +1365,7 @@
- 		    default_button_shadow_thickness =
- 			       eb->pushbutton.default_button_shadow_thickness;
- 
--#ifndef LESSTIF_VERSION
-+#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
- 		/*
- 		 * Compute location of bounding box to contain the
- 		 * defaultButtonShadow.
-diff -Naur vim70.orig/src/hardcopy.c vim70/src/hardcopy.c
---- vim70.orig/src/hardcopy.c	2006-05-04 03:09:58.000000000 -0700
-+++ vim70/src/hardcopy.c	2006-10-13 01:02:52.000000000 -0700
-@@ -1794,29 +1794,27 @@
-     static int
- prt_resfile_next_line()
- {
--    int     index;
-+    int     idx;
- 
-     /* Move to start of next line and then find end of line */
--    index = prt_resfile.line_end + 1;
--    while (index < prt_resfile.len)
-+    idx = prt_resfile.line_end + 1;
-+    while (idx < prt_resfile.len)
-     {
--	if (prt_resfile.buffer[index] != PSLF && prt_resfile.buffer[index]
--									!= PSCR)
-+	if (prt_resfile.buffer[idx] != PSLF && prt_resfile.buffer[idx] != PSCR)
- 	    break;
--	index++;
-+	idx++;
-     }
--    prt_resfile.line_start = index;
-+    prt_resfile.line_start = idx;
- 
--    while (index < prt_resfile.len)
-+    while (idx < prt_resfile.len)
-     {
--	if (prt_resfile.buffer[index] == PSLF || prt_resfile.buffer[index]
--									== PSCR)
-+	if (prt_resfile.buffer[idx] == PSLF || prt_resfile.buffer[idx] == PSCR)
- 	    break;
--	index++;
-+	idx++;
-     }
--    prt_resfile.line_end = index;
-+    prt_resfile.line_end = idx;
- 
--    return (index < prt_resfile.len);
-+    return (idx < prt_resfile.len);
- }
- 
-     static int
-@@ -1837,14 +1835,14 @@
- prt_resfile_skip_nonws(offset)
-     int     offset;
- {
--    int     index;
-+    int     idx;
- 
--    index = prt_resfile.line_start + offset;
--    while (index < prt_resfile.line_end)
-+    idx = prt_resfile.line_start + offset;
-+    while (idx < prt_resfile.line_end)
-     {
--	if (isspace(prt_resfile.buffer[index]))
--	    return index - prt_resfile.line_start;
--	index++;
-+	if (isspace(prt_resfile.buffer[idx]))
-+	    return idx - prt_resfile.line_start;
-+	idx++;
-     }
-     return -1;
- }
-@@ -1853,14 +1851,14 @@
- prt_resfile_skip_ws(offset)
-     int     offset;
- {
--    int     index;
-+    int     idx;
- 
--    index = prt_resfile.line_start + offset;
--    while (index < prt_resfile.line_end)
-+    idx = prt_resfile.line_start + offset;
-+    while (idx < prt_resfile.line_end)
-     {
--	if (!isspace(prt_resfile.buffer[index]))
--	    return index - prt_resfile.line_start;
--	index++;
-+	if (!isspace(prt_resfile.buffer[idx]))
-+	    return idx - prt_resfile.line_start;
-+	idx++;
-     }
-     return -1;
- }
-@@ -2478,7 +2476,7 @@
-     char_u	*p_encoding;
-     struct prt_ps_encoding_S *p_mbenc;
-     struct prt_ps_encoding_S *p_mbenc_first;
--    struct prt_ps_charset_S  *p_mbchar;
-+    struct prt_ps_charset_S  *p_mbchar = NULL;
- #endif
- 
- #if 0
-@@ -2516,7 +2514,6 @@
-     if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE)))
-     {
- 	p_mbenc_first = NULL;
--	p_mbchar = NULL;
- 	for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
- 	    if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
- 								    &p_mbenc))
-diff -Naur vim70.orig/src/if_cscope.c vim70/src/if_cscope.c
---- vim70.orig/src/if_cscope.c	2006-04-18 01:54:15.000000000 -0700
-+++ vim70/src/if_cscope.c	2006-10-13 01:02:52.000000000 -0700
-@@ -989,8 +989,7 @@
- {
-     int i;
-     char *cmd;
--    char **matches, **contexts;
--    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches, matched;
-+    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
- #ifdef FEAT_QUICKFIX
-     char cmdletter;
-     char *qfpos;
-@@ -1141,6 +1140,9 @@
-     else
- #endif /* FEAT_QUICKFIX */
-     {
-+	char **matches = NULL, **contexts = NULL;
-+	int matched = 0;
-+
- 	/* read output */
- 	cs_fill_results((char *)pat, totmatches, nummatches, &matches,
- 							 &contexts, &matched);
-diff -Naur vim70.orig/src/if_perl.xs vim70/src/if_perl.xs
---- vim70.orig/src/if_perl.xs	2006-03-06 10:57:16.000000000 -0800
-+++ vim70/src/if_perl.xs	2006-10-13 01:02:49.000000000 -0700
-@@ -155,8 +155,8 @@
- static int (*perl_run)(PerlInterpreter*);
- static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
- static void* (*Perl_get_context)(void);
--static void (*Perl_croak)(pTHX_ const char*, ...) __attribute__((noreturn));
--static void (*Perl_croak_nocontext)(const char*, ...) __attribute__((noreturn));
-+static void (*Perl_croak)(pTHX_ const char*, ...);
-+static void (*Perl_croak_nocontext)(const char*, ...);
- static I32 (*Perl_dowantarray)(pTHX);
- static void (*Perl_free_tmps)(pTHX);
- static HV* (*Perl_gv_stashpv)(pTHX_ const char*, I32);
-@@ -1056,7 +1056,6 @@
-     int i;
-     long lnum;
-     char *line;
--    buf_T *savebuf;
-     PPCODE:
-     if (buf_valid(vimbuf))
-     {
-@@ -1069,14 +1068,20 @@
- 	    line = SvPV(ST(i),PL_na);
- 	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- 	    {
--		savebuf = curbuf;
--		curbuf = vimbuf;
-+		aco_save_T	aco;
-+
-+		/* set curwin/curbuf for "vimbuf" and save some things */
-+		aucmd_prepbuf(&aco, vimbuf);
-+
- 		if (u_savesub(lnum) == OK)
- 		{
- 		    ml_replace(lnum, (char_u *)line, TRUE);
- 		    changed_bytes(lnum, 0);
- 		}
--		curbuf = savebuf;
-+
-+		/* restore curwin/curbuf and a few other things */
-+		aucmd_restbuf(&aco);
-+		/* Careful: autocommands may have made "vimbuf" invalid! */
- 	    }
- 	}
-     }
-@@ -1087,7 +1092,6 @@
- 
-     PREINIT:
-     long i, lnum = 0, count = 0;
--    buf_T *savebuf;
-     PPCODE:
-     if (buf_valid(vimbuf))
-     {
-@@ -1114,16 +1118,23 @@
- 	    {
- 		if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
- 		{
--		    savebuf = curbuf;
--		    curbuf = vimbuf;
-+		    aco_save_T	aco;
-+
-+		    /* set curwin/curbuf for "vimbuf" and save some things */
-+		    aucmd_prepbuf(&aco, vimbuf);
-+
- 		    if (u_savedel(lnum, 1) == OK)
- 		    {
- 			ml_delete(lnum, 0);
- 			deleted_lines_mark(lnum, 1L);
--			if (savebuf == curbuf)
-+			if (aco.save_buf == curbuf)
- 			    check_cursor();
- 		    }
--		    curbuf = savebuf;
-+
-+		    /* restore curwin/curbuf and a few other things */
-+		    aucmd_restbuf(&aco);
-+		    /* Careful: autocommands may have made "vimbuf" invalid! */
-+
- 		    update_curbuf(VALID);
- 		}
- 	    }
-@@ -1138,7 +1149,6 @@
-     int		i;
-     long	lnum;
-     char	*line;
--    buf_T	*savebuf;
-     PPCODE:
-     if (buf_valid(vimbuf))
-     {
-@@ -1151,14 +1161,21 @@
- 	    line = SvPV(ST(i),PL_na);
- 	    if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
- 	    {
--		savebuf = curbuf;
--		curbuf = vimbuf;
-+		aco_save_T	aco;
-+
-+		/* set curwin/curbuf for "vimbuf" and save some things */
-+		aucmd_prepbuf(&aco, vimbuf);
-+
- 		if (u_inssub(lnum + 1) == OK)
- 		{
- 		    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
- 		    appended_lines_mark(lnum, 1L);
- 		}
--		curbuf = savebuf;
-+
-+		/* restore curwin/curbuf and a few other things */
-+		aucmd_restbuf(&aco);
-+		/* Careful: autocommands may have made "vimbuf" invalid! */
-+
- 		update_curbuf(VALID);
- 	    }
- 	}
-diff -Naur vim70.orig/src/if_python.c vim70/src/if_python.c
---- vim70.orig/src/if_python.c	2006-04-30 08:31:36.000000000 -0700
-+++ vim70/src/if_python.c	2006-10-13 01:03:07.000000000 -0700
-@@ -1463,7 +1463,7 @@
-     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
- 	this->buf->b_python_ref = NULL;
- 
--    PyMem_DEL(self);
-+    Py_DECREF(self);
- }
- 
-     static PyObject *
-@@ -1674,7 +1674,7 @@
-     bufr = (BufferObject *)BufferNew(buf);
-     if (bufr == NULL)
-     {
--	PyMem_DEL(self);
-+	Py_DECREF(self);
- 	return NULL;
-     }
-     Py_INCREF(bufr);
-@@ -1690,7 +1690,7 @@
- RangeDestructor(PyObject *self)
- {
-     Py_DECREF(((RangeObject *)(self))->buf);
--    PyMem_DEL(self);
-+    Py_DECREF(self);
- }
- 
-     static PyObject *
-@@ -1944,7 +1944,7 @@
-     if (this->win && this->win != INVALID_WINDOW_VALUE)
- 	this->win->w_python_ref = NULL;
- 
--    PyMem_DEL(self);
-+    Py_DECREF(self);
- }
- 
-     static int
-diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
---- vim70.orig/src/if_ruby.c	2006-04-30 08:37:52.000000000 -0700
-+++ vim70/src/if_ruby.c	2006-10-13 01:02:49.000000000 -0700
-@@ -643,11 +643,14 @@
- 
- static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
- {
--    buf_T *savebuf = curbuf;
--    char *line = STR2CSTR(str);
-+    char	*line = STR2CSTR(str);
-+    aco_save_T	aco;
-+
-+    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
-+    {
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
- 
--    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
--	curbuf = buf;
- 	if (u_savesub(n) == OK) {
- 	    ml_replace(n, (char_u *)line, TRUE);
- 	    changed();
-@@ -655,10 +658,15 @@
- 	    syn_changed(n); /* recompute syntax hl. for this line */
- #endif
- 	}
--	curbuf = savebuf;
-+
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+
- 	update_curbuf(NOT_VALID);
-     }
--    else {
-+    else
-+    {
- 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
- 	return Qnil; /* For stop warning */
-     }
-@@ -676,12 +684,15 @@
- 
- static VALUE buffer_delete(VALUE self, VALUE num)
- {
--    buf_T *buf = get_buf(self);
--    buf_T *savebuf = curbuf;
--    long n = NUM2LONG(num);
-+    buf_T	*buf = get_buf(self);
-+    long	n = NUM2LONG(num);
-+    aco_save_T	aco;
-+
-+    if (n > 0 && n <= buf->b_ml.ml_line_count)
-+    {
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
- 
--    if (n > 0 && n <= buf->b_ml.ml_line_count) {
--	curbuf = buf;
- 	if (u_savedel(n, 1) == OK) {
- 	    ml_delete(n, 0);
- 
-@@ -691,10 +702,15 @@
- 
- 	    changed();
- 	}
--	curbuf = savebuf;
-+
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+
- 	update_curbuf(NOT_VALID);
-     }
--    else {
-+    else
-+    {
- 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
-     }
-     return Qnil;
-@@ -702,13 +718,16 @@
- 
- static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
- {
--    buf_T *buf = get_buf(self);
--    buf_T *savebuf = curbuf;
--    char *line = STR2CSTR(str);
--    long n = NUM2LONG(num);
-+    buf_T	*buf = get_buf(self);
-+    char	*line = STR2CSTR(str);
-+    long	n = NUM2LONG(num);
-+    aco_save_T	aco;
-+
-+    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
-+    {
-+	/* set curwin/curbuf for "buf" and save some things */
-+	aucmd_prepbuf(&aco, buf);
- 
--    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
--	curbuf = buf;
- 	if (u_inssub(n + 1) == OK) {
- 	    ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
- 
-@@ -718,7 +737,11 @@
- 
- 	    changed();
- 	}
--	curbuf = savebuf;
-+
-+	/* restore curwin/curbuf and a few other things */
-+	aucmd_restbuf(&aco);
-+	/* Careful: autocommands may have made "buf" invalid! */
-+
- 	update_curbuf(NOT_VALID);
-     }
-     else {
-diff -Naur vim70.orig/src/macros.h vim70/src/macros.h
---- vim70.orig/src/macros.h	2006-03-01 04:01:10.000000000 -0800
-+++ vim70/src/macros.h	2006-10-13 01:02:56.000000000 -0700
-@@ -276,3 +276,9 @@
- # define MB_CHARLEN(p)		STRLEN(p)
- # define PTR2CHAR(p)		((int)*(p))
- #endif
-+
-+#ifdef FEAT_AUTOCHDIR
-+# define DO_AUTOCHDIR if (p_acd) do_autochdir();
-+#else
-+# define DO_AUTOCHDIR
-+#endif
-diff -Naur vim70.orig/src/main.c vim70/src/main.c
---- vim70.orig/src/main.c	2006-05-03 10:36:44.000000000 -0700
-+++ vim70/src/main.c	2006-10-13 01:02:55.000000000 -0700
-@@ -564,7 +564,11 @@
-      */
-     if (p_lpl)
-     {
-+# ifdef VMS	/* Somehow VMS doesn't handle the "**". */
-+	source_runtime((char_u *)"plugin/*.vim", TRUE);
-+# else
- 	source_runtime((char_u *)"plugin/**/*.vim", TRUE);
-+# endif
- 	TIME_MSG("loading plugins");
-     }
- #endif
-@@ -1126,6 +1130,16 @@
- 	 */
- 	update_curswant();
- 
-+#ifdef FEAT_EVAL
-+	/*
-+	 * May perform garbage collection when waiting for a character, but
-+	 * only at the very toplevel.  Otherwise we may be using a List or
-+	 * Dict internally somewhere.
-+	 * "may_garbage_collect" is reset in vgetc() which is invoked through
-+	 * do_exmode() and normal_cmd().
-+	 */
-+	may_garbage_collect = (!cmdwin && !noexmode);
-+#endif
- 	/*
- 	 * If we're invoked as ex, do a round of ex commands.
- 	 * Otherwise, get and execute a normal mode command.
-@@ -2281,7 +2295,7 @@
-     mparm_T	*parmp;
- {
- #ifdef FEAT_WINDOWS
--    int		rewind;
-+    int		dorewind;
-     int		done = 0;
- 
-     /*
-@@ -2338,10 +2352,10 @@
- 	++autocmd_no_leave;
- #endif
- #ifdef FEAT_WINDOWS
--	rewind = TRUE;
-+	dorewind = TRUE;
- 	while (done++ < 1000)
- 	{
--	    if (rewind)
-+	    if (dorewind)
- 	    {
- 		if (parmp->window_layout == WIN_TABS)
- 		    goto_tabpage(1);
-@@ -2360,7 +2374,7 @@
- 		    break;
- 		curwin = curwin->w_next;
- 	    }
--	    rewind = FALSE;
-+	    dorewind = FALSE;
- #endif
- 	    curbuf = curwin->w_buffer;
- 	    if (curbuf->b_ml.ml_mfp == NULL)
-@@ -2381,7 +2395,7 @@
- 		check_swap_exists_action();
- #endif
- #ifdef FEAT_AUTOCMD
--		rewind = TRUE;		/* start again */
-+		dorewind = TRUE;		/* start again */
- #endif
- 	    }
- #ifdef FEAT_WINDOWS
-@@ -3208,10 +3222,15 @@
-      * Register for remote command execution with :serversend and --remote
-      * unless there was a -X or a --servername '' on the command line.
-      * Only register nongui-vim's with an explicit --servername argument.
-+     * When running as root --servername is also required.
-      */
-     if (X_DISPLAY != NULL && parmp->servername != NULL && (
- #  ifdef FEAT_GUI
--		gui.in_use ||
-+		(gui.in_use
-+#   ifdef UNIX
-+		 && getuid() != 0
-+#   endif
-+		) ||
- #  endif
- 		parmp->serverName_arg != NULL))
-     {
-diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
---- vim70.orig/src/Makefile	2006-05-07 06:25:27.000000000 -0700
-+++ vim70/src/Makefile	2006-10-13 01:02:54.000000000 -0700
-@@ -2177,6 +2177,7 @@
- 	cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
- 	if test -d $(RSRC_DIR); then \
- 		cd $(SHADOWDIR); \
-+		ln -s ../infplist.xml .; \
- 		ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
- 	fi
- 	mkdir $(SHADOWDIR)/testdir
-@@ -2260,7 +2261,7 @@
- auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
- 	CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
- 
--QUOTESED = sed -e 's/"/\\"/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
-+QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
- auto/pathdef.c: Makefile auto/config.mk
- 	-@echo creating $@
- 	-@echo '/* pathdef.c */' > $@
-diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
---- vim70.orig/src/mbyte.c	2006-04-30 04:51:01.000000000 -0700
-+++ vim70/src/mbyte.c	2006-10-13 01:02:52.000000000 -0700
-@@ -311,7 +311,11 @@
- 
- #define IDX_MACROMAN	57
-     {"macroman",	ENC_8BIT + ENC_MACROMAN, 0},	/* Mac OS */
--#define IDX_COUNT	58
-+#define IDX_DECMCS	58
-+    {"dec-mcs",		ENC_8BIT,		0},	/* DEC MCS */
-+#define IDX_HPROMAN8	59
-+    {"hp-roman8",	ENC_8BIT,		0},	/* HP Roman8 */
-+#define IDX_COUNT	60
- };
- 
- /*
-@@ -359,6 +363,8 @@
-     {"932",		IDX_CP932},
-     {"949",		IDX_CP949},
-     {"936",		IDX_CP936},
-+    {"gbk",		IDX_CP936},
-+    {"gb18030",		IDX_CP936},	/* only 99% the same */
-     {"950",		IDX_CP950},
-     {"eucjp",		IDX_EUC_JP},
-     {"unix-jis",	IDX_EUC_JP},
-@@ -386,6 +392,7 @@
-     {"950",		IDX_BIG5},
- #endif
-     {"mac",		IDX_MACROMAN},
-+    {"mac-roman",	IDX_MACROMAN},
-     {NULL,		0}
- };
- 
-@@ -3507,6 +3514,11 @@
- 	add_to_input_buf(delkey, (int)sizeof(delkey));
- }
- 
-+/*
-+ * Move the cursor left by "num_move_back" characters.
-+ * Note that ins_left() checks im_is_preediting() to avoid breaking undo for
-+ * these K_LEFT keys.
-+ */
-     static void
- im_correct_cursor(int num_move_back)
- {
-@@ -3734,8 +3746,7 @@
-     }
-     else if (cursor_index == 0 && preedit_string[0] == '\0')
-     {
--	if (preedit_start_col == MAXCOL)
--	    xim_has_preediting = FALSE;
-+	xim_has_preediting = FALSE;
- 
- 	/* If at the start position (after typing backspace)
- 	 * preedit_start_col must be reset. */
-@@ -3850,13 +3861,13 @@
- 
-     if (preedit_string != NULL && attr_list != NULL)
-     {
--	int index;
-+	int idx;
- 
- 	/* Get the byte index as used by PangoAttrIterator */
--	for (index = 0; col > 0 && preedit_string[index] != '\0'; --col)
--	    index += utfc_ptr2len((char_u *)preedit_string + index);
-+	for (idx = 0; col > 0 && preedit_string[idx] != '\0'; --col)
-+	    idx += utfc_ptr2len((char_u *)preedit_string + idx);
- 
--	if (preedit_string[index] != '\0')
-+	if (preedit_string[idx] != '\0')
- 	{
- 	    PangoAttrIterator	*iter;
- 	    int			start, end;
-@@ -3869,7 +3880,7 @@
- 	    {
- 		pango_attr_iterator_range(iter, &start, &end);
- 
--		if (index >= start && index < end)
-+		if (idx >= start && idx < end)
- 		    char_attr |= translate_pango_attributes(iter);
- 	    }
- 	    while (pango_attr_iterator_next(iter));
-diff -Naur vim70.orig/src/memfile.c vim70/src/memfile.c
---- vim70.orig/src/memfile.c	2006-03-06 00:59:15.000000000 -0800
-+++ vim70/src/memfile.c	2006-10-13 01:03:06.000000000 -0700
-@@ -517,7 +517,7 @@
- 	mf_ins_free(mfp, hp);	/* put *hp in the free list */
- }
- 
--#if defined(__MORPHOS__)
-+#if defined(__MORPHOS__) && defined(__libnix__)
- /* function is missing in MorphOS libnix version */
- extern unsigned long *__stdfiledes;
- 
-@@ -677,15 +677,19 @@
- #  else
- #   if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
- 	{
--#    if defined(__GNUC__) && !defined(__MORPHOS__)
-+#    if defined(__GNUC__) && !defined(__MORPHOS__) && defined(__libnix__)
- 	    /* Have function (in libnix at least),
- 	     * but ain't got no prototype anywhere. */
- 	    extern unsigned long fdtofh(int filedescriptor);
- #    endif
-+#    if !defined(__libnix__)
-+	    fflush(NULL);
-+#    else
- 	    BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
- 
- 	    if (fh != 0)
- 		Flush(fh);
-+#    endif
- 	}
- #   else /* assume Manx */
- 	    Flush(_devtab[mfp->mf_fd].fd);
-diff -Naur vim70.orig/src/memline.c vim70/src/memline.c
---- vim70.orig/src/memline.c	2006-04-20 14:00:21.000000000 -0700
-+++ vim70/src/memline.c	2006-10-13 01:03:11.000000000 -0700
-@@ -215,7 +215,7 @@
- #define ML_FLUSH	0x02	    /* flush locked block */
- #define ML_SIMPLE(x)	(x & 0x10)  /* DEL, INS or FIND */
- 
--static void ml_upd_block0 __ARGS((buf_T *buf, int setfname));
-+static void ml_upd_block0 __ARGS((buf_T *buf, int set_fname));
- static void set_b0_fname __ARGS((ZERO_BL *, buf_T *buf));
- static void set_b0_dir_flag __ARGS((ZERO_BL *b0p, buf_T *buf));
- #ifdef FEAT_MBYTE
-@@ -679,9 +679,9 @@
-  * Update the timestamp or the B0_SAME_DIR flag of the .swp file.
-  */
-     static void
--ml_upd_block0(buf, setfname)
-+ml_upd_block0(buf, set_fname)
-     buf_T	*buf;
--    int		setfname;
-+    int		set_fname;
- {
-     memfile_T	*mfp;
-     bhdr_T	*hp;
-@@ -695,7 +695,7 @@
- 	EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
-     else
-     {
--	if (setfname)
-+	if (set_fname)
- 	    set_b0_fname(b0p, buf);
- 	else
- 	    set_b0_dir_flag(b0p, buf);
-@@ -1633,6 +1633,7 @@
-     int		    fd;
-     struct block0   b0;
-     time_t	    x = (time_t)0;
-+    char	    *p;
- #ifdef UNIX
-     char_u	    uname[B0_UNAME_SIZE];
- #endif
-@@ -1652,8 +1653,11 @@
- #endif
- 	    MSG_PUTS(_("             dated: "));
- 	x = st.st_mtime;		    /* Manx C can't do &st.st_mtime */
--	MSG_PUTS(ctime(&x));		    /* includes '\n' */
--
-+	p = ctime(&x);			    /* includes '\n' */
-+	if (p == NULL)
-+	    MSG_PUTS("(invalid)\n");
-+	else
-+	    MSG_PUTS(p);
-     }
- 
-     /*
-@@ -3652,6 +3656,7 @@
- {
-     struct stat st;
-     time_t	x, sx;
-+    char	*p;
- 
-     ++no_wait_return;
-     (void)EMSG(_("E325: ATTENTION"));
-@@ -3666,7 +3671,11 @@
-     {
- 	MSG_PUTS(_("             dated: "));
- 	x = st.st_mtime;    /* Manx C can't do &st.st_mtime */
--	MSG_PUTS(ctime(&x));
-+	p = ctime(&x);			    /* includes '\n' */
-+	if (p == NULL)
-+	    MSG_PUTS("(invalid)\n");
-+	else
-+	    MSG_PUTS(p);
- 	if (sx != 0 && x > sx)
- 	    MSG_PUTS(_("      NEWER than swap file!\n"));
-     }
-diff -Naur vim70.orig/src/menu.c vim70/src/menu.c
---- vim70.orig/src/menu.c	2006-05-03 10:30:48.000000000 -0700
-+++ vim70/src/menu.c	2006-10-13 01:02:50.000000000 -0700
-@@ -511,6 +511,14 @@
- 	 * name (without mnemonic and accelerator text). */
- 	next_name = menu_name_skip(name);
- 	dname = menu_text(name, NULL, NULL);
-+	if (dname == NULL)
-+	    goto erret;
-+	if (*dname == NUL)
-+	{
-+	    /* Only a mnemonic or accelerator is not valid. */
-+	    EMSG(_("E792: Empty menu name"));
-+	    goto erret;
-+	}
- 
- 	/* See if it's already there */
- 	lower_pri = menup;
-@@ -704,6 +712,7 @@
- 	parent = menu;
- 	name = next_name;
- 	vim_free(dname);
-+	dname = NULL;
- 	if (pri_tab[pri_idx + 1] != -1)
- 	    ++pri_idx;
-     }
-@@ -793,6 +802,22 @@
- erret:
-     vim_free(path_name);
-     vim_free(dname);
-+
-+    /* Delete any empty submenu we added before discovering the error.  Repeat
-+     * for higher levels. */
-+    while (parent != NULL && parent->children == NULL)
-+    {
-+	if (parent->parent == NULL)
-+	    menup = &root_menu;
-+	else
-+	    menup = &parent->parent->children;
-+	for ( ; *menup != NULL && *menup != parent; menup = &((*menup)->next))
-+	    ;
-+	if (*menup == NULL) /* safety check */
-+	    break;
-+	parent = parent->parent;
-+	free_menu(menup);
-+    }
-     return FAIL;
- }
- 
-@@ -1753,6 +1778,27 @@
- }
- 
- /*
-+ * Check that a pointer appears in the menu tree.  Used to protect from using
-+ * a menu that was deleted after it was selected but before the event was
-+ * handled.
-+ * Return OK or FAIL.  Used recursively.
-+ */
-+    int
-+check_menu_pointer(root, menu_to_check)
-+    vimmenu_T *root;
-+    vimmenu_T *menu_to_check;
-+{
-+    vimmenu_T	*p;
-+
-+    for (p = root; p != NULL; p = p->next)
-+	if (p == menu_to_check
-+		|| (p->children != NULL
-+		    && check_menu_pointer(p->children, menu_to_check) == OK))
-+	    return OK;
-+    return FAIL;
-+}
-+
-+/*
-  * After we have started the GUI, then we can create any menus that have been
-  * defined.  This is done once here.  add_menu_path() may have already been
-  * called to define these menus, and may be called again.  This function calls
-diff -Naur vim70.orig/src/message.c vim70/src/message.c
---- vim70.orig/src/message.c	2006-05-06 13:07:37.000000000 -0700
-+++ vim70/src/message.c	2006-10-13 01:03:09.000000000 -0700
-@@ -1925,7 +1925,8 @@
- 	     * If screen is completely filled and 'more' is set then wait
- 	     * for a character.
- 	     */
--	    if (p_more && --lines_left == 0 && State != HITRETURN
-+	    --lines_left;
-+	    if (p_more && lines_left == 0 && State != HITRETURN
- 					    && !msg_no_more && !exmode_active)
- 	    {
- #ifdef FEAT_CON_DIALOG
-@@ -4123,8 +4124,6 @@
- 	    case 'c':
- 	    case 's':
- 		length_modifier = '\0';
--		zero_padding = 0;    /* turn zero padding off for string
--					conversions */
- 		str_arg_l = 1;
- 		switch (fmt_spec)
- 		{
-@@ -4175,15 +4174,16 @@
- 			str_arg_l = 0;
- 		    else
- 		    {
--			/* memchr on HP does not like n > 2^31  !!! */
--			char *q = memchr(str_arg, '\0',
-+			/* Don't put the #if inside memchr(), it can be a
-+			 * macro. */
- #if SIZEOF_INT <= 2
--				precision
-+			char *q = memchr(str_arg, '\0', precision);
- #else
--				precision <= (size_t)0x7fffffffL ? precision
--						       : (size_t)0x7fffffffL
-+			/* memchr on HP does not like n > 2^31  !!! */
-+			char *q = memchr(str_arg, '\0',
-+				  precision <= (size_t)0x7fffffffL ? precision
-+						       : (size_t)0x7fffffffL);
- #endif
--						       );
- 			str_arg_l = (q == NULL) ? precision : q - str_arg;
- 		    }
- 		    break;
-diff -Naur vim70.orig/src/misc1.c vim70/src/misc1.c
---- vim70.orig/src/misc1.c	2006-04-30 08:30:02.000000000 -0700
-+++ vim70/src/misc1.c	2006-10-13 01:03:06.000000000 -0700
-@@ -3016,6 +3016,7 @@
-     int		len = 0;
-     int		n;
-     int		save_mapped_ctrl_c = mapped_ctrl_c;
-+    int		waited = 0;
- 
-     mapped_ctrl_c = FALSE;	/* mappings are not used here */
-     for (;;)
-@@ -3034,11 +3035,16 @@
- 	    /* Replace zero and CSI by a special key code. */
- 	    n = fix_input_buffer(buf + len, n, FALSE);
- 	    len += n;
-+	    waited = 0;
- 	}
-+	else if (len > 0)
-+	    ++waited;	    /* keep track of the waiting time */
- 
--	/* incomplete termcode: get more characters */
--	if ((n = check_termcode(1, buf, len)) < 0)
-+	/* Incomplete termcode and not timed out yet: get more characters */
-+	if ((n = check_termcode(1, buf, len)) < 0
-+	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
- 	    continue;
-+
- 	/* found a termcode: adjust length */
- 	if (n > 0)
- 	    len = n;
-@@ -3196,14 +3202,12 @@
-     else
- 	MSG_PUTS(_("Choice number (<Enter> cancels): "));
- 
--    /* Set the state such that text can be selected/copied/pasted. */
-+    /* Set the state such that text can be selected/copied/pasted and we still
-+     * get mouse events. */
-     save_cmdline_row = cmdline_row;
--    cmdline_row = Rows - 1;
-+    cmdline_row = 0;
-     save_State = State;
--    if (mouse_used == NULL)
--	State = CMDLINE;
--    else
--	State = NORMAL;
-+    State = CMDLINE;
- 
-     i = get_number(TRUE, mouse_used);
-     if (KeyTyped)
-@@ -4492,7 +4496,7 @@
- 		int l = mb_ptr2len(s);
- 
- 		while (--l > 0)
--		    *d++ = *s++;
-+		    *d++ = *++s;
- 	    }
- # endif
- 	}
-@@ -8070,9 +8074,20 @@
- 		}
- 		if (*that == '"' && *(that + 1) != NUL)
- 		{
--		    that++;
--		    while (*that && (*that != '"' || *(that - 1) == '\\'))
--			++that;
-+		    while (*++that && *that != '"')
-+		    {
-+			/* skipping escaped characters in the string */
-+			if (*that == '\\')
-+			{
-+			    if (*++that == NUL)
-+				break;
-+			    if (that[1] == NUL)
-+			    {
-+				++that;
-+				break;
-+			    }
-+			}
-+		    }
- 		}
- 		if (*that == '(' || *that == '[')
- 		    ++parencount;
-diff -Naur vim70.orig/src/misc2.c vim70/src/misc2.c
---- vim70.orig/src/misc2.c	2006-05-04 05:12:38.000000000 -0700
-+++ vim70/src/misc2.c	2006-10-13 01:03:07.000000000 -0700
-@@ -1229,6 +1229,94 @@
-     return escaped_string;
- }
- 
-+#if defined(FEAT_EVAL) || defined(PROTO)
-+/*
-+ * Escape "string" for use as a shell argument with system().
-+ * This uses single quotes, except when we know we need to use double qoutes
-+ * (MS-DOS and MS-Windows without 'shellslash' set).
-+ * Returns the result in allocated memory, NULL if we have run out.
-+ */
-+    char_u *
-+vim_strsave_shellescape(string)
-+    char_u	*string;
-+{
-+    unsigned	length;
-+    char_u	*p;
-+    char_u	*d;
-+    char_u	*escaped_string;
-+
-+    /* First count the number of extra bytes required. */
-+    length = STRLEN(string) + 3;	/* two quotes and the trailing NUL */
-+    for (p = string; *p != NUL; mb_ptr_adv(p))
-+    {
-+# if defined(WIN32) || defined(WIN16) || defined(DOS)
-+	if (!p_ssl)
-+	{
-+	    if (*p == '"')
-+		++length;		/* " -> "" */
-+	}
-+	else
-+# endif
-+	if (*p == '\'')
-+	    length += 3;		/* ' => '\'' */
-+    }
-+
-+    /* Allocate memory for the result and fill it. */
-+    escaped_string = alloc(length);
-+    if (escaped_string != NULL)
-+    {
-+	d = escaped_string;
-+
-+	/* add opening quote */
-+# if defined(WIN32) || defined(WIN16) || defined(DOS)
-+	if (!p_ssl)
-+	    *d++ = '"';
-+	else
-+# endif
-+	    *d++ = '\'';
-+
-+	for (p = string; *p != NUL; )
-+	{
-+# if defined(WIN32) || defined(WIN16) || defined(DOS)
-+	    if (!p_ssl)
-+	    {
-+		if (*p == '"')
-+		{
-+		    *d++ = '"';
-+		    *d++ = '"';
-+		    ++p;
-+		    continue;
-+		}
-+	    }
-+	    else
-+# endif
-+	    if (*p == '\'')
-+	    {
-+		*d++='\'';
-+		*d++='\\';
-+		*d++='\'';
-+		*d++='\'';
-+		++p;
-+		continue;
-+	    }
-+
-+	    MB_COPY_CHAR(p, d);
-+	}
-+
-+	/* add terminating quote and finish with a NUL */
-+# if defined(WIN32) || defined(WIN16) || defined(DOS)
-+	if (!p_ssl)
-+	    *d++ = '"';
-+	else
-+# endif
-+	    *d++ = '\'';
-+	*d = NUL;
-+    }
-+
-+    return escaped_string;
-+}
-+#endif
-+
- /*
-  * Like vim_strsave(), but make all characters uppercase.
-  * This uses ASCII lower-to-upper case translation, language independent.
-diff -Naur vim70.orig/src/netbeans.c vim70/src/netbeans.c
---- vim70.orig/src/netbeans.c	2006-04-22 11:00:05.000000000 -0700
-+++ vim70/src/netbeans.c	2006-10-13 01:02:52.000000000 -0700
-@@ -103,7 +103,7 @@
- static int  inputHandler = -1;		/* simply ret.value of WSAAsyncSelect() */
- extern HWND s_hwnd;			/* Gvim's Window handle */
- #endif
--static int cmdno;			/* current command number for reply */
-+static int r_cmdno;			/* current command number for reply */
- static int haveConnection = FALSE;	/* socket is connected and
- 					   initialization is done */
- #ifdef FEAT_GUI_MOTIF
-@@ -832,11 +832,11 @@
- 	return;
-     }
- 
--    cmdno = strtol(q, &q, 10);
-+    r_cmdno = strtol(q, &q, 10);
- 
-     q = (char *)skipwhite((char_u *)q);
- 
--    if (nb_do_cmd(bufno, (char_u *)verb, isfunc, cmdno, (char_u *)q) == FAIL)
-+    if (nb_do_cmd(bufno, (char_u *)verb, isfunc, r_cmdno, (char_u *)q) == FAIL)
-     {
- #ifdef NBDEBUG
- 	/*
-@@ -1008,11 +1008,11 @@
- 	if (netbeansForcedQuit)
- 	{
- 	    /* mark as unmodified so NetBeans won't put up dialog on "killed" */
--	    sprintf(buf, "%d:unmodified=%d\n", i, cmdno);
-+	    sprintf(buf, "%d:unmodified=%d\n", i, r_cmdno);
- 	    nbdebug(("EVT: %s", buf));
- 	    nb_send(buf, "netbeans_end");
- 	}
--	sprintf(buf, "%d:killed=%d\n", i, cmdno);
-+	sprintf(buf, "%d:killed=%d\n", i, r_cmdno);
- 	nbdebug(("EVT: %s", buf));
- /*	nb_send(buf, "netbeans_end");    avoid "write failed" messages */
- 	if (sd >= 0)
-@@ -1986,6 +1986,8 @@
- 	    if (buf->bufp != NULL)
- 		do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD,
- 						     buf->bufp->b_fnum, TRUE);
-+	    buf->bufp = NULL;
-+	    buf->initDone = FALSE;
- 	    doupdate = 1;
- /* =====================================================================*/
- 	}
-@@ -2561,7 +2563,7 @@
- 	    if (p != NULL)
- 	    {
- 		vim_snprintf(buf, sizeof(buf),
--				       "0:balloonText=%d \"%s\"\n", cmdno, p);
-+				       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
- 		vim_free(p);
- 	    }
- 	    nbdebug(("EVT: %s", buf));
-@@ -2615,7 +2617,7 @@
- 
-     if (haveConnection)
-     {
--	sprintf(buf, "0:disconnect=%d\n", cmdno);
-+	sprintf(buf, "0:disconnect=%d\n", r_cmdno);
- 	nbdebug(("EVT: %s", buf));
- 	nb_send(buf, "netbeans_disconnect");
-     }
-@@ -2634,7 +2636,7 @@
- 	return;
- 
-     sprintf(buf, "0:geometry=%d %d %d %d %d\n",
--		    cmdno, (int)Columns, (int)Rows, new_x, new_y);
-+		    r_cmdno, (int)Columns, (int)Rows, new_x, new_y);
-     /*nbdebug(("EVT: %s", buf)); happens too many times during a move */
-     nb_send(buf, "netbeans_frame_moved");
- }
-@@ -2743,7 +2745,7 @@
-     if (bufno <= 0)
- 	return;
- 
--    sprintf(buffer, "%d:killed=%d\n", bufno, cmdno);
-+    sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno);
- 
-     nbdebug(("EVT: %s", buffer));
- 
-@@ -2817,7 +2819,8 @@
-     if (p != NULL)
-     {
- 	buf = alloc(128 + 2*newlen);
--	sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n", bufno, cmdno, off, p);
-+	sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n",
-+						      bufno, r_cmdno, off, p);
- 	nbdebug(("EVT: %s", buf));
- 	nb_send((char *)buf, "netbeans_inserted");
- 	vim_free(p);
-@@ -2859,7 +2862,7 @@
- 
-     off = pos2off(bufp, &pos);
- 
--    sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, cmdno, off, len);
-+    sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, r_cmdno, off, len);
-     nbdebug(("EVT: %s", buf));
-     nb_send((char *)buf, "netbeans_removed");
- }
-@@ -2884,7 +2887,7 @@
- 
-     nbbuf->modified = 0;
- 
--    sprintf((char *)buf, "%d:unmodified=%d\n", bufno, cmdno);
-+    sprintf((char *)buf, "%d:unmodified=%d\n", bufno, r_cmdno);
-     nbdebug(("EVT: %s", buf));
-     nb_send((char *)buf, "netbeans_unmodified");
- #endif
-@@ -2908,11 +2911,11 @@
- 	long off = pos2off(curbuf, &curwin->w_cursor);
- 
- 	/* sync the cursor position */
--	sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
-+	sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
- 	nbdebug(("EVT: %s", buf));
- 	nb_send(buf, "netbeans_button_release[newDotAndMark]");
- 
--	sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, cmdno,
-+	sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, r_cmdno,
- 				    button, (long)curwin->w_cursor.lnum, col);
- 	nbdebug(("EVT: %s", buf));
- 	nb_send(buf, "netbeans_button_release");
-@@ -2973,7 +2976,7 @@
- 
-     /* sync the cursor position */
-     off = pos2off(curbuf, &curwin->w_cursor);
--    sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
-+    sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
-     nbdebug(("EVT: %s", buf));
-     nb_send(buf, "netbeans_keycommand");
- 
-@@ -2984,13 +2987,13 @@
- 
-     /* now send keyCommand event */
-     vim_snprintf(buf, sizeof(buf), "%d:keyCommand=%d \"%s\"\n",
--						       bufno, cmdno, keyName);
-+						     bufno, r_cmdno, keyName);
-     nbdebug(("EVT: %s", buf));
-     nb_send(buf, "netbeans_keycommand");
- 
-     /* New: do both at once and include the lnum/col. */
-     vim_snprintf(buf, sizeof(buf), "%d:keyAtPos=%d \"%s\" %ld %ld/%ld\n",
--	    bufno, cmdno, keyName,
-+	    bufno, r_cmdno, keyName,
- 		off, (long)curwin->w_cursor.lnum, (long)curwin->w_cursor.col);
-     nbdebug(("EVT: %s", buf));
-     nb_send(buf, "netbeans_keycommand");
-@@ -3013,7 +3016,7 @@
- 
-     nbbuf->modified = 0;
- 
--    sprintf((char *)buf, "%d:save=%d\n", bufno, cmdno);
-+    sprintf((char *)buf, "%d:save=%d\n", bufno, r_cmdno);
-     nbdebug(("EVT: %s", buf));
-     nb_send((char *)buf, "netbeans_save_buffer");
- }
-@@ -3037,7 +3040,7 @@
-     if (nbbuf->insertDone)
- 	nbbuf->modified = 1;
- 
--    sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, cmdno);
-+    sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, r_cmdno);
-     nbdebug(("EVT(suppressed): %s", buf));
- /*     nb_send(buf, "netbeans_deleted_all_lines"); */
- }
-diff -Naur vim70.orig/src/normal.c vim70/src/normal.c
---- vim70.orig/src/normal.c	2006-04-29 06:11:18.000000000 -0700
-+++ vim70/src/normal.c	2006-10-13 01:03:10.000000000 -0700
-@@ -1477,14 +1477,17 @@
- 	}
- 	else if (VIsual_active)
- 	{
--	    /* Save the current VIsual area for '< and '> marks, and "gv" */
--	    curbuf->b_visual.vi_start = VIsual;
--	    curbuf->b_visual.vi_end = curwin->w_cursor;
--	    curbuf->b_visual.vi_mode = VIsual_mode;
--	    curbuf->b_visual.vi_curswant = curwin->w_curswant;
-+	    if (!gui_yank)
-+	    {
-+		/* Save the current VIsual area for '< and '> marks, and "gv" */
-+		curbuf->b_visual.vi_start = VIsual;
-+		curbuf->b_visual.vi_end = curwin->w_cursor;
-+		curbuf->b_visual.vi_mode = VIsual_mode;
-+		curbuf->b_visual.vi_curswant = curwin->w_curswant;
- # ifdef FEAT_EVAL
--	    curbuf->b_visual_mode_eval = VIsual_mode;
-+		curbuf->b_visual_mode_eval = VIsual_mode;
- # endif
-+	    }
- 
- 	    /* In Select mode, a linewise selection is operated upon like a
- 	     * characterwise selection. */
-@@ -2504,7 +2507,8 @@
- 	     * NOTE: Ignore right button down and drag mouse events.
- 	     * Windows only shows the popup menu on the button up event.
- 	     */
--#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON)
-+#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \
-+			  || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
- 	    if (!is_click)
- 		return FALSE;
- #endif
-@@ -4126,7 +4130,7 @@
-     int		save_p_ws;
-     int		save_p_scs;
-     int		retval = OK;
--    int		incl;
-+    int		incll;
- 
-     if ((pat = alloc(len + 7)) == NULL)
- 	return FAIL;
-@@ -4146,7 +4150,7 @@
-      * With "gd" Search back for the start of the current function, then go
-      * back until a blank line.  If this fails go to line 1.
-      */
--    if (!locally || !findpar(&incl, BACKWARD, 1L, '{', FALSE))
-+    if (!locally || !findpar(&incll, BACKWARD, 1L, '{', FALSE))
-     {
- 	setpcmark();			/* Set in findpar() otherwise */
- 	curwin->w_cursor.lnum = 1;
-diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
---- vim70.orig/src/ops.c	2006-04-30 08:13:44.000000000 -0700
-+++ vim70/src/ops.c	2006-10-13 01:03:09.000000000 -0700
-@@ -770,6 +770,7 @@
- {
-     char_u	*expr_copy;
-     char_u	*rv;
-+    static int	nested = 0;
- 
-     if (expr_line == NULL)
- 	return NULL;
-@@ -780,7 +781,14 @@
-     if (expr_copy == NULL)
- 	return NULL;
- 
-+    /* When we are invoked recursively limit the evaluation to 10 levels.
-+     * Then return the string as-is. */
-+    if (nested >= 10)
-+	return expr_copy;
-+
-+    ++nested;
-     rv = eval_to_string(expr_copy, NULL, TRUE);
-+    --nested;
-     vim_free(expr_copy);
-     return rv;
- }
-@@ -2413,6 +2421,7 @@
- 	else
- 	{
- 	    curwin->w_cursor = oap->end;
-+	    check_cursor_col();
- 
- 	    /* Works just like an 'i'nsert on the next character. */
- 	    if (!lineempty(curwin->w_cursor.lnum)
-@@ -3492,8 +3501,15 @@
- # endif
- 	if (flags & PUT_CURSEND)
- 	{
-+	    colnr_T len;
-+
- 	    curwin->w_cursor = curbuf->b_op_end;
- 	    curwin->w_cursor.col++;
-+
-+	    /* in Insert mode we might be after the NUL, correct for that */
-+	    len = (colnr_T)STRLEN(ml_get_curline());
-+	    if (curwin->w_cursor.col > len)
-+		curwin->w_cursor.col = len;
- 	}
- 	else
- 	    curwin->w_cursor.lnum = lnum;
-diff -Naur vim70.orig/src/option.c vim70/src/option.c
---- vim70.orig/src/option.c	2006-05-03 10:32:28.000000000 -0700
-+++ vim70/src/option.c	2006-10-13 01:02:56.000000000 -0700
-@@ -2294,7 +2294,7 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    },
--    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
-+    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
- #ifdef FEAT_SPELL
- 			    (char_u *)&p_sps, PV_NONE,
- 			    {(char_u *)"best", (char_u *)0L}
-@@ -5227,13 +5227,13 @@
- 	    case PV_STL:	return &curwin->w_p_stl_flags;
- #endif
- #ifdef FEAT_EVAL
-+# ifdef FEAT_FOLDING
- 	    case PV_FDE:	return &curwin->w_p_fde_flags;
- 	    case PV_FDT:	return &curwin->w_p_fdt_flags;
-+# endif
- # ifdef FEAT_BEVAL
- 	    case PV_BEXPR:	return &curbuf->b_p_bexpr_flags;
- # endif
--#endif
--#if defined(FEAT_EVAL)
- # if defined(FEAT_CINDENT)
- 	    case PV_INDE:	return &curbuf->b_p_inde_flags;
- # endif
-@@ -5268,45 +5268,46 @@
-     char_u	*s;
-     char_u	**varp;
-     int		both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
-+    int		idx = opt_idx;
- 
--    if (opt_idx == -1)		/* use name */
-+    if (idx == -1)		/* use name */
-     {
--	opt_idx = findoption(name);
--	if (opt_idx < 0)	/* not found (should not happen) */
-+	idx = findoption(name);
-+	if (idx < 0)	/* not found (should not happen) */
- 	{
- 	    EMSG2(_(e_intern2), "set_string_option_direct()");
- 	    return;
- 	}
-     }
- 
--    if (options[opt_idx].var == NULL)	/* can't set hidden option */
-+    if (options[idx].var == NULL)	/* can't set hidden option */
- 	return;
- 
-     s = vim_strsave(val);
-     if (s != NULL)
-     {
--	varp = (char_u **)get_varp_scope(&(options[opt_idx]),
-+	varp = (char_u **)get_varp_scope(&(options[idx]),
- 					       both ? OPT_LOCAL : opt_flags);
--	if ((opt_flags & OPT_FREE) && (options[opt_idx].flags & P_ALLOCED))
-+	if ((opt_flags & OPT_FREE) && (options[idx].flags & P_ALLOCED))
- 	    free_string_option(*varp);
- 	*varp = s;
- 
- 	/* For buffer/window local option may also set the global value. */
- 	if (both)
--	    set_string_option_global(opt_idx, varp);
-+	    set_string_option_global(idx, varp);
- 
--	options[opt_idx].flags |= P_ALLOCED;
-+	options[idx].flags |= P_ALLOCED;
- 
- 	/* When setting both values of a global option with a local value,
- 	 * make the local value empty, so that the global value is used. */
--	if (((int)options[opt_idx].indir & PV_BOTH) && both)
-+	if (((int)options[idx].indir & PV_BOTH) && both)
- 	{
- 	    free_string_option(*varp);
- 	    *varp = empty_option;
- 	}
- # ifdef FEAT_EVAL
- 	if (set_sid != SID_NONE)
--	    set_option_scriptID_idx(opt_idx, opt_flags,
-+	    set_option_scriptID_idx(idx, opt_flags,
- 					set_sid == 0 ? current_SID : set_sid);
- # endif
-     }
-@@ -6325,7 +6326,8 @@
- 	    else
- 		errmsg = check_stl_option(p_ruf);
- 	}
--	else
-+	/* check 'statusline' only if it doesn't start with "%!" */
-+	else if (varp != &p_stl || s[0] != '%' || s[1] != '!')
- 	    errmsg = check_stl_option(s);
- 	if (varp == &p_ruf && errmsg == NULL)
- 	    comp_col();
-@@ -7324,9 +7326,8 @@
- #ifdef FEAT_AUTOCHDIR
-     else if ((int *)varp == &p_acd)
-     {
--	if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	    shorten_fnames(TRUE);
-+	/* Change directories when the 'acd' option is set now. */
-+	DO_AUTOCHDIR
-     }
- #endif
- 
-diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
---- vim70.orig/src/os_unix.c	2006-05-01 01:13:15.000000000 -0700
-+++ vim70/src/os_unix.c	2006-10-13 01:02:52.000000000 -0700
-@@ -3934,7 +3934,7 @@
- 		    {
- 			linenr_T    lnum = curbuf->b_op_start.lnum;
- 			int	    written = 0;
--			char_u	    *p = ml_get(lnum);
-+			char_u	    *lp = ml_get(lnum);
- 			char_u	    *s;
- 			size_t	    l;
- 
-@@ -3942,17 +3942,17 @@
- 			close(fromshell_fd);
- 			for (;;)
- 			{
--			    l = STRLEN(p + written);
-+			    l = STRLEN(lp + written);
- 			    if (l == 0)
- 				len = 0;
--			    else if (p[written] == NL)
-+			    else if (lp[written] == NL)
- 				/* NL -> NUL translation */
- 				len = write(toshell_fd, "", (size_t)1);
- 			    else
- 			    {
--				s = vim_strchr(p + written, NL);
--				len = write(toshell_fd, (char *)p + written,
--					   s == NULL ? l : s - (p + written));
-+				s = vim_strchr(lp + written, NL);
-+				len = write(toshell_fd, (char *)lp + written,
-+					   s == NULL ? l : s - (lp + written));
- 			    }
- 			    if (len == l)
- 			    {
-@@ -3973,7 +3973,7 @@
- 				    toshell_fd = -1;
- 				    break;
- 				}
--				p = ml_get(lnum);
-+				lp = ml_get(lnum);
- 				written = 0;
- 			    }
- 			    else if (len > 0)
-@@ -5757,8 +5757,13 @@
-     int		retval_int = 0;
-     int		success = FALSE;
- 
--    /* Get a handle to the DLL module. */
-+    /*
-+     * Get a handle to the DLL module.
-+     */
- # if defined(USE_DLOPEN)
-+    /* First clear any error, it's not cleared by the dlopen() call. */
-+    (void)dlerror();
-+
-     hinstLib = dlopen((char *)libname, RTLD_LAZY
- #  ifdef RTLD_LOCAL
- 	    | RTLD_LOCAL
-diff -Naur vim70.orig/src/popupmnu.c vim70/src/popupmnu.c
---- vim70.orig/src/popupmnu.c	2006-04-20 13:18:37.000000000 -0700
-+++ vim70/src/popupmnu.c	2006-10-13 01:02:50.000000000 -0700
-@@ -552,6 +552,9 @@
- {
-     pum_array = NULL;
-     redraw_all_later(SOME_VALID);
-+#ifdef FEAT_WINDOWS
-+    redraw_tabline = TRUE;
-+#endif
-     status_redraw_all();
- }
- 
-diff -Naur vim70.orig/src/proto/buffer.pro vim70/src/proto/buffer.pro
---- vim70.orig/src/proto/buffer.pro	2006-05-07 06:08:29.000000000 -0700
-+++ vim70/src/proto/buffer.pro	2006-10-13 01:02:56.000000000 -0700
-@@ -10,6 +10,7 @@
- extern int do_buffer __ARGS((int action, int start, int dir, int count, int forceit));
- extern void set_curbuf __ARGS((buf_T *buf, int action));
- extern void enter_buffer __ARGS((buf_T *buf));
-+extern void do_autochdir __ARGS((void));
- extern buf_T *buflist_new __ARGS((char_u *ffname, char_u *sfname, linenr_T lnum, int flags));
- extern void free_buf_options __ARGS((buf_T *buf, int free_p_ff));
- extern int buflist_getfile __ARGS((int n, linenr_T lnum, int options, int forceit));
-diff -Naur vim70.orig/src/proto/menu.pro vim70/src/proto/menu.pro
---- vim70.orig/src/proto/menu.pro	2006-05-07 06:08:51.000000000 -0700
-+++ vim70/src/proto/menu.pro	2006-10-13 01:02:50.000000000 -0700
-@@ -10,6 +10,7 @@
- extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
- extern int menu_is_toolbar __ARGS((char_u *name));
- extern int menu_is_separator __ARGS((char_u *name));
-+extern int check_menu_pointer __ARGS((vimmenu_T *root, vimmenu_T *menu_to_check));
- extern void gui_create_initial_menus __ARGS((vimmenu_T *menu));
- extern void gui_update_menus __ARGS((int modes));
- extern int gui_is_menu_shortcut __ARGS((int key));
-diff -Naur vim70.orig/src/proto/misc2.pro vim70/src/proto/misc2.pro
---- vim70.orig/src/proto/misc2.pro	2006-05-07 06:08:54.000000000 -0700
-+++ vim70/src/proto/misc2.pro	2006-10-13 01:03:07.000000000 -0700
-@@ -29,6 +29,7 @@
- extern char_u *vim_strnsave __ARGS((char_u *string, int len));
- extern char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
- extern char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
-+extern char_u *vim_strsave_shellescape __ARGS((char_u *string));
- extern char_u *vim_strsave_up __ARGS((char_u *string));
- extern char_u *vim_strnsave_up __ARGS((char_u *string, int len));
- extern void vim_strup __ARGS((char_u *p));
-diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro
---- vim70.orig/src/proto/undo.pro	2006-05-07 06:09:11.000000000 -0700
-+++ vim70/src/proto/undo.pro	2006-10-13 01:02:47.000000000 -0700
-@@ -4,6 +4,7 @@
- extern int u_savesub __ARGS((linenr_T lnum));
- extern int u_inssub __ARGS((linenr_T lnum));
- extern int u_savedel __ARGS((linenr_T lnum, long nlines));
-+extern int undo_allowed __ARGS((void));
- extern void u_undo __ARGS((int count));
- extern void u_redo __ARGS((int count));
- extern void undo_time __ARGS((long step, int sec, int absolute));
-diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
---- vim70.orig/src/quickfix.c	2006-05-03 00:47:42.000000000 -0700
-+++ vim70/src/quickfix.c	2006-10-13 01:02:56.000000000 -0700
-@@ -500,8 +500,6 @@
- 	{
- 	    if (tv != NULL)
- 	    {
--		int len;
--
- 		if (tv->v_type == VAR_STRING)
- 		{
- 		    /* Get the next line from the supplied string */
-@@ -602,13 +600,19 @@
- 		else
- 		    type = 0;
- 		/*
--		 * Extract error message data from matched line
-+		 * Extract error message data from matched line.
-+		 * We check for an actual submatch, because "\[" and "\]" in
-+		 * the 'errorformat' may cause the wrong submatch to be used.
- 		 */
- 		if ((i = (int)fmt_ptr->addr[0]) > 0)		/* %f */
- 		{
--		    int c = *regmatch.endp[i];
-+		    int c;
-+
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 
- 		    /* Expand ~/file and $HOME/file to full path. */
-+		    c = *regmatch.endp[i];
- 		    *regmatch.endp[i] = NUL;
- 		    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
- 		    *regmatch.endp[i] = c;
-@@ -618,35 +622,63 @@
- 			continue;
- 		}
- 		if ((i = (int)fmt_ptr->addr[1]) > 0)		/* %n */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    enr = (int)atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[2]) > 0)		/* %l */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    lnum = atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[3]) > 0)		/* %c */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    col = (int)atol((char *)regmatch.startp[i]);
-+		}
- 		if ((i = (int)fmt_ptr->addr[4]) > 0)		/* %t */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    type = *regmatch.startp[i];
-+		}
- 		if (fmt_ptr->flags == '+' && !multiscan)	/* %+ */
- 		    STRCPY(errmsg, IObuff);
- 		else if ((i = (int)fmt_ptr->addr[5]) > 0)	/* %m */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
- 		    vim_strncpy(errmsg, regmatch.startp[i], len);
- 		}
- 		if ((i = (int)fmt_ptr->addr[6]) > 0)		/* %r */
-+		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    tail = regmatch.startp[i];
-+		}
- 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
- 		    if (*((char_u *)regmatch.startp[i]) != TAB)
- 			use_viscol = TRUE;
- 		}
- 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
- 		{
-+		    if (regmatch.startp[i] == NULL)
-+			continue;
- 		    col = (int)atol((char *)regmatch.startp[i]);
- 		    use_viscol = TRUE;
- 		}
- 		if ((i = (int)fmt_ptr->addr[9]) > 0)		/* %s */
- 		{
-+		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
-+			continue;
- 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
- 		    if (len > CMDBUFFSIZE - 5)
- 			len = CMDBUFFSIZE - 5;
-@@ -2429,32 +2461,19 @@
-     qf_info_T	*qi;
- {
-     buf_T	*buf;
--#ifdef FEAT_AUTOCMD
-     aco_save_T	aco;
--#else
--    buf_T	*save_curbuf;
--#endif
- 
-     /* Check if a buffer for the quickfix list exists.  Update it. */
-     buf = qf_find_buf(qi);
-     if (buf != NULL)
-     {
--#ifdef FEAT_AUTOCMD
- 	/* set curwin/curbuf to buf and save a few things */
- 	aucmd_prepbuf(&aco, buf);
--#else
--	save_curbuf = curbuf;
--	curbuf = buf;
--#endif
- 
- 	qf_fill_buffer(qi);
- 
--#ifdef FEAT_AUTOCMD
- 	/* restore curwin/curbuf and a few other things */
- 	aucmd_restbuf(&aco);
--#else
--	curbuf = save_curbuf;
--#endif
- 
- 	(void)qf_win_pos_update(qi, 0);
-     }
-@@ -2943,10 +2962,8 @@
- #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
-     char_u	*save_ei = NULL;
- #endif
--#ifndef FEAT_AUTOCMD
--    buf_T	*save_curbuf;
--#else
-     aco_save_T	aco;
-+#ifdef FEAT_AUTOCMD
-     char_u	*au_name =  NULL;
-     int		flags = 0;
-     colnr_T	col;
-@@ -3167,24 +3184,13 @@
- 		     * need to be done now, in that buffer.  And the modelines
- 		     * need to be done (again).  But not the window-local
- 		     * options! */
--#if defined(FEAT_AUTOCMD)
- 		    aucmd_prepbuf(&aco, buf);
--#else
--		    save_curbuf = curbuf;
--		    curbuf = buf;
--		    curwin->w_buffer = curbuf;
--#endif
- #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
- 		    apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
- 						     buf->b_fname, TRUE, buf);
- #endif
- 		    do_modelines(OPT_NOWIN);
--#if defined(FEAT_AUTOCMD)
- 		    aucmd_restbuf(&aco);
--#else
--		    curbuf = save_curbuf;
--		    curwin->w_buffer = curbuf;
--#endif
- 		}
- 	    }
- 	}
-@@ -3285,11 +3291,7 @@
- {
-     buf_T	*newbuf;
-     int		failed = TRUE;
--#ifdef FEAT_AUTOCMD
-     aco_save_T	aco;
--#else
--    buf_T	*old_curbuf = curbuf;
--#endif
- 
-     /* Allocate a buffer without putting it in the buffer list. */
-     newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
-@@ -3299,13 +3301,8 @@
-     /* Init the options. */
-     buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
- 
--#ifdef FEAT_AUTOCMD
-     /* set curwin/curbuf to buf and save a few things */
-     aucmd_prepbuf(&aco, newbuf);
--#else
--    curbuf = newbuf;
--    curwin->w_buffer = newbuf;
--#endif
- 
-     /* Need to set the filename for autocommands. */
-     (void)setfname(curbuf, fname, NULL, FALSE);
-@@ -3336,13 +3333,8 @@
- 	}
-     }
- 
--#ifdef FEAT_AUTOCMD
-     /* restore curwin/curbuf and a few other things */
-     aucmd_restbuf(&aco);
--#else
--    curbuf = old_curbuf;
--    curwin->w_buffer = old_curbuf;
--#endif
- 
-     if (!buf_valid(newbuf))
- 	return NULL;
-@@ -3434,8 +3426,10 @@
- 	  || dict_add_nr_str(dict, "col",   (long)qfp->qf_col, NULL) == FAIL
- 	  || dict_add_nr_str(dict, "vcol",  (long)qfp->qf_viscol, NULL) == FAIL
- 	  || dict_add_nr_str(dict, "nr",    (long)qfp->qf_nr, NULL) == FAIL
--	  || dict_add_nr_str(dict, "pattern",  0L, qfp->qf_pattern) == FAIL
--	  || dict_add_nr_str(dict, "text",  0L, qfp->qf_text) == FAIL
-+	  || dict_add_nr_str(dict, "pattern",  0L,
-+	     qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
-+	  || dict_add_nr_str(dict, "text",  0L,
-+		   qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
- 	  || dict_add_nr_str(dict, "type",  0L, buf) == FAIL
- 	  || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
- 	    return FAIL;
-diff -Naur vim70.orig/src/regexp.c vim70/src/regexp.c
---- vim70.orig/src/regexp.c	2006-04-30 08:31:50.000000000 -0700
-+++ vim70/src/regexp.c	2006-10-13 01:02:53.000000000 -0700
-@@ -3912,7 +3912,7 @@
- 		{
- 		    colnr_T	    start, end;
- 		    colnr_T	    start2, end2;
--		    colnr_T	    col;
-+		    colnr_T	    cols;
- 
- 		    getvvcol(wp, &top, &start, NULL, &end);
- 		    getvvcol(wp, &bot, &start2, NULL, &end2);
-@@ -3922,9 +3922,9 @@
- 			end = end2;
- 		    if (top.col == MAXCOL || bot.col == MAXCOL)
- 			end = MAXCOL;
--		    col = win_linetabsize(wp,
-+		    cols = win_linetabsize(wp,
- 				      regline, (colnr_T)(reginput - regline));
--		    if (col < start || col > end - (*p_sel == 'e'))
-+		    if (cols < start || cols > end - (*p_sel == 'e'))
- 			status = RA_NOMATCH;
- 		}
- 	    }
-@@ -4253,7 +4253,7 @@
- 	    {
- 		int	i, len;
- 		char_u	*opnd;
--		int	opndc, inpc;
-+		int	opndc = 0, inpc;
- 
- 		opnd = OPERAND(scan);
- 		/* Safety check (just in case 'encoding' was changed since
-diff -Naur vim70.orig/src/screen.c vim70/src/screen.c
---- vim70.orig/src/screen.c	2006-05-05 03:13:55.000000000 -0700
-+++ vim70/src/screen.c	2006-10-13 01:03:09.000000000 -0700
-@@ -1228,7 +1228,14 @@
- 	{
- 	    mid_end = wp->w_height;
- 	    if (lastwin == firstwin)
-+	    {
- 		screenclear();
-+#ifdef FEAT_WINDOWS
-+		/* The screen was cleared, redraw the tab pages line. */
-+		if (redraw_tabline)
-+		    draw_tabline();
-+#endif
-+	    }
- 	}
-     }
-     else
-@@ -2612,7 +2619,8 @@
- #ifdef FEAT_LINEBREAK
-     int		need_showbreak = FALSE;
- #endif
--#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS))
-+#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
-+	|| defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
- # define LINE_ATTR
-     int		line_attr = 0;		/* atrribute for the whole line */
- #endif
-@@ -2626,7 +2634,7 @@
-     int		prev_c = 0;		/* previous Arabic character */
-     int		prev_c1 = 0;		/* first composing char for prev_c */
- #endif
--#if defined(FEAT_DIFF) || defined(LINE_ATTR)
-+#if defined(LINE_ATTR)
-     int		did_line_attr = 0;
- #endif
- 
-@@ -4116,17 +4124,12 @@
- 		    --ptr;	    /* put it back at the NUL */
- 		}
- #endif
--#if defined(FEAT_DIFF) || defined(LINE_ATTR)
-+#if defined(LINE_ATTR)
- 		else if ((
- # ifdef FEAT_DIFF
--			    diff_hlf != (hlf_T)0
--#  ifdef LINE_ATTR
--			    ||
--#  endif
-+			    diff_hlf != (hlf_T)0 ||
- # endif
--# ifdef LINE_ATTR
- 			    line_attr != 0
--# endif
- 			) && (
- # ifdef FEAT_RIGHTLEFT
- 			    wp->w_p_rl ? (col >= 0) :
-@@ -4237,7 +4240,7 @@
- 	 * At end of the text line or just after the last character.
- 	 */
- 	if (c == NUL
--#if defined(FEAT_DIFF) || defined(LINE_ATTR)
-+#if defined(LINE_ATTR)
- 		|| did_line_attr == 1
- #endif
- 		)
-@@ -4258,7 +4261,7 @@
- 				|| prevcol == (long)match_hl[0].startcol
- 				|| prevcol == (long)match_hl[1].startcol
- 				|| prevcol == (long)match_hl[2].startcol)
--# if defined(FEAT_DIFF) || defined(LINE_ATTR)
-+# if defined(LINE_ATTR)
- 			    && did_line_attr <= 1
- # endif
- 			   )
-@@ -5076,15 +5079,38 @@
- 	     * character too.  If we didn't skip any blanks above, then we
- 	     * only redraw if the character wasn't already redrawn anyway.
- 	     */
--	    if (gui.in_use && (col > startCol || !redraw_this)
--# ifdef FEAT_MBYTE
--		    && enc_dbcs == 0
--# endif
--	       )
-+	    if (gui.in_use && (col > startCol || !redraw_this))
- 	    {
- 		hl = ScreenAttrs[off_to];
- 		if (hl > HL_ALL || (hl & HL_BOLD))
--		    screen_char(off_to - 1, row, col + coloff - 1);
-+		{
-+		    int prev_cells = 1;
-+# ifdef FEAT_MBYTE
-+		    if (enc_utf8)
-+			/* for utf-8, ScreenLines[char_offset + 1] == 0 means
-+			 * that its width is 2. */
-+			prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1;
-+		    else if (enc_dbcs != 0)
-+		    {
-+			/* find previous character by counting from first
-+			 * column and get its width. */
-+			unsigned off = LineOffset[row];
-+
-+			while (off < off_to)
-+			{
-+			    prev_cells = (*mb_off2cells)(off);
-+			    off += prev_cells;
-+			}
-+		    }
-+
-+		    if (enc_dbcs != 0 && prev_cells > 1)
-+			screen_char_2(off_to - prev_cells, row,
-+						   col + coloff - prev_cells);
-+		    else
-+# endif
-+			screen_char(off_to - prev_cells, row,
-+						   col + coloff - prev_cells);
-+		}
- 	    }
- #endif
- 	    screen_fill(row, row + 1, col + coloff, clear_width + coloff,
-@@ -7103,7 +7129,7 @@
-     tabpage_T	    *tp;
- #endif
-     static int	    entered = FALSE;		/* avoid recursiveness */
--    static int	    did_outofmem_msg = FALSE;	/* did outofmem message */
-+    static int	    done_outofmem_msg = FALSE;	/* did outofmem message */
- 
-     /*
-      * Allocation of the screen buffers is done only when the size changes and
-@@ -7133,6 +7159,12 @@
- 	return;
-     entered = TRUE;
- 
-+    /*
-+     * Note that the window sizes are updated before reallocating the arrays,
-+     * thus we must not redraw here!
-+     */
-+    ++RedrawingDisabled;
-+
-     win_new_shellsize();    /* fit the windows in the new sized shell */
- 
-     comp_col();		/* recompute columns for shown command and ruler */
-@@ -7205,14 +7237,14 @@
- #endif
- 	    || outofmem)
-     {
--	if (ScreenLines != NULL || !did_outofmem_msg)
-+	if (ScreenLines != NULL || !done_outofmem_msg)
- 	{
- 	    /* guess the size */
- 	    do_outofmem_msg((long_u)((Rows + 1) * Columns));
- 
- 	    /* Remember we did this to avoid getting outofmem messages over
- 	     * and over again. */
--	    did_outofmem_msg = TRUE;
-+	    done_outofmem_msg = TRUE;
- 	}
- 	vim_free(new_ScreenLines);
- 	new_ScreenLines = NULL;
-@@ -7240,7 +7272,7 @@
-     }
-     else
-     {
--	did_outofmem_msg = FALSE;
-+	done_outofmem_msg = FALSE;
- 
- 	for (new_row = 0; new_row < Rows; ++new_row)
- 	{
-@@ -7367,6 +7399,7 @@
- #endif
- 
-     entered = FALSE;
-+    --RedrawingDisabled;
- 
- #ifdef FEAT_AUTOCMD
-     if (starting == 0)
-diff -Naur vim70.orig/src/search.c vim70/src/search.c
---- vim70.orig/src/search.c	2006-05-05 05:12:13.000000000 -0700
-+++ vim70/src/search.c	2006-10-13 01:02:53.000000000 -0700
-@@ -1259,7 +1259,7 @@
- 	/*
- 	 * Add character and/or line offset
- 	 */
--	if (!(options & SEARCH_NOOF) || *pat == ';')
-+	if (!(options & SEARCH_NOOF) || (pat != NULL && *pat == ';'))
- 	{
- 	    if (spats[0].off.line)	/* Add the offset to the line number. */
- 	    {
-@@ -4826,15 +4826,20 @@
- 
- 		if ((compl_cont_status & CONT_ADDING) && i == compl_length)
- 		{
--		    /* get the next line */
- 		    /* IOSIZE > compl_length, so the STRNCPY works */
- 		    STRNCPY(IObuff, aux, i);
--		    if (!(     depth < 0
--			    && lnum < end_lnum
--			    && (line = ml_get(++lnum)) != NULL)
--			&& !(	depth >= 0
--			    && !vim_fgets(line = file_line,
--						     LSIZE, files[depth].fp)))
-+
-+		    /* Get the next line: when "depth" < 0  from the current
-+		     * buffer, otherwise from the included file.  Jump to
-+		     * exit_matched when past the last line. */
-+		    if (depth < 0)
-+		    {
-+			if (lnum >= end_lnum)
-+			    goto exit_matched;
-+			line = ml_get(++lnum);
-+		    }
-+		    else if (vim_fgets(line = file_line,
-+						      LSIZE, files[depth].fp))
- 			goto exit_matched;
- 
- 		    /* we read a line, set "already" to check this "line" later
-@@ -4871,7 +4876,7 @@
- 			goto exit_matched;
- 		}
- 
--		add_r = ins_compl_add_infercase(aux, i, FALSE,
-+		add_r = ins_compl_add_infercase(aux, i, p_ic,
- 			curr_fname == curbuf->b_fname ? NULL : curr_fname,
- 			dir, reuse);
- 		if (add_r == OK)
-diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
---- vim70.orig/src/spell.c	2006-05-05 00:49:58.000000000 -0700
-+++ vim70/src/spell.c	2006-10-13 01:03:05.000000000 -0700
-@@ -1483,7 +1483,7 @@
- 	    else if ((mode == FIND_COMPOUND || mode == FIND_KEEPCOMPOUND
- 								|| !word_ends))
- 	    {
--		/* If there is no  flag or the word is shorter than
-+		/* If there is no compound flag or the word is shorter than
- 		 * COMPOUNDMIN reject it quickly.
- 		 * Makes you wonder why someone puts a compound flag on a word
- 		 * that's too short...  Myspell compatibility requires this
-@@ -2043,8 +2043,8 @@
-     int		len;
- # ifdef FEAT_SYN_HL
-     int		has_syntax = syntax_present(wp->w_buffer);
--    int		col;
- # endif
-+    int		col;
-     int		can_spell;
-     char_u	*buf = NULL;
-     int		buflen = 0;
-@@ -2093,9 +2093,8 @@
- 	    capcol = (int)(skipwhite(line) - line);
- 	else if (curline && wp == curwin)
- 	{
--	    int	    col = (int)(skipwhite(line) - line);
--
- 	    /* For spellbadword(): check if first word needs a capital. */
-+	    col = (int)(skipwhite(line) - line);
- 	    if (check_need_cap(lnum, col))
- 		capcol = col;
- 
-@@ -2108,7 +2107,8 @@
- 	 * possible. */
- 	STRCPY(buf, line);
- 	if (lnum < wp->w_buffer->b_ml.ml_line_count)
--	    spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
-+	    spell_cat_line(buf + STRLEN(buf),
-+			  ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
- 
- 	p = buf + skip;
- 	endp = buf + len;
-@@ -5060,7 +5060,7 @@
-     int		do_rep;
-     int		do_repsal;
-     int		do_sal;
--    int		do_map;
-+    int		do_mapline;
-     int		found_map = FALSE;
-     hashitem_T	*hi;
-     int		l;
-@@ -5098,7 +5098,7 @@
-     do_sal = spin->si_sal.ga_len == 0;
- 
-     /* Only do MAP lines when not done in another .aff file already. */
--    do_map = spin->si_map.ga_len == 0;
-+    do_mapline = spin->si_map.ga_len == 0;
- 
-     /*
-      * Allocate and init the afffile_T structure.
-@@ -5780,7 +5780,7 @@
- 			smsg((char_u *)_("Expected MAP count in %s line %d"),
- 								 fname, lnum);
- 		}
--		else if (do_map)
-+		else if (do_mapline)
- 		{
- 		    int		c;
- 
-@@ -7507,7 +7507,7 @@
- {
-     char_u	*p = p_msm;
-     long	start = 0;
--    long	inc = 0;
-+    long	incr = 0;
-     long	added = 0;
- 
-     if (!VIM_ISDIGIT(*p))
-@@ -7519,7 +7519,7 @@
-     ++p;
-     if (!VIM_ISDIGIT(*p))
- 	return FAIL;
--    inc = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
-+    incr = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
-     if (*p != ',')
- 	return FAIL;
-     ++p;
-@@ -7529,11 +7529,11 @@
-     if (*p != NUL)
- 	return FAIL;
- 
--    if (start == 0 || inc == 0 || added == 0 || inc > start)
-+    if (start == 0 || incr == 0 || added == 0 || incr > start)
- 	return FAIL;
- 
-     compress_start = start;
--    compress_inc = inc;
-+    compress_inc = incr;
-     compress_added = added;
-     return OK;
- }
-@@ -8291,14 +8291,14 @@
-  * Returns the number of nodes used.
-  */
-     static int
--put_node(fd, node, index, regionmask, prefixtree)
-+put_node(fd, node, idx, regionmask, prefixtree)
-     FILE	*fd;		/* NULL when only counting */
-     wordnode_T	*node;
--    int		index;
-+    int		idx;
-     int		regionmask;
-     int		prefixtree;	/* TRUE for PREFIXTREE */
- {
--    int		newindex = index;
-+    int		newindex = idx;
-     int		siblingcount = 0;
-     wordnode_T	*np;
-     int		flags;
-@@ -8308,7 +8308,7 @@
- 	return 0;
- 
-     /* Store the index where this node is written. */
--    node->wn_u1.index = index;
-+    node->wn_u1.index = idx;
- 
-     /* Count the number of siblings. */
-     for (np = node; np != NULL; np = np->wn_sibling)
-@@ -9243,15 +9243,15 @@
-  * Add "word[len]" to 'spellfile' as a good or bad word.
-  */
-     void
--spell_add_word(word, len, bad, index, undo)
-+spell_add_word(word, len, bad, idx, undo)
-     char_u	*word;
-     int		len;
-     int		bad;
--    int		index;	    /* "zG" and "zW": zero, otherwise index in
-+    int		idx;	    /* "zG" and "zW": zero, otherwise index in
- 			       'spellfile' */
-     int		undo;	    /* TRUE for "zug", "zuG", "zuw" and "zuW" */
- {
--    FILE	*fd;
-+    FILE	*fd = NULL;
-     buf_T	*buf = NULL;
-     int		new_spf = FALSE;
-     char_u	*fname;
-@@ -9261,7 +9261,7 @@
-     int		i;
-     char_u	*spf;
- 
--    if (index == 0)	    /* use internal wordlist */
-+    if (idx == 0)	    /* use internal wordlist */
-     {
- 	if (int_wordlist == NULL)
- 	{
-@@ -9289,11 +9289,11 @@
- 	for (spf = curbuf->b_p_spf, i = 1; *spf != NUL; ++i)
- 	{
- 	    copy_option_part(&spf, fnamebuf, MAXPATHL, ",");
--	    if (i == index)
-+	    if (i == idx)
- 		break;
- 	    if (*spf == NUL)
- 	    {
--		EMSGN(_("E765: 'spellfile' does not have %ld entries"), index);
-+		EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
- 		return;
- 	    }
- 	}
-@@ -9336,7 +9336,10 @@
- 		    {
- 			fputc('#', fd);
- 			if (undo)
-+			{
-+			    home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
- 			    smsg((char_u *)_("Word removed from %s"), NameBuff);
-+			}
- 		    }
- 		    fseek(fd, fpos_next, SEEK_SET);
- 		}
-@@ -9344,20 +9347,27 @@
- 	    fclose(fd);
- 	}
-     }
--    else
-+
-+    if (!undo)
-     {
- 	fd = mch_fopen((char *)fname, "a");
- 	if (fd == NULL && new_spf)
- 	{
-+	    char_u *p;
-+
- 	    /* We just initialized the 'spellfile' option and can't open the
- 	     * file.  We may need to create the "spell" directory first.  We
- 	     * already checked the runtime directory is writable in
- 	     * init_spellfile(). */
--	    if (!dir_of_file_exists(fname))
-+	    if (!dir_of_file_exists(fname) && (p = gettail_sep(fname)) != fname)
- 	    {
-+		int c = *p;
-+
- 		/* The directory doesn't exist.  Try creating it and opening
- 		 * the file again. */
--		vim_mkdir(NameBuff, 0755);
-+		*p = NUL;
-+		vim_mkdir(fname, 0755);
-+		*p = c;
- 		fd = mch_fopen((char *)fname, "a");
- 	    }
- 	}
-@@ -10070,6 +10080,7 @@
- 
- 	/* List the suggestions. */
- 	msg_start();
-+	msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
- 	lines_left = Rows;	/* avoid more prompt */
- 	vim_snprintf((char *)IObuff, IOSIZE, _("Change \"%.*s\" to:"),
- 						sug.su_badlen, sug.su_badptr);
-@@ -13579,53 +13590,58 @@
- 	 * the first "the" to itself. */
- 	return;
- 
--    /* Check if the word is already there.  Also check the length that is
--     * being replaced "thes," -> "these" is a different suggestion from
--     * "thes" -> "these". */
--    stp = &SUG(*gap, 0);
--    for (i = gap->ga_len; --i >= 0; ++stp)
--	if (stp->st_wordlen == goodlen
--		&& stp->st_orglen == badlen
--		&& STRNCMP(stp->st_word, goodword, goodlen) == 0)
--	{
--	    /*
--	     * Found it.  Remember the word with the lowest score.
--	     */
--	    if (stp->st_slang == NULL)
--		stp->st_slang = slang;
-+    if (gap->ga_len == 0)
-+	i = -1;
-+    else
-+    {
-+	/* Check if the word is already there.  Also check the length that is
-+	 * being replaced "thes," -> "these" is a different suggestion from
-+	 * "thes" -> "these". */
-+	stp = &SUG(*gap, 0);
-+	for (i = gap->ga_len; --i >= 0; ++stp)
-+	    if (stp->st_wordlen == goodlen
-+		    && stp->st_orglen == badlen
-+		    && STRNCMP(stp->st_word, goodword, goodlen) == 0)
-+	    {
-+		/*
-+		 * Found it.  Remember the word with the lowest score.
-+		 */
-+		if (stp->st_slang == NULL)
-+		    stp->st_slang = slang;
- 
--	    new_sug.st_score = score;
--	    new_sug.st_altscore = altscore;
--	    new_sug.st_had_bonus = had_bonus;
-+		new_sug.st_score = score;
-+		new_sug.st_altscore = altscore;
-+		new_sug.st_had_bonus = had_bonus;
-+
-+		if (stp->st_had_bonus != had_bonus)
-+		{
-+		    /* Only one of the two had the soundalike score computed.
-+		     * Need to do that for the other one now, otherwise the
-+		     * scores can't be compared.  This happens because
-+		     * suggest_try_change() doesn't compute the soundalike
-+		     * word to keep it fast, while some special methods set
-+		     * the soundalike score to zero. */
-+		    if (had_bonus)
-+			rescore_one(su, stp);
-+		    else
-+		    {
-+			new_sug.st_word = stp->st_word;
-+			new_sug.st_wordlen = stp->st_wordlen;
-+			new_sug.st_slang = stp->st_slang;
-+			new_sug.st_orglen = badlen;
-+			rescore_one(su, &new_sug);
-+		    }
-+		}
- 
--	    if (stp->st_had_bonus != had_bonus)
--	    {
--		/* Only one of the two had the soundalike score computed.
--		 * Need to do that for the other one now, otherwise the
--		 * scores can't be compared.  This happens because
--		 * suggest_try_change() doesn't compute the soundalike
--		 * word to keep it fast, while some special methods set
--		 * the soundalike score to zero. */
--		if (had_bonus)
--		    rescore_one(su, stp);
--		else
-+		if (stp->st_score > new_sug.st_score)
- 		{
--		    new_sug.st_word = stp->st_word;
--		    new_sug.st_wordlen = stp->st_wordlen;
--		    new_sug.st_slang = stp->st_slang;
--		    new_sug.st_orglen = badlen;
--		    rescore_one(su, &new_sug);
-+		    stp->st_score = new_sug.st_score;
-+		    stp->st_altscore = new_sug.st_altscore;
-+		    stp->st_had_bonus = new_sug.st_had_bonus;
- 		}
-+		break;
- 	    }
--
--	    if (stp->st_score > new_sug.st_score)
--	    {
--		stp->st_score = new_sug.st_score;
--		stp->st_altscore = new_sug.st_altscore;
--		stp->st_had_bonus = new_sug.st_had_bonus;
--	    }
--	    break;
--	}
-+    }
- 
-     if (i < 0 && ga_grow(gap, 1) == OK)
-     {
-@@ -15656,7 +15672,7 @@
- 		    ? MB_STRNICMP(p, pat, STRLEN(pat)) == 0
- 		    : STRNCMP(p, pat, STRLEN(pat)) == 0)
- 		&& ins_compl_add_infercase(p, (int)STRLEN(p),
--					  FALSE, NULL, *dir, 0) == OK)
-+					  p_ic, NULL, *dir, 0) == OK)
- 	/* if dir was BACKWARD then honor it just once */
- 	*dir = FORWARD;
- }
-diff -Naur vim70.orig/src/structs.h vim70/src/structs.h
---- vim70.orig/src/structs.h	2006-04-09 10:57:46.000000000 -0700
-+++ vim70/src/structs.h	2006-10-13 01:02:50.000000000 -0700
-@@ -2213,18 +2213,20 @@
- 
- /*
-  * Struct to save values in before executing autocommands for a buffer that is
-- * not the current buffer.
-+ * not the current buffer.  Without FEAT_AUTOCMD only "curbuf" is remembered.
-  */
- typedef struct
- {
-     buf_T	*save_buf;	/* saved curbuf */
-+#ifdef FEAT_AUTOCMD
-     buf_T	*new_curbuf;	/* buffer to be used */
-     win_T	*save_curwin;	/* saved curwin, NULL if it didn't change */
-     win_T	*new_curwin;	/* new curwin if save_curwin != NULL */
-     pos_T	save_cursor;	/* saved cursor pos of save_curwin */
-     linenr_T	save_topline;	/* saved topline of save_curwin */
--#ifdef FEAT_DIFF
-+# ifdef FEAT_DIFF
-     int		save_topfill;	/* saved topfill of save_curwin */
-+# endif
- #endif
- } aco_save_T;
- 
-diff -Naur vim70.orig/src/syntax.c vim70/src/syntax.c
---- vim70.orig/src/syntax.c	2006-04-26 05:49:45.000000000 -0700
-+++ vim70/src/syntax.c	2006-10-13 01:03:08.000000000 -0700
-@@ -977,6 +977,7 @@
- {
-     stateitem_T	*cur_si;
-     int		i;
-+    int		seen_keepend;
- 
-     if (startofline)
-     {
-@@ -1002,7 +1003,10 @@
-     /*
-      * Need to update the end of a start/skip/end that continues from the
-      * previous line.  And regions that have "keepend", because they may
--     * influence contained items.
-+     * influence contained items.  If we've just removed "extend"
-+     * (startofline == 0) then we should update ends of normal regions
-+     * contained inside "keepend" because "extend" could have extended
-+     * these "keepend" regions as well as contained normal regions.
-      * Then check for items ending in column 0.
-      */
-     i = current_state.ga_len - 1;
-@@ -1010,10 +1014,13 @@
- 	for ( ; i > keepend_level; --i)
- 	    if (CUR_STATE(i).si_flags & HL_EXTEND)
- 		break;
-+
-+    seen_keepend = FALSE;
-     for ( ; i < current_state.ga_len; ++i)
-     {
- 	cur_si = &CUR_STATE(i);
- 	if ((cur_si->si_flags & HL_KEEPEND)
-+			    || (seen_keepend && !startofline)
- 			    || (i == current_state.ga_len - 1 && startofline))
- 	{
- 	    cur_si->si_h_startpos.col = 0;	/* start highl. in col 0 */
-@@ -1021,6 +1028,9 @@
- 
- 	    if (!(cur_si->si_flags & HL_MATCHCONT))
- 		update_si_end(cur_si, (int)current_col, !startofline);
-+
-+	    if (!startofline && (cur_si->si_flags & HL_KEEPEND))
-+		seen_keepend = TRUE;
- 	}
-     }
-     check_keepend();
-@@ -2564,6 +2574,7 @@
- {
-     int		i;
-     lpos_T	maxpos;
-+    lpos_T	maxpos_h;
-     stateitem_T	*sip;
- 
-     /*
-@@ -2583,23 +2594,30 @@
- 	    break;
- 
-     maxpos.lnum = 0;
-+    maxpos_h.lnum = 0;
-     for ( ; i < current_state.ga_len; ++i)
-     {
- 	sip = &CUR_STATE(i);
- 	if (maxpos.lnum != 0)
- 	{
- 	    limit_pos_zero(&sip->si_m_endpos, &maxpos);
--	    limit_pos_zero(&sip->si_h_endpos, &maxpos);
-+	    limit_pos_zero(&sip->si_h_endpos, &maxpos_h);
- 	    limit_pos_zero(&sip->si_eoe_pos, &maxpos);
- 	    sip->si_ends = TRUE;
- 	}
--	if (sip->si_ends
--		&& (sip->si_flags & HL_KEEPEND)
--		&& (maxpos.lnum == 0
-+	if (sip->si_ends && (sip->si_flags & HL_KEEPEND))
-+	{
-+	    if (maxpos.lnum == 0
- 		    || maxpos.lnum > sip->si_m_endpos.lnum
- 		    || (maxpos.lnum == sip->si_m_endpos.lnum
--			&& maxpos.col > sip->si_m_endpos.col)))
--	    maxpos = sip->si_m_endpos;
-+			&& maxpos.col > sip->si_m_endpos.col))
-+		maxpos = sip->si_m_endpos;
-+	    if (maxpos_h.lnum == 0
-+		    || maxpos_h.lnum > sip->si_h_endpos.lnum
-+		    || (maxpos_h.lnum == sip->si_h_endpos.lnum
-+			&& maxpos_h.col > sip->si_h_endpos.col))
-+		maxpos_h = sip->si_h_endpos;
-+	}
-     }
- }
- 
-diff -Naur vim70.orig/src/tag.c vim70/src/tag.c
---- vim70.orig/src/tag.c	2006-04-27 06:11:21.000000000 -0700
-+++ vim70/src/tag.c	2006-10-13 01:02:59.000000000 -0700
-@@ -3787,6 +3787,7 @@
- {
-     int		num_matches, i, ret;
-     char_u	**matches, *p;
-+    char_u	*full_fname;
-     dict_T	*dict;
-     tagptrs_T	tp;
-     long	is_static;
-@@ -3809,9 +3810,10 @@
- 	    if (list_append_dict(list, dict) == FAIL)
- 		ret = FAIL;
- 
-+	    full_fname = tag_full_fname(&tp);
- 	    if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
--		    || add_tag_field(dict, "filename", tp.fname,
--							 tp.fname_end) == FAIL
-+		    || add_tag_field(dict, "filename", full_fname,
-+							 NULL) == FAIL
- 		    || add_tag_field(dict, "cmd", tp.command,
- 						       tp.command_end) == FAIL
- 		    || add_tag_field(dict, "kind", tp.tagkind,
-@@ -3819,6 +3821,8 @@
- 		    || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
- 		ret = FAIL;
- 
-+	    vim_free(full_fname);
-+
- 	    if (tp.command_end != NULL)
- 	    {
- 		for (p = tp.command_end + 3;
-diff -Naur vim70.orig/src/term.c vim70/src/term.c
---- vim70.orig/src/term.c	2006-05-03 10:34:57.000000000 -0700
-+++ vim70/src/term.c	2006-10-13 01:02:50.000000000 -0700
-@@ -4783,6 +4783,14 @@
- 		return -1;
- 	    current_menu = (vimmenu_T *)val;
- 	    slen += num_bytes;
-+
-+	    /* The menu may have been deleted right after it was used, check
-+	     * for that. */
-+	    if (check_menu_pointer(root_menu, current_menu) == FAIL)
-+	    {
-+		key_name[0] = KS_EXTRA;
-+		key_name[1] = (int)KE_IGNORE;
-+	    }
- 	}
- # endif
- # ifdef FEAT_GUI_TABLINE
-diff -Naur vim70.orig/src/testdir/test56.in vim70/src/testdir/test56.in
---- vim70.orig/src/testdir/test56.in	2005-05-18 08:37:37.000000000 -0700
-+++ vim70/src/testdir/test56.in	2006-10-13 01:02:56.000000000 -0700
-@@ -3,7 +3,7 @@
- STARTTEST
- :so small.vim
- :"
--:set nocp
-+:set nocp viminfo+=nviminfo
- :/^start:/+1,/^end:/-1w! Xtest.vim
- :source Xtest.vim
- _x
-diff -Naur vim70.orig/src/ui.c vim70/src/ui.c
---- vim70.orig/src/ui.c	2006-03-27 11:15:09.000000000 -0800
-+++ vim70/src/ui.c	2006-10-13 01:02:53.000000000 -0700
-@@ -1137,7 +1137,6 @@
-     int		len;
- #ifdef FEAT_MBYTE
-     char_u	*p;
--    int		i;
- #endif
-     int		row1 = clip_star.start.lnum;
-     int		col1 = clip_star.start.col;
-@@ -1218,6 +1217,8 @@
- #ifdef FEAT_MBYTE
- 	    if (enc_dbcs != 0)
- 	    {
-+		int	i;
-+
- 		p = ScreenLines + LineOffset[row];
- 		for (i = start_col; i < end_col; ++i)
- 		    if (enc_dbcs == DBCS_JPNU && p[i] == 0x8e)
-diff -Naur vim70.orig/src/undo.c vim70/src/undo.c
---- vim70.orig/src/undo.c	2006-04-21 02:30:59.000000000 -0700
-+++ vim70/src/undo.c	2006-10-13 01:02:53.000000000 -0700
-@@ -84,7 +84,6 @@
- static void u_unch_branch __ARGS((u_header_T *uhp));
- static u_entry_T *u_get_headentry __ARGS((void));
- static void u_getbot __ARGS((void));
--static int undo_allowed __ARGS((void));
- static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
- static void u_doit __ARGS((int count));
- static void u_undoredo __ARGS((int undo));
-@@ -196,7 +195,7 @@
-  * Return TRUE when undo is allowed.  Otherwise give an error message and
-  * return FALSE.
-  */
--    static int
-+    int
- undo_allowed()
- {
-     /* Don't allow changes when 'modifiable' is off.  */
-@@ -1188,7 +1187,7 @@
-     int		did_undo;	/* just did an undo */
-     int		absolute;	/* used ":undo N" */
- {
--    char	*msg;
-+    char	*msgstr;
-     u_header_T	*uhp;
-     char_u	msgbuf[80];
- 
-@@ -1206,20 +1205,20 @@
- 
-     u_oldcount -= u_newcount;
-     if (u_oldcount == -1)
--	msg = N_("more line");
-+	msgstr = N_("more line");
-     else if (u_oldcount < 0)
--	msg = N_("more lines");
-+	msgstr = N_("more lines");
-     else if (u_oldcount == 1)
--	msg = N_("line less");
-+	msgstr = N_("line less");
-     else if (u_oldcount > 1)
--	msg = N_("fewer lines");
-+	msgstr = N_("fewer lines");
-     else
-     {
- 	u_oldcount = u_newcount;
- 	if (u_newcount == 1)
--	    msg = N_("change");
-+	    msgstr = N_("change");
- 	else
--	    msg = N_("changes");
-+	    msgstr = N_("changes");
-     }
- 
-     if (curbuf->b_u_curhead != NULL)
-@@ -1245,7 +1244,7 @@
- 
-     smsg((char_u *)_("%ld %s; %s #%ld  %s"),
- 	    u_oldcount < 0 ? -u_oldcount : u_oldcount,
--	    _(msg),
-+	    _(msgstr),
- 	    did_undo ? _("before") : _("after"),
- 	    uhp == NULL ? 0L : uhp->uh_seq,
- 	    msgbuf);
-diff -Naur vim70.orig/src/version.c vim70/src/version.c
---- vim70.orig/src/version.c	2006-05-03 00:50:42.000000000 -0700
-+++ vim70/src/version.c	2006-10-13 01:03:11.000000000 -0700
-@@ -667,6 +667,246 @@
- static int included_patches[] =
- {   /* Add new patch number below this line */
- /**/
-+    129,
-+/**/
-+    128,
-+/**/
-+    127,
-+/**/
-+    126,
-+/**/
-+    125,
-+/**/
-+    124,
-+/**/
-+    123,
-+/**/
-+    122,
-+/**/
-+    121,
-+/**/
-+    120,
-+/**/
-+    119,
-+/**/
-+    118,
-+/**/
-+    117,
-+/**/
-+    116,
-+/**/
-+    115,
-+/**/
-+    114,
-+/**/
-+    113,
-+/**/
-+    112,
-+/**/
-+    111,
-+/**/
-+    110,
-+/**/
-+    109,
-+/**/
-+    107,
-+/**/
-+    106,
-+/**/
-+    105,
-+/**/
-+    104,
-+/**/
-+    103,
-+/**/
-+    102,
-+/**/
-+    101,
-+/**/
-+    100,
-+/**/
-+    99,
-+/**/
-+    98,
-+/**/
-+    97,
-+/**/
-+    96,
-+/**/
-+    95,
-+/**/
-+    94,
-+/**/
-+    93,
-+/**/
-+    92,
-+/**/
-+    91,
-+/**/
-+    90,
-+/**/
-+    89,
-+/**/
-+    88,
-+/**/
-+    87,
-+/**/
-+    86,
-+/**/
-+    85,
-+/**/
-+    84,
-+/**/
-+    83,
-+/**/
-+    82,
-+/**/
-+    81,
-+/**/
-+    80,
-+/**/
-+    79,
-+/**/
-+    78,
-+/**/
-+    77,
-+/**/
-+    76,
-+/**/
-+    75,
-+/**/
-+    73,
-+/**/
-+    72,
-+/**/
-+    71,
-+/**/
-+    70,
-+/**/
-+    69,
-+/**/
-+    68,
-+/**/
-+    67,
-+/**/
-+    66,
-+/**/
-+    64,
-+/**/
-+    63,
-+/**/
-+    62,
-+/**/
-+    61,
-+/**/
-+    60,
-+/**/
-+    59,
-+/**/
-+    58,
-+/**/
-+    56,
-+/**/
-+    55,
-+/**/
-+    54,
-+/**/
-+    53,
-+/**/
-+    52,
-+/**/
-+    51,
-+/**/
-+    50,
-+/**/
-+    49,
-+/**/
-+    48,
-+/**/
-+    47,
-+/**/
-+    46,
-+/**/
-+    44,
-+/**/
-+    43,
-+/**/
-+    42,
-+/**/
-+    41,
-+/**/
-+    40,
-+/**/
-+    39,
-+/**/
-+    38,
-+/**/
-+    37,
-+/**/
-+    36,
-+/**/
-+    35,
-+/**/
-+    34,
-+/**/
-+    33,
-+/**/
-+    31,
-+/**/
-+    30,
-+/**/
-+    29,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    7,
-+/**/
-+    6,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-     0
- };
- 
-@@ -731,7 +971,11 @@
-     /* Only MS VC 4.1 and earlier can do Win32s */
-     MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
- #  else
-+#   ifdef _WIN64
-+    MSG_PUTS(_("\nMS-Windows 64 bit GUI version"));
-+#   else
-     MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
-+#   endif
- #  endif
-     if (gui_is_win32s())
- 	MSG_PUTS(_(" in Win32s mode"));
-diff -Naur vim70.orig/src/version.c~ vim70/src/version.c~
---- vim70.orig/src/version.c~	1969-12-31 16:00:00.000000000 -0800
-+++ vim70/src/version.c~	2006-10-13 01:03:08.000000000 -0700
-@@ -0,0 +1,1450 @@
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-+ * VIM - Vi IMproved		by Bram Moolenaar
-+ *
-+ * Do ":help uganda"  in Vim to read copying and usage conditions.
-+ * Do ":help credits" in Vim to see a list of people who contributed.
-+ * See README.txt for an overview of the Vim source code.
-+ */
-+
-+#include "vim.h"
-+
-+#ifdef AMIGA
-+# include <time.h>	/* for time() */
-+#endif
-+
-+/*
-+ * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
-+ * It has been changed beyond recognition since then.
-+ *
-+ * Differences between version 6.x and 7.x can be found with ":help version7".
-+ * Differences between version 5.x and 6.x can be found with ":help version6".
-+ * Differences between version 4.x and 5.x can be found with ":help version5".
-+ * Differences between version 3.0 and 4.x can be found with ":help version4".
-+ * All the remarks about older versions have been removed, they are not very
-+ * interesting.
-+ */
-+
-+#include "version.h"
-+
-+char		*Version = VIM_VERSION_SHORT;
-+static char	*mediumVersion = VIM_VERSION_MEDIUM;
-+
-+#if defined(HAVE_DATE_TIME) || defined(PROTO)
-+# if (defined(VMS) && defined(VAXC)) || defined(PROTO)
-+char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
-+						      + sizeof(__TIME__) + 3];
-+    void
-+make_version()
-+{
-+    /*
-+     * Construct the long version string.  Necessary because
-+     * VAX C can't catenate strings in the preprocessor.
-+     */
-+    strcpy(longVersion, VIM_VERSION_LONG_DATE);
-+    strcat(longVersion, __DATE__);
-+    strcat(longVersion, " ");
-+    strcat(longVersion, __TIME__);
-+    strcat(longVersion, ")");
-+}
-+# else
-+char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
-+# endif
-+#else
-+char	*longVersion = VIM_VERSION_LONG;
-+#endif
-+
-+static void version_msg __ARGS((char *s));
-+
-+static char *(features[]) =
-+{
-+#ifdef AMIGA		/* only for Amiga systems */
-+# ifdef FEAT_ARP
-+	"+ARP",
-+# else
-+	"-ARP",
-+# endif
-+#endif
-+#ifdef FEAT_ARABIC
-+	"+arabic",
-+#else
-+	"-arabic",
-+#endif
-+#ifdef FEAT_AUTOCMD
-+	"+autocmd",
-+#else
-+	"-autocmd",
-+#endif
-+#ifdef FEAT_BEVAL
-+	"+balloon_eval",
-+#else
-+	"-balloon_eval",
-+#endif
-+#ifdef FEAT_BROWSE
-+	"+browse",
-+#else
-+	"-browse",
-+#endif
-+#ifdef NO_BUILTIN_TCAPS
-+	"-builtin_terms",
-+#endif
-+#ifdef SOME_BUILTIN_TCAPS
-+	"+builtin_terms",
-+#endif
-+#ifdef ALL_BUILTIN_TCAPS
-+	"++builtin_terms",
-+#endif
-+#ifdef FEAT_BYTEOFF
-+	"+byte_offset",
-+#else
-+	"-byte_offset",
-+#endif
-+#ifdef FEAT_CINDENT
-+	"+cindent",
-+#else
-+	"-cindent",
-+#endif
-+#ifdef FEAT_CLIENTSERVER
-+	"+clientserver",
-+#else
-+	"-clientserver",
-+#endif
-+#ifdef FEAT_CLIPBOARD
-+	"+clipboard",
-+#else
-+	"-clipboard",
-+#endif
-+#ifdef FEAT_CMDL_COMPL
-+	"+cmdline_compl",
-+#else
-+	"-cmdline_compl",
-+#endif
-+#ifdef FEAT_CMDHIST
-+	"+cmdline_hist",
-+#else
-+	"-cmdline_hist",
-+#endif
-+#ifdef FEAT_CMDL_INFO
-+	"+cmdline_info",
-+#else
-+	"-cmdline_info",
-+#endif
-+#ifdef FEAT_COMMENTS
-+	"+comments",
-+#else
-+	"-comments",
-+#endif
-+#ifdef FEAT_CRYPT
-+	"+cryptv",
-+#else
-+	"-cryptv",
-+#endif
-+#ifdef FEAT_CSCOPE
-+	"+cscope",
-+#else
-+	"-cscope",
-+#endif
-+#ifdef CURSOR_SHAPE
-+	"+cursorshape",
-+#else
-+	"-cursorshape",
-+#endif
-+#if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
-+	"+dialog_con_gui",
-+#else
-+# if defined(FEAT_CON_DIALOG)
-+	"+dialog_con",
-+# else
-+#  if defined(FEAT_GUI_DIALOG)
-+	"+dialog_gui",
-+#  else
-+	"-dialog",
-+#  endif
-+# endif
-+#endif
-+#ifdef FEAT_DIFF
-+	"+diff",
-+#else
-+	"-diff",
-+#endif
-+#ifdef FEAT_DIGRAPHS
-+	"+digraphs",
-+#else
-+	"-digraphs",
-+#endif
-+#ifdef FEAT_DND
-+	"+dnd",
-+#else
-+	"-dnd",
-+#endif
-+#ifdef EBCDIC
-+	"+ebcdic",
-+#else
-+	"-ebcdic",
-+#endif
-+#ifdef FEAT_EMACS_TAGS
-+	"+emacs_tags",
-+#else
-+	"-emacs_tags",
-+#endif
-+#ifdef FEAT_EVAL
-+	"+eval",
-+#else
-+	"-eval",
-+#endif
-+#ifdef FEAT_EX_EXTRA
-+	"+ex_extra",
-+#else
-+	"-ex_extra",
-+#endif
-+#ifdef FEAT_SEARCH_EXTRA
-+	"+extra_search",
-+#else
-+	"-extra_search",
-+#endif
-+#ifdef FEAT_FKMAP
-+	"+farsi",
-+#else
-+	"-farsi",
-+#endif
-+#ifdef FEAT_SEARCHPATH
-+	"+file_in_path",
-+#else
-+	"-file_in_path",
-+#endif
-+#ifdef FEAT_FIND_ID
-+	"+find_in_path",
-+#else
-+	"-find_in_path",
-+#endif
-+#ifdef FEAT_FOLDING
-+	"+folding",
-+#else
-+	"-folding",
-+#endif
-+#ifdef FEAT_FOOTER
-+	"+footer",
-+#else
-+	"-footer",
-+#endif
-+	    /* only interesting on Unix systems */
-+#if !defined(USE_SYSTEM) && defined(UNIX)
-+	"+fork()",
-+#endif
-+#ifdef FEAT_GETTEXT
-+# ifdef DYNAMIC_GETTEXT
-+	"+gettext/dyn",
-+# else
-+	"+gettext",
-+# endif
-+#else
-+	"-gettext",
-+#endif
-+#ifdef FEAT_HANGULIN
-+	"+hangul_input",
-+#else
-+	"-hangul_input",
-+#endif
-+#if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
-+# ifdef DYNAMIC_ICONV
-+	"+iconv/dyn",
-+# else
-+	"+iconv",
-+# endif
-+#else
-+	"-iconv",
-+#endif
-+#ifdef FEAT_INS_EXPAND
-+	"+insert_expand",
-+#else
-+	"-insert_expand",
-+#endif
-+#ifdef FEAT_JUMPLIST
-+	"+jumplist",
-+#else
-+	"-jumplist",
-+#endif
-+#ifdef FEAT_KEYMAP
-+	"+keymap",
-+#else
-+	"-keymap",
-+#endif
-+#ifdef FEAT_LANGMAP
-+	"+langmap",
-+#else
-+	"-langmap",
-+#endif
-+#ifdef FEAT_LIBCALL
-+	"+libcall",
-+#else
-+	"-libcall",
-+#endif
-+#ifdef FEAT_LINEBREAK
-+	"+linebreak",
-+#else
-+	"-linebreak",
-+#endif
-+#ifdef FEAT_LISP
-+	"+lispindent",
-+#else
-+	"-lispindent",
-+#endif
-+#ifdef FEAT_LISTCMDS
-+	"+listcmds",
-+#else
-+	"-listcmds",
-+#endif
-+#ifdef FEAT_LOCALMAP
-+	"+localmap",
-+#else
-+	"-localmap",
-+#endif
-+#ifdef FEAT_MENU
-+	"+menu",
-+#else
-+	"-menu",
-+#endif
-+#ifdef FEAT_SESSION
-+	"+mksession",
-+#else
-+	"-mksession",
-+#endif
-+#ifdef FEAT_MODIFY_FNAME
-+	"+modify_fname",
-+#else
-+	"-modify_fname",
-+#endif
-+#ifdef FEAT_MOUSE
-+	"+mouse",
-+#  ifdef FEAT_MOUSESHAPE
-+	"+mouseshape",
-+#  else
-+	"-mouseshape",
-+#  endif
-+# else
-+	"-mouse",
-+#endif
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_MOUSE_DEC
-+	"+mouse_dec",
-+# else
-+	"-mouse_dec",
-+# endif
-+# ifdef FEAT_MOUSE_GPM
-+	"+mouse_gpm",
-+# else
-+	"-mouse_gpm",
-+# endif
-+# ifdef FEAT_MOUSE_JSB
-+	"+mouse_jsbterm",
-+# else
-+	"-mouse_jsbterm",
-+# endif
-+# ifdef FEAT_MOUSE_NET
-+	"+mouse_netterm",
-+# else
-+	"-mouse_netterm",
-+# endif
-+# ifdef FEAT_MOUSE_XTERM
-+	"+mouse_xterm",
-+# else
-+	"-mouse_xterm",
-+# endif
-+#endif
-+#ifdef __QNX__
-+# ifdef FEAT_MOUSE_PTERM
-+	"+mouse_pterm",
-+# else
-+	"-mouse_pterm",
-+# endif
-+#endif
-+#ifdef FEAT_MBYTE_IME
-+# ifdef DYNAMIC_IME
-+	"+multi_byte_ime/dyn",
-+# else
-+	"+multi_byte_ime",
-+# endif
-+#else
-+# ifdef FEAT_MBYTE
-+	"+multi_byte",
-+# else
-+	"-multi_byte",
-+# endif
-+#endif
-+#ifdef FEAT_MULTI_LANG
-+	"+multi_lang",
-+#else
-+	"-multi_lang",
-+#endif
-+#ifdef FEAT_MZSCHEME
-+# ifdef DYNAMIC_MZSCHEME
-+	"+mzscheme/dyn",
-+# else
-+	"+mzscheme",
-+# endif
-+#else
-+	"-mzscheme",
-+#endif
-+#ifdef FEAT_NETBEANS_INTG
-+	"+netbeans_intg",
-+#else
-+	"-netbeans_intg",
-+#endif
-+#ifdef FEAT_GUI_W32
-+# ifdef FEAT_OLE
-+	"+ole",
-+# else
-+	"-ole",
-+# endif
-+#endif
-+#ifdef FEAT_OSFILETYPE
-+	"+osfiletype",
-+#else
-+	"-osfiletype",
-+#endif
-+#ifdef FEAT_PATH_EXTRA
-+	"+path_extra",
-+#else
-+	"-path_extra",
-+#endif
-+#ifdef FEAT_PERL
-+# ifdef DYNAMIC_PERL
-+	"+perl/dyn",
-+# else
-+	"+perl",
-+# endif
-+#else
-+	"-perl",
-+#endif
-+#ifdef FEAT_PRINTER
-+# ifdef FEAT_POSTSCRIPT
-+	"+postscript",
-+# else
-+	"-postscript",
-+# endif
-+	"+printer",
-+#else
-+	"-printer",
-+#endif
-+#ifdef FEAT_PROFILE
-+	"+profile",
-+#else
-+	"-profile",
-+#endif
-+#ifdef FEAT_PYTHON
-+# ifdef DYNAMIC_PYTHON
-+	"+python/dyn",
-+# else
-+	"+python",
-+# endif
-+#else
-+	"-python",
-+#endif
-+#ifdef FEAT_QUICKFIX
-+	"+quickfix",
-+#else
-+	"-quickfix",
-+#endif
-+#ifdef FEAT_RELTIME
-+	"+reltime",
-+#else
-+	"-reltime",
-+#endif
-+#ifdef FEAT_RIGHTLEFT
-+	"+rightleft",
-+#else
-+	"-rightleft",
-+#endif
-+#ifdef FEAT_RUBY
-+# ifdef DYNAMIC_RUBY
-+	"+ruby/dyn",
-+# else
-+	"+ruby",
-+# endif
-+#else
-+	"-ruby",
-+#endif
-+#ifdef FEAT_SCROLLBIND
-+	"+scrollbind",
-+#else
-+	"-scrollbind",
-+#endif
-+#ifdef FEAT_SIGNS
-+	"+signs",
-+#else
-+	"-signs",
-+#endif
-+#ifdef FEAT_SMARTINDENT
-+	"+smartindent",
-+#else
-+	"-smartindent",
-+#endif
-+#ifdef FEAT_SNIFF
-+	"+sniff",
-+#else
-+	"-sniff",
-+#endif
-+#ifdef FEAT_STL_OPT
-+	"+statusline",
-+#else
-+	"-statusline",
-+#endif
-+#ifdef FEAT_SUN_WORKSHOP
-+	"+sun_workshop",
-+#else
-+	"-sun_workshop",
-+#endif
-+#ifdef FEAT_SYN_HL
-+	"+syntax",
-+#else
-+	"-syntax",
-+#endif
-+	    /* only interesting on Unix systems */
-+#if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
-+	"+system()",
-+#endif
-+#ifdef FEAT_TAG_BINS
-+	"+tag_binary",
-+#else
-+	"-tag_binary",
-+#endif
-+#ifdef FEAT_TAG_OLDSTATIC
-+	"+tag_old_static",
-+#else
-+	"-tag_old_static",
-+#endif
-+#ifdef FEAT_TAG_ANYWHITE
-+	"+tag_any_white",
-+#else
-+	"-tag_any_white",
-+#endif
-+#ifdef FEAT_TCL
-+# ifdef DYNAMIC_TCL
-+	"+tcl/dyn",
-+# else
-+	"+tcl",
-+# endif
-+#else
-+	"-tcl",
-+#endif
-+#if defined(UNIX) || defined(__EMX__)
-+/* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
-+# ifdef TERMINFO
-+	"+terminfo",
-+# else
-+	"-terminfo",
-+# endif
-+#else		    /* unix always includes termcap support */
-+# ifdef HAVE_TGETENT
-+	"+tgetent",
-+# else
-+	"-tgetent",
-+# endif
-+#endif
-+#ifdef FEAT_TERMRESPONSE
-+	"+termresponse",
-+#else
-+	"-termresponse",
-+#endif
-+#ifdef FEAT_TEXTOBJ
-+	"+textobjects",
-+#else
-+	"-textobjects",
-+#endif
-+#ifdef FEAT_TITLE
-+	"+title",
-+#else
-+	"-title",
-+#endif
-+#ifdef FEAT_TOOLBAR
-+	"+toolbar",
-+#else
-+	"-toolbar",
-+#endif
-+#ifdef FEAT_USR_CMDS
-+	"+user_commands",
-+#else
-+	"-user_commands",
-+#endif
-+#ifdef FEAT_VERTSPLIT
-+	"+vertsplit",
-+#else
-+	"-vertsplit",
-+#endif
-+#ifdef FEAT_VIRTUALEDIT
-+	"+virtualedit",
-+#else
-+	"-virtualedit",
-+#endif
-+#ifdef FEAT_VISUAL
-+	"+visual",
-+# ifdef FEAT_VISUALEXTRA
-+	"+visualextra",
-+# else
-+	"-visualextra",
-+# endif
-+#else
-+	"-visual",
-+#endif
-+#ifdef FEAT_VIMINFO
-+	"+viminfo",
-+#else
-+	"-viminfo",
-+#endif
-+#ifdef FEAT_VREPLACE
-+	"+vreplace",
-+#else
-+	"-vreplace",
-+#endif
-+#ifdef FEAT_WILDIGN
-+	"+wildignore",
-+#else
-+	"-wildignore",
-+#endif
-+#ifdef FEAT_WILDMENU
-+	"+wildmenu",
-+#else
-+	"-wildmenu",
-+#endif
-+#ifdef FEAT_WINDOWS
-+	"+windows",
-+#else
-+	"-windows",
-+#endif
-+#ifdef FEAT_WRITEBACKUP
-+	"+writebackup",
-+#else
-+	"-writebackup",
-+#endif
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_X11
-+	"+X11",
-+# else
-+	"-X11",
-+# endif
-+#endif
-+#ifdef FEAT_XFONTSET
-+	"+xfontset",
-+#else
-+	"-xfontset",
-+#endif
-+#ifdef FEAT_XIM
-+	"+xim",
-+#else
-+	"-xim",
-+#endif
-+#if defined(UNIX) || defined(VMS)
-+# ifdef USE_XSMP_INTERACT
-+	"+xsmp_interact",
-+# else
-+#  ifdef USE_XSMP
-+	"+xsmp",
-+#  else
-+	"-xsmp",
-+#  endif
-+# endif
-+# ifdef FEAT_XCLIPBOARD
-+	"+xterm_clipboard",
-+# else
-+	"-xterm_clipboard",
-+# endif
-+#endif
-+#ifdef FEAT_XTERM_SAVE
-+	"+xterm_save",
-+#else
-+	"-xterm_save",
-+#endif
-+#ifdef WIN3264
-+# ifdef FEAT_XPM_W32
-+	"+xpm_w32",
-+# else
-+	"-xpm_w32",
-+# endif
-+#endif
-+	NULL
-+};
-+
-+static int included_patches[] =
-+{   /* Add new patch number below this line */
-+/**/
-+    115,
-+/**/
-+    114,
-+/**/
-+    113,
-+/**/
-+    112,
-+/**/
-+    111,
-+/**/
-+    110,
-+/**/
-+    109,
-+/**/
-+    107,
-+/**/
-+    106,
-+/**/
-+    105,
-+/**/
-+    104,
-+/**/
-+    103,
-+/**/
-+    102,
-+/**/
-+    101,
-+/**/
-+    100,
-+/**/
-+    99,
-+/**/
-+    98,
-+/**/
-+    97,
-+/**/
-+    96,
-+/**/
-+    95,
-+/**/
-+    94,
-+/**/
-+    93,
-+/**/
-+    92,
-+/**/
-+    91,
-+/**/
-+    90,
-+/**/
-+    89,
-+/**/
-+    88,
-+/**/
-+    87,
-+/**/
-+    86,
-+/**/
-+    85,
-+/**/
-+    84,
-+/**/
-+    83,
-+/**/
-+    82,
-+/**/
-+    81,
-+/**/
-+    80,
-+/**/
-+    79,
-+/**/
-+    78,
-+/**/
-+    77,
-+/**/
-+    76,
-+/**/
-+    75,
-+/**/
-+    73,
-+/**/
-+    72,
-+/**/
-+    71,
-+/**/
-+    70,
-+/**/
-+    69,
-+/**/
-+    68,
-+/**/
-+    67,
-+/**/
-+    66,
-+/**/
-+    64,
-+/**/
-+    63,
-+/**/
-+    62,
-+/**/
-+    61,
-+/**/
-+    60,
-+/**/
-+    59,
-+/**/
-+    58,
-+/**/
-+    56,
-+/**/
-+    55,
-+/**/
-+    54,
-+/**/
-+    53,
-+/**/
-+    52,
-+/**/
-+    51,
-+/**/
-+    50,
-+/**/
-+    49,
-+/**/
-+    48,
-+/**/
-+    47,
-+/**/
-+    46,
-+/**/
-+    44,
-+/**/
-+    43,
-+/**/
-+    42,
-+/**/
-+    41,
-+/**/
-+    40,
-+/**/
-+    39,
-+/**/
-+    38,
-+/**/
-+    37,
-+/**/
-+    36,
-+/**/
-+    35,
-+/**/
-+    34,
-+/**/
-+    33,
-+/**/
-+    31,
-+/**/
-+    30,
-+/**/
-+    29,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    7,
-+/**/
-+    6,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-+    0
-+};
-+
-+    int
-+highest_patch()
-+{
-+    int		i;
-+    int		h = 0;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] > h)
-+	    h = included_patches[i];
-+    return h;
-+}
-+
-+#if defined(FEAT_EVAL) || defined(PROTO)
-+/*
-+ * Return TRUE if patch "n" has been included.
-+ */
-+    int
-+has_patch(n)
-+    int		n;
-+{
-+    int		i;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] == n)
-+	    return TRUE;
-+    return FALSE;
-+}
-+#endif
-+
-+    void
-+ex_version(eap)
-+    exarg_T	*eap;
-+{
-+    /*
-+     * Ignore a ":version 9.99" command.
-+     */
-+    if (*eap->arg == NUL)
-+    {
-+	msg_putchar('\n');
-+	list_version();
-+    }
-+}
-+
-+    void
-+list_version()
-+{
-+    int		i;
-+    int		first;
-+    char	*s = "";
-+
-+    /*
-+     * When adding features here, don't forget to update the list of
-+     * internal variables in eval.c!
-+     */
-+    MSG(longVersion);
-+#ifdef WIN3264
-+# ifdef FEAT_GUI_W32
-+#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
-+    /* Only MS VC 4.1 and earlier can do Win32s */
-+    MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
-+#  else
-+    MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
-+#  endif
-+    if (gui_is_win32s())
-+	MSG_PUTS(_(" in Win32s mode"));
-+# ifdef FEAT_OLE
-+    MSG_PUTS(_(" with OLE support"));
-+# endif
-+# else
-+    MSG_PUTS(_("\nMS-Windows 32 bit console version"));
-+# endif
-+#endif
-+#ifdef WIN16
-+    MSG_PUTS(_("\nMS-Windows 16 bit version"));
-+#endif
-+#ifdef MSDOS
-+# ifdef DJGPP
-+    MSG_PUTS(_("\n32 bit MS-DOS version"));
-+# else
-+    MSG_PUTS(_("\n16 bit MS-DOS version"));
-+# endif
-+#endif
-+#ifdef MACOS
-+# ifdef MACOS_X
-+#  ifdef MACOS_X_UNIX
-+    MSG_PUTS(_("\nMacOS X (unix) version"));
-+#  else
-+    MSG_PUTS(_("\nMacOS X version"));
-+#  endif
-+#else
-+    MSG_PUTS(_("\nMacOS version"));
-+# endif
-+#endif
-+
-+#ifdef RISCOS
-+    MSG_PUTS(_("\nRISC OS version"));
-+#endif
-+#ifdef VMS
-+    MSG_PUTS("\nOpenVMS version");
-+#endif
-+
-+    /* Print the list of patch numbers if there is at least one. */
-+    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
-+    if (included_patches[0] != 0)
-+    {
-+	MSG_PUTS(_("\nIncluded patches: "));
-+	first = -1;
-+	/* find last one */
-+	for (i = 0; included_patches[i] != 0; ++i)
-+	    ;
-+	while (--i >= 0)
-+	{
-+	    if (first < 0)
-+		first = included_patches[i];
-+	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
-+	    {
-+		MSG_PUTS(s);
-+		s = ", ";
-+		msg_outnum((long)first);
-+		if (first != included_patches[i])
-+		{
-+		    MSG_PUTS("-");
-+		    msg_outnum((long)included_patches[i]);
-+		}
-+		first = -1;
-+	    }
-+	}
-+    }
-+
-+#ifdef MODIFIED_BY
-+    MSG_PUTS("\n");
-+    MSG_PUTS(_("Modified by "));
-+    MSG_PUTS(MODIFIED_BY);
-+#endif
-+
-+#ifdef HAVE_PATHDEF
-+    if (*compiled_user != NUL || *compiled_sys != NUL)
-+    {
-+	MSG_PUTS(_("\nCompiled "));
-+	if (*compiled_user != NUL)
-+	{
-+	    MSG_PUTS(_("by "));
-+	    MSG_PUTS(compiled_user);
-+	}
-+	if (*compiled_sys != NUL)
-+	{
-+	    MSG_PUTS("@");
-+	    MSG_PUTS(compiled_sys);
-+	}
-+    }
-+#endif
-+
-+#ifdef FEAT_HUGE
-+    MSG_PUTS(_("\nHuge version "));
-+#else
-+# ifdef FEAT_BIG
-+    MSG_PUTS(_("\nBig version "));
-+# else
-+#  ifdef FEAT_NORMAL
-+    MSG_PUTS(_("\nNormal version "));
-+#  else
-+#   ifdef FEAT_SMALL
-+    MSG_PUTS(_("\nSmall version "));
-+#   else
-+    MSG_PUTS(_("\nTiny version "));
-+#   endif
-+#  endif
-+# endif
-+#endif
-+#ifndef FEAT_GUI
-+    MSG_PUTS(_("without GUI."));
-+#else
-+# ifdef FEAT_GUI_GTK
-+#  ifdef FEAT_GUI_GNOME
-+#   ifdef HAVE_GTK2
-+    MSG_PUTS(_("with GTK2-GNOME GUI."));
-+#   else
-+    MSG_PUTS(_("with GTK-GNOME GUI."));
-+#   endif
-+#  else
-+#   ifdef HAVE_GTK2
-+    MSG_PUTS(_("with GTK2 GUI."));
-+#   else
-+    MSG_PUTS(_("with GTK GUI."));
-+#   endif
-+#  endif
-+# else
-+#  ifdef FEAT_GUI_MOTIF
-+    MSG_PUTS(_("with X11-Motif GUI."));
-+#  else
-+#   ifdef FEAT_GUI_ATHENA
-+#    ifdef FEAT_GUI_NEXTAW
-+    MSG_PUTS(_("with X11-neXtaw GUI."));
-+#    else
-+    MSG_PUTS(_("with X11-Athena GUI."));
-+#    endif
-+#   else
-+#     ifdef FEAT_GUI_PHOTON
-+    MSG_PUTS(_("with Photon GUI."));
-+#     else
-+#      if defined(MSWIN)
-+    MSG_PUTS(_("with GUI."));
-+#      else
-+#	if defined (TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
-+    MSG_PUTS(_("with Carbon GUI."));
-+#	else
-+#	 if defined (TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
-+    MSG_PUTS(_("with Cocoa GUI."));
-+#	 else
-+#	  if defined (MACOS)
-+    MSG_PUTS(_("with (classic) GUI."));
-+#	  endif
-+#	 endif
-+#	endif
-+#      endif
-+#    endif
-+#   endif
-+#  endif
-+# endif
-+#endif
-+    version_msg(_("  Features included (+) or not (-):\n"));
-+
-+    /* print all the features */
-+    for (i = 0; features[i] != NULL; ++i)
-+    {
-+	version_msg(features[i]);
-+	if (msg_col > 0)
-+	    version_msg(" ");
-+    }
-+
-+    version_msg("\n");
-+#ifdef SYS_VIMRC_FILE
-+    version_msg(_("   system vimrc file: \""));
-+    version_msg(SYS_VIMRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE
-+    version_msg(_("     user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE2
-+    version_msg(_(" 2nd user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE2);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE3
-+    version_msg(_(" 3rd user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE3);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_EXRC_FILE
-+    version_msg(_("      user exrc file: \""));
-+    version_msg(USR_EXRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_EXRC_FILE2
-+    version_msg(_("  2nd user exrc file: \""));
-+    version_msg(USR_EXRC_FILE2);
-+    version_msg("\"\n");
-+#endif
-+#ifdef FEAT_GUI
-+# ifdef SYS_GVIMRC_FILE
-+    version_msg(_("  system gvimrc file: \""));
-+    version_msg(SYS_GVIMRC_FILE);
-+    version_msg("\"\n");
-+# endif
-+    version_msg(_("    user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE);
-+    version_msg("\"\n");
-+# ifdef USR_GVIMRC_FILE2
-+    version_msg(_("2nd user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE2);
-+    version_msg("\"\n");
-+# endif
-+# ifdef USR_GVIMRC_FILE3
-+    version_msg(_("3rd user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE3);
-+    version_msg("\"\n");
-+# endif
-+#endif
-+#ifdef FEAT_GUI
-+# ifdef SYS_MENU_FILE
-+    version_msg(_("    system menu file: \""));
-+    version_msg(SYS_MENU_FILE);
-+    version_msg("\"\n");
-+# endif
-+#endif
-+#ifdef HAVE_PATHDEF
-+    if (*default_vim_dir != NUL)
-+    {
-+	version_msg(_("  fall-back for $VIM: \""));
-+	version_msg((char *)default_vim_dir);
-+	version_msg("\"\n");
-+    }
-+    if (*default_vimruntime_dir != NUL)
-+    {
-+	version_msg(_(" f-b for $VIMRUNTIME: \""));
-+	version_msg((char *)default_vimruntime_dir);
-+	version_msg("\"\n");
-+    }
-+    version_msg(_("Compilation: "));
-+    version_msg((char *)all_cflags);
-+    version_msg("\n");
-+#ifdef VMS
-+    if (*compiler_version != NUL)
-+    {
-+	version_msg(_("Compiler: "));
-+	version_msg((char *)compiler_version);
-+	version_msg("\n");
-+    }
-+#endif
-+    version_msg(_("Linking: "));
-+    version_msg((char *)all_lflags);
-+#endif
-+#ifdef DEBUG
-+    version_msg("\n");
-+    version_msg(_("  DEBUG BUILD"));
-+#endif
-+}
-+
-+/*
-+ * Output a string for the version message.  If it's going to wrap, output a
-+ * newline, unless the message is too long to fit on the screen anyway.
-+ */
-+    static void
-+version_msg(s)
-+    char	*s;
-+{
-+    int		len = (int)STRLEN(s);
-+
-+    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
-+								&& *s != '\n')
-+	msg_putchar('\n');
-+    if (!got_int)
-+	MSG_PUTS(s);
-+}
-+
-+static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
-+
-+/*
-+ * Give an introductory message about Vim.
-+ * Only used when starting Vim on an empty file, without a file name.
-+ * Or with the ":intro" command (for Sven :-).
-+ */
-+    void
-+intro_message(colon)
-+    int		colon;		/* TRUE for ":intro" */
-+{
-+    int		i;
-+    int		row;
-+    int		blanklines;
-+    int		sponsor;
-+    char	*p;
-+    static char	*(lines[]) =
-+    {
-+	N_("VIM - Vi IMproved"),
-+	"",
-+	N_("version "),
-+	N_("by Bram Moolenaar et al."),
-+#ifdef MODIFIED_BY
-+	" ",
-+#endif
-+	N_("Vim is open source and freely distributable"),
-+	"",
-+	N_("Help poor children in Uganda!"),
-+	N_("type  :help iccf<Enter>       for information "),
-+	"",
-+	N_("type  :q<Enter>               to exit         "),
-+	N_("type  :help<Enter>  or  <F1>  for on-line help"),
-+	N_("type  :help version7<Enter>   for version info"),
-+	NULL,
-+	"",
-+	N_("Running in Vi compatible mode"),
-+	N_("type  :set nocp<Enter>        for Vim defaults"),
-+	N_("type  :help cp-default<Enter> for info on this"),
-+    };
-+#ifdef FEAT_GUI
-+    static char	*(gui_lines[]) =
-+    {
-+	NULL,
-+	NULL,
-+	NULL,
-+	NULL,
-+#ifdef MODIFIED_BY
-+	NULL,
-+#endif
-+	NULL,
-+	NULL,
-+	NULL,
-+	N_("menu  Help->Orphans           for information    "),
-+	NULL,
-+	N_("Running modeless, typed text is inserted"),
-+	N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
-+	N_("                              for two modes      "),
-+	NULL,
-+	NULL,
-+	NULL,
-+	N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
-+	N_("                              for Vim defaults   "),
-+    };
-+#endif
-+
-+    /* blanklines = screen height - # message lines */
-+    blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
-+    if (!p_cp)
-+	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
-+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
-+    if (mch_windows95())
-+	blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
-+#endif
-+
-+#ifdef FEAT_WINDOWS
-+    /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
-+    if (p_ls > 1)
-+	blanklines -= Rows - topframe->fr_height;
-+#endif
-+    if (blanklines < 0)
-+	blanklines = 0;
-+
-+    /* Show the sponsor and register message one out of four times, the Uganda
-+     * message two out of four times. */
-+    sponsor = (int)time(NULL);
-+    sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
-+
-+    /* start displaying the message lines after half of the blank lines */
-+    row = blanklines / 2;
-+    if ((row >= 2 && Columns >= 50) || colon)
-+    {
-+	for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
-+	{
-+	    p = lines[i];
-+#ifdef FEAT_GUI
-+	    if (p_im && gui.in_use && gui_lines[i] != NULL)
-+		p = gui_lines[i];
-+#endif
-+	    if (p == NULL)
-+	    {
-+		if (!p_cp)
-+		    break;
-+		continue;
-+	    }
-+	    if (sponsor != 0)
-+	    {
-+		if (strstr(p, "children") != NULL)
-+		    p = sponsor < 0
-+			? N_("Sponsor Vim development!")
-+			: N_("Become a registered Vim user!");
-+		else if (strstr(p, "iccf") != NULL)
-+		    p = sponsor < 0
-+			? N_("type  :help sponsor<Enter>    for information ")
-+			: N_("type  :help register<Enter>   for information ");
-+		else if (strstr(p, "Orphans") != NULL)
-+		    p = N_("menu  Help->Sponsor/Register  for information    ");
-+	    }
-+	    if (*p != NUL)
-+		do_intro_line(row, (char_u *)_(p), i == 2, 0);
-+	    ++row;
-+	}
-+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
-+	if (mch_windows95())
-+	{
-+	    do_intro_line(++row,
-+		    (char_u *)_("WARNING: Windows 95/98/ME detected"),
-+							FALSE, hl_attr(HLF_E));
-+	    do_intro_line(++row,
-+		(char_u *)_("type  :help windows95<Enter>  for info on this"),
-+								    FALSE, 0);
-+	}
-+#endif
-+    }
-+
-+    /* Make the wait-return message appear just below the text. */
-+    if (colon)
-+	msg_row = row;
-+}
-+
-+    static void
-+do_intro_line(row, mesg, add_version, attr)
-+    int		row;
-+    char_u	*mesg;
-+    int		add_version;
-+    int		attr;
-+{
-+    char_u	vers[20];
-+    int		col;
-+    char_u	*p;
-+    int		l;
-+    int		clen;
-+#ifdef MODIFIED_BY
-+# define MODBY_LEN 150
-+    char_u	modby[MODBY_LEN];
-+
-+    if (*mesg == ' ')
-+    {
-+	vim_strncpy(modby, _("Modified by "), MODBY_LEN - 1);
-+	l = STRLEN(modby);
-+	vim_strncpy(modby + l, MODIFIED_BY, MODBY_LEN - l - 1);
-+	mesg = modby;
-+    }
-+#endif
-+
-+    /* Center the message horizontally. */
-+    col = vim_strsize(mesg);
-+    if (add_version)
-+    {
-+	STRCPY(vers, mediumVersion);
-+	if (highest_patch())
-+	{
-+	    /* Check for 9.9x or 9.9xx, alpha/beta version */
-+	    if (isalpha((int)mediumVersion[3]))
-+	    {
-+		if (isalpha((int)mediumVersion[4]))
-+		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
-+							   mediumVersion + 5);
-+		else
-+		    sprintf((char *)vers + 4, ".%d%s", highest_patch(),
-+							   mediumVersion + 4);
-+	    }
-+	    else
-+		sprintf((char *)vers + 3, ".%d", highest_patch());
-+	}
-+	col += (int)STRLEN(vers);
-+    }
-+    col = (Columns - col) / 2;
-+    if (col < 0)
-+	col = 0;
-+
-+    /* Split up in parts to highlight <> items differently. */
-+    for (p = mesg; *p != NUL; p += l)
-+    {
-+	clen = 0;
-+	for (l = 0; p[l] != NUL
-+			 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
-+	{
-+#ifdef FEAT_MBYTE
-+	    if (has_mbyte)
-+	    {
-+		clen += ptr2cells(p + l);
-+		l += (*mb_ptr2len)(p + l) - 1;
-+	    }
-+	    else
-+#endif
-+		clen += byte2cells(p[l]);
-+	}
-+	screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
-+	col += clen;
-+    }
-+
-+    /* Add the version number to the version line. */
-+    if (add_version)
-+	screen_puts(vers, row, col, 0);
-+}
-+
-+/*
-+ * ":intro": clear screen, display intro screen and wait for return.
-+ */
-+/*ARGSUSED*/
-+    void
-+ex_intro(eap)
-+    exarg_T	*eap;
-+{
-+    screenclear();
-+    intro_message(TRUE);
-+    wait_return(TRUE);
-+}
-diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
---- vim70.orig/src/vim.h	2006-04-30 08:32:38.000000000 -0700
-+++ vim70/src/vim.h	2006-10-13 01:02:53.000000000 -0700
-@@ -585,7 +585,6 @@
- #define INSERT		0x10	/* Insert mode */
- #define LANGMAP		0x20	/* Language mapping, can be combined with
- 				   INSERT and CMDLINE */
--#define MAP_ALL_MODES	0x3f	/* all mode bits used for mapping */
- 
- #define REPLACE_FLAG	0x40	/* Replace mode flag */
- #define REPLACE		(REPLACE_FLAG + INSERT)
-@@ -605,6 +604,9 @@
- #define CONFIRM		0x800	/* ":confirm" prompt */
- #define SELECTMODE	0x1000	/* Select mode, only for mappings */
- 
-+#define MAP_ALL_MODES	(0x3f | SELECTMODE)	/* all mode bits used for
-+						 * mapping */
-+
- /* directions */
- #define FORWARD			1
- #define BACKWARD		(-1)
-@@ -1118,6 +1120,7 @@
-     EVENT_FOCUSGAINED,		/* got the focus */
-     EVENT_FOCUSLOST,		/* lost the focus to another app */
-     EVENT_GUIENTER,		/* after starting the GUI */
-+    EVENT_GUIFAILED,		/* after starting the GUI failed */
-     EVENT_INSERTCHANGE,		/* when changing Insert/Replace mode */
-     EVENT_INSERTENTER,		/* when entering Insert mode */
-     EVENT_INSERTLEAVE,		/* when leaving Insert mode */
-diff -Naur vim70.orig/src/window.c vim70/src/window.c
---- vim70.orig/src/window.c	2006-05-06 03:54:51.000000000 -0700
-+++ vim70/src/window.c	2006-10-13 01:02:56.000000000 -0700
-@@ -340,10 +340,10 @@
- 		{
- 		    tabpage_T	*oldtab = curtab;
- 		    tabpage_T	*newtab;
--		    win_T	*wp = curwin;
- 
- 		    /* First create a new tab with the window, then go back to
- 		     * the old tab and close the window there. */
-+		    wp = curwin;
- 		    if (win_new_tabpage((int)Prenum) == OK
- 						     && valid_tabpage(oldtab))
- 		    {
-@@ -3954,13 +3954,8 @@
-     setmouse();			/* in case jumped to/from help buffer */
- #endif
- 
--#ifdef FEAT_AUTOCHDIR
--    /* Change directories when the 'acd' option is set on and after
--     * switching windows. */
--    if (p_acd && curbuf->b_ffname != NULL
--				     && vim_chdirfile(curbuf->b_ffname) == OK)
--	shorten_fnames(TRUE);
--#endif
-+    /* Change directories when the 'acd' option is set. */
-+    DO_AUTOCHDIR
- }
- 
- #endif /* FEAT_WINDOWS */
-
-	
-
Index: patches/vim-7.0-fixes-15.patch
===================================================================
--- patches/vim-7.0-fixes-15.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
+++ patches/vim-7.0-fixes-15.patch	(revision 862e2c05ca814244cf3c1490b6dd437f3c34ab6d)
@@ -0,0 +1,8469 @@
+Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
+Date: 2006-10-21
+Initial Package Version: 7.0
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains all upstream patches up to 7.0.146
+             The following patches were skipped
+                005 027 028 032 045 057 065 074 108 130 131 132 138
+diff -Naur vim70.orig/configure vim70/configure
+--- vim70.orig/configure	2004-07-05 02:02:24.000000000 -0700
++++ vim70/configure	2006-10-21 21:08:54.000000000 -0700
+@@ -3,4 +3,4 @@
+ # This is just a stub for the Unix configure script, to provide support for
+ # doing "./configure" in the top Vim directory.
+ 
+-cd src && ./configure "$@"
++cd src && exec ./configure "$@"
+diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
+--- vim70.orig/runtime/autoload/ccomplete.vim	2006-05-03 07:35:56.000000000 -0700
++++ vim70/runtime/autoload/ccomplete.vim	2006-10-21 21:08:49.000000000 -0700
+@@ -1,7 +1,7 @@
+ " Vim completion script
+ " Language:	C
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 May 03
++" Last Change:	2006 May 08
+ 
+ 
+ " This function is used for the 'omnifunc' option.
+@@ -458,7 +458,7 @@
+ " member.
+ function! s:StructMembers(typename, items, all)
+   " Todo: What about local structures?
+-  let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
++  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
+   if fnames == ''
+     return []
+   endif
+diff -Naur vim70.orig/runtime/autoload/gzip.vim vim70/runtime/autoload/gzip.vim
+--- vim70.orig/runtime/autoload/gzip.vim	2006-03-31 07:12:15.000000000 -0800
++++ vim70/runtime/autoload/gzip.vim	2006-10-21 21:09:06.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim autoload file for editing compressed files.
+ " Maintainer: Bram Moolenaar <Bram@vim.org>
+-" Last Change: 2006 Mar 31
++" Last Change: 2006 Oct 03
+ 
+ " These functions are used by the gzip plugin.
+ 
+@@ -68,9 +68,9 @@
+   let tmp = tempname()
+   let tmpe = tmp . "." . expand("<afile>:e")
+   " write the just read lines to a temp file "'[,']w tmp.gz"
+-  execute "silent '[,']w " . tmpe
++  execute "silent '[,']w " . escape(tmpe, ' ')
+   " uncompress the temp file: call system("gzip -dn tmp.gz")
+-  call system(a:cmd . " " . tmpe)
++  call system(a:cmd . " " . s:escape(tmpe))
+   if !filereadable(tmp)
+     " uncompress didn't work!  Keep the compressed file then.
+     echoerr "Error: Could not read uncompressed file"
+@@ -127,9 +127,9 @@
+     let nmt = s:tempname(nm)
+     if rename(nm, nmt) == 0
+       if exists("b:gzip_comp_arg")
+-	call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
++	call system(a:cmd . " " . b:gzip_comp_arg . " " . s:escape(nmt))
+       else
+-	call system(a:cmd . " " . nmt)
++	call system(a:cmd . " " . s:escape(nmt))
+       endif
+       call rename(nmt . "." . expand("<afile>:e"), nm)
+     endif
+@@ -154,10 +154,10 @@
+     if rename(nm, nmte) == 0
+       if &patchmode != "" && getfsize(nm . &patchmode) == -1
+ 	" Create patchmode file by creating the decompressed file new
+-	call system(a:cmd . " -c " . nmte . " > " . nmt)
++	call system(a:cmd . " -c " . s:escape(nmte) . " > " . s:escape(nmt))
+ 	call rename(nmte, nm . &patchmode)
+       else
+-	call system(a:cmd . " " . nmte)
++	call system(a:cmd . " " . s:escape(nmte))
+       endif
+       call rename(nmt, nm)
+     endif
+@@ -175,4 +175,12 @@
+   return fnamemodify(a:name, ":p:h") . "/X~=@l9q5"
+ endfun
+ 
++fun s:escape(name)
++  " shellescape() was added by patch 7.0.111
++  if v:version > 700 || (v:version == 700 && has('patch111'))
++    return shellescape(a:name)
++  endif
++  return "'" . a:name . "'"
++endfun
++
+ " vim: set sw=2 :
+diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim
+--- vim70.orig/runtime/autoload/paste.vim	2006-04-21 11:31:01.000000000 -0700
++++ vim70/runtime/autoload/paste.vim	2006-10-21 21:08:52.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim support file to help with paste mappings and menus
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Apr 21
++" Last Change:	2006 Jun 23
+ 
+ " Define the string to use for items that are present both in Edit, Popup and
+ " Toolbar menu.  Also used in mswin.vim and macmap.vim.
+@@ -12,7 +12,7 @@
+ if has("virtualedit")
+   let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
+   let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
+-  let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
++  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'
+ 
+   func! paste#Paste()
+     let ove = &ve
+diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
+--- vim70.orig/runtime/autoload/spellfile.vim	2006-02-01 04:12:24.000000000 -0800
++++ vim70/runtime/autoload/spellfile.vim	2006-10-21 21:09:00.000000000 -0700
+@@ -1,9 +1,9 @@
+ " Vim script to download a missing spell file
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Feb 01
++" Last Change:	2006 Aug 29
+ 
+ if !exists('g:spellfile_URL')
+-  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
++  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
+ endif
+ let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
+ 
+@@ -61,13 +61,13 @@
+     new
+     setlocal bin
+     echo 'Downloading ' . fname . '...'
+-    exe 'Nread ' g:spellfile_URL . '/' . fname
++    call spellfile#Nread(fname)
+     if getline(2) !~ 'VIMspell'
+       " Didn't work, perhaps there is an ASCII one.
+       g/^/d
+       let fname = a:lang . '.ascii.spl'
+       echo 'Could not find it, trying ' . fname . '...'
+-      exe 'Nread ' g:spellfile_URL . '/' . fname
++      call spellfile#Nread(fname)
+       if getline(2) !~ 'VIMspell'
+ 	echo 'Sorry, downloading failed'
+ 	bwipe!
+@@ -95,7 +95,7 @@
+ 	g/^/d
+ 	let fname = substitute(fname, '\.spl$', '.sug', '')
+ 	echo 'Downloading ' . fname . '...'
+-	exe 'Nread ' g:spellfile_URL . '/' . fname
++	call spellfile#Nread(fname)
+ 	if getline(2) !~ 'VIMsug'
+ 	  echo 'Sorry, downloading failed'
+ 	else
+@@ -109,3 +109,15 @@
+     bwipe
+   endif
+ endfunc
++
++" Read "fname" from the server.
++function! spellfile#Nread(fname)
++  if g:spellfile_URL =~ '^ftp://'
++    " for an ftp server use a default login and password to avoid a prompt
++    let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
++    let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
++    exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
++  else
++    exe 'Nread ' g:spellfile_URL . '/' . a:fname
++  endif
++endfunc
+diff -Naur vim70.orig/runtime/doc/eval.txt vim70/runtime/doc/eval.txt
+--- vim70.orig/runtime/doc/eval.txt	2006-05-07 05:16:44.000000000 -0700
++++ vim70/runtime/doc/eval.txt	2006-10-21 21:09:06.000000000 -0700
+@@ -1,4 +1,4 @@
+-*eval.txt*      For Vim version 7.0.  Last change: 2006 May 06
++*eval.txt*      For Vim version 7.0.  Last change: 2006 Sep 22
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -1709,6 +1709,8 @@
+ settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
+ 					{winnr} in tab page {tabnr} to {val}
+ setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
++shellescape( {string})		String	escape {string} for use as shell
++					command argument
+ simplify( {filename})		String	simplify filename as much as possible
+ sort( {list} [, {func}])	List	sort {list}, using {func} to compare
+ soundfold( {word})		String	sound-fold {word}
+@@ -4434,6 +4436,21 @@
+ 			:call setwinvar(1, "&list", 0)
+ 			:call setwinvar(2, "myvar", "foobar")
+ 
++shellescape({string})					*shellescape()*
++		Escape {string} for use as shell command argument.
++		On MS-Windows and MS-DOS, when 'shellslash' is not set, it
++		will enclose {string} double quotes and double all double
++		quotes within {string}.
++		For other systems, it will enclose {string} in single quotes
++		and replace all "'" with "'\''".
++		Example: >
++			:echo shellescape('c:\program files\vim')
++<		results in:
++			"c:\program files\vim" ~
++		Example usage: >
++			:call system("chmod +x -- " . shellescape(expand("%")))
++
++
+ simplify({filename})					*simplify()*
+ 		Simplify the file name as much as possible without changing
+ 		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
+diff -Naur vim70.orig/runtime/menu.vim vim70/runtime/menu.vim
+--- vim70.orig/runtime/menu.vim	2006-04-17 06:47:28.000000000 -0700
++++ vim70/runtime/menu.vim	2006-10-21 21:09:05.000000000 -0700
+@@ -2,7 +2,7 @@
+ " You can also use this as a start for your own set of menus.
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Apr 17
++" Last Change:	2006 Sep 14
+ 
+ " Note that ":an" (short for ":anoremenu") is often used to make a menu work
+ " in all modes and avoid side effects from mappings defined by the user.
+@@ -885,6 +885,8 @@
+     if exists("s:changeitem") && s:changeitem != ''
+       call <SID>SpellDel()
+     endif
++
++    " Return quickly if spell checking is not enabled.
+     if !&spell || &spelllang == ''
+       return
+     endif
+@@ -908,18 +910,18 @@
+ 	let s:fromword = w
+ 	let pri = 1
+ 	for sug in s:suglist
+-	  exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
++	  exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
+ 		\ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
+ 	  let pri += 1
+ 	endfor
+ 
+ 	let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
+-	exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
++	exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
+ 
+ 	let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
+-	exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
++	exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
+ 
+-	amenu 1.8 PopUp.-SpellSep- :
++	anoremenu 1.8 PopUp.-SpellSep- :
+       endif
+     endif
+   endfunc
+@@ -938,7 +940,9 @@
+     let s:changeitem = ''
+   endfun
+ 
+-  au! MenuPopup * call <SID>SpellPopup()
++  augroup SpellPopupMenu
++    au! MenuPopup * call <SID>SpellPopup()
++  augroup END
+ endif
+ 
+ " The GUI toolbar (for MS-Windows and GTK)
+@@ -1013,9 +1017,9 @@
+     tmenu ToolBar.FindPrev	Find Previous
+     tmenu ToolBar.Replace		Find / Replace...
+   endif
+-  tmenu ToolBar.LoadSesn	Chose a session to load
++  tmenu ToolBar.LoadSesn	Choose a session to load
+   tmenu ToolBar.SaveSesn	Save current session
+-  tmenu ToolBar.RunScript	Chose a Vim Script to run
++  tmenu ToolBar.RunScript	Choose a Vim Script to run
+   tmenu ToolBar.Make		Make current project (:make)
+   tmenu ToolBar.RunCtags	Build tags in current directory tree (!ctags -R .)
+   tmenu ToolBar.TagJump		Jump to tag under cursor
+diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
+--- vim70.orig/runtime/plugin/matchparen.vim	2006-04-27 06:31:26.000000000 -0700
++++ vim70/runtime/plugin/matchparen.vim	2006-10-21 21:09:04.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim plugin for showing matching parens
+ " Maintainer:  Bram Moolenaar <Bram@vim.org>
+-" Last Change: 2006 Apr 27
++" Last Change: 2006 Sep 09
+ 
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+@@ -44,7 +44,7 @@
+   let before = 0
+ 
+   let c = getline(c_lnum)[c_col - 1]
+-  let plist = split(&matchpairs, ':\|,')
++  let plist = split(&matchpairs, '.\zs[:,]')
+   let i = index(plist, c)
+   if i < 0
+     " not found, in Insert mode try character before the cursor
+@@ -90,19 +90,19 @@
+   " Find the match.  When it was just before the cursor move it there for a
+   " moment.
+   if before > 0
+-    let save_cursor = getpos('.')
++    let save_cursor = winsaveview()
+     call cursor(c_lnum, c_col - before)
+   endif
+ 
+   " When not in a string or comment ignore matches inside them.
+   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
+-	\ '=~?  "string\\|comment"'
++	\ '=~?  "string\\|character\\|singlequote\\|comment"'
+   execute 'if' s_skip '| let s_skip = 0 | endif'
+ 
+   let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
+ 
+   if before > 0
+-    call setpos('.', save_cursor)
++    call winrestview(save_cursor)
+   endif
+ 
+   " If a match is found setup match highlighting.
+diff -Naur vim70.orig/runtime/scripts.vim vim70/runtime/scripts.vim
+--- vim70.orig/runtime/scripts.vim	2006-03-28 11:30:49.000000000 -0800
++++ vim70/runtime/scripts.vim	2006-10-21 21:08:54.000000000 -0700
+@@ -1,7 +1,7 @@
+ " Vim support file to detect file types in scripts
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last change:	2006 Mar 28
++" Last change:	2006 Jul 08
+ 
+ " This file is called by an autocommand for every file that has just been
+ " loaded into a buffer.  It checks if the type of file can be recognized by
+@@ -54,6 +54,12 @@
+     let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
+   endif
+ 
++  " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
++  " third line.  Suggested by Steven Atkinson.
++  if getline(3) =~ '^exec wish'
++    let s:name = 'wish'
++  endif
++
+   " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
+   if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
+     call SetFileTypeSH(s:line1)	" defined in filetype.vim
+diff -Naur vim70.orig/runtime/tutor/Makefile vim70/runtime/tutor/Makefile
+--- vim70.orig/runtime/tutor/Makefile	2004-06-07 07:32:39.000000000 -0700
++++ vim70/runtime/tutor/Makefile	2006-10-21 21:09:04.000000000 -0700
+@@ -2,8 +2,13 @@
+ #
+ # The Japanese tutor exists in three encodings.  Use the UTF-8 version as the
+ # original and create the others with conversion.
++#
++# Similarly for Russian and Korean
+ 
+-all: tutor.ja.sjis tutor.ja.euc tutor.ko.euc
++all: tutor.ja.sjis tutor.ja.euc \
++	tutor.ko.euc \
++	tutor.ru tutor.ru.cp1251 \
++	tutor.gr tutor.gr.cp737
+ 
+ tutor.ja.sjis: tutor.ja.utf-8
+ 	nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
+@@ -13,3 +18,15 @@
+ 
+ tutor.ko.euc: tutor.ko.utf-8
+ 	iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
++
++tutor.ru: tutor.ru.utf-8
++	iconv -f UTF-8 -t KOI8-R tutor.ru.utf-8 > tutor.ru
++
++tutor.ru.cp1251: tutor.ru.utf-8
++	iconv -f UTF-8 -t cp1251 tutor.ru.utf-8 > tutor.ru.cp1251
++
++tutor.gr: tutor.gr.utf-8
++	iconv -f UTF-8 -t ISO-8859-7 tutor.gr.utf-8 > tutor.gr
++
++tutor.gr.cp737: tutor.gr.utf-8
++	iconv -f UTF-8 -t cp737 tutor.gr.utf-8 > tutor.gr.cp737
+diff -Naur vim70.orig/runtime/tutor/tutor.gr.utf-8 vim70/runtime/tutor/tutor.gr.utf-8
+--- vim70.orig/runtime/tutor/tutor.gr.utf-8	1969-12-31 16:00:00.000000000 -0800
++++ vim70/runtime/tutor/tutor.gr.utf-8	2006-10-21 21:09:04.000000000 -0700
+@@ -0,0 +1,815 @@
++===============================================================================
++=    Î Î±Î» Ï Ï Î® Ï Îž Î± Ï Îµ    Ï Ï Î¿   V I M   T u t o r    -    ÎÎºÎŽÎ¿ÏÎ· 1.5     =
++===============================================================================
++
++     Î Vim ÎµÎ¯ÎœÎ±Î¹ Î­ÎœÎ±Ï ÏÎ±ÎœÎ¯ÏÏÏ
+ÏÎ¿Ï ÏÏ
+ÎœÏÎ¬ÎºÏÎ·Ï ÏÎ¿Ï
+ Î­ÏÎµÎ¹ ÏÎ¿Î»Î»Î­Ï ÎµÎœÏÎ¿Î»Î­Ï, ÏÎ¬ÏÎ±
++     ÏÎ¿Î»Î»Î­Ï Î³Î¹Î± ÎœÎ± ÎµÎŸÎ·Î³Î®ÏÎ¿Ï
+ÎŒÎµ ÏÎµ ÎŒÎ¯Î± ÏÎµÏÎ¹Î®Î³Î·ÏÎ· ÏÏÏÏ Î±Ï
+ÏÎ®. ÎÏ
+ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ·
++     ÏÏÎµÎŽÎ¹Î¬ÏÏÎ·ÎºÎµ Î³Î¹Î± ÎœÎ± ÏÎµÏÎ¹Î³ÏÎ¬ÏÎµÎ¹ Î¹ÎºÎ±ÎœÎ¿ÏÎ¿Î¹Î·ÏÎ¹ÎºÎ¬ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï ÏÎ¿Ï
+ ÎžÎ± ÏÎ±Ï
++     ÎºÎ¬ÎœÎ¿Ï
+Îœ ÎœÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎµ ÎµÏÎºÎ¿Î»Î± ÏÎ¿Îœ Vim ÏÎ±Îœ Î­ÎœÎ±Îœ Î³ÎµÎœÎ¹ÎºÎ®Ï ÏÏÎ®ÏÎ·Ï ÏÏ
+ÎœÏÎ¬ÎºÏÎ·.
++
++     Î ÎºÎ±ÏÎ¬ ÏÏÎ¿ÏÎ­Î³Î³Î¹ÏÎ· ÏÏÏÎœÎ¿Ï ÏÎ¿Ï
+ Î±ÏÎ±Î¹ÏÎµÎ¯ÏÎ±Î¹ Î³Î¹Î± ÎœÎ± Î¿Î»Î¿ÎºÎ»Î·ÏÏÏÎµÏÎµ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·
++     ÎµÎ¯ÎœÎ±Î¹ 25-30 Î»ÎµÏÏÎ¬, ÎµÎŸÎ±ÏÏÏÎœÏÎ±Ï Î±ÏÏ ÏÎ¿ ÏÏÏÎ¿ ÏÏÏÎœÎ¿ ÎžÎ± ÎŸÎ¿ÎŽÎ­ÏÎµÏÎµ Î³Î¹Î±
++     ÏÎµÎ¹ÏÎ±ÎŒÎ±ÏÎ¹ÏÎŒÎ¿ÏÏ.
++
++     ÎÎ¹ ÎµÎœÏÎ¿Î»Î­Ï ÏÏÎ± ÎŒÎ±ÎžÎ®ÎŒÎ±ÏÎ± ÎžÎ± ÏÏÎ¿ÏÎ¿ÏÎ¿Î¹Î®ÏÎ¿Ï
+Îœ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿. ÎÎ·ÎŒÎ¹Î¿Ï
+ÏÎ³Î®ÏÏÎµ Î­ÎœÎ±
++     Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿ Î±Ï
+ÏÎ¿Ï ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+ Î³Î¹Î± ÎœÎ± ÎµÎŸÎ±ÏÎºÎ·ÎžÎµÎ¯ÏÎµ (Î±Îœ ÎŸÎµÎºÎ¹ÎœÎ®ÏÎ±ÏÎµ ÏÎ¿
++     "Vimtutor" Î±Ï
+ÏÏ ÎµÎ¯ÎœÎ±Î¹ Î®ÎŽÎ· Î­ÎœÎ± Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿).
++
++     ÎÎ¯ÎœÎ±Î¹ ÏÎ·ÎŒÎ±ÎœÏÎ¹ÎºÏ ÎœÎ± ÎžÏ
+ÎŒÎ¬ÏÏÎµ ÏÏÎ¹ Î±Ï
+ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ· ÎµÎ¯ÎœÎ±Î¹ Î¿ÏÎ³Î±ÎœÏÎŒÎ­ÎœÎ· Î­ÏÏÎ¹
++     ÏÏÏÎµ ÎœÎ± ÎŽÎ¹ÎŽÎ¬ÏÎºÎµÎ¹ ÎŒÎ­ÏÏ ÏÎ·Ï ÏÏÎ®ÏÎ·Ï. ÎÏ
+ÏÏ ÏÎ·ÎŒÎ±Î¯ÎœÎµÎ¹ ÏÏÎ¹ ÏÏÎµÎ¹Î¬Î¶ÎµÏÎ±Î¹ ÎœÎ±
++     ÎµÎºÏÎµÎ»ÎµÎ¯ÏÎµ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï Î³Î¹Î± ÎœÎ± ÏÎ¹Ï ÎŒÎ¬ÎžÎµÏÎµ ÏÏÏÏÎ¬. ÎÎœ ÎŽÎ¹Î±Î²Î¬Î¶ÎµÏÎµ ÎŒÏÎœÎ¿ ÏÎ¿
++     ÎºÎµÎ¯ÎŒÎµÎœÎ¿, ÎžÎ± ÏÎ¹Ï ÎŸÎµÏÎ¬ÏÎµÏÎµ!
++
++     Î€ÏÏÎ±, Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ Shift-Lock ÎÎÎ ÎµÎ¯ÎœÎ±Î¹ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÎºÎ±Î¹
++     ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ j Î±ÏÎºÎµÏÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± Î­ÏÏÎ¹
++     ÏÏÏÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.1 ÎœÎ± Î³ÎµÎŒÎ¯ÏÎµÎ¹ ÏÎ»Î®ÏÏÏ ÏÎ·Îœ Î¿ÎžÏÎœÎ·.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ÎÎ¬ÎžÎ·ÎŒÎ± 1.1:  ÎÎÎ€ÎÎÎÎÎÎÎ€ÎÎ£ Î€ÎÎ ÎÎ¡ÎÎÎÎ
++
++  ** ÎÎ¹Î± ÎœÎ± ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ ÏÎ± ÏÎ»Î®ÎºÏÏÎ± h,j,k,l ÏÏÏÏ ÎŽÎµÎ¯ÏÎœÎµÏÎ±Î¹. **
++	     ^
++	     k	      Hint: Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ h ÎµÎ¯ÎœÎ±Î¹ Î±ÏÎ¹ÏÏÎµÏÎ¬ ÎºÎ±Î¹ ÎºÎ¹ÎœÎµÎ¯ ÏÏ' Î±ÏÎ¹ÏÏÎµÏÎ¬.
++       < h	 l >	    Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ l ÎµÎ¯ÎœÎ±Î¹ ÎŽÎµÎŸÎ¹Î¬ ÎºÎ±Î¹ ÎºÎ¹ÎœÎµÎ¯ ÏÏÎ± ÎŽÎµÎŸÎ¹Î¬.
++	     j		    Î€Î¿ ÏÎ»Î®ÎºÏÏÎ¿ j ÎŒÎ¿Î¹Î¬Î¶ÎµÎ¹ ÎŒÎµ Î²ÎµÎ»Î¬ÎºÎ¹ ÏÏÎ¿Ï ÏÎ± ÎºÎ¬ÏÏ.
++	     v
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¹Î³ÏÏÏ ÏÏÎ·Îœ Î¿ÎžÏÎœÎ· ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎœÎ¿Î¹ÏÎžÎµÏÎµ Î¬ÎœÎµÏÎ±.
++
++  2. ÎÏÎ±ÏÎ®ÏÏÎµ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÎºÎ¬ÏÏ ÏÎ»Î®ÎºÏÏÎ¿ (j) ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÏÎ±ÎœÎ±Î»Î·ÏÎžÎµÎ¯.
++---> Î€ÏÏÎ± ÎŸÎ­ÏÎµÏÎµ ÏÏÏ ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±.
++
++  3. Î§ÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ¿ ÎºÎ¬ÏÏ ÏÎ»Î®ÎºÏÏÎ¿, ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.2.
++
++Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎœ Î±ÎŒÏÎ¹Î²Î¬Î»Î»ÎµÏÎµ Î³Î¹Î± ÎºÎ¬ÏÎ¹ ÏÎ¿Ï
+ ÏÎ±ÏÎ®ÏÎ±ÏÎµ, ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ± Î²ÏÎµÎžÎµÎ¯ÏÎµ
++	  ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·. ÎÎµÏÎ¬ ÏÎ±ÏÎ®ÏÏÎµ ÎŸÎ±ÎœÎ¬ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ÏÎ¿Ï
+ ÎžÎ­Î»Î±ÏÎµ.
++
++Î£Î·ÎŒÎµÎ¯ÏÏÎ·: Î€Î± ÏÎ»Î®ÎºÏÏÎ± ÏÎ¿Ï
+ ÎŽÏÎ¿ÎŒÎ­Î± ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎµÏÎ¯ÏÎ·Ï ÎœÎ± ÎŽÎ¿Ï
+Î»ÎµÏÎ¿Ï
+Îœ. ÎÎ»Î»Î¬ ÎŒÎµ ÏÎ± hjkl
++	  ÎžÎ± ÎŒÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÎ¿Î»Ï Î³ÏÎ·Î³Î¿ÏÏÏÎµÏÎ±, ÎŒÏÎ»Î¹Ï ÏÎ± ÏÏ
+ÎœÎ·ÎžÎ¯ÏÎµÏÎµ.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		ÎÎ¬ÎžÎ·ÎŒÎ± 1.2:  ÎÎ ÎÎÎÎÎÎ€ÎÎ£ ÎÎÎ ÎÎÎÎÎÎÎÎ€ÎÎ£ Î£Î€ÎÎ VIM
++
++  !! Î£ÎÎÎÎÎ©Î£Î: Î ÏÎ¹Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± Î²Î®ÎŒÎ±ÏÎ±, ÎŽÎ¹Î±Î²Î¬ÏÏÎµ ÏÎ»Î¿ ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±!!
++
++  1. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <ESC> (Î³Î¹Î± ÎœÎ± ÎµÎ¯ÏÏÎµ ÏÎ¯Î³Î¿Ï
+ÏÎ± ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·).
++
++  2. Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ:		:q! <ENTER>.
++
++---> ÎÏ
+ÏÏ ÎµÎŸÎ­ÏÏÎµÏÎ±Î¹ Î±ÏÏ ÏÎ¿Îœ ÏÏ
+ÎœÏÎ¬ÎºÏÎ· Î§Î©Î¡ÎÎ£ ÎœÎ± ÏÏÏÎµÎ¹ ÏÏÎ¿Î¹ÎµÏ Î±Î»Î»Î±Î³Î­Ï Î­ÏÎµÏÎµ ÎºÎ¬ÎœÎµÎ¹.
++     ÎÎœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÏÏÎµÏÎµ ÏÎ¹Ï Î±Î»Î»Î±Î³Î­Ï ÎºÎ±Î¹ ÎœÎ± ÎµÎŸÎ­ÏÎžÎµÏÎµ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ:
++	      :wq <ENTER>
++
++  3. ÎÏÎ±Îœ ÎŽÎµÎ¯ÏÎµ ÏÎ·Îœ ÏÏÎ¿ÏÏÎ¿ÏÎ® ÏÎ¿Ï
+ ÏÎ»Î¿Î¹Î¿Ï, ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ÎŒÎµ ÏÎ·Îœ Î¿ÏÎ¿Î¯Î±
++     ÎŒÏÎ®ÎºÎ±ÏÎµ ÏÎµ Î±Ï
+ÏÎ®Îœ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·. ÎÏÎ¿ÏÎµÎ¯ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹:	vimtutor <ENTER>
++     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ¬ ÎžÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î¿ÏÏÎ±ÏÎµ:			vim tutor <ENTER>
++
++---> 'vim' ÏÎ·ÎŒÎ±Î¯ÎœÎµÎ¹ ÎµÎ¹ÏÎ±Î³ÏÎ³Î® ÏÏÎ¿Îœ ÏÏ
+ÎœÏÎ¬ÎºÏÎ· vim, 'tutor' ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
+
++     ÎžÎ­Î»Î¿Ï
+ÎŒÎµ ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎ¿Ï
+ÎŒÎµ.
++
++  4. ÎÎœ Î­ÏÎµÏÎµ Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÏÎµÎ¹ Î±Ï
+ÏÎ¬ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± ÎºÎ±Î¹ Î­ÏÎµÏÎµ Î±Ï
+ÏÎ¿ÏÎµÏÎ¿Î¯ÎžÎ·ÏÎ·, ÎµÎºÏÎµÎ»Î­ÏÏÎµ
++     ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 1 Î­ÏÏ 3 Î³Î¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ ÎºÎ±Î¹ ÎœÎ± ÎŒÏÎµÎ¯ÏÎµ ÎŸÎ±ÎœÎ¬ ÏÏÎ¿Îœ ÏÏ
+ÎœÏÎ¬ÎºÏÎ·. ÎÎµÏÎ¬
++     ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ¬ÏÏ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.3.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 1.3:  ÎÎÎÎ¡ÎÎ©Î£Î ÎÎÎÎÎÎÎÎ¥ - ÎÎÎÎÎ¡ÎÎŠÎ
++
++   ** ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  x  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ
++      ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ ÏÎ± Î»Î¬ÎžÎ·, ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ Î±ÏÏ
++     ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÎ¿Ï
+ ÎžÎ± ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯.
++
++  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ x Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.
++
++  4. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎŒÎ­ÏÏÎ¹ 4 ÎŒÎ­ÏÏÎ¹ Î· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ®.
++
++---> The ccow jumpedd ovverr thhe mooon.
++
++  5. Î€ÏÏÎ± ÏÎ¿Ï
+ Î· Î³ÏÎ±ÎŒÎŒÎ® ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ®, ÏÎ·Î³Î±Î¯ÎœÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 1.4.
++
++Î£ÎÎÎÎÎ©Î£Î: ÎÎ±ÎžÏÏ ÎŽÎ¹Î±ÏÏÎ­ÏÎµÏÎµ Î±Ï
+ÏÎ®Îœ ÏÎ·Îœ ÏÎµÏÎ¹Î®Î³Î·ÏÎ·, ÏÏÎ¿ÏÏÎ±ÎžÎ®ÏÏÎµ ÎœÎ± ÎŒÎ·Îœ
++	  Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÎµÏÎµ, ÎŒÎ±ÎžÎ±Î¯ÎœÎµÏÎµ ÎŒÎµ ÏÎ· ÏÏÎ®ÏÎ·.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 1.4: ÎÎÎÎ¡ÎÎ©Î£Î ÎÎÎÎÎÎÎÎ¥ - Î ÎÎ¡ÎÎÎÎÎÎ
++
++ ** ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  i  Î³Î¹Î± ÎœÎ± ÏÎ±ÏÎµÎŒÎ²Î¬Î»Î»ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. ÎÎ¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î¯ÎŽÎ¹Î± ÎŒÎµ ÏÎ·Îœ ÎŽÎµÏÏÎµÏÎ·, ÎŒÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ
++     ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¬ÎœÏ ÏÏÎ¿Îœ ÏÏÏÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎÎÎ€Î Î±ÏÏ ÏÏÎ¿Ï
+ ÎžÎ± ÏÎ±ÏÎµÎŒÎ²Î»Î·ÎžÎµÎ¯ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
++
++  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿  i  ÎºÎ±Î¹ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ¹Ï Î±ÏÎ±ÏÎ±Î¯ÏÎ·ÏÎµÏ ÏÏÎ¿ÏÎžÎ®ÎºÎµÏ.
++
++  4. ÎÎ±ÎžÏÏ ÎŽÎ¹Î¿ÏÎžÏÎœÎµÏÎµ ÎºÎ¬ÎžÎµ Î»Î¬ÎžÎ¿Ï ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ± ÎµÏÎ¹ÏÏÏÎ­ÏÎµÏÎµ ÏÏÎ·Îœ
++     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎŒÎ­ÏÏÎ¹ 4 Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ
++     ÏÎ·Îœ ÏÏÏÏÎ±ÏÎ·.
++
++---> There is text misng this .
++---> There is some text missing from this line.
++
++  5. ÎÏÎ±Îœ ÎµÎ¯ÏÏÎµ Î¬ÎœÎµÏÎ¿Î¹ ÎŒÎµ ÏÎ·Îœ ÏÎ±ÏÎµÎŒÎ²Î¿Î»Î® ÎºÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+ ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ
++     ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎµÏÎ¯Î»Î·ÏÎ·.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 1 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1. Î ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎºÎ¹ÎœÎµÎ¯ÏÎ±Î¹ ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÎµÎ¯ÏÎµ ÏÎ± ÏÎ»Î®ÎºÏÏÎ± ÎŽÏÎ¿ÎŒÎ­Î± Î® ÏÎ± hjkl.
++	 h (Î±ÏÎ¹ÏÏÎ­ÏÎ±)	j (ÎºÎ¬ÏÏ)	k (ÏÎ¬ÎœÏ)	l (ÎŽÎµÎŸÎ¹Î¬)
++
++  2. ÎÎ¹Î± ÎœÎ± ÎŒÏÎµÎ¯ÏÎµ ÏÏÎ¿Îœ Vim (Î±ÏÏ ÏÎ·Îœ ÏÏÎ¿ÏÏÎ¿ÏÎ® %) Î³ÏÎ¬ÏÏÎµ:  vim ÎÎ¡Î§ÎÎÎ <ENTER>
++
++  3. ÎÎ¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ Î³ÏÎ¬ÏÏÎµ:  <ESC>   :q!   <ENTER>   Î³Î¹Î± Î±ÏÏÏÏÎ¹ÏÎ· ÏÏÎœ Î±Î»Î»Î±Î³ÏÎœ.
++		 Î Î³ÏÎ¬ÏÏÎµ:  <ESC>   :wq   <ENTER>   Î³Î¹Î± Î±ÏÎ¿ÎžÎ®ÎºÎµÏ
+ÏÎ· ÏÏÎœ Î±Î»Î»Î±Î³ÏÎœ.
++
++  4. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î­ÎœÎ±Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎµ
++     ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ:  x
++
++  5. ÎÎ¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· Î³ÏÎ¬ÏÏÎµ:
++	 i     ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿	<ESC>
++
++Î£ÎÎÎÎÎ©Î£Î: Î Î±ÏÏÎœÏÎ±Ï <ESC> ÎžÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· Î® ÎžÎ±
++	  Î±ÎºÏ
+ÏÏÏÎµÏÎµ ÎŒÎ¯Î± Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ· ÎºÎ±Î¹ ÎŒÎµÏÎ¹ÎºÏÏ Î¿Î»Î¿ÎºÎ»Î·ÏÏÎŒÎ­ÎœÎ· ÎµÎœÏÎ¿Î»Î®.
++
++Î€ÏÏÎ± ÏÏ
+ÎœÎµÏÎ¯ÏÏÎµ ÎŒÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ÎÎ¬ÎžÎ·ÎŒÎ± 2.1: ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎ¡ÎÎŠÎÎ£
++
++	 ** ÎÏÎ¬ÏÏÎµ  dw  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÎŒÎ¯Î±Ï Î»Î­ÎŸÎ·Ï. **
++
++  1. Î Î±ÏÎ®ÏÏÎµ  <ESC>  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
++
++  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  3. Î Î·Î³Î±Î¯ÎœÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÏÏÎ® ÏÎ·Ï Î»Î­ÎŸÎ·Ï ÏÎ¿Ï
+ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯.
++
++  4. ÎÏÎ¬ÏÏÎµ  dw  Î³Î¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ Î»Î­ÎŸÎ· ÎœÎ± ÎµÎŸÎ±ÏÎ±ÎœÎ¹ÏÏÎµÎ¯.
++
++Î£ÎÎÎÎÎ©Î£Î: Î€Î± Î³ÏÎ¬ÎŒÎŒÎ±ÏÎ± dw ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎ¿ÏÎœ ÏÏÎ·Îœ ÏÎµÎ»ÎµÏ
+ÏÎ±Î¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï ÏÏÎ¿
++	  ÏÎ± ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³ÎµÎ¯ÏÎµ. ÎÎœ Î³ÏÎ¬ÏÎ±ÏÎµ ÎºÎ¬ÏÎ¹ Î»Î¬ÎžÎ¿Ï, ÏÎ±ÏÎ®ÏÏÎµ  <ESC>  ÎºÎ±Î¹
++	  ÎŸÎµÎºÎ¹ÎœÎ®ÏÏÎµ Î±ÏÏ ÏÎ·Îœ Î±ÏÏÎ®.
++
++---> There are a some words fun that don't belong paper in this sentence.
++
++  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 3 ÎºÎ±Î¹ 4 ÎŒÎ­ÏÏÎ¹ Î· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ® ÎºÎ±Î¹
++     ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 2.2: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡ÎÎ£ ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎ¡ÎÎŠÎÎ£
++
++    ** Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ  d$  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï. **
++
++  1. Î Î±ÏÎ®ÏÏÎµ  <ESC>  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
++
++  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï ÏÏÏÏÎ®Ï Î³ÏÎ±ÎŒÎŒÎ®Ï (ÎÎÎ€Î ÏÎ·Îœ ÏÏÏÏÎ· . ).
++
++  4. Î Î±ÏÎ®ÏÏÎµ   d$   Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++
++---> Somebody typed the end of this line twice. end of this line twice.
++
++  5. Î Î·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 2.3 Î³Î¹Î± ÎœÎ± ÎºÎ±ÏÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ¹ ÏÏ
+ÎŒÎ²Î±Î¯ÎœÎµÎ¹.
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 2.3: Î ÎÎ¡Î ÎÎÎ€ÎÎÎ©Î ÎÎÎ ÎÎÎ€ÎÎÎÎÎÎÎÎ©Î
++
++
++Î ÎŒÎ¿ÏÏÎ® ÏÎ·Ï ÎµÎœÏÎ¿Î»Î®Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï  d  ÎµÎ¯ÎœÎ±Î¹ ÏÏ ÎµÎŸÎ®Ï:
++
++	 [Î±ÏÎ¹ÎžÎŒÏÏ]   d   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿	Î	d   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
++  ÎÏÎ¿Ï
+:
++    Î±ÏÎ¹ÎžÎŒÏÏ - ÏÏÏÎµÏ ÏÎ¿ÏÎ­Ï ÎžÎ± ÎµÎºÏÎµÎ»ÎµÏÏÎµÎ¯ Î· ÎµÎœÏÎ¿Î»Î® (ÏÏÎ¿Î±Î¹ÏÎµÏÎ¹ÎºÏ, ÎµÎŸ' Î¿ÏÎ¹ÏÎŒÎ¿Ï=1).
++    d - Î· ÎµÎœÏÎ¿Î»Î® ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï.
++    Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ - ÏÎ¬ÎœÏ ÏÎµ ÏÎ¹ ÎžÎ± Î»ÎµÎ¹ÏÎ¿Ï
+ÏÎ³Î®ÏÎµÎ¹ Î· ÎµÎœÏÎ¿Î»Î® (ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î»Î¯ÏÏÎ±).
++
++  ÎÎ¯Î± ÎŒÎ¹ÎºÏÎ® Î»Î¯ÏÏÎ± Î±ÏÏ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ±:
++    w - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, ÏÎµÏÎ¹Î»Î±ÎŒÎ²Î¬ÎœÎ¿ÎœÏÎ±Ï ÏÎ¿ ÎŽÎ¹Î¬ÏÏÎ·ÎŒÎ±.
++    e - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, Î§Î©Î¡ÎÎ£ ÏÎ¿ ÎŽÎ¹Î¬ÏÏÎ·ÎŒÎ±.
++    $ - Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++
++Î£ÎÎÎÎÎ©Î£Î:  ÎÎ¹Î± ÏÎ¿Ï
+Ï ÏÏÏÎ¿Ï
+Ï ÏÎ·Ï ÏÎµÏÎ¹ÏÎ­ÏÎµÎ¹Î±Ï, ÏÎ±ÏÏÎœÏÎ±Ï Î±ÏÎ»ÏÏ ÏÎ¿ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿
++	   ÎµÎ¯ÏÏÎµ ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÏÎ¯Ï ÎºÎ¬ÏÎ¿Î¹Î± ÎµÎœÏÎ¿Î»Î® ÎžÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ
++	   ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÏÏ ÎºÎ±ÎžÎ¿ÏÎ¯Î¶ÎµÏÎ±Î¹ ÏÏÎ·Îœ Î»Î¯ÏÏÎ± Î±ÎœÏÎ¹ÎºÎµÎ¹ÎŒÎ­ÎœÏÎœ.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++	       ÎÎ¬ÎžÎ·ÎŒÎ± 2.4: ÎÎÎ ÎÎÎÎÎ¡ÎÎ£Î Î£Î€ÎÎ 'ÎÎÎ€ÎÎÎ-ÎÎÎ€ÎÎÎÎÎÎÎÎ'
++
++	   ** Î Î»Î·ÎºÏÏÎ¿Î»Î¿Î³Î®ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ»Î· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. **
++
++  ÎÎŸÎ±Î¹ÏÎ¯Î±Ï ÏÎ·Ï ÏÏ
+ÏÎœÏÏÎ·ÏÎ±Ï ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï Î¿Î»ÏÎºÎ»Î·ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï, Î¿Î¹ ÏÏÎµÎŽÎ¹Î±ÏÏÎ­Ï
++  ÏÎ¿Ï
+ Vim Î±ÏÎ¿ÏÎ¬ÏÎ¹ÏÎ±Îœ ÏÏÎ¹ ÎžÎ± Î®ÏÎ±Îœ ÎµÏ
+ÎºÎ¿Î»ÏÏÎµÏÎ¿ ÎœÎ± Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÎ»ÏÏ ÎŽÏÎ¿ d ÏÏÎ·
++  ÏÎµÎ¹ÏÎ¬ Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ®.
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ· ÎŽÎµÏÏÎµÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÏÎ¬ÏÎ·Ï.
++  2. ÎÏÎ¬ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++  3. Î€ÏÏÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÏÎ­ÏÎ±ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++  4. ÎÏÎ¬ÏÏÎµ  2dd  (ÎžÏ
+ÎŒÎ·ÎžÎµÎ¯ÏÎµ  Î±ÏÎ¹ÎžÎŒÏÏ-ÎµÎœÏÎ¿Î»Î®-Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿) Î³Î¹Î± ÎœÎ±
++     ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÎ­Ï.
++
++      1)  Roses are red,
++      2)  Mud is fun,
++      3)  Violets are blue,
++      4)  I have a car,
++      5)  Clocks tell time,
++      6)  Sugar is sweet
++      7)  And so are you.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ÎÎ¬ÎžÎ·ÎŒÎ± 2.5: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎ¡ÎÎ£ÎÎ£
++
++	    ** Î Î±ÏÎ®ÏÏÎµ  u  Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï ÏÎµÎ»ÎµÏ
+ÏÎ±Î¯ÎµÏ ÎµÎœÏÎ¿Î»Î­Ï,
++	       U Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î¿ÏÎžÏÏÎµÏÎµ ÏÎ»Î· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> ÎºÎ±Î¹
++     ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ¬ÎœÏ ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
++  2. Î Î±ÏÎ®ÏÏÎµ  x  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ¿Îœ ÏÏÏÏÎ¿ Î±ÎœÎµÏÎ¹ÎžÏÎŒÎ·ÏÎ¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±.
++  3. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  u  Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ·Îœ ÏÎµÎ»ÎµÏ
+ÏÎ±Î¯Î± ÎµÎºÏÎµÎ»ÎµÏÎŒÎ­ÎœÎ· ÎµÎœÏÎ¿Î»Î®.
++  4. ÎÏ
+ÏÎ® ÏÎ· ÏÎ¿ÏÎ¬ ÎŽÎ¹Î¿ÏÎžÏÏÏÎµ ÏÎ»Î± ÏÎ± Î»Î¬ÎžÎ· ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® x.
++  5. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ Î­ÎœÎ± ÎºÎµÏÎ±Î»Î±Î¯Î¿  U  Î³Î¹Î± ÎœÎ± ÎµÏÎ¹ÏÏÏÎ­ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ·Îœ Î±ÏÏÎ¹ÎºÎ®
++     ÏÎ·Ï ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
++  6. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  u  ÎŒÎµÏÎ¹ÎºÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ·Îœ  U  ÎºÎ±Î¹
++     ÏÏÎ¿Î·Î³Î¿ÏÎŒÎµÎœÎµÏ ÎµÎœÏÎ¿Î»Î­Ï.
++  7. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ CTRL-R (ÎºÏÎ±ÏÏÎœÏÎ±Ï ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ CTRL ÎºÎ±ÎžÏÏ ÏÎ±ÏÎ¬ÏÎµ ÏÎ¿ R)
++     ÎŒÎµÏÎ¹ÎºÎ­Ï ÏÎ¿ÏÎ­Ï Î³Î¹Î± ÎœÎ± ÎµÏÎ±ÎœÎ±ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï ÎµÎœÏÎ¿Î»Î­Ï (Î±ÎœÎ±Î¯ÏÎµÏÎ· ÏÏÎœ Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎœ).
++
++---> Fiix the errors oon thhis line and reeplace them witth undo.
++
++  8. ÎÏ
+ÏÎ­Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÏÏÎ®ÏÎ¹ÎŒÎµÏ ÎµÎœÏÎ¿Î»Î­Ï.  Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ·Îœ
++     Î ÎµÏÎ¯Î»Î·ÏÎ· ÏÎ¿Ï
+ ÎÎ±ÎžÎ®ÎŒÎ±ÏÎ¿Ï 2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 2 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î»Î­ÎŸÎ·Ï Î³ÏÎ¬ÏÏÎµ:      dw
++
++  2. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï Î³ÏÎ¬ÏÏÎµ:    d$
++
++  3. ÎÎ¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ Î¿Î»ÏÎºÎ»Î·ÏÎ· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ:    dd
++
++  4. Î ÎŒÎ¿ÏÏÎ® Î³Î¹Î± ÎŒÎ¯Î± ÎµÎœÏÎ¿Î»Î® ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎµÎ¯ÎœÎ±Î¹:
++
++      [Î±ÏÎ¹ÎžÎŒÏÏ]   ÎµÎœÏÎ¿Î»Î®   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿    Î    ÎµÎœÏÎ¿Î»Î®   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
++     ÏÏÎ¿Ï
+:
++       Î±ÏÎ¹ÎžÎŒÏÏ - ÏÏÏÎµÏ ÏÎ¿ÏÎ­Ï ÎœÎ± ÎµÏÎ±ÎœÎ±Î»Î·ÏÎžÎµÎ¯ Î· ÎµÎœÏÎ¿Î»Î®
++       ÎµÎœÏÎ¿Î»Î® - ÏÎ¹ ÎœÎ± Î³Î¯ÎœÎµÎ¹, ÏÏÏÏ Î·  d  Î³Î¹Î± ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®
++       Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿ - ÏÎ¬ÎœÏ ÏÎµ ÏÎ¹ ÎœÎ± ÎµÎœÎµÏÎ³Î®ÏÎµÎ¹ Î· ÎµÎœÏÎ¿Î»Î®, ÏÏÏÏ  w  (Î»Î­ÎŸÎ·),
++		     $ (ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï), ÎºÏÎ».
++
++  5. ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÏÎ¿Î·Î³Î¿ÏÎŒÎµÎœÎµÏ ÎµÎœÎ­ÏÎ³ÎµÎ¹ÎµÏ, ÏÎ±ÏÎ®ÏÏÎµ:        u   (ÏÎµÎ¶Ï u)
++     ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï Î±Î»Î»Î±Î³Î­Ï ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®, ÏÎ±ÏÎ®ÏÏÎµ:  U  (ÎºÎµÏÎ±Î»Î±Î¯Î¿ U)
++     ÎÎ¹Î± ÎœÎ± Î±ÎœÎ±Î¹ÏÎ­ÏÎµÏÎµ ÏÎ¹Ï Î±ÎœÎ±Î¹ÏÎ­ÏÎµÎ¹Ï, ÏÎ±ÏÎ®ÏÏÎµ:               CTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ÎÎ¬ÎžÎ·ÎŒÎ± 3.1: Î ÎÎÎ€ÎÎÎ Î€ÎÎ ÎÎÎÎ€ÎÎ£ÎÎ£
++
++
++  ** Î Î±ÏÎ®ÏÏÎµ  p  Î³Î¹Î± ÎœÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÎµÏÎµ ÏÎ·Îœ ÏÎµÎ»ÎµÏ
+ÏÎ±Î¯Î± ÎŽÎ¹Î±Î³ÏÎ±ÏÎ® ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.  **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î¿ÎŒÎ¬ÎŽÎ±Ï.
++
++  2. Î Î±ÏÎ®ÏÏÎµ  dd  Î³Î¹Î± ÎœÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ±Î¹ ÎœÎ± ÏÎ·Îœ Î±ÏÎ¿ÎžÎ·ÎºÎµÏÏÎµÏÎµ ÏÎµ
++     ÏÏÎ¿ÏÏÏÎ¹ÎœÎ® ÎŒÎœÎ®ÎŒÎ· ÏÎ¿Ï
+ Vim.
++
++  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î ÎÎÎ© Î±ÏÏ ÎµÎºÎµÎ¯ ÏÎ¿Ï
+ ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎ¬ÎµÎ¹
++     Î· ÎŽÎ¹Î±Î³ÏÎ±ÎŒÎŒÎ­ÎœÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++
++  4. ÎÏÎ¿ ÎµÎ¯ÏÏÎµ ÏÎµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ  p  Î³Î¹Î± ÎœÎ± Î²Î¬Î»ÎµÏÎµ ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++
++  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 Î­ÏÏ 4 Î³Î¹Î± ÎœÎ± Î²Î¬Î»ÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï Î³ÏÎ±ÎŒÎŒÎ­Ï ÏÏÎ·
++     ÏÏÏÏÎ® ÏÎµÎ¹ÏÎ¬.
++
++     d) Can you learn too?
++     b) Violets are blue,
++     c) Intelligence is learned,
++     a) Roses are red,
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ÎÎ¬ÎžÎ·ÎŒÎ± 3.2: Î ÎÎÎ€ÎÎÎ ÎÎÎ€ÎÎÎÎ€ÎÎ£Î€ÎÎ£ÎÎ£
++
++
++    ** Î Î±ÏÎ®ÏÏÎµ  r  ÎºÎ±Î¹ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ Î±Ï
+ÏÏÎœ ÏÎ¿Ï
+ ÎµÎ¯ÎœÎ±Î¹
++       ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± Î­ÏÏÎ¹ ÏÏÏÎµ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
++
++  3. Î Î±ÏÎ®ÏÏÎµ  r  ÎºÎ±Î¹ ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± Î¿ Î¿ÏÎ¿Î¯Î¿Ï ÎŽÎ¹Î¿ÏÎžÏÎœÎµÎ¹ ÏÎ¿ Î»Î¬ÎžÎ¿Ï.
++
++  4. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 2 ÎºÎ±Î¹ 3 ÎŒÎ­ÏÏÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÏÏÎ® Î· ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++
++--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
++--->  When this line was typed in, someone pressed some wrong keys!
++
++  5. Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 3.2.
++
++Î£ÎÎÎÎÎ©Î£Î: ÎÎ± ÎžÏ
+ÎŒÎ¬ÏÏÎµ ÏÏÎ¹ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŒÎ±ÎžÎ±Î¯ÎœÎµÏÎµ ÎŒÎµ ÏÎ· ÏÏÎ®ÏÎ·, ÎºÎ±Î¹ ÏÏÎ¹ ÎŒÎµ
++	  ÏÎ·Îœ Î±ÏÎ¿ÎŒÎœÎ·ÎŒÏÎœÎµÏ
+ÏÎ·.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  ÎÎ¬ÎžÎ·ÎŒÎ± 3.3: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎÎ£
++
++	   ** ÎÎ¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎŒÎ®ÎŒÎ± Î® ÏÎ»Î· ÏÎ· Î»Î­ÎŸÎ·, ÏÎ±ÏÎ®ÏÏÎµ  cw  . **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¬ÎœÏ ÏÏÎ¿ u ÏÎ·Ï Î»Î­ÎŸÎ·Ï lubw.
++
++  3. Î Î±ÏÎ®ÏÏÎµ  cw  ÎºÎ±Î¹ ÏÎ· ÏÏÏÏÎ® Î»Î­ÎŸÎ· (ÏÏÎ·Îœ ÏÎµÏÎ¯ÏÏÏÏÎ· Î±Ï
+ÏÎ®, Î³ÏÎ¬ÏÏÎµ  'ine'.)
++
++  4. Î Î±ÏÎ®ÏÏÎµ <ESC> ÎºÎ±Î¹ ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ Î»Î¬ÎžÎ¿Ï (ÏÏÎ¿Îœ ÏÏÏÏÎ¿
++     ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÏÎ¿Ï Î±Î»Î»Î±Î³Î®).
++
++  5. ÎÏÎ±ÎœÎ±Î»Î¬Î²ÎµÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 3 ÎºÎ±Î¹ 4 ÎŒÎ­ÏÏÎ¹Ï ÏÏÎ¿Ï
+ Î· ÏÏÏÏÎ· ÏÏÏÏÎ±ÏÎ· ÎœÎ± ÎµÎ¯ÎœÎ±Î¹
++     Î¯ÎŽÎ¹Î± ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·.
++
++---> This lubw has a few wptfd that mrrf changing usf the change command.
++---> This line has a few words that need changing using the change command.
++
++Î Î±ÏÎ±ÏÎ·ÏÎµÎ¯ÏÏÎµ ÏÏÎ¹ Î·  cw  ÏÏÎ¹ ÎŒÏÎœÎ¿ Î±ÎœÏÎ¹ÎºÎ±ÎžÎ¹ÏÏÎ¬ÎµÎ¹ ÏÎ· Î»Î­ÎŸÎ·, Î±Î»Î»Î¬ ÏÎ±Ï ÎµÎ¹ÏÎ¬Î³ÎµÎ¹
++ÎµÏÎ¯ÏÎ·Ï ÏÎµ ÏÎ±ÏÎµÎŒÎ²Î¿Î»Î®.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ÎÎ¬ÎžÎ·ÎŒÎ± 3.4: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡ÎÎ£ ÎÎÎÎÎÎÎ£ ÎÎ c
++
++
++  ** Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎ±Î¹ ÎŒÎµ ÏÎ± Î¯ÎŽÎ¹Î± Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ± ÏÎ·Ï ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®Ï. **
++
++
++  1. Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÎŽÎ¿Ï
+Î»ÎµÏÎµÎ¹ ÎŒÎµ ÏÎ¿Îœ Î¯ÎŽÎ¹Î¿ ÏÏÏÏÎ¿ ÏÏÏÏ Î· ÎŽÎ¹Î±Î³ÏÎ±ÏÎ®. Î ÎŒÎ¿ÏÏÎ® ÎµÎ¯ÎœÎ±Î¹:
++
++       [Î±ÏÎ¹ÎžÎŒÏÏ]   c   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿     Î     c   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
++
++  2. Î€Î± Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬Î»Î¹ ÏÎ± Î¯ÎŽÎ¹Î±, ÏÏÏÏ w (Î»Î­ÎŸÎ·), $ (ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï), ÎºÏÎ».
++
++  3. ÎÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  4. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÏÏÏÎ¿ Î»Î¬ÎžÎ¿Ï.
++
++  5. ÎÏÎ¬ÏÏÎµ  c$  Î³Î¹Î± ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ¿ Ï
+ÏÏÎ»Î¿Î¹ÏÎ¿ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï Î¯ÎŽÎ¹Î¿ ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·
++     ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ESC>.
++
++---> The end of this line needs some help to make it like the second.
++---> The end of this line needs to be corrected using the  c$  command.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 3 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1. ÎÎ¹Î± ÎœÎ± ÏÎ¿ÏÎ¿ÎžÎµÏÎ®ÏÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ¿Ï
+ ÎŒÏÎ»Î¹Ï Î­ÏÎµÎ¹ ÎŽÎ¹Î±Î³ÏÎ±ÏÎµÎ¯, ÏÎ±ÏÎ®ÏÏÎµ  p .
++     ÎÏ
+ÏÏ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ ÏÎ¿ ÎŽÎ¹Î±Î³ÏÎ±ÎŒÎŒÎ­ÎœÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± (Î±Îœ ÎŽÎ¹Î±Î³ÏÎ¬ÏÏÎ·ÎºÎµ
++     Î³ÏÎ±ÎŒÎŒÎ® ÎžÎ± ÏÎ¬ÎµÎ¹ ÎŒÎµÏÎ¬ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.
++
++  2. ÎÎ¹Î± ÎœÎ± Î±ÎœÏÎ¹ÎºÎ±ÏÎ±ÏÏÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ  r
++     ÎºÎ±Î¹ ÎŒÎµÏÎ¬ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÎ¿Ï
+ ÎžÎ± Î±ÎœÏÎ¹ÎºÎ±ÏÎ±ÏÏÎ®ÏÎµÎ¹ ÏÎ¿Îœ Î±ÏÏÎ¹ÎºÏ.
++
++  3. Î ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î±Î³Î®Ï ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎ¿ ÎºÎ±ÎžÎ¿ÏÎ¹ÏÎŒÎ­ÎœÎ¿ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
++     Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
+ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿. Î .Ï. Î³ÏÎ¬ÏÏÎµ  cw  Î³Î¹Î± ÎœÎ±
++     Î±Î»Î»Î¬ÎŸÎµÏÎµ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î»Î­ÎŸÎ·Ï, c$ Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ
++     ÎŒÎ­ÏÏÎ¹ ÏÎ¿ ÏÎ­Î»Î¿Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++
++  4. Î ÎŒÎ¿ÏÏÎ® Î³Î¹Î± ÏÎ·Îœ Î±Î»Î»Î±Î³Î® ÎµÎ¯ÎœÎ±Î¹:
++
++	 [Î±ÏÎ¹ÎžÎŒÏÏ]   c   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿     Î     c   [Î±ÏÎ¹ÎžÎŒÏÏ]   Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿
++
++Î€ÏÏÎ± ÏÏ
+ÎœÎµÏÎ¯ÏÏÎµ ÎŒÎµ ÏÎ¿ ÎµÏÏÎŒÎµÎœÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ±.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ÎÎ¬ÎžÎ·ÎŒÎ± 4.1: ÎÎÎ£Î ÎÎÎ ÎÎÎ€ÎÎ£Î€ÎÎ£Î ÎÎ¡Î§ÎÎÎÎ¥
++
++
++ ** Î Î±ÏÎ®ÏÏÎµ CTRL-g Î³Î¹Î± ÎœÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎµÎ¯ Î· ÎžÎ­ÏÎ· ÏÎ±Ï ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎºÎ±Î¹ Î· ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ® ÏÎ¿Ï
+.
++    Î Î±ÏÎ®ÏÏÎµ SHIFT-G Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµ ÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿. **
++
++  Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ¹Î±Î²Î¬ÏÏÎµ Î¿Î»ÏÎºÎ»Î·ÏÎ¿ ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ± ÏÏÎ¹Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± Î²Î®ÎŒÎ±ÏÎ±!!
++
++  1. ÎÏÎ±ÏÎ®ÏÏÎµ ÏÎ±ÏÎ·ÎŒÎ­ÎœÎ¿ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ Ctrl ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ  g . ÎÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·Ï
++     ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¹ÏÏÎµÎ¯ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÎºÎ±Î¹ ÏÎ·
++     Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¿Ï
+ ÎµÎ¯ÏÏÎµ. ÎÏ
+ÎŒÎ·ÎžÎµÎ¯ÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ Î³ÏÎ±ÎŒÎŒÎ®Ï Î³Î¹Î± ÏÎ¿ ÎÎ®ÎŒÎ± 3.
++
++  2. Î Î±ÏÎ®ÏÏÎµ shift-G Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+.
++
++  3. Î Î±ÏÎ®ÏÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï ÏÎ¿Ï
+ Î®ÏÎ±ÏÏÎ±Îœ ÎºÎ±Î¹ ÎŒÎµÏÎ¬ shift-G. ÎÏ
+ÏÏ ÎžÎ±
++     ÏÎ±Ï ÎµÏÎ¹ÏÏÏÎ­ÏÎµÎ¹ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¿Ï
+ Î®ÏÎ±ÏÏÎ±Îœ ÏÏÎ¹Îœ ÏÎ±ÏÎ®ÏÎµÏÎµ Î³Î¹Î± ÏÏÏÏÎ· ÏÎ¿ÏÎ¬ Ctrl-g.
++     (ÎÏÎ±Îœ ÏÎ»Î·ÎºÏÏÎ¿Î»Î¿Î³ÎµÎ¯ÏÎµ ÏÎ¿Ï
+Ï Î±ÏÎ¹ÎžÎŒÎ¿ÏÏ, ÎÎÎ ÎžÎ± ÎµÎŒÏÎ±ÎœÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÏÎ·Îœ Î¿ÎžÏÎœÎ·).
++
++  4. ÎÎœ ÎœÎ¿Î¹ÏÎžÎµÏÎµ ÏÎ¯Î³Î¿Ï
+ÏÎ¿Ï Î³Î¹Î± Î±Ï
+ÏÏ, ÎµÎºÏÎµÎ»Î­ÏÏÎµ ÏÎ± Î²Î®ÎŒÎ±ÏÎ± 1 Î­ÏÏ 3.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ÎÎ¬ÎžÎ·ÎŒÎ± 4.2: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎ€ÎÎ£ÎÎ£
++
++
++	  ** Î Î±ÏÎ®ÏÏÎµ   /   Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÏÎ· ÏÏÎ¬ÏÎ· ÏÎ¿Ï
+ ÏÎ¬ÏÎœÎµÏÎµ. **
++
++  1. Î£Îµ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±  / . Î Î±ÏÎ±ÏÎ·ÏÎ®ÏÏÎµ ÏÏÎ¹ Î±Ï
+ÏÏÏ ÎºÎ±Î¹
++     Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎŒÏÎ±ÎœÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï ÏÏÏÏ ÎŒÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  : .
++
++  2. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ 'errroor' <ENTER>. ÎÏ
+ÏÎ® ÎµÎ¯ÎœÎ±Î¹ Î· Î»Î­ÎŸÎ· ÏÎ¿Ï
+ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ.
++
++  3. ÎÎ¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ ÎŸÎ±ÎœÎ¬ Î³Î¹Î± ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÏÏÎ¬ÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ Î±ÏÎ»ÏÏ  n .
++     ÎÎ¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÏÏÎ¬ÏÎ· ÏÏÎ·Îœ Î±ÎœÏÎ¯ÎžÎµÏÎ· ÎºÎ±ÏÎµÏÎžÏ
+ÎœÏÎ·, ÏÎ±ÏÎ®ÏÏÎµ  Shift-N .
++
++  4. ÎÎœ ÎžÎ­Î»ÎµÏÎµ ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ Î³Î¹Î± ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÏÎ¿Ï ÏÎ± ÏÎ¯ÏÏ, ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  ?  Î±ÎœÏÎ¯ ÏÎ·Ï  / .
++
++---> ÎÏÎ±Îœ Î· Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÏÏÎ¬ÏÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+ ÎžÎ± ÏÏ
+ÎœÎµÏÎ¯ÏÎµÎ¹ Î±ÏÏ ÏÎ·Îœ Î±ÏÏÎ®.
++
++  "errroor" is not the way to spell error;  errroor is an error.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 4.3: ÎÎ¥Î¡ÎÎ£Î Î€ÎÎÎ¡ÎÎÎ£Î€Î©Î Î ÎÎ¡ÎÎÎÎÎ£ÎÎ©Î
++
++
++	  ** Î Î±ÏÎ®ÏÏÎµ   %   Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ·Îœ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ· ), ], Î® } . **
++
++  1. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎµ ÎºÎ¬ÏÎ¿Î¹Î± (, [, Î® { ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ®
++     ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±  % .
++
++  3. Î ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎžÎ± ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎ¯ÎœÎ±Î¹ ÏÏÎ·Îœ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ· ÏÎ±ÏÎ­ÎœÎžÎµÏÎ· Î® Î±Î³ÎºÏÎ»Î·.
++
++  4. Î Î±ÏÎ®ÏÏÎµ  %  Î³Î¹Î± ÎœÎ± ÎŒÎµÏÎ±ÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÎ¯ÏÏ ÏÏÎ·Îœ ÏÏÏÏÎ· Î±Î³ÎºÏÎ»Î·
++    (ÏÎ¿Ï
+ Î¶ÎµÏ
+Î³Î±ÏÎ¹Î¿Ï).
++
++---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
++
++Î£ÎÎÎÎÎ©Î£Î: ÎÏ
+ÏÏ ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿Î»Ï ÏÏÎ®ÏÎ¹ÎŒÎ¿ ÏÏÎ·Îœ Î±ÏÎ¿ÏÏÎ±Î»ÎŒÎ¬ÏÏÏÎ· ÎµÎœÏÏ ÏÏÎ¿Î³ÏÎ¬ÎŒÎŒÎ±ÏÎ¿Ï
++	  ÎŒÎµ ÎŒÎ· ÏÎ±Î¹ÏÎ¹Î±ÏÏÎ­Ï ÏÎ±ÏÎµÎœÎžÎ­ÏÎµÎ¹Ï!
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    ÎÎ¬ÎžÎ·ÎŒÎ± 4.4: ÎÎÎÎ£ Î€Î¡ÎÎ ÎÎ£ ÎÎÎ ÎÎÎÎÎÎ ÎÎÎÎ©Î
++
++
++       ** ÎÏÎ¬ÏÏÎµ  :s/old/new/g  Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎ¿ 'new' ÎŒÎµ ÏÎ¿ 'old'. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. ÎÏÎ¬ÏÏÎµ  :s/thee/the <ENTER> . Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ Î±Ï
+ÏÎ® Î· ÎµÎœÏÎ¿Î»Î® Î±Î»Î»Î¬Î¶ÎµÎ¹ ÎŒÏÎœÎ¿
++     ÏÎ·Îœ ÏÏÏÏÎ· ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++
++  3. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ   :s/thee/the/g    ÎµÎœÎœÎ¿ÏÎœÏÎ±Ï Î³ÎµÎœÎ¹ÎºÎ® Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÎ·
++     Î³ÏÎ±ÎŒÎŒÎ®. ÎÏ
+ÏÏ Î±Î»Î»Î¬Î¶ÎµÎ¹ ÏÎ»ÎµÏ ÏÎ¹Ï ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÎ¹Ï ÎµÏÎ¯ ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++
++---> thee best time to see thee flowers is in thee spring.
++
++  4. ÎÎ¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÎºÎ¬ÎžÎµ ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÎŒÎ¯Î±Ï ÏÏ
+ÎŒÎ²Î¿Î»Î¿ÏÎµÎ¹ÏÎ¬Ï ÎŒÎµÏÎ±ÎŸÏ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÏÎœ,
++     Î³ÏÎ¬ÏÏÎµ   :#,#s/old/new/g   ÏÏÎ¿Ï
+ #,# Î¿Î¹ Î±ÏÎ¹ÎžÎŒÎ¿Î¯ ÏÏÎœ ÎŽÏÎ¿ Î³ÏÎ±ÎŒÎŒÏÎœ.
++     ÎÏÎ¬ÏÏÎµ   :%s/old/new/g     Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÎºÎ¬ÎžÎµ ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÎµ ÏÎ»Î¿ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 4 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1. Î€Î¿  Ctrl-g  ÎµÎŒÏÎ±ÎœÎ¯Î¶ÎµÎ¹ ÏÎ· ÎžÎ­ÏÎ· ÏÎ±Ï ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎºÎ±Î¹ ÏÎ·Îœ ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ® ÏÎ¿Ï
+.
++     Î€Î¿  Shift-G  ÏÎ·Î³Î±Î¯ÎœÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+. ÎÎœÎ±Ï Î±ÏÎ¹ÎžÎŒÏÏ Î³ÏÎ±ÎŒÎŒÎ®Ï
++     Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ¿ÏÎŒÎµÎœÎ¿Ï Î±ÏÏ  Shift-G  ÏÎ·Î³Î±Î¯ÎœÎµÎ¹ ÏÎµ ÎµÎºÎµÎ¯ÎœÎ· ÏÎ· Î³ÏÎ±ÎŒÎŒÎ®.
++
++  2. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï  /  Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÎ¬ÏÎœÎµÎ¹ ÏÏÎ¿Ï ÏÎ± ÎÎ Î¡ÎÎ£Î€Î Î³Î¹Î±
++     ÏÎ· ÏÏÎ¬ÏÎ·. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï  ?  Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÏÏÎ¬ÏÎ· ÏÎ¬ÏÎœÎµÎ¹ ÏÏÎ¿Ï ÏÎ± Î ÎÎ£Î©
++     Î³Î¹Î± ÏÎ· ÏÏÎ¬ÏÎ·. ÎÎµÏÎ¬ Î±ÏÏ ÎŒÎ¯Î± Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÏÎ±ÏÎ®ÏÏÎµ  n  Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ·Îœ
++     ÎµÏÏÎŒÎµÎœÎ· ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· ÏÏÎ¿Ï ÏÎ·Îœ Î¯ÎŽÎ¹Î± ÎºÎ±ÏÎµÏÎžÏ
+ÎœÏÎ· Î®  Shift-N  Î³Î¹Î± ÎœÎ± ÏÎ¬ÎŸÎµÏÎµ
++     ÏÏÎ¿Ï ÏÎ·Îœ Î±ÎœÏÎ¯ÎžÎµÏÎ· ÎºÎ±ÏÎµÏÎžÏ
+ÎœÏÎ·.
++
++  3. Î Î±ÏÏÎœÏÎ±Ï  %  ÏÏÎ¿ Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÎ¬ÎœÏ ÏÎµ ÎŒÎ¯Î± (,),[,],{, Î® }  ÎµÎœÏÎ¿ÏÎ¯Î¶ÎµÎ¹
++     ÏÎ¿ Î±ÎœÏÎ¯ÏÏÎ¿Î¹ÏÎ¿ ÏÎ±Î¯ÏÎ¹ ÏÎ¿Ï
+ Î¶ÎµÏ
+Î³Î±ÏÎ¹Î¿Ï.
++
++  4. ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎŒÎµ new ÏÎ¿Ï
+ ÏÏÏÏÎ¿Ï
+ old ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ  :s/old/new
++     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎŒÎµ new ÏÎ»ÏÎœ ÏÏÎœ 'old' ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î³ÏÎ¬ÏÏÎµ  :s/old/new/g
++     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÏÎ¬ÏÎµÏÎœ ÎŒÎµÏÎ±ÎŸÏ ÎŽÏÎ¿ # Î³ÏÎ±ÎŒÎŒÏÎœ Î³ÏÎ¬ÏÏÎµ      :#,#s/old/new/g
++     ÎÎ¹Î± Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÏÎ»ÏÎœ ÏÏÎœ ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÏÎœ ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î³ÏÎ¬ÏÏÎµ    :%s/old/new/g
++     ÎÎ¹Î± ÎµÏÏÏÎ·ÏÎ· ÎµÏÎ¹Î²ÎµÎ²Î±Î¯ÏÏÎ·Ï ÎºÎ¬ÎžÎµ ÏÎ¿ÏÎ¬ ÏÏÎ¿ÏÎžÎ­ÏÏÎµ Î­ÎœÎ± 'c'       "%s/old/new/gc
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  ÎÎ¬ÎžÎ·ÎŒÎ± 5.1: Î Î©Î£ ÎÎÎ€ÎÎÎ© ÎÎÎ ÎÎÎ©Î€ÎÎ¡ÎÎÎ ÎÎÎ€ÎÎÎ
++
++
++** ÎÏÎ¬ÏÏÎµ  :!  Î±ÎºÎ¿Î»Î¿Ï
+ÎžÎ¿ÏÎŒÎµÎœÎ¿ Î±ÏÏ ÎŒÎ¯Î± ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î® Î³Î¹Î± ÎœÎ± ÏÎ·Îœ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ. **
++
++  1. Î Î±ÏÎ®ÏÏÎµ ÏÎ·Îœ Î¿Î¹ÎºÎµÎ¯Î± ÎµÎœÏÎ¿Î»Î®  :  Î³Î¹Î± ÎœÎ± ÎžÎ­ÏÎµÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï
++     ÏÎ·Ï Î¿ÎžÏÎœÎ·Ï. ÎÏ
+ÏÏ ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎŽÏÏÎµÏÎµ ÎŒÎ¯Î± ÎµÎœÏÎ¿Î»Î®.
++
++  2. Î€ÏÏÎ± ÏÎ±ÏÎ®ÏÏÎµ  ÏÎ¿  !  (ÎžÎ±Ï
+ÎŒÎ±ÏÏÎ¹ÎºÏ). ÎÏ
+ÏÏ ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ
++     Î¿ÏÎ¿Î¹Î±ÎŽÎ®ÏÎ¿ÏÎµ ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î® ÏÎ¿Ï
+ ÏÎ»Î¿Î¹Î¿Ï.
++
++  3. Î£Î±Îœ ÏÎ±ÏÎ¬ÎŽÎµÎ¹Î³ÎŒÎ± Î³ÏÎ¬ÏÏÎµ  ls  ÎŒÎµÏÎ¬ Î±ÏÏ ÏÎ¿ ! ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ENTER>. ÎÏ
+ÏÏ ÎžÎ±
++     ÏÎ±Ï ÎµÎŒÏÎ±ÎœÎ¯ÏÎµÎ¹ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± ÏÎ¿Ï
+ ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
+ ÏÎ±Ï, Î±ÎºÏÎ¹Î²ÏÏ ÏÎ±Îœ ÎœÎ± Î®ÏÎ±ÏÏÎ±Îœ ÏÏÎ·Îœ
++     ÏÏÎ¿ÏÏÎ¿ÏÎ® ÏÎ¿Ï
+ ÏÎ»Î¿Î¹Î¿Ï. Î ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ  :!dir  Î±Îœ ÏÎ¿ ls ÎŽÎµÎœ ÎŽÎ¿Ï
+Î»ÎµÏÎµÎ¹.
++
++---> Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ¯ÎœÎ±Î¹ ÎŽÏ
+ÎœÎ±ÏÏÎœ ÎœÎ± ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ Î¿ÏÎ¿Î¹Î±ÎŽÎ®ÏÎ¿ÏÎµ ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î®
++     ÎŒÎµ Î±Ï
+ÏÏÎœ ÏÎ¿Îœ ÏÏÏÏÎ¿.
++
++---> Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÎ»ÎµÏ Î¿Î¹ ÎµÎœÏÎ¿Î»Î­Ï  :  ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎµÏÎŒÎ±ÏÎ¯Î¶Î¿ÎœÏÎ±Î¹ ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ <ENTER>.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		 ÎÎ¬ÎžÎ·ÎŒÎ± 5.2: Î ÎÎ¡ÎÎ£Î£ÎÎ€ÎÎ¡Î Î ÎÎ¡Î ÎÎÎÎ¡ÎÎŠÎÎ£ ÎÎ¡Î§ÎÎÎ©Î
++
++
++   ** ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÏÎ¹Ï Î±Î»Î»Î¬Î³ÎµÏ ÏÎ¿Ï
+ ÎºÎ¬ÎœÎ±ÏÎµ ÏÏÎ¿ Î±ÏÏÎµÎ¯Î¿, Î³ÏÎ¬ÏÏÎµ  :w ÎÎ¡Î§ÎÎÎ.  **
++
++  1. ÎÏÎ¬ÏÏÎµ  :!dir  Î®  :!ls  Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± ÏÎ¿Ï
+ ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
+ ÏÎ±Ï.
++     ÎÎŽÎ· ÎŸÎ­ÏÎµÏÎµ ÏÏÎ¹ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÎ±ÏÎ®ÏÎµÏÎµ <ENTER> ÎŒÎµÏÎ¬ Î±ÏÏ Î±Ï
+ÏÏ.
++
++  2. ÎÎ¹Î±Î»Î­ÎŸÏÎµ Î­ÎœÎ± ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÏÎ¿Ï
+ ÎŽÎµÎœ Ï
+ÏÎ¬ÏÏÎµÎ¹ Î±ÎºÏÎŒÎ±, ÏÏÏÏ ÏÎ¿ TEST.
++
++  3. Î€ÏÏÎ± Î³ÏÎ¬ÏÏÎµ:  :w TEST  (ÏÏÎ¿Ï
+ TEST ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÏÎ¿Ï
+ ÎŽÎ¹Î±Î»Î­ÎŸÎ±ÏÎµ).
++
++  4. ÎÏ
+ÏÏ ÏÏÎ¶ÎµÎ¹ ÏÎ»Î¿ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ (vim Tutor) ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± TEST. ÎÎ¹Î± ÎœÎ± ÏÎ¿
++     ÎµÏÎ±Î»Î·ÎžÎµÏÏÎµÏÎµ, Î³ÏÎ¬ÏÏÎµ ÎŸÎ±ÎœÎ¬  :!dir Î³Î¹Î± ÎœÎ± ÎŽÎµÎ¯ÏÎµ ÏÎ¿Îœ ÎºÎ±ÏÎ¬Î»Î¿Î³Ï ÏÎ±Ï.
++
++---> Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ Î±Îœ Î²Î³Î±Î¯ÎœÎ±ÏÎµ Î±ÏÏ ÏÎ¿Îœ Vim ÎºÎ±Î¹ ÎŒÏÎ±Î¯ÎœÎ±ÏÎµ ÎŸÎ±ÎœÎ¬ ÎŒÎµ ÏÎ¿ ÏÎœÎ¿ÎŒÎ±
++     Î±ÏÏÎµÎ¯Î¿Ï
+ TEST, ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎžÎ± Î®ÏÎ±Îœ Î±ÎºÏÎ¹Î²Î­Ï Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ¿ ÏÎ¿Ï
+ tutor ÏÏÎ±Îœ ÏÎ¿ ÏÏÏÎ±ÏÎµ.
++
++  5. Î€ÏÏÎ± ÎŽÎ¹Î±Î³ÏÎ¬ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï (MS-DOS):      :!del TEST
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ÎÎ¬ÎžÎ·ÎŒÎ± 5.3: ÎÎ ÎÎÎÎÎ€ÎÎÎ ÎÎÎ€ÎÎÎ ÎÎÎÎ¡ÎÎŠÎÎ£
++
++
++	  ** ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÏÎŒÎ®ÎŒÎ± ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+, Î³ÏÎ¬ÏÏÎµ  :#,# w ÎÎ¡Î§ÎÎÎ **
++
++  1. ÎÎ»Î»Î· ÎŒÎ¹Î± ÏÎ¿ÏÎ¬, Î³ÏÎ¬ÏÏÎµ  :!dir  Î®  :!ls  Î³Î¹Î± ÎœÎ± ÏÎ¬ÏÎµÏÎµ ÎŒÎ¯Î± Î»Î¯ÏÏÎ± Î±ÏÏ ÏÎ¿Îœ
++     ÎºÎ±ÏÎ¬Î»Î¿Î³Ï ÏÎ±Ï ÎºÎ±Î¹ ÎŽÎ¹Î±Î»Î­ÎŸÏÎµ Î­ÎœÎ± ÎºÎ±ÏÎ¬Î»Î»Î·Î»Î¿ ÏÎœÎ¿ÎŒÎ± Î±ÏÏÎµÎ¯Î¿Ï
+ ÏÏÏÏ ÏÎ¿ TEST.
++
++  2. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ¬ÎœÏ ÎŒÎ­ÏÎ¿Ï Î±Ï
+ÏÎ®Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ
++     Ctrl-g  Î³Î¹Î± ÎœÎ± Î²ÏÎµÎ¯ÏÎµ ÏÎ¿Îœ Î±ÏÎ¹ÎžÎŒÏ Î±Ï
+ÏÎ®Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++     ÎÎ ÎÎ¥ÎÎÎ£Î€Î ÎÎ¥Î€ÎÎ Î€ÎÎ ÎÎ¡ÎÎÎÎ!
++
++  3. Î€ÏÏÎ± ÏÎ·Î³Î±Î¯ÎœÎµÏÎµ ÏÏÎ¿ ÎºÎ¬ÏÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ  Ctrl-g  ÎŸÎ±ÎœÎ¬.
++     ÎÎ ÎÎ¥ÎÎÎ£Î€Î ÎÎÎ ÎÎ¥Î€ÎÎ Î€ÎÎ ÎÎ¡ÎÎÎÎ!
++
++  4. ÎÎ¹Î± ÎœÎ± ÏÏÏÎµÏÎµ ÎÎÎÎ Î­ÎœÎ± ÏÎŒÎ®ÎŒÎ± ÏÎµ Î±ÏÏÎµÎ¯Î¿, Î³ÏÎ¬ÏÏÎµ   :#,# w TEST
++     ÏÏÎ¿Ï
+ #,# Î¿Î¹ ÎŽÏÎ¿ Î±ÏÎ¹ÎžÎŒÎ¿Î¯ ÏÎ¿Ï
+ Î±ÏÎ¿ÎŒÎœÎ·ÎŒÎ¿ÎœÎµÏÏÎ±ÏÎµ (ÏÎ¬ÎœÏ,ÎºÎ¬ÏÏ) ÎºÎ±Î¹ TEST ÏÎ¿
++     ÏÎœÎ¿ÎŒÎ± ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+ ÏÎ±Ï.
++
++  5. ÎÎ±ÎœÎ¬, ÎŽÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÎµÎºÎµÎ¯ ÎŒÎµ ÏÎ·Îœ  :!dir Î±Î»Î»Î¬ ÎÎÎ ÏÎ¿ ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÏÎµ.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  ÎÎ¬ÎžÎ·ÎŒÎ± 5.4: ÎÎÎÎÎ€Î©ÎÎ€ÎÎ£ ÎÎÎ ÎÎÎ©ÎÎÎÎ€ÎÎ£ ÎÎ¡Î§ÎÎÎ
++
++
++     ** ÎÎ¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ± ÏÎµÏÎ¹ÎµÏÏÎŒÎµÎœÎ± ÎµÎœÏÏ Î±ÏÏÎµÎ¯Î¿Ï
+, Î³ÏÎ¬ÏÏÎµ   :r ÎÎ¡Î§ÎÎÎ **
++
++  1. ÎÏÎ¬ÏÏÎµ  :!dir  Î³Î¹Î± ÎœÎ± Î²ÎµÎ²Î±Î¹ÏÎžÎµÎ¯ÏÎµ ÏÏÎ¹ ÏÎ¿ TEST Ï
+ÏÎ¬ÏÏÎµÎ¹ Î±ÏÏ ÏÏÎ¹Îœ.
++
++  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ¬ÎœÏ ÎŒÎ­ÏÎ¿Ï ÏÎ·Ï ÏÎµÎ»Î¯ÎŽÎ±Ï.
++
++Î£ÎÎÎÎÎ©Î£Î:  ÎÏÏÏÎ¿Ï
+ ÎµÎºÏÎµÎ»Î­ÏÎµÏÎµ ÏÎ¿ ÎÎ®ÎŒÎ± 3 ÎžÎ± ÎŽÎµÎ¯ÏÎµ ÏÎ¿ ÎÎ¬ÎžÎ·ÎŒÎ± 5.3.
++	   ÎÎµÏÎ¬ ÎºÎ¹ÎœÎ·ÎžÎµÎ¯ÏÎµ ÎÎÎ€Î© ÎŸÎ±ÎœÎ¬ ÏÏÎ¿Ï ÏÎ¿ ÎŒÎ¬ÎžÎ·ÎŒÎ± Î±Ï
+ÏÏ.
++
++  3. Î€ÏÏÎ± Î±ÎœÎ±ÎºÏÎ®ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ±Ï TEST ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î®  :r TEST
++     ÏÏÎ¿Ï
+ TEST ÎµÎ¯ÎœÎ±Î¹ ÏÎ¿ ÏÎœÎ¿ÎŒÎ± ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+.
++
++Î£ÎÎÎÎÎ©Î£Î:  Î€Î¿ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
+ Î±ÎœÎ±ÎºÏÎ¬ÏÎµ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ÏÎ±Î¹ ÎŸÎµÎºÎ¹ÎœÏÎœÏÎ±Ï ÎµÎºÎµÎ¯ ÏÎ¿Ï
+ Î²ÏÎ¯ÏÎºÎµÏÎ±Î¹
++	   Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï.
++
++  4. ÎÎ¹Î± ÎœÎ± ÎµÏÎ±Î»Î·ÎžÎµÏÏÎµÏÎµ ÏÏÎ¹ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ Î±ÎœÎ±ÎºÏÎ®ÎžÎ·ÎºÎµ, ÏÎ¯ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹
++     ÏÎ±ÏÎ±ÏÎ·ÏÎ®ÏÏÎµ ÏÏÎ¹ Ï
+ÏÎ¬ÏÏÎ¿Ï
+Îœ ÏÏÏÎ± ÎŽÏÎ¿ Î±ÎœÏÎ¯Î³ÏÎ±ÏÎ± ÏÎ¿Ï
+ ÎÎ±ÎžÎ®ÎŒÎ±ÏÎ¿Ï 5.3, ÏÎ¿
++     Î±ÏÏÎ¹ÎºÏ ÎºÎ±Î¹ Î· Î­ÎºÎŽÎ¿ÏÎ· ÏÎ¿Ï
+ Î±ÏÏÎµÎ¯Î¿Ï
+.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 5 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1.  :!ÎµÎœÏÎ¿Î»Î®  ÎµÎºÏÎµÎ»ÎµÎ¯ ÎŒÎ¯Î± ÎµÎŸÏÏÎµÏÎ¹ÎºÎ® ÎµÎœÏÎ¿Î»Î®.
++
++      ÎÎµÏÎ¹ÎºÎ¬ ÏÏÎ®ÏÎ¹ÎŒÎ± ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ± ÎµÎ¯ÎœÎ±Î¹ (MS-DOS):
++      :!dir            - ÎµÎŒÏÎ¬ÎœÎ¹ÏÎ· Î»Î¯ÏÏÎ±Ï ÎµÎœÏÏ ÎºÎ±ÏÎ±Î»ÏÎ³Î¿Ï
+.
++      :!del ÎÎ¡Î§ÎÎÎ     - ÎŽÎ¹Î±Î³ÏÎ¬ÏÎµÎ¹ ÏÎ¿ ÎÎ¡Î§ÎÎÎ.
++
++  2.  :w ÎÎ¡Î§ÎÎÎ   Î³ÏÎ¬ÏÎµÎ¹ ÏÎ¿ ÏÏÎ­ÏÏÎœ Î±ÏÏÎµÎ¯Î¿ ÏÎ¿Ï
+ Vim ÏÏÎ¿ ÎŽÎ¯ÏÎºÎ¿ ÎŒÎµ ÏÎœÎ¿ÎŒÎ± ÎÎ¡Î§ÎÎÎ.
++
++  3.  :#,#w ÎÎ¡Î§ÎÎÎ   ÏÏÎ¶ÎµÎ¹ ÏÎ¹Ï Î³ÏÎ±ÎŒÎŒÎ­Ï Î±ÏÏ # ÎŒÎ­ÏÏÎ¹ # ÏÏÎ¿ ÎÎ¡Î§ÎÎÎ.
++
++  4.  :r ÎÎ¡Î§ÎÎÎ  Î±ÎœÎ±ÎºÏÎµÎ¯ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎŽÎ¯ÏÎºÎ¿Ï
+ ÎÎ¡Î§ÎÎÎ ÎºÎ±Î¹ ÏÎ¿ ÏÎ±ÏÎµÎŒÎ²Î¬Î»Î»ÎµÎ¹ ÎŒÎ­ÏÎ±
++      ÏÏÎ¿ ÏÏÎ­ÏÎ¿Îœ Î±ÏÏÎµÎ¯Î¿ ÎŒÎµÏÎ¬ Î±ÏÏ ÏÎ· ÎžÎ­ÏÎ· ÏÎ¿Ï
+ ÎŽÏÎ¿ÎŒÎ­Î±.
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ÎÎ¬ÎžÎ·ÎŒÎ± 6.1: Î ÎÎÎ€ÎÎÎ ÎÎÎÎÎÎÎÎ€ÎÎ£
++
++
++      ** Î Î±ÏÎ®ÏÏÎµ  o  Î³Î¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÎœÎ±
++	 Î²ÏÎµÎžÎµÎ¯ÏÎµ ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. Î Î±ÏÎ®ÏÏÎµ  o (ÏÎµÎ¶Ï) Î³Î¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎÎÎ€Î© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÎœÎ±
++     Î²ÏÎµÎžÎµÎ¯ÏÎµ ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+.
++
++  3. Î€ÏÏÎ± Î±ÎœÏÎ¹Î³ÏÎ¬ÏÏÎµ ÏÎ· ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> Î³ÏÎ±ÎŒÎŒÎ®  ÎºÎ±Î¹ ÏÎ±ÏÎ®ÏÏÎµ <ESC> Î³Î¹Î± ÎœÎ±
++     Î²Î³ÎµÎ¯ÏÎµ Î±ÏÏ ÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+.
++
++---> After typing  o  the cursor is placed on the open line in Insert mode.
++
++  4. ÎÎ¹Î± ÎœÎ± Î±ÎœÎ¿Î¯ÎŸÎµÏÎµ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® Î ÎÎÎ© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±, ÏÎ±ÏÎ®ÏÏÎµ Î±ÏÎ»Î¬ Î­ÎœÎ± ÎºÎµÏÎ±Î»Î±Î¯Î¿
++     O, Î±ÎœÏÎ¯ Î³Î¹Î± Î­ÎœÎ± ÏÎµÎ¶Ï  o.  ÎÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ ÏÎ¿ ÏÏÎ·Îœ ÏÎ±ÏÎ±ÎºÎ¬ÏÏ Î³ÏÎ±ÎŒÎŒÎ®.
++ÎÎœÎ¿Î¯Î³ÎµÏÎµ Î³ÏÎ±ÎŒÎŒÎ® ÏÎ¬ÎœÏ Î±ÏÏ Î±Ï
+ÏÎ®Îœ ÏÎ±ÏÏÎœÏÎ±Ï Shift-O ÏÏÎ¿ Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï ÎµÎ¯ÎœÎ±Î¹ ÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ÎÎ¬ÎžÎ·ÎŒÎ± 6.2: Î ÎÎÎ€ÎÎÎ Î Î¡ÎÎ£ÎÎÎÎÎ£
++
++	  ** Î Î±ÏÎ®ÏÏÎµ   a   Î³Î¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï ÏÏÏÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï ÏÎ±ÏÎ±ÎºÎ¬ÏÏ
++     ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> ÏÎ±ÏÏÎœÏÎ±Ï  $  ÏÏÎ·Îœ ÎÎ±ÎœÎ¿ÎœÎ¹ÎºÎ® ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ·.
++
++  2. Î Î±ÏÎ®ÏÏÎµ Î­ÎœÎ±  a  (ÏÎµÎ¶Ï) Î³Î¹Î± ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î Î±ÏÏ ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±
++     ÏÎ¿Ï
+ ÎµÎ¯ÎœÎ±Î¹ ÎºÎ¬ÏÏ Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î±.  (Î€Î¿ ÎºÎµÏÎ±Î»Î±Î¯Î¿  A  ÏÏÎ¿ÏÎžÎ­ÏÎµÎ¹ ÏÏÎ¿ ÏÎ­Î»Î¿Ï
++     ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï).
++
++Î£Î·ÎŒÎµÎ¯ÏÏÎ·: ÎÏ
+ÏÏ Î±ÏÎ¿ÏÎµÏÎ³ÎµÎ¹ ÏÎ¿ ÏÎ¬ÏÎ·ÎŒÎ± ÏÎ¿Ï
+  i , ÏÎ¿Îœ ÏÎµÎ»ÎµÏ
+ÏÎ±Î¯Î¿ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ±, ÏÎ¿
++	  ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ·Ï ÎµÎ¹ÏÎ±Î³ÏÎ³Î®Ï, <ESC>, ÎŽÏÎ¿ÎŒÎ­Î±-ÎŽÎµÎŸÎ¹Î¬, ÎºÎ±Î¹ ÏÎ­Î»Î¿Ï, x, ÎŒÏÎœÎ¿ ÎºÎ±Î¹
++	  ÎŒÏÎœÎ¿ Î³Î¹Î± ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÏÏÎ¿ ÏÎ­Î»Î¿Ï ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï!
++
++  3. Î£Ï
+ÎŒÏÎ»Î·ÏÏÏÏÎµ ÏÏÏÎ± ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®. Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÎµÏÎ¯ÏÎ·Ï ÏÏÎ¹ Î· ÏÏÎ¿ÏÎžÎ®ÎºÎ· ÎµÎ¯ÎœÎ±Î¹
++     Î±ÎºÏÎ¹Î²ÏÏ Î¯ÎŽÎ¹Î± ÏÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+ ÎŒÎµ ÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎ¹ÏÎ±Î³ÏÎ³Î®Ï, ÎµÎºÏÏÏ
++     Î±ÏÏ ÏÎ· ÎžÎ­ÏÎ· ÏÎ¿Ï
+ ÎµÎ¹ÏÎ¬Î³ÎµÏÎ±Î¹ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
++
++---> This line will allow you to practice
++---> This line will allow you to practice appending text to the end of a line.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ÎÎ¬ÎžÎ·ÎŒÎ± 6.3: ÎÎÎÎ ÎÎÎÎÎ£Î Î€ÎÎ£ ÎÎÎ€ÎÎÎÎ€ÎÎ£Î€ÎÎ£ÎÎ£
++
++
++ ** Î Î±ÏÎ®ÏÏÎµ ÎºÎµÏÎ±Î»Î±Î¯Î¿  R  Î³Î¹Î± ÎœÎ± Î±Î»Î»Î¬ÎŸÎµÏÎµ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿Ï
+Ï Î±ÏÏ Î­ÎœÎ±Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎµÏ. **
++
++  1. ÎÎµÏÎ±ÎºÎ¹ÎœÎµÎ¯ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ±ÏÎ±ÎºÎ¬ÏÏ ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ --->.
++
++  2. Î€Î¿ÏÎ¿ÎžÎµÏÎ®ÏÏÎµ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÏÏÎ® ÏÎ·Ï ÏÏÏÏÎ·Ï Î»Î­ÎŸÎ·Ï ÏÎ¿Ï
+ ÎµÎ¯ÎœÎ±Î¹ ÎŽÎ¹Î±ÏÎ¿ÏÎµÏÎ¹ÎºÎ®
++     Î±ÏÏ ÏÎ· ÎŽÎµÏÏÎµÏÎ· Î³ÏÎ±ÎŒÎŒÎ® ÏÎ·ÎŒÎµÎ¹ÏÎŒÎ­ÎœÎ· ÎŒÎµ ---> (Î· Î»Î­ÎŸÎ· 'last').
++
++  3. Î Î±ÏÎ®ÏÏÎµ ÏÏÏÎ±  R   ÎºÎ±Î¹ Î±Î»Î»Î¬ÎŸÏÎµ ÏÎ¿ Ï
+ÏÏÎ»Î¿Î¹ÏÎ¿ ÏÎ¿Ï
+ ÎºÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+ ÏÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ®
++     Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï ÏÎ¬ÎœÏ Î±ÏÏ ÏÎ¿ ÏÎ±Î»Î¹Ï ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÏÎµ ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÏÎ·Îœ ÏÏÏÏÎ· Î³ÏÎ±ÎŒÎŒÎ® Î¯ÎŽÎ¹Î±
++     ÎŒÎµ ÏÎ· ÎŽÎµÏÏÎµÏÎ·.
++
++---> To make the first line the same as the last on this page use the keys.
++---> To make the first line the same as the second, type R and the new text.
++
++  4. Î£Î·ÎŒÎµÎ¹ÏÏÏÎµ ÏÏÎ¹ ÏÏÎ±Îœ ÏÎ±ÏÎ¬ÏÎµ <ESC> Î³Î¹Î± ÎœÎ± Î²Î³ÎµÎ¯ÏÎµ, ÏÎ±ÏÎ±ÎŒÎ­ÎœÎµÎ¹ Î¿ÏÎ¿Î¹Î¿ÎŽÎ®ÏÎ¿ÏÎµ
++     Î±ÎœÎ±Î»Î»Î¿Î¯ÏÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  ÎÎ¬ÎžÎ·ÎŒÎ± 6.4: Î¡Î¥ÎÎÎÎ£Î ÎÎ ÎÎÎÎÎÎ£
++
++
++   ** Î¡Ï
+ÎžÎŒÎ¯ÏÏÎµ ÎŒÎ¯Î± ÎµÏÎ¹Î»Î¿Î³Î® Î­ÏÏÎ¹ ÏÏÏÎµ Î· Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· Î® Î· Î±ÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎœÎ± Î±Î³ÎœÎ¿ÎµÎ¯
++      ÏÎ· ÎŽÎ¹Î±ÏÎ¿ÏÎ¬ ÏÎµÎ¶ÏÎœ-ÎºÎµÏÎ±Î»Î±Î¯ÏÎœ **
++
++  1. ÎšÎ¬ÎŸÏÎµ Î³Î¹Î± 'ignore' ÎµÎ¹ÏÎ¬Î³Î¿ÎœÏÎ±Ï:
++     /ignore
++     Î£Ï
+ÎœÎµÏÎ¯ÏÏÎµ Î±ÏÎºÎµÏÎ­Ï ÏÎ¿ÏÎ­Ï ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ n.
++
++  2. ÎÎ­ÏÏÎµ ÏÎ·Îœ ÎµÏÎ¹Î»Î¿Î³Î® 'ic' (Ignore case) Î³ÏÎ¬ÏÎ¿ÎœÏÎ±Ï:
++     :set ic
++
++  3. ÎšÎ¬ÎŸÏÎµ ÏÏÏÎ± ÎŸÎ±ÎœÎ¬ Î³Î¹Î± 'ignore' ÏÎ±ÏÏÎœÏÎ±Ï: n
++     Î£Ï
+ÎœÎµÏÎ¯ÏÏÎµ ÏÎ·Îœ Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ· ÎŒÎµÏÎ¹ÎºÎ­Ï Î±ÎºÏÎŒÎ± ÏÎ¿ÏÎ­Ï ÏÎ±ÏÏÎœÏÎ±Ï ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ n
++
++  4. ÎÎ­ÏÏÎµ ÏÎ¹Ï ÎµÏÎ¹Î»Î¿Î³Î­Ï 'hlsearch' ÎºÎ±Î¹ 'incsearch':
++     :set hls is
++
++  5. ÎÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÏÏÎ± ÎŸÎ±ÎœÎ¬ ÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® Î±ÎœÎ±Î¶Î®ÏÎ·ÏÎ·Ï, ÎºÎ±Î¹ ÎŽÎµÎ¯ÏÎµ ÏÎ¹ ÏÏ
+ÎŒÎ²Î±Î¯ÎœÎµÎ¹
++     /ignore
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ÎÎÎÎÎÎ 6 Î ÎÎ¡ÎÎÎÎšÎ
++
++
++  1. Î Î±ÏÏÎœÏÎ±Ï  o  Î±ÎœÎ¿Î¯Î³ÎµÎ¹ ÎŒÎ¯Î± Î³ÏÎ±ÎŒÎŒÎ® ÎÎÎ€Î© Î±ÏÏ ÏÎ¿Îœ ÎŽÏÎ¿ÎŒÎ­Î± ÎºÎ±Î¹ ÏÎ¿ÏÎ¿ÎžÎµÏÎµÎ¯ ÏÎ¿Îœ
++     ÎŽÏÎ¿ÎŒÎ­Î± ÏÏÎ·Îœ Î±ÎœÎ¿Î¹ÏÏÎ® Î³ÏÎ±ÎŒÎŒÎ® ÏÎµ ÎÎ±ÏÎ¬ÏÏÎ±ÏÎ· ÎÎµÎ¹ÎŒÎ­ÎœÎ¿Ï
+.
++
++  2. Î Î±ÏÎ®ÏÏÎµ  a  Î³Î¹Î± ÎœÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÎÎÎ€Î ÏÎ¿Îœ ÏÎ±ÏÎ±ÎºÏÎ®ÏÎ± ÏÏÎ¿Îœ Î¿ÏÎ¿Î¯Î¿ ÎµÎ¯ÎœÎ±Î¹
++     Î¿ ÎŽÏÎ¿ÎŒÎ­Î±Ï. Î Î±ÏÏÎœÏÎ±Ï ÎºÎµÏÎ±Î»Î±Î¯Î¿  A  Î±Ï
+ÏÏÎŒÎ±ÏÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÎ¹ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÏÎ¿ ÏÎ­Î»Î¿Ï
++     ÏÎ·Ï Î³ÏÎ±ÎŒÎŒÎ®Ï.
++
++  3. Î Î±ÏÏÎœÏÎ±Ï ÎºÎµÏÎ±Î»Î±Î¯Î¿  R  ÎµÎ¹ÏÎ­ÏÏÎµÏÎ±Î¹ ÏÏÎ·Îœ ÎÎ±ÏÎ¬ÏÏÎ±Î· ÎÎœÏÎ¹ÎºÎ±ÏÎ¬ÏÏÎ±ÏÎ·Ï ÎŒÎ­ÏÏÎ¹ ÎœÎ±
++     ÏÎ±ÏÎ·ÎžÎµÎ¯ ÏÎ¿ <ESC> ÎºÎ±Î¹ ÎœÎ± ÎµÎŸÎ­Î»ÎžÎµÎ¹.
++
++  4. ÎÏÎ¬ÏÎ¿ÎœÏÎ±Ï ":set xxx" ÏÏ
+ÎžÎŒÎ¯Î¶ÎµÎ¹ ÏÎ·Îœ ÎµÏÎ¹Î»Î¿Î³Î® "xxx".
++
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ÎÎÎÎÎÎ 7: ON-LINE ÎÎÎ€ÎÎÎÎ£ ÎÎÎÎÎÎÎÎ£
++
++
++		** Î§ÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ¿ on-line ÏÏÏÏÎ·ÎŒÎ± Î²Î¿Î®ÎžÎµÎ¹Î±Ï **
++
++  Î Vim Î­ÏÎµÎ¹ Î­ÎœÎ± ÏÎµÏÎ¹ÎµÎºÏÎ¹ÎºÏ on-line ÏÏÏÏÎ·ÎŒÎ± Î²Î¿Î®ÎžÎµÎ¹Î±Ï. ÎÎ¹Î± ÎœÎ± ÎŸÎµÎºÎ¹ÎœÎ®ÏÎµÎ¹,
++  ÎŽÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿ Î±ÏÏ ÏÎ± ÏÏÎ¯Î±:
++	- ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <HELP> (Î±Îœ Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿)
++	- ÏÎ±ÏÎ®ÏÏÎµ ÏÎ¿ ÏÎ»Î®ÎºÏÏÎ¿ <F1> (Î±Îœ Î­ÏÎµÏÎµ ÎºÎ¬ÏÎ¿Î¹Î¿)
++	- Î³ÏÎ¬ÏÏÎµ   :help <ENTER>
++
++  ÎÏÎ¬ÏÏÎµ  :q <ENTER>   Î³Î¹Î± ÎœÎ± ÎºÎ»ÎµÎ¯ÏÎµÏÎµ ÏÎ¿ ÏÎ±ÏÎ¬ÎžÏ
+ÏÎ¿ ÏÎ·Ï Î²Î¿Î®ÎžÎµÎ¹Î±Ï.
++
++  ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± Î²ÏÎµÎ¯ÏÎµ Î²Î¿Î®ÎžÎµÎ¹Î± ÏÎ¬ÎœÏ ÏÎµ ÎºÎ¬ÎžÎµ Î±ÎœÏÎ¹ÎºÎµÎ¯ÎŒÎµÎœÎ¿, ÎŽÎ¯ÎœÎ¿ÎœÏÎ±Ï ÎŒÎ¯Î± ÏÎ±ÏÎ¬ÎŒÎµÏÏÎ¿
++  ÏÏÎ·Îœ ÎµÎœÏÎ¿Î»Î® ":help".  ÎÎ¿ÎºÎ¹ÎŒÎ¬ÏÏÎµ Î±Ï
+ÏÎ¬ (ÎŒÎ·Îœ ÎŸÎµÏÎœÎ¬ÏÎµ ÎœÎ± ÏÎ±ÏÎ¬ÏÎµ <ENTER>):
++
++	:help w
++	:help c_<T
++	:help insert-index
++	:help user-manual
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  ÎÎÎÎÎÎ 8: ÎÎÎÎÎÎ¥Î¡ÎÎÎ£Î€Î ÎÎÎ SCRIPT ÎÎÎÎÎÎÎ£ÎÎ£
++
++		   ** ÎÎœÎµÏÎ³Î¿ÏÎ¿Î¹Î®ÏÏÎµ ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ ÏÎ¿Ï
+ Vim **
++
++  Î Vim Î­ÏÎµÎ¹ ÏÎ¿Î»Î»Î¬ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ Î±Ï' Ï,ÏÎ¹ Î¿ Vi, Î±Î»Î»Î¬ ÏÎ±
++  ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÎµÎ¯ÎœÎ±Î¹ Î±ÏÏÎ¹ÎºÎ¬ Î±ÏÎµÎœÎµÏÎ³Î¿ÏÎ¿Î¹Î·ÎŒÎ­ÎœÎ±. ÎÎ¹Î± ÎœÎ± Î±ÏÏÎ¯ÏÎµÏÎµ ÎœÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÎµÎ¯ÏÎµ
++  ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ± ÏÎ±ÏÎ±ÎºÏÎ·ÏÎ¹ÏÏÎ¹ÎºÎ¬ ÏÏÎ­ÏÎµÎ¹ ÎœÎ± ÏÏÎ¹Î¬ÎŸÎµÏÎµ Î­ÎœÎ± Î±ÏÏÎµÎ¯Î¿ "vimrc".
++
++  1. ÎÏÏÎ¯ÏÏÎµ ÎŽÎ¹Î¿ÏÎžÏÎœÎ¿ÎœÏÎ±Ï ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ "vimrc", Î±Ï
+ÏÏ ÎµÎŸÎ±ÏÏÎ¬ÏÎ±Î¹ Î±ÏÏ ÏÎ¿ ÏÏÏÏÎ·ÎŒÎ¬ ÏÎ±Ï:
++	:edit ~/.vimrc               Î³Î¹Î± Unix
++	:edit $VIM/_vimrc            Î³Î¹Î± MS-Windows
++
++  2. Î€ÏÏÎ± ÎµÎ¹ÏÎ¬Î³ÎµÏÎµ ÏÎ¿ ÎºÎµÎ¯ÎŒÎµÎœÎ¿ ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ¿Ï Î³Î¹Î± Î±ÏÏÎµÎ¯Î¿ "vimrc":
++	:read $VIMRUNTIME/vimrc_example.vim
++
++  3. ÎÏÎ¬ÏÏÎµ ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ ÎŒÎµ ÏÎ·Îœ:
++	:write
++
++  Î€Î·Îœ ÎµÏÏÎŒÎµÎœÎ· ÏÎ¿ÏÎ¬ ÏÎ¿Ï
+ ÎžÎ± ÎŸÎµÎºÎ¹ÎœÎ®ÏÎµÏÎµ ÏÎ¿Îœ Vim ÎžÎ± ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÎµÎ¹ ÏÏÏÎ¹ÏÎŒÏ
++  ÏÏÎœÏÎ±ÎŸÎ·Ï.  ÎÏÎ¿ÏÎµÎ¯ÏÎµ ÎœÎ± ÏÏÎ¿ÏÎžÎ­ÏÎµÏÎµ ÏÎ»ÎµÏ ÏÎ¹Ï ÏÏÎ¿ÏÎ¹ÎŒÏÎŒÎµÎœÎµÏ ÎµÏÎ¹Î»Î¿Î³Î­Ï Ï' Î±Ï
+ÏÏ
++  ÏÎ¿ Î±ÏÏÎµÎ¯Î¿ "vimrc".
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  ÎÎŽÏ Î¿Î»Î¿ÎºÎ»Î·ÏÏÎœÎµÏÎ±Î¹ ÏÎ¿ Vim Tutor. Î£ÎºÎ¿ÏÏÏ ÏÎ¿Ï
+ Î®ÏÎ±Îœ ÎœÎ± ÎŽÏÏÎµÎ¹ ÎŒÎ¯Î± ÏÏÎœÏÎ¿ÎŒÎ·
++  ÏÎµÏÎ¯Î»Î·ÏÎ· ÏÎ¿Ï
+ ÏÏ
+ÎœÏÎ¬ÎºÏÎ· Vim, ÏÎ¿Ï
+Î»Î¬ÏÎ¹ÏÏÎ¿Îœ ÏÏÏÎ· ÏÏÏÎµ ÎœÎ± ÏÎ±Ï ÎµÏÎ¹ÏÏÎ­ÏÎµÎ¹ ÎœÎ±
++  ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹Î®ÏÎµÏÎµ ÏÎ¿Îœ ÏÏ
+ÎœÏÎ¬ÎºÏÎ· Î±ÏÎºÎµÏÎ¬ ÎµÏÎºÎ¿Î»Î±. ÎÏÎ­ÏÎµÎ¹ ÏÎ¿Î»Ï Î±ÏÏ ÎŒÎ¯Î±
++  Î¿Î»Î¿ÎºÎ»Î·ÏÏÎŒÎ­ÎœÎ· ÏÎ±ÏÎ¿Ï
+ÏÎ¯Î±ÏÎ· ÎºÎ±ÎžÏÏ Î¿ Vim Î­ÏÎµÎ¹ ÏÎ¬ÏÎ± ÏÎ¿Î»Î»Î­Ï ÎµÎœÏÎ¿Î»Î­Ï. ÎÎ¹Î±Î²Î¬ÏÏÎµ
++  ÎºÎ±ÏÏÏÎ¹Îœ ÏÎ¿ ÎµÎ³ÏÎµÎ¹ÏÎ¯ÎŽÎ¹Î¿ ÏÏÎ®ÏÎ·Ï:
++	":help user-manual".
++
++  ÎÎ¹Î± ÏÎµÏÎ±Î¹ÏÎ­ÏÏ ÎŽÎ¹Î¬Î²Î±ÏÎŒÎ± ÎºÎ±Î¹ ÎŒÎµÎ»Î­ÏÎ·, ÏÏ
+ÏÏÎ®ÎœÎµÏÎ±Î¹ Î±Ï
+ÏÏ ÏÎ¿ Î²Î¹Î²Î»Î¯Î¿:
++	Vim - Vi Improved - by Steve Oualline
++	Publisher: New Riders
++	Î€Î¿ ÏÏÏÏÎ¿ Î²Î¹Î²Î»Î¯Î¿ ÏÎ»Î®ÏÏÏ Î±ÏÎ¹ÎµÏÏÎŒÎ­ÎœÎ¿ ÏÏÎ¿Îœ Vim.
++	ÎÎŽÎ¹Î±Î¯ÏÎµÏÎ± ÏÏÎ®ÏÎ¹ÎŒÎ¿ Î³Î¹Î± Î±ÏÏÎ¬ÏÎ¹Î¿Ï
+Ï.
++	Î¥ÏÎ¬ÏÏÎ¿Ï
+Îœ ÏÎ¿Î»Î»Î¬ ÏÎ±ÏÎ±ÎŽÎµÎ¯Î³ÎŒÎ±ÏÎ± ÎºÎ±Î¹ ÎµÎ¹ÎºÏÎœÎµÏ.
++	ÎÎµÎ¯ÏÎµ ÏÎ·Îœ http://iccf-holland.org/click5.html
++
++  ÎÏ
+ÏÏ ÏÎ¿ Î²Î¹Î²Î»Î¯Î¿ ÎµÎ¯ÎœÎ±Î¹ ÏÎ±Î»Î¹ÏÏÎµÏÎ¿ ÎºÎ±Î¹ ÏÎµÏÎ¹ÏÏÏÏÎµÏÎ¿ Î³Î¹Î± ÏÎ¿Îœ Vi ÏÎ±ÏÎ¬ Î³Î¹Î± ÏÎ¿Îœ Vim,
++  Î±Î»Î»Î¬ ÎµÏÎ¯ÏÎ·Ï ÏÏ
+ÎœÎ¹ÏÏÏÎŒÎµÎœÎ¿:
++	Learning the Vi Editor - by Linda Lamb
++	Publisher: O'Reilly & Associates Inc.
++	ÎÎ¯ÎœÎ±Î¹ Î­ÎœÎ± ÎºÎ±Î»Ï Î²Î¹Î²Î»Î¯Î¿ Î³Î¹Î± ÎœÎ± ÎŒÎ¬ÎžÎµÏÎµ ÏÏÎµÎŽÏÎœ ÏÎ± ÏÎ¬ÎœÏÎ± ÏÎ¿Ï
+ ÎžÎ­Î»ÎµÏÎµ
++	ÎœÎ± ÎºÎ¬ÎœÎµÏÎµ ÎŒÎµ ÏÎ¿Îœ Vi.
++	Î Î­ÎºÏÎ· Î­ÎºÎŽÎ¿ÏÎ· ÏÎµÏÎ¹Î­ÏÎµÎ¹ Î±ÎºÏÎŒÎ± ÏÎ»Î·ÏÎ¿ÏÎ¿ÏÎ¯ÎµÏ Î³Î¹Î± ÏÎ¿Îœ Vim.
++
++  ÎÏ
+ÏÎ® Î· ÏÎµÏÎ¹Î®Î³Î·ÏÎ· Î³ÏÎ¬ÏÏÎ·ÎºÎµ Î±ÏÏ ÏÎ¿Ï
+Ï Michael C. Pierce ÎºÎ±Î¹ Robert K. Ware,
++  Colorado School of Mines ÏÏÎ·ÏÎ¹ÎŒÎ¿ÏÎ¿Î¹ÏÎœÏÎ±Ï Î¹ÎŽÎ­ÎµÏ Î±ÏÏ ÏÎ¿Îœ Charles Smith,
++  Colorado State University.  E-mail: bware@mines.colorado.edu.
++
++  Î ÏÎ¿ÏÎ±ÏÎŒÎ¿Î³Î® Î³Î¹Î± ÏÎ¿Îœ Vim Î±ÏÏ ÏÎ¿Îœ Bram Moolenaar.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim70.orig/runtime/tutor/tutor.ru.utf-8 vim70/runtime/tutor/tutor.ru.utf-8
+--- vim70.orig/runtime/tutor/tutor.ru.utf-8	1969-12-31 16:00:00.000000000 -0800
++++ vim70/runtime/tutor/tutor.ru.utf-8	2006-10-21 21:09:00.000000000 -0700
+@@ -0,0 +1,834 @@
++===============================================================================
++=    Ð ÐŸ Ð± Ñ ÐŸ   Ð¿ ÐŸ Ð¶ Ð° Ð» ÐŸ Ð² Ð° Ñ Ñ   Ð²   Ñ Ñ Ðµ Ð± Ðœ Ðž Ðº   VIM  -  ÐÐµÑÑÐžÑ 1.5 =
++===============================================================================
++     Vim --- ÑÑÐŸ ÐŸÑÐµÐœÑ ÐŒÐŸÑÐœÑÐ¹ ÑÐµÐŽÐ°ÐºÑÐŸÑ, ÐžÐŒÐµÑÑÐžÐ¹ ÐŒÐœÐŸÐ¶ÐµÑÑÐ²ÐŸ ÐºÐŸÐŒÐ°ÐœÐŽ, ÑÐ»ÐžÑÐºÐŸÐŒ
++     ÐŒÐœÐŸÐ³ÐŸ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐžÑ
+ Ð²ÑÐµ ÐŒÐŸÐ¶ÐœÐŸ Ð±ÑÐ»ÐŸ ÐŸÐ¿ÐžÑÐ°ÑÑ Ð² ÑÐ°ÐºÐŸÐŒ ÑÑÐµÐ±ÐœÐžÐºÐµ, ÐºÐ°Ðº
++     ÑÑÐŸÑ. Ð­ÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð¿ÑÐžÐ·Ð²Ð°Ðœ ÐŸÐ±ÑÑÑÐœÐžÑÑ ÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐŸÐµ ÑÐžÑÐ»ÐŸ ÐºÐŸÐŒÐ°ÐœÐŽ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
++     ÑÑÐŸÐ±Ñ ÐÑ ÐŒÐŸÐ³Ð»Ðž Ñ Ð»ÐµÐ³ÐºÐŸÑÑÑÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ Vim Ð² ÐºÐ°ÑÐµÑÑÐ²Ðµ ÑÐµÐŽÐ°ÐºÑÐŸÑÐ° ÐŸÐ±ÑÐµÐ³ÐŸ
++     ÐœÐ°Ð·ÐœÐ°ÑÐµÐœÐžÑ.
++
++     ÐÐ°ÐŒ Ð¿ÐŸÑÑÐµÐ±ÑÐµÑÑÑ Ð¿ÑÐžÐ±Ð»ÐžÐ·ÐžÑÐµÐ»ÑÐœÐŸ 25-30 ÐŒÐžÐœÑÑ ÐœÐ° ÐŸÑÐ²ÐŸÐµÐœÐžÐµ ÐŽÐ°ÐœÐœÐŸÐ³ÐŸ ÑÑÐµÐ±ÐœÐžÐºÐ° Ð²
++     Ð·Ð°Ð²ÐžÑÐžÐŒÐŸÑÑÐž ÐŸÑ ÑÐŸÐ³ÐŸ, ÑÐºÐŸÐ»ÑÐºÐŸ Ð²ÑÐµÐŒÐµÐœÐž ÐÑ Ð¿ÐŸÑÑÐ°ÑÐžÑÐµ ÐœÐ° ÑÐºÑÐ¿ÐµÑÐžÐŒÐµÐœÑÑ.
++
++     ÐÐŸÐŒÐ°ÐœÐŽÑ Ð² ÑÑÐŸÐºÐ°Ñ
+ Ð±ÑÐŽÑÑ ÐŒÐŸÐŽÐžÑÐžÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐºÑÑ. Ð¡ÐŸÐ·ÐŽÐ°Ð¹ÑÐµ ÐºÐŸÐ¿ÐžÑ ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°,
++     ÑÑÐŸÐ±Ñ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ ÐœÐ° ÐœÐµÐ¹ (ÐµÑÐ»Ðž ÐÑ Ð·Ð°Ð¿ÑÑÑÐžÐ»Ðž "vimtutor", ÑÐŸ ÑÑÐŸ ÑÐ¶Ðµ
++     ÐºÐŸÐ¿ÐžÑ).
++
++     ÐÐ°Ð¶ÐœÐŸ Ð¿ÐŸÐŒÐœÐžÑÑ, ÑÑÐŸ ÑÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð¿ÑÐµÐŽÐœÐ°Ð·ÐœÐ°ÑÐµÐœ ÐŽÐ»Ñ ÐŸÐ±ÑÑÐµÐœÐžÑ Ð² Ð¿ÑÐŸÑÐµÑÑÐµ
++     ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ. Ð­ÑÐŸ ÐŸÐ·ÐœÐ°ÑÐ°ÐµÑ, ÑÑÐŸ ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ Ð·Ð°Ð¿ÑÑÐºÐ°ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
++     ÑÑÐŸÐ±Ñ ÐºÐ°Ðº ÑÐ»ÐµÐŽÑÐµÑ ÐžÑ
+ ÐžÐ·ÑÑÐžÑÑ. ÐÑÐ»Ðž ÐÑ Ð¿ÑÐŸÑÑÐŸ Ð¿ÑÐŸÑÐžÑÐ°ÐµÑÐµ ÑÐµÐºÑÑ, ÑÐŸ
++     Ð·Ð°Ð±ÑÐŽÐµÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ!
++
++     Ð¢ÐµÐ¿ÐµÑÑ ÑÐ±ÐµÐŽÐžÑÐµÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ° CapsLock ÐœÐµ Ð²ÐºÐ»ÑÑÐµÐœÐ° Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ
++     ÐºÐ»Ð°Ð²ÐžÑÑ   j   ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÑÐ°Ðº, ÑÑÐŸÐ±Ñ Ð£ÑÐŸÐº 1.1 Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ Ð¿ÐŸÐŒÐµÑÑÐžÐ»ÑÑ ÐœÐ°
++     ÑÐºÑÐ°ÐœÐµ.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			Ð£ÑÐŸÐº 1.1:  ÐÐÐ ÐÐÐÐ©ÐÐÐÐ ÐÐ£Ð Ð¡ÐÐ Ð
++
++** ÐÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ ÐºÑÑÑÐŸÑÐ° ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž h,j,k,l ÑÐ°Ðº, ÐºÐ°Ðº Ð¿ÐŸÐºÐ°Ð·Ð°ÐœÐŸ ÐœÐžÐ¶Ðµ. **
++	     ^
++	     k		Ð¡ÐŸÐ²ÐµÑÑ:	ÐÐ»Ð°Ð²ÐžÑÐ° h ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ ÑÐ»ÐµÐ²Ð° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ Ð²Ð»ÐµÐ²ÐŸ.
++       < h	 l >		ÐÐ»Ð°Ð²ÐžÑÐ° l ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ ÑÐ¿ÑÐ°Ð²Ð° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ Ð²Ð¿ÑÐ°Ð²ÐŸ.
++	     j			ÐÐ»Ð°Ð²ÐžÑÐ° j Ð¿ÐŸÑ
+ÐŸÐ¶Ð° ÐœÐ° ÑÑÑÐµÐ»ÐºÑ `Ð²ÐœÐžÐ·'.
++	     v
++  1. ÐÐŸÐŽÐ²ÐžÐ³Ð°Ð¹ÑÐµ ÐºÑÑÑÐŸÑ Ð¿ÐŸ ÑÐºÑÐ°ÐœÑ, Ð¿ÐŸÐºÐ° ÐœÐµ Ð¿ÐŸÑÑÐ²ÑÑÐ²ÑÐµÑÐµ ÑÐµÐ±Ñ ÑÐ²ÐµÑÐµÐœÐœÐŸ.
++
++  2. ÐÐ°ÐŽÐ°Ð²ÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ `Ð²ÐœÐžÐ·' (j) Ð¿ÐŸÐºÐ° ÐŸÐœÐ° ÐœÐµ ÐœÐ°ÑÐœÐµÑ Ð¿ÐŸÐ²ÑÐŸÑÑÑÑÑÑ.
++---> Ð¢ÐµÐ¿ÐµÑÑ ÐÑ Ð·ÐœÐ°ÐµÑÐµ, ÐºÐ°Ðº Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÑÑÐŸÐºÑ.
++
++  3. ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐ»Ð°Ð²ÐžÑÑ `Ð²ÐœÐžÐ·' Ð¿ÐµÑÐµÐ¹ÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 1.2.
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐ»Ðž Ð²Ñ Ð¿ÐŸÐºÐ° ÐœÐµ ÑÐ²ÐµÑÐµÐœÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÐœÐ°Ð±ÐžÑÐ°ÐµÑÐµ, ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ
++	   Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐ° Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ (Normal mode). ÐÐŸÑÐ»Ðµ ÑÑÐŸÐ³ÐŸ Ð¿ÐµÑÐµÐœÐ°Ð±ÐµÑÐžÑÐµ
++	   ÑÑÐµÐ±ÑÐµÐŒÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÐ±ÑÑÐœÑÐµ ÐºÐ»Ð°Ð²ÐžÑÐž ÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ ÐºÑÑÑÐŸÑÐŸÐŒ (ÑÑÑÐµÐ»ÐºÐž) ÑÐ°ÐºÐ¶Ðµ ÐŽÐŸÐ»Ð¶ÐœÑ
++	   ÑÐ°Ð±ÐŸÑÐ°ÑÑ. ÐÐŽÐœÐ°ÐºÐŸ, ÐºÐ»Ð°Ð²ÐžÑÐž hjkl Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÑ ÐÐ°ÐŒ Ð¿ÐµÑÐµÐŒÐµÑÐ°ÑÑÑÑ
++	   Ð·ÐœÐ°ÑÐžÑÐµÐ»ÑÐœÐŸ Ð±ÑÑÑÑÐµÐµ, ÐºÐ°Ðº ÑÐŸÐ»ÑÐºÐŸ ÐÑ ÐœÐ°ÑÑÐžÑÐµÑÑ ÐžÐŒÐž Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑÑÑ.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  Ð£ÑÐŸÐº 1.2: ÐÐÐÐ£Ð¡Ð Ð ÐÐÐÐÐ ÐšÐÐÐÐ Ð ÐÐÐÐ¢Ð« Ð¡ VIM
++
++!! ÐÐÐÐÐÐÐÐ! ÐÑÐµÐ¶ÐŽÐµ, ÑÐµÐŒ Ð²ÑÐ¿ÐŸÐ»ÐœÑÑÑ Ð»ÑÐ±ÐŸÐ¹ ÐžÐ· ÐŸÐ¿ÐžÑÐ°ÐœÐœÑÑ
+ ÐœÐžÐ¶Ðµ ÑÐ°Ð³ÐŸÐ², Ð¿ÑÐŸÑÑÐžÑÐµ
++			       ÑÑÐŸÐº ÑÐµÐ»ÐžÐºÐŸÐŒ !!
++
++  1. ÐÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <ESC> (ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŽÐŸÑÑÐŸÐ²ÐµÑÐžÑÑÑÑ, ÑÑÐŸ ÐÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ
++     ÑÐµÐ¶ÐžÐŒÐµ (Normal mode)).
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ:			:q! <ENTER>.
++
++---> Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð²ÑÐ¹ÑÐž ÐžÐ· ÑÐµÐŽÐ°ÐºÑÐŸÑÐ° ÐÐÐ Ð¡ÐÐ¥Ð ÐÐÐÐÐÐ¯ Ð»ÑÐ±ÑÑ
+ ÑÐŽÐµÐ»Ð°ÐœÐœÑÑ
+
++     ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹. ÐÑÐ»Ðž ÐÑ Ñ
+ÐŸÑÐžÑÐµ ÑÐŸÑ
+ÑÐ°ÐœÐžÑÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ðž Ð²ÑÐ¹ÑÐž:
++				:wq  <ENTER>
++
++  3. ÐÐŸÐ³ÐŽÐ° ÐÑ ÑÐ²ÐžÐŽÐžÑÐµ Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÐµ ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ¹ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ,
++     ÐºÐŸÑÐŸÑÐ°Ñ Ð¿ÑÐžÐ²ÐµÐ»Ð° ÐÐ°Ñ Ð² ÑÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº. Ð­ÑÐŸ ÐŒÐŸÐ¶ÐµÑ Ð±ÑÑÑ
++				vimtutor ru <ENTER>
++     ÐÐ±ÑÑÐœÐŸ ÐŒÐŸÐ¶ÐœÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ:	vim tutor.ru <ENTER>
++
++---> 'vim' Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð·Ð°Ð¿ÑÑÑÐžÑÑ ÑÐµÐŽÐ°ÐºÑÐŸÑ vim, 'tutor.ru' --- ÑÑÐŸ ÑÐ°Ð¹Ð», ÐºÐŸÑÐŸÑÑÐ¹
++     ÐÑ Ð±ÑÐŽÐµÑÐµ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ.
++
++  4. ÐÑÐ»Ðž ÐÑ ÑÐ²ÐµÑÐµÐœÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž ÑÑÐž ÑÐ°Ð³Ðž, Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÐµ ÑÐ°Ð³Ðž ÐŸÑ 1 ÐŽÐŸ 3
++     ÑÑÐŸÐ±Ñ Ð²ÑÐ¹ÑÐž ÑÐœÐŸÐ²Ð° Ð·Ð°Ð¿ÑÑÑÐžÑÑ ÑÐµÐŽÐ°ÐºÑÐŸÑ. ÐÐ°ÑÐµÐŒ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ· Ðº
++     Ð£ÑÐŸÐºÑ 1.3.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  Ð£ÑÐŸÐº 1.3: Ð ÐÐÐÐÐ¢ÐÐ ÐÐÐÐÐÐ Ð¢ÐÐÐ¡Ð¢Ð - Ð£ÐÐÐÐÐÐÐ
++
++
++** ÐÐ°Ñ
+ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐœÐ°Ð¶ÐŒÐžÑÐµ x, ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÑÐžÐŒÐ²ÐŸÐ» Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. ÐÐ»Ñ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ ÐŸÑÐžÐ±ÐŸÐº, Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ, Ð¿ÐŸÐºÐ° ÐŸÐœ ÐœÐµ ÐŸÐºÐ°Ð¶ÐµÑÑÑ ÐœÐ°ÐŽ
++     ÑÐŽÐ°Ð»ÑÐµÐŒÑÐŒ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐŒ.
++
++  3. ÐÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ x ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÐµÐ±ÑÐµÐŒÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°.
++
++  4. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4 Ð¿ÐŸÐºÐ° ÑÑÑÐŸÐºÐ° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ°.
++
++---> ÐÑ ÑÑÑÐŸÐ¿ÐŸÑÐ° ÐºÐŸÐ¿ÑÑÑ Ð¿Ð¿Ð¿ÑÐ»Ñ Ð¿Ð¿ÐŸ Ð¿Ð¿Ð¿ÐŸÐ»Ñ Ð»ÐµÑÑÐžÑÑ.
++
++  5. Ð¢ÐµÐ¿ÐµÑÑ, ÐºÐŸÐ³ÐŽÐ° ÑÑÑÐŸÐºÐ° ÐŸÑÐºÐŸÑÑÐµÐºÑÐžÑÐŸÐ²Ð°ÐœÐ°, Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº ÑÑÐŸÐºÑ 1.4.
++
++ÐÐÐÐÐ§ÐÐÐÐ: Ð Ñ
+ÐŸÐŽÐµ ÐŸÑÐ²ÐŸÐµÐœÐžÑ ÑÑÐŸÐ³ÐŸ ÑÑÐµÐ±ÐœÐžÐºÐ° ÐœÐµ Ð¿ÑÑÐ°Ð¹ÑÐµÑÑ Ð·Ð°Ð¿ÐŸÐŒÐžÐœÐ°ÑÑ, ÑÑÐžÑÐµ
++	   Ð² Ð¿ÑÐŸÑÐµÑÑÐµ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÑ.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  Ð£ÑÐŸÐº 1.4: Ð ÐÐÐÐÐ¢ÐÐ ÐÐÐÐÐÐ Ð¢ÐÐÐ¡Ð¢Ð - ÐÐ¡Ð¢ÐÐÐÐ
++
++
++ ** ÐÐ°Ñ
+ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode), ÐœÐ°Ð¶ÐŒÐžÑÐµ i ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ°. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŽÐµÐ»Ð°ÑÑ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐžÐŽÐµÐœÑÐžÑÐœÐŸÐ¹ Ð²ÑÐŸÑÐŸÐ¹, Ð¿ÐŸÐŒÐµÑÑÐžÑÐµ
++     ÐºÑÑÑÐŸÑ ÐœÐ° ÑÐžÐŒÐ²ÐŸÐ» ÐÐÐ ÐÐ ÐºÐŸÑÐŸÑÑÐŒ ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ.
++
++  3. ÐÐ°Ð¶ÐŒÐžÑÐµ i Ðž ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÑÐµÐ±ÑÐµÐŒÑÐµ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ.
++
++  4. ÐÐŸÑÐ»Ðµ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÑ Ð²ÑÐµÑ
+ ÐŸÑÐžÐ±ÐŸÐº ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
++     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4, Ð¿ÐŸÐºÐ° ÑÑÐ°Ð·Ð° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ° Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ.
++
++---> Ð§Ð°ÑÑÑ ÑÐµÐºÑÑÐ° Ð² ÑÑÑÐŸÐºÐµ Ð±ÐµÑÐ»ÐµÐŽÐœÐŸ .
++---> Ð§Ð°ÑÑÑ ÑÐµÐºÑÑÐ° Ð² ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð±ÐµÑÑÐ»ÐµÐŽÐœÐŸ Ð¿ÑÐŸÐ¿Ð°Ð»Ð°.
++
++  5. ÐÐŸÐ³ÐŽÐ° ÐŸÑÐ²ÐŸÐžÑÐµ Ð²ÑÑÐ°Ð²ÐºÑ ÑÐµÐºÑÑÐ°, Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ ÐŽÐ°Ð»ÑÑÐµ Ðº Ð ÐµÐ·ÑÐŒÐµ.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 1
++
++  1. ÐÑÑÑÐŸÑ Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑÑÑ Ð»ÐžÐ±ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒÐž ÑÐŸ ÑÑÑÐµÐ»ÐºÐ°ÐŒÐž, Ð»ÐžÐ±ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒÐž hjkl.
++	 h (Ð²Ð»ÐµÐ²ÐŸ)	j (Ð²ÐœÐžÐ·)       k (Ð²Ð²ÐµÑÑ
+)	    l (Ð²Ð¿ÑÐ°Ð²ÐŸ)
++
++  2. ÐÐ»Ñ Ð·Ð°Ð¿ÑÑÐºÐ° Vim (ÐžÐ· Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÑ % ÐºÐŸÐŒÐ°ÐœÐŽÐœÐŸÐ¹ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž) ÐœÐ°Ð±ÐµÑÐžÑÐµ:
++     vim ÐÐÐ¯_Ð€ÐÐÐÐ <ENTER>
++
++  3. ÐÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ ÑÐ°Ð±ÐŸÑÑ Ñ Vim ÐœÐ°Ð±ÐµÑÐžÑÐµ:
++     <ESC>   :q!	 <ENTER>  ÑÑÐŸÐ±Ñ ÐŸÑÐºÐ°Ð·Ð°ÑÑÑÑ ÐŸÑ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹.
++     ÐÐ»Ðž ÐœÐ°Ð±ÐµÑÐžÑÐµ:
++     <ESC>   :wq	 <ENTER>  ÑÑÐŸÐ±Ñ ÑÐŸÑ
+ÑÐ°ÐœÐžÑÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ.
++
++  4. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐžÐŒÐ²ÐŸÐ»Ð° Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ: x
++
++  5. Ð§ÑÐŸÐ±Ñ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ Ð¿ÐµÑÐµÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ:
++	 i     Ð²Ð²ÐŸÐŽÐžÑÐµ ÑÐµÐºÑÑ	<ESC>
++
++ÐÐÐÐÐ§ÐÐÐÐ: ÐÐ°Ð¶Ð°ÑÐžÐµ <ESC> Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑ ÐÐ°Ñ Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ (Normal mode) Ð»ÐžÐ±ÐŸ
++	   Ð¿ÑÐµÑÐ²ÐµÑ ÐœÐµÐ¶ÐµÐ»Ð°ÑÐµÐ»ÑÐœÑÑ Ðž ÑÐ°ÑÑÐžÑÐœÐŸ Ð·Ð°Ð²ÐµÑÑÐµÐœÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++
++Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÐŒ Ðº Ð£ÑÐŸÐºÑ 2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  Ð£ÑÐŸÐº 2.1: ÐÐÐÐÐÐÐ« Ð£ÐÐÐÐÐÐÐ¯
++
++
++	** ÐÐ°Ð±ÐµÑÐžÑÐµ dw ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÐ°ÑÑÐºÐ° ÑÐµÐºÑÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°. **
++
++  1. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC>, ÑÑÐŸÐ±Ñ Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
++
++  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² ÐœÐ°ÑÐ°Ð»ÐŸ ÑÐ»ÐŸÐ²Ð°, ÐºÐŸÑÐŸÑÐŸÐµ ÑÐ»ÐµÐŽÑÐµÑ ÑÐŽÐ°Ð»ÐžÑÑ.
++
++  4. ÐÐ°Ð±ÐµÑÐžÑÐµ  dw , ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÑÑÐŸ ÑÐ»ÐŸÐ²ÐŸ.
++
++ÐÐÐÐÐ§ÐÐÐÐ: ÐÐŸ Ð²ÑÐµÐŒÑ ÐœÐ°Ð±ÐŸÑÐ° Ð±ÑÐºÐ²Ñ dw Ð¿ÐŸÑÐ²ÑÑÑÑ Ð² Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ ÑÑÑÐŸÐºÐµ ÑÐºÑÐ°ÐœÐ°. ÐÑÐ»Ðž
++	   ÐÑ ÑÑÐŸ-ÑÐŸ ÐœÐ°Ð±ÐµÑÐµÑÐµ ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸ, ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> Ðž ÐœÐ°ÑÐœÐžÑÐµ ÑÐœÐ°ÑÐ°Ð»Ð°.
++
++---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ² ÑÐ°ÑÐžÐœÐ°ÐŽ Ð² ÑÑÐŸÐŒ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐž Ð°Ð²ÑÐŸÐºÑÐ°Ðœ ÐžÐ·Ð»ÐžÑÐœÐž.
++
++  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 3 Ðž 4, Ð¿ÐŸÐºÐ° ÐœÐµ ÐžÑÐ¿ÑÐ°Ð²ÐžÑÐµ Ð²ÑÐµ ÐŸÑÐžÐ±ÐºÐž Ðž Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº
++     Ð£ÑÐŸÐºÑ 2.2.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  Ð£ÑÐŸÐº 2.2: ÐÐÐÐÐÐÐÐ¢ÐÐÐ¬ÐÐ«Ð ÐÐÐÐÐÐÐ« Ð£ÐÐÐÐÐÐÐ¯
++
++
++	    ** ÐÐ°Ð±ÐµÑÐžÑÐµ d$ ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž. **
++
++  1. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC>, ÑÑÐŸÐ±Ñ Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÐŸÐ±ÑÑÐœÑÐ¹ ÑÐµÐ¶ÐžÐŒ.
++
++  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÐºÐŸÐœÑÑ Ð¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸÐ¹ ÑÑÑÐŸÐºÐž (ÐÐÐ¡ÐÐ Ð¿ÐµÑÐ²ÐŸÐ¹ . ).
++
++  4. Ð§ÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ ÐŸÑÑÐ°ÑÐŸÐº ÑÑÑÐŸÐºÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ  d$ .
++
++---> ÐÑÐŸ-ÑÐŸ ÐœÐ°Ð±ÑÐ°Ð» ÐŸÐºÐŸÐœÑÐ°ÐœÐžÐµ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐŽÐ²Ð°Ð¶ÐŽÑ. ÐŸÐºÐŸÐœÑÐ°ÐœÐžÐµ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐŽÐ²Ð°Ð¶ÐŽÑ.
++
++
++  5.Ð§ÑÐŸÐ±Ñ Ð»ÑÑÑÐµ ÑÐ°Ð·ÐŸÐ±ÑÐ°ÑÑÑÑ Ð² ÑÑÐŸÐŒ, Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 2.3.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 Ð£ÑÐŸÐº 2.3: ÐÐÐÐÐÐÐ« Ð ÐÐÐªÐÐÐ¢Ð«
++
++
++  Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ `ÑÐŽÐ°Ð»ÐµÐœÐžÐµ' d ÑÐ°ÐºÐŸÐ²:
++
++	 [ÑÐžÑÐ»ÐŸ]   d	ÐŸÐ±ÑÐµÐºÑ	    ÐÐÐ	     d	 [ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
++  ÐÐŽÐµÑÑ:
++    ÑÐžÑÐ»ÐŸ  - ÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐžÑÐ¿ÐŸÐ»ÐœÐžÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ (ÐœÐµÐŸÐ±ÑÐ·Ð°ÑÐµÐ»ÑÐœÐŸ, Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ=1).
++    d      - ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ.
++    ÐŸÐ±ÑÐµÐºÑ - Ñ ÑÐµÐŒ ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÐŽÐŸÐ»Ð¶ÐœÐ° Ð±ÑÑÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐ° (Ð¿ÐµÑÐµÑÐžÑÐ»ÐµÐœÐŸ ÐœÐžÐ¶Ðµ).
++
++  ÐÑÐ°ÑÐºÐžÐ¹ ÑÐ¿ÐžÑÐŸÐº ÐŸÐ±ÑÐµÐºÑÐŸÐ²:
++    w - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, Ð²ÐºÐ»ÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÐžÐ¹ Ð¿ÑÐŸÐ±ÐµÐ».
++    e - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, ÐÐ Ð²ÐºÐ»ÑÑÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÐžÐ¹ Ð¿ÑÐŸÐ±ÐµÐ».
++    $ - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž.
++    ^ - ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐœÐ°ÑÐ°Ð»Ð° ÑÑÑÐŸÐºÐž.
++
++ÐÐÐÐÐ§ÐÐÐÐ: ÐÑÐŸÑÑÐŸÐµ ÐœÐ°Ð¶Ð°ÑÐžÐµ ÐœÐ° ÑÐžÐŒÐ²ÐŸÐ» ÐŸÐ±ÑÐµÐºÑÐ° Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode)
++	   Ð±ÐµÐ· ÐŽÐŸÐ¿ÐŸÐ»ÐœÐžÑÐµÐ»ÑÐœÑÑ
+ ÐºÐŸÐŒÐ°ÐœÐŽ Ð¿ÐµÑÐµÐŽÐ²ÐžÐœÐµÑ ÐºÑÑÑÐŸÑ ÑÐ°Ðº, ÐºÐ°Ðº ÑÐºÐ°Ð·Ð°ÐœÐŸ Ð²
++	   ÑÐ¿ÐžÑÐºÐµ ÐŸÐ±ÑÐµÐºÑÐŸÐ².
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++	       Ð£ÑÐŸÐº 2.4: ÐÐ¡ÐÐÐ®Ð§ÐÐÐÐ ÐÐ ÐÐ ÐÐÐÐÐ `ÐÐÐÐÐÐÐ-ÐÐÐªÐÐÐ¢'
++
++
++		 ** ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž. **
++
++  ÐÑÐ»ÐµÐŽÑÑÐ²ÐžÐµ ÑÐ°ÑÑÐŸÐ³ÐŸ Ð¿ÑÐžÐŒÐµÐœÐµÐœÐžÑ ÐŸÐ¿ÐµÑÐ°ÑÐžÐž ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž, ÑÐ°Ð·ÑÐ°Ð±ÐŸÑÑÐžÐºÐž
++  Vim ÑÐµÑÐžÐ»Ðž, ÑÑÐŸ ÐŽÐ»Ñ ÑÑÐŸÐ³ÐŸ Ð¿ÑÐŸÑÐµ Ð²ÑÐµÐ³ÐŸ Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð±ÑÐ°ÑÑ d ÐŽÐ²Ð°Ð¶ÐŽÑ.
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, ÐºÐŸ Ð²ÑÐŸÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ ÑÑÐ°Ð·Ñ.
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÑÐŸÐºÐž.
++  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ Ðº ÑÐµÑÐ²ÐµÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ.
++  4. ÐÐ°Ð±ÐµÑÐžÑÐµ 2dd (Ð²ÑÐ¿ÐŸÐŒÐœÐžÑÐµ Ð¿ÑÐ°Ð²ÐžÐ»ÐŸ `ÑÐžÑÐ»ÐŸ-ÐºÐŸÐŒÐ°ÐœÐŽÐ°-ÐŸÐ±ÑÐµÐºÑ'), ÑÑÐŸÐ±Ñ ÑÐŽÐ°Ð»ÐžÑÑ
++     ÐŽÐ²Ðµ ÑÑÑÐŸÐºÐž.
++
++      1)  ÐÐµÑÐŸÐŒ Ñ Ñ
+ÐŸÐ¶Ñ ÐœÐ° ÑÑÐ°ÐŽÐžÐŸÐœ,
++      2)  Ð, ÐºÐ°Ðº Ð²ÐœÐµÐ·Ð°Ð¿ÐœÐŸ ÐºÐŸÐœÑÐžÐ»ÑÑ ÐŽÐžÐ²Ð°Ðœ!
++      3)  Ð¯ Ð±ÐŸÐ»ÐµÑ Ð·Ð° ``ÐÐµÐœÐžÑ'', ``ÐÐµÐœÐžÑ'' --- ÑÐµÐŒÐ¿ÐžÐŸÐœ!
++      4)  ÐÐµÑÐ°Ð»ÑÐœÐŸ Ñ Ð³Ð»ÑÐ¶Ñ ÐœÐ° ÐœÐ°ÑÐµ Ð¿ÐŸÐºÐŸÐ»ÐµÐœÐžÐµ!
++      5)  ÐÐ³ÐŸ Ð³ÑÑÐŽÑÑÐµÐµ ÐžÐ»Ñ Ð¿ÑÑÑÐŸ ÐžÐ»Ñ ÑÐµÐŒÐœÐŸ...
++      6)  Ð¯ ÑÐžÐ¶Ñ ÐœÐ° ÑÐºÐ°ÐŒÐµÐ¹ÐºÐµ Ð² Ð»ÐŸÐ¶Ðµ `Ð'
++      7)  Ð ÐžÐ³ÑÐ°Ñ ÐœÐ° Ð±ÐŸÐ»ÑÑÐŸÐ¹ Ð¶ÐµÑÑÑÐœÐŸÐ¹ ÑÑÑÐ±Ðµ.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  Ð£ÑÐŸÐº 2.5: ÐÐÐÐÐÐÐ `ÐÐ¢ÐÐÐ¢'
++
++
++  ** ÐÐ°Ð¶ÐŒÐžÑÐµ u	ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÑÐµÐ·ÑÐ»ÑÑÐ°ÑÐ° ÑÐ°Ð±ÐŸÑÑ Ð¿ÑÐµÐŽÑÐŽÑÑÐµÐ¹ ÐºÐŸÐŒÐ°ÐœÐŽÑ, U ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ
++			ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÐ¹ Ð²ÐŸ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐµ. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> Ðž ÑÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐµÐ³ÐŸ ÐœÐ°
++     Ð¿ÐµÑÐ²ÑÑ ÐŸÑÐžÐ±ÐºÑ.
++  2. ÐÐ°Ð¶ÐŒÐžÑÐµ x ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°.
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð¶ÐŒÐžÑÐµ u ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐœÐŸÐ¹ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++  4. ÐÑÐ¿ÑÐ°Ð²ÑÑÐµ Ð²ÑÐµ ÐŸÑÐžÐ±ÐºÐž Ð² ÑÑÑÐŸÐºÐµ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ x .
++  5. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð¶ÐŒÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ U ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ð²ÐµÑÐœÑÑÑ Ð²ÑÑ ÑÑÑÐŸÐºÑ Ð² ÐžÑÑ
+ÐŸÐŽÐœÐŸÐµ
++     ÑÐŸÑÑÐŸÑÐœÐžÐµ.
++  6. ÐÐ°Ð¶ÐŒÐžÑÐµ u ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐŽÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ U Ðž Ð¿ÑÐµÐŽÑÐŽÑÑÐžÑ
+ ÐºÐŸÐŒÐ°ÐœÐŽ.
++  7. ÐÐ°Ð¶ÐŒÐžÑÐµ ÑÐµÐ¿ÐµÑÑ CTRL-R (ÑÐŽÐµÑÐ¶ÐžÐ²Ð°Ð¹ÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ CTRL ÐœÐ°Ð¶Ð°ÑÐŸÐ¹ Ð² ÐŒÐŸÐŒÐµÐœÑ ÐœÐ°Ð¶Ð°ÑÐžÑ
++  R)     ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽ (ÐŸÑÐºÐ°Ñ ÐŸÑÐºÐ°ÑÐ°).
++
++---> ÐÑÐ¿ÑÑÐ°Ð²ÑÑÐµ ÐŸÐŸÑÐžÐ±ÐºÐž Ð² ÑÑÐŸÐ¹Ð¹ ÑÑÑÐŸÐºÐµ Ðž Ð²ÐµÑÐœÐžÑÑÐµ ÐžÑ
+ ÑÑ Ð¿ÐŸÐŒÐŸÑÑÑÑ `ÐŸÑÐºÐ°ÑÐ°'.
++
++  8. Ð­ÑÐŸ Ð±ÑÐ»Ðž ÐŸÑÐµÐœÑ Ð¿ÐŸÐ»ÐµÐ·ÐœÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ. ÐÐ°Ð»ÐµÐµ Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº Ð ÐµÐ·ÑÐŒÐµ Ð£ÑÐŸÐºÐ° 2.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 2
++
++
++  1. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ:    dw
++
++  2. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž ÐœÐ°Ð±ÐµÑÐžÑÐµ:    d$
++
++  3. ÐÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐž ÐœÐ°Ð±ÐµÑÐžÑÐµ:    dd
++
++  4. Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐžÐŒÐµÐµÑ Ð²ÐžÐŽ:
++
++       [ÑÐžÑÐ»ÐŸ]   ÐºÐŸÐŒÐ°ÐœÐŽÐ°   ÐŸÐ±ÑÐµÐºÑ     ÐÐÐ     ÐºÐŸÐŒÐ°ÐœÐŽÐ°	[ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
++     Ð³ÐŽÐµ:
++       ÑÐžÑÐ»ÐŸ   - ÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð· Ð¿ÐŸÐ²ÑÐŸÑÐžÑÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ
++       ÐºÐŸÐŒÐ°ÐœÐŽÐ° - ÑÑÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ d ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ
++       ÐŸÐ±ÑÐµÐºÑ  - ÐœÐ° ÑÑÐŸ ÐŽÐŸÐ»Ð¶ÐœÐ° Ð²ÐŸÐ·ÐŽÐµÐ¹ÑÑÐ²ÐŸÐ²Ð°ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐ°, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ w (ÑÐ»ÐŸÐ²ÐŸ),
++		$ (ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž), Ðž Ñ.ÐŽ.
++
++  5. ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð¿ÑÐµÐŽÑÐµÑÑÐ²ÑÑÑÐžÑ
+ ÐŽÐµÐ¹ÑÑÐ²ÐžÐ¹ ÐœÐ°Ð±ÐµÑÐžÑÐµ:  u (ÑÑÑÐŸÑÐœÐ°Ñ u)
++     ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ (ÐŸÑÐºÐ°ÑÐ°) Ð²ÑÐµÑ
+ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹ Ð² ÑÑÑÐŸÐºÐµ ÐœÐ°Ð±ÐµÑÐžÑÐµ:  U (Ð¿ÑÐŸÐ¿ÐžÑÐœÐ°Ñ U)
++     ÐÐ»Ñ ÐŸÑÐŒÐµÐœÑ ÐŸÑÐºÐ°ÑÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ:  CTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  Ð£ÑÐŸÐº 3.1: ÐÐÐÐÐÐÐ ÐÐ¡Ð¢ÐÐÐÐ
++
++
++   ** ÐÐ°Ð±ÐµÑÐžÑÐµ p ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ³ÐŸ ÑÐŽÐ°Ð»ÐµÐœÐœÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ° Ð¿ÐŸÑÐ»Ðµ ÐºÑÑÑÐŸÑÐ°. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ· Ðº Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹ ÑÑÑÐŸÐºÐµ ÐžÐ· ÐœÐ°Ð±ÐŸÑÐ°.
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ dd ÐŽÐ»Ñ ÑÐŽÐ°Ð»ÐµÐœÐžÑ ÑÑÑÐŸÐºÐž Ðž ÐµÐµ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ Ð² Ð±ÑÑÐµÑÐµ Vim'Ð°.
++
++  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÑÑÑÐŸÐºÐµ ÐÐÐ ÑÐµÐŒ ÐŒÐµÑÑÐŸÐŒ, ÐºÑÐŽÐ° ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÑÐ°Ð²ÐžÑÑ
++     ÑÐŽÐ°Ð»ÐµÐœÐœÑÑ ÑÑÑÐŸÐºÑ.
++
++  4. ÐÐ°Ñ
+ÐŸÐŽÑÑÑ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ ÐœÐ°Ð±ÐµÑÐžÑÐµ p ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÑÑÑÐŸÐºÐž.
++
++  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2--4, Ð¿ÐŸÐºÐ° ÐœÐµ ÑÐ°ÑÑÑÐ°Ð²ÐžÑÐµ Ð²ÑÐµ ÑÑÑÐŸÐºÐž Ð² ÐœÑÐ¶ÐœÐŸÐŒ Ð¿ÐŸÑÑÐŽÐºÐµ.
++
++     Ð³) Ð Ð»ÑÑÑÐµ Ð²ÑÐŽÑÐŒÐ°ÑÑ ÐœÐµ ÐŒÐŸÐ³.
++     Ð±) ÐÐŸÐ³ÐŽÐ° ÐœÐµ Ð² ÑÑÑÐºÑ Ð·Ð°ÐœÐµÐŒÐŸÐ³,
++     Ð²) ÐÐœ ÑÐ²Ð°Ð¶Ð°ÑÑ ÑÐµÐ±Ñ Ð·Ð°ÑÑÐ°Ð²ÐžÐ»
++     Ð°) ÐÐŸÐ¹ ÐŽÑÐŽÑ ÑÐ°ÐŒÑÑ
+ ÑÐµÑÑÐœÑÑ
+ Ð¿ÑÐ°Ð²ÐžÐ»
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       Ð£ÑÐŸÐº 3.2: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐ«
++
++
++	  ** ÐÐ°Ð±ÐµÑÐžÑÐµ r Ðž ÑÐžÐŒÐ²ÐŸÐ», Ð·Ð°ÐŒÐµÐœÑÑÑÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐºÑÑÑÐŸÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐœ ÐœÐ°Ñ
+ÐŸÐŽÐžÐ»ÑÑ ÐœÐ°ÐŽ Ð¿ÐµÑÐ²ÐŸÐ¹ ÐŸÑÐžÐ±ÐºÐŸÐ¹.
++
++  3. ÐÐ°Ð±ÐµÑÐžÑÐµ r	Ðž Ð·Ð°ÑÐµÐŒ ÑÐžÐŒÐ²ÐŸÐ», ÐžÑÐ¿ÑÐ°Ð²Ð»ÑÑÑÐžÐ¹ ÐŸÑÐžÐ±ÐºÑ.
++
++  4. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 2 Ðž 3, Ð¿ÐŸÐºÐ° Ð¿ÐµÑÐ²Ð°Ñ ÑÑÑÐŸÐºÐ° ÐœÐµ Ð±ÑÐŽÐµÑ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐ°.
++
++--->  Ð ÐŒÐŸÐŒÐµÐ³Ñ ÐœÐ°Ð±ÑÑÐ° ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐºÐŸÐµ0ÐºÑÐŸ Ñ ÑÑÑÐŽÐŸÐŒ Ð¿ÐŸÐ¿Ð²ÐŽÐ°Ð» Ð¿ÐŸ ÐºÐ»Ð²Ð°ÐžÑÐ°ÐŒ!
++--->  Ð ÐŒÐŸÐŒÐµÐœÑ ÐœÐ°Ð±ÐŸÑÐ° ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐºÐŸÐµ-ÐºÑÐŸ Ñ ÑÑÑÐŽÐŸÐŒ Ð¿ÐŸÐ¿Ð°ÐŽÐ°Ð» Ð¿ÐŸ ÐºÐ»Ð°Ð²ÐžÑÐ°ÐŒ!
++
++  5. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº Ð£ÑÐŸÐºÑ 3.2.
++
++ÐÐÐÐÐ§ÐÐÐÐ: ÐÐŸÐŒÐœÐžÑÐµ, ÑÑÐŸ Ð²Ñ ÐŽÐŸÐ»Ð¶ÐœÑ ÑÑÐžÑÑÑÑ Ð² Ð¿ÑÐŸÑÐµÑÑÐµ ÑÐ°Ð±ÐŸÑÑ, Ð° ÐœÐµ Ð¿ÑÐŸÑÑÐŸ
++	   Ð·Ð°Ð¿ÐŸÐŒÐžÐœÐ°Ñ.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 Ð£ÑÐŸÐº 3.3: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐÐÐÐ¯
++
++
++		** ÐÐ»Ñ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÑÐ°ÑÑÐž ÑÐ»ÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ cw . **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. Ð Ð°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµ ÐºÑÑÑÐŸÑ ÐœÐ°ÐŽ Ð±ÑÐºÐ²ÐŸÐ¹ `o' Ð² ÑÐ»ÐŸÐ²Ðµ `ÑÐŸÐ»Ð°'.
++
++  3. ÐÐ°Ð±ÐµÑÐžÑÐµ cw Ðž ÐžÑÐ¿ÑÐ°Ð²ÑÑÐµ ÑÐ»ÐŸÐ²ÐŸ (Ð² ÐŽÐ°ÐœÐœÐŸÐŒ ÑÐ»ÑÑÐ°Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ `Ð»ÐŸÐ²'.)
++
++  4. ÐÐ°Ð¶ÐŒÐžÑÐµ <ESC> Ðž Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐžÑÐµ Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÐŸÑÐžÐ±ÐºÐµ (Ðº Ð¿ÐµÑÐ²ÐŸÐŒÑ ÑÐžÐŒÐ²ÐŸÐ»Ñ, ÐºÐŸÑÐŸÑÑÐ¹
++     ÐœÐ°ÐŽÐŸ ÐžÐ·ÐŒÐµÐœÐžÑÑ.)
++
++  5. ÐÐŸÐ²ÑÐŸÑÐžÑÐµ ÑÐ°Ð³Ðž 3--4 Ð¿ÐŸÐºÐ° Ð¿ÐµÑÐ²ÐŸÐµ Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐžÐµ ÐœÐµ ÑÑÐ°ÐœÐµÑ ÐžÐŽÐµÐœÑÐžÑÐœÑÐŒ Ð²ÑÐŸÑÐŸÐŒÑ.
++
++---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐŸÐ»Ð° Ð² ÑÑÐ³Ñ ÑÑÑÐŸÐºÐµ ÑÐ¿Ð³ÑÑÐ±Ñ ÑÐµÐŽÐ°Ð»Ð·ÐºÑÑÐžÐµÑÐ²Ñ
+.
++---> ÐÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ»ÐŸÐ² Ð² ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐµ ÑÑÐµÐ±ÑÑÑ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÐœÐžÑ.
++
++ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ, ÑÑÐŸ cw ÐœÐµ ÑÐŸÐ»ÑÐºÐŸ Ð·Ð°ÐŒÐµÐœÑÐµÑ ÑÐ»ÐŸÐ²ÐŸ, ÐœÐŸ Ðž Ð¿ÐµÑÐµÐ²ÐŸÐŽÐžÑ Ð²Ð°Ñ Ð² ÑÐµÐ¶ÐžÐŒ
++Ð²ÑÑÐ°Ð²ÐºÐž.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		  Ð£ÑÐŸÐº 3.4: ÐÐ ÐÐÐÐÐÐÐÐ ÐÐÐÐÐÐ¯Ð¢Ð¬ Ð¡ ÐÐÐÐÐÐÐÐ c
++
++
++** ÐÐŸÐŒÐ°ÐœÐŽÐ° Ð·Ð°ÐŒÐµÐœÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ Ñ ÑÐµÐŒÐž Ð¶Ðµ ÐŸÐ±ÑÐµÐºÑÐ°ÐŒÐž, ÑÑÐŸ Ðž ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ. **
++
++  1. ÐÐŸÐŒÐ°ÐœÐŽÐ° ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ð¿ÑÐžÐŒÐµÐœÑÐµÑÑÑ ÑÐ°ÐºÐžÐŒ Ð¶Ðµ ÐŸÐ±ÑÐ°Ð·ÐŸÐŒ, ÐºÐ°Ðº Ðž ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŽÐ°Ð»ÐµÐœÐžÑ.
++     ÐÐµ ÑÐŸÑÐŒÐ°Ñ ÑÐ°ÐºÐŸÐ²:
++
++       [ÑÐžÑÐ»ÐŸ]   c   ÐŸÐ±ÑÐµÐºÑ	   ÐÐÐ	    c	[ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
++
++  2. ÐÐ±ÑÐµÐºÑÑ ÑÐ°ÐºÐ¶Ðµ ÑÐŸÐ²Ð¿Ð°ÐŽÐ°ÑÑ: w (ÑÐ»ÐŸÐ²ÐŸ), $ (ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž) Ðž Ñ.Ð¿.
++
++  3. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  4. ÐÐµÑÐµÐ¹ÐŽÐžÑÐµ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÐŸÑÐžÐ±ÐºÐµ.
++
++  5. ÐÐ°Ð±ÐµÑÐžÑÐµ c$ Ðž ÐŸÑÑÐµÐŽÐ°ÐºÑÐžÑÑÐ¹ÑÐµ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐœÐ° ÑÐŸÐ²Ð¿Ð°ÐŽÐ°Ð»Ð° ÑÐŸ
++     Ð²ÑÐŸÑÐŸÐ¹, Ð¿ÐŸÑÐ»Ðµ ÑÐµÐ³ÐŸ ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC>.
++
++---> ÐÐŸÐœÐµÑ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐœÑÐ¶ÐŽÐ°ÐµÑÑÑ Ð² Ð¿ÐŸÐŒÐŸÑÐž, ÑÑÐŸÐ±Ñ ÑÑÐ°ÑÑ Ð¿ÐŸÑ
+ÐŸÐ¶ÐžÐŒ ÐœÐ° Ð²ÑÐŸÑÐŸÐ¹.
++---> ÐÐŸÐœÐµÑ ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž ÐœÑÐ¶ÐŽÐ°ÐµÑÑÑ Ð² Ð¿ÐŸÐŒÐŸÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ c$ .
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 3
++
++
++  1. ÐÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ°, ÐºÐŸÑÐŸÑÑÐ¹ ÑÐŸÐ»ÑÐºÐŸ ÑÑÐŸ Ð±ÑÐ» ÑÐŽÐ°Ð»ÐµÐœ, ÐœÐ°Ð±ÐµÑÐžÑÐµ p . Ð­ÑÐ°
++     ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÑÑÐ°Ð²ÐžÑ ÑÐŽÐ°Ð»ÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ ÐÐÐ¡ÐÐ ÐºÑÑÑÐŸÑÐ° (ÐµÑÐ»Ðž Ð±ÑÐ»Ð° ÑÐŽÐ°Ð»ÐµÐœÐ° ÑÑÑÐŸÐºÐ°,
++     ÑÐŸ ÐŸÐœÐ° Ð±ÑÐŽÐµÑ Ð¿ÐŸÐŒÐµÑÐµÐœÐ° Ð² ÑÑÑÐŸÐºÐµ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ).
++
++  2. ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÑÐžÐŒÐ²ÐŸÐ»Ð° Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ ÐœÐ°Ð±ÐµÑÐžÑÐµ r Ðž Ð·Ð°ÑÐµÐŒ Ð·Ð°ÐŒÐµÐœÑÑÑÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ».
++
++  3. ÐÐŸÐŒÐ°ÐœÐŽÐ° ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐÐ°ÐŒ ÐžÐ·ÐŒÐµÐœÐžÑÑ ÑÐºÐ°Ð·Ð°ÐœÐœÑÐ¹ ÐŸÐ±ÑÐµÐºÑ ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ
++     ÐºÐŸÐœÑÐ° ÑÑÐŸÐ³ÐŸ ÐŸÐ±ÑÐµÐºÑÐ°. ÐÐ°Ð¿ÑÐžÐŒÐµÑ, ÐœÐ°Ð±ÐµÑÐžÑÐµ cw ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ ÐŸÑ ÐºÑÑÑÐŸÑÐ° ÐŽÐŸ
++     ÐºÐŸÐœÑÐ° ÑÐ»ÐŸÐ²Ð°, c$ ÐŽÐ»Ñ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÐŽÐŸ ÐºÐŸÐœÑÐ° ÑÑÑÐŸÐºÐž.
++
++  4. Ð€ÐŸÑÐŒÐ°Ñ ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÑ ÑÐ°ÐºÐŸÐ²:
++
++	 [ÑÐžÑÐ»ÐŸ]   c	ÐŸÐ±ÑÐµÐºÑ	      ÐÐÐ	c   [ÑÐžÑÐ»ÐŸ]   ÐŸÐ±ÑÐµÐºÑ
++
++Ð¢ÐµÐ¿ÐµÑÑ ÐŸÑÐ¿ÑÐ°Ð²Ð»ÑÐ¹ÑÐµÑÑ Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ ÑÑÐŸÐºÑ.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++	      Ð£ÑÐŸÐº 4.1: ÐÐÐ€ÐÐ ÐÐÐŠÐÐ¯ Ð Ð€ÐÐÐÐ Ð Ð ÐÐ¡ÐÐÐÐÐÐÐÐÐ Ð ÐÐÐ
++
++
++ ** ÐÐ°Ð±ÐµÑÐžÑÐµ CTRL-g ÑÑÐŸÐ±Ñ ÑÐ²ÐžÐŽÐµÑÑ ÐÐ°ÑÐµ ÐŒÐµÑÑÐŸÑÐ°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð² ÑÐ°Ð¹Ð»Ðµ Ðž ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ
++				    ÐŸ ÐœÐµÐŒ.
++	ÐÐ°Ð±ÐµÑÐžÑÐµ SHIFT-G ÐŽÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ Ðº Ð·Ð°ÐŽÐ°ÐœÐœÐŸÐ¹ ÑÑÑÐŸÐºÐµ Ð² ÑÐ°Ð¹Ð»Ðµ. **
++
++  ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐŸÑÐžÑÐ°Ð¹ÑÐµ Ð²ÐµÑÑ ÑÑÐŸÐº Ð¿ÑÐµÐ¶ÐŽÐµ ÑÐµÐŒ Ð²ÑÐ¿ÐŸÐ»ÐœÑÑÑ Ð»ÑÐ±ÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ!!
++
++  1. Ð£ÐŽÐµÑÐ¶ÐžÐ²Ð°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ Ctrl ÐœÐ°Ð¶ÐŒÐžÑÐµ g . ÐÐœÐžÐ·Ñ ÑÐºÑÐ°ÐœÐ° Ð¿ÐŸÑÐ²ÐžÑÑÑ ÑÑÑÐŸÐºÐ° ÑÑÐ°ÑÑÑÐ° Ñ
++     ÐžÐŒÐµÐœÐµÐŒ ÑÐ°Ð¹Ð»Ð° Ðž ÐœÐŸÐŒÐµÑÐŸÐŒ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐÑ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÐµÑÑ. ÐÐ°Ð¿ÐŸÐŒÐœÐžÑÐµ ÐœÐŸÐŒÐµÑ
++     ÑÑÑÐŸÐºÐž, ÐŸÐœ Ð¿ÐŸÑÑÐµÐ±ÑÐµÑÑÑ ÐœÐ° ÐšÐ°Ð³Ðµ 3.
++
++  2. ÐÐ°Ð¶ÐŒÐžÑÐµ shift-G ÐŽÐ»Ñ Ð¿ÐµÑÐµÐŒÐµÑÐµÐœÐžÑ Ðº ÐºÐŸÐœÑÑ ÑÐ°Ð¹Ð»Ð°.
++
++  3. ÐÐ°Ð±ÐµÑÐžÑÐµ ÐœÐŸÐŒÐµÑ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ Ð²Ñ ÐœÐ°Ñ
+ÐŸÐŽÐžÐ»ÐžÑÑ Ðž Ð·Ð°ÑÐµÐŒ shift-G. Ð­ÑÐŸ
++     Ð²ÐµÑÐœÐµÑ ÐÐ°Ñ Ðº ÑÑÑÐŸÐºÐµ, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐÑ Ð±ÑÐ»Ðž, ÐºÐŸÐ³ÐŽÐ° Ð² Ð¿ÐµÑÐ²ÑÐ¹ ÑÐ°Ð· ÐœÐ°Ð¶Ð°Ð»Ðž Ctrl-g.
++     (ÐÐŸÐ³ÐŽÐ° ÐÑ Ð±ÑÐŽÐµÑÐµ ÐœÐ°Ð±ÐžÑÐ°ÑÑ ÑÐžÑÑÑ, ÐŸÐœÐž ÐÐ ÐŸÑÐŸÐ±ÑÐ°Ð·ÑÑÑÑ ÐœÐ° ÑÐºÑÐ°ÐœÐµ.)
++
++  4. ÐÑÐ»Ðž ÐÑ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž Ð²ÑÐµ Ð²ÑÑÐµÑÐºÐ°Ð·Ð°ÐœÐœÐŸÐµ, Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÐµ ÑÐ°Ð³Ðž 1--3.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			   Ð£ÑÐŸÐº 4.2: ÐÐÐÐÐÐÐ ÐÐÐÐ¡ÐÐ
++
++	      ** ÐÐ°Ð±ÐµÑÐžÑÐµ  /  Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐµÐŽÐžÑÐµ ÐžÑÐºÐŸÐŒÑÑ ÑÑÐ°Ð·Ñ. **
++
++  1. Ð ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode) ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ»  / . ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ,
++     ÑÑÐŸ ÐŸÐœ Ð²ÐŒÐµÑÑÐµ Ñ ÐºÑÑÑÐŸÑÐŸÐŒ Ð¿ÐŸÑÐ²ÐžÑÑÑ Ð²ÐœÐžÐ·Ñ ÑÐºÑÐ°ÐœÐ°, ÐºÐ°Ðº ÑÑÐŸ Ð¿ÑÐŸÐžÑÑ
+ÐŸÐŽÐžÑ Ñ
++     ÐºÐŸÐŒÐ°ÐœÐŽÐŸÐ¹ :	.
++
++  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ 'ÐŸÑÑÑÐžÐ±ÐºÐ°' <ENTER>. Ð­ÑÐŸ ÑÐŸ ÑÐ»ÐŸÐ²ÐŸ, ÐºÐŸÑÐŸÑÐŸÐµ ÐÑ Ð±ÑÐŽÐµÑÐµ
++     ÐžÑÐºÐ°ÑÑ.
++
++  3. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ð¿ÐŸÐ²ÑÐŸÑÐžÑÑ Ð¿ÐŸÐžÑÐº, Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð¶ÐŒÐžÑÐµ n .
++     ÐÐ»Ñ Ð¿ÐŸÐžÑÐºÐ° ÑÑÐŸÐ¹ ÑÑÐ°Ð·Ñ Ð² ÐŸÐ±ÑÐ°ÑÐœÐŸÐŒ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž, ÐœÐ°Ð¶ÐŒÐžÑÐµ Shift-N .
++
++  4. ÐÑÐ»Ðž ÐÑ Ð¶ÐµÐ»Ð°ÐµÑÐµ ÑÑÐ°Ð·Ñ ÐžÑÐºÐ°ÑÑ Ð² ÐŸÐ±ÑÐ°ÑÐœÐŸÐŒ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ
++     ÐºÐŸÐŒÐ°ÐœÐŽÑ ? Ð²ÐŒÐµÑÑÐŸ / .
++
++---> ÐÐŸÐ³ÐŽÐ° ÐÑ Ð¿ÑÐž Ð¿ÐŸÐžÑÐºÐµ ÐŽÐŸÑÑÐžÐ³ÐœÐµÑÐµ ÐºÐŸÐœÑÐ° ÑÐ°Ð¹Ð»Ð°, Ð¿ÐŸÐžÑÐº Ð±ÑÐŽÐµÑ Ð¿ÑÐŸÐŽÐŸÐ»Ð¶ÐµÐœ Ñ
++     ÐœÐ°ÑÐ°Ð»Ð°.
++
++  "ÐŸÑÑÑÐžÐ±ÐºÐ°" ÑÑÐŸ ÐœÐµ ÑÐ¿ÐŸÑÐŸÐ± Ð¿ÑÐŸÐžÐ·ÐœÐµÑÐµÐœÐžÑ ÑÐ»ÐŸÐ²Ð° `ÐŸÑÐžÐ±ÐºÐ°';  ÐŸÑÑÑÐžÐ±ÐºÐ° ÑÑÐŸ ÐŸÑÐžÐ±ÐºÐ°.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			Ð£ÑÐŸÐº 4.3: ÐÐÐÐ¡Ð ÐÐÐ ÐÐ«Ð¥ Ð¡ÐÐÐÐÐ
++
++
++		** ÐÐ°Ð±ÐµÑÐžÑÐµ % ÐŽÐ»Ñ Ð¿ÐŸÐžÑÐºÐ° Ð¿Ð°ÑÐœÑÑ
+ ),] ÐžÐ»Ðž } . **
++
++  1. ÐÐŸÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ ÐœÐ°ÐŽ Ð»ÑÐ±ÐŸÐ¹ ÐžÐ· (, [ ÐžÐ»Ðž { Ð² ÑÑÑÐŸÐºÐµ Ð²ÐœÐžÐ·Ñ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ» % .
++
++  3. ÐÑÑÑÐŸÑ ÐŽÐŸÐ»Ð¶ÐµÐœ Ð¿ÐµÑÐµÑÐºÐŸÑÐžÑÑ ÐœÐ° Ð¿Ð°ÑÐœÑÑ ÑÐºÐŸÐ±ÐºÑ.
++
++  4. ÐÐ°Ð±ÐµÑÐžÑÐµ % ÐŽÐ»Ñ Ð²ÐŸÐ·Ð²ÑÐ°ÑÐ° ÐºÑÑÑÐŸÑÐ° ÐœÐ°Ð·Ð°ÐŽ Ðº Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÐºÐŸÐ±ÐºÐµ.
++
++---> Ð­ÑÐŸ ( ÑÑÑÐŸÐºÐ°, ÑÐŸÐŽÐµÑÐ¶Ð°ÑÐ°Ñ ÑÐ°ÐºÐžÐµ (, ÑÐ°ÐºÐžÐµ [ ] Ðž ÑÐ°ÐºÐžÐµ { } ÑÐºÐŸÐ±ÐºÐž. ))
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð­ÑÐŸ ÐŸÑÐµÐœÑ ÑÐŽÐŸÐ±ÐœÐŸ Ð¿ÑÐž ÐŸÑÐ»Ð°ÐŽÐºÐµ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐŒ Ñ Ð¿ÑÐŸÐ¿ÑÑÐµÐœÐœÑÐŒÐž ÑÐºÐŸÐ±ÐºÐ°ÐŒÐž!
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      Ð£ÑÐŸÐº 4.4: Ð¡ÐÐÐ¡ÐÐ ÐÐ¡ÐÐ ÐÐÐÐÐÐÐ¯ ÐÐšÐÐÐÐ
++
++
++	 ** ÐÐ°Ð±ÐµÑÐžÑÐµ :s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ 'Ð±ÑÐ»ÐŸ' ÐœÐ° 'ÑÑÐ°Ð»ÐŸ'. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ :s/ÑÐ²ÐŸÐŽÑ/ÑÐ²ÐŸÐ¶Ñ <ENTER> . ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ ÐœÐ° ÑÐŸ, ÑÑÐŸ ÑÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ°
++     Ð·Ð°ÐŒÐµÐœÐžÑ ÑÐŸÐ»ÑÐºÐŸ Ð¿ÐµÑÐ²ÐŸÐµ ÐœÐ°Ð¹ÐŽÐµÐœÐœÐŸÐµ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÐµ Ð² ÑÑÑÐŸÐºÐµ.
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ :s/ÑÐ²ÐŸÐŽÑ/ÑÐ²ÐŸÐ¶Ñ/g , ÐŸÐ·ÐœÐ°ÑÐ°ÑÑÐµÐµ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÑ Ð³Ð»ÐŸÐ±Ð°Ð»ÑÐœÐŸ Ð²ÐŸ
++     Ð²ÑÐµÐ¹ ÑÑÑÐŸÐºÐµ. Ð­ÑÐŸ Ð·Ð°ÐŒÐµÐœÐžÑ Ð²ÑÐµ ÐœÐ°Ð¹ÐŽÐµÐœÐœÑÐµ Ð² ÑÑÑÐŸÐºÐµ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÑ.
++
++---> Ð¯ ÑÐ²ÐŸÐŽÑ Ðº ÐŸÑÐ²ÐµÑÐ¶ÐµÐœÐœÑÐŒ ÑÐµÐ»ÐµÐœÑÑÐŒ, Ñ ÑÐ²ÐŸÐŽÑ ÑÐºÐ²ÐŸÐ·Ñ Ð²ÐµÐºÐŸÐ²ÐµÑÐœÑÐ¹ ÑÑÐŸÐœ, Ñ ÑÐ²ÐŸÐŽÑ Ðº
++     Ð·Ð°Ð±ÑÑÑÐŒ Ð¿ÐŸÐºÐŸÐ»ÐµÐœÑÑÐŒ.
++
++  4. ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
+ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ Ð¿ÐŸÑÐ»ÐµÐŽÐŸÐ²Ð°ÑÐµÐ»ÑÐœÐŸÑÑÐž ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ² ÐŒÐµÐ¶ÐŽÑ ÐŽÐ²ÑÐŒÑ
++     ÑÑÑÐŸÐºÐ°ÐŒÐž,
++     ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,#s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g  Ð³ÐŽÐµ #,# --- ÐœÐŸÐŒÐµÑÐ° ÑÑÐžÑ
+ ÑÑÑÐŸÐº.
++     ÐÐ°Ð±ÐµÑÐžÑÐµ :%s/Ð±ÑÐ»ÐŸ/ÑÑÐ°Ð»ÐŸ/g    ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
+ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ Ð²ÐŸ Ð²ÑÐµÐŒ ÑÐ°Ð¹Ð»Ðµ.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 4
++  1. Ctrl-g Ð¿ÐŸÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ð²Ð°ÑÐµ Ð¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð² ÑÐ°Ð¹Ð»Ðµ Ðž ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ ÐœÐµÐŒ.
++     Shift-G Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐÐ°Ñ Ð² ÐºÐŸÐœÐµÑ ÑÐ°Ð¹Ð»Ð°. ÐÐŸÐŒÐµÑ, Ð·Ð° ÐºÐŸÑÐŸÑÑÐŒ ÑÐ»ÐµÐŽÑÐµÑ Shift-G
++     Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÐµÑÐµÐ¹ÑÐž Ðº ÑÑÑÐŸÐºÐµ Ñ ÑÑÐžÐŒ ÐœÐŸÐŒÐµÑÐŸÐŒ.
++
++  2. ÐÐ°Ð¶Ð°ÑÐžÐµ / Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐŸÐŽ ÑÑÑÐŸÐºÐž Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÑÐŸÐžÐ·Ð²ÐµÑÑÐž Ð¿ÐŸÐžÑÐº ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž
++     ÐÐÐÐ ÐÐ Ð¿ÐŸ ÑÐµÐºÑÑÑ.
++     ÐÐ°Ð¶Ð°ÑÐžÐµ ? Ðž Ð·Ð°ÑÐµÐŒ Ð²Ð²ÐŸÐŽ ÑÑÑÐŸÐºÐž Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ Ð¿ÑÐŸÐžÐ·Ð²ÐµÑÑÐž Ð¿ÐŸÐžÑÐº ÑÑÐŸÐ¹ ÑÑÑÐŸÐºÐž
++     ÐÐÐÐÐ Ð¿ÐŸ ÑÐµÐºÑÑÑ.
++     ÐÐŸÑÐ»Ðµ Ð¿ÐŸÐžÑÐºÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ n ÐŽÐ»Ñ Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐ° Ðº ÑÐ»ÐµÐŽÑÑÑÐµÐŒÑ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÑ ÐžÑÐºÐŸÐŒÐŸÐ¹
++     ÑÑÑÐŸÐºÐž Ð² ÑÐŸÐŒ Ð¶Ðµ ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž ÐžÐ»Ðž Shift-N ÐŽÐ»Ñ Ð¿ÐµÑÐµÑ
+ÐŸÐŽÐ° Ð² Ð¿ÑÐŸÑÐžÐ²ÐŸÐ¿ÐŸÐ»ÐŸÐ¶ÐœÐŸÐŒ
++     ÐœÐ°Ð¿ÑÐ°Ð²Ð»ÐµÐœÐžÐž.
++
++  3. ÐÐ°Ð¶Ð°ÑÐžÐµ % , ÐºÐŸÐ³ÐŽÐ° ÐºÑÑÑÐŸÑ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ ÐœÐ° (,),[,],{, ÐžÐ»Ðž } Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐœÐ°Ð¹ÑÐž
++     Ð¿Ð°ÑÐœÑÑ ÑÐºÐŸÐ±ÐºÑ.
++
++  4. ÐÐ»Ñ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÐž `ÑÑÐ°Ð»ÐŸ' Ð²ÐŒÐµÑÑÐŸ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ `Ð±ÑÐ»ÐŸ' Ð² ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
++     :s/old/new
++     ÐÐ»Ñ Ð¿ÐŸÐŽÑÑÐ°ÐœÐŸÐ²ÐºÐž `ÑÑÐ°Ð»ÐŸ' Ð²ÐŒÐµÑÑÐŸ Ð²ÑÐµÑ
+ `Ð±ÑÐ»ÐŸ' Ð² ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
++     :s/old/new/g
++     ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð² ÐžÐœÑÐµÑÐ²Ð°Ð»Ðµ ÐŒÐµÐ¶ÐŽÑ ÐŽÐ²ÑÐŒÑ ÑÑÑÐŸÐºÐ°ÐŒÐž, ÐœÐ°Ð±ÐµÑÐžÑÐµ
++     :#,#s/old/new/g
++     ÐÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð²ÑÐµÑ
+ Ð²Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÐ¹ `Ð±ÑÐ»ÐŸ' ÐœÐ° `ÑÑÐ°Ð»ÐŸ' Ð² ÑÐ°Ð¹Ð»Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ
++     :%s/old/new/g
++     Ð§ÑÐŸÐ±Ñ ÑÐµÐŽÐ°ÐºÑÐŸÑ ÐºÐ°Ð¶ÐŽÑÐ¹ ÑÐ°Ð· Ð·Ð°Ð¿ÑÐ°ÑÐžÐ²Ð°Ð» Ð¿ÐŸÐŽÑÐ²ÐµÑÐ¶ÐŽÐµÐœÐžÐµ, ÐŽÐŸÐ±Ð°Ð²ÑÑÐµ 'c'
++     :%s/old/new/gc
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   Ð£ÑÐŸÐº 5.1: ÐÐÐ ÐÐ«ÐÐÐÐÐÐ¢Ð¬ ÐÐÐÐšÐÐ®Ð® ÐÐÐÐÐÐÐ£
++
++
++    ** ÐÐ°Ð±ÐµÑÐžÑÐµ :! Ðž Ð·Ð°ÑÐµÐŒ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐºÐŸÑÐŸÑÑÑ ÑÐ»ÐµÐŽÑÐµÑ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ. **
++
++  1. ÐÐ°Ð±ÐµÑÐžÑÐµ ÑÐ¶Ðµ Ð·ÐœÐ°ÐºÐŸÐŒÑÑ ÐÐ°ÐŒ ÐºÐŸÐŒÐ°ÐœÐŽÑ : ÐŽÐ»Ñ ÑÑÑÐ°ÐœÐŸÐ²ÐºÐž ÐºÑÑÑÐŸÑÐ° Ð² ÐºÐŸÐŒÐ°ÐœÐŽÐœÑÑ
++     ÑÑÑÐŸÐºÑ ÑÐµÐŽÐ°ÐºÑÐŸÑÐ°. Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð²Ð²ÐµÑÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++
++  2. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ ÑÐžÐŒÐ²ÐŸÐ» ! (Ð²ÐŸÑÐºÐ»ÐžÑÐ°ÑÐµÐ»ÑÐœÑÐ¹ Ð·ÐœÐ°Ðº). Ð¢ÐµÐ¿ÐµÑÑ ÐŒÐŸÐ¶ÐœÐŸ ÐžÑÐ¿ÐŸÐ»ÐœÐžÑÑ
++     Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐœÑÑ ÐŸÐ±ÐŸÐ»ÐŸÑÐºÑ.
++
++  3. ÐÐ»Ñ Ð¿ÑÐžÐŒÐµÑÐ° ÐœÐ°Ð±ÐµÑÐžÑÐµ ls Ð¿ÐŸÑÐ»Ðµ ! Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ <ENTER>. Ð­ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÑÐ²ÐµÐŽÐµÑ
++     ÑÐ¿ÐžÑÐŸÐº ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ, ÑÐŸÑÐœÐŸ ÑÐ°ÐºÐ¶Ðµ, ÐºÐ°Ðº ÐµÑÐ»Ðž Ð±Ñ ÐÑ Ð²Ð²ÐµÐ»Ðž ÑÑÑ
++     ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð² Ð¿ÑÐžÐ³Ð»Ð°ÑÐµÐœÐžÐž ÐŸÐ±ÐŸÐ»ÐŸÑÐºÐž. ÐÐ»Ðž Ð¿ÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ :!dir , ÐµÑÐ»Ðž Ð¿ÑÐµÐŽÑÐŽÑÑÐ°Ñ
++     ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÐœÐµ ÑÑÐ°Ð±ÐŸÑÐ°Ð»Ð°.
++
++---> ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð¢Ð°ÐºÐžÐŒ ÑÐ¿ÐŸÑÐŸÐ±ÐŸÐŒ ÐŒÐŸÐ¶ÐœÐŸ Ð²ÑÐ¿ÐŸÐ»ÐœÐžÑÑ Ð»ÑÐ±ÑÑ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++
++---> ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ, ÐœÐ°ÑÐžÐœÐ°ÑÑÐžÐµÑÑ Ñ : , ÐŽÐŸÐ»Ð¶ÐœÑ Ð·Ð°Ð²ÐµÑÑÐ°ÑÑÑÑ ÐœÐ°Ð¶Ð°ÑÐžÐµÐŒ
++     <ENTER>.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 Ð£ÑÐŸÐº 5.2: ÐÐÐ ÐÐÐÐÐ¡ÐÐ¢Ð¬ Ð€ÐÐÐ
++
++
++** ÐÐ»Ñ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹, Ð¿ÑÐŸÐžÐ·Ð²ÐµÐŽÐµÐœÐœÑÑ
+ Ð² ÑÐ°Ð¹Ð»Ðµ, ÐœÐ°Ð±ÐµÑÐžÑÐµ :w ÐÐÐ¯_Ð€ÐÐÐÐ. **
++
++  1. ÐÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐžÐ»Ðž :!ls ÐŽÐ»Ñ Ð¿ÐŸÐ»ÑÑÐµÐœÐžÑ ÑÐ¿ÐžÑÐºÐ° ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ.
++     ÐÐ°Ðº ÐÐ°ÐŒ ÑÐ¶Ðµ ÐžÐ·Ð²ÐµÑÑÐœÐŸ, ÐÑ ÐŽÐŸÐ»Ð¶ÐœÑ ÐœÐ°Ð¶Ð°ÑÑ <ENTER> Ð¿ÐŸÑÐ»Ðµ Ð²Ð²ÐŸÐŽÐ° ÑÑÐžÑ
+ ÐºÐŸÐŒÐ°ÐœÐŽ.
++
++  2. ÐÑÐžÐŽÑÐŒÐ°Ð¹ÑÐµ ÐœÐ°Ð·Ð²Ð°ÐœÐžÐµ ÐŽÐ»Ñ ÑÐ°Ð¹Ð»Ð°, ÐºÐŸÑÐŸÑÐŸÐµ ÐµÑÐµ ÐœÐµ ÑÑÑÐµÑÑÐ²ÑÐµÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ TEST.
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ :w TEST (Ð³ÐŽÐµ TEST --- ÑÑÐŸ ÐžÐŒÑ ÑÐ°Ð¹Ð»Ð°, Ð¿ÑÐžÐŽÑÐŒÐ°ÐœÐœÐŸÐµ ÐÐ°ÐŒÐž.)
++
++  4. Ð­ÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽÐ° ÑÐŸÑ
+ÑÐ°ÐœÐžÑ Ð²ÐµÑÑ ÑÐ°Ð¹Ð» (Ð£ÑÐµÐ±ÐœÐžÐº Ð¿ÐŸ Vim) Ð¿ÐŸÐŽ ÐžÐŒÐµÐœÐµÐŒ TEST. Ð§ÑÐŸÐ±Ñ
++     ÑÐŽÐŸÑÑÐŸÐ²ÐµÑÐžÑÑÑÑ Ð² ÑÑÐŸÐŒ, ÑÐœÐŸÐ²Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ :!dir Ðž Ð¿ÑÐŸÑÐŒÐŸÑÑÐžÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³.
++
++---> ÐÐ°ÐŒÐµÑÑÑÐµ, ÑÑÐŸ ÐµÑÐ»Ðž ÐÑ Ð²ÑÐ¹ÐŽÐµÑÐµ ÐžÐ· Vim Ðž Ð·Ð°ÑÐµÐŒ Ð·Ð°Ð¿ÑÑÑÐžÑÐµ ÐµÐ³ÐŸ ÑÐœÐŸÐ²Ð° Ñ
++     ÑÐ°Ð¹Ð»ÐŸÐŒ TEST, ÑÑÐŸÑ ÑÐ°Ð¹Ð» Ð±ÑÐŽÐµÑ ÑÐŸÑÐœÐŸÐ¹ ÐºÐŸÐ¿ÐžÐµÐ¹ ÑÑÐµÐ±ÐœÐžÐºÐ° Ð² ÑÐŸÑ ÐŒÐŸÐŒÐµÐœÑ, ÐºÐŸÐ³ÐŽÐ°
++     ÐÑ ÐµÐ³ÐŸ ÑÐŸÑ
+ÑÐ°ÐœÐžÐ»Ðž.
++
++  5. Ð¢ÐµÐ¿ÐµÑÑ ÑÐŽÐ°Ð»ÐžÑÐµ ÑÑÐŸÑ ÑÐ°Ð¹Ð», ÐœÐ°Ð±ÑÐ°Ð² :!del TEST
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       Ð£ÑÐŸÐº 5.3: ÐÐ«ÐÐÐ ÐÐ§ÐÐÐ Ð¡ÐÐ¥Ð ÐÐÐÐÐÐ
++
++
++	 ** ÐÐ»Ñ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ ÑÐ°ÑÑÐž ÑÐ°Ð¹Ð»Ð°, ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,# w ÐÐÐ¯_Ð€ÐÐÐÐ **
++
++  1. ÐÑÐµ ÑÐ°Ð· ÐœÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐžÐ»Ðž :!ls ÐŽÐ»Ñ Ð¿ÐŸÐ»ÑÑÐµÐœÐžÑ ÑÐ¿ÐžÑÐºÐ° ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÑÐµÐºÑÑÐµÐŒ
++     ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ Ðž Ð²ÑÐ±ÐµÑÐžÑÐµ Ð¿ÐŸÐŽÑ
+ÐŸÐŽÑÑÐµÐµ ÐžÐŒÑ, ÐœÐ°Ð¿ÑÐžÐŒÐµÑ TEST.
++
++  2. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ðº ÐœÐ°ÑÐ°Ð»Ñ ÑÑÐŸÐ¹ ÑÑÑÐ°ÐœÐžÑÑ Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ Ctrl-g ÐŽÐ»Ñ ÐœÐ°Ñ
+ÐŸÐ¶ÐŽÐµÐœÐžÑ
++     ÐœÐŸÐŒÐµÑÐ° ÑÑÑÐŸÐºÐžto. ÐÐÐÐÐÐÐÐ¢Ð Ð­Ð¢ÐÐ¢ ÐÐÐÐÐ !
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐ°ÐœÐžÑÑ Ðž Ð²ÐœÐŸÐ²Ñ ÐœÐ°Ð±ÐµÑÐžÑÐµ Ctrl-g. ÐÐÐÐÐÐÐÐ¢Ð
++     Ð Ð­Ð¢ÐÐ¢ ÐÐÐÐÐ  Ð¢ÐÐÐ!
++
++  4. ÐÐ»Ñ ÑÐŸÑ
+ÑÐ°ÐœÐµÐœÐžÑ Ð¢ÐÐÐ¬ÐÐ Ð§ÐÐ¡Ð¢Ð ÑÐ°Ð¹Ð»Ð° ÐœÐ°Ð±ÐµÑÐžÑÐµ :#,# w TEST , Ð³ÐŽÐµ #,# --- ÑÑÐŸ
++     ÐœÐŸÐŒÐµÑÐ°, ÐºÐŸÑÐŸÑÑÐµ ÐÑ Ð·Ð°Ð¿ÐŸÐŒÐœÐžÐ»Ðž (ÐœÐ°ÑÐ°Ð»ÐŸ, ÐºÐŸÐœÐµÑ), Ð° TEST --- ÐžÐŒÑ Ð²Ð°ÑÐµÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°.
++
++  5. ÐÐ°Ðº Ðž Ð¿ÑÐµÐ¶ÐŽÐµ, ÑÐ±ÐµÐŽÐžÑÐµÑÑ Ð² ÐœÐ°Ð»ÐžÑÐžÐž ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð° ÐºÐŸÐŒÐ°ÐœÐŽÐŸÐ¹ :!dir , ÐœÐŸ ÐÐ
++     Ð£ÐÐÐÐ¯ÐÐ¢Ð ÐµÐ³ÐŸ.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    Ð£ÑÐŸÐº 5.4: Ð§Ð¢ÐÐÐÐ Ð ÐÐÐªÐÐÐÐÐÐÐÐ Ð€ÐÐÐÐÐ
++
++	  ** ÐÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐŸÐŽÐµÑÐ¶ÐžÐŒÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ð°, ÐœÐ°Ð±ÐµÑÐžÑÐµ  :r FILENAME **
++
++  1. ÐÐ°Ð±ÐµÑÐžÑÐµ :!dir ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐ±ÐµÐŽÐžÑÑÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÑÐ°Ð¹Ð» TEST Ð²ÑÐµ ÐµÑÐµ
++     ÑÑÑÐµÑÑÐ²ÑÐµÑ.
++
++  2. Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² Ð²ÐµÑÑ
+ÐœÐµÐ¹ ÑÐ°ÑÑÐž ÑÑÐŸÐ¹ ÑÑÑÐ°ÐœÐžÑÑ.
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÐŸÑÐ»Ðµ Ð²ÑÐ¿ÐŸÐ»ÐœÐµÐœÐžÑ ÑÐ°Ð³Ð° 3 ÐÑ ÑÐ²ÐžÐŽÐžÑÐµ Ð£ÑÐŸÐº 5.3.	ÐÐŸÑÐ»Ðµ ÑÑÐŸÐ³ÐŸ
++	   Ð¿ÐµÑÐµÐŒÐµÑÐ°Ð¹ÑÐµÑÑ ÐÐÐÐ, ÑÐœÐŸÐ²Ð° Ðº ÑÑÐŸÐŒÑ ÑÑÐŸÐºÑ.
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐŸÑÐžÑÐ°Ð¹ÑÐµ ÐÐ°Ñ ÑÐ°Ð¹Ð» TEST, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ :r TEST , Ð³ÐŽÐµ
++     TEST --- ÑÑÐŸ ÐžÐŒÑ ÑÐ°Ð¹Ð»Ð°.
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: ÐÑÐŸÑÐžÑÐ°ÐœÐœÑÐ¹ ÐÐ°ÐŒÐž ÑÐ°Ð¹Ð» Ð±ÑÐŽÐµÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐœ Ð² ÑÐŸÐŒ ÐŒÐµÑÑÐµ, Ð³ÐŽÐµ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ
++	   ÐºÑÑÑÐŸÑ.
++
++  4. Ð§ÑÐŸÐ±Ñ ÑÐ±ÐµÐŽÐžÑÑÑÑ Ð² ÑÐŸÐŒ, ÑÑÐŸ ÑÐ°Ð¹Ð» Ð¿ÑÐŸÑÐžÑÐ°Ðœ, Ð¿ÐµÑÐµÐŒÐµÑÑÐžÑÐµÑÑ ÐœÐµÐŒÐœÐŸÐ³ÐŸ ÐœÐ°Ð·Ð°ÐŽ Ð¿ÐŸ
++     ÑÐµÐºÑÑÑ Ðž [A[BÐ·Ð°ÐŒÐµÑÑÑÐµ, ÑÑÐŸ ÑÐµÐ¿ÐµÑÑ ÑÑÑÐµÑÑÐ²ÑÑÑ ÐŽÐ²Ðµ ÐºÐŸÐ¿ÐžÐž Ð£ÑÐŸÐºÐ° 5.3, ÐžÑÑ
+ÐŸÐŽÐœÐ°Ñ
++     Ðž Ð¿ÐŸÐ»ÑÑÐµÐœÐœÐ°Ñ ÐžÐ· ÑÐ°Ð¹Ð»Ð°.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 5
++
++
++  1.  :!ÐºÐŸÐŒÐ°ÐœÐŽÐ°  ÐžÑÐ¿ÐŸÐ»ÐœÑÐµÑ Ð²ÐœÐµÑÐœÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÑ.
++
++      ÐÐµÐºÐŸÑÐŸÑÑÐµ Ð¿ÐŸÐ»ÐµÐ·ÐœÑÐµ Ð¿ÑÐžÐŒÐµÑÑ:
++	  :!dir --- Ð²ÑÐ²ÐŸÐŽÐžÑ ÑÐ¿ÐžÑÐŸÐº ÑÐ°Ð¹Ð»ÐŸÐ² Ð² ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ðµ.
++	  :!del FILENAME --- ÑÐŽÐ°Ð»ÑÐµÑ ÑÐ°Ð¹Ð» FILENAME.
++
++  2.  :w FILENAME Ð·Ð°Ð¿ÐžÑÑÐ²Ð°ÐµÑ ÑÐµÐºÑÑÐžÐ¹ ÑÐµÐŽÐ°ÐºÑÐžÑÑÐµÐŒÑÐ¹ ÑÐ°Ð¹Ð» ÐœÐ° ÐŽÐžÑÐº
++      Ð¿ÐŸÐŽ ÐžÐŒÐµÐœÐµÐŒ FILENAME.
++
++  3.  :#,#w FILENAME ÑÐŸÑ
+ÑÐ°ÐœÑÐµÑ ÑÑÑÐŸÐºÐž ÐŸÑ # ÐŽÐŸ # Ð² ÑÐ°Ð¹Ð» FILENAME.
++
++  4.  :r FILENAME ÑÑÐžÑÑÐ²Ð°ÐµÑ Ñ ÐŽÐžÑÐºÐ° ÑÐ°Ð¹Ð» FILENAME Ðž Ð¿ÐŸÐŒÐµÑÐ°ÐµÑ ÐµÐ³ÐŸ Ð² ÑÐµÐºÑÑÐžÐ¹
++      ÑÐ°Ð¹Ð» ÑÐ»ÐµÐŽÐŸÐŒ Ð·Ð° Ð¿ÐŸÐ·ÐžÑÐžÐµÐ¹ ÐºÑÑÑÐŸÑÐ°.
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  Ð£ÑÐŸÐº 6.1: ÐÐÐÐÐÐÐ Ð¡ÐÐÐÐÐÐÐ¯
++
++
++ ** ÐÐ°Ð±ÐµÑÐžÑÐµ o ÑÑÐŸÐ±Ñ ÑÐŸÐ·ÐŽÐ°ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÑÐµÐ¶ÐžÐŒ
++			   Ð²ÑÑÐ°Ð²ÐºÐž (Insert mode) **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ o (Ð² ÐœÐžÐ¶ÐœÐµÐŒ ÑÐµÐ³ÐžÑÑÑÐµ) ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐŸÐ·ÐŽÐ°ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ
++     ÐÐÐÐ ÐºÑÑÑÐŸÑÐ° Ðž Ð¿ÐµÑÐµÐ¹ÑÐž Ð² ÑÐµÐ¶ÐžÐŒ Ð²ÑÑÐ°Ð²ÐºÐž (Insert mode).
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÑÐºÐŸÐ¿ÐžÑÑÐ¹ÑÐµ Ð¿ÐŸÐŒÐµÑÐµÐœÐœÑÑ ---> ÑÑÑÐŸÐºÑ Ðž ÐœÐ°Ð¶ÐŒÐžÑÐµ <ESC> ÐŽÐ»Ñ Ð²ÑÑ
+ÐŸÐŽÐ° ÐžÐ·
++     ÑÐµÐ¶ÐžÐŒÐ° Ð²ÑÑÐ°Ð²ÐºÐž.
++
++---> ÐÐŸÑÐ»Ðµ ÐœÐ°Ð¶Ð°ÑÐžÑ o ÐºÑÑÑÐŸÑ Ð¿ÐµÑÐµÐ¹ÐŽÐµÑ ÐœÐ° ÐœÐŸÐ²ÑÑ Ð¿ÑÑÑÑÑ ÑÑÑÐŸÐºÑ Ð² ÑÐµÐ¶ÐžÐŒÐµ Ð²ÑÑÐ°Ð²ÐºÐž.
++
++  4. ÐÐ»Ñ ÑÐŸÐ·ÐŽÐ°ÐœÐžÑ ÑÑÑÐŸÐºÐž ÐÐ«ÐšÐ ÐºÑÑÑÐŸÑÐ°, Ð¿ÑÐŸÑÑÐŸ ÐœÐ°Ð±ÐµÑÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ O, Ð²ÐŒÐµÑÑÐŸ
++     ÑÑÑÐŸÑÐœÐŸÐ¹ o. ÐÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ Ð¿ÑÐŸÐŽÐµÐ»Ð°ÑÑ ÑÑÐŸ Ñ ÐœÐžÐ¶ÐµÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÑÑÑÐŸÐºÐŸÐ¹.
++Ð¡ÐŸÐ·ÐŽÐ°Ð¹ÑÐµ ÐœÐŸÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐœÐ°ÐŽ ÑÑÐŸÐ¹, ÐœÐ°Ð¶Ð°Ð² Shift-O, Ð¿ÐŸÐŒÐµÑÑÐžÐ² ÐºÑÑÑÐŸÑ ÐœÐ° ÑÑÑ ÑÑÑÐŸÐºÑ.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 Ð£ÑÐŸÐº 6.2: ÐÐÐÐÐÐÐ ÐÐÐÐÐÐÐÐÐÐ¯
++
++	    ** ÐÐ°Ð±ÐµÑÐžÑÐµ a , ÑÑÐŸÐ±Ñ Ð²ÑÑÐ°Ð²ÐžÑÑ ÑÐµÐºÑÑ ÐÐÐ¡ÐÐ ÐºÑÑÑÐŸÑÐ°. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ð² ÐºÐŸÐœÐµÑ Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐž, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> ,
++     ÐœÐ°Ð±ÑÐ°Ð² $ Ð² ÐŸÐ±ÑÑÐœÐŸÐŒ ÑÐµÐ¶ÐžÐŒÐµ (Normal mode).
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ a (Ð² ÐœÐžÐ¶ÐœÐµÐŒ ÑÐµÐ³ÐžÑÑÑÐµ) ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ° ÐÐÐ¡ÐÐ ÑÐžÐŒÐ²ÐŸÐ»Ð°,
++     ÐœÐ°Ñ
+ÐŸÐŽÑÑÐµÐ³ÐŸÑÑ Ð¿ÐŸÐŽ ÐºÑÑÑÐŸÑÐŸÐŒ. (ÐÐ°Ð³Ð»Ð°Ð²ÐœÐ°Ñ A Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ Ð² ÐºÐŸÐœÐµÑ
++     ÑÑÑÐŸÐºÐž.)
++
++ÐÐ°ÐŒÐµÑÐ°ÐœÐžÐµ: Ð­ÑÐŸ Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ ÐžÐ·Ð±ÐµÐ¶Ð°ÑÑ ÐœÐ°Ð¶Ð°ÑÐžÑ i , Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°, ÑÐµÐºÑÑÐ° ÐŽÐ»Ñ
++	   Ð²ÑÑÐ°Ð²ÐºÐž, <ESC>, ÐºÑÑÑÐŸÑ-Ð²Ð¿ÑÐ°Ð²ÐŸ, Ðž, ÐœÐ°ÐºÐŸÐœÐµÑ, x , Ð¿ÑÐŸÑÑÐŸ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ,
++	   ÑÑÐŸÐ±Ñ ÐŽÐŸÐ±Ð°Ð²ÐžÑÑ ÑÐµÑÑ Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž!
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ Ð·Ð°Ð²ÐµÑÑÐžÑÐµ Ð¿ÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ. ÐÐ°ÐŒÐµÑÑÑÐµ ÑÐ°ÐºÐ¶Ðµ, ÑÑÐŸ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐµ ÑÑÐŸ Ð²
++     ÑÐŸÑÐœÐŸÑÑÐž ÑÐŸ Ð¶Ðµ ÑÐ°ÐŒÐŸÐµ, ÑÑÐŸ Ðž ÑÐµÐ¶ÐžÐŒ Ð²ÑÑÐ°Ð²ÐºÐž, Ð·Ð° ÐžÑÐºÐ»ÑÑÐµÐœÐžÐµÐŒ Ð¿ÐŸÐ·ÐžÑÐžÐž, Ð²
++     ÐºÐŸÑÐŸÑÑÑ Ð±ÑÐŽÐµÑ Ð²ÑÑÐ°Ð²Ð»ÐµÐœ ÑÐµÐºÑÑ.
++
++---> Ð­ÑÐ° ÑÑÑÐŸÑÐºÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ
++---> Ð­ÑÐ° ÑÑÑÐŸÑÐºÐ° Ð¿ÐŸÐ·Ð²ÐŸÐ»ÐžÑ ÐÐ°ÐŒ Ð¿ÐŸÐ¿ÑÐ°ÐºÑÐžÐºÐŸÐ²Ð°ÑÑÑÑ Ð² ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÐž ÑÐµÐºÑÑÐ° Ð² ÐºÐŸÐœÐµÑ
++     ÑÑÑÐŸÐºÐž.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       Ð£ÑÐŸÐº 6.3: ÐÐ©Ð ÐÐÐÐ Ð¡ÐÐÐ¡ÐÐ ÐÐÐÐÐÐ«
++
++
++       ** ÐÐ°Ð±ÐµÑÐžÑÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÑÑ R ÐŽÐ»Ñ Ð·Ð°ÐŒÐµÐœÑ Ð±ÐŸÐ»ÐµÐµ, ÑÐµÐŒ ÐŸÐŽÐœÐŸÐ³ÐŸ ÑÐžÐŒÐ²ÐŸÐ»Ð°. **
++
++  1. ÐÐµÑÐµÐŒÐµÑÑÐžÑÐµ ÐºÑÑÑÐŸÑ Ð²ÐœÐžÐ·, Ðº ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ --->.
++
++  2. Ð Ð°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐžÑÐµ ÐºÑÑÑÐŸÑ Ð² ÐœÐ°ÑÐ°Ð»Ðµ Ð¿ÐµÑÐ²ÐŸÐ³ÐŸ ÑÐ»ÐŸÐ²Ð°, ÐŸÑÐ»ÐžÑÐ°ÑÑÐµÐ³ÐŸÑÑ ÐŸÑ
++     ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐµÐ³ÐŸ Ð² ÑÐ»ÐµÐŽÑÑÑÐµÐ¹ ÑÑÑÐŸÐºÐµ, Ð¿ÐŸÐŒÐµÑÐµÐœÐœÐŸÐ¹ ---> (ÑÐ»ÐŸÐ²ÐŸ 'Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹').
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÐœÐ°Ð±ÐµÑÐžÑÐµ R Ðž Ð·Ð°ÐŒÐµÐœÐžÑÐµ ÐŸÑÑÐ°ÑÐŸÐº ÑÐµÐºÑÑÐ° Ð² Ð¿ÐµÑÐ²ÐŸÐ¹ ÑÑÑÐŸÐºÐµ, ÐœÐ°Ð±ÑÐ°Ð²
++     Ð¿ÐŸÐ²ÐµÑÑ
+ ÑÑÐ°ÑÐŸÐ³ÐŸ ÑÐµÐºÑÑÐ° ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐŸÐ±Ðµ ÑÑÑÐŸÐºÐž ÑÑÐ°Ð»Ðž ÐŸÐŽÐžÐœÐ°ÐºÐŸÐ²ÑÐŒÐž.
++
++---> ÐÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐŒÐŸÐ¶ÐœÐŸ ÑÑÐ°Ð²ÐœÑÑÑ Ñ Ð¿ÐŸÑÐ»ÐµÐŽÐœÐµÐ¹, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ ÐºÐ»Ð°Ð²ÐžÑÐž.
++---> ÐÐµÑÐ²ÑÑ ÑÑÑÐŸÐºÑ ÐŒÐŸÐ¶ÐœÐŸ ÑÑÐ°Ð²ÐœÑÑÑ Ñ Ð²ÑÐŸÑÐŸÐ¹, ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÑ R Ðž ÐœÐ°Ð±ÑÐ°Ð² ÐœÐŸÐ²ÑÐ¹ ÑÐµÐºÑÑ.
++
++  4. ÐÐ±ÑÐ°ÑÐžÑÐµ Ð²ÐœÐžÐŒÐ°ÐœÐžÐµ, ÑÑÐŸ Ð¿ÑÐž ÐœÐ°Ð¶Ð°ÑÐžÐž <ESC> ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ, Ð»ÑÐ±ÐŸÐ¹
++     ÐœÐµ ÐžÐ·ÐŒÐµÐœÐµÐœÐœÑÐ¹ ÑÐµÐºÑÑ ÑÐŸÑ
+ÑÐ°ÐœÐžÑÑÑ.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			Ð£ÑÐŸÐº 6.4: Ð£Ð¡Ð¢ÐÐÐÐÐÐ ÐÐÐ ÐÐÐÐ¢Ð ÐÐ
++
++
++** Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÐŒ Ð¿Ð°ÑÐ°ÐŒÐµÑÑÑ ÑÐ°Ðº, ÑÑÐŸÐ±Ñ ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐ³ÐžÑÑÑ Ð¿ÑÐž Ð¿ÐŸÐžÑÐºÐµ ÐžÐ»Ðž Ð·Ð°ÐŒÐµÐœÐµ **
++
++
++  1. ÐÐŸÐžÑÐžÑÐµ ÑÐ»ÐŸÐ²ÐŸ 'ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ', ÐœÐ°Ð±ÑÐ°Ð²:
++     /ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ
++     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ Ð¿ÐŸÐžÑÐº ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÐœÐ°Ð¶ÐžÐŒÐ°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ n
++
++  2. ÐÐºÐ»ÑÑÐžÑÐµ Ð¿Ð°ÑÐ°ÐŒÐµÑÑ 'ic' (ÐÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ ÑÐµÐ³ÐžÑÑÑ), ÐœÐ°Ð±ÑÐ°Ð²:
++     :set ic
++
++  3. Ð¢ÐµÐ¿ÐµÑÑ ÑÐœÐŸÐ²Ð° ÑÐŽÐµÐ»Ð°Ð¹ÑÐµ Ð¿ÐŸÐžÑÐº ÑÐ»ÐŸÐ²Ð° 'ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ', ÐœÐ°Ð¶Ð°Ð²: n
++     ÐÐŸÐ²ÑÐŸÑÐžÑÐµ Ð¿ÐŸÐžÑÐº ÐœÐµÑÐºÐŸÐ»ÑÐºÐŸ ÑÐ°Ð·, ÐœÐ°Ð¶ÐžÐŒÐ°Ñ ÐºÐ»Ð°Ð²ÐžÑÑ n
++
++  4. ÐÐºÐ»ÑÑÐžÑÐµ Ð¿Ð°ÑÐ°ÐŒÐµÑÑÑ 'hlsearch' Ðž 'incsearch':
++     :set hls is
++
++  5. Ð¢ÐµÐ¿ÐµÑÑ ÐŸÐ¿ÑÑÑ Ð²Ð²ÐµÐŽÐžÑÐµ ÐºÐŸÐŒÐ°ÐœÐŽÑ Ð¿ÐŸÐžÑÐºÐ° Ðž Ð¿ÐŸÑÐŒÐŸÑÑÐžÑÐµ, ÑÑÐŸ Ð¿ÐŸÐ»ÑÑÐžÑÑÑ:
++     /ÐžÐ³ÐœÐŸÑÐžÑÐŸÐ²Ð°ÑÑ
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				Ð ÐÐÐ®ÐÐ Ð£Ð ÐÐÐ 6
++
++
++  1. ÐÐ°Ð¶Ð°ÑÐžÐµ o ÑÐŸÐ·ÐŽÐ°ÐµÑ ÑÑÑÐŸÐºÑ ÐÐÐÐ ÐºÑÑÑÐŸÑÐ° Ðž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐºÑÑÑÐŸÑ Ð² ÐœÐµÐµ Ð² ÑÐµÐ¶ÐžÐŒÐµ
++     Ð²ÑÑÐ°Ð²ÐºÐž.
++     ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ O ÑÐŸÐ·ÐŽÐ°ÐµÑ ÑÑÑÐŸÐºÑ ÐÐ«ÐšÐ ÑÑÑÐŸÐºÐž, Ð² ÐºÐŸÑÐŸÑÐŸÐ¹ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ
++     ÐºÑÑÑÐŸÑ.
++
++  2. ÐÐ°Ð±ÐµÑÐžÑÐµ a ÐŽÐ»Ñ Ð²ÑÑÐ°Ð²ÐºÐž ÑÐµÐºÑÑÐ° ÐÐÐ¡ÐÐ ÑÐžÐŒÐ²ÐŸÐ»Ð°, ÐœÐ° ÐºÐŸÑÐŸÑÐŸÐŒ ÐœÐ°Ñ
+ÐŸÐŽÐžÑÑÑ ÐºÑÑÑÐŸÑ.
++     ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ A Ð°Ð²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐž Ð¿ÐµÑÐµÐŒÐµÑÐ°ÐµÑ ÐÐ°Ñ ÐŽÐ»Ñ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÐžÑ ÑÐµÐºÑÑÐ°
++     Ð² ÐºÐŸÐœÐµÑ ÑÑÑÐŸÐºÐž.
++
++  3. ÐÐ°Ð¶Ð°ÑÐžÐµ Ð·Ð°Ð³Ð»Ð°Ð²ÐœÐŸÐ¹ R Ð¿ÐµÑÐµÐ²ÐŸÐŽÐžÑ ÐÐ°Ñ Ð² ÑÐµÐ¶ÐžÐŒ Ð·Ð°ÐŒÐµÐœÑ ÐŽÐŸ ÑÐµÑ
+ Ð¿ÐŸÑ, Ð¿ÐŸÐºÐ° ÐœÐµ
++     Ð±ÑÐŽÐµÑ ÐœÐ°Ð¶Ð°ÑÐ° ÐºÐ»Ð°Ð²ÐžÑÐ° <ESC> ÐŽÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÑ.
++
++  4. ÐÐ°Ð±ÑÐ°Ð² ":set xxx" Ð²Ñ ÑÐŒÐŸÐ¶ÐµÑÐµ Ð²ÐºÐ»ÑÑÐžÑÑ Ð¿Ð°ÑÐ°ÐŒÐµÑÑ "xxx"
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		 Ð£ÑÐŸÐº 7: ÐÐÐÐÐÐÐ« ÐÐÐÐ£Ð§ÐÐÐÐ¯ ÐÐ¡Ð¢Ð ÐÐÐÐÐÐ Ð¡ÐÐ ÐÐÐÐ
++
++	       ** ÐÑÐ¿ÐŸÐ»ÑÐ·ÑÐ¹ÑÐµ Ð²ÑÑÑÐŸÐµÐœÐœÑÑ ÑÐ¿ÑÐ°Ð²ÐŸÑÐœÑÑ ÑÐžÑÑÐµÐŒÑ **
++
++  Vim ÐŸÐ±Ð»Ð°ÐŽÐ°ÐµÑ ÐŒÐŸÑÐœÐŸÐ¹ Ð²ÑÑÑÐŸÐµÐœÐœÐŸÐ¹ ÑÐ¿ÑÐ°Ð²ÐŸÑÐœÐŸÐ¹ ÑÐžÑÑÐµÐŒÐŸÐ¹. ÐÐ»Ñ ÐœÐ°ÑÐ°Ð»Ð° Ð¿ÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ
++  ÐŸÐŽÐžÐœ ÐžÐ· ÑÑÐµÑ
+ Ð²Ð°ÑÐžÐ°ÐœÑÐŸÐ²:
++	- ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <HELP> (ÐµÑÐ»Ðž ÑÐ°ÐºÐŸÐ²Ð°Ñ ÐžÐŒÐµÐµÑÑÑ ÐœÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÐµ)
++	- ÐœÐ°Ð¶ÐŒÐžÑÐµ ÐºÐ»Ð°Ð²ÐžÑÑ <F1> (ÐµÑÐ»Ðž ÑÐ°ÐºÐŸÐ²Ð°Ñ ÐžÐŒÐµÐµÑÑÑ ÐœÐ° ÐºÐ»Ð°Ð²ÐžÐ°ÑÑÑÐµ)
++	- ÐœÐ°Ð±ÐµÑÐžÑÐµ   :help <ENTER>
++
++  ÐÐ°Ð±ÐµÑÐžÑÐµ   :q <ENTER>   ÑÑÐŸÐ±Ñ Ð·Ð°ÐºÑÑÑÑ ÐŸÐºÐœÐŸ ÑÐ¿ÑÐ°Ð²ÐºÐž.
++
++  ÐÑ ÐŒÐŸÐ¶ÐµÑÐµ ÐœÐ°Ð¹ÑÐž ÑÐ¿ÑÐ°Ð²ÐºÑ ÐŽÐ»Ñ Ð»ÑÐ±ÐŸÐ³ÐŸ Ð¿ÐŸÐœÑÑÐžÑ ÐžÐ»Ðž ÐºÐŸÐŒÐ°ÐœÐŽÑ, Ð¿ÑÐŸÑÑÐŸ Ð·Ð°ÐŽÐ°Ð²
++  ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÑÑÑÐžÐ¹ Ð°ÑÐ³ÑÐŒÐµÐœÑ ÐºÐŸÐŒÐ°ÐœÐŽÐµ ":help". ÐÐŸÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ ÑÐ»ÐµÐŽÑÑÑÐµÐµ (ÐœÐµ Ð·Ð°Ð±ÑÐŽÑÑÐµ
++  ÐœÐ°Ð¶Ð°ÑÑ <ENTER>):
++
++  :help w
++  :help c_<T
++  :help insert-index
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     Ð£ÑÐŸÐº 8: Ð¡ÐÐÐÐÐÐÐ Ð¡Ð¢ÐÐ Ð¢ÐÐÐÐÐ Ð¡ÐÐ ÐÐÐ¢Ð
++
++			** ÐÐºÐ»ÑÑÐžÐŒ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐž Vim **
++
++  Vim ÐžÐŒÐµÐµÑ ÐœÐ°ÐŒÐœÐŸÐ³ÐŸ Ð±ÐŸÐ»ÑÑÐµ Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐµÐ¹, ÑÐµÐŒ Vi, ÐŸÐŽÐœÐ°ÐºÐŸ Ð±ÐŸÐ»ÑÑÐžÐœÑÑÐ²Ð°ÐŸ ÐžÐ· ÐœÐžÑ
+
++  Ð²ÑÐºÐ»ÑÑÐµÐœÑ Ð¿ÐŸ ÑÐŒÐŸÐ»ÑÐ°ÐœÐžÑ. ÐÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐœÐ°ÑÐ°ÑÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ ÐœÐŸÐ²ÑÐµ
++  Ð²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸÑÑÐž ÐÐ°ÐŒ ÑÐ»ÐµÐŽÑÐµÑ ÑÐŸÐ·ÐŽÐ°ÑÑ ÑÐ°Ð¹Ð» "vimrc".
++
++  1. ÐÑÑÐµÐŽÐ°ÐºÑÐžÑÑÐ¹ÑÐµ ÑÐ°Ð¹Ð» "vimrc", ÐµÐ³ÐŸ ÑÐ°ÑÐ¿ÐŸÐ»ÐŸÐ¶ÐµÐœÐžÐµ Ð·Ð°Ð²ÐžÑÐžÑ ÐŸÑ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÐŒÐŸÐ¹
++     ÑÐžÑÑÐµÐŒÑ:
++
++       :edit ~/.vimrc			ÐŽÐ»Ñ Unix
++       :edit $VIM/_vimrc		ÐŽÐ»Ñ MS-Windows
++
++  2. Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐŸÑÐžÑÐ°Ð¹ÑÐµ Ð¿ÑÐžÐŒÐµÑ ÑÐ°Ð¹Ð»Ð° "vimrc":
++
++       :read $VIMRUNTIME/vimrc_example.vim
++
++  3. ÐÐ°Ð¿ÐžÑÐžÑÐµ ÑÐ°Ð¹Ð»:
++
++       :write
++
++  Ð¢ÐµÐ¿ÐµÑÑ Ð¿ÑÐž ÑÐ»ÐµÐŽÑÑÑÐµÐŒ Ð·Ð°Ð¿ÑÑÐºÐµ Vim Ð±ÑÐŽÐµÑ Ð²ÐºÐ»ÑÑÐµÐœÐ° Ð¿ÐŸÐŽÑÐ²ÐµÑÐºÐ° ÑÐžÐœÑÐ°ÐºÑÐžÑÐ°. ÐÑÐµ
++  ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž, Ð¿ÑÐµÐŽÐ¿ÐŸÑÐžÑÐ°ÐµÐŒÑÐµ ÐÐ°ÐŒÐž, ÐŒÐŸÐ³ÑÑ Ð±ÑÑÑ ÐŽÐŸÐ±Ð°Ð²Ð»ÐµÐœÑ Ð² ÑÐ°Ð¹Ð» "vimrc".
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++  ÐÐ° ÑÑÐŸÐŒ Ð·Ð°Ð²ÐµÑÑÐ°ÐµÑÑÑ Ð£ÑÐµÐ±ÐœÐžÐº Vim. ÐÐœ Ð±ÑÐ» Ð¿ÑÐµÐŽÐœÐ°Ð·ÐœÐ°ÑÐµÐœ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÐŽÐ°ÑÑ
++  ÐŸÐ±ÑÐµÐµ Ð¿ÑÐµÐŽÑÑÐ°Ð²Ð»ÐµÐœÐžÐµ ÐŸ ÑÐµÐŽÐ°ÐºÑÐŸÑÐµ Vim, ÐŽÐŸÑÑÐ°ÑÐŸÑÐœÐŸÐµ ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ Ñ Ð»ÐµÐ³ÐºÐŸÑÑÑÑ
++  ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ ÐµÐ³ÐŸ. Ð£ÑÐµÐ±ÐœÐžÐº ÐŽÐ°Ð»ÐµÐº ÐŸÑ Ð¿ÐŸÐ»ÐœÐŸÑÑ, Ð¿ÐŸÑÐºÐŸÐ»ÑÐºÑ Vim ÐžÐŒÐµÐµÑ ÐŸÑÐµÐœÑ ÐŒÐœÐŸÐ³ÐŸ
++  ÐºÐŸÐŒÐ°ÐœÐŽ. ÐÑÐŸÑÐžÑÐ°Ð¹ÑÐµ ÑÐµÐ¿ÐµÑÑ ÑÑÐºÐŸÐ²ÐŸÐŽÑÑÐ²ÐŸ Ð¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÐµÐ»Ñ: ":help user-manual".
++
++  ÐÐ»Ñ ÐŽÐ°Ð»ÑÐœÐµÐ¹ÑÐµÐ³ÐŸ ÑÑÐµÐœÐžÑ ÑÐµÐºÐŸÐŒÐµÐœÐŽÑÐµÑÑÑ ÐºÐœÐžÐ³Ð°:
++	Vim - Vi Improved - ÐÐ²ÑÐŸÑ: Steve Oualline
++	ÐÐ·ÐŽÐ°ÑÐµÐ»Ñ: New Riders
++  Ð­ÑÐ° ÐºÐœÐžÐ³Ð° Ð¿ÐŸÐ»ÐœÐŸÑÑÑÑ Ð¿ÐŸÑÐ²ÑÑÐµÐœÐ° Vim. ÐÑÐŸÐ±ÐµÐœÐœÐŸ Ð¿ÐŸÐ»ÐµÐ·ÐœÐ° ÐœÐŸÐ²ÐžÑÐºÐ°ÐŒ. Ð¡ÐŸÐŽÐµÑÐ¶ÐžÑ
++  ÐŒÐœÐŸÐ¶ÐµÑÑÐ²ÐŸ Ð¿ÑÐžÐŒÐµÑÐŸÐ² Ðž ÐžÐ»Ð»ÑÑÑÑÐ°ÑÐžÐ¹.
++  ÐÐ·Ð³Ð»ÑÐœÐžÑÐµ ÐœÐ° See http://iccf-holland.org/click5.html
++
++  Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ ÐºÐœÐžÐ³Ð° Ð±ÐŸÐ»ÐµÐµ Ð¿ÐŸÑÑÐµÐœÐœÐŸÐ³ÐŸ Ð²ÐŸÐ·ÑÐ°ÑÑÐ° Ðž Ð¿ÐŸÑÐ²ÑÑÐµÐœÐ° Ð±ÐŸÐ»ÑÑÐµ Vi, ÑÐµÐŒ Vim,
++  ÐŸÐŽÐœÐ°ÐºÐŸ ÑÐ°ÐºÐ¶Ðµ ÑÐµÐºÐŸÐŒÐµÐœÐŽÑÐµÑÑÑ:
++	Learning the Vi Editor - ÐÐ²ÑÐŸÑ: Linda Lamb
++	ÐÐ·ÐŽÐ°ÑÐµÐ»Ñ: O'Reilly & Associates Inc.
++  Ð­ÑÐŸ Ñ
+ÐŸÑÐŸÑÐ°Ñ ÐºÐœÐžÐ³Ð° ÐŽÐ»Ñ ÑÐŸÐ³ÐŸ, ÑÑÐŸÐ±Ñ ÑÐ·ÐœÐ°ÑÑ Ð²ÑÐµ, ÑÑÐŸ ÑÐŸÐ»ÑÐºÐŸ ÐŒÐŸÐ¶ÐœÐŸ Ð¿ÑÐŸÐŽÐµÐ»ÑÐ²Ð°ÑÑ Ñ
++  Vi. ÐšÐµÑÑÐŸÐµ ÐžÐ·ÐŽÐ°ÐœÐžÐµ ÑÐ°ÐºÐ¶Ðµ Ð²ÐºÐ»ÑÑÐ°ÐµÑ ÐžÐœÑÐŸÑÐŒÐ°ÑÐžÑ ÐŸ Vim.
++
++  Ð­ÑÐŸÑ ÑÑÐµÐ±ÐœÐžÐº Ð±ÑÐ» ÐœÐ°Ð¿ÐžÑÐ°Ðœ Michael C. Pierce Ðž Robert K. Ware, Colorado School
++  of Mines Ñ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÐœÐžÐµÐŒ ÐžÐŽÐµÐ¹, Ð¿ÑÐµÐŽÐ»ÐŸÐ¶ÐµÐœÐœÑÑ
+ Charles Smith, Colorado State
++  University. E-mail: bware@mines.colorado.edu.
++
++  ÐÐŸÑÐ°Ð±ÐŸÑÐ°ÐœÐŸ ÐŽÐ»Ñ Vim Bram Moolenaar.
++
++  ÐÐµÑÐµÐ²ÐŸÐŽ: ÐÐœÐŽÑÐµÐ¹ ÐÐžÑÐµÐ»ÐµÐ² <a_kissel@eudoramail.com>, 2002.
++  Translator: Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim70.orig/runtime/tutor/tutor.vim vim70/runtime/tutor/tutor.vim
+--- vim70.orig/runtime/tutor/tutor.vim	2006-03-18 12:20:36.000000000 -0800
++++ vim70/runtime/tutor/tutor.vim	2006-10-21 21:09:04.000000000 -0700
+@@ -1,6 +1,6 @@
+ " Vim tutor support file
+ " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+-" Last Change:	2006 Mar 18
++" Last Change:	2006 Sep 09
+ 
+ " This small source file is used for detecting if a translation of the
+ " tutor file exist, i.e., a tutor.xx file, where xx is the language.
+@@ -93,9 +93,16 @@
+   endif
+ endif
+ 
+-" The Greek tutor is available in two encodings, guess which one to use
+-if s:ext =~? '\.gr' && &enc =~ 737
+-  let s:ext = ".gr.cp737"
++" The Greek tutor is available in three encodings, guess what to use.
++" We used ".gr" (Greece) instead of ".el" (Greek); accept both.
++if s:ext =~? '\.gr\|\.el'
++  if &enc == "iso-8859-7"
++    let s:ext = ".gr"
++  elseif &enc == "utf-8"
++    let s:ext = ".gr.utf-8"
++  elseif &enc =~ 737
++    let s:ext = ".gr.cp737"
++  endif
+ endif
+ 
+ " The Slovak tutor is available in two encodings, guess which one to use
+@@ -103,11 +110,15 @@
+   let s:ext = ".sk.cp1250"
+ endif
+ 
+-" The Russian tutor is available in two encodings, guess which one to use.
+-" This segment is from the above lines and modified by
+-" Alexey I. Froloff <raorn@altlinux.org> for Russian vim tutorial
+-if s:ext =~? '\.ru' && &enc =~ 1251
+-  let s:ext = ".ru.cp1251"
++" The Russian tutor is available in three encodings, guess which one to use.
++if s:ext =~? '\.ru'
++  if &enc == 'utf-8'
++    let s:ext = '.ru.utf-8'
++  elseif &enc =~ '1251'
++    let s:ext = '.ru.cp1251'
++  elseif &enc =~ 'koi8'
++    let s:ext = '.ru'
++  endif
+ endif
+ 
+ " Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch).
+diff -Naur vim70.orig/src/auto/configure vim70/src/auto/configure
+--- vim70.orig/src/auto/configure	2006-05-04 03:46:19.000000000 -0700
++++ vim70/src/auto/configure	2006-10-21 21:09:10.000000000 -0700
+@@ -4014,7 +4014,7 @@
+       LDFLAGS=$ldflags_save
+       if test $perl_ok = yes; then
+ 	if test "X$perlcppflags" != "X"; then
+-	  PERL_CFLAGS="$perlcppflags"
++	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
+ 	fi
+ 	if test "X$perlldflags" != "X"; then
+ 	  LDFLAGS="$perlldflags $LDFLAGS"
+@@ -4256,7 +4256,7 @@
+ echo $ECHO_N "checking if -pthread should be used... $ECHO_C" >&6
+ 	threadsafe_flag=
+ 	thread_lib=
+-	if test "x$MACOSX" != "xyes"; then
++	        if test "`(uname) 2>/dev/null`" != Darwin; then
+ 	  test "$GCC" = yes && threadsafe_flag="-pthread"
+ 	  if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ 	    threadsafe_flag="-D_THREAD_SAFE"
+@@ -11555,8 +11555,8 @@
+ else
+   echo "$as_me:$LINENO: result: empty: automatic terminal library selection" >&5
+ echo "${ECHO_T}empty: automatic terminal library selection" >&6
+-            case "`uname -s 2>/dev/null`" in
+-	OSF1)	tlibs="ncurses curses termlib termcap";;
++              case "`uname -s 2>/dev/null`" in
++	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
+ 	*)	tlibs="ncurses termlib termcap curses";;
+   esac
+   for libname in $tlibs; do
+@@ -15302,7 +15302,7 @@
+ 	&& test "x$GUITYPE" != "xCARBONGUI"; then
+   echo "$as_me:$LINENO: checking whether we need -framework Carbon" >&5
+ echo $ECHO_N "checking whether we need -framework Carbon... $ECHO_C" >&6
+-    if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
++    if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
+ 	|| test "x$features" = "xhuge"; then
+     LIBS="$LIBS -framework Carbon"
+     echo "$as_me:$LINENO: result: yes" >&5
+diff -Naur vim70.orig/src/buffer.c vim70/src/buffer.c
+--- vim70.orig/src/buffer.c	2006-04-26 14:37:23.000000000 -0700
++++ vim70/src/buffer.c	2006-10-21 21:09:11.000000000 -0700
+@@ -434,12 +434,8 @@
+     if (usingNetbeans)
+ 	netbeans_file_closed(buf);
+ #endif
+-#ifdef FEAT_AUTOCHDIR
+-    /* Change directories when the acd option is set on. */
+-    if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	shorten_fnames(TRUE);
+-#endif
++    /* Change directories when the 'acd' option is set. */
++    DO_AUTOCHDIR
+ 
+     /*
+      * Remove the buffer from the list.
+@@ -1212,11 +1208,11 @@
+     {
+ # ifdef FEAT_WINDOWS
+ 	/* jump to first window containing buf if one exists ("useopen") */
+-	if (vim_strchr(p_swb, 'o') && buf_jump_open_win(buf))
++	if (vim_strchr(p_swb, 'o') != NULL && buf_jump_open_win(buf))
+ 	    return OK;
+ 	/* jump to first window in any tab page containing buf if one exists
+ 	 * ("usetab") */
+-	if (vim_strchr(p_swb, 'a') && buf_jump_open_tab(buf))
++	if (vim_strchr(p_swb, 'a') != NULL && buf_jump_open_tab(buf))
+ 	    return OK;
+ 	if (win_split(0, 0) == FAIL)
+ # endif
+@@ -1390,7 +1386,8 @@
+     }
+     else
+     {
+-	need_fileinfo = TRUE;		/* display file info after redraw */
++	if (!msg_silent)
++	    need_fileinfo = TRUE;	/* display file info after redraw */
+ 	(void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
+ #ifdef FEAT_AUTOCMD
+ 	curwin->w_topline = 1;
+@@ -1422,12 +1419,8 @@
+ 	netbeans_file_activated(curbuf);
+ #endif
+ 
+-#ifdef FEAT_AUTOCHDIR
+-    /* Change directories when the acd option is set on. */
+-    if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	shorten_fnames(TRUE);
+-#endif
++    /* Change directories when the 'acd' option is set. */
++    DO_AUTOCHDIR
+ 
+ #ifdef FEAT_KEYMAP
+     if (curbuf->b_kmap_state & KEYMAP_INIT)
+@@ -1436,6 +1429,18 @@
+     redraw_later(NOT_VALID);
+ }
+ 
++#if defined(FEAT_AUTOCHDIR) || defined(PROTO)
++/*
++ * Change to the directory of the current buffer.
++ */
++    void
++do_autochdir()
++{
++    if (curbuf->b_ffname != NULL && vim_chdirfile(curbuf->b_ffname) == OK)
++	shorten_fnames(TRUE);
++}
++#endif
++
+ /*
+  * functions for dealing with the buffer list
+  */
+@@ -1837,13 +1842,13 @@
+     if (options & GETF_SWITCH)
+     {
+ 	/* use existing open window for buffer if wanted */
+-	if (vim_strchr(p_swb, 'o'))     /* useopen */
++	if (vim_strchr(p_swb, 'o') != NULL)	/* useopen */
+ 	    wp = buf_jump_open_win(buf);
+ 	/* use existing open window in any tab page for buffer if wanted */
+-	if (vim_strchr(p_swb, 'a'))     /* usetab */
++	if (vim_strchr(p_swb, 'a') != NULL)	/* usetab */
+ 	    wp = buf_jump_open_tab(buf);
+ 	/* split window if wanted ("split") */
+-	if (wp == NULL && vim_strchr(p_swb, 't') && !bufempty())
++	if (wp == NULL && vim_strchr(p_swb, 'l') != NULL && !bufempty())
+ 	{
+ 	    if (win_split(0, 0) == FAIL)
+ 		return FAIL;
+@@ -3324,7 +3329,7 @@
+     {
+ 	usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
+ 	if (usefmt == NULL)
+-	    usefmt = (char_u *)"";
++	    usefmt = fmt;
+     }
+ #endif
+ 
+@@ -5420,11 +5425,7 @@
+     buf_T	*newbuf;
+     int		differ = TRUE;
+     linenr_T	lnum;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*old_curbuf = curbuf;
+-#endif
+     exarg_T	ea;
+ 
+     /* Allocate a buffer without putting it in the buffer list. */
+@@ -5439,13 +5440,8 @@
+ 	return TRUE;
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* set curwin/curbuf to buf and save a few things */
+     aucmd_prepbuf(&aco, newbuf);
+-#else
+-    curbuf = newbuf;
+-    curwin->w_buffer = newbuf;
+-#endif
+ 
+     if (ml_open(curbuf) == OK
+ 	    && readfile(buf->b_ffname, buf->b_fname,
+@@ -5466,13 +5462,8 @@
+     }
+     vim_free(ea.cmd);
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+-#else
+-    curbuf = old_curbuf;
+-    curwin->w_buffer = old_curbuf;
+-#endif
+ 
+     if (curbuf != newbuf)	/* safety check */
+ 	wipe_buffer(newbuf, FALSE);
+diff -Naur vim70.orig/src/configure vim70/src/configure
+--- vim70.orig/src/configure	2006-05-07 07:17:49.000000000 -0700
++++ vim70/src/configure	2006-10-21 21:08:54.000000000 -0700
+@@ -2,5 +2,9 @@
+ # run the automatically generated configure script
+ CONFIG_STATUS=auto/config.status \
+ 	auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
++result=$?
++
+ # Stupid autoconf 2.5x causes this file to be left behind.
+ if test -f configure.lineno; then rm -f configure.lineno; fi
++
++exit $result
+diff -Naur vim70.orig/src/configure.in vim70/src/configure.in
+--- vim70.orig/src/configure.in	2006-05-04 03:46:11.000000000 -0700
++++ vim70/src/configure.in	2006-10-21 21:09:10.000000000 -0700
+@@ -508,7 +508,8 @@
+       LDFLAGS=$ldflags_save
+       if test $perl_ok = yes; then
+ 	if test "X$perlcppflags" != "X"; then
+-	  PERL_CFLAGS="$perlcppflags"
++	  dnl remove -pipe, it confuses cproto
++	  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
+ 	fi
+ 	if test "X$perlldflags" != "X"; then
+ 	  LDFLAGS="$perlldflags $LDFLAGS"
+@@ -680,7 +681,8 @@
+ 	AC_MSG_CHECKING([if -pthread should be used])
+ 	threadsafe_flag=
+ 	thread_lib=
+-	if test "x$MACOSX" != "xyes"; then
++	dnl if test "x$MACOSX" != "xyes"; then
++        if test "`(uname) 2>/dev/null`" != Darwin; then
+ 	  test "$GCC" = yes && threadsafe_flag="-pthread"
+ 	  if test "`(uname) 2>/dev/null`" = FreeBSD; then
+ 	    threadsafe_flag="-D_THREAD_SAFE"
+@@ -2150,8 +2152,9 @@
+   dnl  Newer versions of ncurses are preferred over anything.
+   dnl  Older versions of ncurses have bugs, get a new one!
+   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
++  dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
+   case "`uname -s 2>/dev/null`" in
+-	OSF1)	tlibs="ncurses curses termlib termcap";;
++	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
+ 	*)	tlibs="ncurses termlib termcap curses";;
+   esac
+   for libname in $tlibs; do
+@@ -2835,7 +2838,7 @@
+ 	&& test "x$GUITYPE" != "xCARBONGUI"; then
+   AC_MSG_CHECKING(whether we need -framework Carbon)
+   dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE
+-  if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \
++  if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \
+ 	|| test "x$features" = "xhuge"; then
+     LIBS="$LIBS -framework Carbon"
+     AC_MSG_RESULT(yes)
+diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
+--- vim70.orig/src/edit.c	2006-05-07 04:48:51.000000000 -0700
++++ vim70/src/edit.c	2006-10-21 21:09:10.000000000 -0700
+@@ -129,7 +129,7 @@
+ 
+ static void ins_ctrl_x __ARGS((void));
+ static int  has_compl_option __ARGS((int dict_opt));
+-static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int dup));
++static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup));
+ static int  ins_compl_equal __ARGS((compl_T *match, char_u *str, int len));
+ static void ins_compl_longest_match __ARGS((compl_T *match));
+ static void ins_compl_add_matches __ARGS((int num_matches, char_u **matches, int icase));
+@@ -707,6 +707,11 @@
+ 	lastc = c;			/* remember previous char for CTRL-D */
+ 	c = safe_vgetc();
+ 
++#ifdef FEAT_AUTOCMD
++	/* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */
++	did_cursorhold = TRUE;
++#endif
++
+ #ifdef FEAT_RIGHTLEFT
+ 	if (p_hkmap && KeyTyped)
+ 	    c = hkmap(c);		/* Hebrew mode mapping */
+@@ -719,9 +724,14 @@
+ #ifdef FEAT_INS_EXPAND
+ 	/*
+ 	 * Special handling of keys while the popup menu is visible or wanted
+-	 * and the cursor is still in the completed word.
++	 * and the cursor is still in the completed word.  Only when there is
++	 * a match, skip this when no matches were found.
+ 	 */
+-	if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
++	if (compl_started
++		&& pum_wanted()
++		&& curwin->w_cursor.col >= compl_col
++		&& (compl_shown_match == NULL
++		    || compl_shown_match != compl_shown_match->cp_next))
+ 	{
+ 	    /* BS: Delete one character from "compl_leader". */
+ 	    if ((c == K_BS || c == Ctrl_H)
+@@ -751,7 +761,7 @@
+ 		    continue;
+ 		}
+ 
+-		/* Pressing CTRL-Y selects the current match.  Shen
++		/* Pressing CTRL-Y selects the current match.  When
+ 		 * compl_enter_selects is set the Enter key does the same. */
+ 		if (c == Ctrl_Y || (compl_enter_selects
+ 				   && (c == CAR || c == K_KENTER || c == NL)))
+@@ -877,6 +887,7 @@
+ 		/* Close the cmdline window. */
+ 		cmdwin_result = K_IGNORE;
+ 		got_int = FALSE; /* don't stop executing autocommands et al. */
++		nomove = TRUE;
+ 		goto doESCkey;
+ 	    }
+ #endif
+@@ -912,6 +923,7 @@
+ 		if (cmdchar != 'r' && cmdchar != 'v')
+ 		    apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL,
+ 							       FALSE, curbuf);
++		did_cursorhold = FALSE;
+ #endif
+ 		return (c == Ctrl_O);
+ 	    }
+@@ -1383,6 +1395,12 @@
+ 	    break;
+ 	}   /* end of switch (c) */
+ 
++#ifdef FEAT_AUTOCMD
++	/* If typed something may trigger CursorHoldI again. */
++	if (c != K_CURSORHOLD)
++	    did_cursorhold = FALSE;
++#endif
++
+ 	/* If the cursor was moved we didn't just insert a space */
+ 	if (arrow_used)
+ 	    inserted_space = FALSE;
+@@ -2112,7 +2130,7 @@
+  * maybe because alloc() returns NULL, then FAIL is returned.
+  */
+     static int
+-ins_compl_add(str, len, icase, fname, cptext, cdir, flags, dup)
++ins_compl_add(str, len, icase, fname, cptext, cdir, flags, adup)
+     char_u	*str;
+     int		len;
+     int		icase;
+@@ -2120,7 +2138,7 @@
+     char_u	**cptext;   /* extra text for popup menu or NULL */
+     int		cdir;
+     int		flags;
+-    int		dup;	    /* accept duplicate match */
++    int		adup;	    /* accept duplicate match */
+ {
+     compl_T	*match;
+     int		dir = (cdir == 0 ? compl_direction : cdir);
+@@ -2134,13 +2152,13 @@
+     /*
+      * If the same match is already present, don't add it.
+      */
+-    if (compl_first_match != NULL && !dup)
++    if (compl_first_match != NULL && !adup)
+     {
+ 	match = compl_first_match;
+ 	do
+ 	{
+ 	    if (    !(match->cp_flags & ORIGINAL_TEXT)
+-		    && ins_compl_equal(match, str, len)
++		    && STRNCMP(match->cp_str, str, len) == 0
+ 		    && match->cp_str[len] == NUL)
+ 		return NOTDONE;
+ 	    match = match->cp_next;
+@@ -2399,7 +2417,7 @@
+     /* compl_pattern doesn't need to be set */
+     compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
+     if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
+-			-1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
++			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
+ 	return;
+ 
+     /* Handle like dictionary completion. */
+@@ -2409,6 +2427,7 @@
+     compl_matches = ins_compl_make_cyclic();
+     compl_started = TRUE;
+     compl_used_match = TRUE;
++    compl_cont_status = 0;
+ 
+     compl_curr_match = compl_first_match;
+     ins_complete(Ctrl_N);
+@@ -2753,6 +2772,7 @@
+ 	}
+ 	else
+ # endif
++	    if (count > 0)	/* avoid warning for using "files" uninit */
+ 	{
+ 	    ins_compl_files(count, files, thesaurus, flags,
+ 							&regmatch, buf, &dir);
+@@ -2813,7 +2833,7 @@
+ 			ptr = find_word_end(ptr);
+ 		    add_r = ins_compl_add_infercase(regmatch->startp[0],
+ 					  (int)(ptr - regmatch->startp[0]),
+-						     FALSE, files[i], *dir, 0);
++						     p_ic, files[i], *dir, 0);
+ 		    if (thesaurus)
+ 		    {
+ 			char_u *wstart;
+@@ -2849,7 +2869,7 @@
+ 				ptr = find_word_end(ptr);
+ 			    add_r = ins_compl_add_infercase(wstart,
+ 				    (int)(ptr - wstart),
+-				    FALSE, files[i], *dir, 0);
++				    p_ic, files[i], *dir, 0);
+ 			}
+ 		    }
+ 		    if (add_r == OK)
+@@ -3015,9 +3035,6 @@
+     if ((int)(p - line) - (int)compl_col <= 0)
+ 	return K_BS;
+ 
+-    /* For redo we need to repeat this backspace. */
+-    AppendCharToRedobuff(K_BS);
+-
+     /* Deleted more than what was used to find matches or didn't finish
+      * finding all matches: need to look for matches all over again. */
+     if (curwin->w_cursor.col <= compl_col + compl_length
+@@ -3046,7 +3063,6 @@
+     ins_compl_delete();
+     ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
+     compl_used_match = FALSE;
+-    compl_enter_selects = FALSE;
+ 
+     if (compl_started)
+ 	ins_compl_set_original_text(compl_leader);
+@@ -3076,6 +3092,7 @@
+ 	compl_restarting = FALSE;
+     }
+ 
++#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
+     if (!compl_used_match)
+     {
+ 	/* Go to the original text, since none of the matches is inserted. */
+@@ -3087,9 +3104,15 @@
+ 	compl_curr_match = compl_shown_match;
+ 	compl_shows_dir = compl_direction;
+     }
++#endif
++    compl_enter_selects = !compl_used_match;
+ 
+     /* Show the popup menu with a different set of matches. */
+     ins_compl_show_pum();
++
++    /* Don't let Enter select the original text when there is no popup menu. */
++    if (compl_match_array == NULL)
++	compl_enter_selects = FALSE;
+ }
+ 
+ /*
+@@ -3115,10 +3138,6 @@
+ #endif
+ 	ins_char(c);
+ 
+-    /* For redo we need to count this character so that the number of
+-     * backspaces is correct. */
+-    AppendCharToRedobuff(c);
+-
+     /* If we didn't complete finding matches we must search again. */
+     if (compl_was_interrupted)
+ 	ins_compl_restart();
+@@ -3175,10 +3194,33 @@
+     char_u	*p;
+     int		len = curwin->w_cursor.col - compl_col;
+     int		c;
++    compl_T	*cp;
+ 
+     p = compl_shown_match->cp_str;
+     if ((int)STRLEN(p) <= len)   /* the match is too short */
+-	return;
++    {
++	/* When still at the original match use the first entry that matches
++	 * the leader. */
++	if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
++	{
++	    p = NULL;
++	    for (cp = compl_shown_match->cp_next; cp != NULL
++				 && cp != compl_first_match; cp = cp->cp_next)
++	    {
++		if (compl_leader == NULL
++			|| ins_compl_equal(cp, compl_leader,
++						   (int)STRLEN(compl_leader)))
++		{
++		    p = cp->cp_str;
++		    break;
++		}
++	    }
++	    if (p == NULL || (int)STRLEN(p) <= len)
++		return;
++	}
++	else
++	    return;
++    }
+     p += len;
+ #ifdef FEAT_MBYTE
+     c = mb_ptr2char(p);
+@@ -3198,7 +3240,6 @@
+     int	    c;
+ {
+     char_u	*ptr;
+-    int		temp;
+     int		want_cindent;
+     int		retval = FALSE;
+ 
+@@ -3354,6 +3395,7 @@
+ 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
+ 	    {
+ 		char_u	*p;
++		int	temp = 0;
+ 
+ 		/*
+ 		 * If any of the original typed text has been changed, eg when
+@@ -3369,16 +3411,21 @@
+ 		    ptr = compl_leader;
+ 		else
+ 		    ptr = compl_orig_text;
+-		p = compl_orig_text;
+-		for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
+-		    ;
++		if (compl_orig_text != NULL)
++		{
++		    p = compl_orig_text;
++		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
++								       ++temp)
++			;
+ #ifdef FEAT_MBYTE
+-		if (temp > 0)
+-		    temp -= (*mb_head_off)(compl_orig_text, p + temp);
++		    if (temp > 0)
++			temp -= (*mb_head_off)(compl_orig_text, p + temp);
+ #endif
+-		for (p += temp; *p != NUL; mb_ptr_adv(p))
+-		    AppendCharToRedobuff(K_BS);
+-		AppendToRedobuffLit(ptr + temp, -1);
++		    for (p += temp; *p != NUL; mb_ptr_adv(p))
++			AppendCharToRedobuff(K_BS);
++		}
++		if (ptr != NULL)
++		    AppendToRedobuffLit(ptr + temp, -1);
+ 	    }
+ 
+ #ifdef FEAT_CINDENT
+@@ -3578,7 +3625,7 @@
+ {
+     char_u	*word;
+     int		icase = FALSE;
+-    int		dup = FALSE;
++    int		adup = FALSE;
+     char_u	*(cptext[CPT_COUNT]);
+ 
+     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
+@@ -3595,7 +3642,7 @@
+ 	if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
+ 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
+ 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
+-	    dup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
++	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
+     }
+     else
+     {
+@@ -3604,7 +3651,7 @@
+     }
+     if (word == NULL || *word == NUL)
+ 	return FAIL;
+-    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, dup);
++    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
+ }
+ #endif
+ 
+@@ -3796,7 +3843,7 @@
+ 		    TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0),
+ 		    TAG_MANY, curbuf->b_ffname) == OK && num_matches > 0)
+ 	    {
+-		ins_compl_add_matches(num_matches, matches, FALSE);
++		ins_compl_add_matches(num_matches, matches, p_ic);
+ 	    }
+ 	    p_ic = save_p_ic;
+ 	    break;
+@@ -3837,7 +3884,7 @@
+ 	    num_matches = expand_spelling(first_match_pos.lnum,
+ 				 first_match_pos.col, compl_pattern, &matches);
+ 	    if (num_matches > 0)
+-		ins_compl_add_matches(num_matches, matches, FALSE);
++		ins_compl_add_matches(num_matches, matches, p_ic);
+ #endif
+ 	    break;
+ 
+@@ -3862,6 +3909,8 @@
+ 	    {
+ 		int	flags = 0;
+ 
++		++msg_silent;  /* Don't want messages for wrapscan. */
++
+ 		/* ctrl_x_mode == CTRL_X_WHOLE_LINE || word-wise search that
+ 		 * has added a word that was at the beginning of the line */
+ 		if (	ctrl_x_mode == CTRL_X_WHOLE_LINE
+@@ -3873,6 +3922,7 @@
+ 							      compl_direction,
+ 				 compl_pattern, 1L, SEARCH_KEEP + SEARCH_NFMSG,
+ 							RE_LAST, (linenr_T)0);
++		--msg_silent;
+ 		if (!compl_started)
+ 		{
+ 		    /* set "compl_started" even on fail */
+@@ -3971,7 +4021,7 @@
+ 			    continue;
+ 		    }
+ 		}
+-		if (ins_compl_add_infercase(ptr, len, FALSE,
++		if (ins_compl_add_infercase(ptr, len, p_ic,
+ 				 ins_buf == curbuf ? NULL : ins_buf->b_sfname,
+ 					   0, flags) != NOTDONE)
+ 		{
+@@ -3996,7 +4046,7 @@
+ 	    if (got_int)
+ 		break;
+ 	    /* Fill the popup menu as soon as possible. */
+-	    if (pum_wanted() && type != -1)
++	    if (type != -1)
+ 		ins_compl_check_keys(0);
+ 
+ 	    if ((ctrl_x_mode != 0 && ctrl_x_mode != CTRL_X_WHOLE_LINE)
+@@ -4100,6 +4150,21 @@
+ 		&& compl_shown_match->cp_next != NULL
+ 		&& compl_shown_match->cp_next != compl_first_match)
+ 	    compl_shown_match = compl_shown_match->cp_next;
++
++	/* If we didn't find it searching forward, and compl_shows_dir is
++	 * backward, find the last match. */
++	if (compl_shows_dir == BACKWARD
++		&& !ins_compl_equal(compl_shown_match,
++				      compl_leader, (int)STRLEN(compl_leader))
++		&& (compl_shown_match->cp_next == NULL
++		    || compl_shown_match->cp_next == compl_first_match))
++	{
++	    while (!ins_compl_equal(compl_shown_match,
++				      compl_leader, (int)STRLEN(compl_leader))
++		    && compl_shown_match->cp_prev != NULL
++		    && compl_shown_match->cp_prev != compl_first_match)
++		compl_shown_match = compl_shown_match->cp_prev;
++	}
+     }
+ 
+     if (allow_get_expansion && insert_match
+@@ -4124,8 +4189,6 @@
+     {
+ 	if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
+ 	{
+-	    if (compl_pending != 0)
+-		--compl_pending;
+ 	    compl_shown_match = compl_shown_match->cp_next;
+ 	    found_end = (compl_first_match != NULL
+ 			   && (compl_shown_match->cp_next == compl_first_match
+@@ -4134,14 +4197,24 @@
+ 	else if (compl_shows_dir == BACKWARD
+ 					&& compl_shown_match->cp_prev != NULL)
+ 	{
+-	    if (compl_pending != 0)
+-		++compl_pending;
+ 	    found_end = (compl_shown_match == compl_first_match);
+ 	    compl_shown_match = compl_shown_match->cp_prev;
+ 	    found_end |= (compl_shown_match == compl_first_match);
+ 	}
+ 	else
+ 	{
++	    if (!allow_get_expansion)
++	    {
++		if (advance)
++		{
++		    if (compl_shows_dir == BACKWARD)
++			compl_pending -= todo + 1;
++		    else
++			compl_pending += todo + 1;
++		}
++		return -1;
++	    }
++
+ 	    if (advance)
+ 	    {
+ 		if (compl_shows_dir == BACKWARD)
+@@ -4149,14 +4222,27 @@
+ 		else
+ 		    ++compl_pending;
+ 	    }
+-	    if (!allow_get_expansion)
+-		return -1;
+ 
+ 	    /* Find matches. */
+ 	    num_matches = ins_compl_get_exp(&compl_startpos);
+-	    if (compl_pending != 0 && compl_direction == compl_shows_dir
++
++	    /* handle any pending completions */
++	    while (compl_pending != 0 && compl_direction == compl_shows_dir
+ 								   && advance)
+-		compl_shown_match = compl_curr_match;
++	    {
++		if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
++		{
++		    compl_shown_match = compl_shown_match->cp_next;
++		    --compl_pending;
++		}
++		if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
++		{
++		    compl_shown_match = compl_shown_match->cp_prev;
++		    ++compl_pending;
++		}
++		else
++		    break;
++	    }
+ 	    found_end = FALSE;
+ 	}
+ 	if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
+@@ -4265,9 +4351,9 @@
+ 	return;
+     count = 0;
+ 
+-    ++no_mapping;
++    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
++     * can't do its work correctly. */
+     c = vpeekc_any();
+-    --no_mapping;
+     if (c != NUL)
+     {
+ 	if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
+@@ -4277,12 +4363,27 @@
+ 	    (void)ins_compl_next(FALSE, ins_compl_key2count(c),
+ 						    c != K_UP && c != K_DOWN);
+ 	}
+-	else if (c != Ctrl_R)
+-	    compl_interrupted = TRUE;
++	else
++	{
++	    /* Need to get the character to have KeyTyped set.  We'll put it
++	     * back with vungetc() below. */
++	    c = safe_vgetc();
++
++	    /* Don't interrupt completion when the character wasn't typed,
++	     * e.g., when doing @q to replay keys. */
++	    if (c != Ctrl_R && KeyTyped)
++		compl_interrupted = TRUE;
++
++	    vungetc(c);
++	}
+     }
+     if (compl_pending != 0 && !got_int)
+-	(void)ins_compl_next(FALSE, compl_pending > 0
+-				      ? compl_pending : -compl_pending, TRUE);
++    {
++	int todo = compl_pending > 0 ? compl_pending : -compl_pending;
++
++	compl_pending = 0;
++	(void)ins_compl_next(FALSE, todo, TRUE);
++    }
+ }
+ 
+ /*
+@@ -4611,10 +4712,12 @@
+ 				     (int)STRLEN(compl_pattern), curs_col);
+ 	    if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
+ 		    || compl_xp.xp_context == EXPAND_NOTHING)
+-		return FAIL;
+-	    startcol = (int)(compl_xp.xp_pattern - compl_pattern);
+-	    compl_col = startcol;
+-	    compl_length = curs_col - startcol;
++		/* No completion possible, use an empty pattern to get a
++		 * "pattern not found" message. */
++		compl_col = curs_col;
++	    else
++		compl_col = (int)(compl_xp.xp_pattern - compl_pattern);
++	    compl_length = curs_col - compl_col;
+ 	}
+ 	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+ 	{
+@@ -4668,11 +4771,17 @@
+ 	    else
+ 		compl_col = spell_word_start(startcol);
+ 	    if (compl_col >= (colnr_T)startcol)
+-		return FAIL;
+-	    spell_expand_check_cap(compl_col);
++	    {
++		compl_length = 0;
++		compl_col = curs_col;
++	    }
++	    else
++	    {
++		spell_expand_check_cap(compl_col);
++		compl_length = (int)curs_col - compl_col;
++	    }
+ 	    /* Need to obtain "line" again, it may have become invalid. */
+ 	    line = ml_get(curwin->w_cursor.lnum);
+-	    compl_length = (int)curs_col - compl_col;
+ 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
+ 	    if (compl_pattern == NULL)
+ #endif
+@@ -4720,7 +4829,7 @@
+ 	vim_free(compl_orig_text);
+ 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
+ 	if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
+-			-1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
++			-1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
+ 	{
+ 	    vim_free(compl_pattern);
+ 	    compl_pattern = NULL;
+@@ -5227,8 +5336,16 @@
+ 	/* Format with 'formatexpr' when it's set.  Use internal formatting
+ 	 * when 'formatexpr' isn't set or it returns non-zero. */
+ #if defined(FEAT_EVAL)
+-	if (*curbuf->b_p_fex == NUL
+-			     || fex_format(curwin->w_cursor.lnum, 1L, c) != 0)
++	int do_internal = TRUE;
++
++	if (*curbuf->b_p_fex != NUL)
++	{
++	    do_internal = (fex_format(curwin->w_cursor.lnum, 1L, c) != 0);
++	    /* It may be required to save for undo again, e.g. when setline()
++	     * was called. */
++	    ins_need_undo = TRUE;
++	}
++	if (do_internal)
+ #endif
+ 	    internal_format(textwidth, second_indent, flags, c == NUL);
+     }
+@@ -8508,7 +8625,12 @@
+     tpos = curwin->w_cursor;
+     if (oneleft() == OK)
+     {
+-	start_arrow(&tpos);
++#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
++	/* Only call start_arrow() when not busy with preediting, it will
++	 * break undo.  K_LEFT is inserted in im_correct_cursor(). */
++	if (!im_is_preediting())
++#endif
++	    start_arrow(&tpos);
+ #ifdef FEAT_RIGHTLEFT
+ 	/* If exit reversed string, position is fixed */
+ 	if (revins_scol != -1 && (int)curwin->w_cursor.col >= revins_scol)
+@@ -8700,7 +8822,11 @@
+     if (mod_mask & MOD_MASK_CTRL)
+     {
+ 	/* <C-PageUp>: tab page back */
+-	goto_tabpage(-1);
++	if (first_tabpage->tp_next != NULL)
++	{
++	    start_arrow(&curwin->w_cursor);
++	    goto_tabpage(-1);
++	}
+ 	return;
+     }
+ #endif
+@@ -8759,7 +8885,11 @@
+     if (mod_mask & MOD_MASK_CTRL)
+     {
+ 	/* <C-PageDown>: tab page forward */
+-	goto_tabpage(0);
++	if (first_tabpage->tp_next != NULL)
++	{
++	    start_arrow(&curwin->w_cursor);
++	    goto_tabpage(0);
++	}
+ 	return;
+     }
+ #endif
+diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
+--- vim70.orig/src/eval.c	2006-05-05 10:15:26.000000000 -0700
++++ vim70/src/eval.c	2006-10-21 21:09:11.000000000 -0700
+@@ -191,8 +191,6 @@
+ #define FC_RANGE    2		/* function accepts range */
+ #define FC_DICT	    4		/* Dict function, uses "self" */
+ 
+-#define DEL_REFCOUNT	999999	/* list/dict is being deleted */
+-
+ /*
+  * All user-defined functions are found in this hashtable.
+  */
+@@ -435,7 +433,7 @@
+ static void set_ref_in_list __ARGS((list_T *l, int copyID));
+ static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static void dict_unref __ARGS((dict_T *d));
+-static void dict_free __ARGS((dict_T *d));
++static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+@@ -454,7 +452,7 @@
+ static char_u *deref_func_name __ARGS((char_u *name, int *lenp));
+ static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
+ static int call_func __ARGS((char_u *name, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
+-static void emsg_funcname __ARGS((char *msg, char_u *name));
++static void emsg_funcname __ARGS((char *ermsg, char_u *name));
+ 
+ static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -622,6 +620,7 @@
+ static void f_setreg __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_sort __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_soundfold __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -701,6 +700,7 @@
+ static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string));
+ static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
+ static int var_check_ro __ARGS((int flags, char_u *name));
++static int var_check_fixed __ARGS((int flags, char_u *name));
+ static int tv_check_lock __ARGS((int lock, char_u *name));
+ static void copy_tv __ARGS((typval_T *from, typval_T *to));
+ static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
+@@ -2260,7 +2260,7 @@
+ 	    EMSG(_(e_letunexp));
+ 	else
+ 	{
+-	    char_u	*tofree = NULL;
++	    char_u	*ptofree = NULL;
+ 	    char_u	*s;
+ 
+ 	    p = get_tv_string_chk(tv);
+@@ -2269,7 +2269,7 @@
+ 		s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE);
+ 		if (s != NULL)
+ 		{
+-		    p = tofree = concat_str(s, p);
++		    p = ptofree = concat_str(s, p);
+ 		    vim_free(s);
+ 		}
+ 	    }
+@@ -2278,7 +2278,7 @@
+ 		write_reg_contents(*arg == '@' ? '"' : *arg, p, -1, FALSE);
+ 		arg_end = arg + 1;
+ 	    }
+-	    vim_free(tofree);
++	    vim_free(ptofree);
+ 	}
+     }
+ 
+@@ -3364,6 +3364,8 @@
+ 	hi = hash_find(ht, varname);
+ 	if (!HASHITEM_EMPTY(hi))
+ 	{
++	    if (var_check_fixed(HI2DI(hi)->di_flags, name))
++		return FAIL;
+ 	    if (var_check_ro(HI2DI(hi)->di_flags, name))
+ 		return FAIL;
+ 	    delete_var(ht, hi);
+@@ -4895,7 +4897,7 @@
+ 		    {
+ 			if (list_append_tv(l, &item->li_tv) == FAIL)
+ 			{
+-			    list_free(l);
++			    list_free(l, TRUE);
+ 			    return FAIL;
+ 			}
+ 			item = item->li_next;
+@@ -5295,7 +5297,7 @@
+ 	EMSG2(_("E697: Missing end of List ']': %s"), *arg);
+ failret:
+ 	if (evaluate)
+-	    list_free(l);
++	    list_free(l, TRUE);
+ 	return FAIL;
+     }
+ 
+@@ -5359,8 +5361,8 @@
+ list_unref(l)
+     list_T *l;
+ {
+-    if (l != NULL && l->lv_refcount != DEL_REFCOUNT && --l->lv_refcount <= 0)
+-	list_free(l);
++    if (l != NULL && --l->lv_refcount <= 0)
++	list_free(l, TRUE);
+ }
+ 
+ /*
+@@ -5368,14 +5370,12 @@
+  * Ignores the reference count.
+  */
+     void
+-list_free(l)
+-    list_T *l;
++list_free(l, recurse)
++    list_T  *l;
++    int	    recurse;	/* Free Lists and Dictionaries recursively. */
+ {
+     listitem_T *item;
+ 
+-    /* Avoid that recursive reference to the list frees us again. */
+-    l->lv_refcount = DEL_REFCOUNT;
+-
+     /* Remove the list from the list of lists for garbage collection. */
+     if (l->lv_used_prev == NULL)
+ 	first_list = l->lv_used_next;
+@@ -5388,7 +5388,10 @@
+     {
+ 	/* Remove the item before deleting it. */
+ 	l->lv_first = item->li_next;
+-	listitem_free(item);
++	if (recurse || (item->li_tv.v_type != VAR_LIST
++					   && item->li_tv.v_type != VAR_DICT))
++	    clear_tv(&item->li_tv);
++	vim_free(item);
+     }
+     vim_free(l);
+ }
+@@ -5448,6 +5451,8 @@
+ {
+     listitem_T	*item1, *item2;
+ 
++    if (l1 == l2)
++	return TRUE;
+     if (list_len(l1) != list_len(l2))
+ 	return FALSE;
+ 
+@@ -5484,6 +5489,8 @@
+     dictitem_T	*item2;
+     int		todo;
+ 
++    if (d1 == d2)
++	return TRUE;
+     if (dict_len(d1) != dict_len(d2))
+ 	return FALSE;
+ 
+@@ -5516,19 +5523,29 @@
+ {
+     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
+     char_u	*s1, *s2;
++    static int  recursive = 0;	    /* cach recursive loops */
++    int		r;
+ 
+     if (tv1->v_type != tv2->v_type)
+ 	return FALSE;
++    /* Catch lists and dicts that have an endless loop by limiting
++     * recursiveness to 1000.  We guess they are equal then. */
++    if (recursive >= 1000)
++	return TRUE;
+ 
+     switch (tv1->v_type)
+     {
+ 	case VAR_LIST:
+-	    /* recursive! */
+-	    return list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
++	    ++recursive;
++	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
++	    --recursive;
++	    return r;
+ 
+ 	case VAR_DICT:
+-	    /* recursive! */
+-	    return dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
++	    ++recursive;
++	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
++	    --recursive;
++	    return r;
+ 
+ 	case VAR_FUNC:
+ 	    return (tv1->vval.v_string != NULL
+@@ -6059,6 +6076,10 @@
+     tabpage_T	*tp;
+ #endif
+ 
++    /* Only do this once. */
++    want_garbage_collect = FALSE;
++    may_garbage_collect = FALSE;
++
+     /*
+      * 1. Go through all accessible variables and mark all lists and dicts
+      *    with copyID.
+@@ -6097,7 +6118,10 @@
+     for (dd = first_dict; dd != NULL; )
+ 	if (dd->dv_copyID != copyID)
+ 	{
+-	    dict_free(dd);
++	    /* Free the Dictionary and ordinary items it contains, but don't
++	     * recurse into Lists and Dictionaries, they will be in the list
++	     * of dicts or list of lists. */
++	    dict_free(dd, FALSE);
+ 	    did_free = TRUE;
+ 
+ 	    /* restart, next dict may also have been freed */
+@@ -6114,7 +6138,10 @@
+     for (ll = first_list; ll != NULL; )
+ 	if (ll->lv_copyID != copyID && ll->lv_watch == NULL)
+ 	{
+-	    list_free(ll);
++	    /* Free the List and ordinary items it contains, but don't recurse
++	     * into Lists and Dictionaries, they will be in the list of dicts
++	     * or list of lists. */
++	    list_free(ll, FALSE);
+ 	    did_free = TRUE;
+ 
+ 	    /* restart, next list may also have been freed */
+@@ -6207,11 +6234,12 @@
+     d = (dict_T *)alloc(sizeof(dict_T));
+     if (d != NULL)
+     {
+-	/* Add the list to the hashtable for garbage collection. */
++	/* Add the list to the list of dicts for garbage collection. */
+ 	if (first_dict != NULL)
+ 	    first_dict->dv_used_prev = d;
+ 	d->dv_used_next = first_dict;
+ 	d->dv_used_prev = NULL;
++	first_dict = d;
+ 
+ 	hash_init(&d->dv_hashtab);
+ 	d->dv_lock = 0;
+@@ -6229,8 +6257,8 @@
+ dict_unref(d)
+     dict_T *d;
+ {
+-    if (d != NULL && d->dv_refcount != DEL_REFCOUNT && --d->dv_refcount <= 0)
+-	dict_free(d);
++    if (d != NULL && --d->dv_refcount <= 0)
++	dict_free(d, TRUE);
+ }
+ 
+ /*
+@@ -6238,16 +6266,14 @@
+  * Ignores the reference count.
+  */
+     static void
+-dict_free(d)
+-    dict_T *d;
++dict_free(d, recurse)
++    dict_T  *d;
++    int	    recurse;	/* Free Lists and Dictionaries recursively. */
+ {
+     int		todo;
+     hashitem_T	*hi;
+     dictitem_T	*di;
+ 
+-    /* Avoid that recursive reference to the dict frees us again. */
+-    d->dv_refcount = DEL_REFCOUNT;
+-
+     /* Remove the dict from the list of dicts for garbage collection. */
+     if (d->dv_used_prev == NULL)
+ 	first_dict = d->dv_used_next;
+@@ -6267,7 +6293,10 @@
+ 	     * something recursive causing trouble. */
+ 	    di = HI2DI(hi);
+ 	    hash_remove(&d->dv_hashtab, hi);
+-	    dictitem_free(di);
++	    if (recurse || (di->di_tv.v_type != VAR_LIST
++					     && di->di_tv.v_type != VAR_DICT))
++		clear_tv(&di->di_tv);
++	    vim_free(di);
+ 	    --todo;
+ 	}
+     }
+@@ -6718,7 +6747,7 @@
+ 	EMSG2(_("E723: Missing end of Dictionary '}': %s"), *arg);
+ failret:
+ 	if (evaluate)
+-	    dict_free(d);
++	    dict_free(d, TRUE);
+ 	return FAIL;
+     }
+ 
+@@ -7139,6 +7168,7 @@
+     {"setreg",		2, 3, f_setreg},
+     {"settabwinvar",	4, 4, f_settabwinvar},
+     {"setwinvar",	3, 3, f_setwinvar},
++    {"shellescape",	1, 1, f_shellescape},
+     {"simplify",	1, 1, f_simplify},
+     {"sort",		1, 2, f_sort},
+     {"soundfold",	1, 1, f_soundfold},
+@@ -7595,8 +7625,8 @@
+  * Give an error message with a function name.  Handle <SNR> things.
+  */
+     static void
+-emsg_funcname(msg, name)
+-    char	*msg;
++emsg_funcname(ermsg, name)
++    char	*ermsg;
+     char_u	*name;
+ {
+     char_u	*p;
+@@ -7605,7 +7635,7 @@
+ 	p = concat_str((char_u *)"<SNR>", name + 3);
+     else
+ 	p = name;
+-    EMSG2(_(msg), p);
++    EMSG2(_(ermsg), p);
+     if (p != name)
+ 	vim_free(p);
+ }
+@@ -8252,6 +8282,12 @@
+ 	EMSG(_("E785: complete() can only be used in Insert mode"));
+ 	return;
+     }
++
++    /* Check for undo allowed here, because if something was already inserted
++     * the line was already saved for undo and this check isn't done. */
++    if (!undo_allowed())
++	return;
++
+     if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
+     {
+ 	EMSG(_(e_invarg));
+@@ -9173,25 +9209,25 @@
+     typval_T	save_key;
+     int		rem;
+     int		todo;
+-    char_u	*msg = map ? (char_u *)"map()" : (char_u *)"filter()";
++    char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
+     int		save_did_emsg;
+ 
+     rettv->vval.v_number = 0;
+     if (argvars[0].v_type == VAR_LIST)
+     {
+ 	if ((l = argvars[0].vval.v_list) == NULL
+-		|| (map && tv_check_lock(l->lv_lock, msg)))
++		|| (map && tv_check_lock(l->lv_lock, ermsg)))
+ 	    return;
+     }
+     else if (argvars[0].v_type == VAR_DICT)
+     {
+ 	if ((d = argvars[0].vval.v_dict) == NULL
+-		|| (map && tv_check_lock(d->dv_lock, msg)))
++		|| (map && tv_check_lock(d->dv_lock, ermsg)))
+ 	    return;
+     }
+     else
+     {
+-	EMSG2(_(e_listdictarg), msg);
++	EMSG2(_(e_listdictarg), ermsg);
+ 	return;
+     }
+ 
+@@ -9223,7 +9259,7 @@
+ 		{
+ 		    --todo;
+ 		    di = HI2DI(hi);
+-		    if (tv_check_lock(di->di_tv.v_lock, msg))
++		    if (tv_check_lock(di->di_tv.v_lock, ermsg))
+ 			break;
+ 		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+@@ -9242,7 +9278,7 @@
+ 	{
+ 	    for (li = l->lv_first; li != NULL; li = nli)
+ 	    {
+-		if (tv_check_lock(li->li_tv.v_lock, msg))
++		if (tv_check_lock(li->li_tv.v_lock, ermsg))
+ 		    break;
+ 		nli = li->li_next;
+ 		if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL
+@@ -9598,7 +9634,9 @@
+     typval_T	*argvars;
+     typval_T	*rettv;
+ {
+-    garbage_collect();
++    /* This is postponed until we are back at the toplevel, because we may be
++     * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
++    want_garbage_collect = TRUE;
+ }
+ 
+ /*
+@@ -9792,6 +9830,9 @@
+     varnumber_T		n;
+     int			error = FALSE;
+ 
++    /* Position the cursor.  Needed after a message that ends in a space. */
++    windgoto(msg_row, msg_col);
++
+     ++no_mapping;
+     ++allow_keys;
+     if (argvars[0].v_type == VAR_UNKNOWN)
+@@ -10412,20 +10453,14 @@
+ 
+     if (win != NULL && varname != NULL)
+     {
+-	if (*varname == '&')	/* window-local-option */
+-	{
+-	    /* Set curwin to be our win, temporarily.  Also set curbuf, so
+-	     * that we can get buffer-local options. */
+-	    oldcurwin = curwin;
+-	    curwin = win;
+-	    curbuf = win->w_buffer;
++	/* Set curwin to be our win, temporarily.  Also set curbuf, so
++	 * that we can get buffer-local options. */
++	oldcurwin = curwin;
++	curwin = win;
++	curbuf = win->w_buffer;
+ 
++	if (*varname == '&')	/* window-local-option */
+ 	    get_option_tv(&varname, rettv, 1);
+-
+-	    /* restore previous notion of curwin */
+-	    curwin = oldcurwin;
+-	    curbuf = curwin->w_buffer;
+-	}
+ 	else
+ 	{
+ 	    if (*varname == NUL)
+@@ -10438,6 +10473,10 @@
+ 	    if (v != NULL)
+ 		copy_tv(&v->di_tv, rettv);
+ 	}
++
++	/* restore previous notion of curwin */
++	curwin = oldcurwin;
++	curbuf = curwin->w_buffer;
+     }
+ 
+     --emsg_off;
+@@ -11312,14 +11351,19 @@
+ 
+ static int inputsecret_flag = 0;
+ 
++static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog));
++
+ /*
+- * "input()" function
+- *     Also handles inputsecret() when inputsecret is set.
++ * This function is used by f_input() and f_inputdialog() functions. The third
++ * argument to f_input() specifies the type of completion to use at the
++ * prompt. The third argument to f_inputdialog() specifies the value to return
++ * when the user cancels the prompt.
+  */
+     static void
+-f_input(argvars, rettv)
++get_user_input(argvars, rettv, inputdialog)
+     typval_T	*argvars;
+     typval_T	*rettv;
++    int		inputdialog;
+ {
+     char_u	*prompt = get_tv_string_chk(&argvars[0]);
+     char_u	*p = NULL;
+@@ -11369,10 +11413,10 @@
+ 	    if (defstr != NULL)
+ 		stuffReadbuffSpec(defstr);
+ 
+-	    if (argvars[2].v_type != VAR_UNKNOWN)
++	    if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN)
+ 	    {
+ 		char_u	*xp_name;
+-		int		xp_namelen;
++		int	xp_namelen;
+ 		long	argt;
+ 
+ 		rettv->vval.v_string = NULL;
+@@ -11404,6 +11448,18 @@
+ }
+ 
+ /*
++ * "input()" function
++ *     Also handles inputsecret() when inputsecret is set.
++ */
++    static void
++f_input(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    get_user_input(argvars, rettv, FALSE);
++}
++
++/*
+  * "inputdialog()" function
+  */
+     static void
+@@ -11443,7 +11499,7 @@
+     }
+     else
+ #endif
+-	f_input(argvars, rettv);
++	get_user_input(argvars, rettv, TRUE);
+ }
+ 
+ /*
+@@ -11471,6 +11527,7 @@
+     }
+ 
+     msg_start();
++    msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
+     lines_left = Rows;	/* avoid more prompt */
+     msg_scroll = TRUE;
+     msg_clr_eos();
+@@ -13250,7 +13307,7 @@
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
+ 	    EMSG2(_(e_toomanyarg), "remove()");
+ 	else if ((d = argvars[0].vval.v_dict) != NULL
+-		&& !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
++		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+ 	{
+ 	    key = get_tv_string_chk(&argvars[1]);
+ 	    if (key != NULL)
+@@ -13270,7 +13327,7 @@
+     else if (argvars[0].v_type != VAR_LIST)
+ 	EMSG2(_(e_listdictarg), "remove()");
+     else if ((l = argvars[0].vval.v_list) != NULL
+-	    && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
++	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+     {
+ 	int	    error = FALSE;
+ 
+@@ -14157,11 +14214,7 @@
+     typval_T	*rettv;
+ {
+     buf_T	*buf;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*save_curbuf;
+-#endif
+     char_u	*varname, *bufvarname;
+     typval_T	*varp;
+     char_u	nbuf[NUMBUFLEN];
+@@ -14178,12 +14231,7 @@
+     if (buf != NULL && varname != NULL && varp != NULL)
+     {
+ 	/* set curbuf to be our buf, temporarily */
+-#ifdef FEAT_AUTOCMD
+ 	aucmd_prepbuf(&aco, buf);
+-#else
+-	save_curbuf = curbuf;
+-	curbuf = buf;
+-#endif
+ 
+ 	if (*varname == '&')
+ 	{
+@@ -14210,11 +14258,7 @@
+ 	}
+ 
+ 	/* reset notion of buffer */
+-#ifdef FEAT_AUTOCMD
+ 	aucmd_restbuf(&aco);
+-#else
+-	curbuf = save_curbuf;
+-#endif
+     }
+ }
+ 
+@@ -14582,6 +14626,18 @@
+ }
+ 
+ /*
++ * "shellescape({string})" function
++ */
++    static void
++f_shellescape(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    rettv->vval.v_string = vim_strsave_shellescape(get_tv_string(&argvars[0]));
++    rettv->v_type = VAR_STRING;
++}
++
++/*
+  * "simplify()" function
+  */
+     static void
+@@ -16173,7 +16229,7 @@
+ 	curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
+ 	curwin->w_set_curswant = FALSE;
+ 
+-	curwin->w_topline = get_dict_number(dict, (char_u *)"topline");
++	set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+ #ifdef FEAT_DIFF
+ 	curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+ #endif
+@@ -16218,6 +16274,7 @@
+ #ifdef FEAT_VIRTUALEDIT
+     dict_add_nr_str(dict, "coladd", (long)curwin->w_cursor.coladd, NULL);
+ #endif
++    update_curswant();
+     dict_add_nr_str(dict, "curswant", (long)curwin->w_curswant, NULL);
+ 
+     dict_add_nr_str(dict, "topline", (long)curwin->w_topline, NULL);
+@@ -16438,9 +16495,12 @@
+     long	i = 0;
+     long	n;
+ 
+-    /* List must be: [fnum, lnum, col, coladd] */
+-    if (arg->v_type != VAR_LIST || l == NULL
+-				      || l->lv_len != (fnump == NULL ? 3 : 4))
++    /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
++     * when "fnump" isn't NULL and "coladd" is optional. */
++    if (arg->v_type != VAR_LIST
++	    || l == NULL
++	    || l->lv_len < (fnump == NULL ? 2 : 3)
++	    || l->lv_len > (fnump == NULL ? 3 : 4))
+ 	return FAIL;
+ 
+     if (fnump != NULL)
+@@ -16466,8 +16526,9 @@
+ #ifdef FEAT_VIRTUALEDIT
+     n = list_find_nr(l, i, NULL);
+     if (n < 0)
+-	return FAIL;
+-    posp->coladd = n;
++	posp->coladd = 0;
++    else
++	posp->coladd = n;
+ #endif
+ 
+     return OK;
+@@ -17759,6 +17820,13 @@
+     }
+     else		    /* add a new variable */
+     {
++	/* Can't add "v:" variable. */
++	if (ht == &vimvarht)
++	{
++	    EMSG2(_(e_illvar), name);
++	    return;
++	}
++
+ 	/* Make sure the variable name is valid. */
+ 	for (p = varname; *p != NUL; ++p)
+ 	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+@@ -17792,7 +17860,7 @@
+ }
+ 
+ /*
+- * Return TRUE if di_flags "flags" indicate read-only variable "name".
++ * Return TRUE if di_flags "flags" indicates variable "name" is read-only.
+  * Also give an error message.
+  */
+     static int
+@@ -17814,6 +17882,23 @@
+ }
+ 
+ /*
++ * Return TRUE if di_flags "flags" indicates variable "name" is fixed.
++ * Also give an error message.
++ */
++    static int
++var_check_fixed(flags, name)
++    int		flags;
++    char_u	*name;
++{
++    if (flags & DI_FLAGS_FIX)
++    {
++	EMSG2(_("E795: Cannot delete variable %s"), name);
++	return TRUE;
++    }
++    return FALSE;
++}
++
++/*
+  * Return TRUE if typeval "tv" is set to be locked (immutable).
+  * Also give an error message, using "name".
+  */
+@@ -18786,6 +18871,7 @@
+ 		if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
+ 		{
+ 		    vim_free(fudi.fd_di);
++		    vim_free(fp);
+ 		    goto erret;
+ 		}
+ 	    }
+@@ -18963,7 +19049,8 @@
+     else if (lead > 0)
+     {
+ 	lead = 3;
+-	if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
++	if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
++						       || eval_fname_sid(*pp))
+ 	{
+ 	    /* It's "s:" or "<SID>" */
+ 	    if (current_SID <= 0)
+@@ -19685,6 +19772,7 @@
+     v->di_tv.vval.v_list = &fc.l_varlist;
+     vim_memset(&fc.l_varlist, 0, sizeof(list_T));
+     fc.l_varlist.lv_refcount = 99999;
++    fc.l_varlist.lv_lock = VAR_FIXED;
+ 
+     /*
+      * Set a:firstline to "firstline" and a:lastline to "lastline".
+@@ -19761,7 +19849,7 @@
+ 	    if (p_verbose >= 14)
+ 	    {
+ 		char_u	buf[MSG_BUF_LEN];
+-		char_u	numbuf[NUMBUFLEN];
++		char_u	numbuf2[NUMBUFLEN];
+ 		char_u	*tofree;
+ 
+ 		msg_puts((char_u *)"(");
+@@ -19773,8 +19861,8 @@
+ 			msg_outnum((long)argvars[i].vval.v_number);
+ 		    else
+ 		    {
+-			trunc_string(tv2string(&argvars[i], &tofree, numbuf, 0),
+-							    buf, MSG_BUF_CLEN);
++			trunc_string(tv2string(&argvars[i], &tofree,
++					      numbuf2, 0), buf, MSG_BUF_CLEN);
+ 			msg_puts(buf);
+ 			vim_free(tofree);
+ 		    }
+@@ -19852,13 +19940,13 @@
+ 	else
+ 	{
+ 	    char_u	buf[MSG_BUF_LEN];
+-	    char_u	numbuf[NUMBUFLEN];
++	    char_u	numbuf2[NUMBUFLEN];
+ 	    char_u	*tofree;
+ 
+ 	    /* The value may be very long.  Skip the middle part, so that we
+ 	     * have some idea how it starts and ends. smsg() would always
+ 	     * truncate it at the end. */
+-	    trunc_string(tv2string(fc.rettv, &tofree, numbuf, 0),
++	    trunc_string(tv2string(fc.rettv, &tofree, numbuf2, 0),
+ 							   buf, MSG_BUF_CLEN);
+ 	    smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
+ 	    vim_free(tofree);
+diff -Naur vim70.orig/src/ex_cmds2.c vim70/src/ex_cmds2.c
+--- vim70.orig/src/ex_cmds2.c	2006-04-17 03:19:07.000000000 -0700
++++ vim70/src/ex_cmds2.c	2006-10-21 21:08:58.000000000 -0700
+@@ -3648,13 +3648,13 @@
+  * Return FALSE when not sourcing a file.
+  */
+     int
+-source_finished(getline, cookie)
+-    char_u	*(*getline) __ARGS((int, void *, int));
++source_finished(fgetline, cookie)
++    char_u	*(*fgetline) __ARGS((int, void *, int));
+     void	*cookie;
+ {
+-    return (getline_equal(getline, cookie, getsourceline)
++    return (getline_equal(fgetline, cookie, getsourceline)
+ 	    && ((struct source_cookie *)getline_cookie(
+-						 getline, cookie))->finished);
++						fgetline, cookie))->finished);
+ }
+ #endif
+ 
+diff -Naur vim70.orig/src/ex_cmds.c vim70/src/ex_cmds.c
+--- vim70.orig/src/ex_cmds.c	2006-04-22 11:56:56.000000000 -0700
++++ vim70/src/ex_cmds.c	2006-10-21 21:09:02.000000000 -0700
+@@ -95,7 +95,10 @@
+ 		_("<%s>%s%s  %d,  Hex %02x,  Octal %03o"),
+ 					   transchar(c), buf1, buf2, c, c, c);
+ #ifdef FEAT_MBYTE
+-	c = cc[ci++];
++	if (enc_utf8)
++	    c = cc[ci++];
++	else
++	    c = 0;
+ #endif
+     }
+ 
+@@ -108,7 +111,7 @@
+ 	if (len > 0)
+ 	    IObuff[len++] = ' ';
+ 	IObuff[len++] = '<';
+-	if (utf_iscomposing(c)
++	if (enc_utf8 && utf_iscomposing(c)
+ # ifdef USE_GUI
+ 		&& !gui.in_use
+ # endif
+@@ -120,7 +123,10 @@
+ 				    : _("> %d, Hex %08x, Octal %o"), c, c, c);
+ 	if (ci == MAX_MCO)
+ 	    break;
+-	c = cc[ci++];
++	if (enc_utf8)
++	    c = cc[ci++];
++	else
++	    c = 0;
+     }
+ #endif
+ 
+@@ -185,6 +191,7 @@
+ 	    new_indent = indent;
+ 	else
+ 	{
++	    has_tab = FALSE;	/* avoid uninit warnings */
+ 	    len = linelen(eap->cmdidx == CMD_right ? &has_tab
+ 						   : NULL) - get_indent();
+ 
+@@ -1772,10 +1779,9 @@
+ 				? (st_old.st_mode & 0020)
+ 				: (st_old.st_mode & 0002))))
+ 	{
+-	    int	tt;
++	    int	tt = msg_didany;
+ 
+ 	    /* avoid a wait_return for this message, it's annoying */
+-	    tt = msg_didany;
+ 	    EMSG2(_("E137: Viminfo file is not writable: %s"), fname);
+ 	    msg_didany = tt;
+ 	    fclose(fp_in);
+@@ -2458,6 +2464,8 @@
+ #ifdef FEAT_AUTOCMD
+ 	apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
+ #endif
++	/* Change directories when the 'acd' option is set. */
++	DO_AUTOCHDIR
+     }
+     /* print full file name if :cd used */
+     fileinfo(FALSE, FALSE, eap->forceit);
+@@ -2675,8 +2683,13 @@
+ 				 eap, eap->append, eap->forceit, TRUE, FALSE);
+ 
+ 	/* After ":saveas fname" reset 'readonly'. */
+-	if (eap->cmdidx == CMD_saveas && retval == OK)
+-	    curbuf->b_p_ro = FALSE;
++	if (eap->cmdidx == CMD_saveas)
++	{
++	    if (retval == OK)
++		curbuf->b_p_ro = FALSE;
++	    /* Change directories when the 'acd' option is set. */
++	    DO_AUTOCHDIR
++	}
+     }
+ 
+ theend:
+@@ -3547,11 +3560,9 @@
+ 	foldUpdateAll(curwin);
+ #endif
+ 
+-#ifdef FEAT_AUTOCHDIR
+-	if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	    shorten_fnames(TRUE);
+-#endif
++	/* Change directories when the 'acd' option is set. */
++	DO_AUTOCHDIR
++
+ 	/*
+ 	 * Careful: open_buffer() and apply_autocmds() may change the current
+ 	 * buffer and window.
+@@ -3718,12 +3729,8 @@
+     if (p_im)
+ 	need_start_insertmode = TRUE;
+ 
+-#ifdef FEAT_AUTOCHDIR
+-    /* Change directories when the acd option is set on. */
+-    if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	shorten_fnames(TRUE);
+-#endif
++    /* Change directories when the 'acd' option is set. */
++    DO_AUTOCHDIR
+ 
+ #if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
+     if (gui.in_use && curbuf->b_ffname != NULL)
+diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h
+--- vim70.orig/src/ex_cmds.h	2006-04-07 02:44:46.000000000 -0700
++++ vim70/src/ex_cmds.h	2006-10-21 21:08:52.000000000 -0700
+@@ -262,7 +262,7 @@
+ EX(CMD_comclear,	"comclear",	ex_comclear,
+ 			TRLBAR|CMDWIN),
+ EX(CMD_compiler,	"compiler",	ex_compiler,
+-			BANG|TRLBAR|WORD1),
++			BANG|TRLBAR|WORD1|CMDWIN),
+ EX(CMD_continue,	"continue",	ex_continue,
+ 			TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_confirm,		"confirm",	ex_wrongmodifier,
+diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
+--- vim70.orig/src/ex_docmd.c	2006-05-05 09:33:19.000000000 -0700
++++ vim70/src/ex_docmd.c	2006-10-21 21:09:04.000000000 -0700
+@@ -58,9 +58,9 @@
+ #endif
+ 
+ #ifdef FEAT_EVAL
+-static char_u	*do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*getline)(int, void *, int), void *cookie));
++static char_u	*do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie));
+ #else
+-static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*getline)(int, void *, int), void *cookie));
++static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
+ static int	if_level = 0;		/* depth in :if */
+ #endif
+ static char_u	*find_command __ARGS((exarg_T *eap, int *full));
+@@ -831,10 +831,13 @@
+ 
+     /*
+      * If requested, store and reset the global values controlling the
+-     * exception handling (used when debugging).
++     * exception handling (used when debugging).  Otherwise clear it to avoid
++     * a bogus compiler warning when the optimizer uses inline functions...
+      */
+-    else if (flags & DOCMD_EXCRESET)
++    if (flags & DOCMD_EXCRESET)
+ 	save_dbg_stuff(&debug_saved);
++    else
++	memset(&debug_saved, 0, 1);
+ 
+     initial_trylevel = trylevel;
+ 
+@@ -1574,24 +1577,24 @@
+ #endif
+ 
+ /*
+- * If "getline" is get_loop_line(), return TRUE if the getline it uses equals
+- * "func".  * Otherwise return TRUE when "getline" equals "func".
++ * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
++ * "func".  * Otherwise return TRUE when "fgetline" equals "func".
+  */
+ /*ARGSUSED*/
+     int
+-getline_equal(getline, cookie, func)
+-    char_u	*(*getline) __ARGS((int, void *, int));
+-    void	*cookie;		/* argument for getline() */
++getline_equal(fgetline, cookie, func)
++    char_u	*(*fgetline) __ARGS((int, void *, int));
++    void	*cookie;		/* argument for fgetline() */
+     char_u	*(*func) __ARGS((int, void *, int));
+ {
+ #ifdef FEAT_EVAL
+     char_u		*(*gp) __ARGS((int, void *, int));
+     struct loop_cookie *cp;
+ 
+-    /* When "getline" is "get_loop_line()" use the "cookie" to find the
++    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
+      * function that's orignally used to obtain the lines.  This may be nested
+      * several levels. */
+-    gp = getline;
++    gp = fgetline;
+     cp = (struct loop_cookie *)cookie;
+     while (gp == get_loop_line)
+     {
+@@ -1600,29 +1603,29 @@
+     }
+     return gp == func;
+ #else
+-    return getline == func;
++    return fgetline == func;
+ #endif
+ }
+ 
+ #if defined(FEAT_EVAL) || defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+- * If "getline" is get_loop_line(), return the cookie used by the original
++ * If "fgetline" is get_loop_line(), return the cookie used by the original
+  * getline function.  Otherwise return "cookie".
+  */
+ /*ARGSUSED*/
+     void *
+-getline_cookie(getline, cookie)
+-    char_u	*(*getline) __ARGS((int, void *, int));
+-    void	*cookie;		/* argument for getline() */
++getline_cookie(fgetline, cookie)
++    char_u	*(*fgetline) __ARGS((int, void *, int));
++    void	*cookie;		/* argument for fgetline() */
+ {
+ # ifdef FEAT_EVAL
+     char_u		*(*gp) __ARGS((int, void *, int));
+     struct loop_cookie *cp;
+ 
+-    /* When "getline" is "get_loop_line()" use the "cookie" to find the
++    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
+      * cookie that's orignally used to obtain the lines.  This may be nested
+      * several levels. */
+-    gp = getline;
++    gp = fgetline;
+     cp = (struct loop_cookie *)cookie;
+     while (gp == get_loop_line)
+     {
+@@ -1648,7 +1651,7 @@
+  * 5. parse arguments
+  * 6. switch on command name
+  *
+- * Note: "getline" can be NULL.
++ * Note: "fgetline" can be NULL.
+  *
+  * This function may be called recursively!
+  */
+@@ -1663,14 +1666,14 @@
+ #ifdef FEAT_EVAL
+ 			    cstack,
+ #endif
+-				    getline, cookie)
++				    fgetline, cookie)
+     char_u		**cmdlinep;
+     int			sourcing;
+ #ifdef FEAT_EVAL
+     struct condstack	*cstack;
+ #endif
+-    char_u		*(*getline) __ARGS((int, void *, int));
+-    void		*cookie;		/* argument for getline() */
++    char_u		*(*fgetline) __ARGS((int, void *, int));
++    void		*cookie;		/* argument for fgetline() */
+ {
+     char_u		*p;
+     linenr_T		lnum;
+@@ -1698,7 +1701,7 @@
+     if (quitmore
+ #ifdef FEAT_EVAL
+ 	    /* avoid that a function call in 'statusline' does this */
+-	    && !getline_equal(getline, cookie, get_func_line)
++	    && !getline_equal(fgetline, cookie, get_func_line)
+ #endif
+ 	    )
+ 	--quitmore;
+@@ -1710,6 +1713,10 @@
+     save_cmdmod = cmdmod;
+     vim_memset(&cmdmod, 0, sizeof(cmdmod));
+ 
++    /* "#!anything" is handled like a comment. */
++    if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
++	goto doend;
++
+     /*
+      * Repeat until no more command modifiers are found.
+      */
+@@ -1724,8 +1731,8 @@
+ 
+ 	/* in ex mode, an empty line works like :+ */
+ 	if (*ea.cmd == NUL && exmode_active
+-			&& (getline_equal(getline, cookie, getexmodeline)
+-			    || getline_equal(getline, cookie, getexline))
++			&& (getline_equal(fgetline, cookie, getexmodeline)
++			    || getline_equal(fgetline, cookie, getexline))
+ 			&& curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+ 	{
+ 	    ea.cmd = (char_u *)"+";
+@@ -1914,9 +1921,9 @@
+     /* Count this line for profiling if ea.skip is FALSE. */
+     if (do_profiling == PROF_YES && !ea.skip)
+     {
+-	if (getline_equal(getline, cookie, get_func_line))
+-	    func_line_exec(getline_cookie(getline, cookie));
+-	else if (getline_equal(getline, cookie, getsourceline))
++	if (getline_equal(fgetline, cookie, get_func_line))
++	    func_line_exec(getline_cookie(fgetline, cookie));
++	else if (getline_equal(fgetline, cookie, getsourceline))
+ 	    script_line_exec();
+     }
+ #endif
+@@ -2585,7 +2592,7 @@
+  * The "ea" structure holds the arguments that can be used.
+  */
+     ea.cmdlinep = cmdlinep;
+-    ea.getline = getline;
++    ea.getline = fgetline;
+     ea.cookie = cookie;
+ #ifdef FEAT_EVAL
+     ea.cstack = cstack;
+@@ -2623,9 +2630,9 @@
+ 	do_throw(cstack);
+     else if (check_cstack)
+     {
+-	if (source_finished(getline, cookie))
++	if (source_finished(fgetline, cookie))
+ 	    do_finish(&ea, TRUE);
+-	else if (getline_equal(getline, cookie, get_func_line)
++	else if (getline_equal(fgetline, cookie, get_func_line)
+ 						   && current_func_returned())
+ 	    do_return(&ea, TRUE, FALSE, NULL);
+     }
+@@ -6289,7 +6296,6 @@
+     exarg_T	*eap;
+ {
+     tabpage_T	*tp;
+-    int		h = tabline_height();
+ 
+ # ifdef FEAT_CMDWIN
+     if (cmdwin_type != 0)
+@@ -6321,9 +6327,6 @@
+ 	       )
+ 		tabpage_close(eap->forceit);
+ 	}
+-
+-    if (h != tabline_height())
+-	shell_new_rows();
+ }
+ 
+ /*
+@@ -6335,7 +6338,6 @@
+ {
+     tabpage_T	*tp;
+     int		done;
+-    int		h = tabline_height();
+ 
+ # ifdef FEAT_CMDWIN
+     if (cmdwin_type != 0)
+@@ -6364,9 +6366,6 @@
+ 		    break;
+ 	    }
+ 	}
+-
+-    if (h != tabline_height())
+-	shell_new_rows();
+ }
+ 
+ /*
+@@ -6390,6 +6389,8 @@
+ /*
+  * Close tab page "tp", which is not the current tab page.
+  * Note that autocommands may make "tp" invalid.
++ * Also takes care of the tab pages line disappearing when closing the
++ * last-but-one tab page.
+  */
+     void
+ tabpage_close_other(tp, forceit)
+@@ -6398,6 +6399,7 @@
+ {
+     int		done = 0;
+     win_T	*wp;
++    int		h = tabline_height();
+ 
+     /* Limit to 1000 windows, autocommands may add a window while we close
+      * one.  OK, so I'm paranoid... */
+@@ -6411,7 +6413,10 @@
+ 	if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
+ 	    break;
+     }
++
+     redraw_tabline = TRUE;
++    if (h != tabline_height())
++	shell_new_rows();
+ }
+ 
+ /*
+@@ -8417,6 +8422,15 @@
+ 	else
+ 	    EMSG2(_(e_invarg2), eap->arg);
+     }
++
++    /* Make sure redirection is not off.  Can happen for cmdline completion
++     * that indirectly invokes a command to catch its output. */
++    if (redir_fd != NULL
++#ifdef FEAT_EVAL
++			  || redir_reg || redir_vname
++#endif
++							)
++	redir_off = FALSE;
+ }
+ 
+ /*
+diff -Naur vim70.orig/src/ex_getln.c vim70/src/ex_getln.c
+--- vim70.orig/src/ex_getln.c	2006-04-30 08:32:01.000000000 -0700
++++ vim70/src/ex_getln.c	2006-10-21 21:09:11.000000000 -0700
+@@ -86,7 +86,7 @@
+ static void	draw_cmdline __ARGS((int start, int len));
+ static void	save_cmdline __ARGS((struct cmdline_info *ccp));
+ static void	restore_cmdline __ARGS((struct cmdline_info *ccp));
+-static int	cmdline_paste __ARGS((int regname, int literally));
++static int	cmdline_paste __ARGS((int regname, int literally, int remcr));
+ #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+ static void	redrawcmd_preedit __ARGS((void));
+ #endif
+@@ -324,6 +324,9 @@
+      */
+     for (;;)
+     {
++	redir_off = TRUE;	/* Don't redirect the typed command.
++				   Repeated, because a ":redir" inside
++				   completion may switch it on. */
+ #ifdef USE_ON_FLY_SCROLL
+ 	dont_scroll = FALSE;	/* allow scrolling here */
+ #endif
+@@ -1113,7 +1116,7 @@
+ #endif
+ 		if (c != ESC)	    /* use ESC to cancel inserting register */
+ 		{
+-		    cmdline_paste(c, i == Ctrl_R);
++		    cmdline_paste(c, i == Ctrl_R, FALSE);
+ 
+ #ifdef FEAT_EVAL
+ 		    /* When there was a serious error abort getting the
+@@ -1228,16 +1231,16 @@
+ 			goto cmdline_not_changed;   /* Ignore mouse */
+ # ifdef FEAT_CLIPBOARD
+ 		if (clip_star.available)
+-		    cmdline_paste('*', TRUE);
++		    cmdline_paste('*', TRUE, TRUE);
+ 		else
+ # endif
+-		    cmdline_paste(0, TRUE);
++		    cmdline_paste(0, TRUE, TRUE);
+ 		redrawcmd();
+ 		goto cmdline_changed;
+ 
+ # ifdef FEAT_DND
+ 	case K_DROP:
+-		cmdline_paste('~', TRUE);
++		cmdline_paste('~', TRUE, FALSE);
+ 		redrawcmd();
+ 		goto cmdline_changed;
+ # endif
+@@ -1753,6 +1756,11 @@
+ 		end_pos = curwin->w_cursor; /* shutup gcc 4 */
+ 
+ 	    validate_cursor();
++# ifdef FEAT_WINDOWS
++	    /* May redraw the status line to show the cursor position. */
++	    if (p_ru && curwin->w_status_height > 0)
++		curwin->w_redr_status = TRUE;
++# endif
+ 
+ 	    save_cmdline(&save_ccline);
+ 	    update_screen(SOME_VALID);
+@@ -2360,7 +2368,7 @@
+ {
+     if ((State & CMDLINE)
+ 	    && xic != NULL
+-	    && im_get_status()
++	    /* && im_get_status()  doesn't work when using SCIM */
+ 	    && !p_imdisable
+ 	    && im_is_preediting())
+     {
+@@ -2882,9 +2890,10 @@
+  * return FAIL for failure, OK otherwise
+  */
+     static int
+-cmdline_paste(regname, literally)
++cmdline_paste(regname, literally, remcr)
+     int regname;
+     int literally;	/* Insert text literally instead of "as typed" */
++    int remcr;		/* remove trailing CR */
+ {
+     long		i;
+     char_u		*arg;
+@@ -2960,7 +2969,7 @@
+ 	return OK;
+     }
+ 
+-    return cmdline_paste_reg(regname, literally);
++    return cmdline_paste_reg(regname, literally, remcr);
+ }
+ 
+ /*
+@@ -4521,7 +4530,9 @@
+     flags |= EW_FILE | EW_EXEC;
+ 
+     /* For an absolute name we don't use $PATH. */
+-    if ((pat[0] == '.' && (vim_ispathsep(pat[1])
++    if (mch_isFullName(pat))
++	path = (char_u *)" ";
++    else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
+ 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
+ 	path = (char_u *)".";
+     else
+@@ -4534,6 +4545,9 @@
+     ga_init2(&ga, (int)sizeof(char *), 10);
+     for (s = path; *s != NUL; s = e)
+     {
++	if (*s == ' ')
++	    ++s;	/* Skip space used for absolute path name. */
++
+ #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+ 	e = vim_strchr(s, ';');
+ #else
+@@ -5982,6 +5996,8 @@
+     typestr[0] = cmdwin_type;
+     typestr[1] = NUL;
+     apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
++    if (restart_edit != 0)	/* autocmd with ":startinsert" */
++	stuffcharReadbuff(K_NOP);
+ # endif
+ 
+     i = RedrawingDisabled;
+diff -Naur vim70.orig/src/fileio.c vim70/src/fileio.c
+--- vim70.orig/src/fileio.c	2006-04-30 08:28:57.000000000 -0700
++++ vim70/src/fileio.c	2006-10-21 21:09:05.000000000 -0700
+@@ -316,6 +316,9 @@
+      * display the line. */
+     ex_no_reprint = TRUE;
+ 
++    /* don't display the file info for another buffer now */
++    need_fileinfo = FALSE;
++
+     /*
+      * For Unix: Use the short file name whenever possible.
+      * Avoids problems with networks and when directory names are changed.
+@@ -6450,17 +6453,10 @@
+     int		old_ro = buf->b_p_ro;
+     buf_T	*savebuf;
+     int		saved = OK;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+ 
+     /* set curwin/curbuf for "buf" and save some things */
+     aucmd_prepbuf(&aco, buf);
+-#else
+-    buf_T	*save_curbuf = curbuf;
+-
+-    curbuf = buf;
+-    curwin->w_buffer = buf;
+-#endif
+ 
+     /* We only want to read the text from the file, not reset the syntax
+      * highlighting, clear marks, diff status, etc.  Force the fileformat
+@@ -6573,14 +6569,9 @@
+ 	    curbuf->b_p_ro |= old_ro;
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+     /* Careful: autocommands may have made "buf" invalid! */
+-#else
+-    curwin->w_buffer = save_curbuf;
+-    curbuf = save_curbuf;
+-#endif
+ }
+ 
+ /*ARGSUSED*/
+@@ -6992,6 +6983,7 @@
+     {"FocusLost",	EVENT_FOCUSLOST},
+     {"FuncUndefined",	EVENT_FUNCUNDEFINED},
+     {"GUIEnter",	EVENT_GUIENTER},
++    {"GUIFailed",	EVENT_GUIFAILED},
+     {"InsertChange",	EVENT_INSERTCHANGE},
+     {"InsertEnter",	EVENT_INSERTENTER},
+     {"InsertLeave",	EVENT_INSERTLEAVE},
+@@ -8088,6 +8080,7 @@
+  * Search a window for the current buffer.  Save the cursor position and
+  * screen offset.
+  * Set "curbuf" and "curwin" to match "buf".
++ * When FEAT_AUTOCMD is not defined another version is used, see below.
+  */
+     void
+ aucmd_prepbuf(aco, buf)
+@@ -8151,6 +8144,7 @@
+ /*
+  * Cleanup after executing autocommands for a (hidden) buffer.
+  * Restore the window as it was (if possible).
++ * When FEAT_AUTOCMD is not defined another version is used, see below.
+  */
+     void
+ aucmd_restbuf(aco)
+@@ -8295,7 +8289,11 @@
+ {
+     int		state;
+ 
+-    if (!did_cursorhold && has_cursorhold() && !Recording)
++    if (!did_cursorhold && has_cursorhold() && !Recording
++#ifdef FEAT_INS_EXPAND
++	    && !ins_compl_active()
++#endif
++	    )
+     {
+ 	state = get_real_state();
+ 	if (state == NORMAL_BUSY || (state & INSERT) != 0)
+@@ -9063,8 +9061,38 @@
+     return retval;
+ }
+ 
++#else	/* FEAT_AUTOCMD */
++
++/*
++ * Prepare for executing commands for (hidden) buffer "buf".
++ * This is the non-autocommand version, it simply saves "curbuf" and sets
++ * "curbuf" and "curwin" to match "buf".
++ */
++    void
++aucmd_prepbuf(aco, buf)
++    aco_save_T	*aco;		/* structure to save values in */
++    buf_T	*buf;		/* new curbuf */
++{
++    aco->save_buf = buf;
++    curbuf = buf;
++    curwin->w_buffer = buf;
++}
++
++/*
++ * Restore after executing commands for a (hidden) buffer.
++ * This is the non-autocommand version.
++ */
++    void
++aucmd_restbuf(aco)
++    aco_save_T	*aco;		/* structure holding saved values */
++{
++    curbuf = aco->save_buf;
++    curwin->w_buffer = curbuf;
++}
++
+ #endif	/* FEAT_AUTOCMD */
+ 
++
+ #if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO)
+ /*
+  * Try matching a filename with a "pattern" ("prog" is NULL), or use the
+diff -Naur vim70.orig/src/getchar.c vim70/src/getchar.c
+--- vim70.orig/src/getchar.c	2006-05-03 10:29:21.000000000 -0700
++++ vim70/src/getchar.c	2006-10-21 21:09:07.000000000 -0700
+@@ -1451,7 +1451,8 @@
+ {
+     updatescript(0);
+ #ifdef FEAT_EVAL
+-    garbage_collect();
++    if (may_garbage_collect)
++	garbage_collect();
+ #endif
+ }
+ 
+@@ -1502,6 +1503,13 @@
+     int		i;
+ #endif
+ 
++#ifdef FEAT_EVAL
++    /* Do garbage collection when garbagecollect() was called previously and
++     * we are now at the toplevel. */
++    if (may_garbage_collect && want_garbage_collect)
++	garbage_collect();
++#endif
++
+     /*
+      * If a character was put back with vungetc, it was already processed.
+      * Return it directly.
+@@ -1511,13 +1519,13 @@
+ 	c = old_char;
+ 	old_char = -1;
+ 	mod_mask = old_mod_mask;
+-	return c;
+     }
+-
+-    mod_mask = 0x0;
+-    last_recorded_len = 0;
+-    for (;;)			/* this is done twice if there are modifiers */
++    else
+     {
++      mod_mask = 0x0;
++      last_recorded_len = 0;
++      for (;;)			/* this is done twice if there are modifiers */
++      {
+ 	if (mod_mask)		/* no mapping after modifier has been read */
+ 	{
+ 	    ++no_mapping;
+@@ -1695,8 +1703,20 @@
+ 	}
+ #endif
+ 
+-	return c;
++	break;
++      }
+     }
++
++#ifdef FEAT_EVAL
++    /*
++     * In the main loop "may_garbage_collect" can be set to do garbage
++     * collection in the first next vgetc().  It's disabled after that to
++     * avoid internally used Lists and Dicts to be freed.
++     */
++    may_garbage_collect = FALSE;
++#endif
++
++    return c;
+ }
+ 
+ /*
+@@ -1940,10 +1960,13 @@
+ 			c = Ctrl_C;
+ 		    flush_buffers(TRUE);	/* flush all typeahead */
+ 
+-		    /* Also record this character, it might be needed to
+-		     * get out of Insert mode. */
+-		    *typebuf.tb_buf = c;
+-		    gotchars(typebuf.tb_buf, 1);
++		    if (advance)
++		    {
++			/* Also record this character, it might be needed to
++			 * get out of Insert mode. */
++			*typebuf.tb_buf = c;
++			gotchars(typebuf.tb_buf, 1);
++		    }
+ 		    cmd_silent = FALSE;
+ 
+ 		    break;
+diff -Naur vim70.orig/src/globals.h vim70/src/globals.h
+--- vim70.orig/src/globals.h	2006-04-30 06:16:23.000000000 -0700
++++ vim70/src/globals.h	2006-10-21 21:09:09.000000000 -0700
+@@ -166,6 +166,7 @@
+ EXTERN int	emsg_off INIT(= 0);	    /* don't display errors for now,
+ 					       unless 'debug' is set. */
+ EXTERN int	info_message INIT(= FALSE); /* printing informative message */
++EXTERN int      msg_hist_off INIT(= FALSE); /* don't add messages to history */
+ #ifdef FEAT_EVAL
+ EXTERN int	emsg_skip INIT(= 0);	    /* don't display errors for
+ 					       expression that is skipped */
+@@ -300,9 +301,16 @@
+ #endif
+ 
+ #ifdef FEAT_EVAL
+-EXTERN scid_T	current_SID INIT(= 0);	    /* ID of script being sourced or
+-					       was sourced to define the
+-					       current function. */
++/* Garbage collection can only take place when we are sure there are no Lists
++ * or Dictionaries being used internally.  This is flagged with
++ * "may_garbage_collect" when we are at the toplevel.
++ * "want_garbage_collect" is set by the garbagecollect() function, which means
++ * we do garbage collection before waiting for a char at the toplevel. */
++EXTERN int	may_garbage_collect INIT(= FALSE);
++EXTERN int	want_garbage_collect INIT(= FALSE);
++
++/* ID of script being sourced or was sourced to define the current function. */
++EXTERN scid_T	current_SID INIT(= 0);
+ #endif
+ 
+ #if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
+@@ -1441,7 +1449,7 @@
+ EXTERN char_u e_readonly[]	INIT(= N_("E45: 'readonly' option is set (add ! to override)"));
+ #ifdef FEAT_EVAL
+ EXTERN char_u e_readonlyvar[]	INIT(= N_("E46: Cannot change read-only variable \"%s\""));
+-EXTERN char_u e_readonlysbx[]	INIT(= N_("E46: Cannot set variable in the sandbox: \"%s\""));
++EXTERN char_u e_readonlysbx[]	INIT(= N_("E794: Cannot set variable in the sandbox: \"%s\""));
+ #endif
+ #ifdef FEAT_QUICKFIX
+ EXTERN char_u e_readerrf[]	INIT(= N_("E47: Error while reading errorfile"));
+diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
+--- vim70.orig/src/gui_at_fs.c	2005-07-09 04:30:17.000000000 -0700
++++ vim70/src/gui_at_fs.c	2006-10-21 21:08:51.000000000 -0700
+@@ -1861,27 +1861,27 @@
+     XtPointer	pnew;
+ {
+     SFDir	*dir;
+-    int		nw;
++    int		nw = (int)(long)pnew;
+ 
+     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFvScrollHeight)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFvScrollHeight)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -SFlistSize;
++	    nw = -SFlistSize;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFvScrollHeight)
+-	    (int)(long)pnew = 1;
++	if (nw < SFvScrollHeight)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = SFlistSize;
++	    nw = SFlistSize;
+     }
+ #endif
+-    nw = dir->vOrigin + (int)(long)pnew;
++    nw += dir->vOrigin;
+ 
+     if (nw > dir->nEntries - SFlistSize)
+ 	nw = dir->nEntries - SFlistSize;
+@@ -1941,27 +1941,27 @@
+     XtPointer	pnew;
+ {
+     SFDir	*dir;
+-    int		nw;
++    int		nw = (int)(long)pnew;
+ 
+     dir = &(SFdirs[SFdirPtr + (int)(long)n]);
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFhScrollWidth)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFhScrollWidth)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -SFcharsPerEntry;
++	    nw = -SFcharsPerEntry;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFhScrollWidth)
+-	    (int)(long)pnew = 1;
++	if (nw < SFhScrollWidth)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = SFcharsPerEntry;
++	    nw = SFcharsPerEntry;
+     }
+ #endif
+-    nw = dir->hOrigin + (int)(long)pnew;
++    nw += dir->hOrigin;
+ 
+     if (nw > dir->nChars - SFcharsPerEntry)
+ 	nw = dir->nChars - SFcharsPerEntry;
+@@ -2038,26 +2038,26 @@
+     XtPointer	client_data;
+     XtPointer	pnew;
+ {
+-    int		nw;
++    int		nw = (int)(long)pnew;
+     float	f;
+ 
+ #ifdef FEAT_GUI_NEXTAW
+-    if ((int)(long)pnew < 0)
++    if (nw < 0)
+     {
+-	if ((int)(long)pnew > -SFpathScrollWidth)
+-	    (int)(long)pnew = -1;
++	if (nw > -SFpathScrollWidth)
++	    nw = -1;
+ 	else
+-	    (int)(long)pnew = -3;
++	    nw = -3;
+     }
+-    else if ((int)(long)pnew > 0)
++    else if (nw > 0)
+     {
+-	if ((int)(long)pnew < SFpathScrollWidth)
+-	    (int)(long)pnew = 1;
++	if (nw < SFpathScrollWidth)
++	    nw = 1;
+ 	else
+-	    (int)(long)pnew = 3;
++	    nw = 3;
+     }
+ #endif
+-    nw = SFdirPtr + (int)(long)pnew;
++    nw += SFdirPtr;
+ 
+     if (nw > SFdirEnd - 3)
+ 	nw = SFdirEnd - 3;
+diff -Naur vim70.orig/src/gui_beval.c vim70/src/gui_beval.c
+--- vim70.orig/src/gui_beval.c	2006-05-04 12:29:51.000000000 -0700
++++ vim70/src/gui_beval.c	2006-10-21 21:08:58.000000000 -0700
+@@ -926,7 +926,7 @@
+ #  define IS_NONPRINTABLE(c) (((c) < 0x20 && (c) != TAB && (c) != NL) \
+ 			      || (c) == DEL)
+     static void
+-set_printable_label_text(GtkLabel *label, char_u *msg)
++set_printable_label_text(GtkLabel *label, char_u *text)
+ {
+     char_u	    *convbuf = NULL;
+     char_u	    *buf;
+@@ -940,14 +940,14 @@
+     /* Convert to UTF-8 if it isn't already */
+     if (output_conv.vc_type != CONV_NONE)
+     {
+-	convbuf = string_convert(&output_conv, msg, NULL);
++	convbuf = string_convert(&output_conv, text, NULL);
+ 	if (convbuf != NULL)
+-	    msg = convbuf;
++	    text = convbuf;
+     }
+ 
+     /* First let's see how much we need to allocate */
+     len = 0;
+-    for (p = msg; *p != NUL; p += charlen)
++    for (p = text; *p != NUL; p += charlen)
+     {
+ 	if ((*p & 0x80) == 0)	/* be quick for ASCII */
+ 	{
+@@ -992,7 +992,7 @@
+ 				     (unsigned long)pixel, &color);
+ 
+ 	pdest = buf;
+-	p = msg;
++	p = text;
+ 	while (*p != NUL)
+ 	{
+ 	    /* Be quick for ASCII */
+diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
+--- vim70.orig/src/gui.c	2006-05-03 04:00:59.000000000 -0700
++++ vim70/src/gui.c	2006-10-21 21:09:09.000000000 -0700
+@@ -187,9 +187,10 @@
+ #endif
+ 
+ #ifdef FEAT_AUTOCMD
+-    /* If the GUI started successfully, trigger the GUIEnter event */
+-    if (gui.in_use)
+-	apply_autocmds(EVENT_GUIENTER, NULL, NULL, FALSE, curbuf);
++    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
++     * the GUIFailed event. */
++    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
++						   NULL, NULL, FALSE, curbuf);
+ #endif
+ 
+     --recursive;
+@@ -636,6 +637,7 @@
+ 
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) || defined(FEAT_GUI_MSWIN) \
+ 	|| defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC) || defined(PROTO)
++# define NEED_GUI_UPDATE_SCREEN 1
+ /*
+  * Called when the GUI shell is closed by the user.  If there are no changed
+  * files Vim exits, otherwise there will be a dialog to ask the user what to
+@@ -664,8 +666,7 @@
+ 
+     exiting = FALSE;
+     cmdmod = save_cmdmod;
+-    setcursor();		/* position cursor */
+-    out_flush();
++    gui_update_screen();	/* redraw, window may show changed buffer */
+ }
+ #endif
+ 
+@@ -2872,6 +2873,9 @@
+      */
+     if ((State == NORMAL || State == NORMAL_BUSY || (State & INSERT))
+ 	    && Y_2_ROW(y) >= topframe->fr_height
++# ifdef FEAT_WINDOWS
++						+ firstwin->w_winrow
++# endif
+ 	    && button != MOUSE_DRAG
+ # ifdef FEAT_MOUSESHAPE
+ 	    && !drag_status_line
+@@ -3733,6 +3737,12 @@
+     if (dont_scroll || input_available())
+ 	return;
+ #endif
++#ifdef FEAT_INS_EXPAND
++    /* Disallow scrolling the current window when the completion popup menu is
++     * visible. */
++    if ((sb->wp == NULL || sb->wp == curwin) && pum_visible())
++	return;
++#endif
+ 
+ #ifdef FEAT_RIGHTLEFT
+     if (sb->wp == NULL && curwin->w_p_rl)
+@@ -4207,6 +4217,12 @@
+ 	updateWindow(wp);   /* update window, status line, and cmdline */
+     }
+ 
++#ifdef FEAT_INS_EXPAND
++    /* May need to redraw the popup menu. */
++    if (pum_visible())
++	pum_redraw();
++#endif
++
+     return (wp == curwin && !equalpos(curwin->w_cursor, old_cursor));
+ }
+ 
+@@ -4515,7 +4531,7 @@
+     int		y;
+ {
+     win_T	*wp;
+-    char_u	st[6];
++    char_u	st[8];
+ 
+     /* Ignore this while still starting up. */
+     if (!gui.in_use || gui.starting)
+@@ -4603,11 +4619,11 @@
+     /* Don't move the mouse when it's left or right of the Vim window */
+     if (x < 0 || x > Columns * gui.char_width)
+ 	return;
++    if (y >= 0
+ # ifdef FEAT_WINDOWS
+-    if (Y_2_ROW(y) >= tabline_height())
+-# else
+-    if (y >= 0)
++	    && Y_2_ROW(y) >= tabline_height()
+ # endif
++       )
+ 	wp = xy2win(x, y);
+     if (wp != curwin && wp != NULL)	/* If in other than current window */
+     {
+@@ -4807,6 +4823,7 @@
+ #endif
+ 
+ #if defined(FIND_REPLACE_DIALOG) || defined(FEAT_SUN_WORKSHOP) \
++	|| defined(NEED_GUI_UPDATE_SCREEN) \
+ 	|| defined(PROTO)
+ /*
+  * Update the current window and the screen.
+diff -Naur vim70.orig/src/gui_gtk.c vim70/src/gui_gtk.c
+--- vim70.orig/src/gui_gtk.c	2006-05-05 04:52:52.000000000 -0700
++++ vim70/src/gui_gtk.c	2006-10-21 21:09:09.000000000 -0700
+@@ -957,15 +957,15 @@
+ get_menu_position(vimmenu_T *menu)
+ {
+     vimmenu_T	*node;
+-    int		index = 0;
++    int		idx = 0;
+ 
+     for (node = menu->parent->children; node != menu; node = node->next)
+     {
+ 	g_return_val_if_fail(node != NULL, -1);
+-	++index;
++	++idx;
+     }
+ 
+-    return index;
++    return idx;
+ }
+ #endif /* FEAT_TOOLBAR && HAVE_GTK2 */
+ 
+@@ -1275,18 +1275,13 @@
+     title = CONVERT_TO_UTF8(title);
+ # endif
+ 
+-    /* Concatenate "initdir" and "dflt". */
++    /* GTK has a bug, it only works with an absolute path. */
+     if (initdir == NULL || *initdir == NUL)
+ 	mch_dirname(dirbuf, MAXPATHL);
+-    else if (STRLEN(initdir) + 2 < MAXPATHL)
+-	STRCPY(dirbuf, initdir);
+-    else
++    else if (vim_FullName(initdir, dirbuf, MAXPATHL - 2, FALSE) == FAIL)
+ 	dirbuf[0] = NUL;
+     /* Always need a trailing slash for a directory. */
+     add_pathsep(dirbuf);
+-    if (dflt != NULL && *dflt != NUL
+-			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
+-	STRCAT(dirbuf, dflt);
+ 
+     /* If our pointer is currently hidden, then we should show it. */
+     gui_mch_mousehide(FALSE);
+@@ -1341,6 +1336,11 @@
+     else
+ 	gtk_window_set_title(GTK_WINDOW(gui.filedlg), (const gchar *)title);
+ 
++    /* Concatenate "initdir" and "dflt". */
++    if (dflt != NULL && *dflt != NUL
++			      && STRLEN(dirbuf) + 2 + STRLEN(dflt) < MAXPATHL)
++	STRCAT(dirbuf, dflt);
++
+     gtk_file_selection_set_filename(GTK_FILE_SELECTION(gui.filedlg),
+ 						      (const gchar *)dirbuf);
+ # ifndef HAVE_GTK2
+@@ -2127,7 +2127,7 @@
+     char    **ync;  /* "yes no cancel" */
+     char    **buttons;
+     int	    n_buttons = 0;
+-    int	    index;
++    int	    idx;
+ 
+     button_string = vim_strsave(button_string); /* must be writable */
+     if (button_string == NULL)
+@@ -2161,12 +2161,12 @@
+      * Well, apparently somebody changed his mind: with GTK 2.2.4 it works the
+      * other way around...
+      */
+-    for (index = 1; index <= n_buttons; ++index)
++    for (idx = 1; idx <= n_buttons; ++idx)
+     {
+ 	char	*label;
+ 	char_u	*label8;
+ 
+-	label = buttons[index - 1];
++	label = buttons[idx - 1];
+ 	/*
+ 	 * Perform some guesswork to find appropriate stock items for the
+ 	 * buttons.  We have to compare with a sample of the translated
+@@ -2188,7 +2188,7 @@
+ 	    else if (button_equal(label, "Cancel")) label = GTK_STOCK_CANCEL;
+ 	}
+ 	label8 = CONVERT_TO_UTF8((char_u *)label);
+-	gtk_dialog_add_button(dialog, (const gchar *)label8, index);
++	gtk_dialog_add_button(dialog, (const gchar *)label8, idx);
+ 	CONVERT_TO_UTF8_FREE(label8);
+     }
+ 
+diff -Naur vim70.orig/src/gui_gtk_x11.c vim70/src/gui_gtk_x11.c
+--- vim70.orig/src/gui_gtk_x11.c	2006-05-04 23:58:59.000000000 -0700
++++ vim70/src/gui_gtk_x11.c	2006-10-21 21:08:58.000000000 -0700
+@@ -3233,12 +3233,12 @@
+ on_select_tab(
+ 	GtkNotebook	*notebook,
+ 	GtkNotebookPage *page,
+-	gint		index,
++	gint		idx,
+ 	gpointer	data)
+ {
+     if (!ignore_tabline_evt)
+     {
+-	if (send_tabline_event(index + 1) && gtk_main_level() > 0)
++	if (send_tabline_event(idx + 1) && gtk_main_level() > 0)
+ 	    gtk_main_quit();
+     }
+ }
+@@ -5303,13 +5303,13 @@
+ # ifdef HAVE_GTK2
+     if (font != NOFONT)
+     {
+-	char	*name = pango_font_description_to_string(font);
++	char	*pangoname = pango_font_description_to_string(font);
+ 
+-	if (name != NULL)
++	if (pangoname != NULL)
+ 	{
+-	    char_u	*s = vim_strsave((char_u *)name);
++	    char_u	*s = vim_strsave((char_u *)pangoname);
+ 
+-	    g_free(name);
++	    g_free(pangoname);
+ 	    return s;
+ 	}
+     }
+@@ -6241,24 +6241,20 @@
+ {
+     GdkGCValues values;
+     GdkGC *invert_gc;
+-    GdkColor foreground;
+-    GdkColor background;
+ 
+     if (gui.drawarea->window == NULL)
+ 	return;
+ 
+-    foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
+-    background.pixel = gui.norm_pixel ^ gui.back_pixel;
+-
+-    values.foreground = foreground;
+-    values.background = background;
++    values.foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
++    values.background.pixel = gui.norm_pixel ^ gui.back_pixel;
+     values.function = GDK_XOR;
+     invert_gc = gdk_gc_new_with_values(gui.drawarea->window,
+ 				       &values,
+ 				       GDK_GC_FOREGROUND |
+ 				       GDK_GC_BACKGROUND |
+ 				       GDK_GC_FUNCTION);
+-    gdk_gc_set_exposures(invert_gc, gui.visibility != GDK_VISIBILITY_UNOBSCURED);
++    gdk_gc_set_exposures(invert_gc, gui.visibility !=
++						   GDK_VISIBILITY_UNOBSCURED);
+     gdk_draw_rectangle(gui.drawarea->window, invert_gc,
+ 		       TRUE,
+ 		       FILL_X(c), FILL_Y(r),
+diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
+--- vim70.orig/src/gui_xmebw.c	2006-04-30 08:32:32.000000000 -0700
++++ vim70/src/gui_xmebw.c	2006-10-21 21:08:51.000000000 -0700
+@@ -47,13 +47,13 @@
+ #include "gui_xmebwp.h"
+ 
+ /* Provide some missing wrappers, which are missed from the LessTif
+- * implementation.
++ * implementation.  Also missing in Motif 1.2 and earlier.
+  *
+  * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
+  * pixmap will not appear in it's caches properly. We cache the interresting
+  * values in XmEnhancedButtonPart instead ourself.
+  */
+-#ifdef LESSTIF_VERSION
++#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
+ # ifndef Lab_IsMenupane
+ #  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
+ 		    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
+@@ -480,7 +480,7 @@
+ 	    || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
+ 	return;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     {
+ 	XmDisplay	dpy;
+ 
+@@ -641,7 +641,7 @@
+     GC		tmp_gc = NULL;
+     Boolean	replaceGC = False;
+     Boolean	deadjusted = False;
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     XmDisplay	dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
+     Boolean	etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -726,7 +726,7 @@
+ 	if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
+ 		&& _XmGetInDragMode((Widget) eb))
+ 	{
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	    XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
+ 	    Boolean etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -810,7 +810,7 @@
+ 
+     if (Lab_IsMenupane(eb))
+     {
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
+ 	Boolean etched_in = dpy->display.enable_etched_in_menu;
+ #else
+@@ -1150,7 +1150,7 @@
+ Redisplay(Widget w, XEvent *event, Region region)
+ {
+     XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     XmDisplay		    dpy;
+     XtEnum		    default_button_emphasis;
+ #endif
+@@ -1162,7 +1162,7 @@
+     if (!XtIsRealized((Widget)eb))
+ 	return;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+     dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
+     default_button_emphasis = dpy->display.default_button_emphasis;
+ #endif
+@@ -1241,7 +1241,7 @@
+     {
+ 	int adjust = 0;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	/*
+ 	 *  NOTE: PushButton has two types of shadows: primitive-shadow and
+ 	 *  default-button-shadow.  If pushbutton is in a menu only primitive
+@@ -1289,7 +1289,7 @@
+ 			  adjust, adjust, rectwidth, rectheight, borderwidth);
+ 	    }
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 	    switch (default_button_emphasis)
+ 	    {
+ 		case XmINTERNAL_HIGHLIGHT:
+@@ -1365,7 +1365,7 @@
+ 		    default_button_shadow_thickness =
+ 			       eb->pushbutton.default_button_shadow_thickness;
+ 
+-#ifndef LESSTIF_VERSION
++#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
+ 		/*
+ 		 * Compute location of bounding box to contain the
+ 		 * defaultButtonShadow.
+diff -Naur vim70.orig/src/hardcopy.c vim70/src/hardcopy.c
+--- vim70.orig/src/hardcopy.c	2006-05-04 03:09:58.000000000 -0700
++++ vim70/src/hardcopy.c	2006-10-21 21:08:58.000000000 -0700
+@@ -1794,29 +1794,27 @@
+     static int
+ prt_resfile_next_line()
+ {
+-    int     index;
++    int     idx;
+ 
+     /* Move to start of next line and then find end of line */
+-    index = prt_resfile.line_end + 1;
+-    while (index < prt_resfile.len)
++    idx = prt_resfile.line_end + 1;
++    while (idx < prt_resfile.len)
+     {
+-	if (prt_resfile.buffer[index] != PSLF && prt_resfile.buffer[index]
+-									!= PSCR)
++	if (prt_resfile.buffer[idx] != PSLF && prt_resfile.buffer[idx] != PSCR)
+ 	    break;
+-	index++;
++	idx++;
+     }
+-    prt_resfile.line_start = index;
++    prt_resfile.line_start = idx;
+ 
+-    while (index < prt_resfile.len)
++    while (idx < prt_resfile.len)
+     {
+-	if (prt_resfile.buffer[index] == PSLF || prt_resfile.buffer[index]
+-									== PSCR)
++	if (prt_resfile.buffer[idx] == PSLF || prt_resfile.buffer[idx] == PSCR)
+ 	    break;
+-	index++;
++	idx++;
+     }
+-    prt_resfile.line_end = index;
++    prt_resfile.line_end = idx;
+ 
+-    return (index < prt_resfile.len);
++    return (idx < prt_resfile.len);
+ }
+ 
+     static int
+@@ -1837,14 +1835,14 @@
+ prt_resfile_skip_nonws(offset)
+     int     offset;
+ {
+-    int     index;
++    int     idx;
+ 
+-    index = prt_resfile.line_start + offset;
+-    while (index < prt_resfile.line_end)
++    idx = prt_resfile.line_start + offset;
++    while (idx < prt_resfile.line_end)
+     {
+-	if (isspace(prt_resfile.buffer[index]))
+-	    return index - prt_resfile.line_start;
+-	index++;
++	if (isspace(prt_resfile.buffer[idx]))
++	    return idx - prt_resfile.line_start;
++	idx++;
+     }
+     return -1;
+ }
+@@ -1853,14 +1851,14 @@
+ prt_resfile_skip_ws(offset)
+     int     offset;
+ {
+-    int     index;
++    int     idx;
+ 
+-    index = prt_resfile.line_start + offset;
+-    while (index < prt_resfile.line_end)
++    idx = prt_resfile.line_start + offset;
++    while (idx < prt_resfile.line_end)
+     {
+-	if (!isspace(prt_resfile.buffer[index]))
+-	    return index - prt_resfile.line_start;
+-	index++;
++	if (!isspace(prt_resfile.buffer[idx]))
++	    return idx - prt_resfile.line_start;
++	idx++;
+     }
+     return -1;
+ }
+@@ -2478,7 +2476,7 @@
+     char_u	*p_encoding;
+     struct prt_ps_encoding_S *p_mbenc;
+     struct prt_ps_encoding_S *p_mbenc_first;
+-    struct prt_ps_charset_S  *p_mbchar;
++    struct prt_ps_charset_S  *p_mbchar = NULL;
+ #endif
+ 
+ #if 0
+@@ -2516,7 +2514,6 @@
+     if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE)))
+     {
+ 	p_mbenc_first = NULL;
+-	p_mbchar = NULL;
+ 	for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
+ 	    if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
+ 								    &p_mbenc))
+diff -Naur vim70.orig/src/if_cscope.c vim70/src/if_cscope.c
+--- vim70.orig/src/if_cscope.c	2006-04-18 01:54:15.000000000 -0700
++++ vim70/src/if_cscope.c	2006-10-21 21:08:58.000000000 -0700
+@@ -989,8 +989,7 @@
+ {
+     int i;
+     char *cmd;
+-    char **matches, **contexts;
+-    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches, matched;
++    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
+ #ifdef FEAT_QUICKFIX
+     char cmdletter;
+     char *qfpos;
+@@ -1141,6 +1140,9 @@
+     else
+ #endif /* FEAT_QUICKFIX */
+     {
++	char **matches = NULL, **contexts = NULL;
++	int matched = 0;
++
+ 	/* read output */
+ 	cs_fill_results((char *)pat, totmatches, nummatches, &matches,
+ 							 &contexts, &matched);
+diff -Naur vim70.orig/src/if_perl.xs vim70/src/if_perl.xs
+--- vim70.orig/src/if_perl.xs	2006-03-06 10:57:16.000000000 -0800
++++ vim70/src/if_perl.xs	2006-10-21 21:08:55.000000000 -0700
+@@ -155,8 +155,8 @@
+ static int (*perl_run)(PerlInterpreter*);
+ static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
+ static void* (*Perl_get_context)(void);
+-static void (*Perl_croak)(pTHX_ const char*, ...) __attribute__((noreturn));
+-static void (*Perl_croak_nocontext)(const char*, ...) __attribute__((noreturn));
++static void (*Perl_croak)(pTHX_ const char*, ...);
++static void (*Perl_croak_nocontext)(const char*, ...);
+ static I32 (*Perl_dowantarray)(pTHX);
+ static void (*Perl_free_tmps)(pTHX);
+ static HV* (*Perl_gv_stashpv)(pTHX_ const char*, I32);
+@@ -1056,7 +1056,6 @@
+     int i;
+     long lnum;
+     char *line;
+-    buf_T *savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1069,14 +1068,20 @@
+ 	    line = SvPV(ST(i),PL_na);
+ 	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+ 	    {
+-		savebuf = curbuf;
+-		curbuf = vimbuf;
++		aco_save_T	aco;
++
++		/* set curwin/curbuf for "vimbuf" and save some things */
++		aucmd_prepbuf(&aco, vimbuf);
++
+ 		if (u_savesub(lnum) == OK)
+ 		{
+ 		    ml_replace(lnum, (char_u *)line, TRUE);
+ 		    changed_bytes(lnum, 0);
+ 		}
+-		curbuf = savebuf;
++
++		/* restore curwin/curbuf and a few other things */
++		aucmd_restbuf(&aco);
++		/* Careful: autocommands may have made "vimbuf" invalid! */
+ 	    }
+ 	}
+     }
+@@ -1087,7 +1092,6 @@
+ 
+     PREINIT:
+     long i, lnum = 0, count = 0;
+-    buf_T *savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1114,16 +1118,23 @@
+ 	    {
+ 		if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
+ 		{
+-		    savebuf = curbuf;
+-		    curbuf = vimbuf;
++		    aco_save_T	aco;
++
++		    /* set curwin/curbuf for "vimbuf" and save some things */
++		    aucmd_prepbuf(&aco, vimbuf);
++
+ 		    if (u_savedel(lnum, 1) == OK)
+ 		    {
+ 			ml_delete(lnum, 0);
+ 			deleted_lines_mark(lnum, 1L);
+-			if (savebuf == curbuf)
++			if (aco.save_buf == curbuf)
+ 			    check_cursor();
+ 		    }
+-		    curbuf = savebuf;
++
++		    /* restore curwin/curbuf and a few other things */
++		    aucmd_restbuf(&aco);
++		    /* Careful: autocommands may have made "vimbuf" invalid! */
++
+ 		    update_curbuf(VALID);
+ 		}
+ 	    }
+@@ -1138,7 +1149,6 @@
+     int		i;
+     long	lnum;
+     char	*line;
+-    buf_T	*savebuf;
+     PPCODE:
+     if (buf_valid(vimbuf))
+     {
+@@ -1151,14 +1161,21 @@
+ 	    line = SvPV(ST(i),PL_na);
+ 	    if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
+ 	    {
+-		savebuf = curbuf;
+-		curbuf = vimbuf;
++		aco_save_T	aco;
++
++		/* set curwin/curbuf for "vimbuf" and save some things */
++		aucmd_prepbuf(&aco, vimbuf);
++
+ 		if (u_inssub(lnum + 1) == OK)
+ 		{
+ 		    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
+ 		    appended_lines_mark(lnum, 1L);
+ 		}
+-		curbuf = savebuf;
++
++		/* restore curwin/curbuf and a few other things */
++		aucmd_restbuf(&aco);
++		/* Careful: autocommands may have made "vimbuf" invalid! */
++
+ 		update_curbuf(VALID);
+ 	    }
+ 	}
+diff -Naur vim70.orig/src/if_python.c vim70/src/if_python.c
+--- vim70.orig/src/if_python.c	2006-04-30 08:31:36.000000000 -0700
++++ vim70/src/if_python.c	2006-10-21 21:09:06.000000000 -0700
+@@ -1463,7 +1463,7 @@
+     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+ 	this->buf->b_python_ref = NULL;
+ 
+-    PyMem_DEL(self);
++    Py_DECREF(self);
+ }
+ 
+     static PyObject *
+@@ -1674,7 +1674,7 @@
+     bufr = (BufferObject *)BufferNew(buf);
+     if (bufr == NULL)
+     {
+-	PyMem_DEL(self);
++	Py_DECREF(self);
+ 	return NULL;
+     }
+     Py_INCREF(bufr);
+@@ -1690,7 +1690,7 @@
+ RangeDestructor(PyObject *self)
+ {
+     Py_DECREF(((RangeObject *)(self))->buf);
+-    PyMem_DEL(self);
++    Py_DECREF(self);
+ }
+ 
+     static PyObject *
+@@ -1944,7 +1944,7 @@
+     if (this->win && this->win != INVALID_WINDOW_VALUE)
+ 	this->win->w_python_ref = NULL;
+ 
+-    PyMem_DEL(self);
++    Py_DECREF(self);
+ }
+ 
+     static int
+diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
+--- vim70.orig/src/if_ruby.c	2006-04-30 08:37:52.000000000 -0700
++++ vim70/src/if_ruby.c	2006-10-21 21:08:55.000000000 -0700
+@@ -643,11 +643,14 @@
+ 
+ static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
+ {
+-    buf_T *savebuf = curbuf;
+-    char *line = STR2CSTR(str);
++    char	*line = STR2CSTR(str);
++    aco_save_T	aco;
++
++    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
+-	curbuf = buf;
+ 	if (u_savesub(n) == OK) {
+ 	    ml_replace(n, (char_u *)line, TRUE);
+ 	    changed();
+@@ -655,10 +658,15 @@
+ 	    syn_changed(n); /* recompute syntax hl. for this line */
+ #endif
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
+ 	return Qnil; /* For stop warning */
+     }
+@@ -676,12 +684,15 @@
+ 
+ static VALUE buffer_delete(VALUE self, VALUE num)
+ {
+-    buf_T *buf = get_buf(self);
+-    buf_T *savebuf = curbuf;
+-    long n = NUM2LONG(num);
++    buf_T	*buf = get_buf(self);
++    long	n = NUM2LONG(num);
++    aco_save_T	aco;
++
++    if (n > 0 && n <= buf->b_ml.ml_line_count)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n > 0 && n <= buf->b_ml.ml_line_count) {
+-	curbuf = buf;
+ 	if (u_savedel(n, 1) == OK) {
+ 	    ml_delete(n, 0);
+ 
+@@ -691,10 +702,15 @@
+ 
+ 	    changed();
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "index %d out of buffer", n);
+     }
+     return Qnil;
+@@ -702,13 +718,16 @@
+ 
+ static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
+ {
+-    buf_T *buf = get_buf(self);
+-    buf_T *savebuf = curbuf;
+-    char *line = STR2CSTR(str);
+-    long n = NUM2LONG(num);
++    buf_T	*buf = get_buf(self);
++    char	*line = STR2CSTR(str);
++    long	n = NUM2LONG(num);
++    aco_save_T	aco;
++
++    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
++    {
++	/* set curwin/curbuf for "buf" and save some things */
++	aucmd_prepbuf(&aco, buf);
+ 
+-    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
+-	curbuf = buf;
+ 	if (u_inssub(n + 1) == OK) {
+ 	    ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
+ 
+@@ -718,7 +737,11 @@
+ 
+ 	    changed();
+ 	}
+-	curbuf = savebuf;
++
++	/* restore curwin/curbuf and a few other things */
++	aucmd_restbuf(&aco);
++	/* Careful: autocommands may have made "buf" invalid! */
++
+ 	update_curbuf(NOT_VALID);
+     }
+     else {
+diff -Naur vim70.orig/src/macros.h vim70/src/macros.h
+--- vim70.orig/src/macros.h	2006-03-01 04:01:10.000000000 -0800
++++ vim70/src/macros.h	2006-10-21 21:09:01.000000000 -0700
+@@ -276,3 +276,9 @@
+ # define MB_CHARLEN(p)		STRLEN(p)
+ # define PTR2CHAR(p)		((int)*(p))
+ #endif
++
++#ifdef FEAT_AUTOCHDIR
++# define DO_AUTOCHDIR if (p_acd) do_autochdir();
++#else
++# define DO_AUTOCHDIR
++#endif
+diff -Naur vim70.orig/src/main.c vim70/src/main.c
+--- vim70.orig/src/main.c	2006-05-03 10:36:44.000000000 -0700
++++ vim70/src/main.c	2006-10-21 21:09:01.000000000 -0700
+@@ -564,7 +564,11 @@
+      */
+     if (p_lpl)
+     {
++# ifdef VMS	/* Somehow VMS doesn't handle the "**". */
++	source_runtime((char_u *)"plugin/*.vim", TRUE);
++# else
+ 	source_runtime((char_u *)"plugin/**/*.vim", TRUE);
++# endif
+ 	TIME_MSG("loading plugins");
+     }
+ #endif
+@@ -1126,6 +1130,16 @@
+ 	 */
+ 	update_curswant();
+ 
++#ifdef FEAT_EVAL
++	/*
++	 * May perform garbage collection when waiting for a character, but
++	 * only at the very toplevel.  Otherwise we may be using a List or
++	 * Dict internally somewhere.
++	 * "may_garbage_collect" is reset in vgetc() which is invoked through
++	 * do_exmode() and normal_cmd().
++	 */
++	may_garbage_collect = (!cmdwin && !noexmode);
++#endif
+ 	/*
+ 	 * If we're invoked as ex, do a round of ex commands.
+ 	 * Otherwise, get and execute a normal mode command.
+@@ -2281,7 +2295,7 @@
+     mparm_T	*parmp;
+ {
+ #ifdef FEAT_WINDOWS
+-    int		rewind;
++    int		dorewind;
+     int		done = 0;
+ 
+     /*
+@@ -2338,10 +2352,10 @@
+ 	++autocmd_no_leave;
+ #endif
+ #ifdef FEAT_WINDOWS
+-	rewind = TRUE;
++	dorewind = TRUE;
+ 	while (done++ < 1000)
+ 	{
+-	    if (rewind)
++	    if (dorewind)
+ 	    {
+ 		if (parmp->window_layout == WIN_TABS)
+ 		    goto_tabpage(1);
+@@ -2360,7 +2374,7 @@
+ 		    break;
+ 		curwin = curwin->w_next;
+ 	    }
+-	    rewind = FALSE;
++	    dorewind = FALSE;
+ #endif
+ 	    curbuf = curwin->w_buffer;
+ 	    if (curbuf->b_ml.ml_mfp == NULL)
+@@ -2381,7 +2395,7 @@
+ 		check_swap_exists_action();
+ #endif
+ #ifdef FEAT_AUTOCMD
+-		rewind = TRUE;		/* start again */
++		dorewind = TRUE;		/* start again */
+ #endif
+ 	    }
+ #ifdef FEAT_WINDOWS
+@@ -3208,10 +3222,15 @@
+      * Register for remote command execution with :serversend and --remote
+      * unless there was a -X or a --servername '' on the command line.
+      * Only register nongui-vim's with an explicit --servername argument.
++     * When running as root --servername is also required.
+      */
+     if (X_DISPLAY != NULL && parmp->servername != NULL && (
+ #  ifdef FEAT_GUI
+-		gui.in_use ||
++		(gui.in_use
++#   ifdef UNIX
++		 && getuid() != 0
++#   endif
++		) ||
+ #  endif
+ 		parmp->serverName_arg != NULL))
+     {
+diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
+--- vim70.orig/src/Makefile	2006-05-07 06:25:27.000000000 -0700
++++ vim70/src/Makefile	2006-10-21 21:09:00.000000000 -0700
+@@ -2177,6 +2177,7 @@
+ 	cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
+ 	if test -d $(RSRC_DIR); then \
+ 		cd $(SHADOWDIR); \
++		ln -s ../infplist.xml .; \
+ 		ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
+ 	fi
+ 	mkdir $(SHADOWDIR)/testdir
+@@ -2260,7 +2261,7 @@
+ auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+ 	CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
+ 
+-QUOTESED = sed -e 's/"/\\"/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
++QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+ auto/pathdef.c: Makefile auto/config.mk
+ 	-@echo creating $@
+ 	-@echo '/* pathdef.c */' > $@
+diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
+--- vim70.orig/src/mbyte.c	2006-04-30 04:51:01.000000000 -0700
++++ vim70/src/mbyte.c	2006-10-21 21:08:58.000000000 -0700
+@@ -311,7 +311,11 @@
+ 
+ #define IDX_MACROMAN	57
+     {"macroman",	ENC_8BIT + ENC_MACROMAN, 0},	/* Mac OS */
+-#define IDX_COUNT	58
++#define IDX_DECMCS	58
++    {"dec-mcs",		ENC_8BIT,		0},	/* DEC MCS */
++#define IDX_HPROMAN8	59
++    {"hp-roman8",	ENC_8BIT,		0},	/* HP Roman8 */
++#define IDX_COUNT	60
+ };
+ 
+ /*
+@@ -359,6 +363,8 @@
+     {"932",		IDX_CP932},
+     {"949",		IDX_CP949},
+     {"936",		IDX_CP936},
++    {"gbk",		IDX_CP936},
++    {"gb18030",		IDX_CP936},	/* only 99% the same */
+     {"950",		IDX_CP950},
+     {"eucjp",		IDX_EUC_JP},
+     {"unix-jis",	IDX_EUC_JP},
+@@ -386,6 +392,7 @@
+     {"950",		IDX_BIG5},
+ #endif
+     {"mac",		IDX_MACROMAN},
++    {"mac-roman",	IDX_MACROMAN},
+     {NULL,		0}
+ };
+ 
+@@ -3507,6 +3514,11 @@
+ 	add_to_input_buf(delkey, (int)sizeof(delkey));
+ }
+ 
++/*
++ * Move the cursor left by "num_move_back" characters.
++ * Note that ins_left() checks im_is_preediting() to avoid breaking undo for
++ * these K_LEFT keys.
++ */
+     static void
+ im_correct_cursor(int num_move_back)
+ {
+@@ -3734,8 +3746,7 @@
+     }
+     else if (cursor_index == 0 && preedit_string[0] == '\0')
+     {
+-	if (preedit_start_col == MAXCOL)
+-	    xim_has_preediting = FALSE;
++	xim_has_preediting = FALSE;
+ 
+ 	/* If at the start position (after typing backspace)
+ 	 * preedit_start_col must be reset. */
+@@ -3850,13 +3861,13 @@
+ 
+     if (preedit_string != NULL && attr_list != NULL)
+     {
+-	int index;
++	int idx;
+ 
+ 	/* Get the byte index as used by PangoAttrIterator */
+-	for (index = 0; col > 0 && preedit_string[index] != '\0'; --col)
+-	    index += utfc_ptr2len((char_u *)preedit_string + index);
++	for (idx = 0; col > 0 && preedit_string[idx] != '\0'; --col)
++	    idx += utfc_ptr2len((char_u *)preedit_string + idx);
+ 
+-	if (preedit_string[index] != '\0')
++	if (preedit_string[idx] != '\0')
+ 	{
+ 	    PangoAttrIterator	*iter;
+ 	    int			start, end;
+@@ -3869,7 +3880,7 @@
+ 	    {
+ 		pango_attr_iterator_range(iter, &start, &end);
+ 
+-		if (index >= start && index < end)
++		if (idx >= start && idx < end)
+ 		    char_attr |= translate_pango_attributes(iter);
+ 	    }
+ 	    while (pango_attr_iterator_next(iter));
+diff -Naur vim70.orig/src/memfile.c vim70/src/memfile.c
+--- vim70.orig/src/memfile.c	2006-03-06 00:59:15.000000000 -0800
++++ vim70/src/memfile.c	2006-10-21 21:09:06.000000000 -0700
+@@ -517,7 +517,7 @@
+ 	mf_ins_free(mfp, hp);	/* put *hp in the free list */
+ }
+ 
+-#if defined(__MORPHOS__)
++#if defined(__MORPHOS__) && defined(__libnix__)
+ /* function is missing in MorphOS libnix version */
+ extern unsigned long *__stdfiledes;
+ 
+@@ -677,15 +677,19 @@
+ #  else
+ #   if defined(_DCC) || defined(__GNUC__) || defined(__MORPHOS__)
+ 	{
+-#    if defined(__GNUC__) && !defined(__MORPHOS__)
++#    if defined(__GNUC__) && !defined(__MORPHOS__) && defined(__libnix__)
+ 	    /* Have function (in libnix at least),
+ 	     * but ain't got no prototype anywhere. */
+ 	    extern unsigned long fdtofh(int filedescriptor);
+ #    endif
++#    if !defined(__libnix__)
++	    fflush(NULL);
++#    else
+ 	    BPTR fh = (BPTR)fdtofh(mfp->mf_fd);
+ 
+ 	    if (fh != 0)
+ 		Flush(fh);
++#    endif
+ 	}
+ #   else /* assume Manx */
+ 	    Flush(_devtab[mfp->mf_fd].fd);
+diff -Naur vim70.orig/src/memline.c vim70/src/memline.c
+--- vim70.orig/src/memline.c	2006-04-20 14:00:21.000000000 -0700
++++ vim70/src/memline.c	2006-10-21 21:09:09.000000000 -0700
+@@ -215,7 +215,7 @@
+ #define ML_FLUSH	0x02	    /* flush locked block */
+ #define ML_SIMPLE(x)	(x & 0x10)  /* DEL, INS or FIND */
+ 
+-static void ml_upd_block0 __ARGS((buf_T *buf, int setfname));
++static void ml_upd_block0 __ARGS((buf_T *buf, int set_fname));
+ static void set_b0_fname __ARGS((ZERO_BL *, buf_T *buf));
+ static void set_b0_dir_flag __ARGS((ZERO_BL *b0p, buf_T *buf));
+ #ifdef FEAT_MBYTE
+@@ -679,9 +679,9 @@
+  * Update the timestamp or the B0_SAME_DIR flag of the .swp file.
+  */
+     static void
+-ml_upd_block0(buf, setfname)
++ml_upd_block0(buf, set_fname)
+     buf_T	*buf;
+-    int		setfname;
++    int		set_fname;
+ {
+     memfile_T	*mfp;
+     bhdr_T	*hp;
+@@ -695,7 +695,7 @@
+ 	EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
+     else
+     {
+-	if (setfname)
++	if (set_fname)
+ 	    set_b0_fname(b0p, buf);
+ 	else
+ 	    set_b0_dir_flag(b0p, buf);
+@@ -1633,6 +1633,7 @@
+     int		    fd;
+     struct block0   b0;
+     time_t	    x = (time_t)0;
++    char	    *p;
+ #ifdef UNIX
+     char_u	    uname[B0_UNAME_SIZE];
+ #endif
+@@ -1652,8 +1653,11 @@
+ #endif
+ 	    MSG_PUTS(_("             dated: "));
+ 	x = st.st_mtime;		    /* Manx C can't do &st.st_mtime */
+-	MSG_PUTS(ctime(&x));		    /* includes '\n' */
+-
++	p = ctime(&x);			    /* includes '\n' */
++	if (p == NULL)
++	    MSG_PUTS("(invalid)\n");
++	else
++	    MSG_PUTS(p);
+     }
+ 
+     /*
+@@ -3652,6 +3656,7 @@
+ {
+     struct stat st;
+     time_t	x, sx;
++    char	*p;
+ 
+     ++no_wait_return;
+     (void)EMSG(_("E325: ATTENTION"));
+@@ -3666,7 +3671,11 @@
+     {
+ 	MSG_PUTS(_("             dated: "));
+ 	x = st.st_mtime;    /* Manx C can't do &st.st_mtime */
+-	MSG_PUTS(ctime(&x));
++	p = ctime(&x);			    /* includes '\n' */
++	if (p == NULL)
++	    MSG_PUTS("(invalid)\n");
++	else
++	    MSG_PUTS(p);
+ 	if (sx != 0 && x > sx)
+ 	    MSG_PUTS(_("      NEWER than swap file!\n"));
+     }
+diff -Naur vim70.orig/src/menu.c vim70/src/menu.c
+--- vim70.orig/src/menu.c	2006-05-03 10:30:48.000000000 -0700
++++ vim70/src/menu.c	2006-10-21 21:08:56.000000000 -0700
+@@ -511,6 +511,14 @@
+ 	 * name (without mnemonic and accelerator text). */
+ 	next_name = menu_name_skip(name);
+ 	dname = menu_text(name, NULL, NULL);
++	if (dname == NULL)
++	    goto erret;
++	if (*dname == NUL)
++	{
++	    /* Only a mnemonic or accelerator is not valid. */
++	    EMSG(_("E792: Empty menu name"));
++	    goto erret;
++	}
+ 
+ 	/* See if it's already there */
+ 	lower_pri = menup;
+@@ -704,6 +712,7 @@
+ 	parent = menu;
+ 	name = next_name;
+ 	vim_free(dname);
++	dname = NULL;
+ 	if (pri_tab[pri_idx + 1] != -1)
+ 	    ++pri_idx;
+     }
+@@ -793,6 +802,22 @@
+ erret:
+     vim_free(path_name);
+     vim_free(dname);
++
++    /* Delete any empty submenu we added before discovering the error.  Repeat
++     * for higher levels. */
++    while (parent != NULL && parent->children == NULL)
++    {
++	if (parent->parent == NULL)
++	    menup = &root_menu;
++	else
++	    menup = &parent->parent->children;
++	for ( ; *menup != NULL && *menup != parent; menup = &((*menup)->next))
++	    ;
++	if (*menup == NULL) /* safety check */
++	    break;
++	parent = parent->parent;
++	free_menu(menup);
++    }
+     return FAIL;
+ }
+ 
+@@ -1753,6 +1778,27 @@
+ }
+ 
+ /*
++ * Check that a pointer appears in the menu tree.  Used to protect from using
++ * a menu that was deleted after it was selected but before the event was
++ * handled.
++ * Return OK or FAIL.  Used recursively.
++ */
++    int
++check_menu_pointer(root, menu_to_check)
++    vimmenu_T *root;
++    vimmenu_T *menu_to_check;
++{
++    vimmenu_T	*p;
++
++    for (p = root; p != NULL; p = p->next)
++	if (p == menu_to_check
++		|| (p->children != NULL
++		    && check_menu_pointer(p->children, menu_to_check) == OK))
++	    return OK;
++    return FAIL;
++}
++
++/*
+  * After we have started the GUI, then we can create any menus that have been
+  * defined.  This is done once here.  add_menu_path() may have already been
+  * called to define these menus, and may be called again.  This function calls
+diff -Naur vim70.orig/src/message.c vim70/src/message.c
+--- vim70.orig/src/message.c	2006-05-06 13:07:37.000000000 -0700
++++ vim70/src/message.c	2006-10-21 21:09:09.000000000 -0700
+@@ -53,7 +53,6 @@
+ static struct msg_hist *first_msg_hist = NULL;
+ static struct msg_hist *last_msg_hist = NULL;
+ static int msg_hist_len = 0;
+-static int msg_hist_off = FALSE;	/* don't add messages to history */
+ 
+ /*
+  * When writing messages to the screen, there are many different situations.
+@@ -1925,7 +1924,8 @@
+ 	     * If screen is completely filled and 'more' is set then wait
+ 	     * for a character.
+ 	     */
+-	    if (p_more && --lines_left == 0 && State != HITRETURN
++	    --lines_left;
++	    if (p_more && lines_left == 0 && State != HITRETURN
+ 					    && !msg_no_more && !exmode_active)
+ 	    {
+ #ifdef FEAT_CON_DIALOG
+@@ -4123,8 +4123,6 @@
+ 	    case 'c':
+ 	    case 's':
+ 		length_modifier = '\0';
+-		zero_padding = 0;    /* turn zero padding off for string
+-					conversions */
+ 		str_arg_l = 1;
+ 		switch (fmt_spec)
+ 		{
+@@ -4175,15 +4173,16 @@
+ 			str_arg_l = 0;
+ 		    else
+ 		    {
+-			/* memchr on HP does not like n > 2^31  !!! */
+-			char *q = memchr(str_arg, '\0',
++			/* Don't put the #if inside memchr(), it can be a
++			 * macro. */
+ #if SIZEOF_INT <= 2
+-				precision
++			char *q = memchr(str_arg, '\0', precision);
+ #else
+-				precision <= (size_t)0x7fffffffL ? precision
+-						       : (size_t)0x7fffffffL
++			/* memchr on HP does not like n > 2^31  !!! */
++			char *q = memchr(str_arg, '\0',
++				  precision <= (size_t)0x7fffffffL ? precision
++						       : (size_t)0x7fffffffL);
+ #endif
+-						       );
+ 			str_arg_l = (q == NULL) ? precision : q - str_arg;
+ 		    }
+ 		    break;
+diff -Naur vim70.orig/src/misc1.c vim70/src/misc1.c
+--- vim70.orig/src/misc1.c	2006-04-30 08:30:02.000000000 -0700
++++ vim70/src/misc1.c	2006-10-21 21:09:10.000000000 -0700
+@@ -2842,7 +2842,8 @@
+ 
+ #ifdef FEAT_AUTOCMD
+     /* when the cursor line is changed always trigger CursorMoved */
+-    if (lnum <= curwin->w_cursor.lnum && lnume > curwin->w_cursor.lnum)
++    if (lnum <= curwin->w_cursor.lnum
++		 && lnume + (xtra < 0 ? -xtra : xtra) > curwin->w_cursor.lnum)
+ 	last_cursormoved.lnum = 0;
+ #endif
+ }
+@@ -3016,6 +3017,7 @@
+     int		len = 0;
+     int		n;
+     int		save_mapped_ctrl_c = mapped_ctrl_c;
++    int		waited = 0;
+ 
+     mapped_ctrl_c = FALSE;	/* mappings are not used here */
+     for (;;)
+@@ -3034,11 +3036,16 @@
+ 	    /* Replace zero and CSI by a special key code. */
+ 	    n = fix_input_buffer(buf + len, n, FALSE);
+ 	    len += n;
++	    waited = 0;
+ 	}
++	else if (len > 0)
++	    ++waited;	    /* keep track of the waiting time */
+ 
+-	/* incomplete termcode: get more characters */
+-	if ((n = check_termcode(1, buf, len)) < 0)
++	/* Incomplete termcode and not timed out yet: get more characters */
++	if ((n = check_termcode(1, buf, len)) < 0
++	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ 	    continue;
++
+ 	/* found a termcode: adjust length */
+ 	if (n > 0)
+ 	    len = n;
+@@ -3196,14 +3203,12 @@
+     else
+ 	MSG_PUTS(_("Choice number (<Enter> cancels): "));
+ 
+-    /* Set the state such that text can be selected/copied/pasted. */
++    /* Set the state such that text can be selected/copied/pasted and we still
++     * get mouse events. */
+     save_cmdline_row = cmdline_row;
+-    cmdline_row = Rows - 1;
++    cmdline_row = 0;
+     save_State = State;
+-    if (mouse_used == NULL)
+-	State = CMDLINE;
+-    else
+-	State = NORMAL;
++    State = CMDLINE;
+ 
+     i = get_number(TRUE, mouse_used);
+     if (KeyTyped)
+@@ -4492,7 +4497,7 @@
+ 		int l = mb_ptr2len(s);
+ 
+ 		while (--l > 0)
+-		    *d++ = *s++;
++		    *d++ = *++s;
+ 	    }
+ # endif
+ 	}
+@@ -8070,9 +8075,20 @@
+ 		}
+ 		if (*that == '"' && *(that + 1) != NUL)
+ 		{
+-		    that++;
+-		    while (*that && (*that != '"' || *(that - 1) == '\\'))
+-			++that;
++		    while (*++that && *that != '"')
++		    {
++			/* skipping escaped characters in the string */
++			if (*that == '\\')
++			{
++			    if (*++that == NUL)
++				break;
++			    if (that[1] == NUL)
++			    {
++				++that;
++				break;
++			    }
++			}
++		    }
+ 		}
+ 		if (*that == '(' || *that == '[')
+ 		    ++parencount;
+diff -Naur vim70.orig/src/misc2.c vim70/src/misc2.c
+--- vim70.orig/src/misc2.c	2006-05-04 05:12:38.000000000 -0700
++++ vim70/src/misc2.c	2006-10-21 21:09:06.000000000 -0700
+@@ -1229,6 +1229,94 @@
+     return escaped_string;
+ }
+ 
++#if defined(FEAT_EVAL) || defined(PROTO)
++/*
++ * Escape "string" for use as a shell argument with system().
++ * This uses single quotes, except when we know we need to use double qoutes
++ * (MS-DOS and MS-Windows without 'shellslash' set).
++ * Returns the result in allocated memory, NULL if we have run out.
++ */
++    char_u *
++vim_strsave_shellescape(string)
++    char_u	*string;
++{
++    unsigned	length;
++    char_u	*p;
++    char_u	*d;
++    char_u	*escaped_string;
++
++    /* First count the number of extra bytes required. */
++    length = STRLEN(string) + 3;	/* two quotes and the trailing NUL */
++    for (p = string; *p != NUL; mb_ptr_adv(p))
++    {
++# if defined(WIN32) || defined(WIN16) || defined(DOS)
++	if (!p_ssl)
++	{
++	    if (*p == '"')
++		++length;		/* " -> "" */
++	}
++	else
++# endif
++	if (*p == '\'')
++	    length += 3;		/* ' => '\'' */
++    }
++
++    /* Allocate memory for the result and fill it. */
++    escaped_string = alloc(length);
++    if (escaped_string != NULL)
++    {
++	d = escaped_string;
++
++	/* add opening quote */
++# if defined(WIN32) || defined(WIN16) || defined(DOS)
++	if (!p_ssl)
++	    *d++ = '"';
++	else
++# endif
++	    *d++ = '\'';
++
++	for (p = string; *p != NUL; )
++	{
++# if defined(WIN32) || defined(WIN16) || defined(DOS)
++	    if (!p_ssl)
++	    {
++		if (*p == '"')
++		{
++		    *d++ = '"';
++		    *d++ = '"';
++		    ++p;
++		    continue;
++		}
++	    }
++	    else
++# endif
++	    if (*p == '\'')
++	    {
++		*d++='\'';
++		*d++='\\';
++		*d++='\'';
++		*d++='\'';
++		++p;
++		continue;
++	    }
++
++	    MB_COPY_CHAR(p, d);
++	}
++
++	/* add terminating quote and finish with a NUL */
++# if defined(WIN32) || defined(WIN16) || defined(DOS)
++	if (!p_ssl)
++	    *d++ = '"';
++	else
++# endif
++	    *d++ = '\'';
++	*d = NUL;
++    }
++
++    return escaped_string;
++}
++#endif
++
+ /*
+  * Like vim_strsave(), but make all characters uppercase.
+  * This uses ASCII lower-to-upper case translation, language independent.
+diff -Naur vim70.orig/src/netbeans.c vim70/src/netbeans.c
+--- vim70.orig/src/netbeans.c	2006-04-22 11:00:05.000000000 -0700
++++ vim70/src/netbeans.c	2006-10-21 21:08:58.000000000 -0700
+@@ -103,7 +103,7 @@
+ static int  inputHandler = -1;		/* simply ret.value of WSAAsyncSelect() */
+ extern HWND s_hwnd;			/* Gvim's Window handle */
+ #endif
+-static int cmdno;			/* current command number for reply */
++static int r_cmdno;			/* current command number for reply */
+ static int haveConnection = FALSE;	/* socket is connected and
+ 					   initialization is done */
+ #ifdef FEAT_GUI_MOTIF
+@@ -832,11 +832,11 @@
+ 	return;
+     }
+ 
+-    cmdno = strtol(q, &q, 10);
++    r_cmdno = strtol(q, &q, 10);
+ 
+     q = (char *)skipwhite((char_u *)q);
+ 
+-    if (nb_do_cmd(bufno, (char_u *)verb, isfunc, cmdno, (char_u *)q) == FAIL)
++    if (nb_do_cmd(bufno, (char_u *)verb, isfunc, r_cmdno, (char_u *)q) == FAIL)
+     {
+ #ifdef NBDEBUG
+ 	/*
+@@ -1008,11 +1008,11 @@
+ 	if (netbeansForcedQuit)
+ 	{
+ 	    /* mark as unmodified so NetBeans won't put up dialog on "killed" */
+-	    sprintf(buf, "%d:unmodified=%d\n", i, cmdno);
++	    sprintf(buf, "%d:unmodified=%d\n", i, r_cmdno);
+ 	    nbdebug(("EVT: %s", buf));
+ 	    nb_send(buf, "netbeans_end");
+ 	}
+-	sprintf(buf, "%d:killed=%d\n", i, cmdno);
++	sprintf(buf, "%d:killed=%d\n", i, r_cmdno);
+ 	nbdebug(("EVT: %s", buf));
+ /*	nb_send(buf, "netbeans_end");    avoid "write failed" messages */
+ 	if (sd >= 0)
+@@ -1986,6 +1986,8 @@
+ 	    if (buf->bufp != NULL)
+ 		do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD,
+ 						     buf->bufp->b_fnum, TRUE);
++	    buf->bufp = NULL;
++	    buf->initDone = FALSE;
+ 	    doupdate = 1;
+ /* =====================================================================*/
+ 	}
+@@ -2561,7 +2563,7 @@
+ 	    if (p != NULL)
+ 	    {
+ 		vim_snprintf(buf, sizeof(buf),
+-				       "0:balloonText=%d \"%s\"\n", cmdno, p);
++				       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+ 		vim_free(p);
+ 	    }
+ 	    nbdebug(("EVT: %s", buf));
+@@ -2615,7 +2617,7 @@
+ 
+     if (haveConnection)
+     {
+-	sprintf(buf, "0:disconnect=%d\n", cmdno);
++	sprintf(buf, "0:disconnect=%d\n", r_cmdno);
+ 	nbdebug(("EVT: %s", buf));
+ 	nb_send(buf, "netbeans_disconnect");
+     }
+@@ -2634,7 +2636,7 @@
+ 	return;
+ 
+     sprintf(buf, "0:geometry=%d %d %d %d %d\n",
+-		    cmdno, (int)Columns, (int)Rows, new_x, new_y);
++		    r_cmdno, (int)Columns, (int)Rows, new_x, new_y);
+     /*nbdebug(("EVT: %s", buf)); happens too many times during a move */
+     nb_send(buf, "netbeans_frame_moved");
+ }
+@@ -2743,7 +2745,7 @@
+     if (bufno <= 0)
+ 	return;
+ 
+-    sprintf(buffer, "%d:killed=%d\n", bufno, cmdno);
++    sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno);
+ 
+     nbdebug(("EVT: %s", buffer));
+ 
+@@ -2817,7 +2819,8 @@
+     if (p != NULL)
+     {
+ 	buf = alloc(128 + 2*newlen);
+-	sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n", bufno, cmdno, off, p);
++	sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n",
++						      bufno, r_cmdno, off, p);
+ 	nbdebug(("EVT: %s", buf));
+ 	nb_send((char *)buf, "netbeans_inserted");
+ 	vim_free(p);
+@@ -2859,7 +2862,7 @@
+ 
+     off = pos2off(bufp, &pos);
+ 
+-    sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, cmdno, off, len);
++    sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, r_cmdno, off, len);
+     nbdebug(("EVT: %s", buf));
+     nb_send((char *)buf, "netbeans_removed");
+ }
+@@ -2884,7 +2887,7 @@
+ 
+     nbbuf->modified = 0;
+ 
+-    sprintf((char *)buf, "%d:unmodified=%d\n", bufno, cmdno);
++    sprintf((char *)buf, "%d:unmodified=%d\n", bufno, r_cmdno);
+     nbdebug(("EVT: %s", buf));
+     nb_send((char *)buf, "netbeans_unmodified");
+ #endif
+@@ -2908,11 +2911,11 @@
+ 	long off = pos2off(curbuf, &curwin->w_cursor);
+ 
+ 	/* sync the cursor position */
+-	sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
++	sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
+ 	nbdebug(("EVT: %s", buf));
+ 	nb_send(buf, "netbeans_button_release[newDotAndMark]");
+ 
+-	sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, cmdno,
++	sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, r_cmdno,
+ 				    button, (long)curwin->w_cursor.lnum, col);
+ 	nbdebug(("EVT: %s", buf));
+ 	nb_send(buf, "netbeans_button_release");
+@@ -2973,7 +2976,7 @@
+ 
+     /* sync the cursor position */
+     off = pos2off(curbuf, &curwin->w_cursor);
+-    sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
++    sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
+     nbdebug(("EVT: %s", buf));
+     nb_send(buf, "netbeans_keycommand");
+ 
+@@ -2984,13 +2987,13 @@
+ 
+     /* now send keyCommand event */
+     vim_snprintf(buf, sizeof(buf), "%d:keyCommand=%d \"%s\"\n",
+-						       bufno, cmdno, keyName);
++						     bufno, r_cmdno, keyName);
+     nbdebug(("EVT: %s", buf));
+     nb_send(buf, "netbeans_keycommand");
+ 
+     /* New: do both at once and include the lnum/col. */
+     vim_snprintf(buf, sizeof(buf), "%d:keyAtPos=%d \"%s\" %ld %ld/%ld\n",
+-	    bufno, cmdno, keyName,
++	    bufno, r_cmdno, keyName,
+ 		off, (long)curwin->w_cursor.lnum, (long)curwin->w_cursor.col);
+     nbdebug(("EVT: %s", buf));
+     nb_send(buf, "netbeans_keycommand");
+@@ -3013,7 +3016,7 @@
+ 
+     nbbuf->modified = 0;
+ 
+-    sprintf((char *)buf, "%d:save=%d\n", bufno, cmdno);
++    sprintf((char *)buf, "%d:save=%d\n", bufno, r_cmdno);
+     nbdebug(("EVT: %s", buf));
+     nb_send((char *)buf, "netbeans_save_buffer");
+ }
+@@ -3037,7 +3040,7 @@
+     if (nbbuf->insertDone)
+ 	nbbuf->modified = 1;
+ 
+-    sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, cmdno);
++    sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, r_cmdno);
+     nbdebug(("EVT(suppressed): %s", buf));
+ /*     nb_send(buf, "netbeans_deleted_all_lines"); */
+ }
+diff -Naur vim70.orig/src/normal.c vim70/src/normal.c
+--- vim70.orig/src/normal.c	2006-04-29 06:11:18.000000000 -0700
++++ vim70/src/normal.c	2006-10-21 21:09:11.000000000 -0700
+@@ -1477,14 +1477,17 @@
+ 	}
+ 	else if (VIsual_active)
+ 	{
+-	    /* Save the current VIsual area for '< and '> marks, and "gv" */
+-	    curbuf->b_visual.vi_start = VIsual;
+-	    curbuf->b_visual.vi_end = curwin->w_cursor;
+-	    curbuf->b_visual.vi_mode = VIsual_mode;
+-	    curbuf->b_visual.vi_curswant = curwin->w_curswant;
++	    if (!gui_yank)
++	    {
++		/* Save the current VIsual area for '< and '> marks, and "gv" */
++		curbuf->b_visual.vi_start = VIsual;
++		curbuf->b_visual.vi_end = curwin->w_cursor;
++		curbuf->b_visual.vi_mode = VIsual_mode;
++		curbuf->b_visual.vi_curswant = curwin->w_curswant;
+ # ifdef FEAT_EVAL
+-	    curbuf->b_visual_mode_eval = VIsual_mode;
++		curbuf->b_visual_mode_eval = VIsual_mode;
+ # endif
++	    }
+ 
+ 	    /* In Select mode, a linewise selection is operated upon like a
+ 	     * characterwise selection. */
+@@ -2377,11 +2380,20 @@
+ 	    /*
+ 	     * If visual was active, yank the highlighted text and put it
+ 	     * before the mouse pointer position.
++	     * In Select mode replace the highlighted text with the clipboard.
+ 	     */
+ 	    if (VIsual_active)
+ 	    {
+-		stuffcharReadbuff('y');
+-		stuffcharReadbuff(K_MIDDLEMOUSE);
++		if (VIsual_select)
++		{
++		    stuffcharReadbuff(Ctrl_G);
++		    stuffReadbuff((char_u *)"\"+p");
++		}
++		else
++		{
++		    stuffcharReadbuff('y');
++		    stuffcharReadbuff(K_MIDDLEMOUSE);
++		}
+ 		do_always = TRUE;	/* ignore 'mouse' setting next time */
+ 		return FALSE;
+ 	    }
+@@ -2504,7 +2516,8 @@
+ 	     * NOTE: Ignore right button down and drag mouse events.
+ 	     * Windows only shows the popup menu on the button up event.
+ 	     */
+-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON)
++#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \
++			  || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
+ 	    if (!is_click)
+ 		return FALSE;
+ #endif
+@@ -4126,7 +4139,7 @@
+     int		save_p_ws;
+     int		save_p_scs;
+     int		retval = OK;
+-    int		incl;
++    int		incll;
+ 
+     if ((pat = alloc(len + 7)) == NULL)
+ 	return FAIL;
+@@ -4146,7 +4159,7 @@
+      * With "gd" Search back for the start of the current function, then go
+      * back until a blank line.  If this fails go to line 1.
+      */
+-    if (!locally || !findpar(&incl, BACKWARD, 1L, '{', FALSE))
++    if (!locally || !findpar(&incll, BACKWARD, 1L, '{', FALSE))
+     {
+ 	setpcmark();			/* Set in findpar() otherwise */
+ 	curwin->w_cursor.lnum = 1;
+diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
+--- vim70.orig/src/ops.c	2006-04-30 08:13:44.000000000 -0700
++++ vim70/src/ops.c	2006-10-21 21:09:11.000000000 -0700
+@@ -770,6 +770,7 @@
+ {
+     char_u	*expr_copy;
+     char_u	*rv;
++    static int	nested = 0;
+ 
+     if (expr_line == NULL)
+ 	return NULL;
+@@ -780,7 +781,14 @@
+     if (expr_copy == NULL)
+ 	return NULL;
+ 
++    /* When we are invoked recursively limit the evaluation to 10 levels.
++     * Then return the string as-is. */
++    if (nested >= 10)
++	return expr_copy;
++
++    ++nested;
+     rv = eval_to_string(expr_copy, NULL, TRUE);
++    --nested;
+     vim_free(expr_copy);
+     return rv;
+ }
+@@ -1472,9 +1480,10 @@
+  * return FAIL for failure, OK otherwise
+  */
+     int
+-cmdline_paste_reg(regname, literally)
++cmdline_paste_reg(regname, literally, remcr)
+     int regname;
+     int literally;	/* Insert text literally instead of "as typed" */
++    int remcr;		/* don't add trailing CR */
+ {
+     long	i;
+ 
+@@ -1486,8 +1495,13 @@
+     {
+ 	cmdline_paste_str(y_current->y_array[i], literally);
+ 
+-	/* insert ^M between lines and after last line if type is MLINE */
+-	if (y_current->y_type == MLINE || i < y_current->y_size - 1)
++	/* Insert ^M between lines and after last line if type is MLINE.
++	 * Don't do this when "remcr" is TRUE and the next line is empty. */
++	if (y_current->y_type == MLINE
++		|| (i < y_current->y_size - 1
++		    && !(remcr
++			&& i == y_current->y_size - 2
++			&& *y_current->y_array[i + 1] == NUL)))
+ 	    cmdline_paste_str((char_u *)"\r", literally);
+ 
+ 	/* Check for CTRL-C, in case someone tries to paste a few thousand
+@@ -2413,6 +2427,7 @@
+ 	else
+ 	{
+ 	    curwin->w_cursor = oap->end;
++	    check_cursor_col();
+ 
+ 	    /* Works just like an 'i'nsert on the next character. */
+ 	    if (!lineempty(curwin->w_cursor.lnum)
+@@ -3492,8 +3507,15 @@
+ # endif
+ 	if (flags & PUT_CURSEND)
+ 	{
++	    colnr_T len;
++
+ 	    curwin->w_cursor = curbuf->b_op_end;
+ 	    curwin->w_cursor.col++;
++
++	    /* in Insert mode we might be after the NUL, correct for that */
++	    len = (colnr_T)STRLEN(ml_get_curline());
++	    if (curwin->w_cursor.col > len)
++		curwin->w_cursor.col = len;
+ 	}
+ 	else
+ 	    curwin->w_cursor.lnum = lnum;
+diff -Naur vim70.orig/src/option.c vim70/src/option.c
+--- vim70.orig/src/option.c	2006-05-03 10:32:28.000000000 -0700
++++ vim70/src/option.c	2006-10-21 21:09:11.000000000 -0700
+@@ -2294,7 +2294,7 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    },
+-    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
++    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
+ #ifdef FEAT_SPELL
+ 			    (char_u *)&p_sps, PV_NONE,
+ 			    {(char_u *)"best", (char_u *)0L}
+@@ -3397,7 +3397,7 @@
+ 	}
+ 	else if (flags & P_NUM)
+ 	{
+-	    if (varp == (char_u *)PV_SCROLL)
++	    if (options[opt_idx].indir == PV_SCROLL)
+ 		win_comp_scroll(curwin);
+ 	    else
+ 	    {
+@@ -5227,13 +5227,13 @@
+ 	    case PV_STL:	return &curwin->w_p_stl_flags;
+ #endif
+ #ifdef FEAT_EVAL
++# ifdef FEAT_FOLDING
+ 	    case PV_FDE:	return &curwin->w_p_fde_flags;
+ 	    case PV_FDT:	return &curwin->w_p_fdt_flags;
++# endif
+ # ifdef FEAT_BEVAL
+ 	    case PV_BEXPR:	return &curbuf->b_p_bexpr_flags;
+ # endif
+-#endif
+-#if defined(FEAT_EVAL)
+ # if defined(FEAT_CINDENT)
+ 	    case PV_INDE:	return &curbuf->b_p_inde_flags;
+ # endif
+@@ -5268,45 +5268,46 @@
+     char_u	*s;
+     char_u	**varp;
+     int		both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
++    int		idx = opt_idx;
+ 
+-    if (opt_idx == -1)		/* use name */
++    if (idx == -1)		/* use name */
+     {
+-	opt_idx = findoption(name);
+-	if (opt_idx < 0)	/* not found (should not happen) */
++	idx = findoption(name);
++	if (idx < 0)	/* not found (should not happen) */
+ 	{
+ 	    EMSG2(_(e_intern2), "set_string_option_direct()");
+ 	    return;
+ 	}
+     }
+ 
+-    if (options[opt_idx].var == NULL)	/* can't set hidden option */
++    if (options[idx].var == NULL)	/* can't set hidden option */
+ 	return;
+ 
+     s = vim_strsave(val);
+     if (s != NULL)
+     {
+-	varp = (char_u **)get_varp_scope(&(options[opt_idx]),
++	varp = (char_u **)get_varp_scope(&(options[idx]),
+ 					       both ? OPT_LOCAL : opt_flags);
+-	if ((opt_flags & OPT_FREE) && (options[opt_idx].flags & P_ALLOCED))
++	if ((opt_flags & OPT_FREE) && (options[idx].flags & P_ALLOCED))
+ 	    free_string_option(*varp);
+ 	*varp = s;
+ 
+ 	/* For buffer/window local option may also set the global value. */
+ 	if (both)
+-	    set_string_option_global(opt_idx, varp);
++	    set_string_option_global(idx, varp);
+ 
+-	options[opt_idx].flags |= P_ALLOCED;
++	options[idx].flags |= P_ALLOCED;
+ 
+ 	/* When setting both values of a global option with a local value,
+ 	 * make the local value empty, so that the global value is used. */
+-	if (((int)options[opt_idx].indir & PV_BOTH) && both)
++	if (((int)options[idx].indir & PV_BOTH) && both)
+ 	{
+ 	    free_string_option(*varp);
+ 	    *varp = empty_option;
+ 	}
+ # ifdef FEAT_EVAL
+ 	if (set_sid != SID_NONE)
+-	    set_option_scriptID_idx(opt_idx, opt_flags,
++	    set_option_scriptID_idx(idx, opt_flags,
+ 					set_sid == 0 ? current_SID : set_sid);
+ # endif
+     }
+@@ -6325,7 +6326,8 @@
+ 	    else
+ 		errmsg = check_stl_option(p_ruf);
+ 	}
+-	else
++	/* check 'statusline' only if it doesn't start with "%!" */
++	else if (varp != &p_stl || s[0] != '%' || s[1] != '!')
+ 	    errmsg = check_stl_option(s);
+ 	if (varp == &p_ruf && errmsg == NULL)
+ 	    comp_col();
+@@ -7324,9 +7326,8 @@
+ #ifdef FEAT_AUTOCHDIR
+     else if ((int *)varp == &p_acd)
+     {
+-	if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	    shorten_fnames(TRUE);
++	/* Change directories when the 'acd' option is set now. */
++	DO_AUTOCHDIR
+     }
+ #endif
+ 
+diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
+--- vim70.orig/src/os_unix.c	2006-05-01 01:13:15.000000000 -0700
++++ vim70/src/os_unix.c	2006-10-21 21:08:58.000000000 -0700
+@@ -3934,7 +3934,7 @@
+ 		    {
+ 			linenr_T    lnum = curbuf->b_op_start.lnum;
+ 			int	    written = 0;
+-			char_u	    *p = ml_get(lnum);
++			char_u	    *lp = ml_get(lnum);
+ 			char_u	    *s;
+ 			size_t	    l;
+ 
+@@ -3942,17 +3942,17 @@
+ 			close(fromshell_fd);
+ 			for (;;)
+ 			{
+-			    l = STRLEN(p + written);
++			    l = STRLEN(lp + written);
+ 			    if (l == 0)
+ 				len = 0;
+-			    else if (p[written] == NL)
++			    else if (lp[written] == NL)
+ 				/* NL -> NUL translation */
+ 				len = write(toshell_fd, "", (size_t)1);
+ 			    else
+ 			    {
+-				s = vim_strchr(p + written, NL);
+-				len = write(toshell_fd, (char *)p + written,
+-					   s == NULL ? l : s - (p + written));
++				s = vim_strchr(lp + written, NL);
++				len = write(toshell_fd, (char *)lp + written,
++					   s == NULL ? l : s - (lp + written));
+ 			    }
+ 			    if (len == l)
+ 			    {
+@@ -3973,7 +3973,7 @@
+ 				    toshell_fd = -1;
+ 				    break;
+ 				}
+-				p = ml_get(lnum);
++				lp = ml_get(lnum);
+ 				written = 0;
+ 			    }
+ 			    else if (len > 0)
+@@ -5757,8 +5757,13 @@
+     int		retval_int = 0;
+     int		success = FALSE;
+ 
+-    /* Get a handle to the DLL module. */
++    /*
++     * Get a handle to the DLL module.
++     */
+ # if defined(USE_DLOPEN)
++    /* First clear any error, it's not cleared by the dlopen() call. */
++    (void)dlerror();
++
+     hinstLib = dlopen((char *)libname, RTLD_LAZY
+ #  ifdef RTLD_LOCAL
+ 	    | RTLD_LOCAL
+diff -Naur vim70.orig/src/popupmnu.c vim70/src/popupmnu.c
+--- vim70.orig/src/popupmnu.c	2006-04-20 13:18:37.000000000 -0700
++++ vim70/src/popupmnu.c	2006-10-21 21:08:56.000000000 -0700
+@@ -552,6 +552,9 @@
+ {
+     pum_array = NULL;
+     redraw_all_later(SOME_VALID);
++#ifdef FEAT_WINDOWS
++    redraw_tabline = TRUE;
++#endif
+     status_redraw_all();
+ }
+ 
+diff -Naur vim70.orig/src/proto/buffer.pro vim70/src/proto/buffer.pro
+--- vim70.orig/src/proto/buffer.pro	2006-05-07 06:08:29.000000000 -0700
++++ vim70/src/proto/buffer.pro	2006-10-21 21:09:01.000000000 -0700
+@@ -10,6 +10,7 @@
+ extern int do_buffer __ARGS((int action, int start, int dir, int count, int forceit));
+ extern void set_curbuf __ARGS((buf_T *buf, int action));
+ extern void enter_buffer __ARGS((buf_T *buf));
++extern void do_autochdir __ARGS((void));
+ extern buf_T *buflist_new __ARGS((char_u *ffname, char_u *sfname, linenr_T lnum, int flags));
+ extern void free_buf_options __ARGS((buf_T *buf, int free_p_ff));
+ extern int buflist_getfile __ARGS((int n, linenr_T lnum, int options, int forceit));
+diff -Naur vim70.orig/src/proto/eval.pro vim70/src/proto/eval.pro
+--- vim70.orig/src/proto/eval.pro	2006-05-07 06:08:33.000000000 -0700
++++ vim70/src/proto/eval.pro	2006-10-21 21:09:10.000000000 -0700
+@@ -44,7 +44,7 @@
+ extern char_u *get_user_var_name __ARGS((expand_T *xp, int idx));
+ extern list_T *list_alloc __ARGS((void));
+ extern void list_unref __ARGS((list_T *l));
+-extern void list_free __ARGS((list_T *l));
++extern void list_free __ARGS((list_T *l, int recurse));
+ extern dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+ extern int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ extern int garbage_collect __ARGS((void));
+diff -Naur vim70.orig/src/proto/menu.pro vim70/src/proto/menu.pro
+--- vim70.orig/src/proto/menu.pro	2006-05-07 06:08:51.000000000 -0700
++++ vim70/src/proto/menu.pro	2006-10-21 21:08:56.000000000 -0700
+@@ -10,6 +10,7 @@
+ extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
+ extern int menu_is_toolbar __ARGS((char_u *name));
+ extern int menu_is_separator __ARGS((char_u *name));
++extern int check_menu_pointer __ARGS((vimmenu_T *root, vimmenu_T *menu_to_check));
+ extern void gui_create_initial_menus __ARGS((vimmenu_T *menu));
+ extern void gui_update_menus __ARGS((int modes));
+ extern int gui_is_menu_shortcut __ARGS((int key));
+diff -Naur vim70.orig/src/proto/misc2.pro vim70/src/proto/misc2.pro
+--- vim70.orig/src/proto/misc2.pro	2006-05-07 06:08:54.000000000 -0700
++++ vim70/src/proto/misc2.pro	2006-10-21 21:09:06.000000000 -0700
+@@ -29,6 +29,7 @@
+ extern char_u *vim_strnsave __ARGS((char_u *string, int len));
+ extern char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
+ extern char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
++extern char_u *vim_strsave_shellescape __ARGS((char_u *string));
+ extern char_u *vim_strsave_up __ARGS((char_u *string));
+ extern char_u *vim_strnsave_up __ARGS((char_u *string, int len));
+ extern void vim_strup __ARGS((char_u *p));
+diff -Naur vim70.orig/src/proto/ops.pro vim70/src/proto/ops.pro
+--- vim70.orig/src/proto/ops.pro	2006-05-07 06:08:58.000000000 -0700
++++ vim70/src/proto/ops.pro	2006-10-21 21:09:11.000000000 -0700
+@@ -20,7 +20,7 @@
+ extern int do_execreg __ARGS((int regname, int colon, int addcr));
+ extern int insert_reg __ARGS((int regname, int literally));
+ extern int get_spec_reg __ARGS((int regname, char_u **argp, int *allocated, int errmsg));
+-extern int cmdline_paste_reg __ARGS((int regname, int literally));
++extern int cmdline_paste_reg __ARGS((int regname, int literally, int remcr));
+ extern void adjust_clip_reg __ARGS((int *rp));
+ extern int op_delete __ARGS((oparg_T *oap));
+ extern int op_replace __ARGS((oparg_T *oap, int c));
+diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro
+--- vim70.orig/src/proto/undo.pro	2006-05-07 06:09:11.000000000 -0700
++++ vim70/src/proto/undo.pro	2006-10-21 21:08:53.000000000 -0700
+@@ -4,6 +4,7 @@
+ extern int u_savesub __ARGS((linenr_T lnum));
+ extern int u_inssub __ARGS((linenr_T lnum));
+ extern int u_savedel __ARGS((linenr_T lnum, long nlines));
++extern int undo_allowed __ARGS((void));
+ extern void u_undo __ARGS((int count));
+ extern void u_redo __ARGS((int count));
+ extern void undo_time __ARGS((long step, int sec, int absolute));
+diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
+--- vim70.orig/src/quickfix.c	2006-05-03 00:47:42.000000000 -0700
++++ vim70/src/quickfix.c	2006-10-21 21:09:11.000000000 -0700
+@@ -500,8 +500,6 @@
+ 	{
+ 	    if (tv != NULL)
+ 	    {
+-		int len;
+-
+ 		if (tv->v_type == VAR_STRING)
+ 		{
+ 		    /* Get the next line from the supplied string */
+@@ -602,13 +600,19 @@
+ 		else
+ 		    type = 0;
+ 		/*
+-		 * Extract error message data from matched line
++		 * Extract error message data from matched line.
++		 * We check for an actual submatch, because "\[" and "\]" in
++		 * the 'errorformat' may cause the wrong submatch to be used.
+ 		 */
+ 		if ((i = (int)fmt_ptr->addr[0]) > 0)		/* %f */
+ 		{
+-		    int c = *regmatch.endp[i];
++		    int c;
++
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 
+ 		    /* Expand ~/file and $HOME/file to full path. */
++		    c = *regmatch.endp[i];
+ 		    *regmatch.endp[i] = NUL;
+ 		    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
+ 		    *regmatch.endp[i] = c;
+@@ -618,35 +622,63 @@
+ 			continue;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[1]) > 0)		/* %n */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    enr = (int)atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[2]) > 0)		/* %l */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    lnum = atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[3]) > 0)		/* %c */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    col = (int)atol((char *)regmatch.startp[i]);
++		}
+ 		if ((i = (int)fmt_ptr->addr[4]) > 0)		/* %t */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    type = *regmatch.startp[i];
++		}
+ 		if (fmt_ptr->flags == '+' && !multiscan)	/* %+ */
+ 		    STRCPY(errmsg, IObuff);
+ 		else if ((i = (int)fmt_ptr->addr[5]) > 0)	/* %m */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
+ 		    vim_strncpy(errmsg, regmatch.startp[i], len);
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[6]) > 0)		/* %r */
++		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    tail = regmatch.startp[i];
++		}
+ 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
+ 		    if (*((char_u *)regmatch.startp[i]) != TAB)
+ 			use_viscol = TRUE;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
+ 		{
++		    if (regmatch.startp[i] == NULL)
++			continue;
+ 		    col = (int)atol((char *)regmatch.startp[i]);
+ 		    use_viscol = TRUE;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[9]) > 0)		/* %s */
+ 		{
++		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
++			continue;
+ 		    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
+ 		    if (len > CMDBUFFSIZE - 5)
+ 			len = CMDBUFFSIZE - 5;
+@@ -1554,10 +1586,30 @@
+ 	    }
+ 
+ 	/*
+-	 * If there is only one window, create a new one above the quickfix
+-	 * window.
++	 * If no usable window is found and 'switchbuf' is set to 'usetab'
++	 * then search in other tabs.
+ 	 */
+-	if (firstwin == lastwin || !usable_win)
++	if (!usable_win && vim_strchr(p_swb, 'a') != NULL)
++	{
++	    tabpage_T	*tp;
++	    win_T	*wp;
++
++	    FOR_ALL_TAB_WINDOWS(tp, wp)
++	    {
++		if (wp->w_buffer->b_fnum == qf_ptr->qf_fnum)
++		{
++		    goto_tabpage_win(tp, wp);
++		    usable_win = 1;
++		    break;
++		}
++	    }
++	}
++
++	/*
++	 * If there is only one window and is the quickfix window, create a new
++	 * one above the quickfix window.
++	 */
++	if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
+ 	{
+ 	    ll_ref = curwin->w_llist_ref;
+ 
+@@ -2429,32 +2481,19 @@
+     qf_info_T	*qi;
+ {
+     buf_T	*buf;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*save_curbuf;
+-#endif
+ 
+     /* Check if a buffer for the quickfix list exists.  Update it. */
+     buf = qf_find_buf(qi);
+     if (buf != NULL)
+     {
+-#ifdef FEAT_AUTOCMD
+ 	/* set curwin/curbuf to buf and save a few things */
+ 	aucmd_prepbuf(&aco, buf);
+-#else
+-	save_curbuf = curbuf;
+-	curbuf = buf;
+-#endif
+ 
+ 	qf_fill_buffer(qi);
+ 
+-#ifdef FEAT_AUTOCMD
+ 	/* restore curwin/curbuf and a few other things */
+ 	aucmd_restbuf(&aco);
+-#else
+-	curbuf = save_curbuf;
+-#endif
+ 
+ 	(void)qf_win_pos_update(qi, 0);
+     }
+@@ -2943,10 +2982,8 @@
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+     char_u	*save_ei = NULL;
+ #endif
+-#ifndef FEAT_AUTOCMD
+-    buf_T	*save_curbuf;
+-#else
+     aco_save_T	aco;
++#ifdef FEAT_AUTOCMD
+     char_u	*au_name =  NULL;
+     int		flags = 0;
+     colnr_T	col;
+@@ -3167,24 +3204,13 @@
+ 		     * need to be done now, in that buffer.  And the modelines
+ 		     * need to be done (again).  But not the window-local
+ 		     * options! */
+-#if defined(FEAT_AUTOCMD)
+ 		    aucmd_prepbuf(&aco, buf);
+-#else
+-		    save_curbuf = curbuf;
+-		    curbuf = buf;
+-		    curwin->w_buffer = curbuf;
+-#endif
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+ 		    apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
+ 						     buf->b_fname, TRUE, buf);
+ #endif
+ 		    do_modelines(OPT_NOWIN);
+-#if defined(FEAT_AUTOCMD)
+ 		    aucmd_restbuf(&aco);
+-#else
+-		    curbuf = save_curbuf;
+-		    curwin->w_buffer = curbuf;
+-#endif
+ 		}
+ 	    }
+ 	}
+@@ -3285,11 +3311,7 @@
+ {
+     buf_T	*newbuf;
+     int		failed = TRUE;
+-#ifdef FEAT_AUTOCMD
+     aco_save_T	aco;
+-#else
+-    buf_T	*old_curbuf = curbuf;
+-#endif
+ 
+     /* Allocate a buffer without putting it in the buffer list. */
+     newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
+@@ -3299,13 +3321,8 @@
+     /* Init the options. */
+     buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
+ 
+-#ifdef FEAT_AUTOCMD
+     /* set curwin/curbuf to buf and save a few things */
+     aucmd_prepbuf(&aco, newbuf);
+-#else
+-    curbuf = newbuf;
+-    curwin->w_buffer = newbuf;
+-#endif
+ 
+     /* Need to set the filename for autocommands. */
+     (void)setfname(curbuf, fname, NULL, FALSE);
+@@ -3336,13 +3353,8 @@
+ 	}
+     }
+ 
+-#ifdef FEAT_AUTOCMD
+     /* restore curwin/curbuf and a few other things */
+     aucmd_restbuf(&aco);
+-#else
+-    curbuf = old_curbuf;
+-    curwin->w_buffer = old_curbuf;
+-#endif
+ 
+     if (!buf_valid(newbuf))
+ 	return NULL;
+@@ -3434,8 +3446,10 @@
+ 	  || dict_add_nr_str(dict, "col",   (long)qfp->qf_col, NULL) == FAIL
+ 	  || dict_add_nr_str(dict, "vcol",  (long)qfp->qf_viscol, NULL) == FAIL
+ 	  || dict_add_nr_str(dict, "nr",    (long)qfp->qf_nr, NULL) == FAIL
+-	  || dict_add_nr_str(dict, "pattern",  0L, qfp->qf_pattern) == FAIL
+-	  || dict_add_nr_str(dict, "text",  0L, qfp->qf_text) == FAIL
++	  || dict_add_nr_str(dict, "pattern",  0L,
++	     qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
++	  || dict_add_nr_str(dict, "text",  0L,
++		   qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
+ 	  || dict_add_nr_str(dict, "type",  0L, buf) == FAIL
+ 	  || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
+ 	    return FAIL;
+diff -Naur vim70.orig/src/regexp.c vim70/src/regexp.c
+--- vim70.orig/src/regexp.c	2006-04-30 08:31:50.000000000 -0700
++++ vim70/src/regexp.c	2006-10-21 21:09:11.000000000 -0700
+@@ -3777,8 +3777,8 @@
+ 
+ 	op = OP(scan);
+ 	/* Check for character class with NL added. */
+-	if (!reg_line_lbr && WITH_NL(op) && *reginput == NUL
+-						    && reglnum <= reg_maxline)
++	if (!reg_line_lbr && WITH_NL(op) && REG_MULTI
++				&& *reginput == NUL && reglnum <= reg_maxline)
+ 	{
+ 	    reg_nextline();
+ 	}
+@@ -3912,7 +3912,7 @@
+ 		{
+ 		    colnr_T	    start, end;
+ 		    colnr_T	    start2, end2;
+-		    colnr_T	    col;
++		    colnr_T	    cols;
+ 
+ 		    getvvcol(wp, &top, &start, NULL, &end);
+ 		    getvvcol(wp, &bot, &start2, NULL, &end2);
+@@ -3922,9 +3922,9 @@
+ 			end = end2;
+ 		    if (top.col == MAXCOL || bot.col == MAXCOL)
+ 			end = MAXCOL;
+-		    col = win_linetabsize(wp,
++		    cols = win_linetabsize(wp,
+ 				      regline, (colnr_T)(reginput - regline));
+-		    if (col < start || col > end - (*p_sel == 'e'))
++		    if (cols < start || cols > end - (*p_sel == 'e'))
+ 			status = RA_NOMATCH;
+ 		}
+ 	    }
+@@ -4253,7 +4253,7 @@
+ 	    {
+ 		int	i, len;
+ 		char_u	*opnd;
+-		int	opndc, inpc;
++		int	opndc = 0, inpc;
+ 
+ 		opnd = OPERAND(scan);
+ 		/* Safety check (just in case 'encoding' was changed since
+@@ -4855,8 +4855,8 @@
+ 	    break;
+ 
+ 	  case NEWL:
+-	    if ((c != NUL || reglnum > reg_maxline || reg_line_lbr)
+-					      && (c != '\n' || !reg_line_lbr))
++	    if ((c != NUL || !REG_MULTI || reglnum > reg_maxline
++			     || reg_line_lbr) && (c != '\n' || !reg_line_lbr))
+ 		status = RA_NOMATCH;
+ 	    else if (reg_line_lbr)
+ 		ADVANCE_REGINPUT();
+@@ -5316,8 +5316,8 @@
+ 		++count;
+ 		mb_ptr_adv(scan);
+ 	    }
+-	    if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr
+-							 || count == maxcount)
++	    if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++					 || reg_line_lbr || count == maxcount)
+ 		break;
+ 	    ++count;		/* count the line-break */
+ 	    reg_nextline();
+@@ -5341,7 +5341,8 @@
+ 	    }
+ 	    else if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5370,7 +5371,8 @@
+ 	    }
+ 	    else if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5399,7 +5401,8 @@
+ 	    }
+ 	    else if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5424,7 +5427,8 @@
+ 	{
+ 	    if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5454,7 +5458,8 @@
+ #endif
+ 	    if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5617,7 +5622,8 @@
+ #endif
+ 	    if (*scan == NUL)
+ 	    {
+-		if (!WITH_NL(OP(p)) || reglnum > reg_maxline || reg_line_lbr)
++		if (!REG_MULTI || !WITH_NL(OP(p)) || reglnum > reg_maxline
++							      || reg_line_lbr)
+ 		    break;
+ 		reg_nextline();
+ 		scan = reginput;
+@@ -5646,8 +5652,8 @@
+ 
+       case NEWL:
+ 	while (count < maxcount
+-		&& ((*scan == NUL && reglnum <= reg_maxline && !reg_line_lbr)
+-		    || (*scan == '\n' && reg_line_lbr)))
++		&& ((*scan == NUL && reglnum <= reg_maxline && !reg_line_lbr
++			    && REG_MULTI) || (*scan == '\n' && reg_line_lbr)))
+ 	{
+ 	    count++;
+ 	    if (reg_line_lbr)
+diff -Naur vim70.orig/src/screen.c vim70/src/screen.c
+--- vim70.orig/src/screen.c	2006-05-05 03:13:55.000000000 -0700
++++ vim70/src/screen.c	2006-10-21 21:09:08.000000000 -0700
+@@ -1228,7 +1228,14 @@
+ 	{
+ 	    mid_end = wp->w_height;
+ 	    if (lastwin == firstwin)
++	    {
+ 		screenclear();
++#ifdef FEAT_WINDOWS
++		/* The screen was cleared, redraw the tab pages line. */
++		if (redraw_tabline)
++		    draw_tabline();
++#endif
++	    }
+ 	}
+     }
+     else
+@@ -2612,7 +2619,8 @@
+ #ifdef FEAT_LINEBREAK
+     int		need_showbreak = FALSE;
+ #endif
+-#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS))
++#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
++	|| defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
+ # define LINE_ATTR
+     int		line_attr = 0;		/* atrribute for the whole line */
+ #endif
+@@ -2626,7 +2634,7 @@
+     int		prev_c = 0;		/* previous Arabic character */
+     int		prev_c1 = 0;		/* first composing char for prev_c */
+ #endif
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+     int		did_line_attr = 0;
+ #endif
+ 
+@@ -4116,17 +4124,12 @@
+ 		    --ptr;	    /* put it back at the NUL */
+ 		}
+ #endif
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+ 		else if ((
+ # ifdef FEAT_DIFF
+-			    diff_hlf != (hlf_T)0
+-#  ifdef LINE_ATTR
+-			    ||
+-#  endif
++			    diff_hlf != (hlf_T)0 ||
+ # endif
+-# ifdef LINE_ATTR
+ 			    line_attr != 0
+-# endif
+ 			) && (
+ # ifdef FEAT_RIGHTLEFT
+ 			    wp->w_p_rl ? (col >= 0) :
+@@ -4237,7 +4240,7 @@
+ 	 * At end of the text line or just after the last character.
+ 	 */
+ 	if (c == NUL
+-#if defined(FEAT_DIFF) || defined(LINE_ATTR)
++#if defined(LINE_ATTR)
+ 		|| did_line_attr == 1
+ #endif
+ 		)
+@@ -4258,7 +4261,7 @@
+ 				|| prevcol == (long)match_hl[0].startcol
+ 				|| prevcol == (long)match_hl[1].startcol
+ 				|| prevcol == (long)match_hl[2].startcol)
+-# if defined(FEAT_DIFF) || defined(LINE_ATTR)
++# if defined(LINE_ATTR)
+ 			    && did_line_attr <= 1
+ # endif
+ 			   )
+@@ -5076,15 +5079,38 @@
+ 	     * character too.  If we didn't skip any blanks above, then we
+ 	     * only redraw if the character wasn't already redrawn anyway.
+ 	     */
+-	    if (gui.in_use && (col > startCol || !redraw_this)
+-# ifdef FEAT_MBYTE
+-		    && enc_dbcs == 0
+-# endif
+-	       )
++	    if (gui.in_use && (col > startCol || !redraw_this))
+ 	    {
+ 		hl = ScreenAttrs[off_to];
+ 		if (hl > HL_ALL || (hl & HL_BOLD))
+-		    screen_char(off_to - 1, row, col + coloff - 1);
++		{
++		    int prev_cells = 1;
++# ifdef FEAT_MBYTE
++		    if (enc_utf8)
++			/* for utf-8, ScreenLines[char_offset + 1] == 0 means
++			 * that its width is 2. */
++			prev_cells = ScreenLines[off_to - 1] == 0 ? 2 : 1;
++		    else if (enc_dbcs != 0)
++		    {
++			/* find previous character by counting from first
++			 * column and get its width. */
++			unsigned off = LineOffset[row];
++
++			while (off < off_to)
++			{
++			    prev_cells = (*mb_off2cells)(off);
++			    off += prev_cells;
++			}
++		    }
++
++		    if (enc_dbcs != 0 && prev_cells > 1)
++			screen_char_2(off_to - prev_cells, row,
++						   col + coloff - prev_cells);
++		    else
++# endif
++			screen_char(off_to - prev_cells, row,
++						   col + coloff - prev_cells);
++		}
+ 	    }
+ #endif
+ 	    screen_fill(row, row + 1, col + coloff, clear_width + coloff,
+@@ -7103,7 +7129,7 @@
+     tabpage_T	    *tp;
+ #endif
+     static int	    entered = FALSE;		/* avoid recursiveness */
+-    static int	    did_outofmem_msg = FALSE;	/* did outofmem message */
++    static int	    done_outofmem_msg = FALSE;	/* did outofmem message */
+ 
+     /*
+      * Allocation of the screen buffers is done only when the size changes and
+@@ -7133,6 +7159,12 @@
+ 	return;
+     entered = TRUE;
+ 
++    /*
++     * Note that the window sizes are updated before reallocating the arrays,
++     * thus we must not redraw here!
++     */
++    ++RedrawingDisabled;
++
+     win_new_shellsize();    /* fit the windows in the new sized shell */
+ 
+     comp_col();		/* recompute columns for shown command and ruler */
+@@ -7205,14 +7237,14 @@
+ #endif
+ 	    || outofmem)
+     {
+-	if (ScreenLines != NULL || !did_outofmem_msg)
++	if (ScreenLines != NULL || !done_outofmem_msg)
+ 	{
+ 	    /* guess the size */
+ 	    do_outofmem_msg((long_u)((Rows + 1) * Columns));
+ 
+ 	    /* Remember we did this to avoid getting outofmem messages over
+ 	     * and over again. */
+-	    did_outofmem_msg = TRUE;
++	    done_outofmem_msg = TRUE;
+ 	}
+ 	vim_free(new_ScreenLines);
+ 	new_ScreenLines = NULL;
+@@ -7240,7 +7272,7 @@
+     }
+     else
+     {
+-	did_outofmem_msg = FALSE;
++	done_outofmem_msg = FALSE;
+ 
+ 	for (new_row = 0; new_row < Rows; ++new_row)
+ 	{
+@@ -7367,6 +7399,7 @@
+ #endif
+ 
+     entered = FALSE;
++    --RedrawingDisabled;
+ 
+ #ifdef FEAT_AUTOCMD
+     if (starting == 0)
+diff -Naur vim70.orig/src/search.c vim70/src/search.c
+--- vim70.orig/src/search.c	2006-05-05 05:12:13.000000000 -0700
++++ vim70/src/search.c	2006-10-21 21:09:09.000000000 -0700
+@@ -1259,7 +1259,7 @@
+ 	/*
+ 	 * Add character and/or line offset
+ 	 */
+-	if (!(options & SEARCH_NOOF) || *pat == ';')
++	if (!(options & SEARCH_NOOF) || (pat != NULL && *pat == ';'))
+ 	{
+ 	    if (spats[0].off.line)	/* Add the offset to the line number. */
+ 	    {
+@@ -4688,6 +4688,7 @@
+ #ifdef FEAT_INS_EXPAND
+ 		    if (action == ACTION_EXPAND)
+ 		    {
++			msg_hist_off = TRUE;	/* reset in msg_trunc_attr() */
+ 			vim_snprintf((char*)IObuff, IOSIZE,
+ 				_("Scanning included file: %s"),
+ 				(char *)new_fname);
+@@ -4826,15 +4827,20 @@
+ 
+ 		if ((compl_cont_status & CONT_ADDING) && i == compl_length)
+ 		{
+-		    /* get the next line */
+ 		    /* IOSIZE > compl_length, so the STRNCPY works */
+ 		    STRNCPY(IObuff, aux, i);
+-		    if (!(     depth < 0
+-			    && lnum < end_lnum
+-			    && (line = ml_get(++lnum)) != NULL)
+-			&& !(	depth >= 0
+-			    && !vim_fgets(line = file_line,
+-						     LSIZE, files[depth].fp)))
++
++		    /* Get the next line: when "depth" < 0  from the current
++		     * buffer, otherwise from the included file.  Jump to
++		     * exit_matched when past the last line. */
++		    if (depth < 0)
++		    {
++			if (lnum >= end_lnum)
++			    goto exit_matched;
++			line = ml_get(++lnum);
++		    }
++		    else if (vim_fgets(line = file_line,
++						      LSIZE, files[depth].fp))
+ 			goto exit_matched;
+ 
+ 		    /* we read a line, set "already" to check this "line" later
+@@ -4871,7 +4877,7 @@
+ 			goto exit_matched;
+ 		}
+ 
+-		add_r = ins_compl_add_infercase(aux, i, FALSE,
++		add_r = ins_compl_add_infercase(aux, i, p_ic,
+ 			curr_fname == curbuf->b_fname ? NULL : curr_fname,
+ 			dir, reuse);
+ 		if (add_r == OK)
+diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
+--- vim70.orig/src/spell.c	2006-05-05 00:49:58.000000000 -0700
++++ vim70/src/spell.c	2006-10-21 21:09:05.000000000 -0700
+@@ -1483,7 +1483,7 @@
+ 	    else if ((mode == FIND_COMPOUND || mode == FIND_KEEPCOMPOUND
+ 								|| !word_ends))
+ 	    {
+-		/* If there is no  flag or the word is shorter than
++		/* If there is no compound flag or the word is shorter than
+ 		 * COMPOUNDMIN reject it quickly.
+ 		 * Makes you wonder why someone puts a compound flag on a word
+ 		 * that's too short...  Myspell compatibility requires this
+@@ -2043,8 +2043,8 @@
+     int		len;
+ # ifdef FEAT_SYN_HL
+     int		has_syntax = syntax_present(wp->w_buffer);
+-    int		col;
+ # endif
++    int		col;
+     int		can_spell;
+     char_u	*buf = NULL;
+     int		buflen = 0;
+@@ -2093,9 +2093,8 @@
+ 	    capcol = (int)(skipwhite(line) - line);
+ 	else if (curline && wp == curwin)
+ 	{
+-	    int	    col = (int)(skipwhite(line) - line);
+-
+ 	    /* For spellbadword(): check if first word needs a capital. */
++	    col = (int)(skipwhite(line) - line);
+ 	    if (check_need_cap(lnum, col))
+ 		capcol = col;
+ 
+@@ -2108,7 +2107,8 @@
+ 	 * possible. */
+ 	STRCPY(buf, line);
+ 	if (lnum < wp->w_buffer->b_ml.ml_line_count)
+-	    spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
++	    spell_cat_line(buf + STRLEN(buf),
++			  ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
+ 
+ 	p = buf + skip;
+ 	endp = buf + len;
+@@ -5060,7 +5060,7 @@
+     int		do_rep;
+     int		do_repsal;
+     int		do_sal;
+-    int		do_map;
++    int		do_mapline;
+     int		found_map = FALSE;
+     hashitem_T	*hi;
+     int		l;
+@@ -5098,7 +5098,7 @@
+     do_sal = spin->si_sal.ga_len == 0;
+ 
+     /* Only do MAP lines when not done in another .aff file already. */
+-    do_map = spin->si_map.ga_len == 0;
++    do_mapline = spin->si_map.ga_len == 0;
+ 
+     /*
+      * Allocate and init the afffile_T structure.
+@@ -5780,7 +5780,7 @@
+ 			smsg((char_u *)_("Expected MAP count in %s line %d"),
+ 								 fname, lnum);
+ 		}
+-		else if (do_map)
++		else if (do_mapline)
+ 		{
+ 		    int		c;
+ 
+@@ -7507,7 +7507,7 @@
+ {
+     char_u	*p = p_msm;
+     long	start = 0;
+-    long	inc = 0;
++    long	incr = 0;
+     long	added = 0;
+ 
+     if (!VIM_ISDIGIT(*p))
+@@ -7519,7 +7519,7 @@
+     ++p;
+     if (!VIM_ISDIGIT(*p))
+ 	return FAIL;
+-    inc = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
++    incr = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
+     if (*p != ',')
+ 	return FAIL;
+     ++p;
+@@ -7529,11 +7529,11 @@
+     if (*p != NUL)
+ 	return FAIL;
+ 
+-    if (start == 0 || inc == 0 || added == 0 || inc > start)
++    if (start == 0 || incr == 0 || added == 0 || incr > start)
+ 	return FAIL;
+ 
+     compress_start = start;
+-    compress_inc = inc;
++    compress_inc = incr;
+     compress_added = added;
+     return OK;
+ }
+@@ -8291,14 +8291,14 @@
+  * Returns the number of nodes used.
+  */
+     static int
+-put_node(fd, node, index, regionmask, prefixtree)
++put_node(fd, node, idx, regionmask, prefixtree)
+     FILE	*fd;		/* NULL when only counting */
+     wordnode_T	*node;
+-    int		index;
++    int		idx;
+     int		regionmask;
+     int		prefixtree;	/* TRUE for PREFIXTREE */
+ {
+-    int		newindex = index;
++    int		newindex = idx;
+     int		siblingcount = 0;
+     wordnode_T	*np;
+     int		flags;
+@@ -8308,7 +8308,7 @@
+ 	return 0;
+ 
+     /* Store the index where this node is written. */
+-    node->wn_u1.index = index;
++    node->wn_u1.index = idx;
+ 
+     /* Count the number of siblings. */
+     for (np = node; np != NULL; np = np->wn_sibling)
+@@ -9243,15 +9243,15 @@
+  * Add "word[len]" to 'spellfile' as a good or bad word.
+  */
+     void
+-spell_add_word(word, len, bad, index, undo)
++spell_add_word(word, len, bad, idx, undo)
+     char_u	*word;
+     int		len;
+     int		bad;
+-    int		index;	    /* "zG" and "zW": zero, otherwise index in
++    int		idx;	    /* "zG" and "zW": zero, otherwise index in
+ 			       'spellfile' */
+     int		undo;	    /* TRUE for "zug", "zuG", "zuw" and "zuW" */
+ {
+-    FILE	*fd;
++    FILE	*fd = NULL;
+     buf_T	*buf = NULL;
+     int		new_spf = FALSE;
+     char_u	*fname;
+@@ -9261,7 +9261,7 @@
+     int		i;
+     char_u	*spf;
+ 
+-    if (index == 0)	    /* use internal wordlist */
++    if (idx == 0)	    /* use internal wordlist */
+     {
+ 	if (int_wordlist == NULL)
+ 	{
+@@ -9289,11 +9289,11 @@
+ 	for (spf = curbuf->b_p_spf, i = 1; *spf != NUL; ++i)
+ 	{
+ 	    copy_option_part(&spf, fnamebuf, MAXPATHL, ",");
+-	    if (i == index)
++	    if (i == idx)
+ 		break;
+ 	    if (*spf == NUL)
+ 	    {
+-		EMSGN(_("E765: 'spellfile' does not have %ld entries"), index);
++		EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
+ 		return;
+ 	    }
+ 	}
+@@ -9336,7 +9336,10 @@
+ 		    {
+ 			fputc('#', fd);
+ 			if (undo)
++			{
++			    home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
+ 			    smsg((char_u *)_("Word removed from %s"), NameBuff);
++			}
+ 		    }
+ 		    fseek(fd, fpos_next, SEEK_SET);
+ 		}
+@@ -9344,20 +9347,27 @@
+ 	    fclose(fd);
+ 	}
+     }
+-    else
++
++    if (!undo)
+     {
+ 	fd = mch_fopen((char *)fname, "a");
+ 	if (fd == NULL && new_spf)
+ 	{
++	    char_u *p;
++
+ 	    /* We just initialized the 'spellfile' option and can't open the
+ 	     * file.  We may need to create the "spell" directory first.  We
+ 	     * already checked the runtime directory is writable in
+ 	     * init_spellfile(). */
+-	    if (!dir_of_file_exists(fname))
++	    if (!dir_of_file_exists(fname) && (p = gettail_sep(fname)) != fname)
+ 	    {
++		int c = *p;
++
+ 		/* The directory doesn't exist.  Try creating it and opening
+ 		 * the file again. */
+-		vim_mkdir(NameBuff, 0755);
++		*p = NUL;
++		vim_mkdir(fname, 0755);
++		*p = c;
+ 		fd = mch_fopen((char *)fname, "a");
+ 	    }
+ 	}
+@@ -10070,6 +10080,7 @@
+ 
+ 	/* List the suggestions. */
+ 	msg_start();
++	msg_row = Rows - 1;	/* for when 'cmdheight' > 1 */
+ 	lines_left = Rows;	/* avoid more prompt */
+ 	vim_snprintf((char *)IObuff, IOSIZE, _("Change \"%.*s\" to:"),
+ 						sug.su_badlen, sug.su_badptr);
+@@ -13579,53 +13590,58 @@
+ 	 * the first "the" to itself. */
+ 	return;
+ 
+-    /* Check if the word is already there.  Also check the length that is
+-     * being replaced "thes," -> "these" is a different suggestion from
+-     * "thes" -> "these". */
+-    stp = &SUG(*gap, 0);
+-    for (i = gap->ga_len; --i >= 0; ++stp)
+-	if (stp->st_wordlen == goodlen
+-		&& stp->st_orglen == badlen
+-		&& STRNCMP(stp->st_word, goodword, goodlen) == 0)
+-	{
+-	    /*
+-	     * Found it.  Remember the word with the lowest score.
+-	     */
+-	    if (stp->st_slang == NULL)
+-		stp->st_slang = slang;
++    if (gap->ga_len == 0)
++	i = -1;
++    else
++    {
++	/* Check if the word is already there.  Also check the length that is
++	 * being replaced "thes," -> "these" is a different suggestion from
++	 * "thes" -> "these". */
++	stp = &SUG(*gap, 0);
++	for (i = gap->ga_len; --i >= 0; ++stp)
++	    if (stp->st_wordlen == goodlen
++		    && stp->st_orglen == badlen
++		    && STRNCMP(stp->st_word, goodword, goodlen) == 0)
++	    {
++		/*
++		 * Found it.  Remember the word with the lowest score.
++		 */
++		if (stp->st_slang == NULL)
++		    stp->st_slang = slang;
+ 
+-	    new_sug.st_score = score;
+-	    new_sug.st_altscore = altscore;
+-	    new_sug.st_had_bonus = had_bonus;
++		new_sug.st_score = score;
++		new_sug.st_altscore = altscore;
++		new_sug.st_had_bonus = had_bonus;
++
++		if (stp->st_had_bonus != had_bonus)
++		{
++		    /* Only one of the two had the soundalike score computed.
++		     * Need to do that for the other one now, otherwise the
++		     * scores can't be compared.  This happens because
++		     * suggest_try_change() doesn't compute the soundalike
++		     * word to keep it fast, while some special methods set
++		     * the soundalike score to zero. */
++		    if (had_bonus)
++			rescore_one(su, stp);
++		    else
++		    {
++			new_sug.st_word = stp->st_word;
++			new_sug.st_wordlen = stp->st_wordlen;
++			new_sug.st_slang = stp->st_slang;
++			new_sug.st_orglen = badlen;
++			rescore_one(su, &new_sug);
++		    }
++		}
+ 
+-	    if (stp->st_had_bonus != had_bonus)
+-	    {
+-		/* Only one of the two had the soundalike score computed.
+-		 * Need to do that for the other one now, otherwise the
+-		 * scores can't be compared.  This happens because
+-		 * suggest_try_change() doesn't compute the soundalike
+-		 * word to keep it fast, while some special methods set
+-		 * the soundalike score to zero. */
+-		if (had_bonus)
+-		    rescore_one(su, stp);
+-		else
++		if (stp->st_score > new_sug.st_score)
+ 		{
+-		    new_sug.st_word = stp->st_word;
+-		    new_sug.st_wordlen = stp->st_wordlen;
+-		    new_sug.st_slang = stp->st_slang;
+-		    new_sug.st_orglen = badlen;
+-		    rescore_one(su, &new_sug);
++		    stp->st_score = new_sug.st_score;
++		    stp->st_altscore = new_sug.st_altscore;
++		    stp->st_had_bonus = new_sug.st_had_bonus;
+ 		}
++		break;
+ 	    }
+-
+-	    if (stp->st_score > new_sug.st_score)
+-	    {
+-		stp->st_score = new_sug.st_score;
+-		stp->st_altscore = new_sug.st_altscore;
+-		stp->st_had_bonus = new_sug.st_had_bonus;
+-	    }
+-	    break;
+-	}
++    }
+ 
+     if (i < 0 && ga_grow(gap, 1) == OK)
+     {
+@@ -15656,7 +15672,7 @@
+ 		    ? MB_STRNICMP(p, pat, STRLEN(pat)) == 0
+ 		    : STRNCMP(p, pat, STRLEN(pat)) == 0)
+ 		&& ins_compl_add_infercase(p, (int)STRLEN(p),
+-					  FALSE, NULL, *dir, 0) == OK)
++					  p_ic, NULL, *dir, 0) == OK)
+ 	/* if dir was BACKWARD then honor it just once */
+ 	*dir = FORWARD;
+ }
+diff -Naur vim70.orig/src/structs.h vim70/src/structs.h
+--- vim70.orig/src/structs.h	2006-04-09 10:57:46.000000000 -0700
++++ vim70/src/structs.h	2006-10-21 21:08:55.000000000 -0700
+@@ -2213,18 +2213,20 @@
+ 
+ /*
+  * Struct to save values in before executing autocommands for a buffer that is
+- * not the current buffer.
++ * not the current buffer.  Without FEAT_AUTOCMD only "curbuf" is remembered.
+  */
+ typedef struct
+ {
+     buf_T	*save_buf;	/* saved curbuf */
++#ifdef FEAT_AUTOCMD
+     buf_T	*new_curbuf;	/* buffer to be used */
+     win_T	*save_curwin;	/* saved curwin, NULL if it didn't change */
+     win_T	*new_curwin;	/* new curwin if save_curwin != NULL */
+     pos_T	save_cursor;	/* saved cursor pos of save_curwin */
+     linenr_T	save_topline;	/* saved topline of save_curwin */
+-#ifdef FEAT_DIFF
++# ifdef FEAT_DIFF
+     int		save_topfill;	/* saved topfill of save_curwin */
++# endif
+ #endif
+ } aco_save_T;
+ 
+diff -Naur vim70.orig/src/syntax.c vim70/src/syntax.c
+--- vim70.orig/src/syntax.c	2006-04-26 05:49:45.000000000 -0700
++++ vim70/src/syntax.c	2006-10-21 21:09:07.000000000 -0700
+@@ -977,6 +977,7 @@
+ {
+     stateitem_T	*cur_si;
+     int		i;
++    int		seen_keepend;
+ 
+     if (startofline)
+     {
+@@ -1002,7 +1003,10 @@
+     /*
+      * Need to update the end of a start/skip/end that continues from the
+      * previous line.  And regions that have "keepend", because they may
+-     * influence contained items.
++     * influence contained items.  If we've just removed "extend"
++     * (startofline == 0) then we should update ends of normal regions
++     * contained inside "keepend" because "extend" could have extended
++     * these "keepend" regions as well as contained normal regions.
+      * Then check for items ending in column 0.
+      */
+     i = current_state.ga_len - 1;
+@@ -1010,10 +1014,13 @@
+ 	for ( ; i > keepend_level; --i)
+ 	    if (CUR_STATE(i).si_flags & HL_EXTEND)
+ 		break;
++
++    seen_keepend = FALSE;
+     for ( ; i < current_state.ga_len; ++i)
+     {
+ 	cur_si = &CUR_STATE(i);
+ 	if ((cur_si->si_flags & HL_KEEPEND)
++			    || (seen_keepend && !startofline)
+ 			    || (i == current_state.ga_len - 1 && startofline))
+ 	{
+ 	    cur_si->si_h_startpos.col = 0;	/* start highl. in col 0 */
+@@ -1021,6 +1028,9 @@
+ 
+ 	    if (!(cur_si->si_flags & HL_MATCHCONT))
+ 		update_si_end(cur_si, (int)current_col, !startofline);
++
++	    if (!startofline && (cur_si->si_flags & HL_KEEPEND))
++		seen_keepend = TRUE;
+ 	}
+     }
+     check_keepend();
+@@ -2564,6 +2574,7 @@
+ {
+     int		i;
+     lpos_T	maxpos;
++    lpos_T	maxpos_h;
+     stateitem_T	*sip;
+ 
+     /*
+@@ -2583,23 +2594,30 @@
+ 	    break;
+ 
+     maxpos.lnum = 0;
++    maxpos_h.lnum = 0;
+     for ( ; i < current_state.ga_len; ++i)
+     {
+ 	sip = &CUR_STATE(i);
+ 	if (maxpos.lnum != 0)
+ 	{
+ 	    limit_pos_zero(&sip->si_m_endpos, &maxpos);
+-	    limit_pos_zero(&sip->si_h_endpos, &maxpos);
++	    limit_pos_zero(&sip->si_h_endpos, &maxpos_h);
+ 	    limit_pos_zero(&sip->si_eoe_pos, &maxpos);
+ 	    sip->si_ends = TRUE;
+ 	}
+-	if (sip->si_ends
+-		&& (sip->si_flags & HL_KEEPEND)
+-		&& (maxpos.lnum == 0
++	if (sip->si_ends && (sip->si_flags & HL_KEEPEND))
++	{
++	    if (maxpos.lnum == 0
+ 		    || maxpos.lnum > sip->si_m_endpos.lnum
+ 		    || (maxpos.lnum == sip->si_m_endpos.lnum
+-			&& maxpos.col > sip->si_m_endpos.col)))
+-	    maxpos = sip->si_m_endpos;
++			&& maxpos.col > sip->si_m_endpos.col))
++		maxpos = sip->si_m_endpos;
++	    if (maxpos_h.lnum == 0
++		    || maxpos_h.lnum > sip->si_h_endpos.lnum
++		    || (maxpos_h.lnum == sip->si_h_endpos.lnum
++			&& maxpos_h.col > sip->si_h_endpos.col))
++		maxpos_h = sip->si_h_endpos;
++	}
+     }
+ }
+ 
+diff -Naur vim70.orig/src/tag.c vim70/src/tag.c
+--- vim70.orig/src/tag.c	2006-04-27 06:11:21.000000000 -0700
++++ vim70/src/tag.c	2006-10-21 21:09:10.000000000 -0700
+@@ -911,7 +911,7 @@
+ 
+ 		set_errorlist(curwin, list, ' ');
+ 
+-		list_free(list);
++		list_free(list, TRUE);
+ 
+ 		cur_match = 0;		/* Jump to the first tag */
+ 	    }
+@@ -3787,6 +3787,7 @@
+ {
+     int		num_matches, i, ret;
+     char_u	**matches, *p;
++    char_u	*full_fname;
+     dict_T	*dict;
+     tagptrs_T	tp;
+     long	is_static;
+@@ -3809,9 +3810,10 @@
+ 	    if (list_append_dict(list, dict) == FAIL)
+ 		ret = FAIL;
+ 
++	    full_fname = tag_full_fname(&tp);
+ 	    if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
+-		    || add_tag_field(dict, "filename", tp.fname,
+-							 tp.fname_end) == FAIL
++		    || add_tag_field(dict, "filename", full_fname,
++							 NULL) == FAIL
+ 		    || add_tag_field(dict, "cmd", tp.command,
+ 						       tp.command_end) == FAIL
+ 		    || add_tag_field(dict, "kind", tp.tagkind,
+@@ -3819,6 +3821,8 @@
+ 		    || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
+ 		ret = FAIL;
+ 
++	    vim_free(full_fname);
++
+ 	    if (tp.command_end != NULL)
+ 	    {
+ 		for (p = tp.command_end + 3;
+diff -Naur vim70.orig/src/term.c vim70/src/term.c
+--- vim70.orig/src/term.c	2006-05-03 10:34:57.000000000 -0700
++++ vim70/src/term.c	2006-10-21 21:08:56.000000000 -0700
+@@ -4783,6 +4783,14 @@
+ 		return -1;
+ 	    current_menu = (vimmenu_T *)val;
+ 	    slen += num_bytes;
++
++	    /* The menu may have been deleted right after it was used, check
++	     * for that. */
++	    if (check_menu_pointer(root_menu, current_menu) == FAIL)
++	    {
++		key_name[0] = KS_EXTRA;
++		key_name[1] = (int)KE_IGNORE;
++	    }
+ 	}
+ # endif
+ # ifdef FEAT_GUI_TABLINE
+diff -Naur vim70.orig/src/testdir/test56.in vim70/src/testdir/test56.in
+--- vim70.orig/src/testdir/test56.in	2005-05-18 08:37:37.000000000 -0700
++++ vim70/src/testdir/test56.in	2006-10-21 21:09:01.000000000 -0700
+@@ -3,7 +3,7 @@
+ STARTTEST
+ :so small.vim
+ :"
+-:set nocp
++:set nocp viminfo+=nviminfo
+ :/^start:/+1,/^end:/-1w! Xtest.vim
+ :source Xtest.vim
+ _x
+diff -Naur vim70.orig/src/ui.c vim70/src/ui.c
+--- vim70.orig/src/ui.c	2006-03-27 11:15:09.000000000 -0800
++++ vim70/src/ui.c	2006-10-21 21:08:58.000000000 -0700
+@@ -1137,7 +1137,6 @@
+     int		len;
+ #ifdef FEAT_MBYTE
+     char_u	*p;
+-    int		i;
+ #endif
+     int		row1 = clip_star.start.lnum;
+     int		col1 = clip_star.start.col;
+@@ -1218,6 +1217,8 @@
+ #ifdef FEAT_MBYTE
+ 	    if (enc_dbcs != 0)
+ 	    {
++		int	i;
++
+ 		p = ScreenLines + LineOffset[row];
+ 		for (i = start_col; i < end_col; ++i)
+ 		    if (enc_dbcs == DBCS_JPNU && p[i] == 0x8e)
+diff -Naur vim70.orig/src/undo.c vim70/src/undo.c
+--- vim70.orig/src/undo.c	2006-04-21 02:30:59.000000000 -0700
++++ vim70/src/undo.c	2006-10-21 21:08:58.000000000 -0700
+@@ -84,7 +84,6 @@
+ static void u_unch_branch __ARGS((u_header_T *uhp));
+ static u_entry_T *u_get_headentry __ARGS((void));
+ static void u_getbot __ARGS((void));
+-static int undo_allowed __ARGS((void));
+ static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
+ static void u_doit __ARGS((int count));
+ static void u_undoredo __ARGS((int undo));
+@@ -196,7 +195,7 @@
+  * Return TRUE when undo is allowed.  Otherwise give an error message and
+  * return FALSE.
+  */
+-    static int
++    int
+ undo_allowed()
+ {
+     /* Don't allow changes when 'modifiable' is off.  */
+@@ -1188,7 +1187,7 @@
+     int		did_undo;	/* just did an undo */
+     int		absolute;	/* used ":undo N" */
+ {
+-    char	*msg;
++    char	*msgstr;
+     u_header_T	*uhp;
+     char_u	msgbuf[80];
+ 
+@@ -1206,20 +1205,20 @@
+ 
+     u_oldcount -= u_newcount;
+     if (u_oldcount == -1)
+-	msg = N_("more line");
++	msgstr = N_("more line");
+     else if (u_oldcount < 0)
+-	msg = N_("more lines");
++	msgstr = N_("more lines");
+     else if (u_oldcount == 1)
+-	msg = N_("line less");
++	msgstr = N_("line less");
+     else if (u_oldcount > 1)
+-	msg = N_("fewer lines");
++	msgstr = N_("fewer lines");
+     else
+     {
+ 	u_oldcount = u_newcount;
+ 	if (u_newcount == 1)
+-	    msg = N_("change");
++	    msgstr = N_("change");
+ 	else
+-	    msg = N_("changes");
++	    msgstr = N_("changes");
+     }
+ 
+     if (curbuf->b_u_curhead != NULL)
+@@ -1245,7 +1244,7 @@
+ 
+     smsg((char_u *)_("%ld %s; %s #%ld  %s"),
+ 	    u_oldcount < 0 ? -u_oldcount : u_oldcount,
+-	    _(msg),
++	    _(msgstr),
+ 	    did_undo ? _("before") : _("after"),
+ 	    uhp == NULL ? 0L : uhp->uh_seq,
+ 	    msgbuf);
+diff -Naur vim70.orig/src/version.c vim70/src/version.c
+--- vim70.orig/src/version.c	2006-05-03 00:50:42.000000000 -0700
++++ vim70/src/version.c	2006-10-21 21:09:11.000000000 -0700
+@@ -667,6 +667,272 @@
+ static int included_patches[] =
+ {   /* Add new patch number below this line */
+ /**/
++    146,
++/**/
++    145,
++/**/
++    144,
++/**/
++    143,
++/**/
++    142,
++/**/
++    141,
++/**/
++    140,
++/**/
++    139,
++/**/
++    137,
++/**/
++    136,
++/**/
++    135,
++/**/
++    134,
++/**/
++    133,
++/**/
++    129,
++/**/
++    128,
++/**/
++    127,
++/**/
++    126,
++/**/
++    125,
++/**/
++    124,
++/**/
++    123,
++/**/
++    122,
++/**/
++    121,
++/**/
++    120,
++/**/
++    119,
++/**/
++    118,
++/**/
++    117,
++/**/
++    116,
++/**/
++    115,
++/**/
++    114,
++/**/
++    113,
++/**/
++    112,
++/**/
++    111,
++/**/
++    110,
++/**/
++    109,
++/**/
++    107,
++/**/
++    106,
++/**/
++    105,
++/**/
++    104,
++/**/
++    103,
++/**/
++    102,
++/**/
++    101,
++/**/
++    100,
++/**/
++    99,
++/**/
++    98,
++/**/
++    97,
++/**/
++    96,
++/**/
++    95,
++/**/
++    94,
++/**/
++    93,
++/**/
++    92,
++/**/
++    91,
++/**/
++    90,
++/**/
++    89,
++/**/
++    88,
++/**/
++    87,
++/**/
++    86,
++/**/
++    85,
++/**/
++    84,
++/**/
++    83,
++/**/
++    82,
++/**/
++    81,
++/**/
++    80,
++/**/
++    79,
++/**/
++    78,
++/**/
++    77,
++/**/
++    76,
++/**/
++    75,
++/**/
++    73,
++/**/
++    72,
++/**/
++    71,
++/**/
++    70,
++/**/
++    69,
++/**/
++    68,
++/**/
++    67,
++/**/
++    66,
++/**/
++    64,
++/**/
++    63,
++/**/
++    62,
++/**/
++    61,
++/**/
++    60,
++/**/
++    59,
++/**/
++    58,
++/**/
++    56,
++/**/
++    55,
++/**/
++    54,
++/**/
++    53,
++/**/
++    52,
++/**/
++    51,
++/**/
++    50,
++/**/
++    49,
++/**/
++    48,
++/**/
++    47,
++/**/
++    46,
++/**/
++    44,
++/**/
++    43,
++/**/
++    42,
++/**/
++    41,
++/**/
++    40,
++/**/
++    39,
++/**/
++    38,
++/**/
++    37,
++/**/
++    36,
++/**/
++    35,
++/**/
++    34,
++/**/
++    33,
++/**/
++    31,
++/**/
++    30,
++/**/
++    29,
++/**/
++    26,
++/**/
++    25,
++/**/
++    24,
++/**/
++    23,
++/**/
++    22,
++/**/
++    21,
++/**/
++    20,
++/**/
++    19,
++/**/
++    18,
++/**/
++    17,
++/**/
++    16,
++/**/
++    15,
++/**/
++    14,
++/**/
++    13,
++/**/
++    12,
++/**/
++    11,
++/**/
++    10,
++/**/
++    9,
++/**/
++    8,
++/**/
++    7,
++/**/
++    6,
++/**/
++    4,
++/**/
++    3,
++/**/
++    2,
++/**/
++    1,
++/**/
+     0
+ };
+ 
+@@ -731,7 +997,11 @@
+     /* Only MS VC 4.1 and earlier can do Win32s */
+     MSG_PUTS(_("\nMS-Windows 16/32 bit GUI version"));
+ #  else
++#   ifdef _WIN64
++    MSG_PUTS(_("\nMS-Windows 64 bit GUI version"));
++#   else
+     MSG_PUTS(_("\nMS-Windows 32 bit GUI version"));
++#   endif
+ #  endif
+     if (gui_is_win32s())
+ 	MSG_PUTS(_(" in Win32s mode"));
+diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
+--- vim70.orig/src/vim.h	2006-04-30 08:32:38.000000000 -0700
++++ vim70/src/vim.h	2006-10-21 21:08:59.000000000 -0700
+@@ -585,7 +585,6 @@
+ #define INSERT		0x10	/* Insert mode */
+ #define LANGMAP		0x20	/* Language mapping, can be combined with
+ 				   INSERT and CMDLINE */
+-#define MAP_ALL_MODES	0x3f	/* all mode bits used for mapping */
+ 
+ #define REPLACE_FLAG	0x40	/* Replace mode flag */
+ #define REPLACE		(REPLACE_FLAG + INSERT)
+@@ -605,6 +604,9 @@
+ #define CONFIRM		0x800	/* ":confirm" prompt */
+ #define SELECTMODE	0x1000	/* Select mode, only for mappings */
+ 
++#define MAP_ALL_MODES	(0x3f | SELECTMODE)	/* all mode bits used for
++						 * mapping */
++
+ /* directions */
+ #define FORWARD			1
+ #define BACKWARD		(-1)
+@@ -1118,6 +1120,7 @@
+     EVENT_FOCUSGAINED,		/* got the focus */
+     EVENT_FOCUSLOST,		/* lost the focus to another app */
+     EVENT_GUIENTER,		/* after starting the GUI */
++    EVENT_GUIFAILED,		/* after starting the GUI failed */
+     EVENT_INSERTCHANGE,		/* when changing Insert/Replace mode */
+     EVENT_INSERTENTER,		/* when entering Insert mode */
+     EVENT_INSERTLEAVE,		/* when leaving Insert mode */
+diff -Naur vim70.orig/src/window.c vim70/src/window.c
+--- vim70.orig/src/window.c	2006-05-06 03:54:51.000000000 -0700
++++ vim70/src/window.c	2006-10-21 21:09:02.000000000 -0700
+@@ -340,10 +340,10 @@
+ 		{
+ 		    tabpage_T	*oldtab = curtab;
+ 		    tabpage_T	*newtab;
+-		    win_T	*wp = curwin;
+ 
+ 		    /* First create a new tab with the window, then go back to
+ 		     * the old tab and close the window there. */
++		    wp = curwin;
+ 		    if (win_new_tabpage((int)Prenum) == OK
+ 						     && valid_tabpage(oldtab))
+ 		    {
+@@ -3954,13 +3954,8 @@
+     setmouse();			/* in case jumped to/from help buffer */
+ #endif
+ 
+-#ifdef FEAT_AUTOCHDIR
+-    /* Change directories when the 'acd' option is set on and after
+-     * switching windows. */
+-    if (p_acd && curbuf->b_ffname != NULL
+-				     && vim_chdirfile(curbuf->b_ffname) == OK)
+-	shorten_fnames(TRUE);
+-#endif
++    /* Change directories when the 'acd' option is set. */
++    DO_AUTOCHDIR
+ }
+ 
+ #endif /* FEAT_WINDOWS */
+
