From 6d4ae7443a104fdafc93de38b0768986e4ffc8aa Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 12:16:45 +0200 Subject: [PATCH 001/136] updated for version 7.3.647 Problem: "gnd" doesn't work correctly in Visual mode. Solution: Handle Visual mode differently in "gn". (Christian Brabandt) --- src/search.c | 17 +++++++---------- src/testdir/test53.in | 4 +++- src/testdir/test53.ok | 1 + src/version.c | 2 ++ 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/search.c b/src/search.c index b54b30f9e8..158cfd8f5d 100644 --- a/src/search.c +++ b/src/search.c @@ -4545,7 +4545,6 @@ current_search(count, forward) int dir; int result; /* result of various function calls */ char_u old_p_ws = p_ws; - int visual_active = FALSE; int flags = 0; pos_T save_VIsual; int zerowidth = FALSE; @@ -4561,11 +4560,6 @@ current_search(count, forward) { orig_pos = curwin->w_cursor; save_VIsual = VIsual; - visual_active = TRUE; - - /* just started visual selection, only one character */ - if (equalpos(VIsual, curwin->w_cursor)) - visual_active = FALSE; pos = curwin->w_cursor; start_pos = VIsual; @@ -4619,7 +4613,7 @@ current_search(count, forward) p_ws = old_p_ws; return FAIL; } - else if (!i && !result && !visual_active) + else if (!i && !result) { if (forward) /* try again from start of buffer */ { @@ -4691,7 +4685,8 @@ is_zerowidth(pattern) regmmatch_T regmatch; int nmatched = 0; int result = -1; - pos_T pos; + pos_T pos; + int save_called_emsg = called_emsg; if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH, SEARCH_KEEP, ®match) == FAIL) @@ -4704,15 +4699,17 @@ is_zerowidth(pattern) { /* Zero-width pattern should match somewhere, then we can check if * start and end are in the same position. */ + called_emsg = FALSE; nmatched = vim_regexec_multi(®match, curwin, curbuf, pos.lnum, (colnr_T)0, NULL); if (!called_emsg) result = (nmatched != 0 - && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum - && regmatch.startpos[0].col == regmatch.endpos[0].col); + && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum + && regmatch.startpos[0].col == regmatch.endpos[0].col); } + called_emsg |= save_called_emsg; vim_free(regmatch.regprog); return result; } diff --git a/src/testdir/test53.in b/src/testdir/test53.in index be76b05c1c..af617c01f1 100644 --- a/src/testdir/test53.in +++ b/src/testdir/test53.in @@ -40,7 +40,8 @@ gnd /\>\zs 0gnd/^ gnd$h/\zs -gnd +gnd/[u]niquepattern/s +vlgnd :/^start:/,/^end:/wq! test.out ENDTEST @@ -67,4 +68,5 @@ join lines zero width pattern delete first and last chars +uniquepattern uniquepattern end: diff --git a/src/testdir/test53.ok b/src/testdir/test53.ok index 928caff7c0..0a2a6f4d19 100644 --- a/src/testdir/test53.ok +++ b/src/testdir/test53.ok @@ -24,4 +24,5 @@ abcdx | | abcdx join lines zerowidth pattern elete first and last char + uniquepattern end: diff --git a/src/version.c b/src/version.c index 2f20fa674d..922e86544b 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 647, /**/ 646, /**/ From d9b3765a8adf55d7693e22d85d2752bbc5a5d6d9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 12:16:45 +0200 Subject: [PATCH 002/136] Added tag v7-3-647 for changeset 29fe4e5c1db1 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 4353652793..d340ed2bc8 100644 --- a/.hgtags +++ b/.hgtags @@ -1983,3 +1983,4 @@ fdac34e3afa5f0dea26dba5e96932e3b9a0be50a v7-3-643 fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644 1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645 e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 +29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647 From 7d1fb96bc163568f4134c86cbf311b8f0636d1b6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 13:30:40 +0200 Subject: [PATCH 003/136] updated for version 7.3.648 Problem: Crash when using a very long file name. (ZyX) Solution: Properly check length of buffer space. --- src/buffer.c | 31 ++++++++++++++++++++++--------- src/version.c | 2 ++ 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 355dbc7398..0a2ce8ec96 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -3234,12 +3234,15 @@ maketitle() { /* format: "fname + (path) (1 of 2) - VIM" */ +#define SPACE_FOR_FNAME (IOSIZE - 100) +#define SPACE_FOR_DIR (IOSIZE - 20) +#define SPACE_FOR_ARGNR (IOSIZE - 10) /* at least room for " - VIM" */ if (curbuf->b_fname == NULL) - vim_strncpy(buf, (char_u *)_("[No Name]"), IOSIZE - 100); + vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME); else { p = transstr(gettail(curbuf->b_fname)); - vim_strncpy(buf, p, IOSIZE - 100); + vim_strncpy(buf, p, SPACE_FOR_FNAME); vim_free(p); } @@ -3263,7 +3266,7 @@ maketitle() buf[off++] = ' '; buf[off++] = '('; home_replace(curbuf, curbuf->b_ffname, - buf + off, IOSIZE - off, TRUE); + buf + off, SPACE_FOR_DIR - off, TRUE); #ifdef BACKSLASH_IN_FILENAME /* avoid "c:/name" to be reduced to "c" */ if (isalpha(buf[off]) && buf[off + 1] == ':') @@ -3274,18 +3277,28 @@ maketitle() if (p == buf + off) /* must be a help buffer */ vim_strncpy(buf + off, (char_u *)_("help"), - (size_t)(IOSIZE - off - 1)); + (size_t)(SPACE_FOR_DIR - off - 1)); else *p = NUL; - /* translate unprintable chars */ - p = transstr(buf + off); - vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1)); - vim_free(p); + /* Translate unprintable chars and concatenate. Keep some + * room for the server name. When there is no room (very long + * file name) use (...). */ + if (off < SPACE_FOR_DIR) + { + p = transstr(buf + off); + vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off)); + vim_free(p); + } + else + { + vim_strncpy(buf + off, (char_u *)"...", + (size_t)(SPACE_FOR_ARGNR - off)); + } STRCAT(buf, ")"); } - append_arg_number(curwin, buf, IOSIZE, FALSE); + append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE); #if defined(FEAT_CLIENTSERVER) if (serverName != NULL) diff --git a/src/version.c b/src/version.c index 922e86544b..577eddeafb 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 648, /**/ 647, /**/ From 395c4a76925ddc8180b1976db96663a3e4bbee50 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 13:30:41 +0200 Subject: [PATCH 004/136] Added tag v7-3-648 for changeset 76c099d45772 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d340ed2bc8..2090c2b1c6 100644 --- a/.hgtags +++ b/.hgtags @@ -1984,3 +1984,4 @@ fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644 1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645 e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647 +76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648 From e7de33a2d3c525ed063d0ab26defa557b538ba9c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 14:18:45 +0200 Subject: [PATCH 005/136] updated for version 7.3.649 Problem: When 'clipboard' is set to "unnamed" small deletes end up in the numbered registers. (Ingo Karkat) Solution: Use the original register name to decide whether to put a delete in a numbered register. (Christian Brabandt) --- src/ops.c | 5 ++++- src/version.c | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/ops.c b/src/ops.c index 561046d378..f08e576cfe 100644 --- a/src/ops.c +++ b/src/ops.c @@ -1623,6 +1623,7 @@ op_delete(oap) #endif linenr_T old_lcount = curbuf->b_ml.ml_line_count; int did_yank = FALSE; + int orig_regname = oap->regname; if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to do */ return OK; @@ -1715,8 +1716,10 @@ op_delete(oap) /* * Put deleted text into register 1 and shift number registers if the * delete contains a line break, or when a regname has been specified. + * Use the register name from before adjust_clip_reg() may have + * changed it. */ - if (oap->regname != 0 || oap->motion_type == MLINE + if (orig_regname != 0 || oap->motion_type == MLINE || oap->line_count > 1 || oap->use_reg_one) { y_current = &y_regs[9]; diff --git a/src/version.c b/src/version.c index 577eddeafb..4b4890c7e0 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 649, /**/ 648, /**/ From e09f6bfff5221b80c3a651c61a3a7cb35f0fc9cb Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 14:18:45 +0200 Subject: [PATCH 006/136] Added tag v7-3-649 for changeset 063765c3cebb --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 2090c2b1c6..03795a374f 100644 --- a/.hgtags +++ b/.hgtags @@ -1985,3 +1985,4 @@ fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644 e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647 76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648 +063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649 From b6aa05255d1e16078f9044e478531d517e5c485a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 15:03:30 +0200 Subject: [PATCH 007/136] updated for version 7.3.650 Problem: Completion after ":help \{-" gives an error message and messes up the command line. Solution: Cancel the tag search if the pattern can't be compiled. (Yasuhiro Matsumoto) --- src/tag.c | 2 ++ src/version.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/tag.c b/src/tag.c index 08abd41758..4f2426b90c 100644 --- a/src/tag.c +++ b/src/tag.c @@ -1443,6 +1443,8 @@ find_tags(pat, num_matches, matchesp, flags, mincount, buf_ffname) orgpat.len = p_tl; prepare_pats(&orgpat, has_re); + if (has_re && orgpat.regmatch.regprog == NULL) + goto findtag_end; #ifdef FEAT_TAG_BINS /* This is only to avoid a compiler warning for using search_info diff --git a/src/version.c b/src/version.c index 4b4890c7e0..a2ca2386e8 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 650, /**/ 649, /**/ From ea3f5fe0537294bd681fc740a5a69766b167cdf8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 15:03:30 +0200 Subject: [PATCH 008/136] Added tag v7-3-650 for changeset a638ae0f1b0c --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 03795a374f..c21e192313 100644 --- a/.hgtags +++ b/.hgtags @@ -1986,3 +1986,4 @@ e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647 76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648 063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649 +a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 From 742f0ab7cbcaf5098f2cabd5b833237cb346ce66 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 15:15:07 +0200 Subject: [PATCH 009/136] updated for version 7.3.651 Problem: Completion after ":help \{-" gives an error message. Solution: Prepend a backslash. --- src/ex_cmds.c | 15 ++++++++++----- src/version.c | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ex_cmds.c b/src/ex_cmds.c index f715af6a8f..889ea62032 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -4851,7 +4851,7 @@ do_sub(eap) #ifdef FEAT_EVAL if (do_count) { - /* prevent accidently changing the buffer by a function */ + /* prevent accidentally changing the buffer by a function */ save_ma = curbuf->b_p_ma; curbuf->b_p_ma = FALSE; sandbox++; @@ -5264,7 +5264,7 @@ do_sub_msg(count_only) * is assumed to be 'p' if missing. * * This is implemented in two passes: first we scan the file for the pattern and - * set a mark for each line that (not) matches. secondly we execute the command + * set a mark for each line that (not) matches. Secondly we execute the command * for each line that has a mark. This is required because after deleting * lines we do not know where to search for the next match. */ @@ -5896,9 +5896,14 @@ find_help_tags(arg, num_matches, matches, keep_lang) } else { - /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */ - if (arg[0] == '[' && (arg[1] == ':' - || (arg[1] == '+' && arg[2] == '+'))) + /* Replace: + * "[:...:]" with "\[:...:]" + * "[++...]" with "\[++...]" + * "\{" with "\\{" + */ + if ((arg[0] == '[' && (arg[1] == ':' + || (arg[1] == '+' && arg[2] == '+'))) + || (arg[0] == '\\' && arg[1] == '{')) *d++ = '\\'; for (s = arg; *s; ++s) diff --git a/src/version.c b/src/version.c index a2ca2386e8..6afaf8d317 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 651, /**/ 650, /**/ From 642db37e7b36cdac4e485fc7af77b70dace01fd3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 15:15:07 +0200 Subject: [PATCH 010/136] Added tag v7-3-651 for changeset ece544e85821 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index c21e192313..fb9bdca4f7 100644 --- a/.hgtags +++ b/.hgtags @@ -1987,3 +1987,4 @@ e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648 063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649 a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 +ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 From 8acd9d785d3b7e35d834c92bb91a0ce91f3d3060 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 17:28:21 +0200 Subject: [PATCH 011/136] updated for version 7.3.652 Problem: Workaround for Python crash isn't perfect. Solution: Change the type of the length argument. (Sean Estabrooks) --- src/if_py_both.h | 7 +------ src/version.c | 2 ++ 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 60375d1161..931ecb98a7 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -74,18 +74,13 @@ static struct PyMethodDef OutputMethods[] = { static PyObject * OutputWrite(PyObject *self, PyObject *args) { - int len; + Py_ssize_t len; char *str = NULL; int error = ((OutputObject *)(self))->error; if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len)) return NULL; - /* TODO: This works around a gcc optimizer problem and avoids Vim - * from crashing. Should find a real solution. */ - if (str == NULL) - return NULL; - Py_BEGIN_ALLOW_THREADS Python_Lock_Vim(); writer((writefn)(error ? emsg : msg), (char_u *)str, len); diff --git a/src/version.c b/src/version.c index 6afaf8d317..37791e6a82 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 652, /**/ 651, /**/ From f4b74091c3ba112b54d18e1d0bfac128d303ae2b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 17:28:21 +0200 Subject: [PATCH 012/136] Added tag v7-3-652 for changeset 5edf3c51aa93 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index fb9bdca4f7..ba6451786c 100644 --- a/.hgtags +++ b/.hgtags @@ -1988,3 +1988,4 @@ e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649 a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 +5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652 From ff38ed852335ccdf79007020bd5a82779f29c4a0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 17:57:39 +0200 Subject: [PATCH 013/136] updated for version 7.3.653 Problem: MingW needs build rule for included XPM files. Object directory for 32 and 64 builds is the same, also for MSVC. Solution: Add MingW build rule to use included XPM files. Add the CPU or architecture to the object directory name. (Sergey Khorev) --- src/Make_ming.mak | 69 ++++++++++++++++++++++++++++++---------------- src/Make_mvc.mak | 7 +++-- src/version.c | 2 ++ src/xpm/README.txt | 3 ++ 4 files changed, 56 insertions(+), 25 deletions(-) diff --git a/src/Make_ming.mak b/src/Make_ming.mak index de706eacc9..8e523a24e3 100644 --- a/src/Make_ming.mak +++ b/src/Make_ming.mak @@ -1,14 +1,15 @@ -# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'. +# Makefile for VIM on Win32 +# # Info at http://www.mingw.org -# Also requires 'GNU make 3.77', which you can get through a link -# to 'JanJaap's page from the above page. +# Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net +# Also requires GNU make, which you can download from the same sites. # Get missing libraries from http://gnuwin32.sf.net. # # Tested on Win32 NT 4 and Win95. # -# To make everything, just 'make -f Make_ming.mak' -# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe' -# After a run, you can 'make -f Make_ming.mak clean' to clean up +# To make everything, just 'make -f Make_ming.mak'. +# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'. +# After a run, you can 'make -f Make_ming.mak clean' to clean up. # # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think # it's just run out of memory or something. Run again, and it will continue @@ -20,8 +21,8 @@ # "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs: # http://www.matcode.com/mpress.htm # -# Maintained by Ron Aaron -# updated 2003 Jan 20 +# Maintained by Ron Aaron et al. +# Updated 2012 Sep 5. #>>>>> choose options: # set to yes for a debug build @@ -31,32 +32,33 @@ OPTIMIZE=MAXSPEED # set to yes to make gvim, no for vim GUI=yes # FEATURES=[TINY | SMALL | NORMAL | BIG | HUGE] -# set to TINY to make minimal version (few features) +# Set to TINY to make minimal version (few features). FEATURES=BIG -# set to one of i386, i486, i586, i686 as the minimum target processor +# Set to one of i386, i486, i586, i686 as the minimum target processor. +# For amd64/x64 architecture set ARCH=x86-64 . ARCH=i386 -# set to yes to cross-compile from unix; no=native Windows +# Set to yes to cross-compile from unix; no=native Windows. CROSS=no -# set to path to iconv.h and libiconv.a to enable using 'iconv.dll' +# Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'. #ICONV="." ICONV=yes GETTEXT=yes -# set to yes to include multibyte support +# Set to yes to include multibyte support. MBYTE=yes -# set to yes to include IME support +# Set to yes to include IME support. IME=yes DYNAMIC_IME=yes -# set to yes to enable writing a postscript file with :hardcopy +# Set to yes to enable writing a postscript file with :hardcopy. POSTSCRIPT=no -# set to yes to enable OLE support +# Set to yes to enable OLE support. OLE=no -# Set the default $(WINVER) to make it work with pre-Win2k +# Set the default $(WINVER) to make it work with pre-Win2k. ifndef WINVER WINVER = 0x0500 endif -# Set to yes to enable Cscope support +# Set to yes to enable Cscope support. CSCOPE=yes -# Set to yes to enable Netbeans support +# Set to yes to enable Netbeans support. NETBEANS=$(GUI) @@ -431,11 +433,32 @@ endif endif endif -ifdef XPM # Only allow XPM for a GUI build. ifeq (yes, $(GUI)) -CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include + +ifndef XPM +ifeq ($(ARCH),i386) +XPM = xpm/x86 endif +ifeq ($(ARCH),i486) +XPM = xpm/x86 +endif +ifeq ($(ARCH),i586) +XPM = xpm/x86 +endif +ifeq ($(ARCH),i686) +XPM = xpm/x86 +endif +ifeq ($(ARCH),x86-64) +XPM = xpm/x64 +endif +endif +ifdef XPM +ifneq ($(XPM),no) +CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include +endif +endif + endif ifeq ($(DEBUG),yes) @@ -565,10 +588,10 @@ TARGET := gvim$(DEBUG_SUFFIX).exe DEFINES += $(DEF_GUI) OBJ += $(GUIOBJ) LFLAGS += -mwindows -OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX) +OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH) else TARGET := vim$(DEBUG_SUFFIX).exe -OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX) +OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH) endif ifdef GETTEXT diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 283f0d43c4..20b306d19c 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -213,6 +213,7 @@ CPU = i386 # We're on Windows 95 CPU = i386 !endif # !PROCESSOR_ARCHITECTURE +OBJDIR = $(OBJDIR)$(CPU) # Build a retail version by default @@ -283,10 +284,12 @@ NETBEANS_LIB = WSock32.lib !ifndef XPM # XPM is not set, use the included xpm files, depending on the architecture. -!if ("$(CPU)" == "AMD64") || ("$(CPU)" == "IA64") +!if "$(CPU)" == "AMD64" XPM = xpm\x64 -!else +!elseif "$(CPU)" == "i386" XPM = xpm\x86 +!else +XPM = no !endif !endif !if "$(XPM)" != "no" diff --git a/src/version.c b/src/version.c index 37791e6a82..4c31c9761f 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 653, /**/ 652, /**/ diff --git a/src/xpm/README.txt b/src/xpm/README.txt index 6ec5220899..586de6c817 100644 --- a/src/xpm/README.txt +++ b/src/xpm/README.txt @@ -10,6 +10,9 @@ nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86 MinGW: mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86 +MinGW 64 for x64: +mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64 + Microsoft Visual C++ on x64 (tested with versions 2008 and 2010): nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64 From 15ffbeb6c67b8e261d3b549bc6f623772c55b317 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 17:57:39 +0200 Subject: [PATCH 014/136] Added tag v7-3-653 for changeset fd0c7452fa51 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index ba6451786c..0d2c5a5a88 100644 --- a/.hgtags +++ b/.hgtags @@ -1989,3 +1989,4 @@ e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646 a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652 +fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 From 817a4b1cce62b87eff76d5729fcbf0f76cc1f608 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:45:28 +0200 Subject: [PATCH 015/136] updated for version 7.3.654 Problem: When creating a Vim dictionary from Python objects an empty key might be used. Solution: Do not use empty keys, throw an IndexError. (ZyX) --- src/if_py_both.h | 28 +++++++++++++++++++++------- src/version.c | 2 ++ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 931ecb98a7..3ab18516eb 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -607,6 +607,14 @@ pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last) static PyTypeObject DictionaryType; +#define DICTKEY_GET_NOTEMPTY(err) \ + DICTKEY_GET(err) \ + if (*key == NUL) \ + { \ + PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \ + return err; \ + } + typedef struct { PyObject_HEAD @@ -659,7 +667,7 @@ pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict) if (valObject == NULL) return -1; - DICTKEY_GET(-1) + DICTKEY_GET_NOTEMPTY(-1) di = dictitem_alloc(key); @@ -730,7 +738,7 @@ pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict) return -1; } - DICTKEY_GET(-1) + DICTKEY_GET_NOTEMPTY(-1) valObject = PyTuple_GetItem(litem, 1); if (valObject == NULL) @@ -784,16 +792,22 @@ DictionaryLength(PyObject *self) DictionaryItem(PyObject *self, PyObject *keyObject) { char_u *key; - dictitem_T *val; + dictitem_T *di; DICTKEY_DECL - DICTKEY_GET(NULL) + DICTKEY_GET_NOTEMPTY(NULL) - val = dict_find(((DictionaryObject *) (self))->dict, key, -1); + di = dict_find(((DictionaryObject *) (self))->dict, key, -1); + + if (di == NULL) + { + PyErr_SetString(PyExc_IndexError, _("no such key in dictionary")); + return NULL; + } DICTKEY_UNREF - return ConvertToPyObject(&val->di_tv); + return ConvertToPyObject(&di->di_tv); } static PyInt @@ -811,7 +825,7 @@ DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject) return -1; } - DICTKEY_GET(-1) + DICTKEY_GET_NOTEMPTY(-1) di = dict_find(d, key, -1); diff --git a/src/version.c b/src/version.c index 4c31c9761f..b3daa7d61c 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 654, /**/ 653, /**/ From 11f53ee19aceecb4c721c033624d690c8941687f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:45:28 +0200 Subject: [PATCH 016/136] Added tag v7-3-654 for changeset 73557eda7027 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 0d2c5a5a88..911a325b98 100644 --- a/.hgtags +++ b/.hgtags @@ -1990,3 +1990,4 @@ a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650 ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652 fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 +73557eda70271b49015265b7147562b63a7a094d v7-3-654 From 16c23bed52e3cbb3dd89b43c1ba07d0fb8c5db8f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:49:24 +0200 Subject: [PATCH 017/136] updated for version 7.3.655 Problem: 64 bit MingW xpm .a file is missing. Solution: Add the file. (Sergey Khorev) --- src/version.c | 2 ++ src/xpm/x64/lib/libXpm.a | Bin 0 -> 73758 bytes 2 files changed, 2 insertions(+) create mode 100644 src/xpm/x64/lib/libXpm.a diff --git a/src/version.c b/src/version.c index b3daa7d61c..9deec1739c 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 655, /**/ 654, /**/ diff --git a/src/xpm/x64/lib/libXpm.a b/src/xpm/x64/lib/libXpm.a new file mode 100644 index 0000000000000000000000000000000000000000..cd8bb7e8af647372a73fab5fa72b2cf28f428b1f GIT binary patch literal 73758 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 literal 0 HcmV?d00001 From 07eda3d71f9936496dc474083d9f548b9cead3df Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:49:25 +0200 Subject: [PATCH 018/136] Added tag v7-3-655 for changeset 0d3238b54963 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 911a325b98..b1223d1b0f 100644 --- a/.hgtags +++ b/.hgtags @@ -1991,3 +1991,4 @@ ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652 fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 73557eda70271b49015265b7147562b63a7a094d v7-3-654 +0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655 From 8c950049fd64ec87d4480651d7c313974dbed867 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:54:48 +0200 Subject: [PATCH 019/136] updated for version 7.3.656 Problem: Internal error in :pyeval. Solution: Handle failed object conversion. (ZyX) --- src/if_python.c | 8 ++++++-- src/if_python3.c | 4 ++++ src/version.c | 2 ++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/if_python.c b/src/if_python.c index 1740979ac7..836bf1b3f1 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -1025,8 +1025,8 @@ static int CurrentSetattr(PyObject *, char *, PyObject *); static PySequenceMethods BufferAsSeq = { (PyInquiry) BufferLength, /* sq_length, len(x) */ - (binaryfunc) 0, /* BufferConcat, */ /* sq_concat, x+y */ - (PyIntArgFunc) 0, /* BufferRepeat, */ /* sq_repeat, x*n */ + (binaryfunc) 0, /* BufferConcat, sq_concat, x+y */ + (PyIntArgFunc) 0, /* BufferRepeat, sq_repeat, x*n */ (PyIntArgFunc) BufferItem, /* sq_item, x[i] */ (PyIntIntArgFunc) BufferSlice, /* sq_slice, x[i:j] */ (PyIntObjArgProc) BufferAssItem, /* sq_ass_item, x[i]=v */ @@ -1787,6 +1787,10 @@ do_pyeval (char_u *str, typval_T *rettv) case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break; case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break; case VAR_FUNC: func_ref(rettv->vval.v_string); break; + case VAR_UNKNOWN: + rettv->v_type = VAR_NUMBER; + rettv->vval.v_number = 0; + break; } } diff --git a/src/if_python3.c b/src/if_python3.c index a62971e886..57257e643e 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -1817,6 +1817,10 @@ do_py3eval (char_u *str, typval_T *rettv) case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break; case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break; case VAR_FUNC: func_ref(rettv->vval.v_string); break; + case VAR_UNKNOWN: + rettv->v_type = VAR_NUMBER; + rettv->vval.v_number = 0; + break; } } diff --git a/src/version.c b/src/version.c index 9deec1739c..0124df521b 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 656, /**/ 655, /**/ From b8f0a817401721bdccb7baeb740a887245d4e8c4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 18:54:48 +0200 Subject: [PATCH 020/136] Added tag v7-3-656 for changeset a2f61b2b8e77 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index b1223d1b0f..5f7c495adf 100644 --- a/.hgtags +++ b/.hgtags @@ -1992,3 +1992,4 @@ ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651 fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 73557eda70271b49015265b7147562b63a7a094d v7-3-654 0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655 +a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 From 8d41f92290cfe0c083f7df474ea11849111c959b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 19:03:56 +0200 Subject: [PATCH 021/136] updated for version 7.3.657 Problem: Python bindings silently truncate string values containing NUL. Solution: Fail when a string contains NUL. (ZyX) --- src/if_python.c | 8 ++++++-- src/if_python3.c | 17 +++++++++++------ src/version.c | 2 ++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/if_python.c b/src/if_python.c index 836bf1b3f1..385905e24f 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -191,6 +191,7 @@ struct PyMethodDef { Py_ssize_t a; }; # define PyRun_SimpleString dll_PyRun_SimpleString # define PyRun_String dll_PyRun_String # define PyString_AsString dll_PyString_AsString +# define PyString_AsStringAndSize dll_PyString_AsStringAndSize # define PyString_FromString dll_PyString_FromString # define PyString_FromStringAndSize dll_PyString_FromStringAndSize # define PyString_Size dll_PyString_Size @@ -288,6 +289,7 @@ static PyObject*(*dll_PyModule_GetDict)(PyObject *); static int(*dll_PyRun_SimpleString)(char *); static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *); static char*(*dll_PyString_AsString)(PyObject *); +static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, int *); static PyObject*(*dll_PyString_FromString)(const char *); static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt); static PyInt(*dll_PyString_Size)(PyObject *); @@ -406,6 +408,7 @@ static struct {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString}, {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String}, {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString}, + {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize}, {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString}, {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize}, {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size}, @@ -578,14 +581,15 @@ static PyTypeObject RangeType; static int initialised = 0; #define PYINITIALISED initialised -/* Add conversion from PyInt? */ #define DICTKEY_GET(err) \ if (!PyString_Check(keyObject)) \ { \ PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ return err; \ } \ - key = (char_u *) PyString_AsString(keyObject); + if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ + return err; + #define DICTKEY_UNREF #define DICTKEY_DECL diff --git a/src/if_python3.c b/src/if_python3.c index 57257e643e..36ae8eb778 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -172,6 +172,7 @@ static void init_structs(void); # define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString # undef PyBytes_AsString # define PyBytes_AsString py3_PyBytes_AsString +# define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize # undef PyBytes_FromString # define PyBytes_FromString py3_PyBytes_FromString # define PyFloat_FromDouble py3_PyFloat_FromDouble @@ -273,6 +274,7 @@ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc) static char* (*py3__PyUnicode_AsString)(PyObject *unicode); static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors); static char* (*py3_PyBytes_AsString)(PyObject *bytes); +static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length); static PyObject* (*py3_PyBytes_FromString)(char *str); static PyObject* (*py3_PyFloat_FromDouble)(double num); static double (*py3_PyFloat_AsDouble)(PyObject *); @@ -379,6 +381,7 @@ static struct {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab}, {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString}, {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString}, + {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize}, {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, @@ -544,17 +547,20 @@ static int py3initialised = 0; #define PYINITIALISED py3initialised -/* Add conversion from PyInt? */ +#define DICTKEY_DECL PyObject *bytes = NULL; + #define DICTKEY_GET(err) \ if (PyBytes_Check(keyObject)) \ - key = (char_u *) PyBytes_AsString(keyObject); \ + { \ + if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ + return err; \ + } \ else if (PyUnicode_Check(keyObject)) \ { \ bytes = PyString_AsBytes(keyObject); \ if (bytes == NULL) \ return err; \ - key = (char_u *) PyBytes_AsString(bytes); \ - if (key == NULL) \ + if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ return err; \ } \ else \ @@ -562,12 +568,11 @@ static int py3initialised = 0; PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \ return err; \ } + #define DICTKEY_UNREF \ if (bytes != NULL) \ Py_XDECREF(bytes); -#define DICTKEY_DECL PyObject *bytes = NULL; - /* * Include the code shared with if_python.c */ diff --git a/src/version.c b/src/version.c index 0124df521b..3e0ac40f49 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 657, /**/ 656, /**/ From 3fda39417eb4505832b530a239dcd0fa77f10cb3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 19:03:56 +0200 Subject: [PATCH 022/136] Added tag v7-3-657 for changeset 3958b0e672d6 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 5f7c495adf..85a5ff148e 100644 --- a/.hgtags +++ b/.hgtags @@ -1993,3 +1993,4 @@ fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 73557eda70271b49015265b7147562b63a7a094d v7-3-654 0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655 a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 +3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657 From fa6de2bb62f835137fb2f441f0c9f09b5183ce1a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 19:09:11 +0200 Subject: [PATCH 023/136] updated for version 7.3.658 Problem: NUL bytes truncate strings when converted from Python. Solution: Handle truncation as an error. (ZyX) --- src/if_py_both.h | 14 ++++++++++---- src/if_python3.c | 5 +++-- src/version.c | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 3ab18516eb..0031003eda 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -2530,8 +2530,10 @@ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict) #if PY_MAJOR_VERSION >= 3 else if (PyBytes_Check(obj)) { - char_u *result = (char_u *) PyBytes_AsString(obj); + char_u *result; + if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1) + return -1; if (result == NULL) return -1; @@ -2549,7 +2551,8 @@ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict) if (bytes == NULL) return -1; - result = (char_u *) PyBytes_AsString(bytes); + if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1) + return -1; if (result == NULL) return -1; @@ -2572,7 +2575,8 @@ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict) if (bytes == NULL) return -1; - result=(char_u *) PyString_AsString(bytes); + if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1) + return -1; if (result == NULL) return -1; @@ -2587,8 +2591,10 @@ _ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict) } else if (PyString_Check(obj)) { - char_u *result = (char_u *) PyString_AsString(obj); + char_u *result; + if(PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1) + return -1; if (result == NULL) return -1; diff --git a/src/if_python3.c b/src/if_python3.c index 36ae8eb778..0c10f8dbc7 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -85,6 +85,7 @@ static void init_structs(void); #define PyString_AsString(obj) PyBytes_AsString(obj) #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) #define PyString_FromString(repr) PyUnicode_FromString(repr) +#define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len) #if defined(DYNAMIC_PYTHON3) || defined(PROTO) @@ -552,7 +553,7 @@ static int py3initialised = 0; #define DICTKEY_GET(err) \ if (PyBytes_Check(keyObject)) \ { \ - if (PyBytes_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ + if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \ return err; \ } \ else if (PyUnicode_Check(keyObject)) \ @@ -560,7 +561,7 @@ static int py3initialised = 0; bytes = PyString_AsBytes(keyObject); \ if (bytes == NULL) \ return err; \ - if (PyBytes_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ + if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \ return err; \ } \ else \ diff --git a/src/version.c b/src/version.c index 3e0ac40f49..62bc81957f 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 658, /**/ 657, /**/ From c6a77c4fa67d0e8caa74a9d1514817b753bdc4b0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 19:09:11 +0200 Subject: [PATCH 024/136] Added tag v7-3-658 for changeset 15cdcb8ddcfb --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 85a5ff148e..d644424f20 100644 --- a/.hgtags +++ b/.hgtags @@ -1994,3 +1994,4 @@ fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655 a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657 +15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658 From bb507fd8056d5e966342b0517df5f10c1710068c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 5 Sep 2012 19:17:42 +0200 Subject: [PATCH 025/136] updated for version 7.3.659 Problem: Recent Python changes are not tested. Solution: Add tests for Python bindings. (ZyX) --- src/testdir/test86.in | 54 +++++++++++++++++++++++++++++++++++-------- src/testdir/test86.ok | 12 ++++++++-- src/testdir/test87.in | 54 +++++++++++++++++++++++++++++++++++-------- src/testdir/test87.ok | 12 ++++++++-- src/version.c | 2 ++ 5 files changed, 110 insertions(+), 24 deletions(-) diff --git a/src/testdir/test86.in b/src/testdir/test86.in index 395ba96c47..93eb400853 100644 --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -176,28 +176,62 @@ STARTTEST :else : $put ='[0.0, 0.0]' :endif +:let messages=[] +:py < Date: Wed, 5 Sep 2012 19:17:42 +0200 Subject: [PATCH 026/136] Added tag v7-3-659 for changeset e75da4a3225d --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d644424f20..03b08530d7 100644 --- a/.hgtags +++ b/.hgtags @@ -1995,3 +1995,4 @@ fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653 a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657 15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658 +e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 From 6517945b46bc36290b405b9f416e058555ad3e57 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 12 Sep 2012 18:19:46 +0200 Subject: [PATCH 027/136] updated for version 7.3.660 Problem: ":help !" jumps to help for ":!". Solution: Adjust check for tag header line. (Andy Wokula) --- src/tag.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tag.c b/src/tag.c index 4f2426b90c..34e9c4ff27 100644 --- a/src/tag.c +++ b/src/tag.c @@ -1797,7 +1797,7 @@ line_read_in: */ if (state == TS_START) { - if (STRNCMP(lbuf, "!_TAG_", 6) <= 0) + if (STRNCMP(lbuf, "!_TAG_", 6) == 0) { /* * Read header line. diff --git a/src/version.c b/src/version.c index 06afdf2cc5..3851b3f889 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 660, /**/ 659, /**/ From b0abec0519a7218113d14a3629ea0e0fa5b2ec3b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 12 Sep 2012 18:19:46 +0200 Subject: [PATCH 028/136] Added tag v7-3-660 for changeset 8fdadfccd184 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 03b08530d7..d887a90ad6 100644 --- a/.hgtags +++ b/.hgtags @@ -1996,3 +1996,4 @@ a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657 15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658 e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 +8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660 From b9b0f25c07782eff7549df6bc9982d7694d2de2b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 12 Sep 2012 20:21:43 +0200 Subject: [PATCH 029/136] updated for version 7.3.661 Problem: SEGV in Python code. Solution: Initialize len to zero. Use the right function depending on version. (Maxim Philippov) --- src/if_py_both.h | 2 +- src/if_python.c | 14 +++++++++++--- src/if_python3.c | 13 ++++++++++--- src/version.c | 2 ++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 0031003eda..5e12638f5e 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -74,7 +74,7 @@ static struct PyMethodDef OutputMethods[] = { static PyObject * OutputWrite(PyObject *self, PyObject *args) { - Py_ssize_t len; + Py_ssize_t len = 0; char *str = NULL; int error = ((OutputObject *)(self))->error; diff --git a/src/if_python.c b/src/if_python.c index 385905e24f..a20aba0f32 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -44,8 +44,6 @@ # undef _XOPEN_SOURCE /* pyconfig.h defines it as well. */ #endif -#define PY_SSIZE_T_CLEAN - #include #if defined(MACOS) && !defined(MACOS_X_UNIX) # include "macglue.h" @@ -54,6 +52,10 @@ #undef main /* Defined in python.h - aargh */ #undef HAVE_FCNTL_H /* Clash with os_win32.h */ +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 +# define PY_SSIZE_T_CLEAN +#endif + static void init_structs(void); #define PyBytes_FromString PyString_FromString @@ -358,8 +360,15 @@ static struct PYTHON_PROC *ptr; } python_funcname_table[] = { +#ifndef PY_SSIZE_T_CLEAN {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse}, {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, + {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue}, +#else + {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse}, + {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple}, + {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue}, +#endif {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free}, {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc}, {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString}, @@ -422,7 +431,6 @@ static struct {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv}, {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type}, {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready}, - {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue}, {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod}, # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \ && SIZEOF_SIZE_T != SIZEOF_INT diff --git a/src/if_python3.c b/src/if_python3.c index 0c10f8dbc7..43ed0e2a5f 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -42,8 +42,6 @@ # undef _DEBUG #endif -#define PY_SSIZE_T_CLEAN - #ifdef F_BLANK # undef F_BLANK #endif @@ -66,6 +64,10 @@ #undef main /* Defined in python.h - aargh */ #undef HAVE_FCNTL_H /* Clash with os_win32.h */ +#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 +# define PY_SSIZE_T_CLEAN +#endif + static void init_structs(void); /* The "surrogateescape" error handler is new in Python 3.1 */ @@ -328,7 +330,13 @@ static struct {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv}, {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome}, {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize}, +#ifndef PY_SSIZE_T_CLEAN {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, + {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue}, +#else + {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple}, + {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue}, +#endif {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free}, {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc}, {"PyList_New", (PYTHON_PROC*)&py3_PyList_New}, @@ -364,7 +372,6 @@ static struct {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter}, {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, - {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue}, {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString}, {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong}, diff --git a/src/version.c b/src/version.c index 3851b3f889..4b13506475 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 661, /**/ 660, /**/ From 80aa5934378b46b47b3f29a7b8e83c152cc124dd Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 12 Sep 2012 20:21:43 +0200 Subject: [PATCH 030/136] Added tag v7-3-661 for changeset 5e909c379a1e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d887a90ad6..f1923558c8 100644 --- a/.hgtags +++ b/.hgtags @@ -1997,3 +1997,4 @@ a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658 e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660 +5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661 From 88d5f3b3bb8505738f8a1dde0071d5e3aff45b25 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 16:36:32 +0200 Subject: [PATCH 031/136] updated for version 7.3.662 Problem: Can't build Ruby interface with Ruby 1.9.3. Solution: Add missing functions. (V. Ondruch) --- .hgignore | 2 ++ src/if_ruby.c | 10 +++++++++- src/version.c | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.hgignore b/.hgignore index 0451da43ed..6ca02cb6a5 100644 --- a/.hgignore +++ b/.hgignore @@ -33,6 +33,7 @@ src/auto/pathdef.c *.res *.RES src/pathdef.c +src/perl.c src/Obj*/pathdef.c gvimext.dll gvimext.lib @@ -43,6 +44,7 @@ gvimext.lib *.mo *.swp *~ +src/po/vim.pot # Generated by "make test" src/po/*.ck diff --git a/src/if_ruby.c b/src/if_ruby.c index ab4ac69972..dd1ba47009 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -178,6 +178,9 @@ static void ruby_vim_init(void); #define rb_hash_new dll_rb_hash_new #define rb_inspect dll_rb_inspect #define rb_int2inum dll_rb_int2inum +#define rb_fix2int dll_rb_fix2int +#define rb_num2int dll_rb_num2int +#define rb_num2uint dll_rb_num2uint #define rb_lastline_get dll_rb_lastline_get #define rb_lastline_set dll_rb_lastline_set #define rb_load_protect dll_rb_load_protect @@ -268,7 +271,9 @@ static VALUE (*dll_rb_hash_aset) (VALUE, VALUE, VALUE); static VALUE (*dll_rb_hash_new) (void); static VALUE (*dll_rb_inspect) (VALUE); static VALUE (*dll_rb_int2inum) (long); -static VALUE (*dll_rb_int2inum) (long); +static long (*dll_rb_fix2int) (VALUE); +static long (*dll_rb_num2int) (VALUE); +static unsigned long (*dll_rb_num2uint) (VALUE); static VALUE (*dll_rb_lastline_get) (void); static void (*dll_rb_lastline_set) (VALUE); static void (*dll_rb_load_protect) (VALUE, int, int*); @@ -377,6 +382,9 @@ static struct {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new}, {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect}, {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum}, + {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int}, + {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int}, + {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint}, {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get}, {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set}, {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect}, diff --git a/src/version.c b/src/version.c index 4b13506475..a6e3ec38ce 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 662, /**/ 661, /**/ From f410d4d8d4491b99d14f6d8c0c72a07d6fb703bf Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 16:36:32 +0200 Subject: [PATCH 032/136] Added tag v7-3-662 for changeset 87afa95a2992 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index f1923558c8..f562645d66 100644 --- a/.hgtags +++ b/.hgtags @@ -1998,3 +1998,4 @@ a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656 e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660 5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661 +87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662 From 404f0c6aa53bf5dc6ae626cc95ae236de8d2b0a4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 16:47:07 +0200 Subject: [PATCH 033/136] updated for version 7.3.663 Problem: End of color scheme name not clear in E185. (Aaron Lewis) Solution: Put the name in single quotes. --- src/ex_docmd.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ex_docmd.c b/src/ex_docmd.c index 2257c551ca..ebc8b98d11 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -6466,7 +6466,7 @@ ex_colorscheme(eap) #endif } else if (load_colors(eap->arg) == FAIL) - EMSG2(_("E185: Cannot find color scheme %s"), eap->arg); + EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg); } static void diff --git a/src/version.c b/src/version.c index a6e3ec38ce..43d11611bd 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 663, /**/ 662, /**/ From 0f1ec6285e0174dfe9a83afd30204491dd2aab6e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 16:47:07 +0200 Subject: [PATCH 034/136] Added tag v7-3-663 for changeset 2a200527131f --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index f562645d66..b8d2d15c67 100644 --- a/.hgtags +++ b/.hgtags @@ -1999,3 +1999,4 @@ e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660 5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661 87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662 +2a200527131fac8f50487790ec201badbccdaf0e v7-3-663 From d40b6dc0418aeec5082c38154e9778a20d569172 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 18:03:37 +0200 Subject: [PATCH 035/136] updated for version 7.3.664 Problem: Buffer overflow in unescaping text. (Raymond Ko) Solution: Limit check for multi-byte character to 4 bytes. --- src/mbyte.c | 14 ++++++++++---- src/version.c | 2 ++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/mbyte.c b/src/mbyte.c index ca3204f214..33e894e88c 100644 --- a/src/mbyte.c +++ b/src/mbyte.c @@ -3793,13 +3793,15 @@ mb_charlen_len(str, len) mb_unescape(pp) char_u **pp; { - static char_u buf[MB_MAXBYTES + 1]; - int n, m = 0; + static char_u buf[6]; + int n; + int m = 0; char_u *str = *pp; /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI - * KS_EXTRA KE_CSI to CSI. */ - for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n) + * KS_EXTRA KE_CSI to CSI. + * Maximum length of a utf-8 character is 4 bytes. */ + for (n = 0; str[n] != NUL && m < 4; ++n) { if (str[n] == K_SPECIAL && str[n + 1] == KS_SPECIAL @@ -3836,6 +3838,10 @@ mb_unescape(pp) *pp = str + n + 1; return buf; } + + /* Bail out quickly for ASCII. */ + if (buf[0] < 128) + break; } return NULL; } diff --git a/src/version.c b/src/version.c index 43d11611bd..d8ada6990e 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 664, /**/ 663, /**/ From 2d2a62e9693e0ecfa9240ee73311ca15d2953337 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 18:03:37 +0200 Subject: [PATCH 036/136] Added tag v7-3-664 for changeset f86619764a1e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index b8d2d15c67..3dbb27aee2 100644 --- a/.hgtags +++ b/.hgtags @@ -2000,3 +2000,4 @@ e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661 87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662 2a200527131fac8f50487790ec201badbccdaf0e v7-3-663 +f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 From b0407a2775c9c89e372cf0f66fa6260b1f8d7262 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 18:27:12 +0200 Subject: [PATCH 037/136] updated for version 7.3.665 Problem: MSVC 11 is not supported. Solution: Recognize MSVC 11. (Raymond Ko) --- src/Make_mvc.mak | 7 +++++-- src/version.c | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index 20b306d19c..afc3994750 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -395,6 +395,9 @@ MSVCVER = 10.0 !if "$(_NMAKE_VER)" == "10.00.30319.01" MSVCVER = 10.0 !endif +!if "$(_NMAKE_VER)" == "11.00.50727.1" +MSVCVER = 11.0 +!endif !endif # Abort bulding VIM if version of VC is unrecognised. @@ -409,7 +412,7 @@ MSVCVER = 10.0 !endif # Convert processor ID to MVC-compatible number -!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") +!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0") !if "$(CPUNR)" == "i386" CPUARG = /G3 !elseif "$(CPUNR)" == "i486" @@ -443,7 +446,7 @@ OPTFLAG = /O2 OPTFLAG = /Ox !endif -!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") +!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0") # Use link time code generation if not worried about size !if "$(OPTIMIZE)" != "SPACE" OPTFLAG = $(OPTFLAG) /GL diff --git a/src/version.c b/src/version.c index d8ada6990e..0452d92bbc 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 665, /**/ 664, /**/ From 109a341dcda27d8cfa67237c0b8e6efd9d8a57f7 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 18:27:12 +0200 Subject: [PATCH 038/136] Added tag v7-3-665 for changeset 35939e1e25ff --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 3dbb27aee2..f03e3f594b 100644 --- a/.hgtags +++ b/.hgtags @@ -2001,3 +2001,4 @@ e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662 2a200527131fac8f50487790ec201badbccdaf0e v7-3-663 f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 +35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665 From 99470dd07097538950606e211b1f22ba2a503c55 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 22:00:08 +0200 Subject: [PATCH 039/136] updated for version 7.3.666 Problem: With MSVC 11 Win32.mak is not found. Solution: Add the SDK_INCLUDE_DIR variable. (Raymond Ko) --- src/Make_mvc.mak | 12 ++++++++++-- src/version.c | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Make_mvc.mak b/src/Make_mvc.mak index afc3994750..357b677f0e 100644 --- a/src/Make_mvc.mak +++ b/src/Make_mvc.mak @@ -1,7 +1,7 @@ # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me) # and Win64, using the Microsoft Visual C++ compilers. Known to work with # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005), -# VC9 (VS2008), and VC10 (VS2010). +# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012) # # To build using other Windows compilers, see INSTALLpc.txt # @@ -15,6 +15,9 @@ # This will build the console version of Vim with no additional interfaces. # To add features, define any of the following: # +# For MSVC 11 you need to specify where the Win32.mak file is, e.g.: +# SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include" +# # !!!! After changing features do "nmake clean" first !!!! # # Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG) @@ -227,7 +230,12 @@ MAKEFLAGS_GVIMEXT = DEBUG=yes # Get all sorts of useful, standard macros from the Platform SDK. +!ifdef SDK_INCLUDE_DIR +!include $(SDK_INCLUDE_DIR)\Win32.mak +!else !include +!endif + # Flag to turn on Win64 compatibility warnings for VC7.x and VC8. WP64CHECK = /Wp64 @@ -911,7 +919,7 @@ LINKARGS2 = $(CON_LIB) $(GUI_LIB) $(LIBC) $(OLE_LIB) user32.lib $(SNIFF_LIB) \ # Report link time code generation progress if used. !ifdef NODEBUG -!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") +!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0") !if "$(OPTIMIZE)" != "SPACE" LINKARGS1 = $(LINKARGS1) /LTCG:STATUS !endif diff --git a/src/version.c b/src/version.c index 0452d92bbc..95404c4519 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 666, /**/ 665, /**/ From 58a38e76a8e415c13578df49fc08f6bdaacabda7 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Tue, 18 Sep 2012 22:00:08 +0200 Subject: [PATCH 040/136] Added tag v7-3-666 for changeset 1e22adc6176e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index f03e3f594b..6c67aaa372 100644 --- a/.hgtags +++ b/.hgtags @@ -2002,3 +2002,4 @@ e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 2a200527131fac8f50487790ec201badbccdaf0e v7-3-663 f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665 +1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666 From a1a8054cd6c98268e3955959c41c4b03728d2c84 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 12:42:44 +0200 Subject: [PATCH 041/136] updated for version 7.3.667 Problem: Unused variables in Perl interface. Solution: Adjust #ifdefs. --- .hgignore | 2 +- src/if_perl.xs | 10 ++++++++-- src/version.c | 2 ++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.hgignore b/.hgignore index 6ca02cb6a5..1d089e292a 100644 --- a/.hgignore +++ b/.hgignore @@ -32,8 +32,8 @@ src/auto/pathdef.c *.suo *.res *.RES +src/if_perl.c src/pathdef.c -src/perl.c src/Obj*/pathdef.c gvimext.dll gvimext.lib diff --git a/src/if_perl.xs b/src/if_perl.xs index 4dc80beaa5..56e0eb3a1a 100644 --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -315,6 +315,9 @@ static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*); static void (*Perl_sv_free2)(pTHX_ SV*); static void (*Perl_sys_init)(int* argc, char*** argv); static void (*Perl_sys_term)(void); +static void (*Perl_call_list)(pTHX_ I32, AV*); +# if (PERL_REVISION == 5) && (PERL_VERSION >= 14) +# else static SV** (*Perl_ISv_ptr)(register PerlInterpreter*); static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*); static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*); @@ -326,16 +329,19 @@ static I32** (*Perl_Imarkstack_ptr_ptr)(register PerlInterpreter*); static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*); static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*); static OP** (*Perl_Iop_ptr)(register PerlInterpreter*); -static void (*Perl_call_list)(pTHX_ I32, AV*); static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*); static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*); +# endif #endif +#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) +#else static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*); static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*); static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*); -static void (*boot_DynaLoader)_((pTHX_ CV*)); static perl_key* (*Perl_Gthr_key_ptr)_((pTHX)); +#endif +static void (*boot_DynaLoader)_((pTHX_ CV*)); /* * Table of name to function pointer of perl. diff --git a/src/version.c b/src/version.c index 95404c4519..4c93e3a398 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 667, /**/ 666, /**/ From 603841e80c7048a97b6b7dab21a7aa3053f34dd4 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 12:42:44 +0200 Subject: [PATCH 042/136] Added tag v7-3-667 for changeset cd36c0fed43e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 6c67aaa372..d9cab3fd93 100644 --- a/.hgtags +++ b/.hgtags @@ -2003,3 +2003,4 @@ e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659 f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665 1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666 +cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 From f2f35ba4fd1bf82c404c1f0b51f2a87ffe57afc9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 12:50:51 +0200 Subject: [PATCH 043/136] updated for version 7.3.668 Problem: Building with Perl loaded dynamically still uses static library. Solution: Adjust use of PL_thr_key. (Ken Takata) --- src/if_perl.xs | 7 ++++++- src/version.c | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/if_perl.xs b/src/if_perl.xs index 56e0eb3a1a..f0baabff63 100644 --- a/src/if_perl.xs +++ b/src/if_perl.xs @@ -155,7 +155,7 @@ typedef int perl_key; # define Perl_set_context dll_Perl_set_context # if (PERL_REVISION == 5) && (PERL_VERSION >= 14) # define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags -# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck +# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck # else # define Perl_sv_2bool dll_Perl_sv_2bool # endif @@ -225,6 +225,9 @@ typedef int perl_key; # define Perl_call_list dll_Perl_call_list # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr +# if (PERL_REVISION == 5) && (PERL_VERSION >= 14) +# define PL_thr_key *dll_PL_thr_key +# endif /* * Declare HANDLE for perl.dll and function pointers. @@ -335,6 +338,7 @@ static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*); #endif #if (PERL_REVISION == 5) && (PERL_VERSION >= 14) +static perl_key* dll_PL_thr_key; #else static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*); static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*); @@ -453,6 +457,7 @@ static struct { # endif #endif #if (PERL_REVISION == 5) && (PERL_VERSION >= 14) + {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key}, #else {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr}, {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr}, diff --git a/src/version.c b/src/version.c index 4c93e3a398..61e9c0bb1a 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 668, /**/ 667, /**/ From 4a70c1de40cd0f02f78bf938af42e0980f607afe Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 12:50:51 +0200 Subject: [PATCH 044/136] Added tag v7-3-668 for changeset dde6d0216a08 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d9cab3fd93..d7026ec0b7 100644 --- a/.hgtags +++ b/.hgtags @@ -2004,3 +2004,4 @@ f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665 1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666 cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 +dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 From 40645d72b2ff7f7346f88cb7fc65509391babe5a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:26:49 +0200 Subject: [PATCH 045/136] updated for version 7.3.669 Problem: When building with Cygwin loading Python dynamically fails. Solution: Use DLLLIBRARY instead of INSTSONAME. (Ken Takata) --- src/auto/configure | 8 ++++++++ src/configure.in | 8 ++++++++ src/version.c | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/auto/configure b/src/auto/configure index bc46074392..d0c935867b 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -5330,6 +5330,7 @@ __: @echo "python_LIBS='$(LIBS)'" @echo "python_SYSLIBS='$(SYSLIBS)'" @echo "python_LINKFORSHARED='$(LINKFORSHARED)'" + @echo "python_DLLLIBRARY='$(DLLLIBRARY)'" @echo "python_INSTSONAME='$(INSTSONAME)'" eof eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`" @@ -5350,6 +5351,9 @@ eof fi + if test "X$python_DLLLIBRARY" != "X"; then + python_INSTSONAME="$python_DLLLIBRARY" + fi PYTHON_LIBS="${vi_cv_path_python_plibs}" if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\"" @@ -5633,6 +5637,7 @@ __: @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'" @echo "python3_LIBS='$(LIBS)'" @echo "python3_SYSLIBS='$(SYSLIBS)'" + @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'" @echo "python3_INSTSONAME='$(INSTSONAME)'" eof eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`" @@ -5645,6 +5650,9 @@ eof fi + if test "X$python3_DLLLIBRARY" != "X"; then + python3_INSTSONAME="$python3_DLLLIBRARY" + fi PYTHON3_LIBS="${vi_cv_path_python3_plibs}" if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\"" diff --git a/src/configure.in b/src/configure.in index 2ff0f90a1a..5c14fc0c5c 100644 --- a/src/configure.in +++ b/src/configure.in @@ -889,6 +889,7 @@ __: @echo "python_LIBS='$(LIBS)'" @echo "python_SYSLIBS='$(SYSLIBS)'" @echo "python_LINKFORSHARED='$(LINKFORSHARED)'" + @echo "python_DLLLIBRARY='$(DLLLIBRARY)'" @echo "python_INSTSONAME='$(INSTSONAME)'" eof dnl -- delete the lines from make about Entering/Leaving directory @@ -909,6 +910,9 @@ eof fi ]) + if test "X$python_DLLLIBRARY" != "X"; then + python_INSTSONAME="$python_DLLLIBRARY" + fi PYTHON_LIBS="${vi_cv_path_python_plibs}" if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\"" @@ -1082,6 +1086,7 @@ __: @echo "python3_BASEMODLIBS='$(BASEMODLIBS)'" @echo "python3_LIBS='$(LIBS)'" @echo "python3_SYSLIBS='$(SYSLIBS)'" + @echo "python3_DLLLIBRARY='$(DLLLIBRARY)'" @echo "python3_INSTSONAME='$(INSTSONAME)'" eof dnl -- delete the lines from make about Entering/Leaving directory @@ -1094,6 +1099,9 @@ eof vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//` ]) + if test "X$python3_DLLLIBRARY" != "X"; then + python3_INSTSONAME="$python3_DLLLIBRARY" + fi PYTHON3_LIBS="${vi_cv_path_python3_plibs}" if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\"" diff --git a/src/version.c b/src/version.c index 61e9c0bb1a..6ac25907c2 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 669, /**/ 668, /**/ From 3a2707bb5b2de827df60b44714ea3b84dbf72fb8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:26:49 +0200 Subject: [PATCH 046/136] Added tag v7-3-669 for changeset 2b3b7b483708 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index d7026ec0b7..b8cdce3971 100644 --- a/.hgtags +++ b/.hgtags @@ -2005,3 +2005,4 @@ f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666 cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 +2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669 From 40376d61ffbb29f0f83fd83fed2d5215e7845a2c Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:43:14 +0200 Subject: [PATCH 047/136] updated for version 7.3.670 Problem: Python: memory leaks when there are exceptions. Solution: Add DICTKEY_UNREF in the right places. (ZyX) --- src/if_py_both.h | 6 ++++-- src/version.c | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 5e12638f5e..c8a7fca7f8 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -799,14 +799,14 @@ DictionaryItem(PyObject *self, PyObject *keyObject) di = dict_find(((DictionaryObject *) (self))->dict, key, -1); + DICTKEY_UNREF + if (di == NULL) { PyErr_SetString(PyExc_IndexError, _("no such key in dictionary")); return NULL; } - DICTKEY_UNREF - return ConvertToPyObject(&di->di_tv); } @@ -835,6 +835,7 @@ DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject) if (di == NULL) { + DICTKEY_UNREF PyErr_SetString(PyExc_IndexError, _("no such key in dictionary")); return -1; } @@ -859,6 +860,7 @@ DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject) if (dict_add(d, di) == FAIL) { + DICTKEY_UNREF vim_free(di); PyErr_SetVim(_("failed to add key to dictionary")); return -1; diff --git a/src/version.c b/src/version.c index 6ac25907c2..4fb2743957 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 670, /**/ 669, /**/ From c1bda30587bd5f44fae0a83314177831f0641d84 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:43:14 +0200 Subject: [PATCH 048/136] Added tag v7-3-670 for changeset 2bf8c00741f7 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index b8cdce3971..27838a4db5 100644 --- a/.hgtags +++ b/.hgtags @@ -2006,3 +2006,4 @@ f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664 cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669 +2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670 From 23eb14c8e3d5d8bec24b00a2a27b0d3e85e2182b Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:46:06 +0200 Subject: [PATCH 049/136] updated for version 7.3.671 Problem: More Python code can be shared between Python 2 and 3. Solution: Move code to if_py_both.h. (ZyX) --- src/if_py_both.h | 25 +++++++++++++++++++ src/if_python.c | 25 ------------------- src/if_python3.c | 64 ++++++++++++++---------------------------------- src/version.c | 2 ++ 4 files changed, 45 insertions(+), 71 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index c8a7fca7f8..0909981c22 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -71,6 +71,31 @@ static struct PyMethodDef OutputMethods[] = { /* Output buffer management */ + static int +OutputSetattr(PyObject *self, char *name, PyObject *val) +{ + if (val == NULL) + { + PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes")); + return -1; + } + + if (strcmp(name, "softspace") == 0) + { + if (!PyInt_Check(val)) + { + PyErr_SetString(PyExc_TypeError, _("softspace must be an integer")); + return -1; + } + + ((OutputObject *)(self))->softspace = PyInt_AsLong(val); + return 0; + } + + PyErr_SetString(PyExc_AttributeError, _("invalid attribute")); + return -1; +} + static PyObject * OutputWrite(PyObject *self, PyObject *args) { diff --git a/src/if_python.c b/src/if_python.c index a20aba0f32..3c72b260c2 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -951,31 +951,6 @@ OutputGetattr(PyObject *self, char *name) return Py_FindMethod(OutputMethods, self, name); } - static int -OutputSetattr(PyObject *self, char *name, PyObject *val) -{ - if (val == NULL) - { - PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes")); - return -1; - } - - if (strcmp(name, "softspace") == 0) - { - if (!PyInt_Check(val)) - { - PyErr_SetString(PyExc_TypeError, _("softspace must be an integer")); - return -1; - } - - ((OutputObject *)(self))->softspace = PyInt_AsLong(val); - return 0; - } - - PyErr_SetString(PyExc_AttributeError, _("invalid attribute")); - return -1; -} - /***************/ static int diff --git a/src/if_python3.c b/src/if_python3.c index 43ed0e2a5f..6dc75517c6 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -88,6 +88,9 @@ static void init_structs(void); #define PyString_Size(obj) PyBytes_GET_SIZE(bytes) #define PyString_FromString(repr) PyUnicode_FromString(repr) #define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len) +#define PyInt_Check(obj) PyLong_Check(obj) +#define PyInt_FromLong(i) PyLong_FromLong(i) +#define PyInt_AsLong(obj) PyLong_AsLong(obj) #if defined(DYNAMIC_PYTHON3) || defined(PROTO) @@ -586,6 +589,11 @@ static int py3initialised = 0; */ #include "if_py_both.h" +#define GET_ATTR_STRING(name, nameobj) \ + char *name = ""; \ + if(PyUnicode_Check(nameobj)) \ + name = _PyUnicode_AsString(nameobj) + #define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0) static void @@ -923,9 +931,7 @@ ex_py3file(exarg_T *eap) static PyObject * OutputGetattro(PyObject *self, PyObject *nameobj) { - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); if (strcmp(name, "softspace") == 0) return PyLong_FromLong(((OutputObject *)(self))->softspace); @@ -936,30 +942,9 @@ OutputGetattro(PyObject *self, PyObject *nameobj) static int OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val) { - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); - if (val == NULL) - { - PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes")); - return -1; - } - - if (strcmp(name, "softspace") == 0) - { - if (!PyLong_Check(val)) - { - PyErr_SetString(PyExc_TypeError, _("softspace must be an integer")); - return -1; - } - - ((OutputObject *)(self))->softspace = PyLong_AsLong(val); - return 0; - } - - PyErr_SetString(PyExc_AttributeError, _("invalid attribute")); - return -1; + return OutputSetattr(self, name, val); } /***************/ @@ -1091,9 +1076,7 @@ BufferGetattro(PyObject *self, PyObject*nameobj) { BufferObject *this = (BufferObject *)(self); - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); if (CheckBuffer(this)) return NULL; @@ -1257,9 +1240,7 @@ RangeDestructor(PyObject *self) static PyObject * RangeGetattro(PyObject *self, PyObject *nameobj) { - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); if (strcmp(name, "start") == 0) return Py_BuildValue("n", ((RangeObject *)(self))->start - 1); @@ -1430,10 +1411,7 @@ WindowGetattro(PyObject *self, PyObject *nameobj) { WindowObject *this = (WindowObject *)(self); - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); - + GET_ATTR_STRING(name, nameobj); if (CheckWindow(this)) return NULL; @@ -1461,10 +1439,7 @@ WindowGetattro(PyObject *self, PyObject *nameobj) static int WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val) { - char *name = ""; - - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); return WindowSetattr(self, name, val); } @@ -1508,9 +1483,7 @@ static PyTypeObject CurrentType; static PyObject * CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj) { - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + GET_ATTR_STRING(name, nameobj); if (strcmp(name, "buffer") == 0) return (PyObject *)BufferNew(curbuf); @@ -1681,9 +1654,8 @@ FunctionDestructor(PyObject *self) FunctionGetattro(PyObject *self, PyObject *nameobj) { FunctionObject *this = (FunctionObject *)(self); - char *name = ""; - if (PyUnicode_Check(nameobj)) - name = _PyUnicode_AsString(nameobj); + + GET_ATTR_STRING(name, nameobj); if (strcmp(name, "name") == 0) return PyUnicode_FromString((char *)(this->name)); diff --git a/src/version.c b/src/version.c index 4fb2743957..3e054b7c6a 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 671, /**/ 670, /**/ From 48530684e0f0d72fee9d34d709cd608940722464 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 13:46:06 +0200 Subject: [PATCH 050/136] Added tag v7-3-671 for changeset 530f5a903031 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 27838a4db5..5f77d03135 100644 --- a/.hgtags +++ b/.hgtags @@ -2007,3 +2007,4 @@ cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667 dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669 2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670 +530f5a9030315f984e096794938c61f9d3562e22 v7-3-671 From 2f54401a8d5dd4837f60b53764b955b577f9b3bd Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 14:00:35 +0200 Subject: [PATCH 051/136] updated for version 7.3.672 Problem: Not possible to lock/unlock lists in Python interface. Solution: Add .locked and .scope attributes. (ZyX) --- src/if_py_both.h | 76 +++++++++++++++++++++++++++++++++++++++++++ src/if_python.c | 27 +++++++++++++-- src/if_python3.c | 70 +++++++++++++++++++++++++++++++++++++-- src/testdir/test86.in | 36 ++++++++++++++++++++ src/testdir/test86.ok | 10 ++++++ src/testdir/test87.in | 35 ++++++++++++++++++++ src/testdir/test87.ok | 10 ++++++ src/version.c | 2 ++ 8 files changed, 261 insertions(+), 5 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 0909981c22..0a1ef1b9e6 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -807,6 +807,44 @@ pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict) return 0; } + static PyInt +DictionarySetattr(DictionaryObject *self, char *name, PyObject *val) +{ + if (val == NULL) + { + PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes")); + return -1; + } + + if (strcmp(name, "locked") == 0) + { + if (self->dict->dv_lock == VAR_FIXED) + { + PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed dictionary")); + return -1; + } + else + { + if (!PyBool_Check(val)) + { + PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed")); + return -1; + } + + if (val == Py_True) + self->dict->dv_lock = VAR_LOCKED; + else + self->dict->dv_lock = 0; + } + return 0; + } + else + { + PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute")); + return -1; + } +} + static PyInt DictionaryLength(PyObject *self) { @@ -1271,6 +1309,44 @@ ListConcatInPlace(PyObject *self, PyObject *obj) return self; } + static int +ListSetattr(ListObject *self, char *name, PyObject *val) +{ + if (val == NULL) + { + PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes")); + return -1; + } + + if (strcmp(name, "locked") == 0) + { + if (self->list->lv_lock == VAR_FIXED) + { + PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed list")); + return -1; + } + else + { + if (!PyBool_Check(val)) + { + PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed")); + return -1; + } + + if (val == Py_True) + self->list->lv_lock = VAR_LOCKED; + else + self->list->lv_lock = 0; + } + return 0; + } + else + { + PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute")); + return -1; + } +} + static struct PyMethodDef ListMethods[] = { {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""}, { NULL, NULL, 0, NULL } diff --git a/src/if_python.c b/src/if_python.c index 3c72b260c2..c194598b71 100644 --- a/src/if_python.c +++ b/src/if_python.c @@ -163,6 +163,7 @@ struct PyMethodDef { Py_ssize_t a; }; # define PyInt_FromLong dll_PyInt_FromLong # define PyLong_AsLong dll_PyLong_AsLong # define PyLong_FromLong dll_PyLong_FromLong +# define PyBool_Type (*dll_PyBool_Type) # define PyInt_Type (*dll_PyInt_Type) # define PyLong_Type (*dll_PyLong_Type) # define PyList_GetItem dll_PyList_GetItem @@ -221,6 +222,8 @@ struct PyMethodDef { Py_ssize_t a; }; # define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented) # endif # define _Py_NoneStruct (*dll__Py_NoneStruct) +# define _Py_ZeroStruct (*dll__Py_ZeroStruct) +# define _Py_TrueStruct (*dll__Py_TrueStruct) # define PyObject_Init dll__PyObject_Init # define PyObject_GetIter dll_PyObject_GetIter # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 @@ -263,6 +266,7 @@ static long(*dll_PyInt_AsLong)(PyObject *); static PyObject*(*dll_PyInt_FromLong)(long); static long(*dll_PyLong_AsLong)(PyObject *); static PyObject*(*dll_PyLong_FromLong)(long); +static PyTypeObject* dll_PyBool_Type; static PyTypeObject* dll_PyInt_Type; static PyTypeObject* dll_PyLong_Type; static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt); @@ -320,6 +324,8 @@ static PyObject* (*dll_PyObject_GetIter)(PyObject *); static iternextfunc dll__PyObject_NextNotImplemented; # endif static PyObject* dll__Py_NoneStruct; +static PyObject* _Py_ZeroStruct; +static PyObject* dll__Py_TrueStruct; # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *); # endif @@ -389,6 +395,7 @@ static struct {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong}, {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong}, {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong}, + {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type}, {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type}, {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type}, {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem}, @@ -449,6 +456,8 @@ static struct {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented}, # endif {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct}, + {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct}, + {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct}, # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000 {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype}, # endif @@ -1563,6 +1572,10 @@ PythonMod_Init(void) PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList); PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent); PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList); + PyDict_SetItemString(dict, "VAR_LOCKED", PyInt_FromLong(VAR_LOCKED)); + PyDict_SetItemString(dict, "VAR_FIXED", PyInt_FromLong(VAR_FIXED)); + PyDict_SetItemString(dict, "VAR_SCOPE", PyInt_FromLong(VAR_SCOPE)); + PyDict_SetItemString(dict, "VAR_DEF_SCOPE", PyInt_FromLong(VAR_DEF_SCOPE)); if (PyErr_Occurred()) return -1; @@ -1629,7 +1642,7 @@ static PyTypeObject DictionaryType = { (destructor) DictionaryDestructor, (printfunc) 0, (getattrfunc) DictionaryGetattr, - (setattrfunc) 0, + (setattrfunc) DictionarySetattr, (cmpfunc) 0, (reprfunc) 0, @@ -1656,6 +1669,13 @@ DictionaryDestructor(PyObject *self) static PyObject * DictionaryGetattr(PyObject *self, char *name) { + DictionaryObject *this = ((DictionaryObject *) (self)); + + if (strcmp(name, "locked") == 0) + return PyInt_FromLong(this->dict->dv_lock); + else if (strcmp(name, "scope") == 0) + return PyInt_FromLong(this->dict->dv_scope); + return Py_FindMethod(DictionaryMethods, self, name); } @@ -1687,7 +1707,7 @@ static PyTypeObject ListType = { (destructor) ListDestructor, (printfunc) 0, (getattrfunc) ListGetattr, - (setattrfunc) 0, + (setattrfunc) ListSetattr, (cmpfunc) 0, (reprfunc) 0, @@ -1714,6 +1734,9 @@ ListDestructor(PyObject *self) static PyObject * ListGetattr(PyObject *self, char *name) { + if (strcmp(name, "locked") == 0) + return PyInt_FromLong(((ListObject *)(self))->list->lv_lock); + return Py_FindMethod(ListMethods, self, name); } diff --git a/src/if_python3.c b/src/if_python3.c index 6dc75517c6..302be7ece6 100644 --- a/src/if_python3.c +++ b/src/if_python3.c @@ -161,7 +161,6 @@ static void init_structs(void); # define PyRun_String py3_PyRun_String # define PySys_SetObject py3_PySys_SetObject # define PySys_SetArgv py3_PySys_SetArgv -# define PyType_Type (*py3_PyType_Type) # define PyType_Ready py3_PyType_Ready #undef Py_BuildValue # define Py_BuildValue py3_Py_BuildValue @@ -170,6 +169,8 @@ static void init_structs(void); # define Py_Finalize py3_Py_Finalize # define Py_IsInitialized py3_Py_IsInitialized # define _Py_NoneStruct (*py3__Py_NoneStruct) +# define _Py_FalseStruct (*py3__Py_FalseStruct) +# define _Py_TrueStruct (*py3__Py_TrueStruct) # define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented) # define PyModule_AddObject py3_PyModule_AddObject # define PyImport_AppendInittab py3_PyImport_AppendInittab @@ -184,8 +185,10 @@ static void init_structs(void); # define PyFloat_FromDouble py3_PyFloat_FromDouble # define PyFloat_AsDouble py3_PyFloat_AsDouble # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr +# define PyType_Type (*py3_PyType_Type) # define PySlice_Type (*py3_PySlice_Type) # define PyFloat_Type (*py3_PyFloat_Type) +# define PyBool_Type (*py3_PyBool_Type) # define PyErr_NewException py3_PyErr_NewException # ifdef Py_DEBUG # define _Py_NegativeRefcount py3__Py_NegativeRefcount @@ -245,7 +248,6 @@ static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t); static PyObject* (*py3_PyImport_ImportModule)(const char *); static PyObject* (*py3_PyImport_AddModule)(const char *); static int (*py3_PyErr_BadArgument)(void); -static PyTypeObject* py3_PyType_Type; static PyObject* (*py3_PyErr_Occurred)(void); static PyObject* (*py3_PyModule_GetDict)(PyObject *); static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *); @@ -275,6 +277,8 @@ static void (*py3_PyErr_Clear)(void); static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *); static iternextfunc py3__PyObject_NextNotImplemented; static PyObject* py3__Py_NoneStruct; +static PyObject* py3__Py_FalseStruct; +static PyObject* py3__Py_TrueStruct; static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o); static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void)); static char* (*py3__PyUnicode_AsString)(PyObject *unicode); @@ -288,8 +292,10 @@ static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems); static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds); +static PyTypeObject* py3_PyType_Type; static PyTypeObject* py3_PySlice_Type; static PyTypeObject* py3_PyFloat_Type; +static PyTypeObject* py3_PyBool_Type; static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict); static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor); static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *); @@ -363,7 +369,6 @@ static struct {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule}, {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule}, {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument}, - {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type}, {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred}, {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict}, {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem}, @@ -386,6 +391,8 @@ static struct {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized}, {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented}, {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct}, + {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct}, + {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct}, {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear}, {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init}, {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject}, @@ -400,8 +407,10 @@ static struct {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc}, {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew}, + {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type}, {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type}, {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type}, + {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type}, {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException}, # ifdef Py_DEBUG {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount}, @@ -1534,6 +1543,28 @@ static PyMappingMethods DictionaryAsMapping = { /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem, }; + static PyObject * +DictionaryGetattro(PyObject *self, PyObject *nameobj) +{ + DictionaryObject *this = ((DictionaryObject *) (self)); + + GET_ATTR_STRING(name, nameobj); + + if (strcmp(name, "locked") == 0) + return PyLong_FromLong(this->dict->dv_lock); + else if (strcmp(name, "scope") == 0) + return PyLong_FromLong(this->dict->dv_scope); + + return PyObject_GenericGetAttr(self, nameobj); +} + + static int +DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val) +{ + GET_ATTR_STRING(name, nameobj); + return DictionarySetattr((DictionaryObject *) self, name, val); +} + static PyTypeObject DictionaryType; static void @@ -1625,6 +1656,24 @@ ListAsSubscript(PyObject *self, PyObject *idxObject, PyObject *obj) } } + static PyObject * +ListGetattro(PyObject *self, PyObject *nameobj) +{ + GET_ATTR_STRING(name, nameobj); + + if (strcmp(name, "locked") == 0) + return PyLong_FromLong(((ListObject *) (self))->list->lv_lock); + + return PyObject_GenericGetAttr(self, nameobj); +} + + static int +ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val) +{ + GET_ATTR_STRING(name, nameobj); + return ListSetattr((ListObject *) self, name, val); +} + static void ListDestructor(PyObject *self) { @@ -1713,6 +1762,7 @@ static struct PyModuleDef vimmodule; PyMODINIT_FUNC Py3Init_vim(void) { PyObject *mod; + PyObject *tmp; /* The special value is removed from sys.path in Python3_Init(). */ static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL}; @@ -1744,6 +1794,16 @@ PyMODINIT_FUNC Py3Init_vim(void) Py_INCREF((PyObject *)(void *)&TheWindowList); PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList); +#define ADD_INT_CONSTANT(name, value) \ + tmp = PyLong_FromLong(value); \ + Py_INCREF(tmp); \ + PyModule_AddObject(mod, name, tmp) + + ADD_INT_CONSTANT("VAR_LOCKED", VAR_LOCKED); + ADD_INT_CONSTANT("VAR_FIXED", VAR_FIXED); + ADD_INT_CONSTANT("VAR_SCOPE", VAR_SCOPE); + ADD_INT_CONSTANT("VAR_DEF_SCOPE", VAR_DEF_SCOPE); + if (PyErr_Occurred()) return NULL; @@ -1899,6 +1959,8 @@ init_structs(void) vim_memset(&DictionaryType, 0, sizeof(DictionaryType)); DictionaryType.tp_name = "vim.dictionary"; DictionaryType.tp_basicsize = sizeof(DictionaryObject); + DictionaryType.tp_getattro = DictionaryGetattro; + DictionaryType.tp_setattro = DictionarySetattro; DictionaryType.tp_dealloc = DictionaryDestructor; DictionaryType.tp_as_mapping = &DictionaryAsMapping; DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT; @@ -1909,6 +1971,8 @@ init_structs(void) ListType.tp_name = "vim.list"; ListType.tp_dealloc = ListDestructor; ListType.tp_basicsize = sizeof(ListObject); + ListType.tp_getattro = ListGetattro; + ListType.tp_setattro = ListSetattro; ListType.tp_as_sequence = &ListAsSeq; ListType.tp_as_mapping = &ListAsMapping; ListType.tp_flags = Py_TPFLAGS_DEFAULT; diff --git a/src/testdir/test86.in b/src/testdir/test86.in index 93eb400853..1309643d8b 100644 --- a/src/testdir/test86.in +++ b/src/testdir/test86.in @@ -211,6 +211,41 @@ except Exception as e: m.extend([e.__class__.__name__]) EOF :$put =messages +:unlet messages +:" locked and scope attributes +:let d={} | let dl={} | lockvar dl +:for s in split("d dl v: g:") +: let name=tr(s, ':', 's') +: execute 'py '.name.'=vim.bindeval("'.s.'")' +: let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';') +: $put =toput +:endfor +:silent! let d.abc=1 +:silent! let dl.abc=1 +:py d.locked=True +:py dl.locked=False +:silent! let d.def=1 +:silent! let dl.def=1 +:put ='d:'.string(d) +:put ='dl:'.string(dl) +:unlet d dl +: +:let l=[] | let ll=[] | lockvar ll +:for s in split("l ll") +: let name=tr(s, ':', 's') +: execute 'py '.name.'=vim.bindeval("'.s.'")' +: let toput=s.' : locked:'.pyeval(name.'.locked') +: $put =toput +:endfor +:silent! call extend(l, [0]) +:silent! call extend(ll, [0]) +:py l.locked=True +:py ll.locked=False +:silent! call extend(l, [1]) +:silent! call extend(ll, [1]) +:put ='l:'.string(l) +:put ='ll:'.string(ll) +:unlet l ll :" :" pyeval() :let l=pyeval('range(3)') @@ -240,6 +275,7 @@ EOF :call garbagecollect(1) :" :/^start:/,$wq! test.out +:call getchar() ENDTEST start: diff --git a/src/testdir/test86.ok b/src/testdir/test86.ok index 94f36e9703..5ef8689a24 100644 --- a/src/testdir/test86.ok +++ b/src/testdir/test86.ok @@ -44,6 +44,16 @@ TypeError ValueError TypeError TypeError +d : locked:0;scope:0 +dl : locked:1;scope:0 +v: : locked:2;scope:1 +g: : locked:0;scope:2 +d:{'abc': 1} +dl:{'def': 1} +l : locked:0 +ll : locked:1 +l:[0] +ll:[1] [0, 1, 2] ['a', 'b'] ['c', 1] diff --git a/src/testdir/test87.in b/src/testdir/test87.in index 312763c806..1d7ccedd51 100644 --- a/src/testdir/test87.in +++ b/src/testdir/test87.in @@ -211,6 +211,41 @@ except Exception as e: m.extend([e.__class__.__name__]) EOF :$put =messages +:unlet messages +:" locked and scope attributes +:let d={} | let dl={} | lockvar dl +:for s in split("d dl v: g:") +: let name=tr(s, ':', 's') +: execute 'py3 '.name.'=vim.bindeval("'.s.'")' +: let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';') +: $put =toput +:endfor +:silent! let d.abc=1 +:silent! let dl.abc=1 +:py3 d.locked=True +:py3 dl.locked=False +:silent! let d.def=1 +:silent! let dl.def=1 +:put ='d:'.string(d) +:put ='dl:'.string(dl) +:unlet d dl +: +:let l=[] | let ll=[] | lockvar ll +:for s in split("l ll") +: let name=tr(s, ':', 's') +: execute 'py3 '.name.'=vim.bindeval("'.s.'")' +: let toput=s.' : locked:'.py3eval(name.'.locked') +: $put =toput +:endfor +:silent! call extend(l, [0]) +:silent! call extend(ll, [0]) +:py3 l.locked=True +:py3 ll.locked=False +:silent! call extend(l, [1]) +:silent! call extend(ll, [1]) +:put ='l:'.string(l) +:put ='ll:'.string(ll) +:unlet l ll :" :" py3eval() :let l=py3eval('[0, 1, 2]') diff --git a/src/testdir/test87.ok b/src/testdir/test87.ok index 4eab845302..4c0bb799d7 100644 --- a/src/testdir/test87.ok +++ b/src/testdir/test87.ok @@ -44,6 +44,16 @@ TypeError ValueError TypeError TypeError +d : locked:0;scope:0 +dl : locked:1;scope:0 +v: : locked:2;scope:1 +g: : locked:0;scope:2 +d:{'abc': 1} +dl:{'def': 1} +l : locked:0 +ll : locked:1 +l:[0] +ll:[1] [0, 1, 2] ['a', 'b'] ['c', 1] diff --git a/src/version.c b/src/version.c index 3e054b7c6a..cd50417553 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 672, /**/ 671, /**/ From cf1a9898a40d1c7d3f11d65ac307359e80b8a30a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 14:00:35 +0200 Subject: [PATCH 052/136] Added tag v7-3-672 for changeset fd6ef931aa77 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 5f77d03135..104a0ed275 100644 --- a/.hgtags +++ b/.hgtags @@ -2008,3 +2008,4 @@ dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669 2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670 530f5a9030315f984e096794938c61f9d3562e22 v7-3-671 +fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 From dfba2a34f826755566d8a3bd83822b5afda369af Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 21 Sep 2012 14:54:30 +0200 Subject: [PATCH 053/136] Updated runtime files. --- runtime/doc/autocmd.txt | 5 +- runtime/doc/diff.txt | 12 +- runtime/doc/eval.txt | 13 +- runtime/doc/hebrew.txt | 2 +- runtime/doc/if_pyth.txt | 20 + runtime/doc/indent.txt | 4 +- runtime/doc/intro.txt | 4 +- runtime/doc/todo.txt | 75 ++- runtime/doc/usr_41.txt | 2 +- runtime/doc/visual.txt | 2 +- runtime/filetype.vim | 6 +- runtime/ftplugin/changelog.vim | 6 +- runtime/ftplugin/zimbu.vim | 55 ++- runtime/indent/zimbu.vim | 4 +- runtime/scripts.vim | 5 +- runtime/syntax/cl.vim | 132 ++--- runtime/syntax/css.vim | 350 +++++++++---- runtime/syntax/hgcommit.vim | 14 +- runtime/syntax/progress.vim | 116 ++--- runtime/tutor/tutor.vim | 10 +- runtime/tutor/tutor.zh_cn.utf-8 | 851 +++++++++++++++++++++++++++++++ runtime/tutor/tutor.zh_tw.utf-8 | 852 ++++++++++++++++++++++++++++++++ 22 files changed, 2256 insertions(+), 284 deletions(-) create mode 100644 runtime/tutor/tutor.zh_cn.utf-8 create mode 100644 runtime/tutor/tutor.zh_tw.utf-8 diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt index a8bff07c56..32cad6764b 100644 --- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -1,4 +1,4 @@ -*autocmd.txt* For Vim version 7.3. Last change: 2012 Jul 10 +*autocmd.txt* For Vim version 7.3. Last change: 2012 Sep 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -263,8 +263,10 @@ Name triggered by ~ Startup and exit |VimEnter| after doing all the startup stuff |GUIEnter| after starting the GUI successfully +|GUIFailed| after starting the GUI failed |TermResponse| after the terminal response to |t_RV| is received +|QuitPre| when using `:quit`, before deciding whether to quit |VimLeavePre| before exiting Vim, before writing the viminfo file |VimLeave| before exiting Vim, after writing the viminfo file @@ -312,6 +314,7 @@ Name triggered by ~ |SessionLoadPost| after loading a session file |MenuPopup| just before showing the popup menu +|CompleteDone| after Insert mode completion is done |User| to be used in combination with ":doautocmd" diff --git a/runtime/doc/diff.txt b/runtime/doc/diff.txt index 0e03a57fe1..036dc5e136 100644 --- a/runtime/doc/diff.txt +++ b/runtime/doc/diff.txt @@ -1,4 +1,4 @@ -*diff.txt* For Vim version 7.3. Last change: 2012 Aug 08 +*diff.txt* For Vim version 7.3. Last change: 2012 Sep 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -86,16 +86,16 @@ diff mode. You could use a construct like this: > While already in Vim you can start diff mode in three ways. *E98* -:diffsplit {filename} *:diffs* *:diffsplit* +:diffs[plit] {filename} *:diffs* *:diffsplit* Open a new window on the file {filename}. The options are set as for "vimdiff" for the current and the newly opened window. Also see 'diffexpr'. *:difft* *:diffthis* -:diffthis Make the current window part of the diff windows. This sets +:difft[his] Make the current window part of the diff windows. This sets the options like for "vimdiff". -:diffpatch {patchfile} *E816* *:diffp* *:diffpatch* +:diffp[atch] {patchfile} *E816* *:diffp* *:diffpatch* Use the current buffer, patch it with the diff found in {patchfile} and open a buffer on the result. The options are set as for "vimdiff". @@ -123,9 +123,9 @@ Since the option values are remembered with the buffer, you can edit another file for a moment and come back to the same file and be in diff mode again. *:diffo* *:diffoff* -:diffoff Switch off diff mode for the current window. +:diffo[ff] Switch off diff mode for the current window. -:diffoff! Switch off diff mode for the current window and in all windows +:diffo[ff]! Switch off diff mode for the current window and in all windows in the current tab page where 'diff' is set. The ":diffoff" command resets the relevant options to their default value. diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index 2ae65ff82b..12ea9c897e 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.3. Last change: 2012 Aug 02 +*eval.txt* For Vim version 7.3. Last change: 2012 Sep 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -759,7 +759,7 @@ of a |List| is different from the original |List|. When using "is" without a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot" equivalent to using "not equal". Except that a different type means the values are different: "4 == '4'" is true, "4 is '4'" is false and "0 is []" is -false and not a error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match +false and not an error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match and ignore case. When comparing a String with a Number, the String is converted to a Number, @@ -4635,8 +4635,8 @@ pyeval({expr}) *pyeval()* Numbers and strings are returned as they are (strings are copied though). Lists are represented as Vim |List| type. - Dictionaries are represented as Vim |Dictionary| type with - keys converted to strings. + Dictionaries are represented as Vim |Dictionary| type, + non-string keys result in error. {only available when compiled with the |+python| feature} *E726* *E727* @@ -5253,8 +5253,9 @@ setreg({regname}, {value} [,{options}]) If {options} contains no register settings, then the default is to use character mode unless {value} ends in a . - Setting the '=' register is not possible. - Returns zero for success, non-zero for failure. + Setting the '=' register is not possible, but you can use > + :let @= = var_expr +< Returns zero for success, non-zero for failure. Examples: > :call setreg(v:register, @*) diff --git a/runtime/doc/hebrew.txt b/runtime/doc/hebrew.txt index 589d12c33f..8f264e67e2 100644 --- a/runtime/doc/hebrew.txt +++ b/runtime/doc/hebrew.txt @@ -93,7 +93,7 @@ Details This is also the keymap when 'keymap=hebrew' is set. The advantage of 'keymap' is that it works properly when using UTF8, e.g. it inserts the correct characters; 'hkmap' does not. The 'keymap' keyboard can also - insert niqud and te`amim. To see what those mappings are,look at the + insert niqud and te`amim. To see what those mappings are, look at the keymap file 'hebrew.vim' etc. diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt index 4bdacf66f2..92840d40ec 100644 --- a/runtime/doc/if_pyth.txt +++ b/runtime/doc/if_pyth.txt @@ -159,6 +159,26 @@ vim.bindeval(str) *python-bindeval* vimlist or vimdictionary python type that are connected to original list or dictionary. Thus modifications to these objects imply modifications of the original. + + Additionally, vimlist and vimdictionary type have read-write + `.locked` attribute that returns + Value Meaning ~ + zero Variable is not locked + vim.VAR_LOCKED Variable is locked, but can be unlocked + vim.VAR_FIXED Variable is locked and can’t be unlocked + integer constants. If variable is not fixed, you can do + `var.locked=True` to lock it and `var.locked=False` to unlock. + There is no recursive locking like |:lockvar|! does. There is also + no way to lock a specific key or check whether it is locked (in any + case these locks are ignored by anything except |:let|: |extend()| + does not care, neither does python interface). + + Vimdictionary type also supports `.scope` attribute which is one of + Value Meaning ~ + zero Dictionary is not a scope one + vim.VAR_DEF_SCOPE Function-local or global scope dictionary + vim.VAR_SCOPE Other scope dictionary + 2. if expression evaluates to a function reference, then it returns callable vimfunction object. Use self keyword argument to assign |self| object for dictionary functions. diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt index ce02178d70..6a43896c00 100644 --- a/runtime/doc/indent.txt +++ b/runtime/doc/indent.txt @@ -1,4 +1,4 @@ -*indent.txt* For Vim version 7.3. Last change: 2011 Sep 02 +*indent.txt* For Vim version 7.3. Last change: 2012 Aug 30 VIM REFERENCE MANUAL by Bram Moolenaar @@ -540,7 +540,7 @@ The examples below assume a 'shiftwidth' of 4. *cino-star* *N Vim searches for unclosed comments at most N lines away. This limits the time needed to search for the start of a comment. - If your /* */ comments stop indenting afer N lines this is the + If your /* */ comments stop indenting after N lines this is the value you will want to change. (default 70 lines). diff --git a/runtime/doc/intro.txt b/runtime/doc/intro.txt index 6682ba6aa7..c643ab8dbf 100644 --- a/runtime/doc/intro.txt +++ b/runtime/doc/intro.txt @@ -1,4 +1,4 @@ -*intro.txt* For Vim version 7.3. Last change: 2011 May 15 +*intro.txt* For Vim version 7.3. Last change: 2012 Sep 05 VIM REFERENCE MANUAL by Bram Moolenaar @@ -394,6 +394,8 @@ CTRL-{char} {char} typed as a control character; that is, typing {char} *quotecommandquote* "command" A reference to a command that you can type is enclosed in double quotes. +`command` New style command, this distinguishes it from other + quoted text and strings. *key-notation* *key-codes* *keycodes* These names for keys are used in the documentation. They can also be used diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index e1efea17a5..e3e6bbbffc 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.3. Last change: 2012 Aug 15 +*todo.txt* For Vim version 7.3. Last change: 2012 Sep 21 VIM REFERENCE MANUAL by Bram Moolenaar @@ -36,6 +36,9 @@ not be repeated below, unless there is extra information. Go through more coverity reports. +Ruby problem, patch in issue 49. (Sep 19) +Also in email from Ondruch? + Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10) GTK: problem with 'L' in 'guioptions' changing the window width. @@ -43,12 +46,35 @@ GTK: problem with 'L' in 'guioptions' changing the window width. Checking runtime scripts: Thilo Six, 2012 Jun 6. +Crash with 1023 byte directory name. (Danek Duvall, 2012 Sep 19) + +Patch for SGR mouse with older xterm. (Hayaki Saito, 2012 Sep 19) + +Patch for crash with an autocommand. (ZyX, 2012 Sep 6, second one) +Also patch for garbage, but use vim_strncpy() instead. + +Patch to fix crash on Win32 when setting 'encoding'. (Jiri Sedlak, 2012 Sep +12) + +Patch to update example using empty(). (ZyX, 2012 Sep 13) + Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3. +Updated French and Esperanto files. (Dominique Pelle, 2012 Aug 19) + +When showing diffs filler lines may be hidden at first. +Patch by Christian Brabandt, 2012 Sep 6. + +Patch for memory leaks on exception. (ZyX, 2012 Sep 9) + The CompleteDone autocommand needs some info passed to it: - The word that was selected (empty if abandoned complete) - Type of completion: tag, omnifunc, user func. +mouse_sgr is not ordered alphabetically in :version output. +Docs list mouse_urxvt as normal feature, should be big. (Hayaki Saito, 2012 +Aug 16) + ":gundo" command: global undo. Undoes changes spread over multiple files in the order they were made. Also ":gredo". Both with a count. Useful when tests fail after making changes and you forgot in which files. @@ -57,27 +83,45 @@ Win32: When a directory name contains an exclamation mark, completion doesn't complete the contents of the directory. No escaping for the "!"? (Jan Stocker, 2012 Jan 5) +Patch for IME handling, adds 'imactivatefunc' and 'imstatusfunc' option. +(Yukihiro Nakadaira, 2012 Aug 16) +Patch to improve IME handling. (Yasuhiro Matsumoto, 2012 Jul 18) + Issue 54: document behavior of -complete, also expands arg. +Patch for if_lua. (Luis Carvalho, 2012 Aug 26, update Aug 29, another Aug 30, +then Sep 1) + Issue 72: 'autochdir' causes problems for :vimgrep. MS-Windows: Crash opening very long file name starting with "\\". (Christian Brock, 2012 Jun 29) +Win32: patch for current directory, "loading iof conv". (Ken Takata, 2012 Sep +15) + Syntax update problem in one buffer opened in two windows, bottom window is not correctly updated. (Paul Harris, 2012 Feb 27) +Patch to add assignments in cscope. (Uli Meis, Estabrooks, 2012 Sep 1) +Alternate patch by Gary Johnson, Sep 4. + Patch to add getsid(). (Tyru, 2011 Oct 2) Do we want this? Update Oct 4. Or use expand('')? -Patch to improve IME handling. (Yasuhiro Matsumoto, 2012 Jul 18) - Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers, 2012 Aug 4) +Patch for Tab behavior with 'conceal'. (Dominique Pelle, 2012 Mar 18) +Patch to test functionality of 'conceal' with tabs. (Simon Ruderich, 2012 Sep +5) Update with screencol() and screenrow() functions: Sep 7. + Crash in autocmd that unloads buffers in a BufUnload event. (Andrew Pimlott, 2012 Aug 11) Disallow :new when BufUnload is being handled? +MS-Windows ACL support doesn't work well. Patch from Ken Takata, 2012 Aug 29. +Update Aug 31. + MS-Windows resizing problems: - Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun 20. Uses getWindowRect() instead of GetWindowPlacement() @@ -94,6 +138,9 @@ The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O. Suggestion for another map. (Philip Mat, 2012 Jun 18) But use "gi" instead of "a". Or use CTRL-\ CTRL-O. +Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012 +Aug 16) + URXVT: - will get stuck if byte sequence does not containe expected semicolon. - Use urxvt mouse support also in xterm. Explanations: @@ -108,17 +155,23 @@ Do give the prompt? Quit with an error? Patch for 'backupcopy' default behavior for symlinks on Windows. (David Pope, 2012 Mar 21, update Mar 31) +With fix for memory leak: Ken Takata, 2012 Aug 24 Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14) Patch for input method status. (Hirohito Higashi, 2012 Apr 18) +Patch to print the result of a :python command. (Maxim Philippov +, 2012 Aug 16) Update Aug 17. + Problem with winfixheight and resizing. (Yukihiro Nakadaira, 2011 Sep 17) Patch Sep 18. Patch for IME problems. Remove hacking code for old IM. (Yukihiro Nakadaira, 2012 Jul 20) +/[^\n] does match at a line break. Expected to do the same as /. + Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27) And one for gui_x11.txt. @@ -162,9 +215,6 @@ Patch to add ":py3do". (Lilydjwg, 2012 Apr 7) Plugin for Modeleasy. (Massimiliano Tripoli, 2011 Nov 29) -When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May -31) - Updated syntax file for ssh_config, maintainer doesn't respond. (Leonard Ehrenfried, 2011 Sep 26) @@ -725,10 +775,6 @@ Support a 'systemencoding' option (for Unix). It specifies the encoding of file names. (Kikuchan, 2010 Oct 5). Useful on a latin1 or double-byte Asian system when 'encoding' is "utf-8". -Win32: A --remote command that has a directory name starting with a ( doesn't -work, the backslash is removed, assuming that it escapes the (. (Valery -Kondakoff, 2009 May 13) - Win32 GUI: Changing manifest helps for dpi changes (Joe Castro, 2009 Mar 27) Win32 GUI: last message from startup doesn't show up when there is an echoerr @@ -914,6 +960,15 @@ escaping characters where the backslash is not removed later. Asked Chris for an alternate solution, also for src/ex_getln.c. This also fails when the file or directory name contains "%". (Thoml, 2008 July 7) +Using --remote-silent while the current directory has a # in the name does not +work, the # needs to be escaped. (Tramblay Bruno, 2012 Sep 15) + +When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May +31) + +Win32: A --remote command that has a directory name starting with a ( doesn't +work, the backslash is removed, assuming that it escapes the (. (Valery +Kondakoff, 2009 May 13) Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull, 2008 May 14) diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index 77f7d1c350..1a4ae3d1b3 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1681,7 +1681,7 @@ in your plugin file! HEADER You will probably add new corrections to the plugin and soon have several -versions laying around. And when distributing this file, people will want to +versions lying around. And when distributing this file, people will want to know who wrote this wonderful plugin and where they can send remarks. Therefore, put a header at the top of your plugin: > diff --git a/runtime/doc/visual.txt b/runtime/doc/visual.txt index 6d85075efa..6905c21803 100644 --- a/runtime/doc/visual.txt +++ b/runtime/doc/visual.txt @@ -66,7 +66,7 @@ position. lines as used for the last Visual operation, but at the current cursor position, multiplied by [count]. When the previous Visual operation was on a block both - the width and height of the block are multipiled by + the width and height of the block are multiplied by [count]. When there was no previous Visual operation [count] characters are selected. This is like moving the diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 45cf6309a4..6f6bc812ad 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar -" Last Change: 2012 Aug 02 +" Last Change: 2012 Sep 06 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -1772,6 +1772,10 @@ func! SetFileTypeSH(name) " Some .sh scripts contain #!/bin/tcsh. call SetFileTypeShell("tcsh") return + elseif a:name =~ '\' + " Some .sh scripts contain #!/bin/zsh. + call SetFileTypeShell("zsh") + return elseif a:name =~ '\' let b:is_kornshell = 1 if exists("b:is_bash") diff --git a/runtime/ftplugin/changelog.vim b/runtime/ftplugin/changelog.vim index dafcbe20ff..ee83c79175 100644 --- a/runtime/ftplugin/changelog.vim +++ b/runtime/ftplugin/changelog.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: generic Changelog file " Maintainer: Nikolai Weibull -" Latest Revision: 2011-05-02 +" Latest Revision: 2012-08-23 " Variables: " g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) - " description: the timeformat used in ChangeLog entries. @@ -106,10 +106,10 @@ if &filetype == 'changelog' function! s:passwd_field(line, field) let fields = split(a:line, ':', 1) - if len(fields) < field + if len(fields) < a:field return "" endif - return fields[field - 1] + return fields[a:field - 1] endfunction function! s:capitalize(word) diff --git a/runtime/ftplugin/zimbu.vim b/runtime/ftplugin/zimbu.vim index 85b57f464f..ff281202e0 100644 --- a/runtime/ftplugin/zimbu.vim +++ b/runtime/ftplugin/zimbu.vim @@ -1,7 +1,7 @@ " Vim filetype plugin file " Language: Zimbu " Maintainer: Bram Moolenaar -" Last Change: 2012 May 18 +" Last Change: 2012 Sep 08 " Only do this when not done yet for this buffer if exists("b:did_ftplugin") @@ -34,7 +34,7 @@ setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m " When the matchit plugin is loaded, this makes the % command skip parens and " braces in comments. -let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=}\|\' +let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\\)' let b:match_skip = 's:comment\|string\|zimbuchar' @@ -43,12 +43,36 @@ setlocal et sts=2 sw=2 " Does replace when a dot, space or closing brace is typed. func! GCUpperDot(what) - let col = col(".") - strlen(a:what) - if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' + if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ',' " no space or dot after the typed text let g:got_char = v:char return a:what endif + return GCUpperCommon(a:what) +endfunc + +" Does not replace when a dot is typed. +func! GCUpper(what) + if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ',' + " no space or other "terminating" character after the typed text + let g:got_char = v:char + return a:what + endif + return GCUpperCommon(a:what) +endfunc + +" Only replaces when a space is typed. +func! GCUpperSpace(what) + if v:char != ' ' + " no space after the typed text + let g:got_char = v:char + return a:what + endif + return GCUpperCommon(a:what) +endfunc + +func! GCUpperCommon(what) + let col = col(".") - strlen(a:what) if col > 1 && getline('.')[col - 2] != ' ' " no space before the typed text let g:got_char = 999 @@ -64,34 +88,15 @@ func! GCUpperDot(what) return toupper(a:what) endfunc -" Does not replace when a dot is typed. -func! GCUpper(what) - if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' - " no space after the typed text - let g:got_char = v:char - return a:what - endif - return GCUpperDot(a:what) -endfunc - -" Only replaces when a space is typed. -func! GCUpperSpace(what) - if v:char != ' ' - " no space after the typed text - let g:got_char = v:char - return a:what - endif - return GCUpperDot(a:what) -endfunc - iabbr alias GCUpperSpace("alias") iabbr arg GCUpperDot("arg") -iabbr bad GCUpper("bad") iabbr break GCUpper("break") iabbr case GCUpperSpace("case") iabbr catch GCUpperSpace("catch") iabbr check GCUpperDot("check") iabbr class GCUpperSpace("class") +iabbr interface GCUpperSpace("interface") +iabbr implements GCUpperSpace("implements") iabbr shared GCUpperSpace("shared") iabbr continue GCUpper("continue") iabbr default GCUpper("default") diff --git a/runtime/indent/zimbu.vim b/runtime/indent/zimbu.vim index 8df0eebe6f..9565b10843 100644 --- a/runtime/indent/zimbu.vim +++ b/runtime/indent/zimbu.vim @@ -1,7 +1,7 @@ " Vim indent file " Language: Zimbu " Maintainer: Bram Moolenaar -" Last Change: 2011 Jun 19 +" Last Change: 2012 Sep 08 " Only load this indent file when no other was loaded. if exists("b:did_indent") @@ -101,7 +101,7 @@ func GetZimbuIndent(lnum) endwhile endif - if prevline =~ '^\s*\(IF\|\|ELSEIF\|ELSE\|GENERATE_IF\|\|GENERATE_ELSEIF\|GENERATE_ELSE\|WHILE\|REPEAT\|TRY\|CATCH\|FINALLY\|FOR\|DO\|SWITCH\|CASE\|DEFAULT\|FUNC\|VIRTUAL\|ABSTRACT\|DEFINE\|REPLACE\|FINAL\|PROC\|MAIN\|NEW\|ENUM\|CLASS\|BITS\|MODULE\|SHARED\)\>' + if prevline =~ '^\s*\(IF\|\|ELSEIF\|ELSE\|GENERATE_IF\|\|GENERATE_ELSEIF\|GENERATE_ELSE\|WHILE\|REPEAT\|TRY\|CATCH\|FINALLY\|FOR\|DO\|SWITCH\|CASE\|DEFAULT\|FUNC\|VIRTUAL\|ABSTRACT\|DEFINE\|REPLACE\|FINAL\|PROC\|MAIN\|NEW\|ENUM\|CLASS\|INTERFACE\|BITS\|MODULE\|SHARED\)\>' let plindent += &sw endif if thisline =~ '^\s*\(}\|ELSEIF\>\|ELSE\>\|CATCH\|FINALLY\|GENERATE_ELSEIF\>\|GENERATE_ELSE\>\|UNTIL\>\)' diff --git a/runtime/scripts.vim b/runtime/scripts.vim index 75275785fb..bb5a492512 100644 --- a/runtime/scripts.vim +++ b/runtime/scripts.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types in scripts " " Maintainer: Bram Moolenaar -" Last change: 2010 Sep 22 +" Last change: 2012 Aug 30 " 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 @@ -198,7 +198,8 @@ else " - "=== ", line of "=", "---", "+++ " (SVK diff) " - "=== ", "--- ", "+++ " (bzr diff, common case) " - "=== (removed|added|renamed|modified)" (bzr diff, alternative) - elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)' + " - "# HG changeset patch" in first line (Mercurial export format) + elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)' \ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ') \ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ') \ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ') diff --git a/runtime/syntax/cl.vim b/runtime/syntax/cl.vim index 343d2601d1..ccea2ee5ce 100644 --- a/runtime/syntax/cl.vim +++ b/runtime/syntax/cl.vim @@ -1,25 +1,25 @@ " Vim syntax file -" Language: CL -" (pronounced alphabetically, and NOT known as Clever) -" (CL was created by Multibase, http://www.mbase.com.au) +" Language: CL +" (pronounced alphabetically, and NOT known as Clever) +" (CL was created by Multibase, http://www.mbase.com.au) " Filename extensions: *.ent -" *.eni +" *.eni " Maintainer: Philip Uren Remove SPAX spam block -" Version: 4 -" Last Change: May 11 2012 +" Version: 5 +" Last Change: Aug 16 2012 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded if version < 600 - syntax clear + syntax clear elseif exists("b:current_syntax") - finish + finish endif if version >= 600 - setlocal iskeyword=@,48-57,_,-, + setlocal iskeyword=@,48-57,_,-, else - set iskeyword=@,48-57,_,-, + set iskeyword=@,48-57,_,-, endif syn case ignore @@ -27,87 +27,87 @@ syn case ignore syn sync lines=300 "If/else/elsif/endif and while/wend mismatch errors -syn match clifError "\" -syn match clifError "\" -syn match clifError "\" -syn match clifError "\" +syn match clifError "\" +syn match clifError "\" +syn match clifError "\" +syn match clifError "\" -syn match clSpaceError "\s\+$" +syn match clSpaceError "\s\+$" " If and while regions -syn region clLoop transparent matchgroup=clWhile start="\" matchgroup=clWhile end="\" contains=ALLBUT,clBreak,clProcedure -syn region clIf transparent matchgroup=clConditional start="\" matchgroup=clConditional end="\" contains=ALLBUT,clBreak,clProcedure +syn region clLoop transparent matchgroup=clWhile start="\" matchgroup=clWhile end="\" contains=ALLBUT,clBreak,clProcedure +syn region clIf transparent matchgroup=clConditional start="\" matchgroup=clConditional end="\" contains=ALLBUT,clBreak,clProcedure " Make those TODO notes and debugging stand out! -syn keyword clTodo contained TODO BUG DEBUG FIX -syn match clNeedsWork contained "NEED[S]*\s\s*WORK" -syn keyword clDebug contained debug +syn keyword clTodo contained TODO BUG DEBUG FIX +syn match clNeedsWork contained "NEED[S]*\s\s*WORK" +syn keyword clDebug contained debug -syn match clComment "#.*$" contains=clTodo,clNeedsWork -syn region clProcedure oneline start="^\s*[{}]" end="$" -syn match clInclude "^\s*include\s.*" +syn match clComment "#.*$" contains=clTodo,clNeedsWork,@Spell +syn region clProcedure oneline start="^\s*[{}]" end="$" +syn match clInclude "^\s*include\s.*" " We don't put "debug" in the clSetOptions; " we contain it in clSet so we can make it stand out. -syn keyword clSetOptions transparent aauto abort align convert E fill fnum goback hangup justify null_exit output rauto rawprint rawdisplay repeat skip tab trim -syn match clSet "^\s*set\s.*" contains=clSetOptions,clDebug +syn keyword clSetOptions transparent aauto abort align convert E fill fnum goback hangup justify null_exit output rauto rawprint rawdisplay repeat skip tab trim +syn match clSet "^\s*set\s.*" contains=clSetOptions,clDebug -syn match clPreProc "^\s*#P.*" +syn match clPreProc "^\s*#P.*" -syn keyword clConditional else elsif -syn keyword clWhile continue endloop +syn keyword clConditional else elsif +syn keyword clWhile continue endloop " 'break' needs to be a region so we can sync on it above. -syn region clBreak oneline start="^\s*break" end="$" +syn region clBreak oneline start="^\s*break" end="$" -syn match clOperator "[!;|)(:.><+*=-]" +syn match clOperator "[!;|)(:.><+*=-]" -syn match clNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" +syn match clNumber "\<\d\+\(u\=l\=\|lu\|f\)\>" -syn region clString matchgroup=clQuote start=+"+ end=+"+ skip=+\\"+ -syn region clString matchgroup=clQuote start=+'+ end=+'+ skip=+\\'+ +syn region clString matchgroup=clQuote start=+"+ end=+"+ skip=+\\"+ contains=@Spell +syn region clString matchgroup=clQuote start=+'+ end=+'+ skip=+\\'+ contains=@Spell -syn keyword clReserved ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH +syn keyword clReserved ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH -syn keyword clFunction asc asize chr name random slen srandom day getarg getcgi getenv lcase scat sconv sdel skey smult srep substr sword trim ucase match +syn keyword clFunction asc asize chr name random slen srandom day getarg getcgi getenv lcase scat sconv sdel skey smult srep substr sword trim ucase match -syn keyword clStatement clear clear_eol clear_eos close copy create unique with where empty define define ldefine delay_form delete escape exit_block exit_do exit_process field fork format get getfile getnext getprev goto head join maintain message no_join on_eop on_key on_exit on_delete openin openout openapp pause popenin popenout popenio print put range read redisplay refresh restart_block screen select sleep text unlock write and not or do +syn keyword clStatement clear clear_eol clear_eos close copy create unique with where empty define define ldefine delay_form delete escape exit_block exit_do exit_process field fork format get getfile getnext getprev goto head join maintain message no_join on_eop on_key on_exit on_delete openin openout openapp pause popenin popenout popenio print put range read redisplay refresh restart_block screen select sleep text unlock write and not or do " Define the default highlighting. " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet -if version >= 508 || !exists("did_cl_syntax_inits") - if version < 508 - let did_cl_syntax_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif +if version >= 508 || !exists("did_cl_syntax_inits") + if version < 508 + let did_cl_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif - HiLink clifError Error - HiLink clSpaceError Error - HiLink clWhile Repeat - HiLink clConditional Conditional - HiLink clDebug Debug - HiLink clNeedsWork Todo - HiLink clTodo Todo - HiLink clComment Comment - HiLink clProcedure Procedure - HiLink clBreak Procedure - HiLink clInclude Include - HiLink clSetOption Statement - HiLink clSet Identifier - HiLink clPreProc PreProc - HiLink clOperator Operator - HiLink clNumber Number - HiLink clString String - HiLink clQuote Delimiter - HiLink clReserved Identifier - HiLink clFunction Function - HiLink clStatement Statement + HiLink clifError Error + HiLink clSpaceError Error + HiLink clWhile Repeat + HiLink clConditional Conditional + HiLink clDebug Debug + HiLink clNeedsWork Todo + HiLink clTodo Todo + HiLink clComment Comment + HiLink clProcedure Procedure + HiLink clBreak Procedure + HiLink clInclude Include + HiLink clSetOption Statement + HiLink clSet Identifier + HiLink clPreProc PreProc + HiLink clOperator Operator + HiLink clNumber Number + HiLink clString String + HiLink clQuote Delimiter + HiLink clReserved Identifier + HiLink clFunction Function + HiLink clStatement Statement - delcommand HiLink + delcommand HiLink endif let b:current_syntax = "cl" -" vim: ts=8 sw=4 +" vim: ts=8 sw=8 diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim index c2c83570ab..324dce3cc8 100644 --- a/runtime/syntax/css.vim +++ b/runtime/syntax/css.vim @@ -1,10 +1,11 @@ " Vim syntax file -" Language: Cascading Style Sheets -" Maintainer: Claudio Fleiner -" URL: http://www.fleiner.com/vim/syntax/css.vim -" Last Change: 2011 Dec 14 -" CSS2 by Nikolai Weibull -" Full CSS2, HTML4 support by Yeti +" Language: Cascading Style Sheets +" Previous Contributor List: +" Claudio Fleiner (Maintainer) +" Yeti (Add full CSS2, HTML4 support) +" Nikolai Weibull (Add CSS2 support) +" Maintainer: Jules Wang +" Last Change: 2012 Aug 21 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -19,6 +20,7 @@ endif syn case ignore +" All HTML4 tags syn keyword cssTagName abbr acronym address applet area a b base syn keyword cssTagName basefont bdo big blockquote body br button syn keyword cssTagName caption center cite code col colgroup dd del @@ -27,32 +29,51 @@ syn keyword cssTagName frameset h1 h2 h3 h4 h5 h6 head hr html img i syn keyword cssTagName iframe img input ins isindex kbd label legend li syn keyword cssTagName link map menu meta noframes noscript ol optgroup syn keyword cssTagName option p param pre q s samp script select small -syn keyword cssTagName span strike strong style sub sup tbody td +syn keyword cssTagName span strike strong style sub sup table tbody td syn keyword cssTagName textarea tfoot th thead title tr tt ul u var -syn match cssTagName "\" +syn keyword cssTagName object + +" HTML5 new tags 5*6=30 +syn keyword cssTagName article aside audio bdi canvas command +syn keyword cssTagName datalist details embed figcaption figure footer +syn keyword cssTagName header hgroup keygen mark meter nav +syn keyword cssTagName output progress rt rp ruby section +syn keyword cssTagName source summary time track video wbr + +" Tags not supported in HTML5 +syn keyword cssDeprecated acronym applet basefont big center dir +syn keyword cssDeprecated font frame frameset noframes strike tt + +"syn match cssTagName "\" syn match cssTagName "\*" -syn match cssTagName "@page\>" nextgroup=cssDefinition - -syn match cssSelectorOp "[+>.]" -syn match cssSelectorOp2 "[~|]\?=" contained +" selectors +syn match cssSelectorOp "[,>+]" +syn match cssSelectorOp2 "[~|^$*]\?=" contained +" FIXME: add HTML5 attribute syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ +" .class and #id +syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+" + try syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*" catch /^.*/ syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*" endtry +syn match cssTagName "@page\>" nextgroup=cssDefinition +" FIXME: use cssVendor here +syn match cssTagName "@\(-\(webkit\|moz\|o\|ms\)-\)\=keyframes\>" nextgroup=cssDefinition syn match cssMedia "@media\>" nextgroup=cssMediaType skipwhite skipnl syn keyword cssMediaType contained screen print aural braile embosed handheld projection ty tv all nextgroup=cssMediaComma,cssMediaBlock skipwhite skipnl -syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl +"syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssError,cssComment,cssDefinition,cssURL,cssUnicodeEscape,cssIdentifier syn match cssValueInteger contained "[-+]\=\d\+" syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\=" -syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\)" +syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\)" syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)" syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)" syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)" @@ -73,20 +94,78 @@ syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon na syn case match syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background syn case ignore + +syn match cssImportant contained "!\s*important\>" + syn match cssColor contained "\" syn match cssColor contained "\" syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>" syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>" -"syn match cssColor contained "\" - -syn keyword cssCommonAttr contained auto none inherit +" Prop and Attr +" Reference: http://www.w3schools.com/cssref/default.asp +syn keyword cssCommonAttr contained auto none inherit all syn keyword cssCommonAttr contained top bottom syn keyword cssCommonAttr contained medium normal + +syn match cssAnimationProp contained "\" + + +syn keyword cssAnimationAttr contained infinite alternate paused running +" bugfix: escape linear-gradient +syn match cssAnimationAttr contained "\" +syn match cssAnimationAttr contained "\" + +syn match cssBackgroundProp contained "\" +syn keyword cssBackgroundAttr contained center fixed over contain +syn match cssBackgroundAttr contained "\" +syn match cssBackgroundAttr contained "\" +syn match cssBackgroundAttr contained "\<\(border\|content\|padding\)-box\>" + + +syn match cssBorderOutlineProp contained "\" +syn match cssBorderOutlineProp contained "\" +syn match cssBorderOutlineProp contained "\" +syn match cssBorderOutlineProp contained "\" +syn match cssBorderOutlineProp contained "\" +syn keyword cssBorderOutlineAttr contained thin thick medium +syn keyword cssBorderOutlineAttr contained dotted dashed solid double groove ridge inset outset +syn keyword cssBorderOutlineAttr contained hidden visible scroll collapse +syn keyword cssBorderOutlineAttr contained stretch round + + +syn match cssBoxProp contained "\" +syn match cssBoxProp contained "\" +syn keyword cssBoxAttr contained visible hidden scroll auto +syn match cssBoxAttr contained "\" + +syn keyword cssColorProp contained opacity +syn match cssColorProp contained "\" +syn match cssColorProp contained "\" + + +syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>" +syn keyword cssDimensionProp contained height +syn keyword cssDimensionProp contained width + +" shadow and sizing are in other property groups +syn match cssFlexibleBoxProp contained "\" +syn keyword cssFlexibleBoxAttr contained start end center baseline stretch +syn keyword cssFlexibleBoxAttr contained normal reverse +syn keyword cssFlexibleBoxAttr contained single mulitple +syn keyword cssFlexibleBoxAttr contained horizontal +" bugfix: escape vertial-align +syn match cssFlexibleBoxAttr contained "\" +syn match cssFlexibleBoxAttr contained "\<\(inline\|block\)-axis\>" + + syn match cssFontProp contained "\" syn match cssFontAttr contained "\<\(sans-\)\=\" syn match cssFontAttr contained "\" @@ -95,67 +174,92 @@ syn match cssFontAttr contained "\" syn match cssFontAttr contained "\" syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\|status-bar\)-\)\=\(condensed\|expanded\)\>" syn keyword cssFontAttr contained cursive fantasy monospace italic oblique -syn keyword cssFontAttr contained bold bolder lighter larger smaller -syn keyword cssFontAttr contained icon menu -syn match cssFontAttr contained "\" -syn keyword cssFontAttr contained large smaller larger -syn keyword cssFontAttr contained narrower wider +syn keyword cssFontAttr contained bold bolder light lighter larger smaller +syn keyword cssFontAttr contained icon menu caption +syn keyword cssFontAttr contained large smaller larger narrower wider +syn keyword cssFontAttr contained Courier Arial Georgia Times -syn keyword cssColorProp contained color -syn match cssColorProp contained "\" -syn keyword cssColorAttr contained center scroll fixed -syn match cssColorAttr contained "\" -syn match cssColorAttr contained "\" +syn keyword cssGeneratedContentProp contained content quotes crop +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentProp contained "\" +syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>" + + +syn match cssGridProp contained "\" + +syn match cssHyerlinkProp contained "\" + +syn match cssListProp contained "\" +syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>" +syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>" +syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>" +syn keyword cssListAttr contained disc circle square hebrew armenian georgian +syn keyword cssListAttr contained inside outside + + +syn match cssMarginProp contained "\" + +syn match cssMultiColumnProp contained "\" + + +syn match cssPaddingProp contained "\" + +syn keyword cssPositioningProp contained bottom clear clip display float left +syn keyword cssPositioningProp contained position right top visibility +syn match cssPositioningProp contained "\" +syn keyword cssPositioningAttr contained block inline compact +syn match cssPositioningAttr contained "\" +syn keyword cssPositioningAttr contained left right both +syn match cssPositioningAttr contained "\" +syn match cssPositioningAttr contained "\" +syn keyword cssPositioningAttr contained static relative absolute fixed + +syn match cssPrintProp contained "\" +syn keyword cssPrintProp contained orphans widows +syn keyword cssPrintAttr contained landscape portrait crop cross always avoid + +syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>" +syn keyword cssTableAttr contained fixed collapse separate show hide once always + + +syn keyword cssTextProp contained color direction syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" +syn match cssTextProp contained "\" syn match cssTextAttr contained "\" syn match cssTextAttr contained "\" syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>" +syn keyword cssTextAttr contained ltr rtl embed nowrap syn keyword cssTextAttr contained underline overline blink sub super middle -syn keyword cssTextAttr contained capitalize uppercase lowercase center justify baseline sub super +syn keyword cssTextAttr contained capitalize uppercase lowercase +syn keyword cssTextAttr contained center justify baseline sub super +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\<\(allow\|force\)-end\>" +syn keyword cssTextAttr contained start end adjacent +syn match cssTextAttr contained "\" +syn keyword cssTextAttr contained distribute kashida first last +syn keyword cssTextAttr contained clip ellipsis unrestricted suppress +syn match cssTextAttr contained "\" +syn match cssTextAttr contained "\" +syn keyword cssTextAttr contained hyphenate -syn match cssBoxProp contained "\<\(margin\|padding\|border\)\(-\(top\|right\|bottom\|left\)\)\=\>" -syn match cssBoxProp contained "\" -syn match cssBoxProp contained "\<\(width\|z-index\)\>" -syn match cssBoxProp contained "\<\(min\|max\)-\(width\|height\)\>" -syn keyword cssBoxProp contained width height float clear overflow clip visibility -syn keyword cssBoxAttr contained thin thick both -syn keyword cssBoxAttr contained dotted dashed solid double groove ridge inset outset -syn keyword cssBoxAttr contained hidden visible scroll collapse -syn keyword cssGeneratedContentProp contained content quotes -syn match cssGeneratedContentProp contained "\" -syn match cssGeneratedContentProp contained "\" -syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>" -syn match cssAuralAttr contained "\" -syn match cssGeneratedContentAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>" -syn match cssGeneratedContentAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>" -syn match cssGeneratedContentAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>" -syn keyword cssGeneratedContentAttr contained disc circle square hebrew armenian georgian -syn keyword cssGeneratedContentAttr contained inside outside +syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" +syn match cssTransformProp contained "\" -syn match cssPagingProp contained "\" -syn keyword cssPagingProp contained size marks inside orphans widows -syn keyword cssPagingAttr contained landscape portrait crop cross always avoid - -syn keyword cssUIProp contained cursor -syn match cssUIProp contained "\" -syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>" -syn keyword cssUIAttr contained default crosshair pointer move wait help -syn keyword cssUIAttr contained thin thick -syn keyword cssUIAttr contained dotted dashed solid double groove ridge inset outset -syn keyword cssUIAttr contained invert - -syn match cssRenderAttr contained "\" -syn match cssRenderProp contained "\<\(display\|marker-offset\|unicode-bidi\|white-space\|list-item\|run-in\|inline-table\)\>" -syn keyword cssRenderProp contained position top bottom direction -syn match cssRenderProp contained "\<\(left\|right\)\>" -syn keyword cssRenderAttr contained block inline compact -syn match cssRenderAttr contained "\" -syn keyword cssRenderAttr contained static relative absolute fixed -syn keyword cssRenderAttr contained ltr rtl embed bidi-override pre nowrap -syn match cssRenderAttr contained "\" +syn match cssTransitionProp contained "\" +syn match cssUIProp contained "\" +syn match cssUIProp contained "\" +syn match cssUIProp contained "\" +syn keyword cssUIProp contained appearance icon resize +syn keyword cssUIAttr contained window button menu field syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>" syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>" @@ -171,30 +275,54 @@ syn keyword cssAuralAttr contained below level above higher syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\)\>" syn keyword cssAuralAttr contained faster slower syn keyword cssAuralAttr contained male female child code digits continuous +syn match cssAuralAttr contained "\" + +" cursor +syn keyword cssUIProp contained cursor +syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>" +syn keyword cssUIAttr contained crosshair default help move pointer +syn keyword cssUIAttr contained progress wait + +" FIXME: I could not find them in reference +syn keyword cssUIAttr contained invert maker size zoom +syn match cssRenderAttr contained "\" +syn match cssRenderAttr contained "\" +syn match cssRenderAttr contained "\" +syn match cssRenderProp contained "\" +syn match cssRenderAttr contained "\" -syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\|speak-header\)\>" -syn keyword cssTableAttr contained fixed collapse separate show hide once always " FIXME: This allows cssMediaBlock before the semicolon, which is wrong. syn region cssInclude start="@import" end=";" contains=cssComment,cssURL,cssUnicodeEscape,cssMediaType syn match cssBraces contained "[{}]" syn match cssError contained "{@<>" -syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape +syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition syn match cssBraceError "}" +" Pseudo class syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssPseudoClassId,cssUnicodeEscape -syn keyword cssPseudoClassId contained link visited active hover focus before after left right +syn keyword cssPseudoClassId link visited active hover focus before after left right lang syn match cssPseudoClassId contained "\" -syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline +" FIXME: handle functions. +"syn region cssPseudoClassLang matchgroup=cssPseudoClassId start="lang(" end=")" +syn match cssPseudoClassId contained "\<\(last\|only\|nth\|nth-last\)-child\>" +syn match cssPseudoClassId contained "\<\(first\|last\|only\|nth\|nth-last\)-of-type\>" +syn keyword cssPseudoClassId root empty target enable disabled checked not invalid +syn match cssPseudoClassId contained "::\(-moz-\)\=selection" +" Comment syn region cssComment start="/\*" end="\*/" contains=@Spell +syn region cssComment start="//" skip="\\$" end="$" keepend contains=@Spell syn match cssUnicodeEscape "\\\x\{1,6}\s\?" syn match cssSpecialCharQQ +\\"+ contained syn match cssSpecialCharQ +\\'+ contained syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ -syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+" + +" Vendor Prefix +syn match cssVendor contained "\(-\(webkit\|moz\|o\|ms\)-\)" + if main_syntax == "css" syn sync minlines=10 @@ -212,31 +340,75 @@ if version >= 508 || !exists("did_css_syn_inits") endif HiLink cssComment Comment + HiLink cssVendor Comment HiLink cssTagName Statement + HiLink cssDeprecated Error HiLink cssSelectorOp Special HiLink cssSelectorOp2 Special - HiLink cssFontProp StorageClass - HiLink cssColorProp StorageClass - HiLink cssTextProp StorageClass + + HiLink cssAnimationProp StorageClass + HiLink cssBackgroundProp StorageClass + HiLink cssBorderOutlineProp StorageClass HiLink cssBoxProp StorageClass - HiLink cssRenderProp StorageClass + HiLink cssColorProp StorageClass + HiLink cssContentForPagedMediaProp StorageClass + HiLink cssDimensionProp StorageClass + HiLink cssFlexibleBoxProp StorageClass + HiLink cssFontProp StorageClass + HiLink cssGeneratedContentProp StorageClass + HiLink cssGridProp StorageClass + HiLink cssHyerlinkProp StorageClass + HiLink cssLineboxProp StorageClass + HiLink cssListProp StorageClass + HiLink cssMarginProp StorageClass + HiLink cssMarqueeProp StorageClass + HiLink cssMultiColumnProp StorageClass + HiLink cssPaddingProp StorageClass + HiLink cssPagedMediaProp StorageClass + HiLink cssPositioningProp StorageClass + HiLink cssPrintProp StorageClass + HiLink cssRubyProp StorageClass + HiLink cssSpeechProp StorageClass + HiLink cssTableProp StorageClass + HiLink cssTextProp StorageClass + HiLink cssTransformProp StorageClass + HiLink cssTransitionProp StorageClass + HiLink cssUIProp StorageClass HiLink cssAuralProp StorageClass HiLink cssRenderProp StorageClass - HiLink cssGeneratedContentProp StorageClass - HiLink cssPagingProp StorageClass - HiLink cssTableProp StorageClass - HiLink cssUIProp StorageClass - HiLink cssFontAttr Type - HiLink cssColorAttr Type - HiLink cssTextAttr Type + + HiLink cssAnimationAttr Type + HiLink cssBackgroundAttr Type + HiLink cssBorderOutlineAttr Type HiLink cssBoxAttr Type - HiLink cssRenderAttr Type - HiLink cssAuralAttr Type + HiLink cssColorAttr Type + HiLink cssContentForPagedMediaAttr Type + HiLink cssDimensionAttr Type + HiLink cssFlexibleBoxAttr Type + HiLink cssFontAttr Type HiLink cssGeneratedContentAttr Type - HiLink cssPagingAttr Type + HiLink cssGridAttr Type + HiLink cssHyerlinkAttr Type + HiLink cssLineboxAttr Type + HiLink cssListAttr Type + HiLink cssMarginAttr Type + HiLink cssMarqueeAttr Type + HiLink cssMultiColumnAttr Type + HiLink cssPaddingAttr Type + HiLink cssPagedMediaAttr Type + HiLink cssPositioningAttr Type + HiLink cssPrintAttr Type + HiLink cssRubyAttr Type + HiLink cssSpeechAttr Type HiLink cssTableAttr Type + HiLink cssTextAttr Type + HiLink cssTransformAttr Type + HiLink cssTransitionAttr Type HiLink cssUIAttr Type + HiLink cssAuralAttr Type + HiLink cssRenderAttr Type HiLink cssCommonAttr Type + HiLink cssPseudoClassId PreProc HiLink cssPseudoClassLang Constant HiLink cssValueLength Number diff --git a/runtime/syntax/hgcommit.vim b/runtime/syntax/hgcommit.vim index e4c8b6ed44..37fe9db8bf 100644 --- a/runtime/syntax/hgcommit.vim +++ b/runtime/syntax/hgcommit.vim @@ -1,7 +1,7 @@ " Vim syntax file " Language: hg (Mercurial) commit file " Maintainer: Ken Takata -" Last Change: 2012 Aug 2 +" Last Change: 2012 Aug 23 " Filenames: hg-editor-*.txt " License: VIM License " URL: https://github.com/k-takata/hg-vim @@ -10,12 +10,12 @@ if exists("b:current_syntax") finish endif -syn match hgcommitComment "^HG:.*$" -syn match hgcommitUser "^HG: user: \zs.*$" contained containedin=hgcommitComment -syn match hgcommitBranch "^HG: branch \zs.*$" contained containedin=hgcommitComment -syn match hgcommitAdded "^HG: \zsadded .*$" contained containedin=hgcommitComment -syn match hgcommitChanged "^HG: \zschanged .*$" contained containedin=hgcommitComment -syn match hgcommitRemoved "^HG: \zsremoved .*$" contained containedin=hgcommitComment +syn match hgcommitComment "^HG:.*$" contains=@NoSpell +syn match hgcommitUser "^HG: user: \zs.*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitBranch "^HG: branch \zs.*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitAdded "^HG: \zsadded .*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitChanged "^HG: \zschanged .*$" contains=@NoSpell contained containedin=hgcommitComment +syn match hgcommitRemoved "^HG: \zsremoved .*$" contains=@NoSpell contained containedin=hgcommitComment hi def link hgcommitComment Comment hi def link hgcommitUser String diff --git a/runtime/syntax/progress.vim b/runtime/syntax/progress.vim index 3ff7723453..190a0f381b 100644 --- a/runtime/syntax/progress.vim +++ b/runtime/syntax/progress.vim @@ -3,20 +3,20 @@ " Filename extensions: *.p (collides with Pascal), " *.i (collides with assembler) " *.w (collides with cweb) -" Maintainer: Philip Uren Remove SPAX spam block -" Contributors: Chris Ruprecht -" Philip Uren -" Mikhail Kuperblum -" John Florian -" Version: 11 -" Last Change: May 11 2012 +" Maintainer: Philip Uren Remove SPAX spam block +" Contributors: Chris Ruprecht +" Philip Uren +" Mikhail Kuperblum +" John Florian +" Version: 12 +" Last Change: Aug 16 2012 " For version 5.x: Clear all syntax item " For version 6.x: Quit when a syntax file was already loaded if version < 600 - syntax clear + syntax clear elseif exists("b:current_syntax") - finish + finish endif let s:cpo_save = &cpo @@ -34,7 +34,7 @@ set expandtab syn case ignore " Progress Blocks of code and mismatched "end." errors. -syn match ProgressEndError "\" +syn match ProgressEndError "\" syn region ProgressDoBlock transparent matchgroup=ProgressDo start="\" matchgroup=ProgressDo end="\" contains=ALLBUT,ProgressProcedure,ProgressFunction syn region ProgressForBlock transparent matchgroup=ProgressFor start="\" matchgroup=ProgressFor end="\" contains=ALLBUT,ProgressProcedure,ProgressFunction syn region ProgressRepeatBlock transparent matchgroup=ProgressRepeat start="\" matchgroup=ProgressRepeat end="\" contains=ALLBUT,ProgressProcedure,ProgressFunction @@ -44,20 +44,20 @@ syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\ " and they could go in ProgressReserved, " but I found it more helpful to highlight them in a different color. syn keyword ProgressConditional if else then when otherwise -syn keyword ProgressFor each where +syn keyword ProgressFor each where " Make those TODO and debugging notes stand out! -syn keyword ProgressTodo contained TODO BUG FIX -syn keyword ProgressDebug contained DEBUG +syn keyword ProgressTodo contained TODO BUG FIX +syn keyword ProgressDebug contained DEBUG syn keyword ProgressDebug debugger " If you like to highlight the whole line of " the start and end of procedures " to make the whole block of code stand out: -syn match ProgressProcedure "^\s*procedure.*" -syn match ProgressProcedure "^\s*end\s\s*procedure.*" -syn match ProgressFunction "^\s*function.*" -syn match ProgressFunction "^\s*end\s\s*function.*" +syn match ProgressProcedure "^\s*procedure.*" +syn match ProgressProcedure "^\s*end\s\s*procedure.*" +syn match ProgressFunction "^\s*function.*" +syn match ProgressFunction "^\s*end\s\s*function.*" " ... otherwise use this: " syn keyword ProgressFunction procedure function @@ -99,14 +99,14 @@ syn keyword ProgressReserved window-maxim[ized] window-minim[ized] window-normal " Strings. Handles embedded quotes. " Note that, for some reason, Progress doesn't use the backslash, "\" " as the escape character; it uses tilde, "~". -syn region ProgressString matchgroup=ProgressQuote start=+"+ end=+"+ skip=+\~'\|\~\~+ -syn region ProgressString matchgroup=ProgressQuote start=+'+ end=+'+ skip=+\~'\|\~\~+ +syn region ProgressString matchgroup=ProgressQuote start=+"+ end=+"+ skip=+\~'\|\~\~+ contains=@Spell +syn region ProgressString matchgroup=ProgressQuote start=+'+ end=+'+ skip=+\~'\|\~\~+ contains=@Spell syn match ProgressIdentifier "\<[a-zA-Z_][a-zA-Z0-9_]*\>()" " syn match ProgressDelimiter "()" -syn match ProgressMatrixDelimiter "[][]" +syn match ProgressMatrixDelimiter "[][]" " If you prefer you can highlight the range: "syn match ProgressMatrixDelimiter "[\d\+\.\.\d\+]" @@ -114,7 +114,7 @@ syn match ProgressNumber "\<\-\=\d\+\(u\=l\=\|lu\|f\)\>" syn match ProgressByte "\$[0-9a-fA-F]\+" " More values: Logicals, and Progress's unknown value, ?. -syn match ProgressNumber "?" +syn match ProgressNumber "?" syn keyword ProgressNumber true false yes no " If you don't like tabs: @@ -123,9 +123,9 @@ syn match ProgressShowTab "\t" " If you don't like white space on the end of lines, uncomment this: " syn match ProgressSpaceError "\s\+$" -syn region ProgressComment start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug -syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment -syn region ProgressPreProc start="&" end="\>" contained +syn region ProgressComment start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell +syn region ProgressInclude start="^[ ]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment +syn region ProgressPreProc start="&" end="\>" contained " This next line works reasonably well. " syn match ProgressOperator "[!;|)(:.><+*=-]" @@ -277,7 +277,7 @@ syn keyword ProgressOperator write-fragment write-message write-processing-instr syn keyword ProgressOperator xml-data-type xml-node-name xml-node-type xml-schema-pat[h] xml-suppress-namespace-processing y y-of year year-offset yes-no syn keyword ProgressOperator yes-no-cancel -syn keyword ProgressType char[acter] int[eger] int64 dec[imal] log[ical] da[te] datetime datetime-tz +syn keyword ProgressType char[acter] int[eger] int64 dec[imal] log[ical] da[te] datetime datetime-tz syn sync lines=800 @@ -285,40 +285,40 @@ syn sync lines=800 " For version 5.7 and earlier: only when not done already " For version 5.8 and later: only when an item doesn't have highlighting yet if version >= 508 || !exists("did_progress_syntax_inits") - if version < 508 - let did_progress_syntax_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif + if version < 508 + let did_progress_syntax_inits = 1 + command -nargs=+ HiLink hi link + else + command -nargs=+ HiLink hi def link + endif - " The default methods for highlighting. Can be overridden later. - HiLink ProgressByte Number - HiLink ProgressCase Repeat - HiLink ProgressComment Comment - HiLink ProgressConditional Conditional - HiLink ProgressDebug Debug - HiLink ProgressDo Repeat - HiLink ProgressEndError Error - HiLink ProgressFor Repeat - HiLink ProgressFunction Procedure - HiLink ProgressIdentifier Identifier - HiLink ProgressInclude Include - HiLink ProgressMatrixDelimiter Identifier - HiLink ProgressNumber Number - HiLink ProgressOperator Operator - HiLink ProgressPreProc PreProc - HiLink ProgressProcedure Procedure - HiLink ProgressQuote Delimiter - HiLink ProgressRepeat Repeat - HiLink ProgressReserved Statement - HiLink ProgressSpaceError Error - HiLink ProgressString String - HiLink ProgressTodo Todo - HiLink ProgressType Statement - HiLink ProgressShowTab Error + " The default methods for highlighting. Can be overridden later. + HiLink ProgressByte Number + HiLink ProgressCase Repeat + HiLink ProgressComment Comment + HiLink ProgressConditional Conditional + HiLink ProgressDebug Debug + HiLink ProgressDo Repeat + HiLink ProgressEndError Error + HiLink ProgressFor Repeat + HiLink ProgressFunction Procedure + HiLink ProgressIdentifier Identifier + HiLink ProgressInclude Include + HiLink ProgressMatrixDelimiter Identifier + HiLink ProgressNumber Number + HiLink ProgressOperator Operator + HiLink ProgressPreProc PreProc + HiLink ProgressProcedure Procedure + HiLink ProgressQuote Delimiter + HiLink ProgressRepeat Repeat + HiLink ProgressReserved Statement + HiLink ProgressSpaceError Error + HiLink ProgressString String + HiLink ProgressTodo Todo + HiLink ProgressType Statement + HiLink ProgressShowTab Error - delcommand HiLink + delcommand HiLink endif let b:current_syntax = "progress" @@ -326,4 +326,4 @@ let b:current_syntax = "progress" let &cpo = s:cpo_save unlet s:cpo_save -" vim: ts=8 sw=4 +" vim: ts=8 sw=8 diff --git a/runtime/tutor/tutor.vim b/runtime/tutor/tutor.vim index 11584d5b75..a48ff6a4eb 100644 --- a/runtime/tutor/tutor.vim +++ b/runtime/tutor/tutor.vim @@ -1,7 +1,7 @@ " Vim tutor support file " Author: Eduardo F. Amatria " Maintainer: Bram Moolenaar -" Last Change: 2008 Jul 21 +" Last Change: 2012 Sep 21 " This Vim script is used for detecting if a translation of the " tutor file exist, i.e., a tutor.xx file, where xx is the language. @@ -72,14 +72,20 @@ if s:ext =~? '\.ko' endif endif -" The Chinese tutor is available in two encodings, guess which one to use +" The Chinese tutor is available in three encodings, guess which one to use " This segment is from the above lines and modified by " Mendel L Chan for Chinese vim tutorial +" When 'encoding' is utf-8, choose between China (simplified) and Taiwan +" (traditional) based on the language, suggested by Alick Zhao. if s:ext =~? '\.zh' if &enc =~ 'big5\|cp950' let s:ext = ".zh.big5" elseif &enc != 'utf-8' let s:ext = ".zh.euc" + elseif s:ext =~? 'zh_tw' || (exists("s:lang") && s:lang =~? 'zh_tw') + let s:ext = ".zh_tw" + else + let s:ext = ".zh_cn" endif endif diff --git a/runtime/tutor/tutor.zh_cn.utf-8 b/runtime/tutor/tutor.zh_cn.utf-8 new file mode 100644 index 0000000000..0821ef6e45 --- /dev/null +++ b/runtime/tutor/tutor.zh_cn.utf-8 @@ -0,0 +1,851 @@ +=============================================================================== += 欢 迎 阅 读 《 V I M æ•™ 程 》 —— 版本 1.5 = +=============================================================================== + vim 是一个具有很多命令的功能éžå¸¸å¼ºå¤§çš„编辑器。é™äºŽç¯‡å¹…,在本教程当中 + å°±ä¸è¯¦ç»†ä»‹ç»äº†ã€‚本教程的设计目标是讲述一些必è¦çš„基本命令,而掌æ¡å¥½è¿™ + 些命令,您就能够很容易将vim当作一个通用的万能编辑器æ¥ä½¿ç”¨äº†ã€‚ + + å®Œæˆæœ¬æ•™ç¨‹çš„内容大约需è¦25-30分钟,å–决于您训练的时间。 + + æ¯ä¸€èŠ‚çš„å‘½ä»¤æ“ä½œå°†ä¼šæ›´æ”¹æœ¬æ–‡ã€‚æŽ¨èæ‚¨å¤åˆ¶æœ¬æ–‡çš„一个副本,然åŽåœ¨å‰¯æœ¬ä¸Š + 进行训练(如果您是通过"vimtutor"æ¥å¯åŠ¨æ•™ç¨‹çš„ï¼Œé‚£ä¹ˆæœ¬æ–‡å°±å·²ç»æ˜¯å‰¯æœ¬äº†)。 + + 切记一点∶本教程的设计æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­è¿›è¡Œå­¦ä¹ çš„。也就是说,您需è¦é€šè¿‡ + 执行命令æ¥å­¦ä¹ å®ƒä»¬æœ¬èº«çš„æ­£ç¡®ç”¨æ³•ã€‚å¦‚æžœæ‚¨åªæ˜¯é˜…è¯»è€Œä¸æ“作,那么您å¯èƒ½ + 会很快é—å¿˜è¿™äº›å‘½ä»¤çš„ï¼ + + 好了,现在请确定您的Shift-Lock(大å°å†™é”定键)è¿˜æ²¡æœ‰æŒ‰ä¸‹ï¼Œç„¶åŽæŒ‰é”®ç›˜ä¸Š + 的字æ¯é”® j 足够多的次数æ¥ç§»åŠ¨å…‰æ ‡ï¼Œç›´åˆ°ç¬¬ä¸€èŠ‚çš„å†…å®¹èƒ½å¤Ÿå®Œå…¨å……æ»¡å±å¹•。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第一节∶移动光标 + + + ※※ è¦ç§»åŠ¨å…‰æ ‡ï¼Œè¯·ä¾ç…§è¯´æ˜Žåˆ†åˆ«æŒ‰ä¸‹ hã€jã€kã€l 键。 ※※ + + ^ + k æç¤ºâˆ¶ h 的键ä½äºŽå·¦è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘左移动。 + < h l > l 的键ä½äºŽå³è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘å³ç§»åŠ¨ã€‚ + j j 键看起æ¥å¾ˆè±¡ä¸€æ”¯å°–ç«¯æ–¹å‘æœä¸‹çš„箭头。 + v + + 1. è¯·éšæ„在å±å¹•内移动光标,直至您觉得舒æœä¸ºæ­¢ã€‚ + + 2. 按下下行键(j),直到出现光标é‡å¤ä¸‹è¡Œã€‚ + +---> 现在您应该已ç»å­¦ä¼šå¦‚何移动到下一讲å§ã€‚ + + 3. 现在请使用下行键,将光标移动到第二讲。 + +æç¤ºâˆ¶å¦‚æžœæ‚¨ä¸æ•¢ç¡®å®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè¯·æŒ‰ä¸‹é”®å›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚ + ç„¶åŽå†æ¬¡ä»Žé”®ç›˜è¾“入您想è¦çš„命令。 + +æç¤ºâˆ¶å…‰æ ‡é”®åº”当也能正常工作的。但是使用hjklé”®ï¼Œåœ¨ä¹ æƒ¯ä¹‹åŽæ‚¨å°±èƒ½å¤Ÿå¿«é€Ÿ + 地在å±å¹•内四处移动光标了。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第二节∶VIM的进入和退出 + + + !! 特别æç¤ºâˆ¶æ•¬è¯·é˜…è¯»å®Œæ•´æœ¬ä¸€èŠ‚çš„å†…å®¹ï¼Œç„¶åŽæ‰èƒ½æ‰§è¡Œä»¥ä¸‹æ‰€è®²è§£çš„命令。 + + 1. 请按键(è¿™æ˜¯ä¸ºäº†ç¡®ä¿æ‚¨å¤„在正常模å¼)。 + + 2. ç„¶åŽè¾“入∶ :q! <回车> + +---> è¿™ç§æ–¹å¼çš„退出编辑器ç»ä¸ä¼šä¿å­˜æ‚¨è¿›å…¥ç¼–è¾‘å™¨ä»¥æ¥æ‰€åšçš„æ”¹åŠ¨ã€‚ + 如果您想ä¿å­˜æ›´æ”¹å†é€€å‡ºï¼Œè¯·è¾“入∶ + :wq <回车> + + 3. 如果您看到了命令行æç¤ºç¬¦ï¼Œè¯·è¾“入能够带您回到本教程的命令,那就是∶ + + vimtutor <回车> + + 通常情况下您也å¯ä»¥ç”¨è¿™ç§æ–¹å¼âˆ¶ + + vim tutor <回车> + +---> 这里的 'vim' 表示进入vim编辑器,而 'tutor'则是您准备è¦ç¼–辑的文件。 + + 4. 如果您自信已ç»ç‰¢ç‰¢è®°ä½äº†è¿™äº›æ­¥éª¤çš„è¯ï¼Œè¯·ä»Žæ­¥éª¤1执行到步骤3退出,然 + åŽå†æ¬¡è¿›å…¥ç¼–辑器。接ç€å°†å…‰æ ‡ç§»åŠ¨åˆ°ç¬¬ä¸€è®²ç¬¬ä¸‰èŠ‚æ¥ç»§ç»­æˆ‘们的教程讲解。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第三节∶文本编辑之删除 + + + ** 在正常(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x é”®æ¥åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符。** + + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 + + 2. 为了修正输入错误,请将光标移至准备删除的字符的ä½ç½®å¤„。 + + 3. ç„¶åŽæŒ‰ä¸‹ x 键将错误字符删除掉。 + + 4. é‡å¤æ­¥éª¤2到步骤4,直到å¥å­ä¿®æ­£ä¸ºæ­¢ã€‚ + +---> The ccow jumpedd ovverr thhe mooon. + + 5. 好了,该行已ç»ä¿®æ­£äº†ï¼Œä¸‹ä¸€èŠ‚å†…å®¹æ˜¯ç¬¬ä¸€è®²ç¬¬å››èŠ‚ã€‚ + +特别æç¤ºâˆ¶åœ¨æ‚¨æµè§ˆæœ¬æ•™ç¨‹æ—¶ï¼Œä¸è¦å¼ºè¡Œè®°å¿†ã€‚è®°ä½ä¸€ç‚¹âˆ¶åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第四节∶文本编辑之æ’å…¥ + + + ** 在正常模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i é”®æ¥æ’入文本。** + + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 + + 2. 为了使得第一行内容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè¯·å°†å…‰æ ‡ç§»è‡³æ–‡æœ¬ç¬¬ä¸€ä¸ªå­—符准备æ’å…¥ + çš„ä½ç½®ã€‚ + + 3. ç„¶åŽæŒ‰ä¸‹ i 键,接ç€è¾“入必è¦çš„æ–‡æœ¬å­—符。 + + 4. 所有文本都修正完毕,请按下 键返回正常模å¼ã€‚ + é‡å¤æ­¥éª¤2至步骤4以便修正å¥å­ã€‚ + +---> There is text misng this . +---> There is some text missing from this line. + + 5. 如果您对文本æ’å…¥æ“作已ç»å¾ˆæ»¡æ„,请接ç€é˜…读下é¢çš„å°ç»“。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲å°ç»“ + + + 1. 光标在å±å¹•文本中的移动既å¯ä»¥ç”¨ç®­å¤´é”®ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯é”®ã€‚ + h (左移) j (下行) k (上行) l (å³ç§») + + 2. 欲进入vim编辑器(从命令行æç¤ºç¬¦),请输入∶vim 文件å <回车> + + 3. 欲退出vim编辑器,请输入以下命令放弃所有修改∶ + + :q! <回车> + + 或者输入以下命令ä¿å­˜æ‰€æœ‰ä¿®æ”¹âˆ¶ + + :wq <回车> + + 4. 在正常模å¼ä¸‹åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请按∶ x + + 5. 在正常模å¼ä¸‹è¦åœ¨å…‰æ ‡æ‰€åœ¨ä½ç½®å¼€å§‹æ’入文本,请按∶ + + i è¾“å…¥å¿…è¦æ–‡æœ¬ + +特别æç¤ºâˆ¶æŒ‰ä¸‹ é”®ä¼šå¸¦æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–è€…å–æ¶ˆä¸€ä¸ªä¸æœŸæœ›æˆ–è€…éƒ¨åˆ†å®Œæˆ +的命令。 + +好了,第一讲到此结æŸã€‚䏋颿ޥ䏋æ¥ç»§ç»­ç¬¬äºŒè®²çš„内容。 + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第一节∶删除类命令 + + + ** 输入 dw å¯ä»¥ä»Žå…‰æ ‡å¤„删除至一个å•å­—/å•è¯çš„æœ«å°¾ã€‚** + + 1. 请按下 é”®ç¡®ä¿æ‚¨å¤„于正常模å¼ã€‚ + + 2. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 + + 3. 请将光标移至准备è¦åˆ é™¤çš„å•è¯çš„开始。 + + 4. 接ç€è¾“å…¥ dw 删除掉该å•è¯ã€‚ + + 特别æç¤ºâˆ¶æ‚¨æ‰€è¾“入的 dw ä¼šåœ¨æ‚¨è¾“å…¥çš„åŒæ—¶å‡ºçŽ°åœ¨å±å¹•的最åŽä¸€è¡Œã€‚如果您输 + 入有误,请按下 键喿¶ˆï¼Œç„¶åŽé‡æ–°å†æ¥ã€‚ + +---> There are a some words fun that don't belong paper in this sentence. + + 5. é‡å¤æ­¥éª¤3至步骤4,直至å¥å­ä¿®æ­£å®Œæ¯•。接ç€ç»§ç»­ç¬¬äºŒè®²ç¬¬äºŒèŠ‚å†…å®¹ã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第二节∶其他删除类命令 + + + ** 输入 d$ 从当å‰å…‰æ ‡åˆ é™¤åˆ°è¡Œæœ«ã€‚** + + 1. 请按下 é”®ç¡®ä¿æ‚¨å¤„于正常模å¼ã€‚ + + 2. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 + + 3. 请将光标移动到该行的尾部(也就是在第一个点å·â€˜.’åŽé¢)。 + + 4. ç„¶åŽè¾“å…¥ d$ 从光标处删至当å‰è¡Œå°¾éƒ¨ã€‚ + +---> Somebody typed the end of this line twice. end of this line twice. + + + 5. è¯·ç»§ç»­å­¦ä¹ ç¬¬äºŒè®²ç¬¬ä¸‰èŠ‚å°±çŸ¥é“æ˜¯æ€Žä¹ˆå›žäº‹äº†ã€‚ + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第三节∶关于命令和对象 + + + 删除命令 d 的格å¼å¦‚下∶ + + [number] d object 或者 d [number] object + + å…¶æ„如下∶ + number - 代表执行命令的次数(å¯é€‰é¡¹ï¼Œç¼ºçœè®¾ç½®ä¸º 1 )。 + d - 代表删除。 + object - ä»£è¡¨å‘½ä»¤æ‰€è¦æ“作的对象(䏋颿œ‰ç›¸å…³ä»‹ç»)。 + + 一个简短的对象列表∶ + w - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•å­—/å•è¯æœ«å°¾ï¼ŒåŒ…括空格。 + e - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•å­—/å•è¯æœ«å°¾ï¼Œä½†æ˜¯ *ä¸* 包括空格。 + $ - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å½“å‰è¡Œæœ«ã€‚ + +特别æç¤ºâˆ¶ + 对于勇于探索者,请在正常模å¼ä¸‹é¢ä»…按代表相应对象的键而ä¸ä½¿ç”¨å‘½ä»¤ï¼Œåˆ™ + 将看到光标的移动正如上é¢çš„对象列表所代表的一样。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第四节∶对象命令的特殊情况 + + + ** 输入 dd å¯ä»¥åˆ é™¤æ•´ä¸€ä¸ªå½“å‰è¡Œã€‚ ** + + 鉴于整行删除的高频度,VIM 的设计者决定è¦ç®€åŒ–整行删除,仅需è¦åœ¨åŒä¸€è¡Œä¸Š + 击打两次 d å°±å¯ä»¥åˆ é™¤æŽ‰å…‰æ ‡æ‰€åœ¨çš„æ•´è¡Œäº†ã€‚ + + 1. 请将光标移动到本节中下é¢çš„çŸ­å¥æ®µè½ä¸­çš„第二行。 + 2. 输入 dd 删除该行。 + 3. ç„¶åŽç§»åŠ¨åˆ°ç¬¬å››è¡Œã€‚ + 4. 接ç€è¾“å…¥ 2dd (还记得å‰é¢è®²è¿‡çš„ number-command-object å—?) 删除两行。 + + 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. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第五节∶撤消类命令 + + + ** 输入 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. 这些都是éžå¸¸æœ‰ç”¨çš„å‘½ä»¤ã€‚ä¸‹é¢æ˜¯ç¬¬äºŒè®²çš„å°ç»“了。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲å°ç»“ + + + 1. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³å•å­—/å•è¯æœ«å°¾ï¼Œè¯·è¾“入∶dw + + 2. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³å½“å‰è¡Œæœ«å°¾ï¼Œè¯·è¾“入∶d$ + + 3. 欲删除整行,请输入∶dd + + 4. 在正常模å¼ä¸‹ä¸€ä¸ªå‘½ä»¤çš„æ ¼å¼æ˜¯âˆ¶ + + [number] command object 或者 command [number] object + å…¶æ„æ˜¯âˆ¶ + number - 代表的是命令执行的次数 + command - 代表è¦åšçš„事情,比如 d 代表删除 + object - ä»£è¡¨è¦æ“作的对象,比如 w 代表å•å­—/å•è¯ï¼Œ$ 代表到行末等等。 + $ (to the end of line), etc. + + 5. 欲撤消以å‰çš„æ“ä½œï¼Œè¯·è¾“å…¥âˆ¶u (å°å†™çš„u) + 欲撤消在一行中所åšçš„æ”¹åŠ¨ï¼Œè¯·è¾“å…¥âˆ¶U (大写的U) + 欲撤消以å‰çš„æ’¤æ¶ˆå‘½ä»¤ï¼Œæ¢å¤ä»¥å‰çš„æ“ä½œç»“æžœï¼Œè¯·è¾“å…¥âˆ¶CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三讲第一节∶置入类命令 + + + ** 输入 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, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三讲第二节∶替æ¢ç±»å‘½ä»¤ + + + ** 输入 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. ç„¶åŽæˆ‘们继续学校第三讲第三节。 + +特别æç¤ºâˆ¶åˆ‡è®°æ‚¨è¦åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ï¼Œè€Œä¸æ˜¯åœ¨è®°å¿†ä¸­å­¦ä¹ ã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三讲第三节∶更改类命令 + + + ** è¦æ”¹å˜ä¸€ä¸ªå•å­—/å•è¯çš„部分或者全部,请输入 cw ** + + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 + + 2. æŽ¥ç€æŠŠå…‰æ ‡æ”¾åœ¨å•è¯ lubw çš„å­—æ¯ u çš„ä½ç½®é‚£é‡Œã€‚ + + 3. ç„¶åŽè¾“å…¥ cw å°±å¯ä»¥ä¿®æ­£è¯¥å•è¯äº†(在本例这里是输入 ine 。) + + 4. æœ€åŽæŒ‰ 键,然åŽå…‰æ ‡å®šä½åˆ°ä¸‹ä¸€ä¸ªé”™è¯¯ç¬¬ä¸€ä¸ªå‡†å¤‡æ›´æ”¹çš„å­—æ¯å¤„。 + + 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 命令ä¸ä»…仅是替æ¢äº†ä¸€ä¸ªå•è¯ï¼Œä¹Ÿè®©æ‚¨è¿›å…¥æ–‡æœ¬æ’入状æ€äº†ã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三讲第四节∶使用c指令的其他更改类命令 + + + ** 更改类指令å¯ä»¥ä½¿ç”¨åŒåˆ é™¤ç±»å‘½ä»¤æ‰€ä½¿ç”¨çš„å¯¹è±¡å‚æ•°ã€‚** + + 1. 更改类指令的工作方å¼è·Ÿåˆ é™¤ç±»å‘½ä»¤æ˜¯ä¸€è‡´çš„。æ“ä½œæ ¼å¼æ˜¯âˆ¶ + + [number] c object 或者 c [number] object + + 2. å¯¹è±¡å‚æ•°ä¹Ÿæ˜¯ä¸€æ ·çš„,比如 w 代表å•å­—/å•è¯ï¼Œ$代表行末等等。 + + 3. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 + + 4. 接ç€å°†å…‰æ ‡ç§»åŠ¨åˆ°ç¬¬ä¸€ä¸ªé”™è¯¯å¤„ã€‚ + + 5. ç„¶åŽè¾“å…¥ c$ 使得该行剩下的部分更正得åŒç¬¬äºŒè¡Œä¸€æ ·ã€‚æœ€åŽæŒ‰ 键。 + +---> 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. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三讲å°ç»“ + + + 1. è¦é‡æ–°ç½®å…¥å·²ç»åˆ é™¤çš„æ–‡æœ¬å†…容,请输入å°å†™å­—æ¯ p。该æ“作å¯ä»¥å°†å·²åˆ é™¤ + 的文本内容置于光标之åŽã€‚如果最åŽä¸€æ¬¡åˆ é™¤çš„æ˜¯ä¸€ä¸ªæ•´è¡Œï¼Œé‚£ä¹ˆè¯¥è¡Œå°†ç½® + 于当å‰å…‰æ ‡æ‰€åœ¨è¡Œçš„下一行。 + + 2. è¦æ›¿æ¢å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请输入å°å†™çš„ r å’Œè¦æ›¿æ¢æŽ‰åŽŸä½ç½®å­—符的新字 + 符å³å¯ã€‚ + + 3. 更改类命令å…è®¸æ‚¨æ”¹å˜æŒ‡å®šçš„对象,从当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®ç›´åˆ°å¯¹è±¡çš„æœ«å°¾ã€‚ + 比如输入 cw å¯ä»¥æ›¿æ¢å½“å‰å…‰æ ‡åˆ°å•è¯çš„æœ«å°¾çš„内容;输入 c$ å¯ä»¥æ›¿æ¢å½“ + å‰å…‰æ ‡åˆ°è¡Œæœ«çš„内容。 + + 4. æ›´æ”¹ç±»å‘½ä»¤çš„æ ¼å¼æ˜¯âˆ¶ + + [number] c object 或者 c [number] object + +䏋颿ˆ‘们继续学习下一讲。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四讲第一节∶定ä½åŠæ–‡ä»¶çŠ¶æ€ + + + ** 输入 CTRL-g 显示当å‰ç¼–辑文件中当å‰å…‰æ ‡æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚ + 输入 SHIFT-G 则直接跳转到文件中的æŸä¸€æŒ‡å®šè¡Œã€‚** + + æç¤ºâˆ¶åˆ‡è®°è¦å…ˆé€šè¯»æœ¬èŠ‚å†…å®¹ï¼Œä¹‹åŽæ‰å¯ä»¥æ‰§è¡Œä»¥ä¸‹æ­¥éª¤!!! + + 1. 按下 CTRL 键䏿”¾å¼€ç„¶åŽæŒ‰ g 键。然åŽå°±ä¼šçœ‹åˆ°é¡µé¢æœ€åº•部出现一个状æ€ä¿¡ + æ¯è¡Œï¼Œæ˜¾ç¤ºçš„内容是当å‰ç¼–辑的文件åå’Œæ–‡ä»¶çš„æ€»è¡Œæ•°ã€‚è¯·è®°ä½æ­¥éª¤3的行å·ã€‚ + + 2. 按下 SHIFT-G é”®å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶æœ€åŽä¸€è¡Œã€‚ + + 3. 输入您曾åœç•™çš„行å·ï¼Œç„¶åŽæŒ‰ä¸‹ SHIFT-G。这样就å¯ä»¥è¿”回到您第一次按下 + CTRL-g 时所在的行好了。注æ„âˆ¶è¾“å…¥è¡Œå·æ—¶ï¼Œè¡Œå·æ˜¯ä¸ä¼šåœ¨å±å¹•ä¸Šæ˜¾ç¤ºå‡ºæ¥ + 的。 + + 4. 如果愿æ„,您å¯ä»¥ç»§ç»­æ‰§è¡Œæ­¥éª¤1至步骤三。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四讲第二节∶æœç´¢ç±»å‘½ä»¤ + + + ** 输入 / 以åŠå°¾éšçš„字符串å¯ä»¥ç”¨ä»¥åœ¨å½“剿–‡ä»¶ä¸­æŸ¥æ‰¾è¯¥å­—符串。** + + 1. 在正常模å¼ä¸‹è¾“å…¥ / 字符。您此时会注æ„到该字符和光标都会出现在å±å¹•底 + 部,这跟 : 命令是一样的。 + + 2. 接ç€è¾“å…¥ errroor <回车>。那个errroorå°±æ˜¯æ‚¨è¦æŸ¥æ‰¾çš„字符串。 + + 3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n 键。è¦å‘ç›¸åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­— + 符串,请输入 Shift-N å³å¯ã€‚ + + 4. å¦‚æžœæ‚¨æƒ³é€†å‘æŸ¥æ‰¾å­—符串,请使用 ? 代替 / 进行。 + +---> When the search reaches the end of the file it will continue at the start. + + "errroor" is not the way to spell error; errroor is an error. + + æç¤ºâˆ¶å¦‚果查找已ç»åˆ°è¾¾æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾ä¼šè‡ªåŠ¨ä»Žæ–‡ä»¶å¤´éƒ¨ç»§ç»­æŸ¥æ‰¾ã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四讲第三节∶é…对括å·çš„æŸ¥æ‰¾ + + + ** 按 % å¯ä»¥æŸ¥æ‰¾é…å¯¹çš„æ‹¬å· )ã€]ã€}。** + + 1. æŠŠå…‰æ ‡æ”¾åœ¨æœ¬èŠ‚ä¸‹é¢æ ‡è®°æœ‰ --> 那一行中的任何一个 (ã€[ 或 { 处。 + + 2. æŽ¥ç€æŒ‰ % 字符。 + + 3. 此时光标的ä½ç½®åº”当是在é…对的括å·å¤„。 + + 4. 冿¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…对的第一个括å·å¤„。 + +---> This ( is a test line with ('s, ['s ] and {'s } in it. )) + +æç¤ºâˆ¶åœ¨ç¨‹åºè°ƒè¯•æ—¶ï¼Œè¿™ä¸ªåŠŸèƒ½ç”¨æ¥æŸ¥æ‰¾ä¸é…å¯¹çš„æ‹¬å·æ˜¯å¾ˆæœ‰ç”¨çš„。 + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四讲第四节∶修正错误的方法之一 + + + ** 输入 :s/old/new/g å¯ä»¥æ›¿æ¢ old 为 new。** + + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 + + 2. 输入 :s/thee/the <回车> 。请注æ„è¯¥å‘½ä»¤åªæ”¹å˜å…‰æ ‡æ‰€åœ¨è¡Œçš„ç¬¬ä¸€ä¸ªåŒ¹é… + 串。 + + 3. 输入 :s/thee/the/g 则是替æ¢å…¨è¡Œçš„匹é…串。 + +---> the best time to see thee flowers is in thee spring. + + 4. è¦æ›¿æ¢ä¸¤è¡Œä¹‹é—´å‡ºçŽ°çš„æ¯ä¸ªåŒ¹é…串,请输入 :#,#s/old/new/g (#,#代表的是 + 两行的行å·)。输入 :%s/old/new/g åˆ™æ˜¯æ›¿æ¢æ•´ä¸ªæ–‡ä»¶ä¸­çš„æ¯ä¸ªåŒ¹é…串。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四讲å°ç»“ + + + 1. Ctrl-g 用于显示当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚Shift-G 用于将光标跳 + 转至文件最åŽä¸€è¡Œã€‚先敲入一个行å·ç„¶åŽæŒ‰ Shift-G 则是将光标移动至该行 + å·ä»£è¡¨çš„行。 + + 2. 输入 / ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²æ˜¯åˆ™æ˜¯åœ¨å½“å‰æ‰€ç¼–辑的文档中å‘åŽæŸ¥æ‰¾è¯¥å­—符串。 + è¾“å…¥é—®å· ? ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²æ˜¯åˆ™æ˜¯åœ¨å½“å‰æ‰€ç¼–辑的文档中å‘剿Ÿ¥æ‰¾è¯¥å­— + 符串。完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹åŽæŒ‰ n 键则是é‡å¤ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查 + 找下一个字符串所在;或者按 Shift-N å‘ç›¸åæ–¹å‘查找下该字符串所在。 + + 3. 如果光标当å‰ä½ç½®æ˜¯æ‹¬å·(ã€)ã€[ã€]ã€{ã€},按 % å¯ä»¥å°†å…‰æ ‡ç§»åŠ¨åˆ°é…对的 + 括å·ä¸Šã€‚ + + 4. 在一行内替æ¢å¤´ä¸€ä¸ªå­—符串 old 为新的字符串 new,请输入 :s/old/new + åœ¨ä¸€è¡Œå†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :s/old/new/g + åœ¨ä¸¤è¡Œå†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g + åœ¨æ–‡ä»¶å†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :%s/old/new/g + è¿›è¡Œå…¨æ–‡æ›¿æ¢æ—¶è¯¢é—®ç”¨æˆ·ç¡®è®¤æ¯ä¸ªæ›¿æ¢éœ€æ·»åŠ  c 选项,请输入 :%s/old/new/gc + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲第一节∶在 VIM 内执行外部命令的方法 + + + ** 输入 :! ç„¶åŽç´§éšè‘—输入一个外部命令å¯ä»¥æ‰§è¡Œè¯¥å¤–部命令。** + + 1. 按下我们所熟悉的 : 命令设置光标到å±å¹•底部。这样就å¯ä»¥è®©æ‚¨è¾“入命令了。 + + 2. 接ç€è¾“入感å¹å· ! 这个字符,这样就å…许您执行外部的 shell 命令了。 + + 3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当å‰ç›®å½•çš„ + å†…å®¹ï¼Œå°±å¦‚åŒæ‚¨åœ¨å‘½ä»¤è¡Œæç¤ºç¬¦ä¸‹è¾“å…¥ ls 命令的结果一样。如果 !ls 没起 + 作用,您å¯ä»¥è¯•试 :!dir 看看。 + +---> æç¤ºâˆ¶ 所有的外部命令都å¯ä»¥ä»¥è¿™ç§æ–¹å¼æ‰§è¡Œã€‚ + +---> æç¤ºâˆ¶ 所有的 : 命令都必须以 <回车> 告终。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲第二节∶关于ä¿å­˜æ–‡ä»¶çš„æ›´å¤šä¿¡æ¯ + + + ** è¦å°†å¯¹æ–‡ä»¶çš„æ”¹åЍä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè¯·è¾“å…¥ :w FILENAME 。** + + 1. 输入 :!dir 或者 :!ls 获知当å‰ç›®å½•çš„å†…å®¹ã€‚æ‚¨åº”å½“å·²çŸ¥é“æœ€åŽè¿˜å¾—敲 + <回车> å§ã€‚ + + 2. 选择一个尚未存在文件å,比如 TEST 。 + + 3. 接ç€è¾“å…¥ :w TEST (此处 TEST 是您所选择的文件å。) + + 4. 该命令会以 TEST 为文件åä¿å­˜æ•´ä¸ªæ–‡ä»¶ (VIM 教程)ã€‚ä¸ºäº†ç¡®ä¿æ­£ç¡®ä¿å­˜ï¼Œ + è¯·å†æ¬¡è¾“å…¥ :!dir 查看您的目录列表内容。 + +---> 请注æ„∶如果您退出 VIM ç„¶åŽåœ¨ä»¥æ–‡ä»¶å TEST ä¸ºå‚æ•°è¿›å…¥ï¼Œé‚£ä¹ˆè¯¥æ–‡ä»¶å†… + å®¹åº”è¯¥åŒæ‚¨ä¿å­˜æ—¶çš„æ–‡ä»¶å†…容是完全一样的。 + + 5. 现在您å¯ä»¥é€šè¿‡è¾“å…¥ :!rm TEST æ¥åˆ é™¤ TEST 文件了。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲第三节∶一个具有选择性的ä¿å­˜å‘½ä»¤ + + + ** è¦ä¿å­˜æ–‡ä»¶çš„部分内容,请输入 :#,# w FILENAME ** + + 1. 冿¥æ‰§è¡Œä¸€æ¬¡ :!dir 或者 :!ls 获知当å‰ç›®å½•的内容,然åŽé€‰æ‹©ä¸€ä¸ªåˆé€‚çš„ + ä¸é‡å的文件å,比如 TEST 。 + + 2. 接ç€å°†å…‰æ ‡ç§»åŠ¨è‡³æœ¬é¡µçš„æœ€é¡¶ç«¯ï¼Œç„¶åŽæŒ‰ CTRL-g 找到该行的行å·ã€‚别忘了 + 行å·å“¦ã€‚ + + 3. æŽ¥ç€æŠŠå…‰æ ‡ç§»åŠ¨è‡³æœ¬é¡µçš„æœ€åº•ç«¯ï¼Œå†æŒ‰ä¸€æ¬¡ CTRL-g 。也别忘了这个行好哦。 + + 4. 为了åªä¿å­˜æ–‡ç« çš„æŸä¸ªéƒ¨åˆ†ï¼Œè¯·è¾“å…¥ :#,# w TEST 。这里的 #,# å°±æ˜¯ä¸Šé¢ + è¦æ±‚您记ä½çš„行å·(顶端行å·,底端行å·),而 TEST 就是选定的文件å。 + + 5. 最åŽï¼Œç”¨ :!dir ç¡®è®¤æ–‡ä»¶æ˜¯å¦æ­£ç¡®ä¿å­˜ã€‚但是这次先别删除掉。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲第四节∶æå–å’Œåˆå¹¶æ–‡ä»¶ + + + ** è¦å‘当剿–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的内容,请输入 :r FILENAME ** + + 1. 请键入 :!dir 确认您å‰é¢åˆ›å»ºçš„ TEST 文件还在。 + + 2. ç„¶åŽå°†å…‰æ ‡ç§»åŠ¨è‡³å½“å‰é¡µé¢çš„顶端。 + +特别æç¤ºâˆ¶ 执行步骤3ä¹‹åŽæ‚¨å°†çœ‹åˆ°ç¬¬äº”讲第三节,请届时å†å¾€ä¸‹ç§»åŠ¨å›žåˆ°è¿™é‡Œæ¥ã€‚ + + 3. 接ç€é€šè¿‡ :r TEST å°†å‰é¢åˆ›å»ºçš„å为 TEST 的文件æå–è¿›æ¥ã€‚ + +特别æç¤ºâˆ¶æ‚¨æ‰€æå–è¿›æ¥çš„æ–‡ä»¶å°†ä»Žå…‰æ ‡æ‰€åœ¨ä½ç½®å¤„开始置入。 + + 4. ä¸ºäº†ç¡®è®¤æ–‡ä»¶å·²ç»æå–æˆåŠŸï¼Œç§»åŠ¨å…‰æ ‡å›žåˆ°åŽŸæ¥çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有两份第 + 五讲第三节,一份是原本,å¦å¤–一份是æ¥è‡ªæ–‡ä»¶çš„副本。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲å°ç»“ + + + 1. :!command 用于执行一个外部命令 command。 + + 请看一些实际例å­âˆ¶ + :!dir - 用于显示当å‰ç›®å½•的内容。 + :!rm FILENAME - 用于删除å为 FILENAME 的文件。 + + 2. :w FILENAME å¯å°†å½“å‰ VIM 中正在编辑的文件ä¿å­˜åˆ°å为 FILENAME 的文 + 件中。 + + 3. :#,#w FILENAME å¯å°†å½“å‰ç¼–辑文件第 # 行至第 # 行的内容ä¿å­˜åˆ°æ–‡ä»¶ + FILENAME 中。 + + 4. :r FILENAME 坿å–ç£ç›˜æ–‡ä»¶ FILENAME 并将其æ’å…¥åˆ°å½“å‰æ–‡ä»¶çš„光标ä½ç½® + åŽé¢ã€‚ + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六讲第一节∶打开类命令 + + + ** 输入 o 将在光标的下方打开新的一行并进入æ’入模å¼ã€‚** + + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 + + 2. 接ç€è¾“å…¥å°å†™çš„ o 在光标 *下方* 打开新的一行并进入æ’入模å¼ã€‚ + + 3. ç„¶åŽå¤åˆ¶æ ‡è®°æœ‰ ---> 的行并按 键退出æ’入模å¼è€Œè¿›å…¥æ­£å¸¸æ¨¡å¼ã€‚ + +---> After typing o the cursor is placed on the open line in Insert mode. + + 4. 为了在光标 *上方* 打开新的一行,åªéœ€è¦è¾“入大写的 O è€Œä¸æ˜¯å°å†™çš„ o + å°±å¯ä»¥äº†ã€‚请在下行测试一下å§ã€‚当光标处在在该行上时,按 Shift-Oå¯ä»¥ + 在该行上方新开一行。 + +Open up a line above this by typing Shift-O while the cursor is on this line. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ç¬¬å…­è®²ç¬¬äºŒèŠ‚âˆ¶å…‰æ ‡åŽæ’入类命令 + + + ** 输入 a å°†å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本。 ** + + 1. 请在正常模å¼ä¸‹é€šè¿‡è¾“å…¥ $ å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行 + 的末尾。 + + 2. 接ç€è¾“å…¥å°å†™çš„ a 则å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本了。大写的 A 则å¯ä»¥ç›´æŽ¥åœ¨è¡Œ + 末æ’入文本。 + +æç¤ºâˆ¶è¾“入大写 A çš„æ“作方法å¯ä»¥åœ¨è¡Œæœ«æ’入文本,é¿å…了输入 i,光标定ä½åˆ° + 最åŽä¸€ä¸ªå­—符,输入的文本, å›žå¤æ­£å¸¸æ¨¡å¼ï¼Œç®­å¤´å³é”®ç§»åŠ¨å…‰æ ‡ä»¥åŠ + x 删除当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å­—ç¬¦ç­‰ç­‰è¯¸å¤šç¹æ‚çš„æ“作。 + + 3. æ“作之åŽç¬¬ä¸€è¡Œå°±å¯ä»¥è¡¥å……完整了。请注æ„å…‰æ ‡åŽæ’入文本与æ’å…¥æ¨¡å¼æ˜¯åŸº + æœ¬å®Œå…¨ä¸€è‡´çš„ï¼Œåªæ˜¯æ–‡æœ¬æ’入的ä½ç½®å®šä½ç¨æœ‰ä¸åŒç½¢äº†ã€‚ + +---> This line will allow you to practice +---> This line will allow you to practice appending text to the end of a line. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六讲第三节∶å¦å¤–一个置æ¢ç±»å‘½ä»¤çš„版本 + + + ** 输入大写的 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. 请注æ„∶如果您按 é€€å‡ºç½®æ¢æ¨¡å¼å›žå¤æ­£å¸¸æ¨¡å¼ï¼Œå°šæœªæ›¿æ¢çš„æ–‡æœ¬å°†ä» + ç„¶ä¿æŒåŽŸçŠ¶ã€‚ + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六讲第四节∶设置类命令的选项 + + + ** 设置å¯ä½¿æŸ¥æ‰¾æˆ–者替æ¢å¯å¿½ç•¥å¤§å°å†™çš„选项 ** + + + 1. è¦æŸ¥æ‰¾å•è¯ ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¾“å…¥ /ignore 。è¦é‡å¤æŸ¥æ‰¾è¯¥è¯ï¼Œå¯ä»¥ + é‡å¤æŒ‰ n 键。 + + 2. ç„¶åŽè®¾ç½® ic 选项(ic就是英文忽略大å°å†™Ignore Case的首字æ¯ç¼©å†™è¯)ï¼Œå³ + 输入∶ + :set ic + + 3. 现在å¯ä»¥é€šè¿‡é”®å…¥ n 键冿¬¡æŸ¥æ‰¾å•è¯ ignore。é‡å¤æŸ¥æ‰¾å¯ä»¥é‡å¤é”®å…¥ n 键。 + + 4. ç„¶åŽè®¾ç½® hlsearch å’Œ incsearch 这两个选项,输入以下内容∶ + :set hls is + + 5. 现在å¯ä»¥å†æ¬¡è¾“入查找命令,看看会有什么效果∶ + /ignore + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六讲å°ç»“ + + + 1. 输入å°å†™çš„ o å¯ä»¥åœ¨å…‰æ ‡ä¸‹æ–¹æ‰“开新的一行并将光标置于新开的行首,进入 + æ’入模å¼ã€‚ + 输入大写的 O å¯ä»¥åœ¨å…‰æ ‡ä¸Šæ–¹æ‰“开新的一行并将光标置于新开的行首,进入 + æ’入模å¼ã€‚ + + 2. 输入å°å†™çš„ a å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨ä½ç½®ä¹‹åŽæ’入文本。 + 输入大写的 A å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨è¡Œçš„è¡Œæœ«ä¹‹åŽæ’入文本。 + + 3. 输入大写的 R å°†è¿›å…¥æ›¿æ¢æ¨¡å¼ï¼Œç›´è‡³æŒ‰ é”®é€€å‡ºæ›¿æ¢æ¨¡å¼è€Œè¿›å…¥æ­£å¸¸ + 模å¼ã€‚ + + 4. 输入 :set xxx å¯ä»¥è®¾ç½® xxx 选项。 + + + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第七讲∶在线帮助命令 + + ** 使用在线帮助系统 ** + + Vim 拥有一个细致全é¢çš„在线帮助系统。è¦å¯åŠ¨è¯¥å¸®åŠ©ç³»ç»Ÿï¼Œè¯·é€‰æ‹©å¦‚ä¸‹ä¸‰ç§æ–¹ + 法之一∶ + - 按下 é”® (如果键盘上有的è¯) + - 按下 é”® (如果键盘上有的è¯) + - 输入 :help <回车> + + 输入 :q <回车> å¯ä»¥å…³é—­å¸®åŠ©çª—å£ã€‚ + + æä¾›ä¸€ä¸ªæ­£ç¡®çš„傿•°ç»™":help"命令,您å¯ä»¥æ‰¾åˆ°å…³äºŽè¯¥ä¸»é¢˜çš„帮助。请试验以 + 䏋傿•°(å¯åˆ«å¿˜äº†æŒ‰å›žè½¦é”®å“¦ã€‚:)∶ + + :help w <回车> + :help c_ + :help insert-index <回车> + :help user-manual <回车> + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第八讲∶创建一个å¯åŠ¨è„šæœ¬ + + ** å¯ç”¨vim的功能 ** + + Vimçš„åŠŸèƒ½ç‰¹æ€§è¦æ¯”viå¤šå¾—å¤šï¼Œä½†å¤§éƒ¨åˆ†åŠŸèƒ½éƒ½æ²¡æœ‰ç¼ºçœæ¿€æ´»ã€‚为了å¯åŠ¨æ›´å¤šçš„ + 功能,您得创建一个vimrc文件。 + + 1. 开始编辑vimrc文件,这å–决于您所使用的æ“作系统∶ + + :edit ~/.vimrc 这是Unix系统所使用的命令 + :edit $VIM/_vimrc 这是Windows系统所使用的命令 + + 2. 接ç€å¯¼å…¥vimrc范例文件∶ + + :read $VIMRUNTIME/vimrc_example.vim + + 3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ä¸ºâˆ¶ + + :write + + 在下次您å¯åЍvim的时候,编辑器就会有了语法高亮的功能。您å¯ä»¥ç»§ç»­æŠŠæ‚¨å–œ + 欢的其它功能设置添加到这个vimrc文件中。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + vim 教程到此结æŸã€‚æœ¬æ•™ç¨‹åªæ˜¯ä¸ºäº†ç®€æ˜Žåœ°ä»‹ç»ä¸€ä¸‹vim编辑器,但已足以让您 + 很容易学会使用本编辑器了。毋庸质疑,vim还有很多很多的命令,本教程所介 + ç»çš„还差得远著呢。所以您è¦ç²¾é€šçš„è¯ï¼Œè¿˜æœ›ç»§ç»­åŠªåŠ›å“¦ã€‚ä¸‹ä¸€æ­¥æ‚¨å¯ä»¥é˜…读 + vim手册,使用的命令是∶ + :help user-manual + + 为了更进一步的å‚考和学习,以下这本书值得推è∶ + + Vim - Vi Improved - 作者∶Steve Oualline + 出版社∶New Riders + + 这是第一本完全讲解vim的书ç±ã€‚对于åˆå­¦è€…ç‰¹åˆ«æœ‰ç”¨ã€‚å…¶ä¸­è¿˜åŒ…å«æœ‰å¤§é‡å®žä¾‹ + 和图示。欲知详情,请访问 http://iccf-holland.org/click5.html + + 以下这本书比较è€äº†è€Œä¸”å†…å®¹ä¸»è¦æ˜¯viè€Œä¸æ˜¯vim,但是也值得推è∶ + + Learning the Vi Editor - 作者∶Linda Lamb + 出版社∶O'Reilly & Associates Inc. + + 这是一本ä¸é”™çš„书,通过它您几乎能够了解到全部vi能够åšåˆ°çš„事情。此书的第 + 六个版本也包å«äº†ä¸€äº›å…³äºŽvim的信æ¯ã€‚ + + 本教程是由æ¥è‡ªCalorado School of Mineseçš„Michael C. Pierceã€Robert K. + Ware 所编写的,其中æ¥è‡ªColorado State Universityçš„Charles Smithæä¾›äº† + 很多创æ„ã€‚ç¼–è€…é€šä¿¡åœ°å€æ˜¯âˆ¶ + + bware@mines.colorado.edu + + 本教程已由Bram Moolenaar专为vim进行修订。 + + + + 译制者附言∶ + =========== + ç®€ä½“ä¸­æ–‡æ•™ç¨‹ç¿»è¯‘ç‰ˆä¹‹è¯‘åˆ¶è€…ä¸ºæ¢æ˜Œæ³° ,还有 + å¦å¤–一个è”系地å€âˆ¶linuxrat@gnuchina.org。 + + ç¹ä½“中文教程是从简体中文教程翻译版使用 Debian GNU/Linux ä¸­æ–‡é¡¹ç›®å° + 组的于广辉先生编写的中文汉字转ç å™¨ autoconvert 转æ¢è€Œæˆçš„,并对转 + æ¢çš„结果åšäº†ä¸€äº›ç»†èŠ‚çš„æ”¹åŠ¨ã€‚ + + å˜æ›´è®°å½•∶ + ========= + 2002å¹´08月30æ—¥ æ¢æ˜Œæ³° + 感谢 RMS@SMTH 的指正,将多处错误修正。 + + 2002å¹´04月22æ—¥ æ¢æ˜Œæ³° + 感谢 xuandong@sh163.net 的指正,将两处错别字修正。 + + 2002å¹´03月18æ—¥ æ¢æ˜Œæ³° + æ ¹æ®Bram Molenaar先生在2002å¹´03月16日的æ¥ä¿¡è¦æ±‚,将vimtutor1.4中译 + 版å‡çº§åˆ°vimtutor1.5。 + + 2001å¹´11月15æ—¥ æ¢æ˜Œæ³° + å°†vimtutor1.4中译版æäº¤ç»™Bram Molenaarå’ŒSven Guckes。 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor.zh_tw.utf-8 b/runtime/tutor/tutor.zh_tw.utf-8 new file mode 100644 index 0000000000..21d702051d --- /dev/null +++ b/runtime/tutor/tutor.zh_tw.utf-8 @@ -0,0 +1,852 @@ +=============================================================================== += æ­¡ 迎 é–± 讀 《 V I M æ•™ 程 》 ── 版本 1.5 = +=============================================================================== + vim 是一個具有很多命令的功能éžå¸¸å¼·å¤§çš„編輯器。é™äºŽç¯‡å¹…,在本教程當中 + ä¸å°±è©³ç´°ä»‹ç´¹äº†ã€‚本教程的設計目標是講述一些必è¦çš„基本命令,而掌æ¡å¥½é€™ + 些命令,您就能夠很容易將vim當作一個通用的è¬èƒ½ç·¨è¼¯å™¨ä¾†ä½¿ç”¨äº†ã€‚ + + å®Œæˆæœ¬æ•™ç¨‹çš„內容大約需è¦25-30分é˜ï¼Œå–決于您訓練的時間。 + + æ¯ä¸€ç¯€çš„命令æ“作將會更改本文。推薦您復制本文的一個副本,然後在副本上 + 進行訓練(如果您是通éŽ"vimtutor"來啟動教程的,那麼本文就已經是副本了)。 + + 切記一點︰本教程的設計æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­é€²è¡Œå­¸ç¿’的。也就是說,您需è¦é€šéŽ + åŸ·è¡Œå‘½ä»¤ä¾†å­¸ç¿’å®ƒå€‘æœ¬èº«çš„æ­£ç¢ºç”¨æ³•ã€‚å¦‚æžœæ‚¨åªæ˜¯é–±è®€è€Œä¸æ“作,那麼您å¯èƒ½ + 會很快éºå¿˜é€™äº›å‘½ä»¤çš„ï¼ + + 好了,ç¾åœ¨è«‹ç¢ºå®šæ‚¨çš„Shift-Lock(大å°å¯«éŽ–å®šéµ)還沒有按下,然後按éµç›¤ä¸Š + 的字æ¯éµ j 足夠多的次數來移動光標,直到第一節的內容能夠完全充滿å±å¹•。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一講第一節︰移動光標 + + + ※※ è¦ç§»å‹•光標,請ä¾ç…§èªªæ˜Žåˆ†åˆ¥æŒ‰ä¸‹ hã€jã€kã€l éµã€‚ ※※ + + ^ + k æç¤ºï¸° h çš„éµä½äºŽå·¦é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘左移動。 + < h l > l çš„éµä½äºŽå³é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘å³ç§»å‹•。 + j j éµçœ‹èµ·ä¾†å¾ˆè±¡ä¸€æ”¯å°–ç«¯æ–¹å‘æœä¸‹çš„箭頭。 + v + + 1. 請隨æ„在å±å¹•內移動光標,直至您覺得舒æœç‚ºæ­¢ã€‚ + + 2. 按下下行éµ(j),直到出ç¾å…‰æ¨™é‡å¾©ä¸‹è¡Œã€‚ + +---> ç¾åœ¨æ‚¨æ‡‰è©²å·²ç¶“學會如何移動到下一講å§ã€‚ + + 3. ç¾åœ¨è«‹ä½¿ç”¨ä¸‹è¡Œéµï¼Œå°‡å…‰æ¨™ç§»å‹•到第二講。 + +æç¤ºï¸°å¦‚æžœæ‚¨ä¸æ•¢ç¢ºå®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè«‹æŒ‰ä¸‹éµå›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚ + ç„¶å¾Œå†æ¬¡å¾žéµç›¤è¼¸å…¥æ‚¨æƒ³è¦çš„命令。 + +æç¤ºï¸°å…‰æ¨™éµæ‡‰ç•¶ä¹Ÿèƒ½æ­£å¸¸å·¥ä½œçš„。但是使用hjkléµï¼Œåœ¨ç¿’慣之後您就能夠快速 + 地在å±å¹•內四處移動光標了。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一講第二節︰VIM的進入和退出 + + + !! 特別æç¤ºï¸°æ•¬è«‹é–±è®€å®Œæ•´æœ¬ä¸€ç¯€çš„內容,然後æ‰èƒ½åŸ·è¡Œä»¥ä¸‹æ‰€è¬›è§£çš„命令。 + + 1. 請按éµ(é€™æ˜¯ç‚ºäº†ç¢ºä¿æ‚¨è™•在正常模å¼)。 + + 2. 然後輸入︰ :q! <回車> + +---> 這種方å¼çš„é€€å‡ºç·¨è¼¯å™¨çµ•ä¸æœƒä¿å­˜æ‚¨é€²å…¥ç·¨è¼¯å™¨ä»¥ä¾†æ‰€åšçš„æ”¹å‹•。 + 如果您想ä¿å­˜æ›´æ”¹å†é€€å‡ºï¼Œè«‹è¼¸å…¥ï¸° + :wq <回車> + + 3. 如果您看到了命令行æç¤ºç¬¦ï¼Œè«‹è¼¸å…¥èƒ½å¤ å¸¶æ‚¨å›žåˆ°æœ¬æ•™ç¨‹çš„命令,那就是︰ + + vimtutor <回車> + + 通常情æ³ä¸‹æ‚¨ä¹Ÿå¯ä»¥ç”¨é€™ç¨®æ–¹å¼ï¸° + + vim tutor <回車> + +---> 這裡的 'vim' 表示進入vim編輯器,而 'tutor'則是您準備è¦ç·¨è¼¯çš„æ–‡ä»¶ã€‚ + + 4. 如果您自信已經牢牢記ä½äº†é€™äº›æ­¥é©Ÿçš„話,請從步驟1執行到步驟3退出,然 + å¾Œå†æ¬¡é€²å…¥ç·¨è¼¯å™¨ã€‚接著將光標移動到第一講第三節來繼續我們的教程講解。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一講第三節︰文本編輯之刪除 + + + ** 在正常(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x éµä¾†åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符。** + + 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 + + 2. 為了修正輸入錯誤,請將光標移至準備刪除的字符的ä½ç½®è™•。 + + 3. 然後按下 x éµå°‡éŒ¯èª¤å­—符刪除掉。 + + 4. é‡å¾©æ­¥é©Ÿ2到步驟4,直到å¥å­ä¿®æ­£ç‚ºæ­¢ã€‚ + +---> The ccow jumpedd ovverr thhe mooon. + + 5. 好了,該行已經修正了,下一節內容是第一講第四節。 + +特別æç¤ºï¸°åœ¨æ‚¨ç€è¦½æœ¬æ•™ç¨‹æ™‚,ä¸è¦å¼·è¡Œè¨˜æ†¶ã€‚記ä½ä¸€é»žï¸°åœ¨ä½¿ç”¨ä¸­å­¸ç¿’。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一講第四節︰文本編輯之æ’å…¥ + + + ** 在正常模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i éµä¾†æ’入文本。** + + 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 + + 2. 為了使得第一行內容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè«‹å°‡å…‰æ¨™ç§»è‡³æ–‡æœ¬ç¬¬ä¸€å€‹å­—符準備æ’å…¥ + çš„ä½ç½®ã€‚ + + 3. 然後按下 i éµï¼ŒæŽ¥è‘—輸入必è¦çš„æ–‡æœ¬å­—符。 + + 4. 所有文本都修正完畢,請按下 éµè¿”回正常模å¼ã€‚ + é‡å¾©æ­¥é©Ÿ2至步驟4以便修正å¥å­ã€‚ + +---> There is text misng this . +---> There is some text missing from this line. + + 5. å¦‚æžœæ‚¨å°æ–‡æœ¬æ’å…¥æ“作已經很滿æ„,請接著閱讀下é¢çš„å°çµã€‚ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一講å°çµ + + + 1. 光標在å±å¹•文本中的移動既å¯ä»¥ç”¨ç®­é ­éµï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯éµã€‚ + h (左移) j (下行) k (上行) l (å³ç§») + + 2. 欲進入vim編輯器(從命令行æç¤ºç¬¦),請輸入︰vim 文件å <回車> + + 3. 欲退出vim編輯器,請輸入以下命令放棄所有修改︰ + + :q! <回車> + + 或者輸入以下命令ä¿å­˜æ‰€æœ‰ä¿®æ”¹ï¸° + + :wq <回車> + + 4. 在正常模å¼ä¸‹åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請按︰ x + + 5. 在正常模å¼ä¸‹è¦åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®é–‹å§‹æ’入文本,請按︰ + + i è¼¸å…¥å¿…è¦æ–‡æœ¬ + +特別æç¤ºï¸°æŒ‰ä¸‹ 鵿œƒå¸¶æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–è€…å–æ¶ˆä¸€å€‹ä¸æœŸæœ›æˆ–è€…éƒ¨åˆ†å®Œæˆ +的命令。 + +å¥½äº†ï¼Œç¬¬ä¸€è¬›åˆ°æ­¤çµæŸã€‚ä¸‹é¢æŽ¥ä¸‹ä¾†ç¹¼çºŒç¬¬äºŒè¬›çš„å…§å®¹ã€‚ + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講第一節︰刪除類命令 + + + ** 輸入 dw å¯ä»¥å¾žå…‰æ¨™è™•刪除至一個單字/單詞的末尾。** + + 1. 請按下 éµç¢ºä¿æ‚¨è™•于正常模å¼ã€‚ + + 2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 + + 3. 請將光標移至準備è¦åˆªé™¤çš„單詞的開始。 + + 4. 接著輸入 dw 刪除掉該單詞。 + + 特別æç¤ºï¸°æ‚¨æ‰€è¼¸å…¥çš„ dw æœƒåœ¨æ‚¨è¼¸å…¥çš„åŒæ™‚出ç¾åœ¨å±å¹•的最後一行。如果您輸 + 入有誤,請按下 éµå–æ¶ˆï¼Œç„¶å¾Œé‡æ–°å†ä¾†ã€‚ + +---> There are a some words fun that don't belong paper in this sentence. + + 5. é‡å¾©æ­¥é©Ÿ3至步驟4,直至å¥å­ä¿®æ­£å®Œç•¢ã€‚接著繼續第二講第二節內容。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講第二節︰其他刪除類命令 + + + ** 輸入 d$ 從當å‰å…‰æ¨™åˆªé™¤åˆ°è¡Œæœ«ã€‚** + + 1. 請按下 éµç¢ºä¿æ‚¨è™•于正常模å¼ã€‚ + + 2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 + + 3. 請將光標移動到該行的尾部(也就是在第一個點號‘.’後é¢)。 + + 4. 然後輸入 d$ 從光標處刪至當å‰è¡Œå°¾éƒ¨ã€‚ + +---> Somebody typed the end of this line twice. end of this line twice. + + + 5. è«‹ç¹¼çºŒå­¸ç¿’ç¬¬äºŒè¬›ç¬¬ä¸‰ç¯€å°±çŸ¥é“æ˜¯æ€Žéº¼å›žäº‹äº†ã€‚ + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講第三節︰關于命令和å°è±¡ + + + 刪除命令 d 的格å¼å¦‚下︰ + + [number] d object 或者 d [number] object + + å…¶æ„如下︰ + number - 代表執行命令的次數(å¯é¸é …,缺çœè¨­ç½®ç‚º 1 )。 + d - 代表刪除。 + object - ä»£è¡¨å‘½ä»¤æ‰€è¦æ“作的å°è±¡(䏋颿œ‰ç›¸é—œä»‹ç´¹)。 + + 一個簡短的å°è±¡åˆ—表︰ + w - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,包括空格。 + e - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,但是 *ä¸* 包括空格。 + $ - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°ç•¶å‰è¡Œæœ«ã€‚ + +特別æç¤ºï¸° + å°äºŽå‹‡äºŽæŽ¢ç´¢è€…,請在正常模å¼ä¸‹é¢åƒ…按代表相應å°è±¡çš„éµè€Œä¸ä½¿ç”¨å‘½ä»¤ï¼Œå‰‡ + 將看到光標的移動正如上é¢çš„å°è±¡åˆ—表所代表的一樣。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講第四節︰å°è±¡å‘½ä»¤çš„ç‰¹æ®Šæƒ…æ³ + + + ** 輸入 dd å¯ä»¥åˆªé™¤æ•´ä¸€å€‹ç•¶å‰è¡Œã€‚ ** + + 鑒于整行刪除的高頻度,VIM 的設計者決定è¦ç°¡åŒ–整行刪除,僅需è¦åœ¨åŒä¸€è¡Œä¸Š + 擊打兩次 d å°±å¯ä»¥åˆªé™¤æŽ‰å…‰æ¨™æ‰€åœ¨çš„æ•´è¡Œäº†ã€‚ + + 1. 請將光標移動到本節中下é¢çš„çŸ­å¥æ®µè½ä¸­çš„第二行。 + 2. 輸入 dd 刪除該行。 + 3. 然後移動到第四行。 + 4. 接著輸入 2dd (還記得å‰é¢è¬›éŽçš„ number-command-object 嗎?) 刪除兩行。 + + 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. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講第五節︰撤消類命令 + + + ** 輸入 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. 這些都是éžå¸¸æœ‰ç”¨çš„å‘½ä»¤ã€‚ä¸‹é¢æ˜¯ç¬¬äºŒè¬›çš„å°çµäº†ã€‚ + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二講å°çµ + + + 1. 欲從當å‰å…‰æ¨™åˆªé™¤è‡³å–®å­—/單詞末尾,請輸入︰dw + + 2. 欲從當å‰å…‰æ¨™åˆªé™¤è‡³ç•¶å‰è¡Œæœ«å°¾ï¼Œè«‹è¼¸å…¥ï¸°d$ + + 3. 欲刪除整行,請輸入︰dd + + 4. 在正常模å¼ä¸‹ä¸€å€‹å‘½ä»¤çš„æ ¼å¼æ˜¯ï¸° + + [number] command object 或者 command [number] object + å…¶æ„æ˜¯ï¸° + number - 代表的是命令執行的次數 + command - 代表è¦åšçš„事情,比如 d 代表刪除 + object - ä»£è¡¨è¦æ“作的å°è±¡ï¼Œæ¯”如 w 代表單字/單詞,$ 代表到行末等等。 + $ (to the end of line), etc. + + 5. 欲撤消以å‰çš„æ“ä½œï¼Œè«‹è¼¸å…¥ï¸°u (å°å¯«çš„u) + 欲撤消在一行中所åšçš„æ”¹å‹•,請輸入︰U (大寫的U) + 欲撤消以å‰çš„æ’¤æ¶ˆå‘½ä»¤ï¼Œæ¢å¾©ä»¥å‰çš„æ“ä½œçµæžœï¼Œè«‹è¼¸å…¥ï¸°CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三講第一節︰置入類命令 + + + ** 輸入 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, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三講第二節︰替æ›é¡žå‘½ä»¤ + + + ** 輸入 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. 然後我們繼續學校第三講第三節。 + +特別æç¤ºï¸°åˆ‡è¨˜æ‚¨è¦åœ¨ä½¿ç”¨ä¸­å­¸ç¿’ï¼Œè€Œä¸æ˜¯åœ¨è¨˜æ†¶ä¸­å­¸ç¿’。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三講第三節︰更改類命令 + + + ** è¦æ”¹è®Šä¸€å€‹å–®å­—/單詞的部分或者全部,請輸入 cw ** + + 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 + + 2. 接著把光標放在單詞 lubw çš„å­—æ¯ u çš„ä½ç½®é‚£è£¡ã€‚ + + 3. 然後輸入 cw å°±å¯ä»¥ä¿®æ­£è©²å–®è©žäº†(在本例這裡是輸入 ine 。) + + 4. 最後按 éµï¼Œç„¶å¾Œå…‰æ¨™å®šä½åˆ°ä¸‹ä¸€å€‹éŒ¯èª¤ç¬¬ä¸€å€‹æº–備更改的字æ¯è™•。 + + 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 命令ä¸åƒ…僅是替æ›äº†ä¸€å€‹å–®è©žï¼Œä¹Ÿè®“您進入文本æ’入狀態了。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三講第四節︰使用c指令的其他更改類命令 + + + ** 更改類指令å¯ä»¥ä½¿ç”¨åŒåˆªé™¤é¡žå‘½ä»¤æ‰€ä½¿ç”¨çš„å°è±¡åƒæ•¸ã€‚** + + 1. 更改類指令的工作方å¼è·Ÿåˆªé™¤é¡žå‘½ä»¤æ˜¯ä¸€è‡´çš„。æ“ä½œæ ¼å¼æ˜¯ï¸° + + [number] c object 或者 c [number] object + + 2. å°è±¡åƒæ•¸ä¹Ÿæ˜¯ä¸€æ¨£çš„,比如 w 代表單字/單詞,$代表行末等等。 + + 3. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 + + 4. 接著將光標移動到第一個錯誤處。 + + 5. 然後輸入 c$ 使得該行剩下的部分更正得åŒç¬¬äºŒè¡Œä¸€æ¨£ã€‚最後按 éµã€‚ + +---> 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. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第三講å°çµ + + + 1. è¦é‡æ–°ç½®å…¥å·²ç¶“刪除的文本內容,請輸入å°å¯«å­—æ¯ p。該æ“作å¯ä»¥å°‡å·²åˆªé™¤ + 的文本內容置于光標之後。如果最後一次刪除的是一個整行,那麼該行將置 + 于當å‰å…‰æ¨™æ‰€åœ¨è¡Œçš„下一行。 + + 2. è¦æ›¿æ›å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請輸入å°å¯«çš„ r å’Œè¦æ›¿æ›æŽ‰åŽŸä½ç½®å­—符的新字 + 符å³å¯ã€‚ + + 3. 更改類命令å…許您改變指定的å°è±¡ï¼Œå¾žç•¶å‰å…‰æ¨™æ‰€åœ¨ä½ç½®ç›´åˆ°å°è±¡çš„æœ«å°¾ã€‚ + 比如輸入 cw å¯ä»¥æ›¿æ›ç•¶å‰å…‰æ¨™åˆ°å–®è©žçš„æœ«å°¾çš„內容;輸入 c$ å¯ä»¥æ›¿æ›ç•¶ + å‰å…‰æ¨™åˆ°è¡Œæœ«çš„內容。 + + 4. æ›´æ”¹é¡žå‘½ä»¤çš„æ ¼å¼æ˜¯ï¸° + + [number] c object 或者 c [number] object + +䏋颿ˆ‘們繼續學習下一講。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四講第一節︰定ä½åŠæ–‡ä»¶ç‹€æ…‹ + + + ** 輸入 CTRL-g 顯示當å‰ç·¨è¼¯æ–‡ä»¶ä¸­ç•¶å‰å…‰æ¨™æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚ + 輸入 SHIFT-G 則直接跳轉到文件中的æŸä¸€æŒ‡å®šè¡Œã€‚** + + æç¤ºï¸°åˆ‡è¨˜è¦å…ˆé€šè®€æœ¬ç¯€å…§å®¹ï¼Œä¹‹å¾Œæ‰å¯ä»¥åŸ·è¡Œä»¥ä¸‹æ­¥é©Ÿ!!! + + 1. 按下 CTRL éµä¸æ”¾é–‹ç„¶å¾ŒæŒ‰ g éµã€‚然後就會看到é é¢æœ€åº•部出ç¾ä¸€å€‹ç‹€æ…‹ä¿¡ + æ¯è¡Œï¼Œé¡¯ç¤ºçš„內容是當å‰ç·¨è¼¯çš„æ–‡ä»¶åå’Œæ–‡ä»¶çš„ç¸½è¡Œæ•¸ã€‚è«‹è¨˜ä½æ­¥é©Ÿ3的行號。 + + 2. 按下 SHIFT-G éµå¯ä»¥ä½¿å¾—ç•¶å‰å…‰æ¨™ç›´æŽ¥è·³è½‰åˆ°æ–‡ä»¶æœ€å¾Œä¸€è¡Œã€‚ + + 3. 輸入您曾åœç•™çš„行號,然後按下 SHIFT-G。這樣就å¯ä»¥è¿”回到您第一次按下 + CTRL-g 時所在的行好了。注æ„ï¸°è¼¸å…¥è¡Œè™Ÿæ™‚ï¼Œè¡Œè™Ÿæ˜¯ä¸æœƒåœ¨å±å¹•上顯示出來 + 的。 + + 4. 如果願æ„,您å¯ä»¥ç¹¼çºŒåŸ·è¡Œæ­¥é©Ÿ1至步驟三。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四講第二節︰æœç´¢é¡žå‘½ä»¤ + + + ** 輸入 / 以åŠå°¾éš¨çš„字符串å¯ä»¥ç”¨ä»¥åœ¨ç•¶å‰æ–‡ä»¶ä¸­æŸ¥æ‰¾è©²å­—符串。** + + 1. 在正常模å¼ä¸‹è¼¸å…¥ / 字符。您此時會注æ„到該字符和光標都會出ç¾åœ¨å±å¹•底 + 部,這跟 : 命令是一樣的。 + + 2. 接著輸入 errroor <回車>。那個errroorå°±æ˜¯æ‚¨è¦æŸ¥æ‰¾çš„字符串。 + + 3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n éµã€‚è¦å‘ç›¸åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­— + 符串,請輸入 Shift-N å³å¯ã€‚ + + 4. å¦‚æžœæ‚¨æƒ³é€†å‘æŸ¥æ‰¾å­—符串,請使用 ? 代替 / 進行。 + +---> When the search reaches the end of the file it will continue at the start. + + "errroor" is not the way to spell error; errroor is an error. + + æç¤ºï¸°å¦‚æžœæŸ¥æ‰¾å·²ç¶“åˆ°é”æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾æœƒè‡ªå‹•從文件頭部繼續查找。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四講第三節︰é…å°æ‹¬è™Ÿçš„æŸ¥æ‰¾ + + + ** 按 % å¯ä»¥æŸ¥æ‰¾é…å°çš„æ‹¬è™Ÿ )ã€]ã€}。** + + 1. æŠŠå…‰æ¨™æ”¾åœ¨æœ¬ç¯€ä¸‹é¢æ¨™è¨˜æœ‰ --> 那一行中的任何一個 (ã€[ 或 { 處。 + + 2. 接著按 % 字符。 + + 3. 此時光標的ä½ç½®æ‡‰ç•¶æ˜¯åœ¨é…å°çš„æ‹¬è™Ÿè™•。 + + 4. 冿¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…å°çš„第一個括號處。 + +---> This ( is a test line with ('s, ['s ] and {'s } in it. )) + +æç¤ºï¸°åœ¨ç¨‹åºèª¿è©¦æ™‚,這個功能用來查找ä¸é…å°çš„æ‹¬è™Ÿæ˜¯å¾ˆæœ‰ç”¨çš„。 + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四講第四節︰修正錯誤的方法之一 + + + ** 輸入 :s/old/new/g å¯ä»¥æ›¿æ› old 為 new。** + + 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 + + 2. 輸入 :s/thee/the <回車> 。請注æ„è©²å‘½ä»¤åªæ”¹è®Šå…‰æ¨™æ‰€åœ¨è¡Œçš„ç¬¬ä¸€å€‹åŒ¹é… + 串。 + + 3. 輸入 :s/thee/the/g 則是替æ›å…¨è¡Œçš„匹é…串。 + +---> the best time to see thee flowers is in thee spring. + + 4. è¦æ›¿æ›å…©è¡Œä¹‹é–“出ç¾çš„æ¯å€‹åŒ¹é…串,請輸入 :#,#s/old/new/g (#,#代表的是 + 兩行的行號)。輸入 :%s/old/new/g å‰‡æ˜¯æ›¿æ›æ•´å€‹æ–‡ä»¶ä¸­çš„æ¯å€‹åŒ¹é…串。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第四講å°çµ + + + 1. Ctrl-g 用于顯示當å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚Shift-G 用于將光標跳 + 轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將光標移動至該行 + 號代表的行。 + + 2. 輸入 / ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—ç¬¦ä¸²æ˜¯å‰‡æ˜¯åœ¨ç•¶å‰æ‰€ç·¨è¼¯çš„æ–‡æª”中å‘後查找該字符串。 + 輸入å•號 ? ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—ç¬¦ä¸²æ˜¯å‰‡æ˜¯åœ¨ç•¶å‰æ‰€ç·¨è¼¯çš„æ–‡æª”中å‘剿Ÿ¥æ‰¾è©²å­— + 符串。完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹å¾ŒæŒ‰ n éµå‰‡æ˜¯é‡å¾©ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查 + 找下一個字符串所在;或者按 Shift-N å‘ç›¸åæ–¹å‘查找下該字符串所在。 + + 3. 如果光標當å‰ä½ç½®æ˜¯æ‹¬è™Ÿ(ã€)ã€[ã€]ã€{ã€},按 % å¯ä»¥å°‡å…‰æ¨™ç§»å‹•到é…å°çš„ + 括號上。 + + 4. 在一行內替æ›é ­ä¸€å€‹å­—符串 old 為新的字符串 new,請輸入 :s/old/new + åœ¨ä¸€è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :s/old/new/g + åœ¨å…©è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :#,#s/old/new/g + åœ¨æ–‡ä»¶å…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :%s/old/new/g + é€²è¡Œå…¨æ–‡æ›¿æ›æ™‚è©¢å•ç”¨æˆ¶ç¢ºèªæ¯å€‹æ›¿æ›éœ€æ·»åŠ  c é¸é …,請輸入 :%s/old/new/gc + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五講第一節︰在 VIM 內執行外部命令的方法 + + + ** 輸入 :! 然後緊隨著輸入一個外部命令å¯ä»¥åŸ·è¡Œè©²å¤–部命令。** + + 1. 按下我們所熟悉的 : 命令設置光標到å±å¹•底部。這樣就å¯ä»¥è®“您輸入命令了。 + + 2. 接著輸入感嘆號 ! 這個字符,這樣就å…許您執行外部的 shell 命令了。 + + 3. 我們以 ls 命令為例。輸入 !ls <回車> 。該命令就會列舉出您當å‰ç›®éŒ„çš„ + å…§å®¹ï¼Œå°±å¦‚åŒæ‚¨åœ¨å‘½ä»¤è¡Œæç¤ºç¬¦ä¸‹è¼¸å…¥ ls å‘½ä»¤çš„çµæžœä¸€æ¨£ã€‚如果 !ls æ²’èµ· + 作用,您å¯ä»¥è©¦è©¦ :!dir 看看。 + +---> æç¤ºï¸° 所有的外部命令都å¯ä»¥ä»¥é€™ç¨®æ–¹å¼åŸ·è¡Œã€‚ + +---> æç¤ºï¸° 所有的 : 命令都必須以 <回車> 告終。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五講第二節︰關于ä¿å­˜æ–‡ä»¶çš„æ›´å¤šä¿¡æ¯ + + + ** è¦å°‡å°æ–‡ä»¶çš„æ”¹å‹•ä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè«‹è¼¸å…¥ :w FILENAME ** + + 1. 輸入 :!dir 或者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„çš„å…§å®¹ã€‚æ‚¨æ‡‰ç•¶å·²çŸ¥é“æœ€å¾Œé‚„得敲 + <回車> å§ã€‚ + + 2. 鏿“‡ä¸€å€‹å°šæœªå­˜åœ¨æ–‡ä»¶å,比如 TEST 。 + + 3. 接著輸入 :w TEST (此處 TEST æ˜¯æ‚¨æ‰€é¸æ“‡çš„æ–‡ä»¶å。) + + 4. 該命令會以 TEST 為文件åä¿å­˜æ•´å€‹æ–‡ä»¶ (VIM 教程)ã€‚ç‚ºäº†ç¢ºä¿æ­£ç¢ºä¿å­˜ï¼Œ + è«‹å†æ¬¡è¼¸å…¥ :!dir 查看您的目錄列表內容。 + +---> 請注æ„︰如果您退出 VIM 然後在以文件å TEST ç‚ºåƒæ•¸é€²å…¥ï¼Œé‚£éº¼è©²æ–‡ä»¶å…§ + å®¹æ‡‰è©²åŒæ‚¨ä¿å­˜æ™‚的文件內容是完全一樣的。 + + 5. ç¾åœ¨æ‚¨å¯ä»¥é€šéŽè¼¸å…¥ :!rm TEST 來刪除 TEST 文件了。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ç¬¬äº”è¬›ç¬¬ä¸‰ç¯€ï¸°ä¸€å€‹å…·æœ‰é¸æ“‡æ€§çš„ä¿å­˜å‘½ä»¤ + + + ** è¦ä¿å­˜æ–‡ä»¶çš„部分內容,請輸入 :#,# w FILENAME ** + + 1. å†ä¾†åŸ·è¡Œä¸€æ¬¡ :!dir 或者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„çš„å…§å®¹ï¼Œç„¶å¾Œé¸æ“‡ä¸€å€‹åˆé©çš„ + ä¸é‡å的文件å,比如 TEST 。 + + 2. 接著將光標移動至本é çš„æœ€é ‚端,然後按 CTRL-g 找到該行的行號。別忘了 + 行號哦。 + + 3. 接著把光標移動至本é çš„æœ€åº•ç«¯ï¼Œå†æŒ‰ä¸€æ¬¡ CTRL-g 。也別忘了這個行好哦。 + + 4. 為了åªä¿å­˜æ–‡ç« çš„æŸå€‹éƒ¨åˆ†ï¼Œè«‹è¼¸å…¥ :#,# w TEST 。這裡的 #,# å°±æ˜¯ä¸Šé¢ + è¦æ±‚您記ä½çš„行號(頂端行號,底端行號),而 TEST 就是é¸å®šçš„æ–‡ä»¶å。 + + 5. 最後,用 :!dir ç¢ºèªæ–‡ä»¶æ˜¯å¦æ­£ç¢ºä¿å­˜ã€‚但是這次先別刪除掉。 + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五講第四節︰æå–å’Œåˆä¸¦æ–‡ä»¶ + + + ** è¦å‘ç•¶å‰æ–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的內容,請輸入 :r FILENAME ** + + 1. è«‹éµå…¥ :!dir ç¢ºèªæ‚¨å‰é¢å‰µå»ºçš„ TEST 文件還在。 + + 2. 然後將光標移動至當å‰é é¢çš„頂端。 + +特別æç¤ºï¸° 執行步驟3之後您將看到第五講第三節,請屆時å†å¾€ä¸‹ç§»å‹•回到這裡來。 + + 3. æŽ¥è‘—é€šéŽ :r TEST å°‡å‰é¢å‰µå»ºçš„å為 TEST 的文件æå–進來。 + +特別æç¤ºï¸°æ‚¨æ‰€æå–進來的文件將從光標所在ä½ç½®è™•開始置入。 + + 4. ç‚ºäº†ç¢ºèªæ–‡ä»¶å·²ç¶“æå–æˆåŠŸï¼Œç§»å‹•å…‰æ¨™å›žåˆ°åŽŸä¾†çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有兩份第 + 五講第三節,一份是原本,å¦å¤–一份是來自文件的副本。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五講å°çµ + + + 1. :!command 用于執行一個外部命令 command。 + + 請看一些實際例å­ï¸° + :!dir - 用于顯示當å‰ç›®éŒ„的內容。 + :!rm FILENAME - 用于刪除å為 FILENAME 的文件。 + + 2. :w FILENAME å¯å°‡ç•¶å‰ VIM 中正在編輯的文件ä¿å­˜åˆ°å為 FILENAME + 的文件中。 + + 3. :#,#w FILENAME å¯å°‡ç•¶å‰ç·¨è¼¯æ–‡ä»¶ç¬¬ # 行至第 # 行的內容ä¿å­˜åˆ°æ–‡ä»¶ + FILENAME 中。 + + 4. :r FILENAME 坿å–ç£ç›¤æ–‡ä»¶ FILENAME 並將其æ’å…¥åˆ°ç•¶å‰æ–‡ä»¶çš„光標ä½ç½® + 後é¢ã€‚ + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六講第一節︰打開類命令 + + + ** 輸入 o 將在光標的下方打開新的一行並進入æ’入模å¼ã€‚** + + 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 + + 2. 接著輸入å°å¯«çš„ o 在光標 *下方* 打開新的一行並進入æ’入模å¼ã€‚ + + 3. 然後復制標記有 ---> 的行並按 éµé€€å‡ºæ’入模å¼è€Œé€²å…¥æ­£å¸¸æ¨¡å¼ã€‚ + +---> After typing o the cursor is placed on the open line in Insert mode. + + 4. 為了在光標 *上方* 打開新的一行,åªéœ€è¦è¼¸å…¥å¤§å¯«çš„ O è€Œä¸æ˜¯å°å¯«çš„ o + å°±å¯ä»¥äº†ã€‚請在下行測試一下å§ã€‚當光標處在在該行上時,按 Shift-Oå¯ä»¥ + 在該行上方新開一行。 + +Open up a line above this by typing Shift-O while the cursor is on this line. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六講第二節︰光標後æ’入類命令 + + + ** 輸入 a å°‡å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本。 ** + + 1. 請在正常模å¼ä¸‹é€šéŽè¼¸å…¥ $ å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行 + 的末尾。 + + 2. 接著輸入å°å¯«çš„ a 則å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本了。大寫的 A 則å¯ä»¥ç›´æŽ¥åœ¨è¡Œ + 末æ’入文本。 + +æç¤ºï¸°è¼¸å…¥å¤§å¯« A çš„æ“作方法å¯ä»¥åœ¨è¡Œæœ«æ’入文本,é¿å…了輸入 i,光標定ä½åˆ° + 最後一個字符,輸入的文本, 回復正常模å¼ï¼Œç®­é ­å³éµç§»å‹•å…‰æ¨™ä»¥åŠ + x 刪除當å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å­—符等等諸多ç¹é›œçš„æ“ä½œã€‚ + + 3. æ“作之後第一行就å¯ä»¥è£œå……完整了。請注æ„光標後æ’入文本與æ’å…¥æ¨¡å¼æ˜¯åŸº + æœ¬å®Œå…¨ä¸€è‡´çš„ï¼Œåªæ˜¯æ–‡æœ¬æ’入的ä½ç½®å®šä½ç¨æœ‰ä¸åŒç½·äº†ã€‚ + +---> This line will allow you to practice +---> This line will allow you to practice appending text to the end of a line. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六講第三節︰å¦å¤–一個置æ›é¡žå‘½ä»¤çš„版本 + + + ** 輸入大寫的 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. 請注æ„︰如果您按 é€€å‡ºç½®æ›æ¨¡å¼å›žå¾©æ­£å¸¸æ¨¡å¼ï¼Œå°šæœªæ›¿æ›çš„æ–‡æœ¬å°‡ä» + ç„¶ä¿æŒåŽŸç‹€ã€‚ + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六講第四節︰設置類命令的é¸é … + + + ** 設置å¯ä½¿æŸ¥æ‰¾æˆ–者替æ›å¯å¿½ç•¥å¤§å°å¯«çš„é¸é … ** + + + 1. è¦æŸ¥æ‰¾å–®è©ž ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¼¸å…¥ /ignore 。è¦é‡å¾©æŸ¥æ‰¾è©²è©žï¼Œå¯ä»¥ + é‡å¾©æŒ‰ n éµã€‚ + + 2. 然後設置 ic é¸é …(ic就是英文忽略大å°å¯«Ignore Case的首字æ¯ç¸®å¯«è©ž)ï¼Œå³ + 輸入︰ + :set ic + + 3. ç¾åœ¨å¯ä»¥é€šéŽéµå…¥ n éµå†æ¬¡æŸ¥æ‰¾å–®è©ž ignore。é‡å¾©æŸ¥æ‰¾å¯ä»¥é‡å¾©éµå…¥ n éµã€‚ + + 4. 然後設置 hlsearch å’Œ incsearch 這兩個é¸é …,輸入以下內容︰ + :set hls is + + 5. ç¾åœ¨å¯ä»¥å†æ¬¡è¼¸å…¥æŸ¥æ‰¾å‘½ä»¤ï¼Œçœ‹çœ‹æœƒæœ‰ä»€éº¼æ•ˆæžœï¸° + /ignore + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六講å°çµ + + + 1. 輸入å°å¯«çš„ o å¯ä»¥åœ¨å…‰æ¨™ä¸‹æ–¹æ‰“開新的一行並將光標置于新開的行首,進入 + æ’入模å¼ã€‚ + 輸入大寫的 O å¯ä»¥åœ¨å…‰æ¨™ä¸Šæ–¹æ‰“開新的一行並將光標置于新開的行首,進入 + æ’入模å¼ã€‚ + + 2. 輸入å°å¯«çš„ a å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®ä¹‹å¾Œæ’入文本。 + 輸入大寫的 A å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨è¡Œçš„行末之後æ’入文本。 + + 3. 輸入大寫的 R å°‡é€²å…¥æ›¿æ›æ¨¡å¼ï¼Œç›´è‡³æŒ‰ éµé€€å‡ºæ›¿æ›æ¨¡å¼è€Œé€²å…¥æ­£å¸¸ + 模å¼ã€‚ + + 4. 輸入 :set xxx å¯ä»¥è¨­ç½® xxx é¸é …。 + + + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第七講︰在線幫助命令 + + ** 使用在線幫助系統 ** + + Vim æ“æœ‰ä¸€å€‹ç´°è‡´å…¨é¢çš„在線幫助系統。è¦å•Ÿå‹•è©²å¹«åŠ©ç³»çµ±ï¼Œè«‹é¸æ“‡å¦‚下三種方 + 法之一︰ + - 按下 éµ (如果éµç›¤ä¸Šæœ‰çš„話) + - 按下 éµ (如果éµç›¤ä¸Šæœ‰çš„話) + - 輸入 :help <回車> + + 輸入 :q <回車> å¯ä»¥é—œé–‰å¹«åŠ©çª—å£ã€‚ + + æä¾›ä¸€å€‹æ­£ç¢ºçš„åƒæ•¸çµ¦":help"命令,您å¯ä»¥æ‰¾åˆ°é—œäºŽè©²ä¸»é¡Œçš„幫助。請試驗以 + ä¸‹åƒæ•¸(å¯åˆ¥å¿˜äº†æŒ‰å›žè»Šéµå“¦ã€‚:)︰ + + :help w <回車> + :help c_ + :help insert-index <回車> + :help user-manual <回車> + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第八講︰創建一個啟動腳本 + + ** 啟用vim的功能 ** + + Vimçš„åŠŸèƒ½ç‰¹æ€§è¦æ¯”viå¤šå¾—å¤šï¼Œä½†å¤§éƒ¨åˆ†åŠŸèƒ½éƒ½æ²’æœ‰ç¼ºçœæ¿€æ´»ã€‚為了啟動更多的 + 功能,您得創建一個vimrc文件。 + + 1. 開始編輯vimrcæ–‡ä»¶ï¼Œé€™å–æ±ºäºŽæ‚¨æ‰€ä½¿ç”¨çš„æ“ä½œç³»çµ±ï¸° + + :edit ~/.vimrc 這是Unix系統所使用的命令 + :edit $VIM/_vimrc 這是Windows系統所使用的命令 + + 2. 接著導入vimrc范例文件︰ + + :read $VIMRUNTIME/vimrc_example.vim + + 3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ç‚ºï¸° + + :write + + 在下次您啟動vim的時候,編輯器就會有了語法高亮的功能。您å¯ä»¥ç¹¼çºŒæŠŠæ‚¨å–œ + 歡的其它功能設置添加到這個vimrc文件中。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + vim æ•™ç¨‹åˆ°æ­¤çµæŸã€‚æœ¬æ•™ç¨‹åªæ˜¯ç‚ºäº†ç°¡æ˜Žåœ°ä»‹ç´¹ä¸€ä¸‹vim編輯器,但已足以讓您 + 很容易學會使用本編輯器了。毋庸質疑,vim還有很多很多的命令,本教程所介 + 紹的還差得é è‘—呢。所以您è¦ç²¾é€šçš„話,還望繼續努力哦。下一步您å¯ä»¥é–±è®€ + vim手冊,使用的命令是︰ + :help user-manual + + 為了更進一步的åƒè€ƒå’Œå­¸ç¿’,以下這本書值得推薦︰ + + Vim - Vi Improved - 作者︰Steve Oualline + 出版社︰New Riders + + 這是第一本完全講解vim的書ç±ã€‚å°äºŽåˆå­¸è€…ç‰¹åˆ¥æœ‰ç”¨ã€‚å…¶ä¸­é‚„åŒ…å«æœ‰å¤§é‡å¯¦ä¾‹ + å’Œåœ–ç¤ºã€‚æ¬²çŸ¥è©³æƒ…ï¼Œè«‹è¨ªå• http://iccf-holland.org/click5.html + + 以下這本書比較è€äº†è€Œä¸”å…§å®¹ä¸»è¦æ˜¯viè€Œä¸æ˜¯vim,但是也值得推薦︰ + + Learning the Vi Editor - 作者︰Linda Lamb + 出版社︰O'Reilly & Associates Inc. + + 這是一本ä¸éŒ¯çš„æ›¸ï¼Œé€šéŽå®ƒæ‚¨å¹¾ä¹Žèƒ½å¤ äº†è§£åˆ°å…¨éƒ¨vi能夠åšåˆ°çš„事情。此書的第 + 六個版本也包å«äº†ä¸€äº›é—œäºŽvim的信æ¯ã€‚ + + 本教程是由來自Calorado School of Mineseçš„Michael C. Pierceã€Robert K. + Ware 所編寫的,其中來自Colorado State Universityçš„Charles Smithæä¾›äº† + 很多創æ„ã€‚ç·¨è€…é€šä¿¡åœ°å€æ˜¯ï¸° + + bware@mines.colorado.edu + + 本教程已由Bram Moolenaar專為vim進行修訂。 + + + + 譯制者附言︰ + =========== + ç°¡é«”ä¸­æ–‡æ•™ç¨‹ç¿»è­¯ç‰ˆä¹‹è­¯åˆ¶è€…ç‚ºæ¢æ˜Œæ³° ,還有 + å¦å¤–一個è¯ç³»åœ°å€ï¸°linuxrat@gnuchina.org。 + + ç¹é«”中文教程是從簡體中文教程翻譯版使用 Debian GNU/Linux ä¸­æ–‡é …ç›®å° + 組的于廣è¼å…ˆç”Ÿç·¨å¯«çš„中文漢字轉碼器 autoconvert 轉æ›è€Œæˆçš„,並å°è½‰ + æ›çš„çµæžœåšäº†ä¸€äº›ç´°ç¯€çš„æ”¹å‹•。 + + 變更記錄︰ + ========= + 2002å¹´08月30æ—¥ æ¢æ˜Œæ³° + æ„Ÿè¬ RMS@SMTH 的指正,將多處錯誤修正。 + + 2002å¹´04月22æ—¥ æ¢æ˜Œæ³° + æ„Ÿè¬ xuandong@sh163.net 的指正,將兩處錯別字修正。 + + 2002å¹´03月18æ—¥ æ¢æ˜Œæ³° + 根據Bram Molenaar先生在2002å¹´03月16æ—¥çš„ä¾†ä¿¡è¦æ±‚,將vimtutor1.4中譯 + 版å‡ç´šåˆ°vimtutor1.5。 + + 2001å¹´11月15æ—¥ æ¢æ˜Œæ³° + å°‡vimtutor1.4中譯版æäº¤çµ¦Bram Molenaarå’ŒSven Guckes。 + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 2cf65b529f9f1912247847a650336b127521db91 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 13:35:51 +0200 Subject: [PATCH 054/136] updated for version 7.3.673 Problem: Using "gN" while 'selection' is "exclusive" misses one character. (Ben Fritz) Solution: Check the direction when compensating for exclusive selection. (Christian Brabandt) --- src/search.c | 11 +++++++++-- src/version.c | 2 ++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/search.c b/src/search.c index 158cfd8f5d..d7bfc43b14 100644 --- a/src/search.c +++ b/src/search.c @@ -4650,8 +4650,15 @@ current_search(count, forward) if (VIsual_active) { redraw_curbuf_later(INVERTED); /* update the inversion */ - if (*p_sel == 'e' && ltoreq(VIsual, curwin->w_cursor)) - inc_cursor(); + if (*p_sel == 'e') + { + /* Correction for exclusive selection depends on the direction. */ + if (forward && ltoreq(VIsual, curwin->w_cursor)) + inc_cursor(); + else if (!forward && ltoreq(curwin->w_cursor, VIsual)) + inc(&VIsual); + } + } #ifdef FEAT_FOLDING diff --git a/src/version.c b/src/version.c index cd50417553..e8fcf2c41a 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 673, /**/ 672, /**/ From 329bb46d510d1bd3ee8cd7146f8f6cbd8b92572a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 13:35:51 +0200 Subject: [PATCH 055/136] Added tag v7-3-673 for changeset ca1c025079b1 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 104a0ed275..648d60f967 100644 --- a/.hgtags +++ b/.hgtags @@ -2009,3 +2009,4 @@ dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670 530f5a9030315f984e096794938c61f9d3562e22 v7-3-671 fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 +ca1c025079b11c98363e11576d903af756a593fc v7-3-673 From f08c83c8b674dd7e47894a2a3efc576b79b7f522 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 14:48:08 +0200 Subject: [PATCH 056/136] updated for version 7.3.674 Problem: Can't compile with Lua/dyn on Cygwin. Solution: Adjust configure to use the right library name. (Ken Takata) --- src/auto/configure | 61 +++++++++++++++++++++++++--------------------- src/configure.in | 53 ++++++++++++++++++++++------------------ src/version.c | 2 ++ 3 files changed, 64 insertions(+), 52 deletions(-) diff --git a/src/auto/configure b/src/auto/configure index d0c935867b..a5398b101e 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -4648,15 +4648,7 @@ $as_echo "not set, default to /usr" >&6; } LUA_INC= if test "X$vi_cv_path_lua_pfx" != "X"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5 -$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; } - if test -f $vi_cv_path_lua_pfx/include/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - # Extract the first word of "lua", so it can be a program name with args. + # Extract the first word of "lua", so it can be a program name with args. set dummy lua; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -4696,8 +4688,8 @@ $as_echo "no" >&6; } fi - if test "X$vi_cv_path_lua" != "X"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5 + if test "X$vi_cv_path_lua" != "X"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5 $as_echo_n "checking Lua version... " >&6; } if test "${vi_cv_version_lua+set}" = set; then : $as_echo_n "(cached) " >&6 @@ -4706,23 +4698,31 @@ else fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5 $as_echo "$vi_cv_version_lua" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5 -$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; } - if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5 +$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; } + if test -f $vi_cv_path_lua_pfx/include/lua.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - LUA_INC=/lua$vi_cv_version_lua - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - vi_cv_path_lua_pfx= - fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5 +$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; } + if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + LUA_INC=/lua$vi_cv_version_lua + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + vi_cv_path_lua_pfx= fi fi fi if test "X$vi_cv_path_lua_pfx" != "X"; then - if test "X$vi_cv_version_lua" != "X"; then + if test "X$LUA_INC" != "X"; then LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua" else LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua" @@ -4734,16 +4734,21 @@ $as_echo "no" >&6; } $as_echo "#define FEAT_LUA 1" >>confdefs.h if test "$enable_luainterp" = "dynamic"; then - for i in 0 1 2 3 4 5 6 7 8 9; do - if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then - LUA_SONAME=".$i" - break - fi - done + if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then + vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll" + else + for i in 0 1 2 3 4 5 6 7 8 9; do + if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then + LUA_SONAME=".$i" + break + fi + done + vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME" + fi $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h LUA_LIBS="" - LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS" + LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS" fi fi if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then diff --git a/src/configure.in b/src/configure.in index 5c14fc0c5c..4b8c200798 100644 --- a/src/configure.in +++ b/src/configure.in @@ -455,31 +455,31 @@ if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then LUA_INC= if test "X$vi_cv_path_lua_pfx" != "X"; then + dnl -- try to find Lua executable + AC_PATH_PROG(vi_cv_path_lua, lua) + if test "X$vi_cv_path_lua" != "X"; then + dnl -- find Lua version + AC_CACHE_CHECK(Lua version, vi_cv_version_lua, + [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ]) + fi AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include) if test -f $vi_cv_path_lua_pfx/include/lua.h; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) - dnl -- try to find Lua executable - AC_PATH_PROG(vi_cv_path_lua, lua) - if test "X$vi_cv_path_lua" != "X"; then - dnl -- find Lua version - AC_CACHE_CHECK(Lua version, vi_cv_version_lua, - [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ]) - AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua) - if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then - AC_MSG_RESULT(yes) - LUA_INC=/lua$vi_cv_version_lua - else - AC_MSG_RESULT(no) - vi_cv_path_lua_pfx= - fi + AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua) + if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then + AC_MSG_RESULT(yes) + LUA_INC=/lua$vi_cv_version_lua + else + AC_MSG_RESULT(no) + vi_cv_path_lua_pfx= fi fi fi if test "X$vi_cv_path_lua_pfx" != "X"; then - if test "X$vi_cv_version_lua" != "X"; then + if test "X$LUA_INC" != "X"; then dnl Test alternate location using version LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua" else @@ -491,17 +491,22 @@ if test "$enable_luainterp" = "yes" -o "$enable_luainterp" = "dynamic"; then LUA_PRO="if_lua.pro" AC_DEFINE(FEAT_LUA) if test "$enable_luainterp" = "dynamic"; then - dnl Determine the SONAME for the current version, but fallback to - dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found. - for i in 0 1 2 3 4 5 6 7 8 9; do - if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then - LUA_SONAME=".$i" - break - fi - done + if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then + vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll" + else + dnl Determine the SONAME for the current version, but fallback to + dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found. + for i in 0 1 2 3 4 5 6 7 8 9; do + if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then + LUA_SONAME=".$i" + break + fi + done + vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME" + fi AC_DEFINE(DYNAMIC_LUA) LUA_LIBS="" - LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS" + LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS" fi fi if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then diff --git a/src/version.c b/src/version.c index e8fcf2c41a..fff0079c27 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 674, /**/ 673, /**/ From 0a531eb0bb1f25ce8b070dbd46572e7ed5c678f0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 14:48:08 +0200 Subject: [PATCH 057/136] Added tag v7-3-674 for changeset 4da6003f0f0e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 648d60f967..9d5f497b56 100644 --- a/.hgtags +++ b/.hgtags @@ -2010,3 +2010,4 @@ dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 530f5a9030315f984e096794938c61f9d3562e22 v7-3-671 fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 ca1c025079b11c98363e11576d903af756a593fc v7-3-673 +4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674 From 842aa3e3e9e6ea15c2ed34c097f586d7e4908dca Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 17:12:47 +0200 Subject: [PATCH 058/136] updated for version 7.3.675 Problem: Using uninitialized memory with very long file name. Solution: Put NUL after text when it is truncated. (ZyX) --- src/buffer.c | 2 +- src/version.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/buffer.c b/src/buffer.c index 0a2ce8ec96..5998523219 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -3058,7 +3058,7 @@ fileinfo(fullname, shorthelp, dont_truncate) *p++ = '"'; if (buf_spname(curbuf) != NULL) - STRCPY(p, buf_spname(curbuf)); + vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1); else { if (!fullname && curbuf->b_fname != NULL) diff --git a/src/version.c b/src/version.c index fff0079c27..1798f053c2 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 675, /**/ 674, /**/ From 5ca34165b2aa41aaae46764acb89b1604f9b81d6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 17:12:47 +0200 Subject: [PATCH 059/136] Added tag v7-3-675 for changeset 9963f7a9b41b --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 9d5f497b56..c6a7cfc979 100644 --- a/.hgtags +++ b/.hgtags @@ -2011,3 +2011,4 @@ dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668 fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 ca1c025079b11c98363e11576d903af756a593fc v7-3-673 4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674 +9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675 From 8ca6791477754114640470ecb0fef6fbf79b70ff Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:06:59 +0200 Subject: [PATCH 060/136] updated for version 7.3.676 Problem: Ruby compilation on Windows 32 bit doesn't work. Solution: Only use some functions for 64 bit. (Ken Takata) --- src/if_ruby.c | 6 ++++++ src/version.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/if_ruby.c b/src/if_ruby.c index dd1ba47009..aea7b5656e 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -178,9 +178,11 @@ static void ruby_vim_init(void); #define rb_hash_new dll_rb_hash_new #define rb_inspect dll_rb_inspect #define rb_int2inum dll_rb_int2inum +#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ #define rb_fix2int dll_rb_fix2int #define rb_num2int dll_rb_num2int #define rb_num2uint dll_rb_num2uint +#endif #define rb_lastline_get dll_rb_lastline_get #define rb_lastline_set dll_rb_lastline_set #define rb_load_protect dll_rb_load_protect @@ -271,9 +273,11 @@ static VALUE (*dll_rb_hash_aset) (VALUE, VALUE, VALUE); static VALUE (*dll_rb_hash_new) (void); static VALUE (*dll_rb_inspect) (VALUE); static VALUE (*dll_rb_int2inum) (long); +#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ static long (*dll_rb_fix2int) (VALUE); static long (*dll_rb_num2int) (VALUE); static unsigned long (*dll_rb_num2uint) (VALUE); +#endif static VALUE (*dll_rb_lastline_get) (void); static void (*dll_rb_lastline_set) (VALUE); static void (*dll_rb_load_protect) (VALUE, int, int*); @@ -382,9 +386,11 @@ static struct {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new}, {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect}, {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum}, +#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */ {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int}, {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int}, {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint}, +#endif {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get}, {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set}, {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect}, diff --git a/src/version.c b/src/version.c index 1798f053c2..38f132467c 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 676, /**/ 675, /**/ From ad43616e35304fe4a7e0cda82da6d5d5b0f5b490 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:06:59 +0200 Subject: [PATCH 061/136] Added tag v7-3-676 for changeset 5309996ddced --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index c6a7cfc979..5a6f6f136c 100644 --- a/.hgtags +++ b/.hgtags @@ -2012,3 +2012,4 @@ fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672 ca1c025079b11c98363e11576d903af756a593fc v7-3-673 4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674 9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675 +5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676 From 51c67d40f19b4bad07d1ebcbc399117f250b0cc8 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:25:00 +0200 Subject: [PATCH 062/136] updated for version 7.3.677 Problem: buf_spname() is used inconsistently. Solution: Make the return type a char_u pointer. Check the size of the returned string. --- src/buffer.c | 18 +++++++++--------- src/ex_cmds2.c | 3 +-- src/ex_docmd.c | 2 +- src/memline.c | 6 ++---- src/proto/buffer.pro | 2 +- src/screen.c | 2 +- src/version.c | 2 ++ 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/buffer.c b/src/buffer.c index 5998523219..05da2860dd 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -2635,7 +2635,7 @@ buflist_list(eap) continue; msg_putchar('\n'); if (buf_spname(buf) != NULL) - STRCPY(NameBuff, buf_spname(buf)); + vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1); else home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE); @@ -3350,7 +3350,7 @@ maketitle() else { if (buf_spname(curbuf) != NULL) - i_name = (char_u *)buf_spname(curbuf); + i_name = buf_spname(curbuf); else /* use file name only in icon */ i_name = gettail(curbuf->b_ffname); *i_str = NUL; @@ -3766,7 +3766,7 @@ build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, case STL_FILENAME: fillable = FALSE; /* don't change ' ' to fillchar */ if (buf_spname(wp->w_buffer) != NULL) - STRCPY(NameBuff, buf_spname(wp->w_buffer)); + vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1); else { t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname @@ -5244,7 +5244,7 @@ write_viminfo_bufferlist(fp) * Return special buffer name. * Returns NULL when the buffer has a normal file name. */ - char * + char_u * buf_spname(buf) buf_T *buf; { @@ -5263,9 +5263,9 @@ buf_spname(buf) goto win_found; win_found: if (win != NULL && win->w_llist_ref != NULL) - return _(msg_loclist); + return (char_u *)_(msg_loclist); else - return _(msg_qflist); + return (char_u *)_(msg_qflist); } #endif #ifdef FEAT_QUICKFIX @@ -5274,12 +5274,12 @@ win_found: if (bt_nofile(buf)) { if (buf->b_sfname != NULL) - return (char *)buf->b_sfname; - return _("[Scratch]"); + return buf->b_sfname; + return (char_u *)_("[Scratch]"); } #endif if (buf->b_fname == NULL) - return _("[No Name]"); + return (char_u *)_("[No Name]"); return NULL; } diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c index d3bf04fade..de190e78c3 100644 --- a/src/ex_cmds2.c +++ b/src/ex_cmds2.c @@ -1688,8 +1688,7 @@ check_changed_any(hidden) msg_didout = FALSE; } if (EMSG2(_("E162: No write since last change for buffer \"%s\""), - buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) : - buf->b_fname)) + buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) { save = no_wait_return; no_wait_return = FALSE; diff --git a/src/ex_docmd.c b/src/ex_docmd.c index ebc8b98d11..311f4f0e91 100644 --- a/src/ex_docmd.c +++ b/src/ex_docmd.c @@ -7602,7 +7602,7 @@ ex_tabs(eap) msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' '); msg_putchar(' '); if (buf_spname(wp->w_buffer) != NULL) - STRCPY(IObuff, buf_spname(wp->w_buffer)); + vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1); else home_replace(wp->w_buffer, wp->w_buffer->b_fname, IObuff, IOSIZE, TRUE); diff --git a/src/memline.c b/src/memline.c index 2a2426d672..fecd876373 100644 --- a/src/memline.c +++ b/src/memline.c @@ -780,9 +780,7 @@ ml_open_file(buf) need_wait_return = TRUE; /* call wait_return later */ ++no_wait_return; (void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"), - buf_spname(buf) != NULL - ? (char_u *)buf_spname(buf) - : buf->b_fname); + buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname); --no_wait_return; } @@ -1315,7 +1313,7 @@ ml_recover() smsg((char_u *)_("Using swap file \"%s\""), NameBuff); if (buf_spname(curbuf) != NULL) - STRCPY(NameBuff, buf_spname(curbuf)); + vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1); else home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE); smsg((char_u *)_("Original file \"%s\""), NameBuff); diff --git a/src/proto/buffer.pro b/src/proto/buffer.pro index 411c5af57e..85aeddaef5 100644 --- a/src/proto/buffer.pro +++ b/src/proto/buffer.pro @@ -51,7 +51,7 @@ void ex_buffer_all __ARGS((exarg_T *eap)); void do_modelines __ARGS((int flags)); int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing)); void write_viminfo_bufferlist __ARGS((FILE *fp)); -char *buf_spname __ARGS((buf_T *buf)); +char_u *buf_spname __ARGS((buf_T *buf)); void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr)); linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr)); int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type)); diff --git a/src/screen.c b/src/screen.c index 92eb232ef0..0e76d8cef2 100644 --- a/src/screen.c +++ b/src/screen.c @@ -9876,7 +9876,7 @@ get_trans_bufname(buf) buf_T *buf; { if (buf_spname(buf) != NULL) - STRCPY(NameBuff, buf_spname(buf)); + vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1); else home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE); trans_characters(NameBuff, MAXPATHL); diff --git a/src/version.c b/src/version.c index 38f132467c..e0bff5328f 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 677, /**/ 676, /**/ From 669a50fbe3667cbd1498897f03c915cb344cfa6e Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:25:00 +0200 Subject: [PATCH 063/136] Added tag v7-3-677 for changeset 8115f449a574 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 5a6f6f136c..49410d68dd 100644 --- a/.hgtags +++ b/.hgtags @@ -2013,3 +2013,4 @@ ca1c025079b11c98363e11576d903af756a593fc v7-3-673 4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674 9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675 5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676 +8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677 From 70c020ca71cc9c2a0a6b3d35d7fb578169b27886 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:50:00 +0200 Subject: [PATCH 064/136] updated for version 7.3.678 Problem: Ruby .so name may not be correct. Solution: Use the LIBRUBY_SO entry from the config. (Vit Ondruch) --- src/auto/configure | 2 +- src/configure.in | 2 +- src/version.c | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/auto/configure b/src/auto/configure index a5398b101e..85fe8db2f6 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -6376,7 +6376,7 @@ $as_echo "$rubyhdrdir" >&6; } $as_echo "#define FEAT_RUBY 1" >>confdefs.h if test "$enable_rubyinterp" = "dynamic"; then - libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG["RUBY_SO_NAME"], Config::CONFIG["DLEXT"]'` + libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG["LIBRUBY_SO"]'` $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS" diff --git a/src/configure.in b/src/configure.in index 4b8c200798..8a7de2c368 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1487,7 +1487,7 @@ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then RUBY_PRO="if_ruby.pro" AC_DEFINE(FEAT_RUBY) if test "$enable_rubyinterp" = "dynamic"; then - libruby=`$vi_cv_path_ruby -r rbconfig -e 'printf "lib%s.%s\n", Config::CONFIG[["RUBY_SO_NAME"]], Config::CONFIG[["DLEXT"]]'` + libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG[["LIBRUBY_SO"]]'` AC_DEFINE(DYNAMIC_RUBY) RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS" RUBY_LIBS= diff --git a/src/version.c b/src/version.c index e0bff5328f..935dfea878 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 678, /**/ 677, /**/ From 41fa41daffb8c259175146a1f28dd2f9592ce82d Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 18:50:00 +0200 Subject: [PATCH 065/136] Added tag v7-3-678 for changeset de253f606048 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 49410d68dd..f817b79433 100644 --- a/.hgtags +++ b/.hgtags @@ -2014,3 +2014,4 @@ ca1c025079b11c98363e11576d903af756a593fc v7-3-673 9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675 5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676 8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677 +de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 From 732b020ef1ab1a419543e71cdd126c51262df61f Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:09:35 +0200 Subject: [PATCH 066/136] updated for version 7.3.679 Problem: Ruby detection uses Config, newer Ruby versions use RbConfig. Solution: Detect the need to use RbConfig. (Vit Ondruch) --- src/auto/configure | 26 +++++++++++++++++--------- src/configure.in | 24 +++++++++++++++--------- src/version.c | 2 ++ 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/auto/configure b/src/auto/configure index 85fe8db2f6..fc8a1373a1 100755 --- a/src/auto/configure +++ b/src/auto/configure @@ -6332,26 +6332,34 @@ $as_echo_n "checking Ruby version... " >&6; } if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5 $as_echo "OK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5 +$as_echo_n "checking Ruby rbconfig... " >&6; } + ruby_rbconfig="RbConfig" + if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then + ruby_rbconfig="Config" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5 +$as_echo "$ruby_rbconfig" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5 $as_echo_n "checking Ruby header files... " >&6; } - rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null` + rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null` if test "X$rubyhdrdir" != "X"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5 $as_echo "$rubyhdrdir" >&6; } RUBY_CFLAGS="-I$rubyhdrdir" - rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'` + rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"` if test -d "$rubyhdrdir/$rubyarch"; then RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" fi - rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'` + rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"` RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" - rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'` + rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"` if test "X$rubylibs" != "X"; then RUBY_LIBS="$rubylibs" fi - librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'` - librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBY_A"])'` - rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'` + librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"` + librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"` + rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"` if test -f "$rubylibdir/$librubya"; then librubyarg="$librubyarg" RUBY_LIBS="$RUBY_LIBS -L$rubylibdir" @@ -6363,7 +6371,7 @@ $as_echo "$rubyhdrdir" >&6; } if test "X$librubyarg" != "X"; then RUBY_LIBS="$librubyarg $RUBY_LIBS" fi - rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'` + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"` if test "X$rubyldflags" != "X"; then rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'` if test "X$rubyldflags" != "X"; then @@ -6376,7 +6384,7 @@ $as_echo "$rubyhdrdir" >&6; } $as_echo "#define FEAT_RUBY 1" >>confdefs.h if test "$enable_rubyinterp" = "dynamic"; then - libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG["LIBRUBY_SO"]'` + libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"` $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS" diff --git a/src/configure.in b/src/configure.in index 8a7de2c368..37c3fb12fe 100644 --- a/src/configure.in +++ b/src/configure.in @@ -1442,24 +1442,30 @@ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then AC_MSG_CHECKING(Ruby version) if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then AC_MSG_RESULT(OK) + AC_MSG_CHECKING(Ruby rbconfig) + ruby_rbconfig="RbConfig" + if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then + ruby_rbconfig="Config" + fi + AC_MSG_RESULT($ruby_rbconfig) AC_MSG_CHECKING(Ruby header files) - rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null` + rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null` if test "X$rubyhdrdir" != "X"; then AC_MSG_RESULT($rubyhdrdir) RUBY_CFLAGS="-I$rubyhdrdir" - rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'` + rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"` if test -d "$rubyhdrdir/$rubyarch"; then RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch" fi - rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'` + rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"` RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion" - rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'` + rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"` if test "X$rubylibs" != "X"; then RUBY_LIBS="$rubylibs" fi - librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'` - librubya=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBY_A"]])'` - rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'` + librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"` + librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"` + rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"` if test -f "$rubylibdir/$librubya"; then librubyarg="$librubyarg" RUBY_LIBS="$RUBY_LIBS -L$rubylibdir" @@ -1472,7 +1478,7 @@ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then if test "X$librubyarg" != "X"; then RUBY_LIBS="$librubyarg $RUBY_LIBS" fi - rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'` + rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"` if test "X$rubyldflags" != "X"; then dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only dnl be included if requested by passing --with-mac-arch to @@ -1487,7 +1493,7 @@ if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then RUBY_PRO="if_ruby.pro" AC_DEFINE(FEAT_RUBY) if test "$enable_rubyinterp" = "dynamic"; then - libruby=`$vi_cv_path_ruby -r rbconfig -e 'puts Config::CONFIG[["LIBRUBY_SO"]]'` + libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"` AC_DEFINE(DYNAMIC_RUBY) RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS" RUBY_LIBS= diff --git a/src/version.c b/src/version.c index 935dfea878..9ef1e8f07c 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 679, /**/ 678, /**/ From f0073e43e060992dbc5bb5cd57af1cbc5bb31ef6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:09:35 +0200 Subject: [PATCH 067/136] Added tag v7-3-679 for changeset dd0f25ede9a8 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index f817b79433..821b3b868d 100644 --- a/.hgtags +++ b/.hgtags @@ -2015,3 +2015,4 @@ ca1c025079b11c98363e11576d903af756a593fc v7-3-673 5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676 8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677 de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 +dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 From 93fb4a15898f283b3a112630b8c30844dda714ed Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:33:41 +0200 Subject: [PATCH 068/136] updated for version 7.3.680 Problem: Some files missing in the list of distributed files. Solution: Add lines for new files. --- Filelist | 3 +++ src/version.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/Filelist b/Filelist index 2eac3685a9..b63acd9c2a 100644 --- a/Filelist +++ b/Filelist @@ -261,6 +261,7 @@ SRC_DOS = \ src/Make_mvc.mak \ src/Make_w16.mak \ src/bigvim.bat \ + src/bigvim64.bat \ src/msvcsetup.bat \ src/msvc2008.bat \ src/msvc2010.bat \ @@ -352,6 +353,7 @@ SRC_DOS_BIN = \ src/xpm/COPYRIGHT \ src/xpm/README.txt \ src/xpm/include/*.h \ + src/xpm/x64/lib/libXpm.a \ src/xpm/x64/lib/libXpm.lib \ src/xpm/x86/lib/libXpm.a \ src/xpm/x86/lib/libXpm.lib \ @@ -692,6 +694,7 @@ LANG_GEN = \ runtime/tutor/tutor.utf-8 \ runtime/tutor/tutor.?? \ runtime/tutor/tutor.??.* \ + runtime/tutor/tutor.??_??.* \ runtime/tutor/tutor.bar \ runtime/tutor/tutor.bar.* \ runtime/spell/README.txt \ diff --git a/src/version.c b/src/version.c index 9ef1e8f07c..fa453088c3 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 680, /**/ 679, /**/ From e21e514d4e86f47ab7a32236831a866e4ffb4276 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:33:41 +0200 Subject: [PATCH 069/136] Added tag v7-3-680 for changeset 52acec46b75e --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 821b3b868d..133b31690e 100644 --- a/.hgtags +++ b/.hgtags @@ -2016,3 +2016,4 @@ ca1c025079b11c98363e11576d903af756a593fc v7-3-673 8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677 de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 +52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680 From 393f45e8d62817ea64a783ec901bd88f7423a10a Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:46:54 +0200 Subject: [PATCH 070/136] Update runtime files. --- runtime/doc/if_pyth.txt | 4 +- runtime/doc/todo.txt | 33 +- runtime/filetype.vim | 5 +- runtime/syntax/synload.vim | 4 +- runtime/tutor/tutor | 2 +- runtime/tutor/tutor.eo.utf-8 | 2 +- runtime/tutor/tutor.fr | 2 +- runtime/tutor/tutor.fr.utf-8 | 2 +- runtime/tutor/tutor.hr | 2 +- runtime/tutor/tutor.hr.cp1250 | 2 +- runtime/tutor/tutor.hr.utf-8 | 2 +- runtime/tutor/tutor.ja.euc | 10 +- runtime/tutor/tutor.ja.sjis | 10 +- runtime/tutor/tutor.ja.utf-8 | 10 +- runtime/tutor/tutor.ko.euc | 2 +- runtime/tutor/tutor.ko.utf-8 | 2 +- runtime/tutor/tutor.nb | 2 +- runtime/tutor/tutor.nb.utf-8 | 2 +- runtime/tutor/tutor.no | 2 +- runtime/tutor/tutor.no.utf-8 | 2 +- runtime/tutor/tutor.sk | 2 +- runtime/tutor/tutor.sk.cp1250 | 2 +- runtime/tutor/tutor.sk.utf-8 | 2 +- runtime/tutor/tutor.utf-8 | 2 +- runtime/tutor/tutor.zh.euc | 829 ++++++++++++++++++------------- runtime/tutor/tutor.zh.utf-8 | 852 -------------------------------- runtime/tutor/tutor.zh_cn.utf-8 | 829 ++++++++++++++++++------------- src/INSTALLpc.txt | 16 +- 28 files changed, 1054 insertions(+), 1582 deletions(-) delete mode 100644 runtime/tutor/tutor.zh.utf-8 diff --git a/runtime/doc/if_pyth.txt b/runtime/doc/if_pyth.txt index 92840d40ec..ec7d2396ea 100644 --- a/runtime/doc/if_pyth.txt +++ b/runtime/doc/if_pyth.txt @@ -1,4 +1,4 @@ -*if_pyth.txt* For Vim version 7.3. Last change: 2012 Aug 02 +*if_pyth.txt* For Vim version 7.3. Last change: 2012 Sep 23 VIM REFERENCE MANUAL by Paul Moore @@ -165,7 +165,7 @@ vim.bindeval(str) *python-bindeval* Value Meaning ~ zero Variable is not locked vim.VAR_LOCKED Variable is locked, but can be unlocked - vim.VAR_FIXED Variable is locked and can’t be unlocked + vim.VAR_FIXED Variable is locked and can't be unlocked integer constants. If variable is not fixed, you can do `var.locked=True` to lock it and `var.locked=False` to unlock. There is no recursive locking like |:lockvar|! does. There is also diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index e3e6bbbffc..275b7ac45a 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.3. Last change: 2012 Sep 21 +*todo.txt* For Vim version 7.3. Last change: 2012 Oct 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -36,18 +36,20 @@ not be repeated below, unless there is extra information. Go through more coverity reports. -Ruby problem, patch in issue 49. (Sep 19) -Also in email from Ondruch? - Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10) -GTK: problem with 'L' in 'guioptions' changing the window width. -(Aaron Cornelius, 2012 Feb 6) - Checking runtime scripts: Thilo Six, 2012 Jun 6. Crash with 1023 byte directory name. (Danek Duvall, 2012 Sep 19) +Patch for wrong text in balloon, Issue 58. (Dominique Pelle) + +Patch for menu.vim to correct message about adding spell file. +(Jiri Sedlak, 2012 Sep 24) + +GTK: problem with 'L' in 'guioptions' changing the window width. +(Aaron Cornelius, 2012 Feb 6) + Patch for SGR mouse with older xterm. (Hayaki Saito, 2012 Sep 19) Patch for crash with an autocommand. (ZyX, 2012 Sep 6, second one) @@ -79,16 +81,32 @@ Aug 16) the order they were made. Also ":gredo". Both with a count. Useful when tests fail after making changes and you forgot in which files. +Crash with vimdiff. (Don Cruickshank, 2012 Sep 23) + +Win32: use 'guifontwide' for IME composition. (Taro Muraoka, 2012 Sep 30) +Update Oct 2. + +Patch to make multibyte input work on Win32 console when codepage differs from +'encoding'. (Ken Takata, 2012 Sep 29) + +It's possible to defined an input() function that overrides the built-in one. +(ZyX, 2012 Sep 28) + Win32: When a directory name contains an exclamation mark, completion doesn't complete the contents of the directory. No escaping for the "!"? (Jan Stocker, 2012 Jan 5) +Patch to support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep +28) Asked for tests. + Patch for IME handling, adds 'imactivatefunc' and 'imstatusfunc' option. (Yukihiro Nakadaira, 2012 Aug 16) Patch to improve IME handling. (Yasuhiro Matsumoto, 2012 Jul 18) Issue 54: document behavior of -complete, also expands arg. +New syntax files for apt. (quidame, 2012 Sep 21) + Patch for if_lua. (Luis Carvalho, 2012 Aug 26, update Aug 29, another Aug 30, then Sep 1) @@ -156,6 +174,7 @@ Do give the prompt? Quit with an error? Patch for 'backupcopy' default behavior for symlinks on Windows. (David Pope, 2012 Mar 21, update Mar 31) With fix for memory leak: Ken Takata, 2012 Aug 24 +Another update Sep 24. Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 6f6bc812ad..5010d68773 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar -" Last Change: 2012 Sep 06 +" Last Change: 2012 Oct 03 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -633,6 +633,9 @@ au BufNewFile,BufRead *.dsl setf dsl " DTD (Document Type Definition for XML) au BufNewFile,BufRead *.dtd setf dtd +" DTS/DSTI (device tree files) +au BufNewFile,BufRead *.dts,*.dtsi setf dts + " EDIF (*.edf,*.edif,*.edn,*.edo) au BufNewFile,BufRead *.ed\(f\|if\|n\|o\) setf edif diff --git a/runtime/syntax/synload.vim b/runtime/syntax/synload.vim index 9b28fd8f41..48b5956b3c 100644 --- a/runtime/syntax/synload.vim +++ b/runtime/syntax/synload.vim @@ -1,6 +1,6 @@ " Vim syntax support file " Maintainer: Bram Moolenaar -" Last Change: 2012 Feb 11 +" Last Change: 2012 Sep 25 " This file sets up for syntax highlighting. " It is loaded from "syntax.vim" and "manual.vim". @@ -46,6 +46,8 @@ fun! s:SynSet() echohl None endif let s = &filetype + elseif s == "OFF" + let s = "" endif if s != "" diff --git a/runtime/tutor/tutor b/runtime/tutor/tutor index daf42b6bb2..da28a15313 100644 --- a/runtime/tutor/tutor +++ b/runtime/tutor/tutor @@ -658,7 +658,7 @@ NOTE: If you were to exit Vim and start it again with vim TEST , the file 4. Type w TEST , where TEST is a filename that does not exist yet. Verify that you see :'<,'>w TEST before you press . - 5. Vim will write the selected lines to the file TEST. Use :!dir or !ls + 5. Vim will write the selected lines to the file TEST. Use :!dir or :!ls to see it. Do not remove it yet! We will use it in the next lesson. NOTE: Pressing v starts Visual selection. You can move the cursor around diff --git a/runtime/tutor/tutor.eo.utf-8 b/runtime/tutor/tutor.eo.utf-8 index 41f40726d9..44d7b29a37 100644 --- a/runtime/tutor/tutor.eo.utf-8 +++ b/runtime/tutor/tutor.eo.utf-8 @@ -645,7 +645,7 @@ RIMARKO: Ĉiuj : komandoj devas finiÄi per tajpo de 3. Nun tajpu: :w TESTO (kie TESTO estas la elektita dosiernomo) 4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO. - Por kontroli tion, tajpu :!dir aÅ­ !ls denove por vidigi vian + Por kontroli tion, tajpu :!dir aÅ­ :!ls denove por vidigi vian dosierujon. RIMARKO: Se vi volus eliri el Vim kaj restartigi Äin denove per vim TESTO, diff --git a/runtime/tutor/tutor.fr b/runtime/tutor/tutor.fr index f51a62e532..2eb92d5e95 100644 --- a/runtime/tutor/tutor.fr +++ b/runtime/tutor/tutor.fr @@ -707,7 +707,7 @@ NOTE : Si vous quittez Vim et le red Vérifiez que vous voyez :'<,'>w TEST avant de d'appuyer sur . 5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST. - Utilisez :!dir ou !ls pour le voir. Ne l'effacez pas encore ! + Utilisez :!dir ou :!ls pour le voir. Ne l'effacez pas encore ! Nous allons l'utiliser dans la leçon suivante. NOTE : L'appui de v démarre la sélection Visuelle. Vous pouvez déplacer le diff --git a/runtime/tutor/tutor.fr.utf-8 b/runtime/tutor/tutor.fr.utf-8 index 6281538939..9e1087de64 100644 --- a/runtime/tutor/tutor.fr.utf-8 +++ b/runtime/tutor/tutor.fr.utf-8 @@ -707,7 +707,7 @@ NOTE : Si vous quittez Vim et le redémarrez de nouveau avec le fichier TEST, Vérifiez que vous voyez :'<,'>w TEST avant de d'appuyer sur . 5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST. - Utilisez :!dir ou !ls pour le voir. Ne l'effacez pas encore ! + Utilisez :!dir ou :!ls pour le voir. Ne l'effacez pas encore ! Nous allons l'utiliser dans la leçon suivante. NOTE : L'appui de v démarre la sélection Visuelle. Vous pouvez déplacer le diff --git a/runtime/tutor/tutor.hr b/runtime/tutor/tutor.hr index f1d346c2ac..90443bf659 100644 --- a/runtime/tutor/tutor.hr +++ b/runtime/tutor/tutor.hr @@ -659,7 +659,7 @@ NAPOMENA: Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST , Provjerite da zaista pi¹e :'<,'>w TEST prije nego ¹to pritisnite . - 5. Vim æe spremiti oznaèeni tekst u TEST. Provjerite sa :!dir ili !ls . + 5. Vim æe spremiti oznaèeni tekst u TEST. Provjerite sa :!dir ili :!ls . Nemojte je jo¹ brisati! Koristiti æe te je u sljedeæoj lekciji. NAPOMENA: Tipka v zapoèinje Vizualno oznaèavanje. Mo¾ete pomicati kursor diff --git a/runtime/tutor/tutor.hr.cp1250 b/runtime/tutor/tutor.hr.cp1250 index 92771ab22b..1956a8aba0 100644 --- a/runtime/tutor/tutor.hr.cp1250 +++ b/runtime/tutor/tutor.hr.cp1250 @@ -659,7 +659,7 @@ NAPOMENA: Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST , Provjerite da zaista piše :'<,'>w TEST prije nego što pritisnite . - 5. Vim æe spremiti oznaèeni tekst u TEST. Provjerite sa :!dir ili !ls . + 5. Vim æe spremiti oznaèeni tekst u TEST. Provjerite sa :!dir ili :!ls . Nemojte je još brisati! Koristiti æe te je u sljedeæoj lekciji. NAPOMENA: Tipka v zapoèinje Vizualno oznaèavanje. Možete pomicati kursor diff --git a/runtime/tutor/tutor.hr.utf-8 b/runtime/tutor/tutor.hr.utf-8 index 396bdfeb14..79838ec7f2 100644 --- a/runtime/tutor/tutor.hr.utf-8 +++ b/runtime/tutor/tutor.hr.utf-8 @@ -659,7 +659,7 @@ NAPOMENA: Ako bi napustili Vim i ponovno ga pokrenuli sa vim TEST , Provjerite da zaista piÅ¡e :'<,'>w TEST prije nego Å¡to pritisnite . - 5. Vim će spremiti oznaÄeni tekst u TEST. Provjerite sa :!dir ili !ls . + 5. Vim će spremiti oznaÄeni tekst u TEST. Provjerite sa :!dir ili :!ls . Nemojte je joÅ¡ brisati! Koristiti će te je u sljedećoj lekciji. NAPOMENA: Tipka v zapoÄinje Vizualno oznaÄavanje. Možete pomicati kursor diff --git a/runtime/tutor/tutor.ja.euc b/runtime/tutor/tutor.ja.euc index 513439344e..2734ee8ca3 100644 --- a/runtime/tutor/tutor.ja.euc +++ b/runtime/tutor/tutor.ja.euc @@ -117,7 +117,7 @@ NOTE: ¥ì¥Ã¥¹¥ó 1.5: ¥Æ¥­¥¹¥ÈÊÔ½¸ - Äɲà - ** ¥Æ¥­¥¹¥ÈÄɲ乤ë¤Ë¤Ï A ¤ò²¡¤·¤Þ¤·¤ç¤¦ ** + ** ¥Æ¥­¥¹¥È¤òÄɲ乤ë¤Ë¤Ï A ¤ò²¡¤·¤Þ¤·¤ç¤¦ ** 1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿ºÇ½é¤Î¹Ô¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤·¤ç¤¦¡£ ¥«¡¼¥½¥ë¤¬¤½¤Îʸ»ú¾å¤Ë¤¢¤Ã¤Æ¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ @@ -232,7 +232,7 @@ NOTE: ¥ì¥Ã¥¹¥ó 2.3: ¥ª¥Ú¥ì¡¼¥¿¤È¥â¡¼¥·¥ç¥ó - ¿¤¯¤Î¥³¥Þ¥ó¥É¤Ï¥ª¥Ú¥ì¡¼¥¿¤È¥â¡¼¥·¥ç¥ó¤«¤é¥Æ¥­¥¹¥È¤ËÊѹ¹¤ò²Ã¤Þ¤¹¡£ + ¿¤¯¤Î¥³¥Þ¥ó¥É¤Ï¥ª¥Ú¥ì¡¼¥¿¤È¥â¡¼¥·¥ç¥ó¤«¤é¥Æ¥­¥¹¥È¤ËÊѹ¹¤ò²Ã¤¨¤Þ¤¹¡£ ºï½ü¥³¥Þ¥ó¥É d ¤Î¥ª¥Ú¥ì¡¼¥¿¤Ï¼¡¤ÎÍͤˤʤäƤ¤¤Þ¤¹: d ¥â¡¼¥·¥ç¥ó @@ -259,7 +259,7 @@ NOTE: 1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¹Ô¤ÎÀèÆ¬¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¤Þ¤¹¡£ - 2. 2dw ¤ò¥¿¥¤¥×¤·¤ÆÃ±¸ì2¤Äʬ°Üư¤·¤Þ¤¹¡£ + 2. 2dw ¤ò¥¿¥¤¥×¤·¤ÆÃ±¸ì2¤Äʬºï½ü¤·¤Þ¤¹¡£ 3. 3e ¤ò¥¿¥¤¥×¤·¤Æ3¤ÄÌܤÎñ¸ì¤Î½ªÃ¼¤Ë°Üư¤·¤Þ¤¹¡£ @@ -326,8 +326,8 @@ NOTE: ** ºÇ¸å¤Î¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤¹¤Ë¤Ï u ¤ò²¡¤·¤Þ¤¹¡£U ¤Ï¹ÔÁ´ÂΤμè¾Ã¤Ç¤¹¡£ ** - 1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¡¢ºÇ½é¤Î´Ö°ã¤¤¤Ë¥«¡¼¥½ - ¥ë¤ò°Üư¤·¤Þ¤·¤ç¤¦¡£ + 1. °Ê²¼¤Î ---> ¤È¼¨¤µ¤ì¤¿¹Ô¤Ë¥«¡¼¥½¥ë¤ò°Üư¤·¡¢ºÇ½é¤Î´Ö°ã¤¤¤Ë¥«¡¼¥½¥ë + ¤ò°Üư¤·¤Þ¤·¤ç¤¦¡£ 2. x ¤ò¥¿¥¤¥×¤·¤Æ¤¤¤é¤Ê¤¤ÀèÆ¬¤Îʸ»ú¤òºï½ü¤·¤Þ¤·¤ç¤¦¡£ 3. ¤µ¤¡¡¢u ¤ò¥¿¥¤¥×¤·¤ÆºÇ¸å¤Ë¼Â¹Ô¤·¤¿¥³¥Þ¥ó¥É¤ò¼è¤ê¾Ã¤·¤Þ¤·¤ç¤¦¡£ 4. º£Å٤ϡ¢x ¤ò»ÈÍѤ·¤Æ¸í¤ê¤òÁ´¤Æ½¤Àµ¤·¤Þ¤·¤ç¤¦¡£ diff --git a/runtime/tutor/tutor.ja.sjis b/runtime/tutor/tutor.ja.sjis index 7be2120a5c..fe3be23b44 100644 --- a/runtime/tutor/tutor.ja.sjis +++ b/runtime/tutor/tutor.ja.sjis @@ -117,7 +117,7 @@ NOTE: ƒŒƒbƒXƒ“ 1.5: ƒeƒLƒXƒg•ÒW - ’ljÁ - ** ƒeƒLƒXƒg’ljÁ‚·‚é‚É‚Í A ‚ð‰Ÿ‚µ‚Ü‚µ‚傤 ** + ** ƒeƒLƒXƒg‚ð’ljÁ‚·‚é‚É‚Í A ‚ð‰Ÿ‚µ‚Ü‚µ‚傤 ** 1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽʼn‚Ìs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B ƒJ[ƒ\ƒ‹‚ª‚»‚Ì•¶Žšã‚É‚ ‚Á‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB @@ -232,7 +232,7 @@ NOTE: ƒŒƒbƒXƒ“ 2.3: ƒIƒyƒŒ[ƒ^‚ƃ‚[ƒVƒ‡ƒ“ - ‘½‚­‚̃Rƒ}ƒ“ƒh‚̓IƒyƒŒ[ƒ^‚ƃ‚[ƒVƒ‡ƒ“‚©‚çƒeƒLƒXƒg‚É•ÏX‚ð‰Á‚Ü‚·B + ‘½‚­‚̃Rƒ}ƒ“ƒh‚̓IƒyƒŒ[ƒ^‚ƃ‚[ƒVƒ‡ƒ“‚©‚çƒeƒLƒXƒg‚É•ÏX‚ð‰Á‚¦‚Ü‚·B 휃Rƒ}ƒ“ƒh d ‚̃IƒyƒŒ[ƒ^‚ÍŽŸ‚Ì—l‚ɂȂÁ‚Ä‚¢‚Ü‚·: d ƒ‚[ƒVƒ‡ƒ“ @@ -259,7 +259,7 @@ NOTE: 1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽs‚Ìæ“ª‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µ‚Ü‚·B - 2. 2dw ‚ðƒ^ƒCƒv‚µ‚Ä’PŒê2‚•ªˆÚ“®‚µ‚Ü‚·B + 2. 2dw ‚ðƒ^ƒCƒv‚µ‚Ä’PŒê2‚•ªíœ‚µ‚Ü‚·B 3. 3e ‚ðƒ^ƒCƒv‚µ‚Ä3‚–ڂ̒PŒê‚ÌI’[‚Ɉړ®‚µ‚Ü‚·B @@ -326,8 +326,8 @@ NOTE: ** ÅŒã‚̃Rƒ}ƒ“ƒh‚ðŽæ‚èÁ‚·‚É‚Í u ‚ð‰Ÿ‚µ‚Ü‚·BU ‚Ís‘S‘̂̎æÁ‚Å‚·B ** - 1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µAʼn‚̊ԈႢ‚ɃJ[ƒ\ - ƒ‹‚ðˆÚ“®‚µ‚Ü‚µ‚傤B + 1. ˆÈ‰º‚Ì ---> ‚ÆŽ¦‚³‚ꂽs‚ɃJ[ƒ\ƒ‹‚ðˆÚ“®‚µAʼn‚̊ԈႢ‚ɃJ[ƒ\ƒ‹ + ‚ðˆÚ“®‚µ‚Ü‚µ‚傤B 2. x ‚ðƒ^ƒCƒv‚µ‚Ä‚¢‚ç‚È‚¢æ“ª‚Ì•¶Žš‚ð휂µ‚Ü‚µ‚傤B 3. ‚³‚ŸAu ‚ðƒ^ƒCƒv‚µ‚ÄÅŒã‚ÉŽÀs‚µ‚½ƒRƒ}ƒ“ƒh‚ðŽæ‚èÁ‚µ‚Ü‚µ‚傤B 4. ¡“x‚ÍAx ‚ðŽg—p‚µ‚ÄŒë‚è‚ð‘S‚ÄC³‚µ‚Ü‚µ‚傤B diff --git a/runtime/tutor/tutor.ja.utf-8 b/runtime/tutor/tutor.ja.utf-8 index 95e108efe6..a620cd57a3 100644 --- a/runtime/tutor/tutor.ja.utf-8 +++ b/runtime/tutor/tutor.ja.utf-8 @@ -117,7 +117,7 @@ NOTE: å…¨ã¦ã®ãƒ¬ãƒƒã‚¹ãƒ³ã‚’通ã˜ã¦ã€è¦šãˆã‚ˆã†ã¨ã™ã‚‹ã®ã§ã¯ãªã レッスン 1.5: テキスト編集 - 追加 - ** テキスト追加ã™ã‚‹ã«ã¯ A を押ã—ã¾ã—ょㆠ** + ** テキストを追加ã™ã‚‹ã«ã¯ A を押ã—ã¾ã—ょㆠ** 1. 以下㮠---> ã¨ç¤ºã•ã‚ŒãŸæœ€åˆã®è¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã—ょã†ã€‚ カーソルãŒãã®æ–‡å­—上ã«ã‚ã£ã¦ã‚‚ã‹ã¾ã„ã¾ã›ã‚“。 @@ -232,7 +232,7 @@ NOTE: キーを押ã™ã¨ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ç§»è¡Œã—ã¾ã™ã€‚ã㮠レッスン 2.3: オペレータã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ - 多ãã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›´ã‚’加ã¾ã™ã€‚ + 多ãã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã‹ã‚‰ãƒ†ã‚­ã‚¹ãƒˆã«å¤‰æ›´ã‚’加ãˆã¾ã™ã€‚ 削除コマンド d ã®ã‚ªãƒšãƒ¬ãƒ¼ã‚¿ã¯æ¬¡ã®æ§˜ã«ãªã£ã¦ã„ã¾ã™: d モーション @@ -259,7 +259,7 @@ NOTE: 冒険ã—ãŸã„人ã¯ã€ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«ã¦ã‚³ãƒžãƒ³ãƒ‰ãªã—ã« 1. 以下㮠---> ã¨ç¤ºã•れãŸè¡Œã®å…ˆé ­ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã¾ã™ã€‚ - 2. 2dw をタイプã—ã¦å˜èªž2ã¤åˆ†ç§»å‹•ã—ã¾ã™ã€‚ + 2. 2dw をタイプã—ã¦å˜èªž2ã¤åˆ†å‰Šé™¤ã—ã¾ã™ã€‚ 3. 3e をタイプã—ã¦3ã¤ç›®ã®å˜èªžã®çµ‚端ã«ç§»å‹•ã—ã¾ã™ã€‚ @@ -326,8 +326,8 @@ NOTE: オペレータ d ã¨ãƒ¢ãƒ¼ã‚·ãƒ§ãƒ³ã®é–“ã«ã‚«ã‚¦ãƒ³ãƒˆã‚’使ã£ãŸå ´ ** 最後ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã™ã«ã¯ u を押ã—ã¾ã™ã€‚U ã¯è¡Œå…¨ä½“ã®å–消ã§ã™ã€‚ ** - 1. 以下㮠---> ã¨ç¤ºã•れãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€æœ€åˆã®é–“é•ã„ã«ã‚«ãƒ¼ã‚½ - ルを移動ã—ã¾ã—ょã†ã€‚ + 1. 以下㮠---> ã¨ç¤ºã•れãŸè¡Œã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã—ã€æœ€åˆã®é–“é•ã„ã«ã‚«ãƒ¼ã‚½ãƒ« + を移動ã—ã¾ã—ょã†ã€‚ 2. x をタイプã—ã¦ã„らãªã„å…ˆé ­ã®æ–‡å­—を削除ã—ã¾ã—ょã†ã€‚ 3. ã•ãã€u をタイプã—ã¦æœ€å¾Œã«å®Ÿè¡Œã—ãŸã‚³ãƒžãƒ³ãƒ‰ã‚’å–り消ã—ã¾ã—ょã†ã€‚ 4. 今度ã¯ã€x を使用ã—ã¦èª¤ã‚Šã‚’å…¨ã¦ä¿®æ­£ã—ã¾ã—ょã†ã€‚ diff --git a/runtime/tutor/tutor.ko.euc b/runtime/tutor/tutor.ko.euc index ddfc5ac810..95282f86ee 100644 --- a/runtime/tutor/tutor.ko.euc +++ b/runtime/tutor/tutor.ko.euc @@ -551,7 +551,7 @@ cw ** ÆÄÀÏÀÇ ÀϺθ¦ ÀúÀåÇÏ·Á¸é, :#,# w FILENAME ÇϽʽÿÀ. ** - 1. ´Ù½Ã Çѹø, :!dir À̳ª !ls ¸¦ ÀÔ·ÂÇÏ¿© µð·ºÅ丮ÀÇ ¸ñ·ÏÀ» ¹Þ¾Æ¿Â ÈÄ + 1. ´Ù½Ã Çѹø, :!dir À̳ª :!ls ¸¦ ÀÔ·ÂÇÏ¿© µð·ºÅ丮ÀÇ ¸ñ·ÏÀ» ¹Þ¾Æ¿Â ÈÄ TEST °°Àº ÀûÇÕÇÑ À̸§À» ¼±ÅÃÇÕ´Ï´Ù. 2. Ä¿¼­¸¦ ÀÌ ÆäÀÌÁöÀÇ Ã³À½À¸·Î ¿Å±ä ÈÄ, Ctrl-g ¸¦ ÀÔ·ÂÇÏ¿© ±× ÁÙÀÇ ÁÙ¹øÈ£¸¦ diff --git a/runtime/tutor/tutor.ko.utf-8 b/runtime/tutor/tutor.ko.utf-8 index 4498c9f6d1..f19ce7539e 100644 --- a/runtime/tutor/tutor.ko.utf-8 +++ b/runtime/tutor/tutor.ko.utf-8 @@ -551,7 +551,7 @@ cw 는 단어를 치환하는 것 ë¿ë§Œ 아니ë¼, ë‚´ìš©ì„ ì‚½ìž…í•  수 있 ** 파ì¼ì˜ ì¼ë¶€ë¥¼ 저장하려면, :#,# w FILENAME 하십시오. ** - 1. 다시 한번, :!dir ì´ë‚˜ !ls 를 입력하여 ë””ë ‰í† ë¦¬ì˜ ëª©ë¡ì„ 받아온 후 + 1. 다시 한번, :!dir ì´ë‚˜ :!ls 를 입력하여 ë””ë ‰í† ë¦¬ì˜ ëª©ë¡ì„ 받아온 후 TEST ê°™ì€ ì í•©í•œ ì´ë¦„ì„ ì„ íƒí•©ë‹ˆë‹¤. 2. 커서를 ì´ íŽ˜ì´ì§€ì˜ 처ìŒìœ¼ë¡œ 옮긴 후, Ctrl-g 를 입력하여 ê·¸ ì¤„ì˜ ì¤„ë²ˆí˜¸ë¥¼ diff --git a/runtime/tutor/tutor.nb b/runtime/tutor/tutor.nb index 17178df785..2f1d14c290 100644 --- a/runtime/tutor/tutor.nb +++ b/runtime/tutor/tutor.nb @@ -658,7 +658,7 @@ Merk: Hvis du n 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller at du ser :'<,'>w TEST før du trykker Enter. - 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller !ls + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for diff --git a/runtime/tutor/tutor.nb.utf-8 b/runtime/tutor/tutor.nb.utf-8 index a7826b7830..f9d49c2a24 100644 --- a/runtime/tutor/tutor.nb.utf-8 +++ b/runtime/tutor/tutor.nb.utf-8 @@ -658,7 +658,7 @@ Merk: Hvis du nÃ¥ hadde avsluttet Vim og startet pÃ¥ nytt igjen med «vim TEST» 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller at du ser :'<,'>w TEST før du trykker Enter. - 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller !ls + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. MERK: Ved Ã¥ trykke v startes visuelt valg. Du kan flytte markøren rundt for diff --git a/runtime/tutor/tutor.no b/runtime/tutor/tutor.no index 17178df785..2f1d14c290 100644 --- a/runtime/tutor/tutor.no +++ b/runtime/tutor/tutor.no @@ -658,7 +658,7 @@ Merk: Hvis du n 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller at du ser :'<,'>w TEST før du trykker Enter. - 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller !ls + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for diff --git a/runtime/tutor/tutor.no.utf-8 b/runtime/tutor/tutor.no.utf-8 index a7826b7830..f9d49c2a24 100644 --- a/runtime/tutor/tutor.no.utf-8 +++ b/runtime/tutor/tutor.no.utf-8 @@ -658,7 +658,7 @@ Merk: Hvis du nÃ¥ hadde avsluttet Vim og startet pÃ¥ nytt igjen med «vim TEST» 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller at du ser :'<,'>w TEST før du trykker Enter. - 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller !ls + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. MERK: Ved Ã¥ trykke v startes visuelt valg. Du kan flytte markøren rundt for diff --git a/runtime/tutor/tutor.sk b/runtime/tutor/tutor.sk index 2291aad61d..bae139837a 100644 --- a/runtime/tutor/tutor.sk +++ b/runtime/tutor/tutor.sk @@ -671,7 +671,7 @@ Pozn 4. Napí¹ w TEST , kde TEST je meno súboru, ktorý zatial neexistuje. Skontroluj, e vidí¹ :'<,'>w TEST predtým ne¾ stlaèí¹ Enter. - 5. Vim zapí¹e oznaèené riadky do súboru TEST. Pou¾i :!dir alebo !ls + 5. Vim zapí¹e oznaèené riadky do súboru TEST. Pou¾i :!dir alebo :!ls pre overenie. Zatial ho e¹te nema¾! Pou¾ijeme ho v ïal¹ej lekcii. POZNÁMKA: Stlaèením klávesy v sa spustí vizuálne oznaèovanie. diff --git a/runtime/tutor/tutor.sk.cp1250 b/runtime/tutor/tutor.sk.cp1250 index f32c9b12a3..c4e7b3d3ea 100644 --- a/runtime/tutor/tutor.sk.cp1250 +++ b/runtime/tutor/tutor.sk.cp1250 @@ -671,7 +671,7 @@ Pozn 4. Napíš w TEST , kde TEST je meno súboru, ktorý zatial neexistuje. Skontroluj, e vidíš :'<,'>w TEST predtým než stlaèíš Enter. - 5. Vim zapíše oznaèené riadky do súboru TEST. Použi :!dir alebo !ls + 5. Vim zapíše oznaèené riadky do súboru TEST. Použi :!dir alebo :!ls pre overenie. Zatial ho ešte nemaž! Použijeme ho v ïalšej lekcii. POZNÁMKA: Stlaèením klávesy v sa spustí vizuálne oznaèovanie. diff --git a/runtime/tutor/tutor.sk.utf-8 b/runtime/tutor/tutor.sk.utf-8 index c4e0c4f5d8..51c5b4f181 100644 --- a/runtime/tutor/tutor.sk.utf-8 +++ b/runtime/tutor/tutor.sk.utf-8 @@ -671,7 +671,7 @@ Poznámka: že ak ukonÄíš prácu s editorom Vim a znovu ho spustíš príkazo 4. Napíš w TEST , kde TEST je meno súboru, ktorý zatial neexistuje. Skontroluj, e vidíš :'<,'>w TEST predtým než stlaÄíš Enter. - 5. Vim zapíše oznaÄené riadky do súboru TEST. Použi :!dir alebo !ls + 5. Vim zapíše oznaÄené riadky do súboru TEST. Použi :!dir alebo :!ls pre overenie. Zatial ho eÅ¡te nemaž! Použijeme ho v ÄalÅ¡ej lekcii. POZNÃMKA: StlaÄením klávesy v sa spustí vizuálne oznaÄovanie. diff --git a/runtime/tutor/tutor.utf-8 b/runtime/tutor/tutor.utf-8 index daf42b6bb2..da28a15313 100644 --- a/runtime/tutor/tutor.utf-8 +++ b/runtime/tutor/tutor.utf-8 @@ -658,7 +658,7 @@ NOTE: If you were to exit Vim and start it again with vim TEST , the file 4. Type w TEST , where TEST is a filename that does not exist yet. Verify that you see :'<,'>w TEST before you press . - 5. Vim will write the selected lines to the file TEST. Use :!dir or !ls + 5. Vim will write the selected lines to the file TEST. Use :!dir or :!ls to see it. Do not remove it yet! We will use it in the next lesson. NOTE: Pressing v starts Visual selection. You can move the cursor around diff --git a/runtime/tutor/tutor.zh.euc b/runtime/tutor/tutor.zh.euc index 7f80f690b9..df59c32089 100644 --- a/runtime/tutor/tutor.zh.euc +++ b/runtime/tutor/tutor.zh.euc @@ -1,30 +1,32 @@ =============================================================================== -= »¶ Ó­ ÔÄ ¶Á ¡¶ V I M ½Ì ³Ì ¡· ¡ª¡ª °æ±¾ 1.5 = += »¶ Ó­ ÔÄ ¶Á ¡¶ V I M ½Ì ³Ì ¡· ¡ª¡ª °æ±¾ 1.7 = =============================================================================== - vim ÊÇÒ»¸ö¾ßÓкܶàÃüÁîµÄ¹¦Äܷdz£Ç¿´óµÄ±à¼­Æ÷¡£ÏÞÓÚÆª·ù£¬ÔÚ±¾½Ì³Ìµ±ÖÐ + + Vim ÊÇÒ»¸ö¾ßÓкܶàÃüÁîµÄ¹¦Äܷdz£Ç¿´óµÄ±à¼­Æ÷¡£ÏÞÓÚÆª·ù£¬ÔÚ±¾½Ì³Ìµ±ÖÐ ¾Í²»Ïêϸ½éÉÜÁË¡£±¾½Ì³ÌµÄÉè¼ÆÄ¿±êÊǽ²ÊöһЩ±ØÒªµÄ»ù±¾ÃüÁ¶øÕÆÎÕºÃÕâ - ЩÃüÁÄú¾ÍÄܹ»ºÜÈÝÒ×½«vimµ±×÷Ò»¸öͨÓõÄÍòÄܱ༭Æ÷À´Ê¹ÓÃÁË¡£ + ЩÃüÁÄú¾ÍÄܹ»ºÜÈÝÒ׵ؽ« Vim µ±×÷Ò»¸öͨÓñ༭Æ÷À´Ê¹ÓÃÁË¡£ Íê³É±¾½Ì³ÌµÄÄÚÈÝ´óÔ¼ÐèÒª25-30·ÖÖÓ£¬È¡¾öÓÚÄúѵÁ·µÄʱ¼ä¡£ + ×¢Ò⣺ ÿһ½ÚµÄÃüÁî²Ù×÷½«»á¸ü¸Ä±¾ÎÄ¡£ÍƼöÄú¸´ÖƱ¾ÎĵÄÒ»¸ö¸±±¾£¬È»ºóÔÚ¸±±¾ÉÏ ½øÐÐѵÁ·(Èç¹ûÄúÊÇͨ¹ý"vimtutor"À´Æô¶¯½Ì³ÌµÄ£¬ÄÇô±¾ÎľÍÒѾ­ÊǸ±±¾ÁË)¡£ - ÇмÇÒ»µã¡Ã±¾½Ì³ÌµÄÉè¼ÆË¼Â·ÊÇÔÚʹÓÃÖнøÐÐѧϰµÄ¡£Ò²¾ÍÊÇ˵£¬ÄúÐèҪͨ¹ý + ÇмÇÒ»µã£º±¾½Ì³ÌµÄÉè¼ÆË¼Â·ÊÇÔÚʹÓÃÖнøÐÐѧϰµÄ¡£Ò²¾ÍÊÇ˵£¬ÄúÐèҪͨ¹ý Ö´ÐÐÃüÁîÀ´Ñ§Ï°ËüÃDZ¾ÉíµÄÕýÈ·Ó÷¨¡£Èç¹ûÄúÖ»ÊÇÔĶÁ¶ø²»²Ù×÷£¬ÄÇôÄú¿ÉÄÜ »áºÜ¿ìÒÅÍüÕâЩÃüÁîµÄ£¡ ºÃÁË£¬ÏÖÔÚÇëÈ·¶¨ÄúµÄShift-Lock(´óÐ¡Ð´Ëø¶¨¼ü)»¹Ã»Óа´Ï£¬È»ºó°´¼üÅÌÉÏ - µÄ×Öĸ¼ü j ×ã¹»¶àµÄ´ÎÊýÀ´Òƶ¯¹â±ê£¬Ö±µ½µÚÒ»½ÚµÄÄÚÈÝÄܹ»ÍêÈ«³äÂúÆÁÄ»¡£ + µÄ×Öĸ¼ü j ×ã¹»¶à´ÎÀ´Òƶ¯¹â±ê£¬Ö±µ½µÚÒ»½ÚµÄÄÚÈÝÄܹ»ÍêÈ«³äÂúÆÁÄ»¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÒ»½²µÚÒ»½Ú¡ÃÒÆ¶¯¹â±ê + µÚÒ»½²µÚÒ»½Ú£ºÒƶ¯¹â±ê - ¡ù¡ù ÒªÒÆ¶¯¹â±ê£¬ÇëÒÀÕÕ˵Ã÷·Ö±ð°´Ï h¡¢j¡¢k¡¢l ¼ü¡£ ¡ù¡ù + ** ÒªÒÆ¶¯¹â±ê£¬ÇëÒÀÕÕ˵Ã÷·Ö±ð°´Ï h¡¢j¡¢k¡¢l ¼ü¡£ ** ^ - k Ìáʾ¡Ã h µÄ¼üλÓÚ×ó±ß£¬Ã¿´Î°´Ï¾ͻáÏò×óÒÆ¶¯¡£ + k Ìáʾ£º h µÄ¼üλÓÚ×ó±ß£¬Ã¿´Î°´Ï¾ͻáÏò×óÒÆ¶¯¡£ < h l > l µÄ¼üλÓÚÓұߣ¬Ã¿´Î°´Ï¾ͻáÏòÓÒÒÆ¶¯¡£ j j ¼ü¿´ÆðÀ´ºÜÏóÒ»Ö§¼â¶Ë·½Ïò³¯ÏµļýÍ·¡£ v @@ -35,43 +37,38 @@ ---> ÏÖÔÚÄúÓ¦¸ÃÒѾ­Ñ§»áÈçºÎÒÆ¶¯µ½ÏÂÒ»½²°É¡£ - 3. ÏÖÔÚÇëʹÓÃÏÂÐмü£¬½«¹â±êÒÆ¶¯µ½µÚ¶þ½²¡£ + 3. ÏÖÔÚÇëʹÓÃÏÂÐмü£¬½«¹â±êÒÆ¶¯µ½µÚÒ»½²µÚ¶þ½Ú¡£ -Ìáʾ¡ÃÈç¹ûÄú²»¸ÒÈ·¶¨ÄúËù°´ÏµÄ×Öĸ£¬Ç밴ϼü»Øµ½Õý³£(Normal)ģʽ¡£ +Ìáʾ£ºÈç¹ûÄú²»¸ÒÈ·¶¨ÄúËù°´ÏµÄ×Öĸ£¬Ç밴ϼü»Øµ½Õý³£(Normal)ģʽ¡£ È»ºóÔٴδӼüÅÌÊäÈëÄúÏëÒªµÄÃüÁî¡£ -Ìáʾ¡Ã¹â±ê¼üÓ¦µ±Ò²ÄÜÕý³£¹¤×÷µÄ¡£µ«ÊÇʹÓÃhjkl¼ü£¬ÔÚϰ¹ßÖ®ºóÄú¾ÍÄܹ»¿ìËÙ - µØÔÚÆÁÄ»ÄÚËÄ´¦Òƶ¯¹â±êÁË¡£ +Ìáʾ£º¹â±ê¼üÓ¦µ±Ò²ÄÜÕý³£¹¤×÷µÄ¡£µ«ÊÇʹÓÃhjkl¼ü£¬ÔÚϰ¹ßÖ®ºóÄú¾ÍÄܹ»¸ü¿ì + µØÔÚÆÁÄ»ÄÚËÄ´¦Òƶ¯¹â±ê¡£ÕæµÄÊÇÕâÑù£¡ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÒ»½²µÚ¶þ½Ú¡ÃVIMµÄ½øÈëºÍÍ˳ö + µÚÒ»½²µÚ¶þ½Ú£ºVIMµÄ½øÈëºÍÍ˳ö - !! ÌØ±ðÌáʾ¡Ã¾´ÇëÔĶÁÍêÕû±¾Ò»½ÚµÄÄÚÈÝ£¬È»ºó²ÅÄÜÖ´ÐÐÒÔÏÂËù½²½âµÄÃüÁî¡£ + !! ÌØ±ðÌáʾ£º¾´ÇëÔĶÁ±¾Ò»½ÚµÄÍêÕûÄÚÈÝ£¬È»ºóÔÙÖ´ÐÐÒÔÏÂËù½²½âµÄÃüÁî¡£ - 1. Çë°´¼ü(ÕâÊÇΪÁËÈ·±£Äú´¦ÔÚÕý³£Ä£Ê½)¡£ + 1. °´¼ü(ÕâÊÇΪÁËÈ·±£Äú´¦ÔÚÕý³£Ä£Ê½)¡£ - 2. È»ºóÊäÈë¡Ã :q! <»Ø³µ> + 2. È»ºóÊäÈ룺 :q! <»Ø³µ> + ÕâÖÖ·½Ê½µÄÍ˳ö±à¼­Æ÷»á¶ªÆúÄú½øÈë±à¼­Æ÷ÒÔÀ´Ëù×öµÄ¸Ä¶¯¡£ ----> ÕâÖÖ·½Ê½µÄÍ˳ö±à¼­Æ÷¾ø²»»á±£´æÄú½øÈë±à¼­Æ÷ÒÔÀ´Ëù×öµÄ¸Ä¶¯¡£ - Èç¹ûÄúÏë±£´æ¸ü¸ÄÔÙÍ˳ö£¬ÇëÊäÈë¡Ã - :wq <»Ø³µ> - - 3. Èç¹ûÄú¿´µ½ÁËÃüÁîÐÐÌáʾ·û£¬ÇëÊäÈëÄܹ»´øÄú»Øµ½±¾½Ì³ÌµÄÃüÁÄǾÍÊǡà - - vimtutor <»Ø³µ> - - ͨ³£Çé¿öÏÂÄúÒ²¿ÉÒÔÓÃÕâÖÖ·½Ê½¡Ã - - vim tutor <»Ø³µ> - ----> ÕâÀïµÄ 'vim' ±íʾ½øÈëvim±à¼­Æ÷£¬¶ø 'tutor'ÔòÊÇÄú×¼±¸Òª±à¼­µÄÎļþ¡£ + 3. Èç¹ûÄú¿´µ½ÁËÃüÁîÐÐÌáʾ·û£¬ÇëÊäÈëÄܹ»´øÄú»Øµ½±¾½Ì³ÌµÄÃüÁÄǾÍÊÇ£º + vimtutor <»Ø³µ> 4. Èç¹ûÄú×ÔÐÅÒѾ­ÀÎÀμÇסÁËÕâЩ²½ÖèµÄ»°£¬Çë´Ó²½Öè1Ö´Ðе½²½Öè3Í˳ö£¬È» - ºóÔٴνøÈë±à¼­Æ÷¡£½Ó׎«¹â±êÒÆ¶¯µ½µÚÒ»½²µÚÈý½ÚÀ´¼ÌÐøÎÒÃǵĽ̳̽²½â¡£ + ºóÔٴνøÈë±à¼­Æ÷¡£ + +Ìáʾ£º :q! <»Ø³µ> »á¶ªÆúÄúËù×öµÄÈκθ͝¡£¼¸½²Ö®ºóÄú½«Ñ§»áÈçºÎ±£´æ¸Ä¶¯µ½Îļþ¡£ + + 5. ½«¹â±êÏÂÒÆµ½µÚÒ»½²µÚÈý½Ú¡£ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÒ»½²µÚÈý½Ú¡ÃÎı¾±à¼­Ö®É¾³ý + µÚÒ»½²µÚÈý½Ú£ºÎı¾±à¼­Ö®É¾³ý ** ÔÚÕý³£(Normal)ģʽÏ£¬¿ÉÒÔ°´Ï x ¼üÀ´É¾³ý¹â±êËùÔÚλÖõÄ×Ö·û¡£** @@ -86,35 +83,79 @@ ---> The ccow jumpedd ovverr thhe mooon. - 5. ºÃÁË£¬¸ÃÐÐÒѾ­ÐÞÕýÁË£¬ÏÂÒ»½ÚÄÚÈÝÊǵÚÒ»½²µÚËĽڡ£ + 5. ºÃÁË£¬¸ÃÐÐÒѾ­ÐÞÕýÁË£¬ÏÂÃæÊǵÚÒ»½²µÚËĽڡ£ -ÌØ±ðÌáʾ¡ÃÔÚÄúä¯ÀÀ±¾½Ì³Ìʱ£¬²»ÒªÇ¿ÐмÇÒä¡£¼Çסһµã¡ÃÔÚʹÓÃÖÐѧϰ¡£ +ÌØ±ðÌáʾ£ºÔÚä¯ÀÀ±¾½Ì³Ìʱ£¬²»ÒªÇ¿ÐмÇÒä¡£¼Çסһµã£ºÔÚʹÓÃÖÐѧϰ¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÒ»½²µÚËĽڡÃÎı¾±à¼­Ö®²åÈë + µÚÒ»½²µÚËĽڣºÎı¾±à¼­Ö®²åÈë ** ÔÚÕý³£Ä£Ê½Ï£¬¿ÉÒÔ°´Ï i ¼üÀ´²åÈëÎı¾¡£** 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£ - 2. ΪÁËʹµÃµÚÒ»ÐÐÄÚÈÝÀ×ͬÓÚµÚ¶þÐУ¬Ç뽫¹â±êÒÆÖÁÎı¾µÚÒ»¸ö×Ö·û×¼±¸²åÈë + 2. ΪÁËʹµÃµÚÒ»ÐÐÄÚÈÝÀ×ͬÓÚµÚ¶þÐУ¬Ç뽫¹â±êÒÆÖÁÎı¾µÚÒ»¸ö×¼±¸²åÈë×Ö·û µÄλÖᣠ3. È»ºó°´Ï i ¼ü£¬½Ó×ÅÊäÈë±ØÒªµÄÎı¾×Ö·û¡£ - 4. ËùÓÐÎı¾¶¼ÐÞÕýÍê±Ï£¬Çë°´Ï ¼ü·µ»ØÕý³£Ä£Ê½¡£ + 4. ÿ¸ö´íÎóÐÞÕýÍê±Ïºó£¬Çë°´Ï ¼ü·µ»ØÕý³£Ä£Ê½¡£ ÖØ¸´²½Öè2ÖÁ²½Öè4ÒÔ±ãÐÞÕý¾ä×Ó¡£ ---> There is text misng this . ---> There is some text missing from this line. - 5. Èç¹ûÄú¶ÔÎı¾²åÈë²Ù×÷ÒѾ­ºÜÂúÒ⣬Çë½Ó×ÅÔĶÁÏÂÃæµÄС½á¡£ + 5. Èç¹ûÄú¶ÔÎı¾²åÈë²Ù×÷ÒѾ­ºÜÂúÒ⣬Çë½Ó×ÅÔĶÁÏÂÃæµÄµÚÒ»½²µÚÎå½Ú¡£ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÒ»½²µÚÎå½Ú£ºÎı¾±à¼­Ö®Ìí¼Ó + + + ** °´ A ¼üÒÔÌí¼ÓÎı¾¡£ ** + + 1. ÒÆ¶¯¹â±êµ½ÏÂÃæµÚÒ»¸ö±ê¼ÇÓÐ ---> µÄÒ»ÐС£ + ¹â±ê·ÅÔÚÄÇÒ»ÐеÄÄĸö×Ö·ûÉϲ¢²»ÖØÒª¡£ + + 2. °´ A ¼üÊäÈë±ØÒªµÄÌí¼ÓÄÚÈÝ¡£ + + 3. Îı¾Ìí¼ÓÍê±Ïºó£¬°´ ¼ü»Øµ½Õý³£Ä£Ê½¡£ + + 4. ÒÆ¶¯¹â±êµ½ÏÂÃæµÚ¶þ¸ö±ê¼ÇÓÐ ---> µÄÒ»ÐС£Öظ´²½Öè2ºÍ²½Öè3ÒÔ¸ÄÕýÕâ¸ö¾ä×Ó¡£ + +---> There is some text missing from th + There is some text missing from this line. +---> There is also some text miss + There is also some text missing here. + + 5. µ±Äú¶ÔÌí¼ÓÎı¾²Ù×÷¸Ðµ½ÂúÒâʱ£¬Çë¼ÌÐøÑ§Ï°µÚÒ»½²µÚÁù½Ú¡£ + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÒ»½²µÚÁù½Ú£º±à¼­Îļþ + + ** ʹÓà :wq ÒÔ±£´æÎļþ²¢Í˳ö¡£ ** + + ÌØ±ðÌáʾ£ºÔÚÖ´ÐÐÒÔϲ½Öè֮ǰ£¬ÇëÏȶÁÍêÕû¸öС½Ú£¡ + + 1. ÈçÄúÔÚµÚÒ»½²µÚ¶þ½ÚÖÐËù×öµÄÄÇÑùÍ˳ö±¾½Ì³Ì£º :q! + »òÕߣ¬Èç¹ûÄú¿ÉÒÔ·ÃÎÊÁíÒ»¸öÖÕ¶Ë£¬ÇëÔÚÄÇÀïÖ´ÐÐÒÔϲÙ×÷¡£ + + 2. ÔÚ shell µÄÌáʾ·ûÏÂÊäÈëÃüÁ vim tutor <»Ø³µ> + 'vim'ÊÇÆô¶¯ Vim ±à¼­Æ÷µÄÃüÁ'tutor'ÊÇÄúÏ£Íû±à¼­µÄÎļþµÄÃû×Ö¡£ + ÇëʹÓÃÒ»¸ö¿ÉÒԸ͝µÄÎļþ¡£ + + 3. ʹÓÃÄúÔÚÇ°ÃæµÄ½Ì³ÌÖÐѧµ½µÄÃüÁî²åÈëɾ³ýÎı¾¡£ + + 4. ±£´æ¸Ä¶¯¹ýµÄÎļþ²¢Í˳ö Vim£¬°´ÕâЩ¼ü£º :wq <»Ø³µ> + + 5. Èç¹ûÄúÔÚ²½Öè1ÖÐÒѾ­Í˳ö vimtutor£¬ÇëÖØÆô vimtutor ÒÆ¶¯µ½ÏÂÃæµÄС½áÒ»½Ú¡£ + + 6. ÔĶÁÍêÒÔÉϲ½Ö裬Ū¶®ËüÃǵÄÒâÒ壬ȻºóÔÚʵ¼ùÖнøÐÐÁ·Ï°¡£ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ µÚÒ»½²Ð¡½á @@ -122,53 +163,50 @@ 1. ¹â±êÔÚÆÁÄ»Îı¾ÖеÄÒÆ¶¯¼È¿ÉÒÔÓüýÍ·¼ü£¬Ò²¿ÉÒÔʹÓà hjkl ×Öĸ¼ü¡£ h (×óÒÆ) j (ÏÂÐÐ) k (ÉÏÐÐ) l (ÓÒÒÆ) - 2. Óû½øÈëvim±à¼­Æ÷(´ÓÃüÁîÐÐÌáʾ·û)£¬ÇëÊäÈë¡Ãvim ÎļþÃû <»Ø³µ> + 2. Óû½øÈë Vim ±à¼­Æ÷(´ÓÃüÁîÐÐÌáʾ·û)£¬ÇëÊäÈ룺vim ÎļþÃû <»Ø³µ> - 3. ÓûÍ˳övim±à¼­Æ÷£¬ÇëÊäÈëÒÔÏÂÃüÁî·ÅÆúËùÓÐÐ޸ġà + 3. ÓûÍ˳ö Vim ±à¼­Æ÷£¬ÇëÊäÈë :q! <»Ø³µ> ·ÅÆúËùÓи͝¡£ + »òÕßÊäÈë :wq <»Ø³µ> ±£´æ¸Ä¶¯¡£ - :q! <»Ø³µ> + 4. ÔÚÕý³£Ä£Ê½ÏÂɾ³ý¹â±êËùÔÚλÖõÄ×Ö·û£¬Çë°´£º x - »òÕßÊäÈëÒÔÏÂÃüÁî±£´æËùÓÐÐ޸ġà + 5. Óû²åÈë»òÌí¼ÓÎı¾£¬ÇëÊäÈ룺 - :wq <»Ø³µ> + i ÊäÈëÓû²åÈëÎı¾ ÔÚ¹â±êǰ²åÈëÎı¾ + A ÊäÈëÓûÌí¼ÓÎı¾ ÔÚÒ»ÐкóÌí¼ÓÎı¾ - 4. ÔÚÕý³£Ä£Ê½ÏÂɾ³ý¹â±êËùÔÚλÖõÄ×Ö·û£¬Çë°´¡Ã x - - 5. ÔÚÕý³£Ä£Ê½ÏÂÒªÔÚ¹â±êËùÔÚλÖÿªÊ¼²åÈëÎı¾£¬Çë°´¡Ã - - i ÊäÈë±ØÒªÎı¾ - -ÌØ±ðÌáʾ¡Ã°´Ï ¼ü»á´øÄú»Øµ½Õý³£Ä£Ê½»òÕßÈ¡ÏûÒ»¸ö²»ÆÚÍû»òÕß²¿·ÖÍê³É +ÌØ±ðÌáʾ£º°´Ï ¼ü»á´øÄú»Øµ½Õý³£Ä£Ê½»òÕß³·ÏûÒ»¸ö²»ÏëÊäÈë»ò²¿·ÖÍêÕû µÄÃüÁî¡£ ºÃÁË£¬µÚÒ»½²µ½´Ë½áÊø¡£ÏÂÃæ½ÓÏÂÀ´¼ÌÐøµÚ¶þ½²µÄÄÚÈÝ¡£ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ¶þ½²µÚÒ»½Ú¡Ãɾ³ýÀàÃüÁî + µÚ¶þ½²µÚÒ»½Ú£ºÉ¾³ýÀàÃüÁî - ** ÊäÈë dw ¿ÉÒÔ´Ó¹â±ê´¦É¾³ýÖÁÒ»¸öµ¥×Ö/µ¥´ÊµÄĩβ¡£** + ** ÊäÈë dw ¿ÉÒÔ´Ó¹â±ê´¦É¾³ýÖÁÒ»¸öµ¥´ÊµÄĩβ¡£** 1. Çë°´Ï ¼üÈ·±£Äú´¦ÓÚÕý³£Ä£Ê½¡£ 2. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄÄÇÒ»ÐС£ - 3. Ç뽫¹â±êÒÆÖÁ×¼±¸ÒªÉ¾³ýµÄµ¥´ÊµÄ¿ªÊ¼¡£ + 3. Ç뽫¹â±êÒÆÖÁ×¼±¸ÒªÉ¾³ýµÄµ¥´ÊµÄÆðʼ´¦¡£ 4. ½Ó×ÅÊäÈë dw ɾ³ýµô¸Ãµ¥´Ê¡£ - ÌØ±ðÌáʾ¡ÃÄúËùÊäÈëµÄ dw »áÔÚÄúÊäÈëµÄͬʱ³öÏÖÔÚÆÁÄ»µÄ×îºóÒ»ÐС£Èç¹ûÄúÊä - ÈëÓÐÎó£¬Çë°´Ï ¼üÈ¡Ïû£¬È»ºóÖØÐÂÔÙÀ´¡£ + ÌØ±ðÌáʾ£ºµ±ÄúÊäÈëʱ£¬×Öĸ d »áͬʱ³öÏÖÔÚÆÁÄ»µÄ×îºóÒ»ÐС£Vim ÔڵȴýÄúÊäÈë + ×Öĸ w¡£Èç¹ûÄú¿´µ½µÄÊdzý d ÍâµÄÆäËû×Ö·û£¬ÄDZíÃ÷Äú°´´íÁË£»Çë°´Ï ¼ü£¬ + È»ºóÖØÐÂÔÙÀ´¡£ ---> There are a some words fun that don't belong paper in this sentence. - 5. ÖØ¸´²½Öè3ÖÁ²½Öè4£¬Ö±ÖÁ¾ä×ÓÐÞÕýÍê±Ï¡£½Ó׿ÌÐøµÚ¶þ½²µÚ¶þ½ÚÄÚÈÝ¡£ - + 5. ÖØ¸´²½Öè3ºÍ²½Öè4£¬Ö±ÖÁ¾ä×ÓÐÞÕýÍê±Ï¡£½Ó׿ÌÐøµÚ¶þ½²µÚ¶þ½ÚÄÚÈÝ¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ¶þ½²µÚ¶þ½Ú¡ÃÆäËûɾ³ýÀàÃüÁî + µÚ¶þ½²µÚ¶þ½Ú£º¸ü¶àɾ³ýÀàÃüÁî ** ÊäÈë d$ ´Óµ±Ç°¹â±êɾ³ýµ½ÐÐÄ©¡£** @@ -191,58 +229,102 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ¶þ½²µÚÈý½Ú¡Ã¹ØÓÚÃüÁîºÍ¶ÔÏó + µÚ¶þ½²µÚÈý½Ú£º¹ØÓÚÃüÁîºÍ¶ÔÏó - ɾ³ýÃüÁî d µÄ¸ñʽÈçÏ¡à + Ðí¶à¸Ä±äÎı¾µÄÃüÁî¶¼ÓÉÒ»¸ö²Ù×÷·ûºÍÒ»¸ö¶¯×÷¹¹³É¡£ + ʹÓÃɾ³ý²Ù×÷·û d µÄɾ³ýÃüÁîµÄ¸ñʽÈçÏ£º - [number] d object »òÕß d [number] object + d motion - ÆäÒâÈçÏ¡à - number - ´ú±íÖ´ÐÐÃüÁîµÄ´ÎÊý(¿ÉÑ¡ÏȱʡÉèÖÃΪ 1 )¡£ - d - ´ú±íɾ³ý¡£ - object - ´ú±íÃüÁîËùÒª²Ù×÷µÄ¶ÔÏó(ÏÂÃæÓÐÏà¹Ø½éÉÜ)¡£ + ÆäÖУº + d - ɾ³ý²Ù×÷·û¡£ + motion - ²Ù×÷·ûµÄ²Ù×÷¶ÔÏó(ÔÚÏÂÃæÁгö)¡£ - Ò»¸ö¼ò¶ÌµÄ¶ÔÏóÁбí¡Ã - w - ´Óµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥×Ö/µ¥´Êĩ⣬°üÀ¨¿Õ¸ñ¡£ - e - ´Óµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥×Ö/µ¥´Êĩ⣬µ«ÊÇ *²»* °üÀ¨¿Õ¸ñ¡£ + Ò»¸ö¼ò¶ÌµÄ¶¯×÷ÁÐ±í£º + w - ´Óµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½ÏÂÒ»¸öµ¥´ÊÆðʼ´¦£¬²»°üÀ¨ËüµÄµÚÒ»¸ö×Ö·û¡£ + e - ´Óµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ¥´Êĩ⣬°üÀ¨×îºóÒ»¸ö×Ö·û¡£ $ - ´Óµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µ½µ±Ç°ÐÐÄ©¡£ -ÌØ±ðÌáʾ¡Ã - ¶ÔÓÚÓÂÓÚ̽Ë÷Õߣ¬ÇëÔÚÕý³£Ä£Ê½ÏÂÃæ½ö°´´ú±íÏàÓ¦¶ÔÏóµÄ¼ü¶ø²»Ê¹ÓÃÃüÁÔò + Òò´ËÊäÈë de »á´Óµ±Ç°¹â±êλÖÃɾ³ýµ½µ¥´Êĩβ¡£ + +ÌØ±ðÌáʾ£º + ¶ÔÓÚÓÂÓÚ̽Ë÷Õߣ¬ÇëÔÚÕý³£Ä£Ê½ÏÂÃæ½ö°´´ú±íÏàÓ¦¶¯×÷µÄ¼ü¶ø²»Ê¹ÓòÙ×÷·û£¬Äú ½«¿´µ½¹â±êµÄÒÆ¶¯ÕýÈçÉÏÃæµÄ¶ÔÏóÁбíËù´ú±íµÄÒ»Ñù¡£ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚ¶þ½²µÚËĽڣºÊ¹ÓüÆÊýÖ¸¶¨¶¯×÷ + + + ** ÔÚ¶¯×÷ǰÊäÈëÊý×Ö»áʹËüÖØ¸´ÄÇô¶à´Î¡£ ** + + 1. ÒÆ¶¯¹â±êµ½ÏÂÃæ±ê¼ÇÓÐ ---> µÄÒ»ÐеĿªÊ¼¡£ + + 2. ÊäÈë 2w ʹ¹â±êÏòÇ°ÒÆ¶¯Á½¸öµ¥´Ê¡£ + + 3. ÊäÈë 3e ʹ¹â±êÏòÇ°ÒÆ¶¯µ½µÚÈý¸öµ¥´ÊµÄĩβ¡£ + + 4. ÊäÈë 0 (Êý×ÖÁã) ÒÆ¶¯¹â±êµ½ÐÐÊס£ + + 5. ÖØ¸´²½Öè2ºÍ²½Öè3£¬³¢ÊÔ²»Í¬µÄÊý×Ö¡£ + +---> This is just a line with words you can move around in. + + 6. Çë¼ÌÐøÑ§Ï°µÚ¶þ½²µÚÎå½Ú¡£ + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚ¶þ½²µÚÎå½Ú£ºÊ¹ÓüÆÊýÒÔɾ³ý¸ü¶à + + + ** ʹÓòÙ×÷·ûʱÊäÈëÊý×Ö¿ÉÒÔʹËüÖØ¸´ÄÇô¶à´Î¡£ ** + + ÉÏÃæÒѾ­Ìáµ½¹ýɾ³ý²Ù×÷·ûºÍ¶¯×÷µÄ×éºÏ£¬Äú¿ÉÒÔÔÚ×éºÏÖж¯×÷֮ǰ²åÈëÒ»¸öÊý×ÖÒÔ + ɾ³ý¸ü¶à£º + d number(Êý×Ö) motion + + 1. ÒÆ¶¯¹â±êµ½ÏÂÃæ±ê¼ÇÓÐ ---> µÄÒ»ÐÐÖеÚÒ»¸ö´óд×Öĸµ¥´ÊÉÏ¡£ + + 2. ÊäÈë d2w ÒÔɾ³ýÁ½¸ö´óд×Öĸµ¥´Ê¡£ + + 3. ÖØ¸´²½Öè1ºÍ²½Öè2£¬Ê¹Óò»Í¬µÄÊý×ÖʹµÃÓÃÒ»¸öÃüÁî¾ÍÄÜɾ³ýÈ«²¿ÏàÁڵĴóд×Öĸ + µ¥´Ê + +---> this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ¶þ½²µÚËĽڡöÔÏóÃüÁîµÄÌØÊâÇé¿ö + µÚ¶þ½²µÚÁù½Ú£º²Ù×÷ÕûÐÐ - ** ÊäÈë dd ¿ÉÒÔɾ³ýÕûÒ»¸öµ±Ç°ÐС£ ** + ** ÊäÈë dd ¿ÉÒÔɾ³ýÕûÒ»¸öµ±Ç°ÐС£ ** - ¼øÓÚÕûÐÐɾ³ýµÄ¸ßƵ¶È£¬VIM µÄÉè¼ÆÕß¾ö¶¨Òª¼ò»¯ÕûÐÐɾ³ý£¬½öÐèÒªÔÚͬһÐÐÉÏ + ¼øÓÚÕûÐÐɾ³ýµÄ¸ßƵ¶È£¬Vi µÄÉè¼ÆÕß¾ö¶¨Òª¼ò»¯ÕûÐÐɾ³ý²Ù×÷£¬Äú½öÐèÒªÔÚͬһÐÐÉÏ »÷´òÁ½´Î d ¾Í¿ÉÒÔɾ³ýµô¹â±êËùÔÚµÄÕûÐÐÁË¡£ 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæµÄ¶Ì¾ä¶ÎÂäÖеĵڶþÐС£ 2. ÊäÈë dd ɾ³ý¸ÃÐС£ 3. È»ºóÒÆ¶¯µ½µÚËÄÐС£ - 4. ½Ó×ÅÊäÈë 2dd (»¹¼ÇµÃÇ°Ãæ½²¹ýµÄ number-command-object Âð£¿) ɾ³ýÁ½ÐС£ + 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. +---> 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. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ¶þ½²µÚÎå½Ú¡Ã³·ÏûÀàÃüÁî + µÚ¶þ½²µÚÆß½Ú£º³·ÏûÀàÃüÁî - ** ÊäÈë u À´³·Ïû×îºóÖ´ÐеÄÃüÁÊäÈë U À´ÐÞÕýÕûÐС£** + ** ÊäÈë u À´³·Ïû×îºóÖ´ÐеÄÃüÁÊäÈë U À´³·Ïû¶ÔÕûÐеÄÐ޸ġ£ ** 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄÄÇÒ»ÐУ¬²¢½«ÆäÖÃÓÚµÚÒ»¸ö´íÎó ´¦¡£ @@ -251,8 +333,8 @@ 4. Õâ´ÎҪʹÓà x ÐÞÕý±¾ÐеÄËùÓдíÎó¡£ 5. ÏÖÔÚÊäÈëÒ»¸ö´óдµÄ U £¬»Ö¸´µ½¸ÃÐеÄԭʼ״̬¡£ 6. ½Ó×Ŷà´ÎÊäÈë u ÒÔ³·Ïû U ÒÔ¼°¸üǰµÄÃüÁî¡£ - 7. È»ºó¶à´ÎÊäÈë CTRL-R (ÏȰ´Ï CTRL ¼ü²»·Å¿ª£¬½Ó×ÅÊäÈë R ¼ü) £¬ÕâÑù¾Í - ¿ÉÒÔÖ´Ðлָ´ÃüÁҲ¾ÍÊdz·Ïûµô³·ÏûÃüÁî¡£ + 7. È»ºó¶à´ÎÊäÈë CTRL-R (ÏȰ´Ï CTRL ¼ü²»·Å¿ª£¬½Ó×Ű´ R ¼ü)£¬ÕâÑù¾Í + ¿ÉÒÔÖØ×ö±»³·ÏûµÄÃüÁҲ¾ÍÊdz·Ïûµô³·ÏûÃüÁî¡£ ---> Fiix the errors oon thhis line and reeplace them witth undo. @@ -265,105 +347,105 @@ µÚ¶þ½²Ð¡½á - 1. Óû´Óµ±Ç°¹â±êɾ³ýÖÁµ¥×Ö/µ¥´Êĩ⣬ÇëÊäÈë¡Ãdw + 1. Óû´Óµ±Ç°¹â±êɾ³ýÖÁÏÂÒ»¸öµ¥´Ê£¬ÇëÊäÈ룺dw + 2. Óû´Óµ±Ç°¹â±êɾ³ýÖÁµ±Ç°ÐÐĩ⣬ÇëÊäÈ룺d$ + 3. Óûɾ³ýÕûÐУ¬ÇëÊäÈ룺dd - 2. Óû´Óµ±Ç°¹â±êɾ³ýÖÁµ±Ç°ÐÐĩ⣬ÇëÊäÈë¡Ãd$ + 4. ÓûÖØ¸´Ò»¸ö¶¯×÷£¬ÇëÔÚËüÇ°Ãæ¼ÓÉÏÒ»¸öÊý×Ö£º2w + 5. ÔÚÕý³£Ä£Ê½ÏÂÐÞ¸ÄÃüÁîµÄ¸ñʽÊÇ£º + operator [number] motion + ÆäÖУº + operator - ²Ù×÷·û£¬´ú±íÒª×öµÄÊÂÇ飬±ÈÈç d ´ú±íɾ³ý + [number] - ¿ÉÒÔ¸½¼ÓµÄÊý×Ö£¬´ú±í¶¯×÷ÖØ¸´µÄ´ÎÊý + motion - ¶¯×÷£¬´ú±íÔÚËù²Ù×÷µÄÎı¾ÉϵÄÒÆ¶¯£¬ÀýÈç w ´ú±íµ¥´Ê(word)£¬ + $ ´ú±íÐÐÄ©µÈµÈ¡£ - 3. Óûɾ³ýÕûÐУ¬ÇëÊäÈë¡Ãdd + 6. ÓûÒÆ¶¯¹â±êµ½ÐÐÊ×£¬Çë°´Êý×Ö0¼ü£º0 - 4. ÔÚÕý³£Ä£Ê½ÏÂÒ»¸öÃüÁîµÄ¸ñʽÊǡà - - [number] command object »òÕß command [number] object - ÆäÒâÊǡà - number - ´ú±íµÄÊÇÃüÁîÖ´ÐеĴÎÊý - command - ´ú±íÒª×öµÄÊÂÇ飬±ÈÈç d ´ú±íɾ³ý - object - ´ú±íÒª²Ù×÷µÄ¶ÔÏ󣬱ÈÈç w ´ú±íµ¥×Ö/µ¥´Ê£¬$ ´ú±íµ½ÐÐÄ©µÈµÈ¡£ - $ (to the end of line), etc. - - 5. Óû³·ÏûÒÔǰµÄ²Ù×÷£¬ÇëÊäÈë¡Ãu (СдµÄu) - Óû³·ÏûÔÚÒ»ÐÐÖÐËù×öµÄ¸Ä¶¯£¬ÇëÊäÈë¡ÃU (´óдµÄU) - Óû³·ÏûÒÔǰµÄ³·ÏûÃüÁ»Ö¸´ÒÔǰµÄ²Ù×÷½á¹û£¬ÇëÊäÈë¡ÃCTRL-R + 7. Óû³·ÏûÒÔǰµÄ²Ù×÷£¬ÇëÊäÈ룺u (СдµÄu) + Óû³·ÏûÔÚÒ»ÐÐÖÐËù×öµÄ¸Ä¶¯£¬ÇëÊäÈ룺U (´óдµÄU) + Óû³·ÏûÒÔǰµÄ³·ÏûÃüÁ»Ö¸´ÒÔǰµÄ²Ù×÷½á¹û£¬ÇëÊäÈ룺CTRL-R ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÈý½²µÚÒ»½Ú¡ÃÖÃÈëÀàÃüÁî + µÚÈý½²µÚÒ»½Ú£ºÖÃÈëÀàÃüÁî - ** ÊäÈë p ½«×îºóÒ»´Îɾ³ýµÄÄÚÈÝÖÃÈë¹â±êÖ®ºó ** + ** ÊäÈë p ½«×îºóÒ»´Îɾ³ýµÄÄÚÈÝÖÃÈë¹â±êÖ®ºó¡£ ** - 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæÊ¾·¶¶ÎÂäµÄÊ×ÐС£ + 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæµÚÒ»¸ö±ê¼ÇÓÐ ---> µÄÒ»ÐС£ - 2. ÊäÈë dd ½«¸ÃÐÐɾ³ý£¬ÕâÑù»á½«¸ÃÐб£´æµ½vimµÄ»º³åÇøÖС£ + 2. ÊäÈë dd ½«¸ÃÐÐɾ³ý£¬ÕâÑù»á½«¸ÃÐб£´æµ½ Vim µÄÒ»¸ö¼Ä´æÆ÷ÖС£ - 3. ½Ó׎«¹â±êÒÆ¶¯µ½×¼±¸ÖÃÈëµÄλÖõÄÉÏ·½¡£¼Çס¡ÃÊÇÉÏ·½Å¶¡£ + 3. ½Ó׎«¹â±êÒÆ¶¯µ½ c) Ò»ÐУ¬¼´×¼±¸ÖÃÈëµÄλÖõÄÉÏ·½¡£¼Çס£ºÊÇÉÏ·½Å¶¡£ - 4. È»ºóÔÚÕý³£Ä£Ê½ÏÂ(¼ü½øÈë)£¬ÊäÈë p ½«¸ÃÐÐÕ³ÌùÖÃÈë¡£ + 4. È»ºóÔÚÕý³£Ä£Ê½ÏÂ(¼ü½øÈë)ÊäÈë p ½«¸ÃÐÐÕ³ÌùÖÃÈë¡£ 5. ÖØ¸´²½Öè2ÖÁ²½Öè4£¬½«ËùÓеÄÐÐÒÀÐò·ÅÖõ½ÕýÈ·µÄλÖÃÉÏ¡£ - d) Can you learn too? - b) Violets are blue, - c) Intelligence is learned, - a) Roses are red, +---> d) Can you learn too? +---> b) Violets are blue, +---> c) Intelligence is learned, +---> a) Roses are red, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÈý½²µÚ¶þ½Ú¡ÃÌæ»»ÀàÃüÁî + µÚÈý½²µÚ¶þ½Ú£ºÌæ»»ÀàÃüÁî ** ÊäÈë r ºÍÒ»¸ö×Ö·ûÌæ»»¹â±êËùÔÚλÖõÄ×Ö·û¡£** 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£ - 2. ÇëÒÆ¶¯¹â±êµ½µÚÒ»¸ö´íÎóµÄÊʵ±Î»Öᣠ+ 2. ÇëÒÆ¶¯¹â±êµ½µÚÒ»¸ö³ö´íµÄλÖᣠ- 3. ½Ó×ÅÊäÈë r £¬ÕâÑù¾ÍÄܽ«´íÎóÌæ»»µôÁË¡£ + 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. È»ºóÎÒÃǼÌÐøÑ§Ð£µÚÈý½²µÚÈý½Ú¡£ + 5. È»ºóÎÒÃǼÌÐøÑ§Ï°µÚÈý½²µÚÈý½Ú¡£ -ÌØ±ðÌáʾ¡ÃÇмÇÄúÒªÔÚʹÓÃÖÐѧϰ£¬¶ø²»ÊÇÔÚ¼ÇÒäÖÐѧϰ¡£ +ÌØ±ðÌáʾ£ºÇмÇÄúÒªÔÚʹÓÃÖÐѧϰ£¬¶ø²»ÊÇÔÚ¼ÇÒäÖÐѧϰ¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÈý½²µÚÈý½Ú¡Ã¸ü¸ÄÀàÃüÁî + µÚÈý½²µÚÈý½Ú£º¸ü¸ÄÀàÃüÁî - ** Òª¸Ä±äÒ»¸öµ¥×Ö/µ¥´ÊµÄ²¿·Ö»òÕßÈ«²¿£¬ÇëÊäÈë cw ** + ** Òª¸Ä±äÎı¾Ö±µ½Ò»¸öµ¥´ÊµÄĩ⣬ÇëÊäÈë ce ** 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£ 2. ½Ó×Űѹâ±ê·ÅÔÚµ¥´Ê lubw µÄ×Öĸ u µÄλÖÃÄÇÀï¡£ - 3. È»ºóÊäÈë cw ¾Í¿ÉÒÔÐÞÕý¸Ãµ¥´ÊÁË(ÔÚ±¾ÀýÕâÀïÊÇÊäÈë ine ¡£) + 3. È»ºóÊäÈë cw ÒÔ¼°ÕýÈ·µÄµ¥´Ê(ÔÚ±¾ÀýÖÐÊÇÊäÈë ine )¡£ 4. ×îºó°´ ¼ü£¬È»ºó¹â±ê¶¨Î»µ½ÏÂÒ»¸ö´íÎóµÚÒ»¸ö×¼±¸¸ü¸ÄµÄ×Öĸ´¦¡£ 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. +---> This lubw has a few wptfd that mrrf changing usf the change operator. +---> This line has a few words that need changing using the change operator. -Ìáʾ¡ÃÇë×¢Òâ cw ÃüÁî²»½ö½öÊÇÌæ»»ÁËÒ»¸öµ¥´Ê£¬Ò²ÈÃÄú½øÈëÎı¾²åÈë״̬ÁË¡£ +Ìáʾ£ºÇë×¢Òâ ce ÃüÁî²»½ö½öÊÇɾ³ýÁËÒ»¸öµ¥´Ê£¬ËüÒ²ÈÃÄú½øÈë²åÈëģʽÁË¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÈý½²µÚËĽڡÃʹÓÃcÖ¸ÁîµÄÆäËû¸ü¸ÄÀàÃüÁî + µÚÈý½²µÚËĽڣºÊ¹ÓÃc¸ü¸Ä¸ü¶à - ** ¸ü¸ÄÀàÖ¸Áî¿ÉÒÔʹÓÃͬɾ³ýÀàÃüÁîËùʹÓõĶÔÏó²ÎÊý¡£** + ** ¸ü¸ÄÀà²Ù×÷·û¿ÉÒÔÓëɾ³ýÖÐʹÓõÄͬÑùµÄ¶¯×÷ÅäºÏʹÓᣠ** - 1. ¸ü¸ÄÀàÖ¸ÁîµÄ¹¤×÷·½Ê½¸úɾ³ýÀàÃüÁîÊÇÒ»Öµġ£²Ù×÷¸ñʽÊǡà + 1. ¸ü¸ÄÀà²Ù×÷·ûµÄ¹¤×÷·½Ê½¸úɾ³ýÀàÊÇÒ»Öµġ£²Ù×÷¸ñʽÊÇ£º - [number] c object »òÕß c [number] object + c [number] motion - 2. ¶ÔÏó²ÎÊýÒ²ÊÇÒ»ÑùµÄ£¬±ÈÈç w ´ú±íµ¥×Ö/µ¥´Ê£¬$´ú±íÐÐÄ©µÈµÈ¡£ + 2. ¶¯×÷²ÎÊý(motion)Ò²ÊÇÒ»ÑùµÄ£¬±ÈÈç w ´ú±íµ¥´Ê£¬$´ú±íÐÐÄ©µÈµÈ¡£ 3. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£ @@ -377,55 +459,56 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÈý½²Ð¡½á + µÚÈý½²Ð¡½á - 1. ÒªÖØÐÂÖÃÈëÒѾ­É¾³ýµÄÎı¾ÄÚÈÝ£¬ÇëÊäÈëСд×Öĸ p¡£¸Ã²Ù×÷¿ÉÒÔ½«ÒÑɾ³ý + 1. ÒªÖØÐÂÖÃÈëÒѾ­É¾³ýµÄÎı¾ÄÚÈÝ£¬Ç밴Сд×Öĸ p ¼ü¡£¸Ã²Ù×÷¿ÉÒÔ½«ÒÑɾ³ý µÄÎı¾ÄÚÈÝÖÃÓÚ¹â±êÖ®ºó¡£Èç¹û×îºóÒ»´Îɾ³ýµÄÊÇÒ»¸öÕûÐУ¬ÄÇô¸ÃÐн«Öà ÓÚµ±Ç°¹â±êËùÔÚÐеÄÏÂÒ»ÐС£ 2. ÒªÌæ»»¹â±êËùÔÚλÖõÄ×Ö·û£¬ÇëÊäÈëСдµÄ r ºÍÒªÌæ»»µôԭλÖÃ×Ö·ûµÄÐÂ×Ö ·û¼´¿É¡£ - 3. ¸ü¸ÄÀàÃüÁîÔÊÐíÄú¸Ä±äÖ¸¶¨µÄ¶ÔÏ󣬴ӵ±Ç°¹â±êËùÔÚλÖÃÖ±µ½¶ÔÏóµÄĩβ¡£ - ±ÈÈçÊäÈë cw ¿ÉÒÔÌæ»»µ±Ç°¹â±êµ½µ¥´ÊµÄĩβµÄÄÚÈÝ£»ÊäÈë c$ ¿ÉÒÔÌæ»»µ± + 3. ¸ü¸ÄÀàÃüÁîÔÊÐíÄú¸Ä±ä´Óµ±Ç°¹â±êËùÔÚλÖÃÖ±µ½¶¯×÷ָʾµÄλÖÃÖмäµÄÎı¾¡£ + ±ÈÈçÊäÈë ce ¿ÉÒÔÌæ»»µ±Ç°¹â±êµ½µ¥´ÊµÄĩβµÄÄÚÈÝ£»ÊäÈë c$ ¿ÉÒÔÌæ»»µ± ǰ¹â±êµ½ÐÐÄ©µÄÄÚÈÝ¡£ - 4. ¸ü¸ÄÀàÃüÁîµÄ¸ñʽÊǡà + 4. ¸ü¸ÄÀàÃüÁîµÄ¸ñʽÊÇ£º - [number] c object »òÕß c [number] object + c [number] motion -ÏÂÃæÎÒÃǼÌÐøÑ§Ï°ÏÂÒ»½²¡£ +ÏÖÔÚÎÒÃǼÌÐøÑ§Ï°ÏÂÒ»½²¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚËĽ²µÚÒ»½Ú¡Ã¶¨Î»¼°Îļþ״̬ + µÚËĽ²µÚÒ»½Ú£º¶¨Î»¼°Îļþ״̬ + ** ÊäÈë CTRL-G ÏÔʾµ±Ç°±à¼­ÎļþÖе±Ç°¹â±êËùÔÚÐÐλÖÃÒÔ¼°Îļþ״̬ÐÅÏ¢¡£ + ÊäÈë´óд G ÔòÖ±½ÓÌø×ªµ½ÎļþÖеÄijһָ¶¨ÐС£** - ** ÊäÈë CTRL-g ÏÔʾµ±Ç°±à¼­ÎļþÖе±Ç°¹â±êËùÔÚÐÐλÖÃÒÔ¼°Îļþ״̬ÐÅÏ¢¡£ - ÊäÈë SHIFT-G ÔòÖ±½ÓÌø×ªµ½ÎļþÖеÄijһָ¶¨ÐС£** + Ìáʾ£ºÇмÇÒªÏÈͨ¶Á±¾½ÚÄÚÈÝ£¬Ö®ºó²Å¿ÉÒÔÖ´ÐÐÒÔϲ½Öè!!! - Ìáʾ¡ÃÇмÇÒªÏÈͨ¶Á±¾½ÚÄÚÈÝ£¬Ö®ºó²Å¿ÉÒÔÖ´ÐÐÒÔϲ½Öè!!! + 1. °´Ï CTRL ¼ü²»·Å¿ªÈ»ºó°´ g ¼ü¡£ÎÒÃdzÆÕâ¸ö¼ü×éºÏΪ CTRL-G¡£ + Äú»á¿´µ½Ò³Ãæ×îµ×²¿³öÏÖÒ»¸ö״̬ÐÅÏ¢ÐУ¬ÏÔʾµÄÄÚÈÝÊǵ±Ç°±à¼­µÄÎļþÃû + ºÍÎļþÖйâ±êλÖá£Çë¼ÇסÐкţ¬Ëü»áÔÚ²½Öè3ÖÐÓõ½¡£ - 1. °´Ï CTRL ¼ü²»·Å¿ªÈ»ºó°´ g ¼ü¡£È»ºó¾Í»á¿´µ½Ò³Ãæ×îµ×²¿³öÏÖÒ»¸ö״̬ÐÅ - Ï¢ÐУ¬ÏÔʾµÄÄÚÈÝÊǵ±Ç°±à¼­µÄÎļþÃûºÍÎļþµÄ×ÜÐÐÊý¡£Çë¼Çס²½Öè3µÄÐкš£ +Ìáʾ£ºÄúÒ²Ðí»áÔÚÆÁÄ»µÄÓÒϽǿ´µ½¹â±êλÖã¬Õâ»áÔÚ 'ruler' Ñ¡ÏîÉèÖÃʱ·¢Éú + (²Î¼û :help 'ruler') - 2. °´Ï SHIFT-G ¼ü¿ÉÒÔʹµÃµ±Ç°¹â±êÖ±½ÓÌø×ªµ½Îļþ×îºóÒ»ÐС£ - - 3. ÊäÈëÄúÔøÍ£ÁôµÄÐкţ¬È»ºó°´Ï SHIFT-G¡£ÕâÑù¾Í¿ÉÒÔ·µ»Øµ½ÄúµÚÒ»´Î°´Ï - CTRL-g ʱËùÔÚµÄÐкÃÁË¡£×¢Òâ¡ÃÊäÈëÐкÅʱ£¬ÐкÅÊDz»»áÔÚÆÁÄ»ÉÏÏÔʾ³öÀ´ - µÄ¡£ - - 4. Èç¹ûÔ¸Ò⣬Äú¿ÉÒÔ¼ÌÐøÖ´Ðв½Öè1ÖÁ²½ÖèÈý¡£ + 2. ÊäÈë´óд G ¿ÉÒÔʹµÃµ±Ç°¹â±êÖ±½ÓÌø×ªµ½Îļþ×îºóÒ»ÐС£ + ÊäÈë gg ¿ÉÒÔʹµÃµ±Ç°¹â±êÖ±½ÓÌø×ªµ½ÎļþµÚÒ»ÐС£ + 3. ÊäÈëÄúÔøÍ£ÁôµÄÐкţ¬È»ºóÊäÈë´óд G¡£ÕâÑù¾Í¿ÉÒÔ·µ»Øµ½ÄúµÚÒ»´Î°´Ï + CTRL-G ʱËùÔÚµÄÐÐÁË¡£ + 4. Èç¹ûÄú¾õµÃûÎÊÌâµÄ»°£¬ÇëÖ´Ðв½Öè1ÖÁ²½Öè3µÄ²Ù×÷½øÐÐÁ·Ï°¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚËĽ²µÚ¶þ½Ú¡ÃËÑË÷ÀàÃüÁî + µÚËĽ²µÚ¶þ½Ú£ºËÑË÷ÀàÃüÁî - ** ÊäÈë / ÒÔ¼°Î²ËæµÄ×Ö·û´®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎļþÖвéÕÒ¸Ã×Ö·û´®¡£** + ** ÊäÈë / ¼ÓÉÏÒ»¸ö×Ö·û´®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎļþÖвéÕÒ¸Ã×Ö·û´®¡£** 1. ÔÚÕý³£Ä£Ê½ÏÂÊäÈë / ×Ö·û¡£Äú´Ëʱ»á×¢Òâµ½¸Ã×Ö·ûºÍ¹â±ê¶¼»á³öÏÖÔÚÆÁÄ»µ× ²¿£¬Õâ¸ú : ÃüÁîÊÇÒ»ÑùµÄ¡£ @@ -433,23 +516,22 @@ 2. ½Ó×ÅÊäÈë errroor <»Ø³µ>¡£ÄǸöerrroor¾ÍÊÇÄúÒª²éÕÒµÄ×Ö·û´®¡£ 3. Òª²éÕÒͬÉÏÒ»´ÎµÄ×Ö·û´®£¬Ö»ÐèÒª°´ n ¼ü¡£ÒªÏòÏà·´·½Ïò²éÕÒͬÉÏÒ»´ÎµÄ×Ö - ·û´®£¬ÇëÊäÈë Shift-N ¼´¿É¡£ + ·û´®£¬ÇëÊäÈë´óд N ¼´¿É¡£ 4. Èç¹ûÄúÏëÄæÏò²éÕÒ×Ö·û´®£¬ÇëʹÓà ? ´úÌæ / ½øÐС£ ----> When the search reaches the end of the file it will continue at the start. - - "errroor" is not the way to spell error; errroor is an error. - - Ìáʾ¡ÃÈç¹û²éÕÒÒѾ­µ½´ïÎļþĩ⣬²éÕÒ»á×Ô¶¯´ÓÎļþÍ·²¿¼ÌÐø²éÕÒ¡£ - + 5. Òª»Øµ½Äú֮ǰµÄλÖð´ CTRL-O (°´×¡ Ctrl ¼ü²»·Åͬʱ°´ÏÂ×Öĸ o)¡£Öظ´°´¿ÉÒÔ + »ØÍ˸ü¶à²½¡£CTRL-I »áÌø×ªµ½½ÏеÄλÖᣠ+---> "errroor" is not the way to spell error; errroor is an error. +Ìáʾ£ºÈç¹û²éÕÒÒѾ­µ½´ïÎļþĩ⣬²éÕÒ»á×Ô¶¯´ÓÎļþÍ·²¿¼ÌÐø²éÕÒ£¬³ý·Ç + 'wrapscan' Ñ¡Ïî±»¸´Î»¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚËĽ²µÚÈý½Ú¡ÃÅä¶ÔÀ¨ºÅµÄ²éÕÒ + µÚËĽ²µÚÈý½Ú£ºÅä¶ÔÀ¨ºÅµÄ²éÕÒ - ** °´ % ¿ÉÒÔ²éÕÒÅä¶ÔµÄÀ¨ºÅ )¡¢]¡¢}¡£** + ** ÊäÈë % ¿ÉÒÔ²éÕÒÅä¶ÔµÄÀ¨ºÅ )¡¢]¡¢}¡£** 1. °Ñ¹â±ê·ÅÔÚ±¾½ÚÏÂÃæ±ê¼ÇÓÐ --> ÄÇÒ»ÐÐÖеÄÈκÎÒ»¸ö (¡¢[ »ò { ´¦¡£ @@ -459,17 +541,17 @@ 4. Ôٴΰ´ % ¾Í¿ÉÒÔÌø»ØÅä¶ÔµÄµÚÒ»¸öÀ¨ºÅ´¦¡£ + 5. ÒÆ¶¯¹â±êµ½ÁíÒ»¸ö (¡¢)¡¢[¡¢]¡¢{ »ò } ´¦£¬°´ % ²é¿´ÆäËù×÷ËùΪ¡£ + ---> This ( is a test line with ('s, ['s ] and {'s } in it. )) -Ìáʾ¡ÃÔÚ³ÌÐòµ÷ÊÔʱ£¬Õâ¸ö¹¦ÄÜÓÃÀ´²éÕÒ²»Åä¶ÔµÄÀ¨ºÅÊǺÜÓÐÓõġ£ - - +Ìáʾ£ºÔÚ³ÌÐòµ÷ÊÔʱ£¬Õâ¸ö¹¦ÄÜÓÃÀ´²éÕÒ²»Åä¶ÔµÄÀ¨ºÅÊǺÜÓÐÓõġ£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚËĽ²µÚËĽڡÃÐÞÕý´íÎóµÄ·½·¨Ö®Ò» + µÚËĽ²µÚËĽڣºÌæ»»ÃüÁî ** ÊäÈë :s/old/new/g ¿ÉÒÔÌæ»» old Ϊ new¡£** @@ -479,46 +561,48 @@ 2. ÊäÈë :s/thee/the <»Ø³µ> ¡£Çë×¢Òâ¸ÃÃüÁîÖ»¸Ä±ä¹â±êËùÔÚÐеĵÚÒ»¸öÆ¥Åä ´®¡£ - 3. ÊäÈë :s/thee/the/g ÔòÊÇÌæ»»È«ÐÐµÄÆ¥Åä´®¡£ - ----> the best time to see thee flowers is in thee spring. - - 4. ÒªÌæ»»Á½ÐÐÖ®¼ä³öÏÖµÄÿ¸öÆ¥Åä´®£¬ÇëÊäÈë :#,#s/old/new/g (#,#´ú±íµÄÊÇ - Á½ÐеÄÐкÅ)¡£ÊäÈë :%s/old/new/g ÔòÊÇÌæ»»Õû¸öÎļþÖеÄÿ¸öÆ¥Åä´®¡£ - + 3. ÊäÈë :s/thee/the/g ÔòÊÇÌæ»»È«ÐÐµÄÆ¥Åä´®£¬¸ÃÐÐÖÐËùÓÐµÄ "thee" ¶¼»á±» + ¸Ä±ä¡£ +---> thee best time to see thee flowers is in thee spring. + 4. ÒªÌæ»»Á½ÐÐÖ®¼ä³öÏÖµÄÿ¸öÆ¥Åä´®£¬Çë + ÊäÈë :#,#s/old/new/g ÆäÖÐ #,# ´ú±íµÄÊÇÌæ»»²Ù×÷µÄÈô¸ÉÐÐÖÐ + Ê×βÁ½ÐеÄÐкš£ + ÊäÈë :%s/old/new/g ÔòÊÇÌæ»»Õû¸öÎļþÖеÄÿ¸öÆ¥Åä´®¡£ + ÊäÈë :%s/old/new/gc »áÕÒµ½Õû¸öÎļþÖеÄÿ¸öÆ¥Åä´®£¬²¢ÇÒ¶Ôÿ¸öÆ¥Åä´® + ÌáʾÊÇ·ñ½øÐÐÌæ»»¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ µÚËĽ²Ð¡½á - 1. Ctrl-g ÓÃÓÚÏÔʾµ±Ç°¹â±êËùÔÚλÖúÍÎļþ״̬ÐÅÏ¢¡£Shift-G ÓÃÓÚ½«¹â±êÌø - תÖÁÎļþ×îºóÒ»ÐС£ÏÈÇÃÈëÒ»¸öÐкÅÈ»ºó°´ Shift-G ÔòÊǽ«¹â±êÒÆ¶¯ÖÁ¸ÃÐÐ - ºÅ´ú±íµÄÐС£ + 1. CTRL-G ÓÃÓÚÏÔʾµ±Ç°¹â±êËùÔÚλÖúÍÎļþ״̬ÐÅÏ¢¡£ + G ÓÃÓÚ½«¹â±êÌø×ªÖÁÎļþ×îºóÒ»ÐС£ + ÏÈÇÃÈëÒ»¸öÐкÅÈ»ºóÊäÈë´óд G ÔòÊǽ«¹â±êÒÆ¶¯ÖÁ¸ÃÐкŴú±íµÄÐС£ + gg ÓÃÓÚ½«¹â±êÌø×ªÖÁÎļþµÚÒ»ÐС£ - 2. ÊäÈë / È»ºó½ôËæÒ»¸ö×Ö·û´®ÊÇÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÐÏòºó²éÕÒ¸Ã×Ö·û´®¡£ - ÊäÈëÎʺŠ? È»ºó½ôËæÒ»¸ö×Ö·û´®ÊÇÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÐÏòǰ²éÕÒ¸Ã×Ö - ·û´®¡£Íê³ÉÒ»´Î²éÕÒÖ®ºó°´ n ¼üÔòÊÇÖØ¸´ÉÏÒ»´ÎµÄÃüÁ¿ÉÔÚͬһ·½ÏòÉϲé - ÕÒÏÂÒ»¸ö×Ö·û´®ËùÔÚ£»»òÕß°´ Shift-N ÏòÏà·´·½Ïò²éÕÒϸÃ×Ö·û´®ËùÔÚ¡£ + 2. ÊäÈë / È»ºó½ôËæÒ»¸ö×Ö·û´®ÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖÐÕýÏò²éÕÒ¸Ã×Ö·û´®¡£ + ÊäÈë ? È»ºó½ôËæÒ»¸ö×Ö·û´®ÔòÊÇÔÚµ±Ç°Ëù±à¼­µÄÎĵµÖз´Ïò²éÕÒ¸Ã×Ö·û´®¡£ + Íê³ÉÒ»´Î²éÕÒÖ®ºó°´ n ¼üÊÇÖØ¸´ÉÏÒ»´ÎµÄÃüÁ¿ÉÔÚͬһ·½ÏòÉϲé + ÕÒÏÂÒ»¸öÆ¥Åä×Ö·û´®ËùÔÚ£»»òÕß°´´óд N ÏòÏà·´·½Ïò²éÕÒÏÂһƥÅä×Ö·û´®ËùÔÚ¡£ + CTRL-O ´øÄúÌø×ª»Ø½Ï¾ÉµÄλÖã¬CTRL-I Ôò´øÄúµ½½ÏеÄλÖᣠ- 3. Èç¹û¹â±êµ±Ç°Î»ÖÃÊÇÀ¨ºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°´ % ¿ÉÒÔ½«¹â±êÒÆ¶¯µ½Åä¶ÔµÄ - À¨ºÅÉÏ¡£ + 3. Èç¹û¹â±êµ±Ç°Î»ÖÃÊÇÀ¨ºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°´ % »á½«¹â±êÒÆ¶¯µ½Åä¶ÔµÄÀ¨ºÅÉÏ¡£ 4. ÔÚÒ»ÐÐÄÚÌæ»»Í·Ò»¸ö×Ö·û´® old ΪеÄ×Ö·û´® new£¬ÇëÊäÈë :s/old/new ÔÚÒ»ÐÐÄÚÌæ»»ËùÓеÄ×Ö·û´® old ΪеÄ×Ö·û´® new£¬ÇëÊäÈë :s/old/new/g ÔÚÁ½ÐÐÄÚÌæ»»ËùÓеÄ×Ö·û´® old ΪеÄ×Ö·û´® new£¬ÇëÊäÈë :#,#s/old/new/g ÔÚÎļþÄÚÌæ»»ËùÓеÄ×Ö·û´® old ΪеÄ×Ö·û´® new£¬ÇëÊäÈë :%s/old/new/g - ½øÐÐÈ«ÎÄÌæ»»Ê±Ñ¯ÎÊÓû§È·ÈÏÿ¸öÌæ»»ÐèÌí¼Ó c Ñ¡ÏÇëÊäÈë :%s/old/new/gc - + ½øÐÐÈ«ÎÄÌæ»»Ê±Ñ¯ÎÊÓû§È·ÈÏÿ¸öÌæ»»ÐèÌí¼Ó c ±êÖ¾ :%s/old/new/gc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÎå½²µÚÒ»½Ú¡ÃÔÚ VIM ÄÚÖ´ÐÐÍⲿÃüÁîµÄ·½·¨ + µÚÎå½²µÚÒ»½Ú£ºÔÚ VIM ÄÚÖ´ÐÐÍⲿÃüÁîµÄ·½·¨ - ** ÊäÈë :! È»ºó½ôËæÖøÊäÈëÒ»¸öÍⲿÃüÁî¿ÉÒÔÖ´ÐиÃÍⲿÃüÁî¡£** + ** ÊäÈë :! È»ºó½ô½Ó×ÅÊäÈëÒ»¸öÍⲿÃüÁî¿ÉÒÔÖ´ÐиÃÍⲿÃüÁî¡£** - 1. °´ÏÂÎÒÃÇËùÊìϤµÄ : ÃüÁîÉèÖùâ±êµ½ÆÁÄ»µ×²¿¡£ÕâÑù¾Í¿ÉÒÔÈÃÄúÊäÈëÃüÁîÁË¡£ + 1. °´ÏÂÎÒÃÇËùÊìϤµÄ : ÃüÁîʹ¹â±êÒÆ¶¯µ½ÆÁÄ»µ×²¿¡£ÕâÑùÄú¾Í¿ÉÒÔÊäÈëÒ»ÐÐÃüÁîÁË¡£ 2. ½Ó×ÅÊäÈë¸Ð̾ºÅ ! Õâ¸ö×Ö·û£¬ÕâÑù¾ÍÔÊÐíÄúÖ´ÐÐÍⲿµÄ shell ÃüÁîÁË¡£ @@ -526,15 +610,17 @@ ÄÚÈÝ£¬¾ÍÈçͬÄúÔÚÃüÁîÐÐÌáʾ·ûÏÂÊäÈë ls ÃüÁîµÄ½á¹ûÒ»Ñù¡£Èç¹û !ls ûÆð ×÷Óã¬Äú¿ÉÒÔÊÔÊÔ :!dir ¿´¿´¡£ ----> Ìáʾ¡Ã ËùÓеÄÍⲿÃüÁî¶¼¿ÉÒÔÒÔÕâÖÖ·½Ê½Ö´ÐС£ +Ìáʾ£ºËùÓеÄÍⲿÃüÁî¶¼¿ÉÒÔÒÔÕâÖÖ·½Ê½Ö´ÐУ¬°üÀ¨´øÃüÁîÐвÎÊýµÄÄÇЩ¡£ + +Ìáʾ£ºËùÓÐµÄ : ÃüÁî¶¼±ØÐëÒÔÇà <»Ø³µ> ¼ü½áÊø¡£´Ó½ñÒÔºóÎÒÃǾͲ»»á×ÜÊÇÌáµ½ÕâÒ»µã + ÁË¡£ ----> Ìáʾ¡Ã ËùÓÐµÄ : ÃüÁî¶¼±ØÐëÒÔ <»Ø³µ> ¸æÖÕ¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÎå½²µÚ¶þ½Ú¡Ã¹ØÓÚ±£´æÎļþµÄ¸ü¶àÐÅÏ¢ + µÚÎå½²µÚ¶þ½Ú£º¹ØÓÚ±£´æÎļþµÄ¸ü¶àÐÅÏ¢ ** Òª½«¶ÔÎļþµÄ¸Ä¶¯±£´æµ½ÎļþÖУ¬ÇëÊäÈë :w FILENAME ¡£** @@ -542,60 +628,63 @@ 1. ÊäÈë :!dir »òÕß :!ls »ñÖªµ±Ç°Ä¿Â¼µÄÄÚÈÝ¡£ÄúÓ¦µ±ÒÑÖªµÀ×îºó»¹µÃÇà <»Ø³µ> °É¡£ - 2. Ñ¡ÔñÒ»¸öÉÐδ´æÔÚÎļþÃû£¬±ÈÈç TEST ¡£ + 2. Ñ¡ÔñÒ»¸öδ±»Óõ½µÄÎļþÃû£¬±ÈÈç TEST¡£ 3. ½Ó×ÅÊäÈë :w TEST (´Ë´¦ TEST ÊÇÄúËùÑ¡ÔñµÄÎļþÃû¡£) - 4. ¸ÃÃüÁî»áÒÔ TEST ΪÎļþÃû±£´æÕû¸öÎļþ (VIM ½Ì³Ì)¡£ÎªÁËÈ·±£ÕýÈ·±£´æ£¬ - ÇëÔÙ´ÎÊäÈë :!dir ²é¿´ÄúµÄĿ¼ÁбíÄÚÈÝ¡£ + 4. ¸ÃÃüÁî»áÒÔ TEST ΪÎļþÃû±£´æÕû¸öÎļþ (Vim ½Ì³Ì)¡£ÎªÁËÑéÖ¤ÕâÒ»µã£¬ + ÇëÔÙ´ÎÊäÈë :!dir »ò :!ls ²é¿´ÄúµÄĿ¼ÁбíÄÚÈÝ¡£ ----> Çë×¢Òâ¡ÃÈç¹ûÄúÍ˳ö VIM È»ºóÔÚÒÔÎļþÃû TEST Ϊ²ÎÊý½øÈ룬ÄÇô¸ÃÎļþÄÚ +Çë×¢Ò⣺Èç¹ûÄúÍ˳ö Vim È»ºóÔÚÒÔÃüÁî vim TEST ÔÙ´ÎÆô¶¯ Vim£¬ÄÇô¸ÃÎļþÄÚ ÈÝÓ¦¸ÃͬÄú±£´æÊ±µÄÎļþÄÚÈÝÊÇÍêȫһÑùµÄ¡£ - 5. ÏÖÔÚÄú¿ÉÒÔͨ¹ýÊäÈë :!rm TEST À´É¾³ý TEST ÎļþÁË¡£ - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÎå½²µÚÈý½Ú¡ÃÒ»¸ö¾ßÓÐÑ¡ÔñÐԵı£´æÃüÁî - - - ** Òª±£´æÎļþµÄ²¿·ÖÄÚÈÝ£¬ÇëÊäÈë :#,# w FILENAME ** - - 1. ÔÙÀ´Ö´ÐÐÒ»´Î :!dir »òÕß :!ls »ñÖªµ±Ç°Ä¿Â¼µÄÄÚÈÝ£¬È»ºóÑ¡ÔñÒ»¸öºÏÊ浀 - ²»ÖØÃûµÄÎļþÃû£¬±ÈÈç TEST ¡£ - - 2. ½Ó׎«¹â±êÒÆ¶¯ÖÁ±¾Ò³µÄ×î¶¥¶Ë£¬È»ºó°´ CTRL-g ÕÒµ½¸ÃÐеÄÐкš£±ðÍüÁË - ÐкÅŶ¡£ - - 3. ½Ó×Űѹâ±êÒÆ¶¯ÖÁ±¾Ò³µÄ×îµ×¶Ë£¬ÔÙ°´Ò»´Î CTRL-g ¡£Ò²±ðÍüÁËÕâ¸öÐкÃŶ¡£ - - 4. ΪÁËÖ»±£´æÎÄÕµÄij¸ö²¿·Ö£¬ÇëÊäÈë :#,# w TEST ¡£ÕâÀïµÄ #,# ¾ÍÊÇÉÏÃæ - ÒªÇóÄú¼ÇסµÄÐкÅ(¶¥¶ËÐкÅ,µ×¶ËÐкÅ)£¬¶ø TEST ¾ÍÊÇÑ¡¶¨µÄÎļþÃû¡£ - - 5. ×îºó£¬Óà :!dir È·ÈÏÎļþÊÇ·ñÕýÈ·±£´æ¡£µ«ÊÇÕâ´ÎÏȱðɾ³ýµô¡£ - - + 5. ÏÖÔÚÄú¿ÉÒÔɾ³ý TEST ÎļþÁË¡£ÔÚ MS-DOS Ï£¬ÇëÊäÈ룺 :!del TEST + ÔÚ Unix Ï£¬ÇëÊäÈ룺 :!rm TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÎå½²µÚËĽڡÃÌáÈ¡ºÍºÏ²¢Îļþ + µÚÎå½²µÚÈý½Ú£ºÒ»¸ö¾ßÓÐÑ¡ÔñÐԵı£´æÃüÁî + + + ** Òª±£´æÎļþµÄ²¿·ÖÄÚÈÝ£¬ÇëÊäÈë v motion :w FILENAME ** + + 1. ÒÆ¶¯¹â±êµ½±¾ÐС£ + + 2. ½Ó×Ű´ v ¼ü£¬½«¹â±êÒÆ¶¯ÖÁÏÂÃæµÚÎå¸öÌõÄ¿ÉÏ¡£Äú»á×¢Òâµ½Ö®¼äµÄÎı¾±»¸ßÁÁÁË¡£ + + 3. È»ºó°´ : ×Ö·û¡£Äú½«¿´µ½ÆÁÄ»µ×²¿»á³öÏÖ :'<,'> ¡£ + + 4. ÏÖÔÚÇëÊäÈë w TEST£¬ÆäÖÐ TEST ÊÇÒ»¸öδ±»Ê¹ÓõÄÎļþÃû¡£È·ÈÏÄú¿´µ½ÁË + :'<,'>w TEST Ö®ºó°´ <»Ø³µ> ¼ü¡£ + + 5. Õâʱ Vim »á°ÑÑ¡ÖеÄÐÐдÈëµ½ÒÔ TEST ÃüÃûµÄÎļþÖÐÈ¥¡£Ê¹Óà :!dir »ò :!ls + È·ÈÏÎļþ±»ÕýÈ·±£´æ¡£Õâ´ÎÏȱðɾ³ýËü£¡ÎÒÃÇÔÚÏÂÒ»½²ÖлáÓõ½Ëü¡£ + +Ìáʾ£º°´ v ¼üʹ Vim ½øÈë¿ÉÊÓģʽ½øÐÐѡȡ¡£Äú¿ÉÒÔËÄ´¦Òƶ¯¹â±êÊ¹Ñ¡È¡ÇøÓò±ä´ó»ò + ±äС¡£½Ó×ÅÄú¿ÉÒÔʹÓÃÒ»¸ö²Ù×÷·û¶ÔÑ¡ÖÐÎı¾½øÐвÙ×÷¡£ÀýÈ磬°´ d ¼ü»áɾ³ý + Ñ¡ÖеÄÎı¾ÄÚÈÝ¡£ + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÎå½²µÚËĽڣºÌáÈ¡ºÍºÏ²¢Îļþ ** ÒªÏòµ±Ç°ÎļþÖвåÈëÁíÍâµÄÎļþµÄÄÚÈÝ£¬ÇëÊäÈë :r FILENAME ** - 1. Çë¼üÈë :!dir È·ÈÏÄúÇ°Ãæ´´½¨µÄ TEST Îļþ»¹ÔÚ¡£ + 1. Çë°Ñ¹â±êÒÆ¶¯µ½±¾ÐÐÉÏÃæÒ»ÐС£ - 2. È»ºó½«¹â±êÒÆ¶¯ÖÁµ±Ç°Ò³ÃæµÄ¶¥¶Ë¡£ +ÌØ±ðÌáʾ£ºÖ´Ðв½Öè2Ö®ºóÄú½«¿´µ½µÚÎå½²µÚÈý½ÚµÄÎÄ×Ö£¬Çë½ìʱÍùÏÂÒÆ¶¯ + ÒÔÔٴο´µ½±¾½²ÄÚÈÝ¡£ -ÌØ±ðÌáʾ¡Ã Ö´Ðв½Öè3Ö®ºóÄú½«¿´µ½µÚÎå½²µÚÈý½Ú£¬Çë½ìʱÔÙÍùÏÂÒÆ¶¯»Øµ½ÕâÀïÀ´¡£ + 2. ½Ó×Åͨ¹ýÃüÁî :r TEST ½«Ç°Ãæ´´½¨µÄÃûΪ TEST µÄÎļþÌáÈ¡½øÀ´¡£ + ÄúËùÌáÈ¡½øÀ´µÄÎļþ½«´Ó¹â±êËùÔÚλÖô¦¿ªÊ¼ÖÃÈë¡£ - 3. ½Ó×Åͨ¹ý :r TEST ½«Ç°Ãæ´´½¨µÄÃûΪ TEST µÄÎļþÌáÈ¡½øÀ´¡£ + 3. ΪÁËÈ·ÈÏÎļþÒѾ­ÌáÈ¡³É¹¦£¬Òƶ¯¹â±ê»Øµ½Ô­À´µÄλÖþͿÉÒÔ×¢ÒâÓÐÁ½·ÝµÚ + Îå½²µÚÈý½ÚµÄÄÚÈÝ£¬Ò»·ÝÊÇԭʼÄÚÈÝ£¬ÁíÍâÒ»·ÝÊÇÀ´×ÔÎļþµÄ¸±±¾¡£ -ÌØ±ðÌáʾ¡ÃÄúËùÌáÈ¡½øÀ´µÄÎļþ½«´Ó¹â±êËùÔÚλÖô¦¿ªÊ¼ÖÃÈë¡£ +Ìáʾ£ºÄú»¹¿ÉÒÔ¶ÁÈ¡ÍⲿÃüÁîµÄÊä³ö¡£ÀýÈ磬 :r !ls ¿ÉÒÔ¶ÁÈ¡ ls ÃüÁîµÄÊä³ö£¬²¢ + °ÑËü·ÅÖÃÔÚ¹â±êÏÂÃæ¡£ - 4. ΪÁËÈ·ÈÏÎļþÒѾ­ÌáÈ¡³É¹¦£¬Òƶ¯¹â±ê»Øµ½Ô­À´µÄλÖþͿÉÒÔ×¢ÒâÓÐÁ½·ÝµÚ - Îå½²µÚÈý½Ú£¬Ò»·ÝÊÇÔ­±¾£¬ÁíÍâÒ»·ÝÊÇÀ´×ÔÎļþµÄ¸±±¾¡£ @@ -605,237 +694,293 @@ 1. :!command ÓÃÓÚÖ´ÐÐÒ»¸öÍⲿÃüÁî command¡£ - Ç뿴һЩʵ¼ÊÀý×Ó¡Ã - :!dir - ÓÃÓÚÏÔʾµ±Ç°Ä¿Â¼µÄÄÚÈÝ¡£ - :!rm FILENAME - ÓÃÓÚɾ³ýÃûΪ FILENAME µÄÎļþ¡£ + Ç뿴һЩʵ¼ÊÀý×Ó£º + (MS-DOS) (Unix) + :!dir :!ls - ÓÃÓÚÏÔʾµ±Ç°Ä¿Â¼µÄÄÚÈÝ¡£ + :!del FILENAME :!rm FILENAME - ÓÃÓÚɾ³ýÃûΪ FILENAME µÄÎļþ¡£ 2. :w FILENAME ¿É½«µ±Ç° VIM ÖÐÕýÔڱ༭µÄÎļþ±£´æµ½ÃûΪ FILENAME µÄÎÄ ¼þÖС£ - 3. :#,#w FILENAME ¿É½«µ±Ç°±à¼­ÎļþµÚ # ÐÐÖÁµÚ # ÐеÄÄÚÈݱ£´æµ½Îļþ + 3. v motion :w FILENAME ¿É½«µ±Ç°±à¼­ÎļþÖпÉÊÓģʽÏÂÑ¡ÖеÄÄÚÈݱ£´æµ½Îļþ FILENAME ÖС£ 4. :r FILENAME ¿ÉÌáÈ¡´ÅÅÌÎļþ FILENAME ²¢½«Æä²åÈëµ½µ±Ç°ÎļþµÄ¹â±êλÖà ºóÃæ¡£ - - - - + 5. :r !dir ¿ÉÒÔ¶ÁÈ¡ dir ÃüÁîµÄÊä³ö²¢½«Æä·ÅÖõ½µ±Ç°ÎļþµÄ¹â±êλÖúóÃæ¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÁù½²µÚÒ»½Ú¡Ã´ò¿ªÀàÃüÁî + µÚÁù½²µÚÒ»½Ú£º´ò¿ªÀàÃüÁî ** ÊäÈë o ½«ÔÚ¹â±êµÄÏ·½´ò¿ªÐµÄÒ»Ðв¢½øÈë²åÈëģʽ¡£** 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄÄÇÒ»ÐС£ - 2. ½Ó×ÅÊäÈëСдµÄ o ÔÚ¹â±ê *Ï·½* ´ò¿ªÐµÄÒ»Ðв¢½øÈë²åÈëģʽ¡£ + 2. ½Ó×ÅÊäÈëСдµÄ o ÔÚ¹â±ê *Ï·½* ´ò¿ªÐµÄÒ»ÐУ¬Õâ¸öÃüÁî»áʹÄú + ½øÈë²åÈëģʽ¡£ - 3. È»ºó¸´ÖƱê¼ÇÓÐ ---> µÄÐв¢°´ ¼üÍ˳ö²åÈëģʽ¶ø½øÈëÕý³£Ä£Ê½¡£ + 3. È»ºóÊäÈëһЩÎÄ×Ö£¬Ö®ºó°´ ¼üÍ˳ö²åÈëģʽ¶ø½øÈëÕý³£Ä£Ê½¡£ ---> After typing o the cursor is placed on the open line in Insert mode. 4. ΪÁËÔÚ¹â±ê *ÉÏ·½* ´ò¿ªÐµÄÒ»ÐУ¬Ö»ÐèÒªÊäÈë´óдµÄ O ¶ø²»ÊÇСдµÄ o - ¾Í¿ÉÒÔÁË¡£ÇëÔÚÏÂÐвâÊÔһϰɡ£µ±¹â±ê´¦ÔÚÔÚ¸ÃÐÐÉÏʱ£¬°´ Shift-O¿ÉÒÔ - ÔÚ¸ÃÐÐÉÏ·½Ð¿ªÒ»ÐС£ - -Open up a line above this by typing Shift-O while the cursor is on this line. + ¾Í¿ÉÒÔÁË¡£ÇëÔÚÏÂÐвâÊÔһϰɡ£ +---> Open up a line above this by typing O while the cursor is on this line. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÁù½²µÚ¶þ½Ú¡Ã¹â±êºó²åÈëÀàÃüÁî + µÚÁù½²µÚ¶þ½Ú£º¸½¼ÓÀàÃüÁî ** ÊäÈë a ½«¿ÉÔÚ¹â±êÖ®ºó²åÈëÎı¾¡£ ** - 1. ÇëÔÚÕý³£Ä£Ê½ÏÂͨ¹ýÊäÈë $ ½«¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐÐ - µÄĩβ¡£ + 1. ÇëÔÚÕý³£Ä£Ê½Ï½«¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐеÄÐÐÊס£ - 2. ½Ó×ÅÊäÈëСдµÄ a Ôò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎı¾ÁË¡£´óдµÄ A Ôò¿ÉÒÔÖ±½ÓÔÚÐÐ - Ä©²åÈëÎı¾¡£ + 2. ½Ó×ÅÊäÈë e Ö±µ½¹â±êλÓÚ li µÄĩβ¡£ -Ìáʾ¡ÃÊäÈë´óд A µÄ²Ù×÷·½·¨¿ÉÒÔÔÚÐÐÄ©²åÈëÎı¾£¬±ÜÃâÁËÊäÈë i£¬¹â±ê¶¨Î»µ½ - ×îºóÒ»¸ö×Ö·û£¬ÊäÈëµÄÎı¾£¬ »Ø¸´Õý³£Ä£Ê½£¬¼ýÍ·ÓÒ¼üÒÆ¶¯¹â±êÒÔ¼° - x ɾ³ýµ±Ç°¹â±êËùÔÚλÖÃ×Ö·ûµÈµÈÖî¶à·±ÔӵIJÙ×÷¡£ + 3. ÊäÈëСдµÄ a Ôò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎı¾ÁË¡£ - 3. ²Ù×÷Ö®ºóµÚÒ»ÐоͿÉÒÔ²¹³äÍêÕûÁË¡£Çë×¢Òâ¹â±êºó²åÈëÎı¾Óë²åÈëģʽÊÇ»ù - ±¾ÍêȫһÖµģ¬Ö»ÊÇÎı¾²åÈëµÄλÖö¨Î»ÉÔÓв»Í¬°ÕÁË¡£ + 4. ½«µ¥´Ê²¹³äÍêÕû£¬¾ÍÏñÏÂÒ»ÐÐÖеÄÄÇÑù¡£Ö®ºó°´ ¼üÍ˳ö²åÈëģʽ»Øµ½ + Õý³£Ä£Ê½¡£ ----> This line will allow you to practice ----> This line will allow you to practice appending text to the end of a line. + 5. ʹÓà e ÒÆ¶¯¹â±êµ½ÏÂÒ»²½²»ÍêÕûµÄµ¥´Ê£¬Öظ´²½Öè3ºÍ²½Öè4¡£ +---> This li will allow you to pract appendi text to a line. +---> This line will allow you to practice appending text to a line. + +Ìáʾ£ºa¡¢i ºÍ A ¶¼»á´øÄú½øÈë²åÈëģʽ£¬Î©Ò»µÄÇø±ðÔÚÓÚ×Ö·û²åÈëµÄλÖᣠ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÁù½²µÚÈý½Ú¡ÃÁíÍâÒ»¸öÖû»ÀàÃüÁîµÄ°æ±¾ + µÚÁù½²µÚÈý½Ú£ºÁíÍâÒ»¸öÖû»ÀàÃüÁîµÄ°æ±¾ ** ÊäÈë´óдµÄ R ¿ÉÁ¬ÐøÌæ»»¶à¸ö×Ö·û¡£** - 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£ + 1. Ç뽫¹â±êÒÆ¶¯µ½±¾½ÚÖÐÏÂÃæ±ê¼ÇÓÐ ---> µÄµÚÒ»ÐС£Òƶ¯¹â±êµ½µÚÒ»¸ö xxx µÄ + ÆðʼλÖᣠ- 2. ÒÆ¶¯¹â±êµ½µÚÒ»ÐÐÖв»Í¬ÓÚ±êÓÐ ---> µÄµÚ¶þÐеĵÚÒ»¸öµ¥´ÊµÄ¿ªÊ¼£¬¼´µ¥ - ´Ê last ´¦¡£ - - 3. È»ºóÊäÈë´óдµÄ R ¿ªÊ¼°ÑµÚÒ»ÐÐÖеIJ»Í¬ÓÚµÚ¶þÐеÄÊ£Óà×Ö·ûÖðÒ»ÊäÈ룬¾Í + 2. È»ºóÊäÈë´óдµÄ R ¿ªÊ¼°ÑµÚÒ»ÐÐÖеIJ»Í¬ÓÚµÚ¶þÐеÄÊ£Óà×Ö·ûÖðÒ»ÊäÈ룬¾Í ¿ÉÒÔÈ«²¿Ìæ»»µôÔ­ÓеÄ×Ö·û¶øÊ¹µÃµÚÒ»ÐÐÍêÈ«À×ͬµÚ¶þÐÐÁË¡£ ----> 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. Çë×¢Òâ¡ÃÈç¹ûÄú°´ Í˳öÖû»Ä£Ê½»Ø¸´Õý³£Ä£Ê½£¬ÉÐÎ´Ìæ»»µÄÎı¾½«ÈÔ - È»±£³ÖÔ­×´¡£ - + 3. ½Ó×Ű´ ¼üÍ˳öÌæ»»Ä£Ê½»Øµ½Õý³£Ä£Ê½¡£Äú¿ÉÒÔ×¢Òâµ½ÉÐÎ´Ìæ»»µÄÎı¾ + ÈÔÈ»±£³ÖÔ­×´¡£ + 4. ÖØ¸´ÒÔÉϲ½Ö裬½«Ê£ÓàµÄ xxx Ò²Ìæ»»µô¡£ +---> Adding 123 to xxx gives you xxx. +---> Adding 123 to 456 gives you 579. +Ìáʾ£ºÌ滻ģʽÓë²åÈëģʽÏàËÆ£¬²»¹ýÿ¸öÊäÈëµÄ×Ö·û¶¼»áɾ³ýÒ»¸öÒÑÓеÄ×Ö·û¡£ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÁù½²µÚËĽڡÃÉèÖÃÀàÃüÁîµÄÑ¡Ïî + µÚÁù½²µÚËĽڣº¸´ÖÆÕ³ÌùÎı¾ + + + ** ʹÓòÙ×÷·û y ¸´ÖÆÎı¾£¬Ê¹Óà p Õ³ÌùÎı¾ ** + + 1. ¶¨Î»µ½ÏÂÃæ±ê¼ÇÓÐ ---> µÄÒ»ÐУ¬½«¹â±êÒÆ¶¯µ½ "a)" Ö®ºó¡£ + + 2. ½Ó×ÅʹÓà v ½øÈë¿ÉÊÓģʽ£¬Òƶ¯¹â±êµ½ "first" µÄÇ°Ãæ¡£ + + 3. ÏÖÔÚÊäÈë y ÒÔ³é³ö(¸´ÖÆ)¸ßÁÁµÄÎı¾¡£ + + 4. È»ºóÒÆ¶¯¹â±êµ½ÏÂÒ»ÐеÄĩβ£ºj$ + + 5. ½Ó×ÅÊäÈë p ÒÔ·ÅÖÃ(Õ³Ìù)¸´ÖÆÁ˵ÄÎı¾¡£È»ºóÊäÈ룺a second ¡£ + + 6. ʹÓÿÉÊÓģʽѡÖÐ " item."£¬Óà y ¸´ÖÆ£¬ÔÙÓà j$ ½«¹â±êÒÆ¶¯µ½ÏÂÒ»ÐÐĩ⣬ + Óà p ½«Îı¾Õ³Ìùµ½ÄÇÀï¡£ + +---> a) this is the first item. + b) + + Ìáʾ£ºÄú»¹¿ÉÒÔ°Ñ y µ±×÷²Ù×÷·ûÀ´Ê¹Óã»ÀýÈç yw ¿ÉÒÔÓÃÀ´¸´ÖÆÒ»¸öµ¥´Ê¡£ + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÁù½²µÚÎå½Ú£ºÉèÖÃÀàÃüÁîµÄÑ¡Ïî ** ÉèÖÿÉʹ²éÕÒ»òÕßÌæ»»¿ÉºöÂÔ´óСдµÄÑ¡Ïî ** + 1. Òª²éÕÒµ¥´Ê ignore ¿ÉÔÚÕý³£Ä£Ê½ÏÂÊäÈë /ignore <»Ø³µ>¡£ + ÒªÖØ¸´²éÕҸôʣ¬¿ÉÒÔÖØ¸´°´ n ¼ü¡£ - 1. Òª²éÕÒµ¥´Ê ignore ¿ÉÔÚÕý³£Ä£Ê½ÏÂÊäÈë /ignore ¡£ÒªÖظ´²éÕҸôʣ¬¿ÉÒÔ - ÖØ¸´°´ n ¼ü¡£ + 2. È»ºóÉèÖà ic Ñ¡Ïî(Ignore Case£¬ºöÂÔ´óСд)£¬ÇëÊäÈ룺 :set ic - 2. È»ºóÉèÖà ic Ñ¡Ïî(ic¾ÍÊÇÓ¢ÎĺöÂÔ´óСдIgnore CaseµÄÊ××ÖĸËõд´Ê)£¬¼´ - ÊäÈë¡Ã - :set ic + 3. ÏÖÔÚ¿ÉÒÔͨ¹ý¼üÈë n ¼üÔٴβéÕÒµ¥´Ê ignore¡£×¢Òâµ½ Ignore ºÍ IGNORE ÏÖÔÚ + Ò²±»ÕÒµ½ÁË¡£ - 3. ÏÖÔÚ¿ÉÒÔͨ¹ý¼üÈë n ¼üÔٴβéÕÒµ¥´Ê ignore¡£Öظ´²éÕÒ¿ÉÒÔÖØ¸´¼üÈë n ¼ü¡£ + 4. È»ºóÉèÖà hlsearch ºÍ incsearch ÕâÁ½¸öÑ¡ÏÇëÊäÈ룺 :set hls is - 4. È»ºóÉèÖà hlsearch ºÍ incsearch ÕâÁ½¸öÑ¡ÏÊäÈëÒÔÏÂÄÚÈݡà - :set hls is + 5. ÏÖÔÚ¿ÉÒÔÔÙ´ÎÊäÈë²éÕÒÃüÁ¿´¿´»áÓÐʲôЧ¹û£º /ignore <»Ø³µ> - 5. ÏÖÔÚ¿ÉÒÔÔÙ´ÎÊäÈë²éÕÒÃüÁ¿´¿´»áÓÐʲôЧ¹û¡Ã - /ignore + 6. Òª½ûÓúöÂÔ´óСд£¬ÇëÊäÈ룺 :set noic +Ìáʾ£ºÒªÒƳýÆ¥ÅäÏîµÄ¸ßÁÁÏÔʾ£¬ÇëÊäÈ룺 :nohlsearch +Ìáʾ£ºÈç¹ûÄúÏëÒª½öÔÚÒ»´Î²éÕÒʱºöÂÔ×Öĸ´óСд£¬Äú¿ÉÒÔʹÓà \c£º + /ignore\c <»Ø³µ> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ µÚÁù½²Ð¡½á - - 1. ÊäÈëСдµÄ o ¿ÉÒÔÔÚ¹â±êÏ·½´ò¿ªÐµÄÒ»Ðв¢½«¹â±êÖÃÓÚпªµÄÐÐÊ×£¬½øÈë - ²åÈëģʽ¡£ - ÊäÈë´óдµÄ O ¿ÉÒÔÔÚ¹â±êÉÏ·½´ò¿ªÐµÄÒ»Ðв¢½«¹â±êÖÃÓÚпªµÄÐÐÊ×£¬½øÈë - ²åÈëģʽ¡£ + 1. ÊäÈëСдµÄ o ¿ÉÒÔÔÚ¹â±êÏ·½´ò¿ªÐµÄÒ»Ðв¢½øÈë²åÈëģʽ¡£ + ÊäÈë´óдµÄ O ¿ÉÒÔÔÚ¹â±êÉÏ·½´ò¿ªÐµÄÒ»ÐС£ 2. ÊäÈëСдµÄ a ¿ÉÒÔÔÚ¹â±êËùÔÚλÖÃÖ®ºó²åÈëÎı¾¡£ ÊäÈë´óдµÄ A ¿ÉÒÔÔÚ¹â±êËùÔÚÐеÄÐÐĩ֮ºó²åÈëÎı¾¡£ - 3. ÊäÈë´óдµÄ R ½«½øÈëÌæ»»Ä£Ê½£¬Ö±ÖÁ°´ ¼üÍ˳öÌæ»»Ä£Ê½¶ø½øÈëÕý³£ - ģʽ¡£ - - 4. ÊäÈë :set xxx ¿ÉÒÔÉèÖà xxx Ñ¡Ïî¡£ - - - - + 3. e ÃüÁî¿ÉÒÔʹ¹â±êÒÆ¶¯µ½µ¥´Êĩβ¡£ + 4. ²Ù×÷·û y ¸´ÖÆÎı¾£¬p Õ³ÌùÏÈǰ¸´ÖƵÄÎı¾¡£ + 5. ÊäÈë´óдµÄ R ½«½øÈëÌæ»»Ä£Ê½£¬Ö±ÖÁ°´ ¼ü»Øµ½Õý³£Ä£Ê½¡£ + 6. ÊäÈë :set xxx ¿ÉÒÔÉèÖà xxx Ñ¡ÏһЩÓÐÓõÄÑ¡ÏîÈçÏ£º + 'ic' 'ignorecase' ²éÕÒʱºöÂÔ×Öĸ´óСд + 'is' 'incsearch' ²éÕÒ¶ÌÓïʱÏÔʾ²¿·ÖÆ¥Åä + 'hls' 'hlsearch' ¸ßÁÁÏÔʾËùÓÐµÄÆ¥Åä¶ÌÓï + Ñ¡ÏîÃû¿ÉÒÔÓÃÍêÕû°æ±¾£¬Ò²¿ÉÒÔÓÃËõÂÔ°æ±¾¡£ + 7. ÔÚÑ¡Ïîǰ¼ÓÉÏ no ¿ÉÒԹرÕÑ¡Ï :set noic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚÆß½²¡ÃÔÚÏß°ïÖúÃüÁî + µÚÆß½²µÚÒ»½Ú£º»ñÈ¡°ïÖúÐÅÏ¢ + ** ʹÓÃÔÚÏß°ïÖúϵͳ ** Vim ÓµÓÐÒ»¸öϸÖÂÈ«ÃæµÄÔÚÏß°ïÖúϵͳ¡£ÒªÆô¶¯¸Ã°ïÖúϵͳ£¬ÇëÑ¡ÔñÈçÏÂÈýÖÖ·½ - ·¨Ö®Ò»¡Ã + ·¨Ö®Ò»£º - °´Ï ¼ü (Èç¹û¼üÅÌÉÏÓеϰ) - °´Ï ¼ü (Èç¹û¼üÅÌÉÏÓеϰ) - ÊäÈë :help <»Ø³µ> + ÇëÔĶÁ°ïÖú´°¿ÚÖеÄÎÄ×ÖÒÔÁ˽â°ïÖúÊÇÈçºÎ¹¤×÷µÄ¡£ + ÊäÈë CTRL-W CTRL-W ¿ÉÒÔʹÄúÔÚ´°¿ÚÖ®¼äÌø×ª¡£ ÊäÈë :q <»Ø³µ> ¿ÉÒԹرհïÖú´°¿Ú¡£ Ìṩһ¸öÕýÈ·µÄ²ÎÊý¸ø":help"ÃüÁÄú¿ÉÒÔÕÒµ½¹ØÓÚ¸ÃÖ÷ÌâµÄ°ïÖú¡£ÇëÊÔÑéÒÔ - ϲÎÊý(¿É±ðÍüÁ˰´»Ø³µ¼üŶ¡£:)¡Ã + ϲÎÊý(¿É±ðÍüÁ˰´»Ø³µ¼üŶ)£º - :help w <»Ø³µ> - :help c_ - :help insert-index <»Ø³µ> - :help user-manual <»Ø³µ> - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - µÚ°Ë½²¡Ã´´½¨Ò»¸öÆô¶¯½Å±¾ - - ** ÆôÓÃvimµÄ¹¦ÄÜ ** - - VimµÄ¹¦ÄÜÌØÐÔÒª±Èvi¶àµÃ¶à£¬µ«´ó²¿·Ö¹¦Äܶ¼Ã»ÓÐȱʡ¼¤»î¡£ÎªÁËÆô¶¯¸ü¶àµÄ - ¹¦ÄÜ£¬ÄúµÃ´´½¨Ò»¸övimrcÎļþ¡£ - - 1. ¿ªÊ¼±à¼­vimrcÎļþ£¬ÕâÈ¡¾öÓÚÄúËùʹÓõIJÙ×÷ϵͳ¡Ã - - :edit ~/.vimrc ÕâÊÇUnixϵͳËùʹÓõÄÃüÁî - :edit $VIM/_vimrc ÕâÊÇWindowsϵͳËùʹÓõÄÃüÁî - - 2. ½Ó×ŵ¼Èëvimrc·¶ÀýÎļþ¡Ã - - :read $VIMRUNTIME/vimrc_example.vim - - 3. ±£´æÎļþ£¬ÃüÁîΪ¡Ã - - :write - - ÔÚÏ´ÎÄúÆô¶¯vimµÄʱºò£¬±à¼­Æ÷¾Í»áÓÐÁËÓï·¨¸ßÁÁµÄ¹¦ÄÜ¡£Äú¿ÉÒÔ¼ÌÐø°ÑÄúϲ - »¶µÄÆäËü¹¦ÄÜÉèÖÃÌí¼Óµ½Õâ¸övimrcÎļþÖС£ - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - vim ½Ì³Ìµ½´Ë½áÊø¡£±¾½Ì³ÌÖ»ÊÇΪÁ˼òÃ÷µØ½éÉÜÒ»ÏÂvim±à¼­Æ÷£¬µ«ÒÑ×ãÒÔÈÃÄú - ºÜÈÝÒ×ѧ»áʹÓñ¾±à¼­Æ÷ÁË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓкܶàºÜ¶àµÄÃüÁ±¾½Ì³ÌËù½é - ÉܵϹ²îµÃÔ¶ÖøÄØ¡£ËùÒÔÄúÒª¾«Í¨µÄ»°£¬»¹Íû¼ÌÐøÅ¬Á¦Å¶¡£ÏÂÒ»²½Äú¿ÉÒÔÔĶÁ - vimÊֲᣬʹÓõÄÃüÁîÊǡà + :help w + :help c_CTRL-D + :help insert-index :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÆß½²µÚ¶þ½Ú£º´´½¨Æô¶¯½Å±¾ - ΪÁ˸ü½øÒ»²½µÄ²Î¿¼ºÍѧϰ£¬ÒÔÏÂÕâ±¾ÊéÖµµÃÍÆ¼ö¡Ã - Vim - Vi Improved - ×÷Õß¡ÃSteve Oualline - ³ö°æÉç¡ÃNew Riders + ** ÆôÓà Vim µÄÌØÐÔ ** - ÕâÊǵÚÒ»±¾ÍêÈ«½²½âvimµÄÊé¼®¡£¶ÔÓÚ³õѧÕßÌØ±ðÓÐÓá£ÆäÖл¹°üº¬ÓдóÁ¿ÊµÀý - ºÍͼʾ¡£ÓûÖªÏêÇ飬Çë·ÃÎÊ http://iccf-holland.org/click5.html + Vim µÄ¹¦ÄÜÌØÐÔÒª±È Vi ¶àµÃ¶à£¬µ«ÆäÖд󲿷ֶ¼Ã»ÓÐȱʡÆôÓá£ÎªÁËʹÓøü¶àµÄ + ÌØÐÔ£¬ÄúµÃ´´½¨Ò»¸ö vimrc Îļþ¡£ - ÒÔÏÂÕâ±¾Êé±È½ÏÀÏÁ˶øÇÒÄÚÈÝÖ÷ÒªÊÇvi¶ø²»ÊÇvim£¬µ«ÊÇÒ²ÖµµÃÍÆ¼ö¡Ã + 1. ¿ªÊ¼±à¼­ vimrc Îļþ£¬¾ßÌåÃüÁîÈ¡¾öÓÚÄúËùʹÓõIJÙ×÷ϵͳ£º + :edit ~/.vimrc ÕâÊÇ Unix ϵͳËùʹÓõÄÃüÁî + :edit $VIM/_vimrc ÕâÊÇ MS-Windows ϵͳËùʹÓõÄÃüÁî - Learning the Vi Editor - ×÷Õß¡ÃLinda Lamb - ³ö°æÉç¡ÃO'Reilly & Associates Inc. + 2. ½Ó×ŶÁÈ¡ vimrc ʾÀýÎļþµÄÄÚÈÝ£º + :r $VIMRUNTIME/vimrc_example.vim - ÕâÊÇÒ»±¾²»´íµÄÊ飬ͨ¹ýËüÄú¼¸ºõÄܹ»Á˽⵽ȫ²¿viÄܹ»×öµ½µÄÊÂÇé¡£´ËÊéµÄµÚ - Áù¸ö°æ±¾Ò²°üº¬ÁËһЩ¹ØÓÚvimµÄÐÅÏ¢¡£ + 3. ±£´æÎļþ£¬ÃüÁîΪ£º + :write - ±¾½Ì³ÌÊÇÓÉÀ´×ÔCalorado School of MineseµÄMichael C. Pierce¡¢Robert K. - Ware Ëù±àдµÄ£¬ÆäÖÐÀ´×ÔColorado State UniversityµÄCharles SmithÌṩÁË - ºÜ¶à´´Òâ¡£±àÕßͨÐŵØÖ·Êǡà + Ï´ÎÄúÆô¶¯ Vim ʱ£¬±à¼­Æ÷¾Í»áÓÐÁËÓï·¨¸ßÁÁµÄ¹¦ÄÜ¡£ + Äú¿ÉÒÔ°ÑÄúϲ»¶µÄ¸÷ÖÖÉèÖÃÌí¼Óµ½Õâ¸ö vimrc ÎļþÖС£ + ÒªÁ˽â¸ü¶àÐÅÏ¢ÇëÊäÈë :help vimrc-intro - bware@mines.colorado.edu +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÆß½²µÚÈý½Ú£º²¹È«¹¦ÄÜ - ±¾½Ì³ÌÒÑÓÉBram MoolenaarרΪvim½øÐÐÐÞ¶©¡£ + + ** ʹÓà CTRL-D ºÍ ¿ÉÒÔ½øÐÐÃüÁîÐв¹È« ** + + 1. ÇëÈ·±£ Vim ²»ÊÇÔÚÒÔ¼æÈÝģʽÔËÐУº :set nocp + + 2. ²é¿´Ò»Ïµ±Ç°Ä¿Â¼ÏÂÒѾ­´æÔÚÄÄЩÎļþ£¬ÊäÈ룺 :!ls »òÕß :!dir + + 3. ÏÖÔÚÊäÈëÒ»¸öĿ¼µÄÆðʼ²¿·Ö£¬ÀýÈçÊäÈ룺 :e + + 4. ½Ó×Ű´ CTRL-D ¼ü£¬Vim »áÏÔʾÒÔ e ¿ªÊ¼µÄÃüÁîµÄÁÐ±í¡£ + + 5. È»ºó°´ ¼ü£¬Vim »á²¹È«ÃüÁîΪ :edit ¡£ + + 6. ÏÖÔÚÌí¼ÓÒ»¸ö¿Õ¸ñ£¬ÒÔ¼°Ò»¸öÒÑÓÐÎļþµÄÎļþÃûµÄÆðʼ²¿·Ö£¬ÀýÈ磺 :edit FIL + + 7. ½Ó×Ű´ ¼ü£¬Vim »á²¹È«ÎļþÃû(Èç¹ûËüÊÇΩһƥÅäµÄ)¡£ + +Ìáʾ£º²¹È«¶ÔÓÚÐí¶àÃüÁî¶¼ÓÐЧ¡£ÄúÖ»Ðè³¢ÊÔ°´ CTRL-D ºÍ ¡£ + Ëü¶ÔÓÚ :help ÃüÁî·Ç³£ÓÐÓᣠ+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + µÚÆß½²Ð¡½á + + + 1. ÊäÈë :help »òÕß°´ ¼ü»ò ¼ü¿ÉÒÔ´ò¿ª°ïÖú´°¿Ú¡£ + + 2. ÊäÈë :help cmd ¿ÉÒÔÕÒµ½¹ØÓÚ cmd ÃüÁîµÄ°ïÖú¡£ + + 3. ÊäÈë CTRL-W CTRL-W ¿ÉÒÔʹÄúÔÚ´°¿ÚÖ®¼äÌø×ª¡£ + + 4. ÊäÈë :q ÒԹرհïÖú´°¿Ú + + 5. Äú¿ÉÒÔ´´½¨Ò»¸ö vimrc Æô¶¯½Å±¾ÎļþÓÃÀ´±£´æÄúÆ«ºÃµÄÉèÖᣠ+ + 6. µ±ÊäÈë : ÃüÁîʱ£¬°´ CTRL-D ¿ÉÒԲ鿴¿ÉÄܵIJ¹È«½á¹û¡£ + °´ ¿ÉÒÔʹÓÃÒ»¸ö²¹È«¡£ - ÒëÖÆÕ߸½ÑÔ¡Ã + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + vim ½Ì³Ìµ½´Ë¾Í½áÊøÁË¡£±¾½Ì³ÌÖ»ÊÇΪÁ˼òÃ÷µØ½éÉÜһϠVim ±à¼­Æ÷£¬µ«ÒÑ×ãÒÔÈÃÄú + ºÜÈÝÒ×ʹÓÃÕâ¸ö±à¼­Æ÷ÁË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓкܶàºÜ¶àµÄÃüÁ±¾½Ì³ÌËù½é + ÉܵľàÀëÍêÕûµÄ²îµÃºÜÔ¶¡£ËùÒÔÄúÒª¾«Í¨µÄ»°£¬»¹Íû¼ÌÐøÅ¬Á¦Å¶¡£ÏÂÒ»²½Äú¿ÉÒÔÔĶÁ + Vim µÄÓû§ÊֲᣬʹÓõÄÃüÁîÊÇ£º :help user-manual + + ÏÂÃæÕâ±¾ÊéÖµµÃÍÆ¼öÓÃÓÚ¸ü½øÒ»²½µÄÔĶÁºÍѧϰ£º + Vim - Vi Improved - ×÷ÕߣºSteve Oualline + ³ö°æÉ磺New Riders + ÕâÊǵÚÒ»±¾ÍêÈ«½²½â Vim µÄÊé¼®¡£Ëü¶ÔÓÚ³õѧÕßÌØ±ðÓÐÓá£ÆäÖаüº¬ÓдóÁ¿ÊµÀý + ºÍͼʾ¡£ + ÓûÖªÏêÇ飬Çë·ÃÎÊ http://iccf-holland.org/click5.html + + ÒÔÏÂÕâ±¾Êé±È½ÏÀÏÁ˶øÇÒÄÚÈݸü¶àÊǹØÓÚ Vi ¶ø·Ç Vim£¬µ«ÊÇÒ²ÖµµÃÍÆ¼ö£º + Learning the Vi Editor - ×÷ÕߣºLinda Lamb + ³ö°æÉ磺O'Reilly & Associates Inc. + ÕâÊÇÒ»±¾²»´íµÄÊ飬ͨ¹ýËüÄú¼¸ºõÄܹ»Á˽⵽ÈκÎÄúÏëҪʹÓà Vi ×öµÄÊÂÇé¡£ + ´ËÊéµÄµÚÁù¸ö°æ±¾Ò²°üº¬ÁËһЩ¹ØÓÚ Vim µÄÐÅÏ¢¡£ + + ±¾½Ì³ÌÊÇÓÉÀ´×Ô Calorado School of Mines µÄ Michael C. Pierce ºÍ + Robert K. Ware Ëù±àдµÄ£¬ÆäÖкܶഴÒâÓÉÀ´×Ô Colorado State University µÄ + Charles Smith Ìṩ¡£±àÕߵĵç×ÓÓÊÏäÊÇ£ºbware@mines.colorado.edu + + ±¾½Ì³ÌÒÑÓÉ Bram Moolenaar רΪ Vim ½øÐÐÐÞ¶©¡£ + + ÒëÖÆÕ߸½ÑÔ£º =========== ¼òÌåÖÐÎĽ̷̳­Òë°æÖ®ÒëÖÆÕßΪÁº²ýÌ© £¬»¹ÓÐ - ÁíÍâÒ»¸öÁªÏµµØÖ·¡Ãlinuxrat@gnuchina.org¡£ + ÁíÍâÒ»¸öÁªÏµµØÖ·£ºlinuxrat@gnuchina.org¡£ ·±ÌåÖÐÎĽ̳ÌÊÇ´Ó¼òÌåÖÐÎĽ̷̳­Òë°æÊ¹Óà Debian GNU/Linux ÖÐÎÄÏîĿС ×éµÄÓÚ¹ã»ÔÏÈÉú±àдµÄÖÐÎĺº×ÖתÂëÆ÷ autoconvert ת»»¶ø³ÉµÄ£¬²¢¶Ôת »»µÄ½á¹û×öÁËһЩϸ½ÚµÄ¸Ä¶¯¡£ - ±ä¸ü¼Ç¼¡Ã + ±ä¸ü¼Ç¼£º ========= + 2012Äê10ÔÂ01ÈÕ ÕÔÌÎ + ½« vimtutor ÖÐÒë°æ´Ó 1.5 Éý¼¶µ½ 1.7¡£ + 2002Äê08ÔÂ30ÈÕ Áº²ýÌ© ¸Ðл RMS@SMTH µÄÖ¸Õý£¬½«¶à´¦´íÎóÐÞÕý¡£ diff --git a/runtime/tutor/tutor.zh.utf-8 b/runtime/tutor/tutor.zh.utf-8 deleted file mode 100644 index 21d702051d..0000000000 --- a/runtime/tutor/tutor.zh.utf-8 +++ /dev/null @@ -1,852 +0,0 @@ -=============================================================================== -= æ­¡ 迎 é–± 讀 《 V I M æ•™ 程 》 ── 版本 1.5 = -=============================================================================== - vim 是一個具有很多命令的功能éžå¸¸å¼·å¤§çš„編輯器。é™äºŽç¯‡å¹…,在本教程當中 - ä¸å°±è©³ç´°ä»‹ç´¹äº†ã€‚本教程的設計目標是講述一些必è¦çš„基本命令,而掌æ¡å¥½é€™ - 些命令,您就能夠很容易將vim當作一個通用的è¬èƒ½ç·¨è¼¯å™¨ä¾†ä½¿ç”¨äº†ã€‚ - - å®Œæˆæœ¬æ•™ç¨‹çš„內容大約需è¦25-30分é˜ï¼Œå–決于您訓練的時間。 - - æ¯ä¸€ç¯€çš„命令æ“作將會更改本文。推薦您復制本文的一個副本,然後在副本上 - 進行訓練(如果您是通éŽ"vimtutor"來啟動教程的,那麼本文就已經是副本了)。 - - 切記一點︰本教程的設計æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­é€²è¡Œå­¸ç¿’的。也就是說,您需è¦é€šéŽ - åŸ·è¡Œå‘½ä»¤ä¾†å­¸ç¿’å®ƒå€‘æœ¬èº«çš„æ­£ç¢ºç”¨æ³•ã€‚å¦‚æžœæ‚¨åªæ˜¯é–±è®€è€Œä¸æ“作,那麼您å¯èƒ½ - 會很快éºå¿˜é€™äº›å‘½ä»¤çš„ï¼ - - 好了,ç¾åœ¨è«‹ç¢ºå®šæ‚¨çš„Shift-Lock(大å°å¯«éŽ–å®šéµ)還沒有按下,然後按éµç›¤ä¸Š - 的字æ¯éµ j 足夠多的次數來移動光標,直到第一節的內容能夠完全充滿å±å¹•。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一講第一節︰移動光標 - - - ※※ è¦ç§»å‹•光標,請ä¾ç…§èªªæ˜Žåˆ†åˆ¥æŒ‰ä¸‹ hã€jã€kã€l éµã€‚ ※※ - - ^ - k æç¤ºï¸° h çš„éµä½äºŽå·¦é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘左移動。 - < h l > l çš„éµä½äºŽå³é‚Šï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±æœƒå‘å³ç§»å‹•。 - j j éµçœ‹èµ·ä¾†å¾ˆè±¡ä¸€æ”¯å°–ç«¯æ–¹å‘æœä¸‹çš„箭頭。 - v - - 1. 請隨æ„在å±å¹•內移動光標,直至您覺得舒æœç‚ºæ­¢ã€‚ - - 2. 按下下行éµ(j),直到出ç¾å…‰æ¨™é‡å¾©ä¸‹è¡Œã€‚ - ----> ç¾åœ¨æ‚¨æ‡‰è©²å·²ç¶“學會如何移動到下一講å§ã€‚ - - 3. ç¾åœ¨è«‹ä½¿ç”¨ä¸‹è¡Œéµï¼Œå°‡å…‰æ¨™ç§»å‹•到第二講。 - -æç¤ºï¸°å¦‚æžœæ‚¨ä¸æ•¢ç¢ºå®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè«‹æŒ‰ä¸‹éµå›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚ - ç„¶å¾Œå†æ¬¡å¾žéµç›¤è¼¸å…¥æ‚¨æƒ³è¦çš„命令。 - -æç¤ºï¸°å…‰æ¨™éµæ‡‰ç•¶ä¹Ÿèƒ½æ­£å¸¸å·¥ä½œçš„。但是使用hjkléµï¼Œåœ¨ç¿’慣之後您就能夠快速 - 地在å±å¹•內四處移動光標了。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一講第二節︰VIM的進入和退出 - - - !! 特別æç¤ºï¸°æ•¬è«‹é–±è®€å®Œæ•´æœ¬ä¸€ç¯€çš„內容,然後æ‰èƒ½åŸ·è¡Œä»¥ä¸‹æ‰€è¬›è§£çš„命令。 - - 1. 請按éµ(é€™æ˜¯ç‚ºäº†ç¢ºä¿æ‚¨è™•在正常模å¼)。 - - 2. 然後輸入︰ :q! <回車> - ----> 這種方å¼çš„é€€å‡ºç·¨è¼¯å™¨çµ•ä¸æœƒä¿å­˜æ‚¨é€²å…¥ç·¨è¼¯å™¨ä»¥ä¾†æ‰€åšçš„æ”¹å‹•。 - 如果您想ä¿å­˜æ›´æ”¹å†é€€å‡ºï¼Œè«‹è¼¸å…¥ï¸° - :wq <回車> - - 3. 如果您看到了命令行æç¤ºç¬¦ï¼Œè«‹è¼¸å…¥èƒ½å¤ å¸¶æ‚¨å›žåˆ°æœ¬æ•™ç¨‹çš„命令,那就是︰ - - vimtutor <回車> - - 通常情æ³ä¸‹æ‚¨ä¹Ÿå¯ä»¥ç”¨é€™ç¨®æ–¹å¼ï¸° - - vim tutor <回車> - ----> 這裡的 'vim' 表示進入vim編輯器,而 'tutor'則是您準備è¦ç·¨è¼¯çš„æ–‡ä»¶ã€‚ - - 4. 如果您自信已經牢牢記ä½äº†é€™äº›æ­¥é©Ÿçš„話,請從步驟1執行到步驟3退出,然 - å¾Œå†æ¬¡é€²å…¥ç·¨è¼¯å™¨ã€‚接著將光標移動到第一講第三節來繼續我們的教程講解。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一講第三節︰文本編輯之刪除 - - - ** 在正常(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x éµä¾†åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符。** - - 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 - - 2. 為了修正輸入錯誤,請將光標移至準備刪除的字符的ä½ç½®è™•。 - - 3. 然後按下 x éµå°‡éŒ¯èª¤å­—符刪除掉。 - - 4. é‡å¾©æ­¥é©Ÿ2到步驟4,直到å¥å­ä¿®æ­£ç‚ºæ­¢ã€‚ - ----> The ccow jumpedd ovverr thhe mooon. - - 5. 好了,該行已經修正了,下一節內容是第一講第四節。 - -特別æç¤ºï¸°åœ¨æ‚¨ç€è¦½æœ¬æ•™ç¨‹æ™‚,ä¸è¦å¼·è¡Œè¨˜æ†¶ã€‚記ä½ä¸€é»žï¸°åœ¨ä½¿ç”¨ä¸­å­¸ç¿’。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一講第四節︰文本編輯之æ’å…¥ - - - ** 在正常模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i éµä¾†æ’入文本。** - - 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 - - 2. 為了使得第一行內容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè«‹å°‡å…‰æ¨™ç§»è‡³æ–‡æœ¬ç¬¬ä¸€å€‹å­—符準備æ’å…¥ - çš„ä½ç½®ã€‚ - - 3. 然後按下 i éµï¼ŒæŽ¥è‘—輸入必è¦çš„æ–‡æœ¬å­—符。 - - 4. 所有文本都修正完畢,請按下 éµè¿”回正常模å¼ã€‚ - é‡å¾©æ­¥é©Ÿ2至步驟4以便修正å¥å­ã€‚ - ----> There is text misng this . ----> There is some text missing from this line. - - 5. å¦‚æžœæ‚¨å°æ–‡æœ¬æ’å…¥æ“作已經很滿æ„,請接著閱讀下é¢çš„å°çµã€‚ - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一講å°çµ - - - 1. 光標在å±å¹•文本中的移動既å¯ä»¥ç”¨ç®­é ­éµï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯éµã€‚ - h (左移) j (下行) k (上行) l (å³ç§») - - 2. 欲進入vim編輯器(從命令行æç¤ºç¬¦),請輸入︰vim 文件å <回車> - - 3. 欲退出vim編輯器,請輸入以下命令放棄所有修改︰ - - :q! <回車> - - 或者輸入以下命令ä¿å­˜æ‰€æœ‰ä¿®æ”¹ï¸° - - :wq <回車> - - 4. 在正常模å¼ä¸‹åˆªé™¤å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請按︰ x - - 5. 在正常模å¼ä¸‹è¦åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®é–‹å§‹æ’入文本,請按︰ - - i è¼¸å…¥å¿…è¦æ–‡æœ¬ - -特別æç¤ºï¸°æŒ‰ä¸‹ 鵿œƒå¸¶æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–è€…å–æ¶ˆä¸€å€‹ä¸æœŸæœ›æˆ–è€…éƒ¨åˆ†å®Œæˆ -的命令。 - -å¥½äº†ï¼Œç¬¬ä¸€è¬›åˆ°æ­¤çµæŸã€‚ä¸‹é¢æŽ¥ä¸‹ä¾†ç¹¼çºŒç¬¬äºŒè¬›çš„å…§å®¹ã€‚ - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講第一節︰刪除類命令 - - - ** 輸入 dw å¯ä»¥å¾žå…‰æ¨™è™•刪除至一個單字/單詞的末尾。** - - 1. 請按下 éµç¢ºä¿æ‚¨è™•于正常模å¼ã€‚ - - 2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 - - 3. 請將光標移至準備è¦åˆªé™¤çš„單詞的開始。 - - 4. 接著輸入 dw 刪除掉該單詞。 - - 特別æç¤ºï¸°æ‚¨æ‰€è¼¸å…¥çš„ dw æœƒåœ¨æ‚¨è¼¸å…¥çš„åŒæ™‚出ç¾åœ¨å±å¹•的最後一行。如果您輸 - 入有誤,請按下 éµå–æ¶ˆï¼Œç„¶å¾Œé‡æ–°å†ä¾†ã€‚ - ----> There are a some words fun that don't belong paper in this sentence. - - 5. é‡å¾©æ­¥é©Ÿ3至步驟4,直至å¥å­ä¿®æ­£å®Œç•¢ã€‚接著繼續第二講第二節內容。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講第二節︰其他刪除類命令 - - - ** 輸入 d$ 從當å‰å…‰æ¨™åˆªé™¤åˆ°è¡Œæœ«ã€‚** - - 1. 請按下 éµç¢ºä¿æ‚¨è™•于正常模å¼ã€‚ - - 2. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 - - 3. 請將光標移動到該行的尾部(也就是在第一個點號‘.’後é¢)。 - - 4. 然後輸入 d$ 從光標處刪至當å‰è¡Œå°¾éƒ¨ã€‚ - ----> Somebody typed the end of this line twice. end of this line twice. - - - 5. è«‹ç¹¼çºŒå­¸ç¿’ç¬¬äºŒè¬›ç¬¬ä¸‰ç¯€å°±çŸ¥é“æ˜¯æ€Žéº¼å›žäº‹äº†ã€‚ - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講第三節︰關于命令和å°è±¡ - - - 刪除命令 d 的格å¼å¦‚下︰ - - [number] d object 或者 d [number] object - - å…¶æ„如下︰ - number - 代表執行命令的次數(å¯é¸é …,缺çœè¨­ç½®ç‚º 1 )。 - d - 代表刪除。 - object - ä»£è¡¨å‘½ä»¤æ‰€è¦æ“作的å°è±¡(䏋颿œ‰ç›¸é—œä»‹ç´¹)。 - - 一個簡短的å°è±¡åˆ—表︰ - w - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,包括空格。 - e - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°å–®å­—/單詞末尾,但是 *ä¸* 包括空格。 - $ - 從當å‰å…‰æ¨™ç•¶å‰ä½ç½®ç›´åˆ°ç•¶å‰è¡Œæœ«ã€‚ - -特別æç¤ºï¸° - å°äºŽå‹‡äºŽæŽ¢ç´¢è€…,請在正常模å¼ä¸‹é¢åƒ…按代表相應å°è±¡çš„éµè€Œä¸ä½¿ç”¨å‘½ä»¤ï¼Œå‰‡ - 將看到光標的移動正如上é¢çš„å°è±¡åˆ—表所代表的一樣。 - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講第四節︰å°è±¡å‘½ä»¤çš„ç‰¹æ®Šæƒ…æ³ - - - ** 輸入 dd å¯ä»¥åˆªé™¤æ•´ä¸€å€‹ç•¶å‰è¡Œã€‚ ** - - 鑒于整行刪除的高頻度,VIM 的設計者決定è¦ç°¡åŒ–整行刪除,僅需è¦åœ¨åŒä¸€è¡Œä¸Š - 擊打兩次 d å°±å¯ä»¥åˆªé™¤æŽ‰å…‰æ¨™æ‰€åœ¨çš„æ•´è¡Œäº†ã€‚ - - 1. 請將光標移動到本節中下é¢çš„çŸ­å¥æ®µè½ä¸­çš„第二行。 - 2. 輸入 dd 刪除該行。 - 3. 然後移動到第四行。 - 4. 接著輸入 2dd (還記得å‰é¢è¬›éŽçš„ number-command-object 嗎?) 刪除兩行。 - - 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. - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講第五節︰撤消類命令 - - - ** 輸入 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. 這些都是éžå¸¸æœ‰ç”¨çš„å‘½ä»¤ã€‚ä¸‹é¢æ˜¯ç¬¬äºŒè¬›çš„å°çµäº†ã€‚ - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二講å°çµ - - - 1. 欲從當å‰å…‰æ¨™åˆªé™¤è‡³å–®å­—/單詞末尾,請輸入︰dw - - 2. 欲從當å‰å…‰æ¨™åˆªé™¤è‡³ç•¶å‰è¡Œæœ«å°¾ï¼Œè«‹è¼¸å…¥ï¸°d$ - - 3. 欲刪除整行,請輸入︰dd - - 4. 在正常模å¼ä¸‹ä¸€å€‹å‘½ä»¤çš„æ ¼å¼æ˜¯ï¸° - - [number] command object 或者 command [number] object - å…¶æ„æ˜¯ï¸° - number - 代表的是命令執行的次數 - command - 代表è¦åšçš„事情,比如 d 代表刪除 - object - ä»£è¡¨è¦æ“作的å°è±¡ï¼Œæ¯”如 w 代表單字/單詞,$ 代表到行末等等。 - $ (to the end of line), etc. - - 5. 欲撤消以å‰çš„æ“ä½œï¼Œè«‹è¼¸å…¥ï¸°u (å°å¯«çš„u) - 欲撤消在一行中所åšçš„æ”¹å‹•,請輸入︰U (大寫的U) - 欲撤消以å‰çš„æ’¤æ¶ˆå‘½ä»¤ï¼Œæ¢å¾©ä»¥å‰çš„æ“ä½œçµæžœï¼Œè«‹è¼¸å…¥ï¸°CTRL-R - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三講第一節︰置入類命令 - - - ** 輸入 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, - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三講第二節︰替æ›é¡žå‘½ä»¤ - - - ** 輸入 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. 然後我們繼續學校第三講第三節。 - -特別æç¤ºï¸°åˆ‡è¨˜æ‚¨è¦åœ¨ä½¿ç”¨ä¸­å­¸ç¿’ï¼Œè€Œä¸æ˜¯åœ¨è¨˜æ†¶ä¸­å­¸ç¿’。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三講第三節︰更改類命令 - - - ** è¦æ”¹è®Šä¸€å€‹å–®å­—/單詞的部分或者全部,請輸入 cw ** - - 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 - - 2. 接著把光標放在單詞 lubw çš„å­—æ¯ u çš„ä½ç½®é‚£è£¡ã€‚ - - 3. 然後輸入 cw å°±å¯ä»¥ä¿®æ­£è©²å–®è©žäº†(在本例這裡是輸入 ine 。) - - 4. 最後按 éµï¼Œç„¶å¾Œå…‰æ¨™å®šä½åˆ°ä¸‹ä¸€å€‹éŒ¯èª¤ç¬¬ä¸€å€‹æº–備更改的字æ¯è™•。 - - 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 命令ä¸åƒ…僅是替æ›äº†ä¸€å€‹å–®è©žï¼Œä¹Ÿè®“您進入文本æ’入狀態了。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三講第四節︰使用c指令的其他更改類命令 - - - ** 更改類指令å¯ä»¥ä½¿ç”¨åŒåˆªé™¤é¡žå‘½ä»¤æ‰€ä½¿ç”¨çš„å°è±¡åƒæ•¸ã€‚** - - 1. 更改類指令的工作方å¼è·Ÿåˆªé™¤é¡žå‘½ä»¤æ˜¯ä¸€è‡´çš„。æ“ä½œæ ¼å¼æ˜¯ï¸° - - [number] c object 或者 c [number] object - - 2. å°è±¡åƒæ•¸ä¹Ÿæ˜¯ä¸€æ¨£çš„,比如 w 代表單字/單詞,$代表行末等等。 - - 3. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行。 - - 4. 接著將光標移動到第一個錯誤處。 - - 5. 然後輸入 c$ 使得該行剩下的部分更正得åŒç¬¬äºŒè¡Œä¸€æ¨£ã€‚最後按 éµã€‚ - ----> 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. - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三講å°çµ - - - 1. è¦é‡æ–°ç½®å…¥å·²ç¶“刪除的文本內容,請輸入å°å¯«å­—æ¯ p。該æ“作å¯ä»¥å°‡å·²åˆªé™¤ - 的文本內容置于光標之後。如果最後一次刪除的是一個整行,那麼該行將置 - 于當å‰å…‰æ¨™æ‰€åœ¨è¡Œçš„下一行。 - - 2. è¦æ›¿æ›å…‰æ¨™æ‰€åœ¨ä½ç½®çš„字符,請輸入å°å¯«çš„ r å’Œè¦æ›¿æ›æŽ‰åŽŸä½ç½®å­—符的新字 - 符å³å¯ã€‚ - - 3. 更改類命令å…許您改變指定的å°è±¡ï¼Œå¾žç•¶å‰å…‰æ¨™æ‰€åœ¨ä½ç½®ç›´åˆ°å°è±¡çš„æœ«å°¾ã€‚ - 比如輸入 cw å¯ä»¥æ›¿æ›ç•¶å‰å…‰æ¨™åˆ°å–®è©žçš„æœ«å°¾çš„內容;輸入 c$ å¯ä»¥æ›¿æ›ç•¶ - å‰å…‰æ¨™åˆ°è¡Œæœ«çš„內容。 - - 4. æ›´æ”¹é¡žå‘½ä»¤çš„æ ¼å¼æ˜¯ï¸° - - [number] c object 或者 c [number] object - -䏋颿ˆ‘們繼續學習下一講。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四講第一節︰定ä½åŠæ–‡ä»¶ç‹€æ…‹ - - - ** 輸入 CTRL-g 顯示當å‰ç·¨è¼¯æ–‡ä»¶ä¸­ç•¶å‰å…‰æ¨™æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚ - 輸入 SHIFT-G 則直接跳轉到文件中的æŸä¸€æŒ‡å®šè¡Œã€‚** - - æç¤ºï¸°åˆ‡è¨˜è¦å…ˆé€šè®€æœ¬ç¯€å…§å®¹ï¼Œä¹‹å¾Œæ‰å¯ä»¥åŸ·è¡Œä»¥ä¸‹æ­¥é©Ÿ!!! - - 1. 按下 CTRL éµä¸æ”¾é–‹ç„¶å¾ŒæŒ‰ g éµã€‚然後就會看到é é¢æœ€åº•部出ç¾ä¸€å€‹ç‹€æ…‹ä¿¡ - æ¯è¡Œï¼Œé¡¯ç¤ºçš„內容是當å‰ç·¨è¼¯çš„æ–‡ä»¶åå’Œæ–‡ä»¶çš„ç¸½è¡Œæ•¸ã€‚è«‹è¨˜ä½æ­¥é©Ÿ3的行號。 - - 2. 按下 SHIFT-G éµå¯ä»¥ä½¿å¾—ç•¶å‰å…‰æ¨™ç›´æŽ¥è·³è½‰åˆ°æ–‡ä»¶æœ€å¾Œä¸€è¡Œã€‚ - - 3. 輸入您曾åœç•™çš„行號,然後按下 SHIFT-G。這樣就å¯ä»¥è¿”回到您第一次按下 - CTRL-g 時所在的行好了。注æ„ï¸°è¼¸å…¥è¡Œè™Ÿæ™‚ï¼Œè¡Œè™Ÿæ˜¯ä¸æœƒåœ¨å±å¹•上顯示出來 - 的。 - - 4. 如果願æ„,您å¯ä»¥ç¹¼çºŒåŸ·è¡Œæ­¥é©Ÿ1至步驟三。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四講第二節︰æœç´¢é¡žå‘½ä»¤ - - - ** 輸入 / 以åŠå°¾éš¨çš„字符串å¯ä»¥ç”¨ä»¥åœ¨ç•¶å‰æ–‡ä»¶ä¸­æŸ¥æ‰¾è©²å­—符串。** - - 1. 在正常模å¼ä¸‹è¼¸å…¥ / 字符。您此時會注æ„到該字符和光標都會出ç¾åœ¨å±å¹•底 - 部,這跟 : 命令是一樣的。 - - 2. 接著輸入 errroor <回車>。那個errroorå°±æ˜¯æ‚¨è¦æŸ¥æ‰¾çš„字符串。 - - 3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n éµã€‚è¦å‘ç›¸åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­— - 符串,請輸入 Shift-N å³å¯ã€‚ - - 4. å¦‚æžœæ‚¨æƒ³é€†å‘æŸ¥æ‰¾å­—符串,請使用 ? 代替 / 進行。 - ----> When the search reaches the end of the file it will continue at the start. - - "errroor" is not the way to spell error; errroor is an error. - - æç¤ºï¸°å¦‚æžœæŸ¥æ‰¾å·²ç¶“åˆ°é”æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾æœƒè‡ªå‹•從文件頭部繼續查找。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四講第三節︰é…å°æ‹¬è™Ÿçš„æŸ¥æ‰¾ - - - ** 按 % å¯ä»¥æŸ¥æ‰¾é…å°çš„æ‹¬è™Ÿ )ã€]ã€}。** - - 1. æŠŠå…‰æ¨™æ”¾åœ¨æœ¬ç¯€ä¸‹é¢æ¨™è¨˜æœ‰ --> 那一行中的任何一個 (ã€[ 或 { 處。 - - 2. 接著按 % 字符。 - - 3. 此時光標的ä½ç½®æ‡‰ç•¶æ˜¯åœ¨é…å°çš„æ‹¬è™Ÿè™•。 - - 4. 冿¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…å°çš„第一個括號處。 - ----> This ( is a test line with ('s, ['s ] and {'s } in it. )) - -æç¤ºï¸°åœ¨ç¨‹åºèª¿è©¦æ™‚,這個功能用來查找ä¸é…å°çš„æ‹¬è™Ÿæ˜¯å¾ˆæœ‰ç”¨çš„。 - - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四講第四節︰修正錯誤的方法之一 - - - ** 輸入 :s/old/new/g å¯ä»¥æ›¿æ› old 為 new。** - - 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 - - 2. 輸入 :s/thee/the <回車> 。請注æ„è©²å‘½ä»¤åªæ”¹è®Šå…‰æ¨™æ‰€åœ¨è¡Œçš„ç¬¬ä¸€å€‹åŒ¹é… - 串。 - - 3. 輸入 :s/thee/the/g 則是替æ›å…¨è¡Œçš„匹é…串。 - ----> the best time to see thee flowers is in thee spring. - - 4. è¦æ›¿æ›å…©è¡Œä¹‹é–“出ç¾çš„æ¯å€‹åŒ¹é…串,請輸入 :#,#s/old/new/g (#,#代表的是 - 兩行的行號)。輸入 :%s/old/new/g å‰‡æ˜¯æ›¿æ›æ•´å€‹æ–‡ä»¶ä¸­çš„æ¯å€‹åŒ¹é…串。 - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四講å°çµ - - - 1. Ctrl-g 用于顯示當å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶ç‹€æ…‹ä¿¡æ¯ã€‚Shift-G 用于將光標跳 - 轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將光標移動至該行 - 號代表的行。 - - 2. 輸入 / ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—ç¬¦ä¸²æ˜¯å‰‡æ˜¯åœ¨ç•¶å‰æ‰€ç·¨è¼¯çš„æ–‡æª”中å‘後查找該字符串。 - 輸入å•號 ? ç„¶å¾Œç·Šéš¨ä¸€å€‹å­—ç¬¦ä¸²æ˜¯å‰‡æ˜¯åœ¨ç•¶å‰æ‰€ç·¨è¼¯çš„æ–‡æª”中å‘剿Ÿ¥æ‰¾è©²å­— - 符串。完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹å¾ŒæŒ‰ n éµå‰‡æ˜¯é‡å¾©ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查 - 找下一個字符串所在;或者按 Shift-N å‘ç›¸åæ–¹å‘查找下該字符串所在。 - - 3. 如果光標當å‰ä½ç½®æ˜¯æ‹¬è™Ÿ(ã€)ã€[ã€]ã€{ã€},按 % å¯ä»¥å°‡å…‰æ¨™ç§»å‹•到é…å°çš„ - 括號上。 - - 4. 在一行內替æ›é ­ä¸€å€‹å­—符串 old 為新的字符串 new,請輸入 :s/old/new - åœ¨ä¸€è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :s/old/new/g - åœ¨å…©è¡Œå…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :#,#s/old/new/g - åœ¨æ–‡ä»¶å…§æ›¿æ›æ‰€æœ‰çš„字符串 old 為新的字符串 new,請輸入 :%s/old/new/g - é€²è¡Œå…¨æ–‡æ›¿æ›æ™‚è©¢å•ç”¨æˆ¶ç¢ºèªæ¯å€‹æ›¿æ›éœ€æ·»åŠ  c é¸é …,請輸入 :%s/old/new/gc - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五講第一節︰在 VIM 內執行外部命令的方法 - - - ** 輸入 :! 然後緊隨著輸入一個外部命令å¯ä»¥åŸ·è¡Œè©²å¤–部命令。** - - 1. 按下我們所熟悉的 : 命令設置光標到å±å¹•底部。這樣就å¯ä»¥è®“您輸入命令了。 - - 2. 接著輸入感嘆號 ! 這個字符,這樣就å…許您執行外部的 shell 命令了。 - - 3. 我們以 ls 命令為例。輸入 !ls <回車> 。該命令就會列舉出您當å‰ç›®éŒ„çš„ - å…§å®¹ï¼Œå°±å¦‚åŒæ‚¨åœ¨å‘½ä»¤è¡Œæç¤ºç¬¦ä¸‹è¼¸å…¥ ls å‘½ä»¤çš„çµæžœä¸€æ¨£ã€‚如果 !ls æ²’èµ· - 作用,您å¯ä»¥è©¦è©¦ :!dir 看看。 - ----> æç¤ºï¸° 所有的外部命令都å¯ä»¥ä»¥é€™ç¨®æ–¹å¼åŸ·è¡Œã€‚ - ----> æç¤ºï¸° 所有的 : 命令都必須以 <回車> 告終。 - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五講第二節︰關于ä¿å­˜æ–‡ä»¶çš„æ›´å¤šä¿¡æ¯ - - - ** è¦å°‡å°æ–‡ä»¶çš„æ”¹å‹•ä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè«‹è¼¸å…¥ :w FILENAME ** - - 1. 輸入 :!dir 或者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„çš„å…§å®¹ã€‚æ‚¨æ‡‰ç•¶å·²çŸ¥é“æœ€å¾Œé‚„得敲 - <回車> å§ã€‚ - - 2. 鏿“‡ä¸€å€‹å°šæœªå­˜åœ¨æ–‡ä»¶å,比如 TEST 。 - - 3. 接著輸入 :w TEST (此處 TEST æ˜¯æ‚¨æ‰€é¸æ“‡çš„æ–‡ä»¶å。) - - 4. 該命令會以 TEST 為文件åä¿å­˜æ•´å€‹æ–‡ä»¶ (VIM 教程)ã€‚ç‚ºäº†ç¢ºä¿æ­£ç¢ºä¿å­˜ï¼Œ - è«‹å†æ¬¡è¼¸å…¥ :!dir 查看您的目錄列表內容。 - ----> 請注æ„︰如果您退出 VIM 然後在以文件å TEST ç‚ºåƒæ•¸é€²å…¥ï¼Œé‚£éº¼è©²æ–‡ä»¶å…§ - å®¹æ‡‰è©²åŒæ‚¨ä¿å­˜æ™‚的文件內容是完全一樣的。 - - 5. ç¾åœ¨æ‚¨å¯ä»¥é€šéŽè¼¸å…¥ :!rm TEST 來刪除 TEST 文件了。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ç¬¬äº”è¬›ç¬¬ä¸‰ç¯€ï¸°ä¸€å€‹å…·æœ‰é¸æ“‡æ€§çš„ä¿å­˜å‘½ä»¤ - - - ** è¦ä¿å­˜æ–‡ä»¶çš„部分內容,請輸入 :#,# w FILENAME ** - - 1. å†ä¾†åŸ·è¡Œä¸€æ¬¡ :!dir 或者 :!ls ç²çŸ¥ç•¶å‰ç›®éŒ„çš„å…§å®¹ï¼Œç„¶å¾Œé¸æ“‡ä¸€å€‹åˆé©çš„ - ä¸é‡å的文件å,比如 TEST 。 - - 2. 接著將光標移動至本é çš„æœ€é ‚端,然後按 CTRL-g 找到該行的行號。別忘了 - 行號哦。 - - 3. 接著把光標移動至本é çš„æœ€åº•ç«¯ï¼Œå†æŒ‰ä¸€æ¬¡ CTRL-g 。也別忘了這個行好哦。 - - 4. 為了åªä¿å­˜æ–‡ç« çš„æŸå€‹éƒ¨åˆ†ï¼Œè«‹è¼¸å…¥ :#,# w TEST 。這裡的 #,# å°±æ˜¯ä¸Šé¢ - è¦æ±‚您記ä½çš„行號(頂端行號,底端行號),而 TEST 就是é¸å®šçš„æ–‡ä»¶å。 - - 5. 最後,用 :!dir ç¢ºèªæ–‡ä»¶æ˜¯å¦æ­£ç¢ºä¿å­˜ã€‚但是這次先別刪除掉。 - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五講第四節︰æå–å’Œåˆä¸¦æ–‡ä»¶ - - - ** è¦å‘ç•¶å‰æ–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的內容,請輸入 :r FILENAME ** - - 1. è«‹éµå…¥ :!dir ç¢ºèªæ‚¨å‰é¢å‰µå»ºçš„ TEST 文件還在。 - - 2. 然後將光標移動至當å‰é é¢çš„頂端。 - -特別æç¤ºï¸° 執行步驟3之後您將看到第五講第三節,請屆時å†å¾€ä¸‹ç§»å‹•回到這裡來。 - - 3. æŽ¥è‘—é€šéŽ :r TEST å°‡å‰é¢å‰µå»ºçš„å為 TEST 的文件æå–進來。 - -特別æç¤ºï¸°æ‚¨æ‰€æå–進來的文件將從光標所在ä½ç½®è™•開始置入。 - - 4. ç‚ºäº†ç¢ºèªæ–‡ä»¶å·²ç¶“æå–æˆåŠŸï¼Œç§»å‹•å…‰æ¨™å›žåˆ°åŽŸä¾†çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有兩份第 - 五講第三節,一份是原本,å¦å¤–一份是來自文件的副本。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五講å°çµ - - - 1. :!command 用于執行一個外部命令 command。 - - 請看一些實際例å­ï¸° - :!dir - 用于顯示當å‰ç›®éŒ„的內容。 - :!rm FILENAME - 用于刪除å為 FILENAME 的文件。 - - 2. :w FILENAME å¯å°‡ç•¶å‰ VIM 中正在編輯的文件ä¿å­˜åˆ°å為 FILENAME - 的文件中。 - - 3. :#,#w FILENAME å¯å°‡ç•¶å‰ç·¨è¼¯æ–‡ä»¶ç¬¬ # 行至第 # 行的內容ä¿å­˜åˆ°æ–‡ä»¶ - FILENAME 中。 - - 4. :r FILENAME 坿å–ç£ç›¤æ–‡ä»¶ FILENAME 並將其æ’å…¥åˆ°ç•¶å‰æ–‡ä»¶çš„光標ä½ç½® - 後é¢ã€‚ - - - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六講第一節︰打開類命令 - - - ** 輸入 o 將在光標的下方打開新的一行並進入æ’入模å¼ã€‚** - - 1. è«‹å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的那一行。 - - 2. 接著輸入å°å¯«çš„ o 在光標 *下方* 打開新的一行並進入æ’入模å¼ã€‚ - - 3. 然後復制標記有 ---> 的行並按 éµé€€å‡ºæ’入模å¼è€Œé€²å…¥æ­£å¸¸æ¨¡å¼ã€‚ - ----> After typing o the cursor is placed on the open line in Insert mode. - - 4. 為了在光標 *上方* 打開新的一行,åªéœ€è¦è¼¸å…¥å¤§å¯«çš„ O è€Œä¸æ˜¯å°å¯«çš„ o - å°±å¯ä»¥äº†ã€‚請在下行測試一下å§ã€‚當光標處在在該行上時,按 Shift-Oå¯ä»¥ - 在該行上方新開一行。 - -Open up a line above this by typing Shift-O while the cursor is on this line. - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六講第二節︰光標後æ’入類命令 - - - ** 輸入 a å°‡å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本。 ** - - 1. 請在正常模å¼ä¸‹é€šéŽè¼¸å…¥ $ å°‡å…‰æ¨™ç§»å‹•åˆ°æœ¬ç¯€ä¸­ä¸‹é¢æ¨™è¨˜æœ‰ ---> 的第一行 - 的末尾。 - - 2. 接著輸入å°å¯«çš„ a 則å¯åœ¨å…‰æ¨™ä¹‹å¾Œæ’入文本了。大寫的 A 則å¯ä»¥ç›´æŽ¥åœ¨è¡Œ - 末æ’入文本。 - -æç¤ºï¸°è¼¸å…¥å¤§å¯« A çš„æ“作方法å¯ä»¥åœ¨è¡Œæœ«æ’入文本,é¿å…了輸入 i,光標定ä½åˆ° - 最後一個字符,輸入的文本, 回復正常模å¼ï¼Œç®­é ­å³éµç§»å‹•å…‰æ¨™ä»¥åŠ - x 刪除當å‰å…‰æ¨™æ‰€åœ¨ä½ç½®å­—符等等諸多ç¹é›œçš„æ“ä½œã€‚ - - 3. æ“作之後第一行就å¯ä»¥è£œå……完整了。請注æ„光標後æ’入文本與æ’å…¥æ¨¡å¼æ˜¯åŸº - æœ¬å®Œå…¨ä¸€è‡´çš„ï¼Œåªæ˜¯æ–‡æœ¬æ’入的ä½ç½®å®šä½ç¨æœ‰ä¸åŒç½·äº†ã€‚ - ----> This line will allow you to practice ----> This line will allow you to practice appending text to the end of a line. - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六講第三節︰å¦å¤–一個置æ›é¡žå‘½ä»¤çš„版本 - - - ** 輸入大寫的 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. 請注æ„︰如果您按 é€€å‡ºç½®æ›æ¨¡å¼å›žå¾©æ­£å¸¸æ¨¡å¼ï¼Œå°šæœªæ›¿æ›çš„æ–‡æœ¬å°‡ä» - ç„¶ä¿æŒåŽŸç‹€ã€‚ - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六講第四節︰設置類命令的é¸é … - - - ** 設置å¯ä½¿æŸ¥æ‰¾æˆ–者替æ›å¯å¿½ç•¥å¤§å°å¯«çš„é¸é … ** - - - 1. è¦æŸ¥æ‰¾å–®è©ž ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¼¸å…¥ /ignore 。è¦é‡å¾©æŸ¥æ‰¾è©²è©žï¼Œå¯ä»¥ - é‡å¾©æŒ‰ n éµã€‚ - - 2. 然後設置 ic é¸é …(ic就是英文忽略大å°å¯«Ignore Case的首字æ¯ç¸®å¯«è©ž)ï¼Œå³ - 輸入︰ - :set ic - - 3. ç¾åœ¨å¯ä»¥é€šéŽéµå…¥ n éµå†æ¬¡æŸ¥æ‰¾å–®è©ž ignore。é‡å¾©æŸ¥æ‰¾å¯ä»¥é‡å¾©éµå…¥ n éµã€‚ - - 4. 然後設置 hlsearch å’Œ incsearch 這兩個é¸é …,輸入以下內容︰ - :set hls is - - 5. ç¾åœ¨å¯ä»¥å†æ¬¡è¼¸å…¥æŸ¥æ‰¾å‘½ä»¤ï¼Œçœ‹çœ‹æœƒæœ‰ä»€éº¼æ•ˆæžœï¸° - /ignore - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六講å°çµ - - - 1. 輸入å°å¯«çš„ o å¯ä»¥åœ¨å…‰æ¨™ä¸‹æ–¹æ‰“開新的一行並將光標置于新開的行首,進入 - æ’入模å¼ã€‚ - 輸入大寫的 O å¯ä»¥åœ¨å…‰æ¨™ä¸Šæ–¹æ‰“開新的一行並將光標置于新開的行首,進入 - æ’入模å¼ã€‚ - - 2. 輸入å°å¯«çš„ a å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨ä½ç½®ä¹‹å¾Œæ’入文本。 - 輸入大寫的 A å¯ä»¥åœ¨å…‰æ¨™æ‰€åœ¨è¡Œçš„行末之後æ’入文本。 - - 3. 輸入大寫的 R å°‡é€²å…¥æ›¿æ›æ¨¡å¼ï¼Œç›´è‡³æŒ‰ éµé€€å‡ºæ›¿æ›æ¨¡å¼è€Œé€²å…¥æ­£å¸¸ - 模å¼ã€‚ - - 4. 輸入 :set xxx å¯ä»¥è¨­ç½® xxx é¸é …。 - - - - - - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第七講︰在線幫助命令 - - ** 使用在線幫助系統 ** - - Vim æ“æœ‰ä¸€å€‹ç´°è‡´å…¨é¢çš„在線幫助系統。è¦å•Ÿå‹•è©²å¹«åŠ©ç³»çµ±ï¼Œè«‹é¸æ“‡å¦‚下三種方 - 法之一︰ - - 按下 éµ (如果éµç›¤ä¸Šæœ‰çš„話) - - 按下 éµ (如果éµç›¤ä¸Šæœ‰çš„話) - - 輸入 :help <回車> - - 輸入 :q <回車> å¯ä»¥é—œé–‰å¹«åŠ©çª—å£ã€‚ - - æä¾›ä¸€å€‹æ­£ç¢ºçš„åƒæ•¸çµ¦":help"命令,您å¯ä»¥æ‰¾åˆ°é—œäºŽè©²ä¸»é¡Œçš„幫助。請試驗以 - ä¸‹åƒæ•¸(å¯åˆ¥å¿˜äº†æŒ‰å›žè»Šéµå“¦ã€‚:)︰ - - :help w <回車> - :help c_ - :help insert-index <回車> - :help user-manual <回車> - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第八講︰創建一個啟動腳本 - - ** 啟用vim的功能 ** - - Vimçš„åŠŸèƒ½ç‰¹æ€§è¦æ¯”viå¤šå¾—å¤šï¼Œä½†å¤§éƒ¨åˆ†åŠŸèƒ½éƒ½æ²’æœ‰ç¼ºçœæ¿€æ´»ã€‚為了啟動更多的 - 功能,您得創建一個vimrc文件。 - - 1. 開始編輯vimrcæ–‡ä»¶ï¼Œé€™å–æ±ºäºŽæ‚¨æ‰€ä½¿ç”¨çš„æ“ä½œç³»çµ±ï¸° - - :edit ~/.vimrc 這是Unix系統所使用的命令 - :edit $VIM/_vimrc 這是Windows系統所使用的命令 - - 2. 接著導入vimrc范例文件︰ - - :read $VIMRUNTIME/vimrc_example.vim - - 3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ç‚ºï¸° - - :write - - 在下次您啟動vim的時候,編輯器就會有了語法高亮的功能。您å¯ä»¥ç¹¼çºŒæŠŠæ‚¨å–œ - 歡的其它功能設置添加到這個vimrc文件中。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - vim æ•™ç¨‹åˆ°æ­¤çµæŸã€‚æœ¬æ•™ç¨‹åªæ˜¯ç‚ºäº†ç°¡æ˜Žåœ°ä»‹ç´¹ä¸€ä¸‹vim編輯器,但已足以讓您 - 很容易學會使用本編輯器了。毋庸質疑,vim還有很多很多的命令,本教程所介 - 紹的還差得é è‘—呢。所以您è¦ç²¾é€šçš„話,還望繼續努力哦。下一步您å¯ä»¥é–±è®€ - vim手冊,使用的命令是︰ - :help user-manual - - 為了更進一步的åƒè€ƒå’Œå­¸ç¿’,以下這本書值得推薦︰ - - Vim - Vi Improved - 作者︰Steve Oualline - 出版社︰New Riders - - 這是第一本完全講解vim的書ç±ã€‚å°äºŽåˆå­¸è€…ç‰¹åˆ¥æœ‰ç”¨ã€‚å…¶ä¸­é‚„åŒ…å«æœ‰å¤§é‡å¯¦ä¾‹ - å’Œåœ–ç¤ºã€‚æ¬²çŸ¥è©³æƒ…ï¼Œè«‹è¨ªå• http://iccf-holland.org/click5.html - - 以下這本書比較è€äº†è€Œä¸”å…§å®¹ä¸»è¦æ˜¯viè€Œä¸æ˜¯vim,但是也值得推薦︰ - - Learning the Vi Editor - 作者︰Linda Lamb - 出版社︰O'Reilly & Associates Inc. - - 這是一本ä¸éŒ¯çš„æ›¸ï¼Œé€šéŽå®ƒæ‚¨å¹¾ä¹Žèƒ½å¤ äº†è§£åˆ°å…¨éƒ¨vi能夠åšåˆ°çš„事情。此書的第 - 六個版本也包å«äº†ä¸€äº›é—œäºŽvim的信æ¯ã€‚ - - 本教程是由來自Calorado School of Mineseçš„Michael C. Pierceã€Robert K. - Ware 所編寫的,其中來自Colorado State Universityçš„Charles Smithæä¾›äº† - 很多創æ„ã€‚ç·¨è€…é€šä¿¡åœ°å€æ˜¯ï¸° - - bware@mines.colorado.edu - - 本教程已由Bram Moolenaar專為vim進行修訂。 - - - - 譯制者附言︰ - =========== - ç°¡é«”ä¸­æ–‡æ•™ç¨‹ç¿»è­¯ç‰ˆä¹‹è­¯åˆ¶è€…ç‚ºæ¢æ˜Œæ³° ,還有 - å¦å¤–一個è¯ç³»åœ°å€ï¸°linuxrat@gnuchina.org。 - - ç¹é«”中文教程是從簡體中文教程翻譯版使用 Debian GNU/Linux ä¸­æ–‡é …ç›®å° - 組的于廣è¼å…ˆç”Ÿç·¨å¯«çš„中文漢字轉碼器 autoconvert 轉æ›è€Œæˆçš„,並å°è½‰ - æ›çš„çµæžœåšäº†ä¸€äº›ç´°ç¯€çš„æ”¹å‹•。 - - 變更記錄︰ - ========= - 2002å¹´08月30æ—¥ æ¢æ˜Œæ³° - æ„Ÿè¬ RMS@SMTH 的指正,將多處錯誤修正。 - - 2002å¹´04月22æ—¥ æ¢æ˜Œæ³° - æ„Ÿè¬ xuandong@sh163.net 的指正,將兩處錯別字修正。 - - 2002å¹´03月18æ—¥ æ¢æ˜Œæ³° - 根據Bram Molenaar先生在2002å¹´03月16æ—¥çš„ä¾†ä¿¡è¦æ±‚,將vimtutor1.4中譯 - 版å‡ç´šåˆ°vimtutor1.5。 - - 2001å¹´11月15æ—¥ æ¢æ˜Œæ³° - å°‡vimtutor1.4中譯版æäº¤çµ¦Bram Molenaarå’ŒSven Guckes。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/runtime/tutor/tutor.zh_cn.utf-8 b/runtime/tutor/tutor.zh_cn.utf-8 index 0821ef6e45..3ff031f7c5 100644 --- a/runtime/tutor/tutor.zh_cn.utf-8 +++ b/runtime/tutor/tutor.zh_cn.utf-8 @@ -1,30 +1,32 @@ =============================================================================== -= 欢 迎 阅 读 《 V I M æ•™ 程 》 —— 版本 1.5 = += 欢 迎 阅 读 《 V I M æ•™ 程 》 —— 版本 1.7 = =============================================================================== - vim 是一个具有很多命令的功能éžå¸¸å¼ºå¤§çš„编辑器。é™äºŽç¯‡å¹…,在本教程当中 + + Vim 是一个具有很多命令的功能éžå¸¸å¼ºå¤§çš„编辑器。é™äºŽç¯‡å¹…,在本教程当中 å°±ä¸è¯¦ç»†ä»‹ç»äº†ã€‚本教程的设计目标是讲述一些必è¦çš„基本命令,而掌æ¡å¥½è¿™ - 些命令,您就能够很容易将vim当作一个通用的万能编辑器æ¥ä½¿ç”¨äº†ã€‚ + 些命令,您就能够很容易地将 Vim 当作一个通用编辑器æ¥ä½¿ç”¨äº†ã€‚ å®Œæˆæœ¬æ•™ç¨‹çš„内容大约需è¦25-30分钟,å–决于您训练的时间。 + 注æ„: æ¯ä¸€èŠ‚çš„å‘½ä»¤æ“ä½œå°†ä¼šæ›´æ”¹æœ¬æ–‡ã€‚æŽ¨èæ‚¨å¤åˆ¶æœ¬æ–‡çš„一个副本,然åŽåœ¨å‰¯æœ¬ä¸Š 进行训练(如果您是通过"vimtutor"æ¥å¯åŠ¨æ•™ç¨‹çš„ï¼Œé‚£ä¹ˆæœ¬æ–‡å°±å·²ç»æ˜¯å‰¯æœ¬äº†)。 - 切记一点∶本教程的设计æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­è¿›è¡Œå­¦ä¹ çš„。也就是说,您需è¦é€šè¿‡ + 切记一点:本教程的设计æ€è·¯æ˜¯åœ¨ä½¿ç”¨ä¸­è¿›è¡Œå­¦ä¹ çš„。也就是说,您需è¦é€šè¿‡ 执行命令æ¥å­¦ä¹ å®ƒä»¬æœ¬èº«çš„æ­£ç¡®ç”¨æ³•ã€‚å¦‚æžœæ‚¨åªæ˜¯é˜…è¯»è€Œä¸æ“作,那么您å¯èƒ½ 会很快é—å¿˜è¿™äº›å‘½ä»¤çš„ï¼ å¥½äº†ï¼ŒçŽ°åœ¨è¯·ç¡®å®šæ‚¨çš„Shift-Lock(大å°å†™é”定键)è¿˜æ²¡æœ‰æŒ‰ä¸‹ï¼Œç„¶åŽæŒ‰é”®ç›˜ä¸Š - 的字æ¯é”® j 足够多的次数æ¥ç§»åŠ¨å…‰æ ‡ï¼Œç›´åˆ°ç¬¬ä¸€èŠ‚çš„å†…å®¹èƒ½å¤Ÿå®Œå…¨å……æ»¡å±å¹•。 + 的字æ¯é”® j 足够多次æ¥ç§»åŠ¨å…‰æ ‡ï¼Œç›´åˆ°ç¬¬ä¸€èŠ‚çš„å†…å®¹èƒ½å¤Ÿå®Œå…¨å……æ»¡å±å¹•。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一讲第一节∶移动光标 + 第一讲第一节:移动光标 - ※※ è¦ç§»åŠ¨å…‰æ ‡ï¼Œè¯·ä¾ç…§è¯´æ˜Žåˆ†åˆ«æŒ‰ä¸‹ hã€jã€kã€l 键。 ※※ + ** è¦ç§»åŠ¨å…‰æ ‡ï¼Œè¯·ä¾ç…§è¯´æ˜Žåˆ†åˆ«æŒ‰ä¸‹ hã€jã€kã€l 键。 ** ^ - k æç¤ºâˆ¶ h 的键ä½äºŽå·¦è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘左移动。 + k æç¤ºï¼š h 的键ä½äºŽå·¦è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘左移动。 < h l > l 的键ä½äºŽå³è¾¹ï¼Œæ¯æ¬¡æŒ‰ä¸‹å°±ä¼šå‘å³ç§»åŠ¨ã€‚ j j 键看起æ¥å¾ˆè±¡ä¸€æ”¯å°–ç«¯æ–¹å‘æœä¸‹çš„箭头。 v @@ -35,43 +37,38 @@ ---> 现在您应该已ç»å­¦ä¼šå¦‚何移动到下一讲å§ã€‚ - 3. 现在请使用下行键,将光标移动到第二讲。 + 3. 现在请使用下行键,将光标移动到第一讲第二节。 -æç¤ºâˆ¶å¦‚æžœæ‚¨ä¸æ•¢ç¡®å®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè¯·æŒ‰ä¸‹é”®å›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚ +æç¤ºï¼šå¦‚æžœæ‚¨ä¸æ•¢ç¡®å®šæ‚¨æ‰€æŒ‰ä¸‹çš„å­—æ¯ï¼Œè¯·æŒ‰ä¸‹é”®å›žåˆ°æ­£å¸¸(Normal)模å¼ã€‚ ç„¶åŽå†æ¬¡ä»Žé”®ç›˜è¾“入您想è¦çš„命令。 -æç¤ºâˆ¶å…‰æ ‡é”®åº”当也能正常工作的。但是使用hjklé”®ï¼Œåœ¨ä¹ æƒ¯ä¹‹åŽæ‚¨å°±èƒ½å¤Ÿå¿«é€Ÿ - 地在å±å¹•内四处移动光标了。 +æç¤ºï¼šå…‰æ ‡é”®åº”当也能正常工作的。但是使用hjklé”®ï¼Œåœ¨ä¹ æƒ¯ä¹‹åŽæ‚¨å°±èƒ½å¤Ÿæ›´å¿« + 地在å±å¹•å†…å››å¤„ç§»åŠ¨å…‰æ ‡ã€‚çœŸçš„æ˜¯è¿™æ ·ï¼ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一讲第二节∶VIM的进入和退出 + 第一讲第二节:VIM的进入和退出 - !! 特别æç¤ºâˆ¶æ•¬è¯·é˜…è¯»å®Œæ•´æœ¬ä¸€èŠ‚çš„å†…å®¹ï¼Œç„¶åŽæ‰èƒ½æ‰§è¡Œä»¥ä¸‹æ‰€è®²è§£çš„命令。 + !! 特别æç¤ºï¼šæ•¬è¯·é˜…读本一节的完整内容,然åŽå†æ‰§è¡Œä»¥ä¸‹æ‰€è®²è§£çš„命令。 - 1. 请按键(è¿™æ˜¯ä¸ºäº†ç¡®ä¿æ‚¨å¤„在正常模å¼)。 + 1. 按键(è¿™æ˜¯ä¸ºäº†ç¡®ä¿æ‚¨å¤„在正常模å¼)。 - 2. ç„¶åŽè¾“入∶ :q! <回车> + 2. ç„¶åŽè¾“入: :q! <回车> + è¿™ç§æ–¹å¼çš„é€€å‡ºç¼–è¾‘å™¨ä¼šä¸¢å¼ƒæ‚¨è¿›å…¥ç¼–è¾‘å™¨ä»¥æ¥æ‰€åšçš„æ”¹åŠ¨ã€‚ ----> è¿™ç§æ–¹å¼çš„退出编辑器ç»ä¸ä¼šä¿å­˜æ‚¨è¿›å…¥ç¼–è¾‘å™¨ä»¥æ¥æ‰€åšçš„æ”¹åŠ¨ã€‚ - 如果您想ä¿å­˜æ›´æ”¹å†é€€å‡ºï¼Œè¯·è¾“入∶ - :wq <回车> - - 3. 如果您看到了命令行æç¤ºç¬¦ï¼Œè¯·è¾“入能够带您回到本教程的命令,那就是∶ - - vimtutor <回车> - - 通常情况下您也å¯ä»¥ç”¨è¿™ç§æ–¹å¼âˆ¶ - - vim tutor <回车> - ----> 这里的 'vim' 表示进入vim编辑器,而 'tutor'则是您准备è¦ç¼–辑的文件。 + 3. 如果您看到了命令行æç¤ºç¬¦ï¼Œè¯·è¾“入能够带您回到本教程的命令,那就是: + vimtutor <回车> 4. 如果您自信已ç»ç‰¢ç‰¢è®°ä½äº†è¿™äº›æ­¥éª¤çš„è¯ï¼Œè¯·ä»Žæ­¥éª¤1执行到步骤3退出,然 - åŽå†æ¬¡è¿›å…¥ç¼–辑器。接ç€å°†å…‰æ ‡ç§»åŠ¨åˆ°ç¬¬ä¸€è®²ç¬¬ä¸‰èŠ‚æ¥ç»§ç»­æˆ‘们的教程讲解。 + åŽå†æ¬¡è¿›å…¥ç¼–辑器。 + +æç¤ºï¼š :q! <回车> 会丢弃您所åšçš„ä»»ä½•æ”¹åŠ¨ã€‚å‡ è®²ä¹‹åŽæ‚¨å°†å­¦ä¼šå¦‚何ä¿å­˜æ”¹åŠ¨åˆ°æ–‡ä»¶ã€‚ + + 5. 将光标下移到第一讲第三节。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一讲第三节∶文本编辑之删除 + 第一讲第三节:文本编辑之删除 ** 在正常(Normal)模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ x é”®æ¥åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符。** @@ -86,35 +83,79 @@ ---> The ccow jumpedd ovverr thhe mooon. - 5. 好了,该行已ç»ä¿®æ­£äº†ï¼Œä¸‹ä¸€èŠ‚å†…å®¹æ˜¯ç¬¬ä¸€è®²ç¬¬å››èŠ‚ã€‚ + 5. 好了,该行已ç»ä¿®æ­£äº†ï¼Œä¸‹é¢æ˜¯ç¬¬ä¸€è®²ç¬¬å››èŠ‚ã€‚ -特别æç¤ºâˆ¶åœ¨æ‚¨æµè§ˆæœ¬æ•™ç¨‹æ—¶ï¼Œä¸è¦å¼ºè¡Œè®°å¿†ã€‚è®°ä½ä¸€ç‚¹âˆ¶åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ã€‚ +特别æç¤ºï¼šåœ¨æµè§ˆæœ¬æ•™ç¨‹æ—¶ï¼Œä¸è¦å¼ºè¡Œè®°å¿†ã€‚è®°ä½ä¸€ç‚¹ï¼šåœ¨ä½¿ç”¨ä¸­å­¦ä¹ ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第一讲第四节∶文本编辑之æ’å…¥ + 第一讲第四节:文本编辑之æ’å…¥ ** 在正常模å¼ä¸‹ï¼Œå¯ä»¥æŒ‰ä¸‹ i é”®æ¥æ’入文本。** 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 - 2. 为了使得第一行内容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè¯·å°†å…‰æ ‡ç§»è‡³æ–‡æœ¬ç¬¬ä¸€ä¸ªå­—符准备æ’å…¥ + 2. 为了使得第一行内容雷åŒäºŽç¬¬äºŒè¡Œï¼Œè¯·å°†å…‰æ ‡ç§»è‡³æ–‡æœ¬ç¬¬ä¸€ä¸ªå‡†å¤‡æ’入字符 çš„ä½ç½®ã€‚ 3. ç„¶åŽæŒ‰ä¸‹ i 键,接ç€è¾“入必è¦çš„æ–‡æœ¬å­—符。 - 4. 所有文本都修正完毕,请按下 键返回正常模å¼ã€‚ + 4. æ¯ä¸ªé”™è¯¯ä¿®æ­£å®Œæ¯•åŽï¼Œè¯·æŒ‰ä¸‹ 键返回正常模å¼ã€‚ é‡å¤æ­¥éª¤2至步骤4以便修正å¥å­ã€‚ ---> There is text misng this . ---> There is some text missing from this line. - 5. 如果您对文本æ’å…¥æ“作已ç»å¾ˆæ»¡æ„,请接ç€é˜…读下é¢çš„å°ç»“。 + 5. 如果您对文本æ’å…¥æ“作已ç»å¾ˆæ»¡æ„,请接ç€é˜…读下é¢çš„第一讲第五节。 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第五节:文本编辑之添加 + + + ** 按 A 键以添加文本。 ** + + 1. 移动光标到下é¢ç¬¬ä¸€ä¸ªæ ‡è®°æœ‰ ---> 的一行。 + 光标放在那一行的哪个字符上并ä¸é‡è¦ã€‚ + + 2. 按 A 键输入必è¦çš„æ·»åŠ å†…å®¹ã€‚ + + 3. 文本添加完毕åŽï¼ŒæŒ‰ 键回到正常模å¼ã€‚ + + 4. 移动光标到下é¢ç¬¬äºŒä¸ªæ ‡è®°æœ‰ ---> 的一行。é‡å¤æ­¥éª¤2和步骤3以改正这个å¥å­ã€‚ + +---> There is some text missing from th + There is some text missing from this line. +---> There is also some text miss + There is also some text missing here. + + 5. 当您对添加文本æ“ä½œæ„Ÿåˆ°æ»¡æ„æ—¶ï¼Œè¯·ç»§ç»­å­¦ä¹ ç¬¬ä¸€è®²ç¬¬å…­èŠ‚ã€‚ + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第一讲第六节:编辑文件 + + ** 使用 :wq 以ä¿å­˜æ–‡ä»¶å¹¶é€€å‡ºã€‚ ** + + 特别æç¤ºï¼šåœ¨æ‰§è¡Œä»¥ä¸‹æ­¥éª¤ä¹‹å‰ï¼Œè¯·å…ˆè¯»å®Œæ•´ä¸ªå°èŠ‚ï¼ + + 1. 如您在第一讲第二节中所åšçš„那样退出本教程: :q! + 或者,如果您å¯ä»¥è®¿é—®å¦ä¸€ä¸ªç»ˆç«¯ï¼Œè¯·åœ¨é‚£é‡Œæ‰§è¡Œä»¥ä¸‹æ“作。 + + 2. 在 shell çš„æç¤ºç¬¦ä¸‹è¾“入命令: vim tutor <回车> + 'vim'是å¯åЍ Vim 编辑器的命令,'tutor'是您希望编辑的文件的å字。 + 请使用一个å¯ä»¥æ”¹åŠ¨çš„æ–‡ä»¶ã€‚ + + 3. 使用您在å‰é¢çš„æ•™ç¨‹ä¸­å­¦åˆ°çš„命令æ’入删除文本。 + + 4. ä¿å­˜æ”¹åŠ¨è¿‡çš„æ–‡ä»¶å¹¶é€€å‡º Vim,按这些键: :wq <回车> + + 5. 如果您在步骤1中已ç»é€€å‡º vimtutor,请é‡å¯ vimtutor 移动到下é¢çš„å°ç»“一节。 + + 6. 阅读完以上步骤,弄懂它们的æ„义,然åŽåœ¨å®žè·µä¸­è¿›è¡Œç»ƒä¹ ã€‚ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第一讲å°ç»“ @@ -122,53 +163,50 @@ 1. 光标在å±å¹•文本中的移动既å¯ä»¥ç”¨ç®­å¤´é”®ï¼Œä¹Ÿå¯ä»¥ä½¿ç”¨ hjkl å­—æ¯é”®ã€‚ h (左移) j (下行) k (上行) l (å³ç§») - 2. 欲进入vim编辑器(从命令行æç¤ºç¬¦),请输入∶vim 文件å <回车> + 2. 欲进入 Vim 编辑器(从命令行æç¤ºç¬¦),请输入:vim 文件å <回车> - 3. 欲退出vim编辑器,请输入以下命令放弃所有修改∶ + 3. 欲退出 Vim 编辑器,请输入 :q! <回车> 放弃所有改动。 + 或者输入 :wq <回车> ä¿å­˜æ”¹åŠ¨ã€‚ - :q! <回车> + 4. 在正常模å¼ä¸‹åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请按: x - 或者输入以下命令ä¿å­˜æ‰€æœ‰ä¿®æ”¹âˆ¶ + 5. 欲æ’入或添加文本,请输入: - :wq <回车> + i 输入欲æ’入文本 åœ¨å…‰æ ‡å‰æ’入文本 + A 输入欲添加文本 åœ¨ä¸€è¡ŒåŽæ·»åŠ æ–‡æœ¬ - 4. 在正常模å¼ä¸‹åˆ é™¤å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请按∶ x - - 5. 在正常模å¼ä¸‹è¦åœ¨å…‰æ ‡æ‰€åœ¨ä½ç½®å¼€å§‹æ’入文本,请按∶ - - i è¾“å…¥å¿…è¦æ–‡æœ¬ - -特别æç¤ºâˆ¶æŒ‰ä¸‹ é”®ä¼šå¸¦æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–è€…å–æ¶ˆä¸€ä¸ªä¸æœŸæœ›æˆ–è€…éƒ¨åˆ†å®Œæˆ +特别æç¤ºï¼šæŒ‰ä¸‹ é”®ä¼šå¸¦æ‚¨å›žåˆ°æ­£å¸¸æ¨¡å¼æˆ–è€…æ’¤æ¶ˆä¸€ä¸ªä¸æƒ³è¾“入或部分完整 的命令。 好了,第一讲到此结æŸã€‚䏋颿ޥ䏋æ¥ç»§ç»­ç¬¬äºŒè®²çš„内容。 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二讲第一节∶删除类命令 + 第二讲第一节:删除类命令 - ** 输入 dw å¯ä»¥ä»Žå…‰æ ‡å¤„删除至一个å•å­—/å•è¯çš„æœ«å°¾ã€‚** + ** 输入 dw å¯ä»¥ä»Žå…‰æ ‡å¤„删除至一个å•è¯çš„æœ«å°¾ã€‚** 1. 请按下 é”®ç¡®ä¿æ‚¨å¤„于正常模å¼ã€‚ 2. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 - 3. 请将光标移至准备è¦åˆ é™¤çš„å•è¯çš„开始。 + 3. 请将光标移至准备è¦åˆ é™¤çš„å•è¯çš„起始处。 4. 接ç€è¾“å…¥ dw 删除掉该å•è¯ã€‚ - 特别æç¤ºâˆ¶æ‚¨æ‰€è¾“入的 dw ä¼šåœ¨æ‚¨è¾“å…¥çš„åŒæ—¶å‡ºçŽ°åœ¨å±å¹•的最åŽä¸€è¡Œã€‚如果您输 - 入有误,请按下 键喿¶ˆï¼Œç„¶åŽé‡æ–°å†æ¥ã€‚ + 特别æç¤ºï¼šå½“æ‚¨è¾“å…¥æ—¶ï¼Œå­—æ¯ d ä¼šåŒæ—¶å‡ºçŽ°åœ¨å±å¹•的最åŽä¸€è¡Œã€‚Vim 在等待您输入 + å­—æ¯ w。如果您看到的是除 d 外的其他字符,那表明您按错了;请按下 键, + ç„¶åŽé‡æ–°å†æ¥ã€‚ ---> There are a some words fun that don't belong paper in this sentence. - 5. é‡å¤æ­¥éª¤3至步骤4,直至å¥å­ä¿®æ­£å®Œæ¯•。接ç€ç»§ç»­ç¬¬äºŒè®²ç¬¬äºŒèŠ‚å†…å®¹ã€‚ - + 5. é‡å¤æ­¥éª¤3和步骤4,直至å¥å­ä¿®æ­£å®Œæ¯•。接ç€ç»§ç»­ç¬¬äºŒè®²ç¬¬äºŒèŠ‚å†…å®¹ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二讲第二节∶其他删除类命令 + 第二讲第二节:更多删除类命令 ** 输入 d$ 从当å‰å…‰æ ‡åˆ é™¤åˆ°è¡Œæœ«ã€‚** @@ -191,58 +229,102 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二讲第三节∶关于命令和对象 + 第二讲第三节:关于命令和对象 - 删除命令 d 的格å¼å¦‚下∶ + è®¸å¤šæ”¹å˜æ–‡æœ¬çš„命令都由一个æ“作符和一个动作构æˆã€‚ + 使用删除æ“作符 d 的删除命令的格å¼å¦‚下: - [number] d object 或者 d [number] object + d motion - å…¶æ„如下∶ - number - 代表执行命令的次数(å¯é€‰é¡¹ï¼Œç¼ºçœè®¾ç½®ä¸º 1 )。 - d - 代表删除。 - object - ä»£è¡¨å‘½ä»¤æ‰€è¦æ“作的对象(䏋颿œ‰ç›¸å…³ä»‹ç»)。 + 其中: + d - 删除æ“作符。 + motion - æ“作符的æ“作对象(在下é¢åˆ—出)。 - 一个简短的对象列表∶ - w - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•å­—/å•è¯æœ«å°¾ï¼ŒåŒ…括空格。 - e - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•å­—/å•è¯æœ«å°¾ï¼Œä½†æ˜¯ *ä¸* 包括空格。 + 一个简短的动作列表: + w - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°ä¸‹ä¸€ä¸ªå•è¯èµ·å§‹å¤„,ä¸åŒ…括它的第一个字符。 + e - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å•è¯æœ«å°¾ï¼ŒåŒ…括最åŽä¸€ä¸ªå­—符。 $ - 从当å‰å…‰æ ‡å½“å‰ä½ç½®ç›´åˆ°å½“å‰è¡Œæœ«ã€‚ -特别æç¤ºâˆ¶ - 对于勇于探索者,请在正常模å¼ä¸‹é¢ä»…按代表相应对象的键而ä¸ä½¿ç”¨å‘½ä»¤ï¼Œåˆ™ + 因此输入 de 会从当å‰å…‰æ ‡ä½ç½®åˆ é™¤åˆ°å•è¯æœ«å°¾ã€‚ + +特别æç¤ºï¼š + 对于勇于探索者,请在正常模å¼ä¸‹é¢ä»…按代表相应动作的键而ä¸ä½¿ç”¨æ“作符,您 将看到光标的移动正如上é¢çš„对象列表所代表的一样。 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第四节:使用计数指定动作 + + + ** 在动作å‰è¾“入数字会使它é‡å¤é‚£ä¹ˆå¤šæ¬¡ã€‚ ** + + 1. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> 的一行的开始。 + + 2. 输入 2w 使光标å‘å‰ç§»åŠ¨ä¸¤ä¸ªå•è¯ã€‚ + + 3. 输入 3e 使光标å‘å‰ç§»åŠ¨åˆ°ç¬¬ä¸‰ä¸ªå•è¯çš„æœ«å°¾ã€‚ + + 4. 输入 0 (æ•°å­—é›¶) 移动光标到行首。 + + 5. é‡å¤æ­¥éª¤2和步骤3,å°è¯•ä¸åŒçš„æ•°å­—。 + +---> This is just a line with words you can move around in. + + 6. 请继续学习第二讲第五节。 + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第二讲第五节:使用计数以删除更多 + + + ** 使用æ“作符时输入数字å¯ä»¥ä½¿å®ƒé‡å¤é‚£ä¹ˆå¤šæ¬¡ã€‚ ** + + 上é¢å·²ç»æåˆ°è¿‡åˆ é™¤æ“作符和动作的组åˆï¼Œæ‚¨å¯ä»¥åœ¨ç»„åˆä¸­åŠ¨ä½œä¹‹å‰æ’入一个数字以 + 删除更多: + d number(æ•°å­—) motion + + 1. ç§»åŠ¨å…‰æ ‡åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> 的一行中第一个大写字æ¯å•è¯ä¸Šã€‚ + + 2. 输入 d2w 以删除两个大写字æ¯å•è¯ã€‚ + + 3. é‡å¤æ­¥éª¤1和步骤2,使用ä¸åŒçš„æ•°å­—ä½¿å¾—ç”¨ä¸€ä¸ªå‘½ä»¤å°±èƒ½åˆ é™¤å…¨éƒ¨ç›¸é‚»çš„å¤§å†™å­—æ¯ + å•è¯ + +---> this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up. + + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二讲第四节∶对象命令的特殊情况 + 第二讲第六节:æ“作整行 - ** 输入 dd å¯ä»¥åˆ é™¤æ•´ä¸€ä¸ªå½“å‰è¡Œã€‚ ** + ** 输入 dd å¯ä»¥åˆ é™¤æ•´ä¸€ä¸ªå½“å‰è¡Œã€‚ ** - 鉴于整行删除的高频度,VIM 的设计者决定è¦ç®€åŒ–整行删除,仅需è¦åœ¨åŒä¸€è¡Œä¸Š + 鉴于整行删除的高频度,Vi 的设计者决定è¦ç®€åŒ–整行删除æ“作,您仅需è¦åœ¨åŒä¸€è¡Œä¸Š 击打两次 d å°±å¯ä»¥åˆ é™¤æŽ‰å…‰æ ‡æ‰€åœ¨çš„æ•´è¡Œäº†ã€‚ 1. 请将光标移动到本节中下é¢çš„çŸ­å¥æ®µè½ä¸­çš„第二行。 2. 输入 dd 删除该行。 3. ç„¶åŽç§»åŠ¨åˆ°ç¬¬å››è¡Œã€‚ - 4. 接ç€è¾“å…¥ 2dd (还记得å‰é¢è®²è¿‡çš„ number-command-object å—?) 删除两行。 + 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. +---> 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. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第二讲第五节∶撤消类命令 + 第二讲第七节:撤消类命令 - ** 输入 u æ¥æ’¤æ¶ˆæœ€åŽæ‰§è¡Œçš„命令,输入 U æ¥ä¿®æ­£æ•´è¡Œã€‚** + ** 输入 u æ¥æ’¤æ¶ˆæœ€åŽæ‰§è¡Œçš„命令,输入 U æ¥æ’¤æ¶ˆå¯¹æ•´è¡Œçš„修改。 ** 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行,并将其置于第一个错误 处。 @@ -251,8 +333,8 @@ 4. 这次è¦ä½¿ç”¨ x 修正本行的所有错误。 5. 现在输入一个大写的 U ,æ¢å¤åˆ°è¯¥è¡Œçš„原始状æ€ã€‚ 6. 接ç€å¤šæ¬¡è¾“å…¥ u 以撤消 U ä»¥åŠæ›´å‰çš„命令。 - 7. ç„¶åŽå¤šæ¬¡è¾“å…¥ CTRL-R (先按下 CTRL 键䏿”¾å¼€ï¼ŒæŽ¥ç€è¾“å…¥ R é”®) ,这样就 - å¯ä»¥æ‰§è¡Œæ¢å¤å‘½ä»¤ï¼Œä¹Ÿå°±æ˜¯æ’¤æ¶ˆæŽ‰æ’¤æ¶ˆå‘½ä»¤ã€‚ + 7. ç„¶åŽå¤šæ¬¡è¾“å…¥ CTRL-R (先按下 CTRL 键䏿”¾å¼€ï¼ŒæŽ¥ç€æŒ‰ R é”®),这样就 + å¯ä»¥é‡åšè¢«æ’¤æ¶ˆçš„命令,也就是撤消掉撤消命令。 ---> Fiix the errors oon thhis line and reeplace them witth undo. @@ -265,105 +347,105 @@ 第二讲å°ç»“ - 1. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³å•å­—/å•è¯æœ«å°¾ï¼Œè¯·è¾“入∶dw + 1. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³ä¸‹ä¸€ä¸ªå•è¯ï¼Œè¯·è¾“入:dw + 2. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³å½“å‰è¡Œæœ«å°¾ï¼Œè¯·è¾“入:d$ + 3. 欲删除整行,请输入:dd - 2. 欲从当å‰å…‰æ ‡åˆ é™¤è‡³å½“å‰è¡Œæœ«å°¾ï¼Œè¯·è¾“入∶d$ + 4. 欲é‡å¤ä¸€ä¸ªåŠ¨ä½œï¼Œè¯·åœ¨å®ƒå‰é¢åŠ ä¸Šä¸€ä¸ªæ•°å­—ï¼š2w + 5. 在正常模å¼ä¸‹ä¿®æ”¹å‘½ä»¤çš„æ ¼å¼æ˜¯ï¼š + operator [number] motion + 其中: + operator - æ“作符,代表è¦åšçš„事情,比如 d 代表删除 + [number] - å¯ä»¥é™„加的数字,代表动作é‡å¤çš„æ¬¡æ•° + motion - 动作,代表在所æ“作的文本上的移动,例如 w 代表å•è¯(word), + $ 代表行末等等。 - 3. 欲删除整行,请输入∶dd + 6. 欲移动光标到行首,请按数字0键:0 - 4. 在正常模å¼ä¸‹ä¸€ä¸ªå‘½ä»¤çš„æ ¼å¼æ˜¯âˆ¶ - - [number] command object 或者 command [number] object - å…¶æ„æ˜¯âˆ¶ - number - 代表的是命令执行的次数 - command - 代表è¦åšçš„事情,比如 d 代表删除 - object - ä»£è¡¨è¦æ“作的对象,比如 w 代表å•å­—/å•è¯ï¼Œ$ 代表到行末等等。 - $ (to the end of line), etc. - - 5. 欲撤消以å‰çš„æ“ä½œï¼Œè¯·è¾“å…¥âˆ¶u (å°å†™çš„u) - 欲撤消在一行中所åšçš„æ”¹åŠ¨ï¼Œè¯·è¾“å…¥âˆ¶U (大写的U) - 欲撤消以å‰çš„æ’¤æ¶ˆå‘½ä»¤ï¼Œæ¢å¤ä»¥å‰çš„æ“ä½œç»“æžœï¼Œè¯·è¾“å…¥âˆ¶CTRL-R + 7. 欲撤消以å‰çš„æ“ä½œï¼Œè¯·è¾“å…¥ï¼šu (å°å†™çš„u) + 欲撤消在一行中所åšçš„æ”¹åŠ¨ï¼Œè¯·è¾“å…¥ï¼šU (大写的U) + 欲撤消以å‰çš„æ’¤æ¶ˆå‘½ä»¤ï¼Œæ¢å¤ä»¥å‰çš„æ“ä½œç»“æžœï¼Œè¯·è¾“å…¥ï¼šCTRL-R ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三讲第一节∶置入类命令 + 第三讲第一节:置入类命令 - ** 输入 p 将最åŽä¸€æ¬¡åˆ é™¤çš„å†…å®¹ç½®å…¥å…‰æ ‡ä¹‹åŽ ** + ** 输入 p 将最åŽä¸€æ¬¡åˆ é™¤çš„内容置入光标之åŽã€‚ ** - 1. 请将光标移动到本节中下é¢ç¤ºèŒƒæ®µè½çš„首行。 + 1. 请将光标移动到本节中下é¢ç¬¬ä¸€ä¸ªæ ‡è®°æœ‰ ---> 的一行。 - 2. 输入 dd 将该行删除,这样会将该行ä¿å­˜åˆ°vim的缓冲区中。 + 2. 输入 dd 将该行删除,这样会将该行ä¿å­˜åˆ° Vim 的一个寄存器中。 - 3. 接ç€å°†å…‰æ ‡ç§»åŠ¨åˆ°å‡†å¤‡ç½®å…¥çš„ä½ç½®çš„上方。记ä½âˆ¶æ˜¯ä¸Šæ–¹å“¦ã€‚ + 3. 接ç€å°†å…‰æ ‡ç§»åŠ¨åˆ° c) 一行,å³å‡†å¤‡ç½®å…¥çš„ä½ç½®çš„上方。记ä½ï¼šæ˜¯ä¸Šæ–¹å“¦ã€‚ - 4. ç„¶åŽåœ¨æ­£å¸¸æ¨¡å¼ä¸‹(键进入),输入 p 将该行粘贴置入。 + 4. ç„¶åŽåœ¨æ­£å¸¸æ¨¡å¼ä¸‹(键进入)输入 p 将该行粘贴置入。 5. é‡å¤æ­¥éª¤2至步骤4,将所有的行ä¾åºæ”¾ç½®åˆ°æ­£ç¡®çš„ä½ç½®ä¸Šã€‚ - d) Can you learn too? - b) Violets are blue, - c) Intelligence is learned, - a) Roses are red, +---> d) Can you learn too? +---> b) Violets are blue, +---> c) Intelligence is learned, +---> a) Roses are red, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三讲第二节∶替æ¢ç±»å‘½ä»¤ + 第三讲第二节:替æ¢ç±»å‘½ä»¤ ** 输入 r 和一个字符替æ¢å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符。** 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 - 2. 请移动光标到第一个错误的适当ä½ç½®ã€‚ + 2. 请移动光标到第一个出错的ä½ç½®ã€‚ - 3. 接ç€è¾“å…¥ r ï¼Œè¿™æ ·å°±èƒ½å°†é”™è¯¯æ›¿æ¢æŽ‰äº†ã€‚ + 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. ç„¶åŽæˆ‘们继续学校第三讲第三节。 + 5. ç„¶åŽæˆ‘们继续学习第三讲第三节。 -特别æç¤ºâˆ¶åˆ‡è®°æ‚¨è¦åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ï¼Œè€Œä¸æ˜¯åœ¨è®°å¿†ä¸­å­¦ä¹ ã€‚ +特别æç¤ºï¼šåˆ‡è®°æ‚¨è¦åœ¨ä½¿ç”¨ä¸­å­¦ä¹ ï¼Œè€Œä¸æ˜¯åœ¨è®°å¿†ä¸­å­¦ä¹ ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三讲第三节∶更改类命令 + 第三讲第三节:更改类命令 - ** è¦æ”¹å˜ä¸€ä¸ªå•å­—/å•è¯çš„部分或者全部,请输入 cw ** + ** è¦æ”¹å˜æ–‡æœ¬ç›´åˆ°ä¸€ä¸ªå•è¯çš„æœ«å°¾ï¼Œè¯·è¾“å…¥ ce ** 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 2. æŽ¥ç€æŠŠå…‰æ ‡æ”¾åœ¨å•è¯ lubw çš„å­—æ¯ u çš„ä½ç½®é‚£é‡Œã€‚ - 3. ç„¶åŽè¾“å…¥ cw å°±å¯ä»¥ä¿®æ­£è¯¥å•è¯äº†(在本例这里是输入 ine 。) + 3. ç„¶åŽè¾“å…¥ cw ä»¥åŠæ­£ç¡®çš„å•è¯(在本例中是输入 ine )。 4. æœ€åŽæŒ‰ 键,然åŽå…‰æ ‡å®šä½åˆ°ä¸‹ä¸€ä¸ªé”™è¯¯ç¬¬ä¸€ä¸ªå‡†å¤‡æ›´æ”¹çš„å­—æ¯å¤„。 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. +---> This lubw has a few wptfd that mrrf changing usf the change operator. +---> This line has a few words that need changing using the change operator. -æç¤ºâˆ¶è¯·æ³¨æ„ cw 命令ä¸ä»…仅是替æ¢äº†ä¸€ä¸ªå•è¯ï¼Œä¹Ÿè®©æ‚¨è¿›å…¥æ–‡æœ¬æ’入状æ€äº†ã€‚ +æç¤ºï¼šè¯·æ³¨æ„ ce 命令ä¸ä»…仅是删除了一个å•è¯ï¼Œå®ƒä¹Ÿè®©æ‚¨è¿›å…¥æ’入模å¼äº†ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三讲第四节∶使用c指令的其他更改类命令 + 第三讲第四节:使用c更改更多 - ** 更改类指令å¯ä»¥ä½¿ç”¨åŒåˆ é™¤ç±»å‘½ä»¤æ‰€ä½¿ç”¨çš„å¯¹è±¡å‚æ•°ã€‚** + ** 更改类æ“作符å¯ä»¥ä¸Žåˆ é™¤ä¸­ä½¿ç”¨çš„åŒæ ·çš„动作é…åˆä½¿ç”¨ã€‚ ** - 1. 更改类指令的工作方å¼è·Ÿåˆ é™¤ç±»å‘½ä»¤æ˜¯ä¸€è‡´çš„。æ“ä½œæ ¼å¼æ˜¯âˆ¶ + 1. 更改类æ“作符的工作方å¼è·Ÿåˆ é™¤ç±»æ˜¯ä¸€è‡´çš„。æ“ä½œæ ¼å¼æ˜¯ï¼š - [number] c object 或者 c [number] object + c [number] motion - 2. å¯¹è±¡å‚æ•°ä¹Ÿæ˜¯ä¸€æ ·çš„,比如 w 代表å•å­—/å•è¯ï¼Œ$代表行末等等。 + 2. åŠ¨ä½œå‚æ•°(motion)也是一样的,比如 w 代表å•è¯ï¼Œ$代表行末等等。 3. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 @@ -377,55 +459,56 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第三讲å°ç»“ + 第三讲å°ç»“ - 1. è¦é‡æ–°ç½®å…¥å·²ç»åˆ é™¤çš„æ–‡æœ¬å†…容,请输入å°å†™å­—æ¯ p。该æ“作å¯ä»¥å°†å·²åˆ é™¤ + 1. è¦é‡æ–°ç½®å…¥å·²ç»åˆ é™¤çš„æ–‡æœ¬å†…容,请按å°å†™å­—æ¯ p 键。该æ“作å¯ä»¥å°†å·²åˆ é™¤ 的文本内容置于光标之åŽã€‚如果最åŽä¸€æ¬¡åˆ é™¤çš„æ˜¯ä¸€ä¸ªæ•´è¡Œï¼Œé‚£ä¹ˆè¯¥è¡Œå°†ç½® 于当å‰å…‰æ ‡æ‰€åœ¨è¡Œçš„下一行。 2. è¦æ›¿æ¢å…‰æ ‡æ‰€åœ¨ä½ç½®çš„字符,请输入å°å†™çš„ r å’Œè¦æ›¿æ¢æŽ‰åŽŸä½ç½®å­—符的新字 符å³å¯ã€‚ - 3. 更改类命令å…è®¸æ‚¨æ”¹å˜æŒ‡å®šçš„对象,从当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®ç›´åˆ°å¯¹è±¡çš„æœ«å°¾ã€‚ - 比如输入 cw å¯ä»¥æ›¿æ¢å½“å‰å…‰æ ‡åˆ°å•è¯çš„æœ«å°¾çš„内容;输入 c$ å¯ä»¥æ›¿æ¢å½“ + 3. 更改类命令å…许您改å˜ä»Žå½“å‰å…‰æ ‡æ‰€åœ¨ä½ç½®ç›´åˆ°åŠ¨ä½œæŒ‡ç¤ºçš„ä½ç½®ä¸­é—´çš„æ–‡æœ¬ã€‚ + 比如输入 ce å¯ä»¥æ›¿æ¢å½“å‰å…‰æ ‡åˆ°å•è¯çš„æœ«å°¾çš„内容;输入 c$ å¯ä»¥æ›¿æ¢å½“ å‰å…‰æ ‡åˆ°è¡Œæœ«çš„内容。 - 4. æ›´æ”¹ç±»å‘½ä»¤çš„æ ¼å¼æ˜¯âˆ¶ + 4. æ›´æ”¹ç±»å‘½ä»¤çš„æ ¼å¼æ˜¯ï¼š - [number] c object 或者 c [number] object + c [number] motion -䏋颿ˆ‘们继续学习下一讲。 +现在我们继续学习下一讲。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四讲第一节∶定ä½åŠæ–‡ä»¶çŠ¶æ€ + 第四讲第一节:定ä½åŠæ–‡ä»¶çŠ¶æ€ + ** 输入 CTRL-G 显示当å‰ç¼–辑文件中当å‰å…‰æ ‡æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚ + 输入大写 G 则直接跳转到文件中的æŸä¸€æŒ‡å®šè¡Œã€‚** - ** 输入 CTRL-g 显示当å‰ç¼–辑文件中当å‰å…‰æ ‡æ‰€åœ¨è¡Œä½ç½®ä»¥åŠæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚ - 输入 SHIFT-G 则直接跳转到文件中的æŸä¸€æŒ‡å®šè¡Œã€‚** + æç¤ºï¼šåˆ‡è®°è¦å…ˆé€šè¯»æœ¬èŠ‚å†…å®¹ï¼Œä¹‹åŽæ‰å¯ä»¥æ‰§è¡Œä»¥ä¸‹æ­¥éª¤!!! - æç¤ºâˆ¶åˆ‡è®°è¦å…ˆé€šè¯»æœ¬èŠ‚å†…å®¹ï¼Œä¹‹åŽæ‰å¯ä»¥æ‰§è¡Œä»¥ä¸‹æ­¥éª¤!!! + 1. 按下 CTRL 键䏿”¾å¼€ç„¶åŽæŒ‰ g 键。我们称这个键组åˆä¸º CTRL-G。 + æ‚¨ä¼šçœ‹åˆ°é¡µé¢æœ€åº•部出现一个状æ€ä¿¡æ¯è¡Œï¼Œæ˜¾ç¤ºçš„内容是当å‰ç¼–辑的文件å + 和文件中光标ä½ç½®ã€‚请记ä½è¡Œå·ï¼Œå®ƒä¼šåœ¨æ­¥éª¤3中用到。 - 1. 按下 CTRL 键䏿”¾å¼€ç„¶åŽæŒ‰ g 键。然åŽå°±ä¼šçœ‹åˆ°é¡µé¢æœ€åº•部出现一个状æ€ä¿¡ - æ¯è¡Œï¼Œæ˜¾ç¤ºçš„内容是当å‰ç¼–辑的文件åå’Œæ–‡ä»¶çš„æ€»è¡Œæ•°ã€‚è¯·è®°ä½æ­¥éª¤3的行å·ã€‚ +æç¤ºï¼šæ‚¨ä¹Ÿè®¸ä¼šåœ¨å±å¹•çš„å³ä¸‹è§’看到光标ä½ç½®ï¼Œè¿™ä¼šåœ¨ 'ruler' 选项设置时å‘生 + (å‚è§ :help 'ruler') - 2. 按下 SHIFT-G é”®å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶æœ€åŽä¸€è¡Œã€‚ - - 3. 输入您曾åœç•™çš„行å·ï¼Œç„¶åŽæŒ‰ä¸‹ SHIFT-G。这样就å¯ä»¥è¿”回到您第一次按下 - CTRL-g 时所在的行好了。注æ„âˆ¶è¾“å…¥è¡Œå·æ—¶ï¼Œè¡Œå·æ˜¯ä¸ä¼šåœ¨å±å¹•ä¸Šæ˜¾ç¤ºå‡ºæ¥ - 的。 - - 4. 如果愿æ„,您å¯ä»¥ç»§ç»­æ‰§è¡Œæ­¥éª¤1至步骤三。 + 2. 输入大写 G å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶æœ€åŽä¸€è¡Œã€‚ + 输入 gg å¯ä»¥ä½¿å¾—当å‰å…‰æ ‡ç›´æŽ¥è·³è½¬åˆ°æ–‡ä»¶ç¬¬ä¸€è¡Œã€‚ + 3. 输入您曾åœç•™çš„行å·ï¼Œç„¶åŽè¾“入大写 G。这样就å¯ä»¥è¿”回到您第一次按下 + CTRL-G 时所在的行了。 + 4. 如果您觉得没问题的è¯ï¼Œè¯·æ‰§è¡Œæ­¥éª¤1至步骤3çš„æ“作进行练习。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四讲第二节∶æœç´¢ç±»å‘½ä»¤ + 第四讲第二节:æœç´¢ç±»å‘½ä»¤ - ** 输入 / 以åŠå°¾éšçš„字符串å¯ä»¥ç”¨ä»¥åœ¨å½“剿–‡ä»¶ä¸­æŸ¥æ‰¾è¯¥å­—符串。** + ** 输入 / 加上一个字符串å¯ä»¥ç”¨ä»¥åœ¨å½“剿–‡ä»¶ä¸­æŸ¥æ‰¾è¯¥å­—符串。** 1. 在正常模å¼ä¸‹è¾“å…¥ / 字符。您此时会注æ„到该字符和光标都会出现在å±å¹•底 部,这跟 : 命令是一样的。 @@ -433,23 +516,22 @@ 2. 接ç€è¾“å…¥ errroor <回车>。那个errroorå°±æ˜¯æ‚¨è¦æŸ¥æ‰¾çš„字符串。 3. è¦æŸ¥æ‰¾åŒä¸Šä¸€æ¬¡çš„字符串,åªéœ€è¦æŒ‰ n 键。è¦å‘ç›¸åæ–¹å‘查找åŒä¸Šä¸€æ¬¡çš„å­— - 符串,请输入 Shift-N å³å¯ã€‚ + 符串,请输入大写 N å³å¯ã€‚ 4. å¦‚æžœæ‚¨æƒ³é€†å‘æŸ¥æ‰¾å­—符串,请使用 ? 代替 / 进行。 ----> When the search reaches the end of the file it will continue at the start. - - "errroor" is not the way to spell error; errroor is an error. - - æç¤ºâˆ¶å¦‚果查找已ç»åˆ°è¾¾æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾ä¼šè‡ªåŠ¨ä»Žæ–‡ä»¶å¤´éƒ¨ç»§ç»­æŸ¥æ‰¾ã€‚ - + 5. è¦å›žåˆ°æ‚¨ä¹‹å‰çš„ä½ç½®æŒ‰ CTRL-O (æŒ‰ä½ Ctrl 键䏿”¾åŒæ—¶æŒ‰ä¸‹å­—æ¯ o)。é‡å¤æŒ‰å¯ä»¥ + 回退更多步。CTRL-I 会跳转到较新的ä½ç½®ã€‚ +---> "errroor" is not the way to spell error; errroor is an error. +æç¤ºï¼šå¦‚果查找已ç»åˆ°è¾¾æ–‡ä»¶æœ«å°¾ï¼ŒæŸ¥æ‰¾ä¼šè‡ªåŠ¨ä»Žæ–‡ä»¶å¤´éƒ¨ç»§ç»­æŸ¥æ‰¾ï¼Œé™¤éž + 'wrapscan' 选项被å¤ä½ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四讲第三节∶é…对括å·çš„æŸ¥æ‰¾ + 第四讲第三节:é…对括å·çš„æŸ¥æ‰¾ - ** 按 % å¯ä»¥æŸ¥æ‰¾é…å¯¹çš„æ‹¬å· )ã€]ã€}。** + ** 输入 % å¯ä»¥æŸ¥æ‰¾é…å¯¹çš„æ‹¬å· )ã€]ã€}。** 1. æŠŠå…‰æ ‡æ”¾åœ¨æœ¬èŠ‚ä¸‹é¢æ ‡è®°æœ‰ --> 那一行中的任何一个 (ã€[ 或 { 处。 @@ -459,17 +541,17 @@ 4. 冿¬¡æŒ‰ % å°±å¯ä»¥è·³å›žé…对的第一个括å·å¤„。 + 5. 移动光标到å¦ä¸€ä¸ª (ã€)ã€[ã€]ã€{ 或 } 处,按 % 查看其所作所为。 + ---> This ( is a test line with ('s, ['s ] and {'s } in it. )) -æç¤ºâˆ¶åœ¨ç¨‹åºè°ƒè¯•æ—¶ï¼Œè¿™ä¸ªåŠŸèƒ½ç”¨æ¥æŸ¥æ‰¾ä¸é…å¯¹çš„æ‹¬å·æ˜¯å¾ˆæœ‰ç”¨çš„。 - - +æç¤ºï¼šåœ¨ç¨‹åºè°ƒè¯•æ—¶ï¼Œè¿™ä¸ªåŠŸèƒ½ç”¨æ¥æŸ¥æ‰¾ä¸é…å¯¹çš„æ‹¬å·æ˜¯å¾ˆæœ‰ç”¨çš„。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第四讲第四节∶修正错误的方法之一 + 第四讲第四节:替æ¢å‘½ä»¤ ** 输入 :s/old/new/g å¯ä»¥æ›¿æ¢ old 为 new。** @@ -479,46 +561,48 @@ 2. 输入 :s/thee/the <回车> 。请注æ„è¯¥å‘½ä»¤åªæ”¹å˜å…‰æ ‡æ‰€åœ¨è¡Œçš„ç¬¬ä¸€ä¸ªåŒ¹é… ä¸²ã€‚ - 3. 输入 :s/thee/the/g 则是替æ¢å…¨è¡Œçš„匹é…串。 - ----> the best time to see thee flowers is in thee spring. - - 4. è¦æ›¿æ¢ä¸¤è¡Œä¹‹é—´å‡ºçŽ°çš„æ¯ä¸ªåŒ¹é…串,请输入 :#,#s/old/new/g (#,#代表的是 - 两行的行å·)。输入 :%s/old/new/g åˆ™æ˜¯æ›¿æ¢æ•´ä¸ªæ–‡ä»¶ä¸­çš„æ¯ä¸ªåŒ¹é…串。 - + 3. 输入 :s/thee/the/g 则是替æ¢å…¨è¡Œçš„匹é…串,该行中所有的 "thee" 都会被 + 改å˜ã€‚ +---> thee best time to see thee flowers is in thee spring. + 4. è¦æ›¿æ¢ä¸¤è¡Œä¹‹é—´å‡ºçŽ°çš„æ¯ä¸ªåŒ¹é…串,请 + 输入 :#,#s/old/new/g 其中 #,# ä»£è¡¨çš„æ˜¯æ›¿æ¢æ“作的若干行中 + 首尾两行的行å·ã€‚ + 输入 :%s/old/new/g åˆ™æ˜¯æ›¿æ¢æ•´ä¸ªæ–‡ä»¶ä¸­çš„æ¯ä¸ªåŒ¹é…串。 + 输入 :%s/old/new/gc 会找到整个文件中的æ¯ä¸ªåŒ¹é…串,并且对æ¯ä¸ªåŒ¹é…串 + æç¤ºæ˜¯å¦è¿›è¡Œæ›¿æ¢ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第四讲å°ç»“ - 1. Ctrl-g 用于显示当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚Shift-G 用于将光标跳 - 转至文件最åŽä¸€è¡Œã€‚先敲入一个行å·ç„¶åŽæŒ‰ Shift-G 则是将光标移动至该行 - å·ä»£è¡¨çš„行。 + 1. CTRL-G 用于显示当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å’Œæ–‡ä»¶çжæ€ä¿¡æ¯ã€‚ + G 用于将光标跳转至文件最åŽä¸€è¡Œã€‚ + 先敲入一个行å·ç„¶åŽè¾“入大写 G 则是将光标移动至该行å·ä»£è¡¨çš„行。 + gg 用于将光标跳转至文件第一行。 - 2. 输入 / ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²æ˜¯åˆ™æ˜¯åœ¨å½“å‰æ‰€ç¼–辑的文档中å‘åŽæŸ¥æ‰¾è¯¥å­—符串。 - è¾“å…¥é—®å· ? ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²æ˜¯åˆ™æ˜¯åœ¨å½“å‰æ‰€ç¼–辑的文档中å‘剿Ÿ¥æ‰¾è¯¥å­— - 符串。完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹åŽæŒ‰ n 键则是é‡å¤ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查 - 找下一个字符串所在;或者按 Shift-N å‘ç›¸åæ–¹å‘查找下该字符串所在。 + 2. 输入 / ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²æ˜¯åœ¨å½“å‰æ‰€ç¼–è¾‘çš„æ–‡æ¡£ä¸­æ­£å‘æŸ¥æ‰¾è¯¥å­—符串。 + 输入 ? ç„¶åŽç´§éšä¸€ä¸ªå­—ç¬¦ä¸²åˆ™æ˜¯åœ¨å½“å‰æ‰€ç¼–辑的文档中å呿Ÿ¥æ‰¾è¯¥å­—符串。 + 完æˆä¸€æ¬¡æŸ¥æ‰¾ä¹‹åŽæŒ‰ n 键是é‡å¤ä¸Šä¸€æ¬¡çš„命令,å¯åœ¨åŒä¸€æ–¹å‘上查 + 找下一个匹é…字符串所在;或者按大写 N å‘ç›¸åæ–¹å‘查找下一匹é…字符串所在。 + CTRL-O 带您跳转回较旧的ä½ç½®ï¼ŒCTRL-I 则带您到较新的ä½ç½®ã€‚ - 3. 如果光标当å‰ä½ç½®æ˜¯æ‹¬å·(ã€)ã€[ã€]ã€{ã€},按 % å¯ä»¥å°†å…‰æ ‡ç§»åŠ¨åˆ°é…对的 - 括å·ä¸Šã€‚ + 3. 如果光标当å‰ä½ç½®æ˜¯æ‹¬å·(ã€)ã€[ã€]ã€{ã€},按 % 会将光标移动到é…对的括å·ä¸Šã€‚ 4. 在一行内替æ¢å¤´ä¸€ä¸ªå­—符串 old 为新的字符串 new,请输入 :s/old/new åœ¨ä¸€è¡Œå†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :s/old/new/g åœ¨ä¸¤è¡Œå†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g åœ¨æ–‡ä»¶å†…æ›¿æ¢æ‰€æœ‰çš„字符串 old 为新的字符串 new,请输入 :%s/old/new/g - è¿›è¡Œå…¨æ–‡æ›¿æ¢æ—¶è¯¢é—®ç”¨æˆ·ç¡®è®¤æ¯ä¸ªæ›¿æ¢éœ€æ·»åŠ  c 选项,请输入 :%s/old/new/gc - + è¿›è¡Œå…¨æ–‡æ›¿æ¢æ—¶è¯¢é—®ç”¨æˆ·ç¡®è®¤æ¯ä¸ªæ›¿æ¢éœ€æ·»åŠ  c 标志 :%s/old/new/gc ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五讲第一节∶在 VIM 内执行外部命令的方法 + 第五讲第一节:在 VIM 内执行外部命令的方法 - ** 输入 :! ç„¶åŽç´§éšè‘—输入一个外部命令å¯ä»¥æ‰§è¡Œè¯¥å¤–部命令。** + ** 输入 :! ç„¶åŽç´§æŽ¥ç€è¾“入一个外部命令å¯ä»¥æ‰§è¡Œè¯¥å¤–部命令。** - 1. 按下我们所熟悉的 : 命令设置光标到å±å¹•底部。这样就å¯ä»¥è®©æ‚¨è¾“入命令了。 + 1. 按下我们所熟悉的 : 命令使光标移动到å±å¹•底部。这样您就å¯ä»¥è¾“入一行命令了。 2. 接ç€è¾“入感å¹å· ! 这个字符,这样就å…许您执行外部的 shell 命令了。 @@ -526,15 +610,17 @@ å†…å®¹ï¼Œå°±å¦‚åŒæ‚¨åœ¨å‘½ä»¤è¡Œæç¤ºç¬¦ä¸‹è¾“å…¥ ls 命令的结果一样。如果 !ls 没起 作用,您å¯ä»¥è¯•试 :!dir 看看。 ----> æç¤ºâˆ¶ 所有的外部命令都å¯ä»¥ä»¥è¿™ç§æ–¹å¼æ‰§è¡Œã€‚ +æç¤ºï¼šæ‰€æœ‰çš„外部命令都å¯ä»¥ä»¥è¿™ç§æ–¹å¼æ‰§è¡Œï¼ŒåŒ…æ‹¬å¸¦å‘½ä»¤è¡Œå‚æ•°çš„那些。 + +æç¤ºï¼šæ‰€æœ‰çš„ : 命令都必须以敲 <回车> 键结æŸã€‚ä»Žä»Šä»¥åŽæˆ‘们就ä¸ä¼šæ€»æ˜¯æåˆ°è¿™ä¸€ç‚¹ + 了。 ----> æç¤ºâˆ¶ 所有的 : 命令都必须以 <回车> 告终。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五讲第二节∶关于ä¿å­˜æ–‡ä»¶çš„æ›´å¤šä¿¡æ¯ + 第五讲第二节:关于ä¿å­˜æ–‡ä»¶çš„æ›´å¤šä¿¡æ¯ ** è¦å°†å¯¹æ–‡ä»¶çš„æ”¹åЍä¿å­˜åˆ°æ–‡ä»¶ä¸­ï¼Œè¯·è¾“å…¥ :w FILENAME 。** @@ -542,60 +628,63 @@ 1. 输入 :!dir 或者 :!ls 获知当å‰ç›®å½•çš„å†…å®¹ã€‚æ‚¨åº”å½“å·²çŸ¥é“æœ€åŽè¿˜å¾—敲 <回车> å§ã€‚ - 2. 选择一个尚未存在文件å,比如 TEST 。 + 2. 选择一个未被用到的文件å,比如 TEST。 3. 接ç€è¾“å…¥ :w TEST (此处 TEST 是您所选择的文件å。) - 4. 该命令会以 TEST 为文件åä¿å­˜æ•´ä¸ªæ–‡ä»¶ (VIM 教程)ã€‚ä¸ºäº†ç¡®ä¿æ­£ç¡®ä¿å­˜ï¼Œ - è¯·å†æ¬¡è¾“å…¥ :!dir 查看您的目录列表内容。 + 4. 该命令会以 TEST 为文件åä¿å­˜æ•´ä¸ªæ–‡ä»¶ (Vim 教程)。为了验è¯è¿™ä¸€ç‚¹ï¼Œ + è¯·å†æ¬¡è¾“å…¥ :!dir 或 :!ls 查看您的目录列表内容。 ----> 请注æ„∶如果您退出 VIM ç„¶åŽåœ¨ä»¥æ–‡ä»¶å TEST ä¸ºå‚æ•°è¿›å…¥ï¼Œé‚£ä¹ˆè¯¥æ–‡ä»¶å†… +请注æ„:如果您退出 Vim ç„¶åŽåœ¨ä»¥å‘½ä»¤ vim TEST 冿¬¡å¯åЍ Vim,那么该文件内 å®¹åº”è¯¥åŒæ‚¨ä¿å­˜æ—¶çš„æ–‡ä»¶å†…容是完全一样的。 - 5. 现在您å¯ä»¥é€šè¿‡è¾“å…¥ :!rm TEST æ¥åˆ é™¤ TEST 文件了。 - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五讲第三节∶一个具有选择性的ä¿å­˜å‘½ä»¤ - - - ** è¦ä¿å­˜æ–‡ä»¶çš„部分内容,请输入 :#,# w FILENAME ** - - 1. 冿¥æ‰§è¡Œä¸€æ¬¡ :!dir 或者 :!ls 获知当å‰ç›®å½•的内容,然åŽé€‰æ‹©ä¸€ä¸ªåˆé€‚çš„ - ä¸é‡å的文件å,比如 TEST 。 - - 2. 接ç€å°†å…‰æ ‡ç§»åŠ¨è‡³æœ¬é¡µçš„æœ€é¡¶ç«¯ï¼Œç„¶åŽæŒ‰ CTRL-g 找到该行的行å·ã€‚别忘了 - 行å·å“¦ã€‚ - - 3. æŽ¥ç€æŠŠå…‰æ ‡ç§»åŠ¨è‡³æœ¬é¡µçš„æœ€åº•ç«¯ï¼Œå†æŒ‰ä¸€æ¬¡ CTRL-g 。也别忘了这个行好哦。 - - 4. 为了åªä¿å­˜æ–‡ç« çš„æŸä¸ªéƒ¨åˆ†ï¼Œè¯·è¾“å…¥ :#,# w TEST 。这里的 #,# å°±æ˜¯ä¸Šé¢ - è¦æ±‚您记ä½çš„行å·(顶端行å·,底端行å·),而 TEST 就是选定的文件å。 - - 5. 最åŽï¼Œç”¨ :!dir ç¡®è®¤æ–‡ä»¶æ˜¯å¦æ­£ç¡®ä¿å­˜ã€‚但是这次先别删除掉。 - - + 5. 现在您å¯ä»¥åˆ é™¤ TEST 文件了。在 MS-DOS 下,请输入: :!del TEST + 在 Unix 下,请输入: :!rm TEST ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第五讲第四节∶æå–å’Œåˆå¹¶æ–‡ä»¶ + 第五讲第三节:一个具有选择性的ä¿å­˜å‘½ä»¤ + + + ** è¦ä¿å­˜æ–‡ä»¶çš„部分内容,请输入 v motion :w FILENAME ** + + 1. 移动光标到本行。 + + 2. æŽ¥ç€æŒ‰ v 键,将光标移动至下é¢ç¬¬äº”个æ¡ç›®ä¸Šã€‚您会注æ„到之间的文本被高亮了。 + + 3. ç„¶åŽæŒ‰ : 字符。您将看到å±å¹•底部会出现 :'<,'> 。 + + 4. 现在请输入 w TEST,其中 TEST 是一个未被使用的文件å。确认您看到了 + :'<,'>w TEST ä¹‹åŽæŒ‰ <回车> 键。 + + 5. 这时 Vim 会把选中的行写入到以 TEST 命å的文件中去。使用 :!dir 或 :!ls + 确认文件被正确ä¿å­˜ã€‚è¿™æ¬¡å…ˆåˆ«åˆ é™¤å®ƒï¼æˆ‘们在下一讲中会用到它。 + +æç¤ºï¼šæŒ‰ v 键使 Vim 进入å¯è§†æ¨¡å¼è¿›è¡Œé€‰å–。您å¯ä»¥å››å¤„移动光标使选å–区域å˜å¤§æˆ– + å˜å°ã€‚æŽ¥ç€æ‚¨å¯ä»¥ä½¿ç”¨ä¸€ä¸ªæ“作符对选中文本进行æ“作。例如,按 d 键会删除 + 选中的文本内容。 + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第五讲第四节:æå–å’Œåˆå¹¶æ–‡ä»¶ ** è¦å‘当剿–‡ä»¶ä¸­æ’å…¥å¦å¤–的文件的内容,请输入 :r FILENAME ** - 1. 请键入 :!dir 确认您å‰é¢åˆ›å»ºçš„ TEST 文件还在。 + 1. 请把光标移动到本行上é¢ä¸€è¡Œã€‚ - 2. ç„¶åŽå°†å…‰æ ‡ç§»åŠ¨è‡³å½“å‰é¡µé¢çš„顶端。 +特别æç¤ºï¼šæ‰§è¡Œæ­¥éª¤2ä¹‹åŽæ‚¨å°†çœ‹åˆ°ç¬¬äº”讲第三节的文字,请届时往下移动 + 以冿¬¡çœ‹åˆ°æœ¬è®²å†…容。 -特别æç¤ºâˆ¶ 执行步骤3ä¹‹åŽæ‚¨å°†çœ‹åˆ°ç¬¬äº”讲第三节,请届时å†å¾€ä¸‹ç§»åŠ¨å›žåˆ°è¿™é‡Œæ¥ã€‚ + 2. 接ç€é€šè¿‡å‘½ä»¤ :r TEST å°†å‰é¢åˆ›å»ºçš„å为 TEST 的文件æå–è¿›æ¥ã€‚ + 您所æå–è¿›æ¥çš„æ–‡ä»¶å°†ä»Žå…‰æ ‡æ‰€åœ¨ä½ç½®å¤„开始置入。 - 3. 接ç€é€šè¿‡ :r TEST å°†å‰é¢åˆ›å»ºçš„å为 TEST 的文件æå–è¿›æ¥ã€‚ + 3. ä¸ºäº†ç¡®è®¤æ–‡ä»¶å·²ç»æå–æˆåŠŸï¼Œç§»åŠ¨å…‰æ ‡å›žåˆ°åŽŸæ¥çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有两份第 + 五讲第三节的内容,一份是原始内容,å¦å¤–一份是æ¥è‡ªæ–‡ä»¶çš„副本。 -特别æç¤ºâˆ¶æ‚¨æ‰€æå–è¿›æ¥çš„æ–‡ä»¶å°†ä»Žå…‰æ ‡æ‰€åœ¨ä½ç½®å¤„开始置入。 +æç¤ºï¼šæ‚¨è¿˜å¯ä»¥è¯»å–外部命令的输出。例如, :r !ls å¯ä»¥è¯»å– ls 命令的输出,并 + 把它放置在光标下é¢ã€‚ - 4. ä¸ºäº†ç¡®è®¤æ–‡ä»¶å·²ç»æå–æˆåŠŸï¼Œç§»åŠ¨å…‰æ ‡å›žåˆ°åŽŸæ¥çš„ä½ç½®å°±å¯ä»¥æ³¨æ„有两份第 - 五讲第三节,一份是原本,å¦å¤–一份是æ¥è‡ªæ–‡ä»¶çš„副本。 @@ -605,237 +694,293 @@ 1. :!command 用于执行一个外部命令 command。 - 请看一些实际例å­âˆ¶ - :!dir - 用于显示当å‰ç›®å½•的内容。 - :!rm FILENAME - 用于删除å为 FILENAME 的文件。 + 请看一些实际例å­ï¼š + (MS-DOS) (Unix) + :!dir :!ls - 用于显示当å‰ç›®å½•的内容。 + :!del FILENAME :!rm FILENAME - 用于删除å为 FILENAME 的文件。 2. :w FILENAME å¯å°†å½“å‰ VIM 中正在编辑的文件ä¿å­˜åˆ°å为 FILENAME 的文 件中。 - 3. :#,#w FILENAME å¯å°†å½“å‰ç¼–辑文件第 # 行至第 # 行的内容ä¿å­˜åˆ°æ–‡ä»¶ + 3. v motion :w FILENAME å¯å°†å½“å‰ç¼–辑文件中å¯è§†æ¨¡å¼ä¸‹é€‰ä¸­çš„内容ä¿å­˜åˆ°æ–‡ä»¶ FILENAME 中。 4. :r FILENAME 坿å–ç£ç›˜æ–‡ä»¶ FILENAME 并将其æ’å…¥åˆ°å½“å‰æ–‡ä»¶çš„光标ä½ç½® åŽé¢ã€‚ - - - - + 5. :r !dir å¯ä»¥è¯»å– dir å‘½ä»¤çš„è¾“å‡ºå¹¶å°†å…¶æ”¾ç½®åˆ°å½“å‰æ–‡ä»¶çš„光标ä½ç½®åŽé¢ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六讲第一节∶打开类命令 + 第六讲第一节:打开类命令 ** 输入 o 将在光标的下方打开新的一行并进入æ’入模å¼ã€‚** 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的那一行。 - 2. 接ç€è¾“å…¥å°å†™çš„ o 在光标 *下方* 打开新的一行并进入æ’入模å¼ã€‚ + 2. 接ç€è¾“å…¥å°å†™çš„ o 在光标 *下方* 打开新的一行,这个命令会使您 + 进入æ’入模å¼ã€‚ - 3. ç„¶åŽå¤åˆ¶æ ‡è®°æœ‰ ---> 的行并按 键退出æ’入模å¼è€Œè¿›å…¥æ­£å¸¸æ¨¡å¼ã€‚ + 3. ç„¶åŽè¾“å…¥ä¸€äº›æ–‡å­—ï¼Œä¹‹åŽæŒ‰ 键退出æ’入模å¼è€Œè¿›å…¥æ­£å¸¸æ¨¡å¼ã€‚ ---> After typing o the cursor is placed on the open line in Insert mode. 4. 为了在光标 *上方* 打开新的一行,åªéœ€è¦è¾“入大写的 O è€Œä¸æ˜¯å°å†™çš„ o - å°±å¯ä»¥äº†ã€‚请在下行测试一下å§ã€‚当光标处在在该行上时,按 Shift-Oå¯ä»¥ - 在该行上方新开一行。 - -Open up a line above this by typing Shift-O while the cursor is on this line. + å°±å¯ä»¥äº†ã€‚请在下行测试一下å§ã€‚ +---> Open up a line above this by typing O while the cursor is on this line. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ç¬¬å…­è®²ç¬¬äºŒèŠ‚âˆ¶å…‰æ ‡åŽæ’入类命令 + 第六讲第二节:附加类命令 ** 输入 a å°†å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本。 ** - 1. 请在正常模å¼ä¸‹é€šè¿‡è¾“å…¥ $ å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行 - 的末尾。 + 1. 请在正常模å¼ä¸‹å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行的行首。 - 2. 接ç€è¾“å…¥å°å†™çš„ a 则å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本了。大写的 A 则å¯ä»¥ç›´æŽ¥åœ¨è¡Œ - 末æ’入文本。 + 2. 接ç€è¾“å…¥ e 直到光标ä½äºŽ li 的末尾。 -æç¤ºâˆ¶è¾“入大写 A çš„æ“作方法å¯ä»¥åœ¨è¡Œæœ«æ’入文本,é¿å…了输入 i,光标定ä½åˆ° - 最åŽä¸€ä¸ªå­—符,输入的文本, å›žå¤æ­£å¸¸æ¨¡å¼ï¼Œç®­å¤´å³é”®ç§»åŠ¨å…‰æ ‡ä»¥åŠ - x 删除当å‰å…‰æ ‡æ‰€åœ¨ä½ç½®å­—ç¬¦ç­‰ç­‰è¯¸å¤šç¹æ‚çš„æ“作。 + 3. 输入å°å†™çš„ a 则å¯åœ¨å…‰æ ‡ä¹‹åŽæ’入文本了。 - 3. æ“作之åŽç¬¬ä¸€è¡Œå°±å¯ä»¥è¡¥å……完整了。请注æ„å…‰æ ‡åŽæ’入文本与æ’å…¥æ¨¡å¼æ˜¯åŸº - æœ¬å®Œå…¨ä¸€è‡´çš„ï¼Œåªæ˜¯æ–‡æœ¬æ’入的ä½ç½®å®šä½ç¨æœ‰ä¸åŒç½¢äº†ã€‚ + 4. å°†å•è¯è¡¥å……完整,就åƒä¸‹ä¸€è¡Œä¸­çš„é‚£æ ·ã€‚ä¹‹åŽæŒ‰ 键退出æ’入模å¼å›žåˆ° + 正常模å¼ã€‚ ----> This line will allow you to practice ----> This line will allow you to practice appending text to the end of a line. + 5. 使用 e 移动光标到下一步ä¸å®Œæ•´çš„å•è¯ï¼Œé‡å¤æ­¥éª¤3和步骤4。 +---> This li will allow you to pract appendi text to a line. +---> This line will allow you to practice appending text to a line. + +æç¤ºï¼šaã€i å’Œ A 都会带您进入æ’入模å¼ï¼ŒæƒŸä¸€çš„区别在于字符æ’入的ä½ç½®ã€‚ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六讲第三节∶å¦å¤–一个置æ¢ç±»å‘½ä»¤çš„版本 + 第六讲第三节:å¦å¤–一个置æ¢ç±»å‘½ä»¤çš„版本 ** 输入大写的 R å¯è¿žç»­æ›¿æ¢å¤šä¸ªå­—符。** - 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。 + 1. è¯·å°†å…‰æ ‡ç§»åŠ¨åˆ°æœ¬èŠ‚ä¸­ä¸‹é¢æ ‡è®°æœ‰ ---> 的第一行。移动光标到第一个 xxx çš„ + èµ·å§‹ä½ç½®ã€‚ - 2. 移动光标到第一行中ä¸åŒäºŽæ ‡æœ‰ ---> 的第二行的第一个å•è¯çš„开始,å³å• - è¯ last 处。 - - 3. ç„¶åŽè¾“入大写的 R 开始把第一行中的ä¸åŒäºŽç¬¬äºŒè¡Œçš„剩余字符é€ä¸€è¾“入,就 + 2. ç„¶åŽè¾“入大写的 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. 请注æ„∶如果您按 é€€å‡ºç½®æ¢æ¨¡å¼å›žå¤æ­£å¸¸æ¨¡å¼ï¼Œå°šæœªæ›¿æ¢çš„æ–‡æœ¬å°†ä» - ç„¶ä¿æŒåŽŸçŠ¶ã€‚ - + 3. æŽ¥ç€æŒ‰ é”®é€€å‡ºæ›¿æ¢æ¨¡å¼å›žåˆ°æ­£å¸¸æ¨¡å¼ã€‚您å¯ä»¥æ³¨æ„到尚未替æ¢çš„æ–‡æœ¬ + ä»ç„¶ä¿æŒåŽŸçŠ¶ã€‚ + 4. é‡å¤ä»¥ä¸Šæ­¥éª¤ï¼Œå°†å‰©ä½™çš„ xxx ä¹Ÿæ›¿æ¢æŽ‰ã€‚ +---> Adding 123 to xxx gives you xxx. +---> Adding 123 to 456 gives you 579. +æç¤ºï¼šæ›¿æ¢æ¨¡å¼ä¸Žæ’入模å¼ç›¸ä¼¼ï¼Œä¸è¿‡æ¯ä¸ªè¾“入的字符都会删除一个已有的字符。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第六讲第四节∶设置类命令的选项 + 第六讲第四节:å¤åˆ¶ç²˜è´´æ–‡æœ¬ + + + ** 使用æ“作符 y å¤åˆ¶æ–‡æœ¬ï¼Œä½¿ç”¨ p 粘贴文本 ** + + 1. 定ä½åˆ°ä¸‹é¢æ ‡è®°æœ‰ ---> 的一行,将光标移动到 "a)" 之åŽã€‚ + + 2. 接ç€ä½¿ç”¨ v 进入å¯è§†æ¨¡å¼ï¼Œç§»åŠ¨å…‰æ ‡åˆ° "first" çš„å‰é¢ã€‚ + + 3. 现在输入 y 以抽出(å¤åˆ¶)高亮的文本。 + + 4. ç„¶åŽç§»åŠ¨å…‰æ ‡åˆ°ä¸‹ä¸€è¡Œçš„æœ«å°¾ï¼šj$ + + 5. 接ç€è¾“å…¥ p 以放置(粘贴)å¤åˆ¶äº†çš„æ–‡æœ¬ã€‚ç„¶åŽè¾“入:a second 。 + + 6. 使用å¯è§†æ¨¡å¼é€‰ä¸­ " item.",用 y å¤åˆ¶ï¼Œå†ç”¨ j$ 将光标移动到下一行末尾, + 用 p 将文本粘贴到那里。 + +---> a) this is the first item. + b) + + æç¤ºï¼šæ‚¨è¿˜å¯ä»¥æŠŠ y 当作æ“作符æ¥ä½¿ç”¨ï¼›ä¾‹å¦‚ yw å¯ä»¥ç”¨æ¥å¤åˆ¶ä¸€ä¸ªå•è¯ã€‚ + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第六讲第五节:设置类命令的选项 ** 设置å¯ä½¿æŸ¥æ‰¾æˆ–者替æ¢å¯å¿½ç•¥å¤§å°å†™çš„选项 ** + 1. è¦æŸ¥æ‰¾å•è¯ ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¾“å…¥ /ignore <回车>。 + è¦é‡å¤æŸ¥æ‰¾è¯¥è¯ï¼Œå¯ä»¥é‡å¤æŒ‰ n 键。 - 1. è¦æŸ¥æ‰¾å•è¯ ignore å¯åœ¨æ­£å¸¸æ¨¡å¼ä¸‹è¾“å…¥ /ignore 。è¦é‡å¤æŸ¥æ‰¾è¯¥è¯ï¼Œå¯ä»¥ - é‡å¤æŒ‰ n 键。 + 2. ç„¶åŽè®¾ç½® ic 选项(Ignore Case,忽略大å°å†™),请输入: :set ic - 2. ç„¶åŽè®¾ç½® ic 选项(ic就是英文忽略大å°å†™Ignore Case的首字æ¯ç¼©å†™è¯)ï¼Œå³ - 输入∶ - :set ic + 3. 现在å¯ä»¥é€šè¿‡é”®å…¥ n 键冿¬¡æŸ¥æ‰¾å•è¯ ignore。注æ„到 Ignore å’Œ IGNORE 现在 + 也被找到了。 - 3. 现在å¯ä»¥é€šè¿‡é”®å…¥ n 键冿¬¡æŸ¥æ‰¾å•è¯ ignore。é‡å¤æŸ¥æ‰¾å¯ä»¥é‡å¤é”®å…¥ n 键。 + 4. ç„¶åŽè®¾ç½® hlsearch å’Œ incsearch 这两个选项,请输入: :set hls is - 4. ç„¶åŽè®¾ç½® hlsearch å’Œ incsearch 这两个选项,输入以下内容∶ - :set hls is + 5. 现在å¯ä»¥å†æ¬¡è¾“入查找命令,看看会有什么效果: /ignore <回车> - 5. 现在å¯ä»¥å†æ¬¡è¾“入查找命令,看看会有什么效果∶ - /ignore + 6. è¦ç¦ç”¨å¿½ç•¥å¤§å°å†™ï¼Œè¯·è¾“入: :set noic +æç¤ºï¼šè¦ç§»é™¤åŒ¹é…项的高亮显示,请输入: :nohlsearch +æç¤ºï¼šå¦‚果您想è¦ä»…在一次查找时忽略字æ¯å¤§å°å†™ï¼Œæ‚¨å¯ä»¥ä½¿ç”¨ \c: + /ignore\c <回车> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 第六讲å°ç»“ - - 1. 输入å°å†™çš„ o å¯ä»¥åœ¨å…‰æ ‡ä¸‹æ–¹æ‰“开新的一行并将光标置于新开的行首,进入 - æ’入模å¼ã€‚ - 输入大写的 O å¯ä»¥åœ¨å…‰æ ‡ä¸Šæ–¹æ‰“开新的一行并将光标置于新开的行首,进入 - æ’入模å¼ã€‚ + 1. 输入å°å†™çš„ o å¯ä»¥åœ¨å…‰æ ‡ä¸‹æ–¹æ‰“开新的一行并进入æ’入模å¼ã€‚ + 输入大写的 O å¯ä»¥åœ¨å…‰æ ‡ä¸Šæ–¹æ‰“开新的一行。 2. 输入å°å†™çš„ a å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨ä½ç½®ä¹‹åŽæ’入文本。 输入大写的 A å¯ä»¥åœ¨å…‰æ ‡æ‰€åœ¨è¡Œçš„è¡Œæœ«ä¹‹åŽæ’入文本。 - 3. 输入大写的 R å°†è¿›å…¥æ›¿æ¢æ¨¡å¼ï¼Œç›´è‡³æŒ‰ é”®é€€å‡ºæ›¿æ¢æ¨¡å¼è€Œè¿›å…¥æ­£å¸¸ - 模å¼ã€‚ - - 4. 输入 :set xxx å¯ä»¥è®¾ç½® xxx 选项。 - - - - + 3. e 命令å¯ä»¥ä½¿å…‰æ ‡ç§»åŠ¨åˆ°å•è¯æœ«å°¾ã€‚ + 4. æ“作符 y å¤åˆ¶æ–‡æœ¬ï¼Œp 粘贴先å‰å¤åˆ¶çš„æ–‡æœ¬ã€‚ + 5. 输入大写的 R å°†è¿›å…¥æ›¿æ¢æ¨¡å¼ï¼Œç›´è‡³æŒ‰ 键回到正常模å¼ã€‚ + 6. 输入 :set xxx å¯ä»¥è®¾ç½® xxx 选项。一些有用的选项如下: + 'ic' 'ignorecase' 查找时忽略字æ¯å¤§å°å†™ + 'is' 'incsearch' æŸ¥æ‰¾çŸ­è¯­æ—¶æ˜¾ç¤ºéƒ¨åˆ†åŒ¹é… + 'hls' 'hlsearch' 高亮显示所有的匹é…短语 + 选项åå¯ä»¥ç”¨å®Œæ•´ç‰ˆæœ¬ï¼Œä¹Ÿå¯ä»¥ç”¨ç¼©ç•¥ç‰ˆæœ¬ã€‚ + 7. 在选项å‰åŠ ä¸Š no å¯ä»¥å…³é—­é€‰é¡¹ï¼š :set noic ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第七讲∶在线帮助命令 + 第七讲第一节:获å–å¸®åŠ©ä¿¡æ¯ + ** 使用在线帮助系统 ** Vim 拥有一个细致全é¢çš„在线帮助系统。è¦å¯åŠ¨è¯¥å¸®åŠ©ç³»ç»Ÿï¼Œè¯·é€‰æ‹©å¦‚ä¸‹ä¸‰ç§æ–¹ - 法之一∶ + 法之一: - 按下 é”® (如果键盘上有的è¯) - 按下 é”® (如果键盘上有的è¯) - 输入 :help <回车> + 请阅读帮助窗å£ä¸­çš„æ–‡å­—以了解帮助是如何工作的。 + 输入 CTRL-W CTRL-W å¯ä»¥ä½¿æ‚¨åœ¨çª—å£ä¹‹é—´è·³è½¬ã€‚ 输入 :q <回车> å¯ä»¥å…³é—­å¸®åŠ©çª—å£ã€‚ æä¾›ä¸€ä¸ªæ­£ç¡®çš„傿•°ç»™":help"命令,您å¯ä»¥æ‰¾åˆ°å…³äºŽè¯¥ä¸»é¢˜çš„帮助。请试验以 - 䏋傿•°(å¯åˆ«å¿˜äº†æŒ‰å›žè½¦é”®å“¦ã€‚:)∶ + 䏋傿•°(å¯åˆ«å¿˜äº†æŒ‰å›žè½¦é”®å“¦): - :help w <回车> - :help c_ - :help insert-index <回车> - :help user-manual <回车> - - - - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 第八讲∶创建一个å¯åŠ¨è„šæœ¬ - - ** å¯ç”¨vim的功能 ** - - Vimçš„åŠŸèƒ½ç‰¹æ€§è¦æ¯”viå¤šå¾—å¤šï¼Œä½†å¤§éƒ¨åˆ†åŠŸèƒ½éƒ½æ²¡æœ‰ç¼ºçœæ¿€æ´»ã€‚为了å¯åŠ¨æ›´å¤šçš„ - 功能,您得创建一个vimrc文件。 - - 1. 开始编辑vimrc文件,这å–决于您所使用的æ“作系统∶ - - :edit ~/.vimrc 这是Unix系统所使用的命令 - :edit $VIM/_vimrc 这是Windows系统所使用的命令 - - 2. 接ç€å¯¼å…¥vimrc范例文件∶ - - :read $VIMRUNTIME/vimrc_example.vim - - 3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ä¸ºâˆ¶ - - :write - - 在下次您å¯åЍvim的时候,编辑器就会有了语法高亮的功能。您å¯ä»¥ç»§ç»­æŠŠæ‚¨å–œ - 欢的其它功能设置添加到这个vimrc文件中。 - -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - vim 教程到此结æŸã€‚æœ¬æ•™ç¨‹åªæ˜¯ä¸ºäº†ç®€æ˜Žåœ°ä»‹ç»ä¸€ä¸‹vim编辑器,但已足以让您 - 很容易学会使用本编辑器了。毋庸质疑,vim还有很多很多的命令,本教程所介 - ç»çš„还差得远著呢。所以您è¦ç²¾é€šçš„è¯ï¼Œè¿˜æœ›ç»§ç»­åŠªåŠ›å“¦ã€‚ä¸‹ä¸€æ­¥æ‚¨å¯ä»¥é˜…读 - vim手册,使用的命令是∶ + :help w + :help c_CTRL-D + :help insert-index :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第七讲第二节:创建å¯åŠ¨è„šæœ¬ - 为了更进一步的å‚考和学习,以下这本书值得推è∶ - Vim - Vi Improved - 作者∶Steve Oualline - 出版社∶New Riders + ** å¯ç”¨ Vim 的特性 ** - 这是第一本完全讲解vim的书ç±ã€‚对于åˆå­¦è€…ç‰¹åˆ«æœ‰ç”¨ã€‚å…¶ä¸­è¿˜åŒ…å«æœ‰å¤§é‡å®žä¾‹ - 和图示。欲知详情,请访问 http://iccf-holland.org/click5.html + Vim çš„åŠŸèƒ½ç‰¹æ€§è¦æ¯” Vi 多得多,但其中大部分都没有缺çœå¯ç”¨ã€‚为了使用更多的 + 特性,您得创建一个 vimrc 文件。 - 以下这本书比较è€äº†è€Œä¸”å†…å®¹ä¸»è¦æ˜¯viè€Œä¸æ˜¯vim,但是也值得推è∶ + 1. 开始编辑 vimrc 文件,具体命令å–决于您所使用的æ“作系统: + :edit ~/.vimrc 这是 Unix 系统所使用的命令 + :edit $VIM/_vimrc 这是 MS-Windows 系统所使用的命令 - Learning the Vi Editor - 作者∶Linda Lamb - 出版社∶O'Reilly & Associates Inc. + 2. 接ç€è¯»å– vimrc 示例文件的内容: + :r $VIMRUNTIME/vimrc_example.vim - 这是一本ä¸é”™çš„书,通过它您几乎能够了解到全部vi能够åšåˆ°çš„事情。此书的第 - 六个版本也包å«äº†ä¸€äº›å…³äºŽvim的信æ¯ã€‚ + 3. ä¿å­˜æ–‡ä»¶ï¼Œå‘½ä»¤ä¸ºï¼š + :write - 本教程是由æ¥è‡ªCalorado School of Mineseçš„Michael C. Pierceã€Robert K. - Ware 所编写的,其中æ¥è‡ªColorado State Universityçš„Charles Smithæä¾›äº† - 很多创æ„ã€‚ç¼–è€…é€šä¿¡åœ°å€æ˜¯âˆ¶ + 下次您å¯åЍ Vim 时,编辑器就会有了语法高亮的功能。 + 您å¯ä»¥æŠŠæ‚¨å–œæ¬¢çš„å„ç§è®¾ç½®æ·»åŠ åˆ°è¿™ä¸ª vimrc 文件中。 + è¦äº†è§£æ›´å¤šä¿¡æ¯è¯·è¾“å…¥ :help vimrc-intro - bware@mines.colorado.edu +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第七讲第三节:补全功能 - 本教程已由Bram Moolenaar专为vim进行修订。 + + ** 使用 CTRL-D å’Œ å¯ä»¥è¿›è¡Œå‘½ä»¤è¡Œè¡¥å…¨ ** + + 1. è¯·ç¡®ä¿ Vim 䏿˜¯åœ¨ä»¥å…¼å®¹æ¨¡å¼è¿è¡Œï¼š :set nocp + + 2. 查看一下当å‰ç›®å½•下已ç»å­˜åœ¨å“ªäº›æ–‡ä»¶ï¼Œè¾“入: :!ls 或者 :!dir + + 3. 现在输入一个目录的起始部分,例如输入: :e + + 4. æŽ¥ç€æŒ‰ CTRL-D 键,Vim 会显示以 e 开始的命令的列表。 + + 5. ç„¶åŽæŒ‰ 键,Vim 会补全命令为 :edit 。 + + 6. 现在添加一个空格,以åŠä¸€ä¸ªå·²æœ‰æ–‡ä»¶çš„æ–‡ä»¶å的起始部分,例如: :edit FIL + + 7. æŽ¥ç€æŒ‰ 键,Vim 会补全文件å(如果它是惟一匹é…çš„)。 + +æç¤ºï¼šè¡¥å…¨å¯¹äºŽè®¸å¤šå‘½ä»¤éƒ½æœ‰æ•ˆã€‚您åªéœ€å°è¯•按 CTRL-D å’Œ 。 + 它对于 :help 命令éžå¸¸æœ‰ç”¨ã€‚ + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 第七讲å°ç»“ + + + 1. 输入 :help 或者按 键或 é”®å¯ä»¥æ‰“开帮助窗å£ã€‚ + + 2. 输入 :help cmd å¯ä»¥æ‰¾åˆ°å…³äºŽ cmd 命令的帮助。 + + 3. 输入 CTRL-W CTRL-W å¯ä»¥ä½¿æ‚¨åœ¨çª—å£ä¹‹é—´è·³è½¬ã€‚ + + 4. 输入 :q ä»¥å…³é—­å¸®åŠ©çª—å£ + + 5. 您å¯ä»¥åˆ›å»ºä¸€ä¸ª vimrc å¯åŠ¨è„šæœ¬æ–‡ä»¶ç”¨æ¥ä¿å­˜æ‚¨å好的设置。 + + 6. 当输入 : 命令时,按 CTRL-D å¯ä»¥æŸ¥çœ‹å¯èƒ½çš„补全结果。 + 按 å¯ä»¥ä½¿ç”¨ä¸€ä¸ªè¡¥å…¨ã€‚ - 译制者附言∶ + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + vim 教程到此就结æŸäº†ã€‚æœ¬æ•™ç¨‹åªæ˜¯ä¸ºäº†ç®€æ˜Žåœ°ä»‹ç»ä¸€ä¸‹ Vim 编辑器,但已足以让您 + 很容易使用这个编辑器了。毋庸质疑,vim还有很多很多的命令,本教程所介 + ç»çš„è·ç¦»å®Œæ•´çš„差得很远。所以您è¦ç²¾é€šçš„è¯ï¼Œè¿˜æœ›ç»§ç»­åŠªåŠ›å“¦ã€‚ä¸‹ä¸€æ­¥æ‚¨å¯ä»¥é˜…读 + Vim 的用户手册,使用的命令是: :help user-manual + + 下é¢è¿™æœ¬ä¹¦å€¼å¾—推è用于更进一步的阅读和学习: + Vim - Vi Improved - 作者:Steve Oualline + 出版社:New Riders + 这是第一本完全讲解 Vim 的书ç±ã€‚它对于åˆå­¦è€…ç‰¹åˆ«æœ‰ç”¨ã€‚å…¶ä¸­åŒ…å«æœ‰å¤§é‡å®žä¾‹ + 和图示。 + 欲知详情,请访问 http://iccf-holland.org/click5.html + + 以下这本书比较è€äº†è€Œä¸”内容更多是关于 Vi è€Œéž Vim,但是也值得推è: + Learning the Vi Editor - 作者:Linda Lamb + 出版社:O'Reilly & Associates Inc. + 这是一本ä¸é”™çš„书,通过它您几乎能够了解到任何您想è¦ä½¿ç”¨ Vi åšçš„事情。 + 此书的第六个版本也包å«äº†ä¸€äº›å…³äºŽ Vim 的信æ¯ã€‚ + + 本教程是由æ¥è‡ª Calorado School of Mines çš„ Michael C. Pierce å’Œ + Robert K. Ware 所编写的,其中很多创æ„ç”±æ¥è‡ª Colorado State University çš„ + Charles Smith æä¾›ã€‚编者的电å­é‚®ç®±æ˜¯ï¼šbware@mines.colorado.edu + + 本教程已由 Bram Moolenaar 专为 Vim 进行修订。 + + 译制者附言: =========== ç®€ä½“ä¸­æ–‡æ•™ç¨‹ç¿»è¯‘ç‰ˆä¹‹è¯‘åˆ¶è€…ä¸ºæ¢æ˜Œæ³° ,还有 - å¦å¤–一个è”系地å€âˆ¶linuxrat@gnuchina.org。 + å¦å¤–一个è”系地å€ï¼šlinuxrat@gnuchina.org。 ç¹ä½“中文教程是从简体中文教程翻译版使用 Debian GNU/Linux ä¸­æ–‡é¡¹ç›®å° ç»„çš„äºŽå¹¿è¾‰å…ˆç”Ÿç¼–å†™çš„ä¸­æ–‡æ±‰å­—è½¬ç å™¨ autoconvert 转æ¢è€Œæˆçš„,并对转 æ¢çš„结果åšäº†ä¸€äº›ç»†èŠ‚çš„æ”¹åŠ¨ã€‚ - å˜æ›´è®°å½•∶ + å˜æ›´è®°å½•: ========= + 2012å¹´10月01æ—¥ 赵涛 + å°† vimtutor 中译版从 1.5 å‡çº§åˆ° 1.7。 + 2002å¹´08月30æ—¥ æ¢æ˜Œæ³° 感谢 RMS@SMTH 的指正,将多处错误修正。 diff --git a/src/INSTALLpc.txt b/src/INSTALLpc.txt index 66f102d126..7ba2801b0a 100644 --- a/src/INSTALLpc.txt +++ b/src/INSTALLpc.txt @@ -45,6 +45,10 @@ Visual Studio Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, and VS 2008) is straightforward. (These instructions should also work for VS 4 and VS 5.) +Using VS C++ 2008 Express is recommended, the binaries build with that run on +nearly all platforms. Binaries from later versions may not run on Windows 95 +or XP. + To build Vim from the command line with MSVC, use Make_mvc.mak. Visual Studio installed a batch file called vcvars32.bat, which you must run to set up paths for nmake and MSVC. @@ -172,6 +176,10 @@ This includes the IDE and the debugger. To set the environment execute the msvc2008.bat script. You can then build Vim with Make_mvc.mak. +For building 64 bit binaries you also need to install the SDK: +"Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1" +You don't need the examples and documentation. + Visual C++ 2010 Express Edition *msvc-2010-express* ------------------------------- @@ -296,10 +304,12 @@ Now you have created the Windows binary from your Linux box! Have fun... 6. Building with Python support =============================== -(written by Ron Aaron: ) +For building with MSVC 2008 the "Windows Installer" from www.python.org +works fine. -This has been tested with the mingw32 compiler, and the ActiveState -ActivePython: +(rest written by Ron Aaron: ) + +Building with the mingw32 compiler, and the ActiveState ActivePython: http://www.ActiveState.com/Products/ActivePython/ After installing the ActivePython, you will have to create a 'mingw32' From fe37037756d91c82aab39ffef0e36ddf8633f7a0 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:48:43 +0200 Subject: [PATCH 071/136] updated for version 7.3.681 Problem: List of distributed files picks up backup files. Solution: Make tutor patterns more specific. --- Filelist | 13 ++++++++++--- src/version.c | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Filelist b/Filelist index b63acd9c2a..b1563eb738 100644 --- a/Filelist +++ b/Filelist @@ -693,10 +693,17 @@ LANG_GEN = \ runtime/tutor/Makefile \ runtime/tutor/tutor.utf-8 \ runtime/tutor/tutor.?? \ - runtime/tutor/tutor.??.* \ - runtime/tutor/tutor.??_??.* \ + runtime/tutor/tutor.??.utf-8 \ + runtime/tutor/tutor.??.euc \ + runtime/tutor/tutor.??.sjis \ + runtime/tutor/tutor.??.iso9 \ + runtime/tutor/tutor.??.big5 \ + runtime/tutor/tutor.??.cp1250 \ + runtime/tutor/tutor.??.cp1251 \ + runtime/tutor/tutor.??.cp737 \ + runtime/tutor/tutor.??_??.utf-8 \ runtime/tutor/tutor.bar \ - runtime/tutor/tutor.bar.* \ + runtime/tutor/tutor.bar.utf-8 \ runtime/spell/README.txt \ runtime/spell/??/*.diff \ runtime/spell/??/main.aap \ diff --git a/src/version.c b/src/version.c index fa453088c3..c991525c4b 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 681, /**/ 680, /**/ From 903fa59d8641da3a843405fef5bef2381ce72641 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 3 Oct 2012 21:48:44 +0200 Subject: [PATCH 072/136] Added tag v7-3-681 for changeset a2fe24ec6a0d --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 133b31690e..988e426b5f 100644 --- a/.hgtags +++ b/.hgtags @@ -2017,3 +2017,4 @@ ca1c025079b11c98363e11576d903af756a593fc v7-3-673 de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680 +a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681 From 2c8e96b19f633a478f19eb8a2f51f5cefabd52e3 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 4 Oct 2012 22:38:37 +0200 Subject: [PATCH 073/136] updated for version 7.3.682 Problem: Compiler complains about incompatible types. Solution: Remove type casts. (hint by Danek Duvall) --- src/edit.c | 4 ++-- src/version.c | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/edit.c b/src/edit.c index 5fde388f73..9017fd0f31 100644 --- a/src/edit.c +++ b/src/edit.c @@ -4194,8 +4194,8 @@ ins_compl_get_exp(ini) ins_buf->b_fname == NULL ? buf_spname(ins_buf) : ins_buf->b_sfname == NULL - ? (char *)ins_buf->b_fname - : (char *)ins_buf->b_sfname); + ? ins_buf->b_fname + : ins_buf->b_sfname); (void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R)); } else if (*e_cpt == NUL) diff --git a/src/version.c b/src/version.c index c991525c4b..143657e343 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 682, /**/ 681, /**/ From bf280ae759f9487239284f180a652c40cfdca882 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 4 Oct 2012 22:38:37 +0200 Subject: [PATCH 074/136] Added tag v7-3-682 for changeset 8eb5b61161b4 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 988e426b5f..4eb681b384 100644 --- a/.hgtags +++ b/.hgtags @@ -2018,3 +2018,4 @@ de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678 dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680 a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681 +8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682 From e640d952a635ce28ad8ee9b68f6af7a2a1c8a2d9 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 5 Oct 2012 21:30:07 +0200 Subject: [PATCH 075/136] updated for version 7.3.683 Problem: ":python" may crash when vimbindeval() returns None. Solution: Check for v_string to be NULL. (Yukihiro Nakadaira) --- src/if_py_both.h | 9 ++++++--- src/version.c | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/if_py_both.h b/src/if_py_both.h index 0a1ef1b9e6..2398e812c2 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -351,7 +351,8 @@ VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict) if (our_tv->v_type == VAR_STRING) { - result = Py_BuildValue("s", our_tv->vval.v_string); + result = Py_BuildValue("s", our_tv->vval.v_string == NULL + ? "" : (char *)our_tv->vval.v_string); } else if (our_tv->v_type == VAR_NUMBER) { @@ -2751,7 +2752,8 @@ ConvertToPyObject(typval_T *tv) switch (tv->v_type) { case VAR_STRING: - return PyBytes_FromString((char *) tv->vval.v_string); + return PyBytes_FromString(tv->vval.v_string == NULL + ? "" : (char *)tv->vval.v_string); case VAR_NUMBER: return PyLong_FromLong((long) tv->vval.v_number); #ifdef FEAT_FLOAT @@ -2763,7 +2765,8 @@ ConvertToPyObject(typval_T *tv) case VAR_DICT: return DictionaryNew(tv->vval.v_dict); case VAR_FUNC: - return FunctionNew(tv->vval.v_string); + return FunctionNew(tv->vval.v_string == NULL + ? (char_u *)"" : tv->vval.v_string); case VAR_UNKNOWN: Py_INCREF(Py_None); return Py_None; diff --git a/src/version.c b/src/version.c index 143657e343..62e0f4b1a8 100644 --- a/src/version.c +++ b/src/version.c @@ -719,6 +719,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 683, /**/ 682, /**/ From f772344cd9d3ec19cb1494a353ae36bcc04e42da Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 5 Oct 2012 21:30:08 +0200 Subject: [PATCH 076/136] Added tag v7-3-683 for changeset 0f5ee2629635 --- .hgtags | 1 + 1 file changed, 1 insertion(+) diff --git a/.hgtags b/.hgtags index 4eb681b384..b4023980df 100644 --- a/.hgtags +++ b/.hgtags @@ -2019,3 +2019,4 @@ dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679 52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680 a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681 8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682 +0f5ee262963528ddccfa1f54b83696f939d21b53 v7-3-683 From 36d03895060cac8f537d0f67faf4e7dbee0ae063 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Fri, 5 Oct 2012 22:26:30 +0200 Subject: [PATCH 077/136] Updated runtime files. --- runtime/doc/todo.txt | 12 +- runtime/filetype.vim | 7 +- runtime/syntax/aptconf.vim | 493 ++++++++++++++++++++++++++++++++++ runtime/syntax/asn.vim | 7 +- runtime/syntax/css.vim | 8 +- runtime/syntax/dts.vim | 26 ++ runtime/syntax/gdb.vim | 13 +- runtime/syntax/html.vim | 25 +- runtime/syntax/java.vim | 15 +- runtime/syntax/javacc.vim | 9 +- runtime/syntax/javascript.vim | 7 +- runtime/syntax/make.vim | 14 +- runtime/tutor/tutor.ja.euc | 2 +- runtime/tutor/tutor.ja.sjis | 2 +- runtime/tutor/tutor.ja.utf-8 | 2 +- 15 files changed, 610 insertions(+), 32 deletions(-) create mode 100644 runtime/syntax/aptconf.vim create mode 100644 runtime/syntax/dts.vim diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 275b7ac45a..b0fa84147b 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.3. Last change: 2012 Oct 03 +*todo.txt* For Vim version 7.3. Last change: 2012 Oct 04 VIM REFERENCE MANUAL by Bram Moolenaar @@ -34,6 +34,11 @@ not be repeated below, unless there is extra information. *known-bugs* -------------------- Known bugs and current work ----------------------- +Patch with Test for patch 7.3.673 (Christian Brabandt, 2012 Oct 3) + +Patch for C-\ e when editing expression. (Christian Brabandt, 2012 Oct 3) +Correction by ZyX. + Go through more coverity reports. Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10) @@ -81,6 +86,8 @@ Aug 16) the order they were made. Also ":gredo". Both with a count. Useful when tests fail after making changes and you forgot in which files. +Patch to make updating tabline faster. (Arseny Kapoulkine, 2012 Oct 3) + Crash with vimdiff. (Don Cruickshank, 2012 Sep 23) Win32: use 'guifontwide' for IME composition. (Taro Muraoka, 2012 Sep 30) @@ -118,6 +125,9 @@ MS-Windows: Crash opening very long file name starting with "\\". Win32: patch for current directory, "loading iof conv". (Ken Takata, 2012 Sep 15) +It's probably a good idea to make a negative value for 'sts' use the value of +'sw'. Patch by So8res, Oct 3 2012 + Syntax update problem in one buffer opened in two windows, bottom window is not correctly updated. (Paul Harris, 2012 Feb 27) diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 5010d68773..8162acec81 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar -" Last Change: 2012 Oct 03 +" Last Change: 2012 Oct 05 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -128,6 +128,11 @@ au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf set " Arc Macro Language au BufNewFile,BufRead *.aml setf aml +" APT config file +au BufNewFile,BufRead apt.conf setf aptconf +au BufNewFile,BufRead */.aptitude/config setf aptconf +au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf + " Arch Inventory file au BufNewFile,BufRead .arch-inventory,=tagging-method setf arch diff --git a/runtime/syntax/aptconf.vim b/runtime/syntax/aptconf.vim new file mode 100644 index 0000000000..40fe92b3ef --- /dev/null +++ b/runtime/syntax/aptconf.vim @@ -0,0 +1,493 @@ +" Vim syntax file +" Language: APT config file +" Maintainer: Yann Amar +" Last Change: 2012 Oct 05 + +" For version 5.x: Clear all syntax items +" For version 6.x and 7.x: Quit when a syntax file was already loaded +if !exists("main_syntax") + if version < 600 + syntax clear + elseif exists("b:current_syntax") + finish + endif + let main_syntax = 'aptconf' +endif + +let s:cpo_save = &cpo +set cpo&vim + +" Errors: +" Catch all that is not overridden by next rules/items: +syn match aptconfError display '[^[:blank:]]' +syn match aptconfError display '^[^[:blank:]][^:{]*' + +" Options: +" Define a general regular expression for the options that are not defined +" later as keywords. Following apt.conf(5), we know that options are case +" insensitive, and can contain alphanumeric characters and '/-:._+'; we +" assume that there can not be consecutive colons (::) which is used as +" syntax operator; we also assume that an option name can not start or end +" by a colon. +syn case ignore +syn match aptconfRegexpOpt '[-[:alnum:]/.+_]\+\(:[-[:alnum:]/.+_]\+\)*' contained display + +" Keywords: +setlocal iskeyword+=/,-,.,_,+ +"setlocal iskeyword+=: is problematic, because of the '::' separator + +" Incomplete keywords will be treated differently than completely bad strings: +syn keyword aptconfGroupIncomplete + \ a[cquire] a[ptitude] d[ebtags] d[ebug] d[ir] d[pkg] d[select] + \ o[rderlist] p[ackagemanager] p[kgcachegen] q[uiet] r[pm] + \ u[nattended-upgrade] + +" Only the following keywords can be used at toplevel (to begin an option): +syn keyword aptconfGroup + \ acquire apt aptitude debtags debug dir dpkg dselect + \ orderlist packagemanager pkgcachegen quiet rpm + \ unattended-upgrade + +" Possible options for each group: +" Acquire: {{{ +syn keyword aptconfAcquire contained + \ cdrom Check-Valid-Until CompressionTypes ForceHash ftp gpgv + \ GzipIndexes http https Languages Max-ValidTime Min-ValidTime PDiffs + \ Queue-Mode Retries Source-Symlinks + +syn keyword aptconfAcquireCDROM contained + \ AutoDetect CdromOnly Mount UMount + +syn keyword aptconfAcquireCompressionTypes contained + \ bz2 lzma gz Order + +syn keyword aptconfAcquireFTP contained + \ Passive Proxy ProxyLogin Timeout + +syn keyword aptconfAcquireHTTP contained + \ AllowRedirect Dl-Limit Max-Age No-Cache No-Store Pipeline-Depth + \ Proxy Timeout User-Agent + +syn keyword aptconfAcquireHTTPS contained + \ CaInfo CaPath CrlFile IssuerCert SslCert SslForceVersion SslKey + \ Verify-Host Verify-Peer + +syn keyword aptconfAcquireMaxValidTime contained + \ Debian Debian-Security + +syn keyword aptconfAcquirePDiffs contained + \ FileLimit SizeLimit + +syn cluster aptconfAcquire_ contains=aptconfAcquire, + \ aptconfAcquireCDROM,aptconfAcquireCompressionTypes,aptconfAcquireFTP, + \ aptconfAcquireHTTP,aptconfAcquireHTTPS,aptconfAcquireMaxValidTime, + \ aptconfAcquirePDiffs +" }}} +" Apt: {{{ +syn keyword aptconfApt contained + \ Architecture Architectures Archive Authentication AutoRemove + \ Build-Essential Cache Cache-Grow Cache-Limit Cache-Start CDROM + \ Changelogs Clean-Installed Compressor Default-Release + \ Force-LoopBreak Get Ignore-Hold Immediate-Configure + \ Install-Recommends Install-Suggests Keep-Fds List-Cleanup + \ NeverAutoRemove Never-MarkAuto-Sections Periodic Status-Fd Update + +syn keyword aptconfAptAuthentication contained + \ TrustCDROM + +syn keyword aptconfAptAutoRemove contained + \ RecommendsImportant SuggestsImportant + +syn keyword aptconfAptCache contained + \ AllNames AllVersions Generate GivenOnly Important Installed NamesOnly + \ RecurseDepends ShowFull + +syn keyword aptconfAptCDROM contained + \ Fast NoAct NoMount Rename + +syn keyword aptconfAptChangelogs contained + \ Server + +syn keyword aptconfAptCompressor contained + \ bzip2 gzip lzma xz + +syn keyword aptconfAptCompressorAll contained + \ Binary CompressArg Cost Extension Name UncompressArg + +syn keyword aptconfAptGet contained + \ AllowUnauthenticated Arch-Only Assume-No Assume-Yes AutomaticRemove + \ Build-Dep-Automatic Compile Diff-Only Download Download-Only Dsc-Only + \ Fix-Broken Fix-Missing Force-Yes HideAutoRemove Host-Architecture + \ List-Cleanup Only-Source Print-URIs Purge ReInstall Remove + \ Show-Upgraded Show-User-Simulation-Note Show-Versions Simulate + \ Tar-Only Trivial-Only Upgrade + +syn keyword aptconfAptPeriodic contained + \ AutocleanInterval BackupArchiveInterval BackupLevel + \ Download-Upgradeable-Packages MaxAge MaxSize MinAge + \ Unattended-Upgrade Update-Package-Lists Verbose + +syn keyword aptconfAptUpdate contained + \ Pre-Invoke Post-Invoke Post-Invoke-Success + +syn cluster aptconfApt_ contains=aptconfApt, + \ aptconfAptAuthentication,aptconfAptAutoRemove,aptconfAptCache, + \ aptconfAptCDROM,aptconfAptChangelogs,aptconfAptCompressor, + \ aptconfAptCompressorAll,aptconfAptGet,aptconfAptPeriodic, + \ aptconfAptUpdate +" }}} +" Aptitude: {{{ +syn keyword aptconfAptitude contained + \ Allow-Null-Upgrade Always-Use-Safe-Resolver Autoclean-After-Update + \ Auto-Install Auto-Fix-Broken Cmdline Debtags-Binary + \ Debtags-Update-Options Delete-Unused Delete-Unused-Pattern + \ Display-Planned-Action Forget-New-On-Install Forget-New-On-Update + \ Get-Root-Command Ignore-Old-Tmp Ignore-Recommends-Important + \ Keep-Recommends Keep-Suggests Keep-Unused-Pattern LockFile Log + \ Logging Parse-Description-Bullets Pkg-Display-Limit ProblemResolver + \ Purge-Unused Recommends-Important Safe-Resolver Screenshot Sections + \ Simulate Spin-Interval Suggests-Important Suppress-Read-Only-Warning + \ Theme Track-Dselect-State UI Warn-Not-Root + +syn keyword aptconfAptitudeCmdline contained + \ Always-Prompt Assume-Yes Disable-Columns Download-Only Fix-Broken + \ Ignore-Trust-Violations Package-Display-Format Package-Display-Width + \ Progress Request-Strictness Resolver-Debug Resolver-Dump + \ Resolver-Show-Steps Safe-Upgrade Show-Deps Show-Size-Changes + \ Show-Versions Show-Why Simulate Verbose Version-Display-Format + \ Versions-Group-By Versions-Show-Package-Names Visual-Preview + \ Why-Display-Mode + +syn keyword aptconfAptitudeCmdlineProgress contained + \ Percent-On-Right Retain-Completed + +syn keyword aptconfAptitudeCmdlineSafeUpgrade contained + \ No-New-Installs + +syn keyword aptconfAptitudeLogging contained + \ File Levels + +syn keyword aptconfAptitudeProblemResolver contained + \ Allow-Break-Holds BreakHoldScore Break-Hold-Level BrokenScore + \ DefaultResolutionScore Discard-Null-Solution + \ EssentialRemoveScore ExtraScore FullReplacementScore FutureHorizon + \ Hints ImportantScore Infinity InstallScore Keep-All-Level KeepScore + \ NonDefaultScore Non-Default-Level OptionalScore PreserveAutoScore + \ PreserveManualScore RemoveScore Remove-Essential-Level Remove-Level + \ RequiredScore ResolutionScore Safe-Level SolutionCost StandardScore + \ StepLimit StepScore Trace-Directory Trace-File + \ UndoFullReplacementScore UnfixedSoftScore UpgradeScore + +syn keyword aptconfAptitudeSafeResolver contained + \ No-New-Installs No-New-Upgrades Show-Resolver-Actions + +syn keyword aptconfAptitudeScreenshot contained + \ Cache-Max IncrementalLoadLimit + +syn keyword aptconfAptitudeSections contained + \ Descriptions Top-Sections + +syn keyword aptconfAptitudeUI contained + \ Advance-On-Action Auto-Show-Reasons Default-Grouping + \ Default-Package-View Default-Preview-Grouping Default-Sorting + \ Description-Visible-By-Default Exit-On-Last-Close Fill-Text + \ Flat-View-As-First-View HelpBar Incremental-Search InfoAreaTabs + \ KeyBindings MenuBar-Autohide Minibuf-Download-Bar Minibuf-Prompts + \ New-package-Commands Package-Display-Format Package-Header-Format + \ Package-Status-Format Pause-After-Download Preview-Limit + \ Prompt-On-Exit Styles ViewTabs + +syn keyword aptconfAptitudeUIStyles contained + \ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry + \ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar + \ HighlightedMenuEntry MediaChange MenuBar MenuBorder MenuEntry + \ MineBomb MineBorder MineFlag MineNumber1 MineNumber2 MineNumber3 + \ MineNumber4 MineNumber5 MineNumber6 MineNumber7 MineNumber8 + \ MultiplexTab MultiplexTabHighlighted PkgBroken PkgBrokenHighlighted + \ PkgIsInstalled PkgIsInstalledHighlighted PkgNotInstalled + \ PkgNotInstalledHighlighted PkgToDowngrade PkgToDowngradeHighlighted + \ PkgToHold PkgToHoldHighlighted PkgToInstall PkgToInstallHighlighted + \ PkgToRemove PkgToRemoveHighlighted PkgToUpgrade + \ PkgToUpgradeHighlighted Progress SolutionActionApproved + \ SolutionActionRejected Status TreeBackground TrustWarning + +syn keyword aptconfAptitudeUIStylesElements contained + \ bg clear fg flip set + +syn cluster aptconfAptitude_ contains=aptconfAptitude, + \ aptconfAptitudeCmdline,aptconfAptitudeCmdlineProgress, + \ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging, + \ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver, + \ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI, + \ aptconfAptitudeUIStyles,aptconfAptitudeUIStylesElements +" }}} +" DebTags: {{{ +syn keyword aptconfDebTags contained + \ Vocabulary + +syn cluster aptconfDebTags_ contains=aptconfDebTags +" }}} +" Debug: {{{ +syn keyword aptconfDebug contained + \ Acquire aptcdrom BuildDeps Hashes IdentCdrom Nolocking + \ pkgAcquire pkgAutoRemove pkgCacheGen pkgDepCache pkgDPkgPM + \ pkgDPkgProgressReporting pkgInitialize pkgOrderList + \ pkgPackageManager pkgPolicy pkgProblemResolver sourceList + +syn keyword aptconfDebugAcquire contained + \ cdrom Ftp gpgv Http Https netrc + +syn keyword aptconfDebugPkgAcquire contained + \ Auth Diffs RRed Worker + +syn keyword aptconfDebugPkgDepCache contained + \ AutoInstall Marker + +syn keyword aptconfDebugPkgProblemResolver contained + \ ShowScores + +syn cluster aptconfDebug_ contains=aptconfDebug, + \ aptconfDebugAcquire,aptconfDebugPkgAcquire,aptconfDebugPkgDepCache, + \ aptconfDebugPkgProblemResolver +" }}} +" Dir: {{{ +syn keyword aptconfDir contained + \ Aptitude Bin Cache Etc Ignore-Files-Silently Log Media Parts RootDir + \ State + +syn keyword aptconfDirAptitude contained + \ state + +syn keyword aptconfDirBin contained + \ apt-get apt-cache dpkg dpkg-buildpackage dpkg-source gpg gzip Methods + \ solvers + +syn keyword aptconfDirCache contained + \ Archives Backup pkgcache srcpkgcache + +syn keyword aptconfDirEtc contained + \ Main Netrc Parts Preferences PreferencesParts SourceList SourceParts + \ VendorList VendorParts Trusted TrustedParts + +syn keyword aptconfDirLog contained + \ History Terminal + +syn keyword aptconfDirMedia contained + \ MountPath + +syn keyword aptconfDirState contained + \ cdroms extended_states Lists mirrors status + +syn cluster aptconfDir_ contains=aptconfDir, + \ aptconfDirAptitude,aptconfDirBin,aptconfDirCache,aptconfDirEtc, + \ aptconfDirLog,aptconfDirMedia,aptconfDirState +" }}} +" DPkg: {{{ +syn keyword aptconfDPkg contained + \ Build-Options Chroot-Directory ConfigurePending FlushSTDIN MaxArgs + \ MaxBytes NoTriggers options Pre-Install-Pkgs Pre-Invoke Post-Invoke + \ Run-Directory StopOnError Tools TriggersPending + +syn keyword aptconfDPkgTools contained + \ Options Version + +syn cluster aptconfDPkg_ contains=aptconfDPkg, + \ aptconfDPkgOrderList,aptconfDPkgOrderListScore,aptconfDPkgTools +" }}} +" DSelect: {{{ +syn keyword aptconfDSelect contained + \ CheckDir Clean Options PromptAfterUpdate UpdateOptions + +syn cluster aptconfDSelect_ contains=aptconfDSelect +" }}} +" OrderList: {{{ +syn keyword aptconfOrderList contained + \ Score + +syn keyword aptconfOrderListScore contained + \ Delete Essential Immediate PreDepends + +syn cluster aptconfOrderList_ contains=aptconfOrderList, + \ aptconfOrderListScore +" }}} +" PackageManager: {{{ +syn keyword aptconfPackageManager contained + \ Configure + +syn cluster aptconfPackageManager_ contains=aptconfPackageManager +" }}} +" PkgCacheGen: {{{ +syn keyword aptconfPkgCacheGen contained + \ Essential + +syn cluster aptconfPkgCacheGen_ contains=aptconfPkgCacheGen +" }}} +" Quiet: {{{ +syn keyword aptconfQuiet contained + \ NoUpdate + +syn cluster aptconfQuiet_ contains=aptconfQuiet +" }}} +" Rpm: {{{ +syn keyword aptconfRpm contained + \ Post-Invoke Pre-Invoke + +syn cluster aptconfRpm_ contains=aptconfRpm +" }}} +" Unattened Upgrade: {{{ +syn keyword aptconfUnattendedUpgrade contained + \ AutoFixInterruptedDpkg Automatic-Reboot InstallOnShutdown Mail + \ MailOnlyOnError MinimalSteps Origins-Pattern Package-Blacklist + \ Remove-Unused-Dependencies + +syn cluster aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade +" }}} + +syn case match + +" Now put all the keywords (and 'valid' options) in a single cluster: +syn cluster aptconfOptions contains=aptconfRegexpOpt, + \ @aptconfAcquire_,@aptconfApt_,@aptconfAptitude_,@aptconfDebTags_, + \ @aptconfDebug_,@aptconfDir_,@aptconfDPkg_,@aptconfDSelect_, + \ @aptconfOrderList_,@aptconfPackageManager_,@aptconfPkgCacheGen_, + \ @aptconfQuiet_,@aptconfRpm_,@aptconfUnattendedUpgrade_ + +" Syntax: +syn match aptconfSemiColon ';' +syn match aptconfDoubleColon '::' +syn match aptconfCurlyBraces '[{}]' +syn region aptconfValue start='"' end='"' oneline display +syn region aptconfInclude matchgroup=aptconfOperator start='{' end='}' contains=ALLBUT,aptconfGroup,aptconfGroupIncomplete,@aptconfCommentSpecial +syn region aptconfInclude matchgroup=aptconfOperator start='::' end='{'me=s-1 contains=@aptconfOptions,aptconfError display +syn region aptconfInclude matchgroup=aptconfOperator start='::' end='::\|\s'me=s-1 oneline contains=@aptconfOptions,aptconfError display + +" Basic Syntax Errors: XXX avoid to generate false positives !!! +" +" * Invalid comment format (seems to not cause errors, but...): +syn match aptconfAsError display '^#.*' +" +" * When a semicolon is missing after a double-quoted string: +" There are some cases (for example in the Dir group of options, but not only) +" where this syntax is valid. So we don't treat it as a strict error. +syn match aptconfAsError display '"[^"]*"[^;]'me=e-1 +syn match aptconfAsError display '"[^"]*"$' +" +" * When double quotes are missing around a value (before a semicolon): +" This omission has no effect if the value is a single string (without blank +" characters). But apt.conf(5) says that quotes are required, and this item +" avoids to match unquoted keywords. +syn match aptconfAsError display '\s[^"[:blank:]]*[^}"];'me=e-1 +" +" * When only one double quote is missing around a value (before a semicolon): +" No comment for that: it must be highly visible. +syn match aptconfError display '\(\s\|;\)"[^"[:blank:]]\+;'me=e-1 +syn match aptconfError display '\(\s\|;\)[^"[:blank:]]\+";'me=e-1 +" +" * When space is missing between option and (quoted) value: +" TODO (partially implemented) +syn match aptconfError display '::[^[:blank:]]*"' + +" Special Actions: +syn match aptconfAction '^#\(clear\|include\)\>' +syn region aptconfAction matchgroup=aptconfAction start='^#clear\>' end=';'me=s-1 oneline contains=aptconfGroup,aptconfDoubleColon,@aptconfOptions +syn region aptconfAction matchgroup=aptconfAction start='^#include\>' end=';'me=s-1 oneline contains=aptconfRegexpOpt + +" Comments: +syn keyword aptconfTodo TODO FIXME NOTE XXX contained +syn cluster aptconfCommentSpecial contains=@Spell,aptconfTodo +syn match aptconfComment '//.*' contains=@aptconfCommentSpecial +syn region aptconfComment start='/\*' end='\*/' contains=@aptconfCommentSpecial + +" Highlight Definitions: +hi def link aptconfTodo Todo +hi def link aptconfError Error +hi def link aptconfComment Comment +hi def link aptconfOperator Operator + +hi def link aptconfAction PreProc +hi def link aptconfOption Type +hi def link aptconfValue String +hi def link aptconfRegexpOpt Normal +hi def link aptconfAsError Special + +hi def link aptconfSemiColon aptconfOperator +hi def link aptconfDoubleColon aptconfOperator +hi def link aptconfCurlyBraces aptconfOperator + +hi def link aptconfGroupIncomplete Special +hi def link aptconfGroup aptconfOption + +hi def link aptconfAcquire aptconfOption +hi def link aptconfAcquireCDROM aptconfOption +hi def link aptconfAcquireCompressionTypes aptconfOption +hi def link aptconfAcquireFTP aptconfOption +hi def link aptconfAcquireHTTP aptconfOption +hi def link aptconfAcquireHTTPS aptconfOption +hi def link aptconfAcquireMaxValidTime aptconfOption +hi def link aptconfAcquirePDiffs aptconfOption + +hi def link aptconfApt aptconfOption +hi def link aptconfAptAuthentication aptconfOption +hi def link aptconfAptAutoRemove aptconfOption +hi def link aptconfAptCache aptconfOption +hi def link aptconfAptCDROM aptconfOption +hi def link aptconfAptChangelogs aptconfOption +hi def link aptconfAptCompressor aptconfOption +hi def link aptconfAptCompressorAll aptconfOption +hi def link aptconfAptGet aptconfOption +hi def link aptconfAptPeriodic aptconfOption +hi def link aptconfAptUpdate aptconfOption + +hi def link aptconfAptitude aptconfOption +hi def link aptconfAptitudeCmdline aptconfOption +hi def link aptconfAptitudeCmdlineProgress aptconfOption +hi def link aptconfAptitudeCmdlineSafeUpgrade aptconfOption +hi def link aptconfAptitudeLogging aptconfOption +hi def link aptconfAptitudeProblemResolver aptconfOption +hi def link aptconfAptitudeSafeResolver aptconfOption +hi def link aptconfAptitudeScreenshot aptconfOption +hi def link aptconfAptitudeSections aptconfOption +hi def link aptconfAptitudeUI aptconfOption +hi def link aptconfAptitudeUIStyles aptconfOption +hi def link aptconfAptitudeUIStylesElements aptconfOption + +hi def link aptconfDebTags aptconfOption + +hi def link aptconfDebug aptconfOption +hi def link aptconfDebugAcquire aptconfOption +hi def link aptconfDebugPkgAcquire aptconfOption +hi def link aptconfDebugPkgDepCache aptconfOption +hi def link aptconfDebugPkgProblemResolver aptconfOption + +hi def link aptconfDir aptconfOption +hi def link aptconfDirAptitude aptconfOption +hi def link aptconfDirBin aptconfOption +hi def link aptconfDirCache aptconfOption +hi def link aptconfDirEtc aptconfOption +hi def link aptconfDirLog aptconfOption +hi def link aptconfDirMedia aptconfOption +hi def link aptconfDirState aptconfOption + +hi def link aptconfDPkg aptconfOption +hi def link aptconfDPkgTools aptconfOption + +hi def link aptconfDSelect aptconfOption + +hi def link aptconfOrderList aptconfOption +hi def link aptconfOrderListScore aptconfOption + +hi def link aptconfPackageManager aptconfOption + +hi def link aptconfPkgCacheGen aptconfOption + +hi def link aptconfQuiet aptconfOption + +hi def link aptconfRpm aptconfOption + +hi def link aptconfUnattendedUpgrade aptconfOption + +let b:current_syntax = "aptconf" + +let &cpo = s:cpo_save +unlet s:cpo_save + diff --git a/runtime/syntax/asn.vim b/runtime/syntax/asn.vim index 9fc3d24682..28c8efba95 100644 --- a/runtime/syntax/asn.vim +++ b/runtime/syntax/asn.vim @@ -2,7 +2,7 @@ " Language: ASN.1 " Maintainer: Claudio Fleiner " URL: http://www.fleiner.com/vim/syntax/asn.vim -" Last Change: 2001 Apr 26 +" Last Change: 2012 Oct 05 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -12,6 +12,9 @@ elseif exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + " keyword definitions syn keyword asnExternal DEFINITIONS BEGIN END IMPORTS EXPORTS FROM syn match asnExternal "\" @@ -76,6 +79,8 @@ if version >= 508 || !exists("did_asn_syn_inits") delcommand HiLink endif +let &cpo = s:cpo_save +unlet s:cpo_save let b:current_syntax = "asn" " vim: ts=8 diff --git a/runtime/syntax/css.vim b/runtime/syntax/css.vim index 324dce3cc8..df7f2a1aae 100644 --- a/runtime/syntax/css.vim +++ b/runtime/syntax/css.vim @@ -5,7 +5,7 @@ " Yeti (Add full CSS2, HTML4 support) " Nikolai Weibull (Add CSS2 support) " Maintainer: Jules Wang -" Last Change: 2012 Aug 21 +" Last Change: 2012 Oct 05 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -18,6 +18,9 @@ endif let main_syntax = 'css' endif +let s:cpo_save = &cpo +set cpo&vim + syn case ignore " All HTML4 tags @@ -449,6 +452,7 @@ if main_syntax == 'css' unlet main_syntax endif - +let &cpo = s:cpo_save +unlet s:cpo_save " vim: ts=8 diff --git a/runtime/syntax/dts.vim b/runtime/syntax/dts.vim new file mode 100644 index 0000000000..84e37aea95 --- /dev/null +++ b/runtime/syntax/dts.vim @@ -0,0 +1,26 @@ +" Vim syntax file +" Language: dts/dtsi (device tree files) +" Maintainer: Daniel Mack +" Last Change: 2012 Oct 04 + +if exists("b:current_syntax") + finish +endif + +syntax region dtsComment start="/\*" end="\*/" +syntax match dtsReference "&[[:alpha:][:digit:]_]\+" +syntax region dtsBinaryProperty start="\[" end="\]" +syntax match dtsStringProperty "\".*\"" +syntax match dtsKeyword "/.*/" +syntax match dtsLabel "^[[:space:]]*[[:alpha:][:digit:]_]\+:" +syntax region dtsCellProperty start="<" end=">" contains=dtsReference,dtsBinaryProperty,dtsStringProperty,dtsComment +syntax region dtsCommentInner start="/\*" end="\*/" + +hi def link dtsCellProperty Number +hi def link dtsBinaryProperty Number +hi def link dtsStringProperty String +hi def link dtsKeyword Include +hi def link dtsLabel Label +hi def link dtsReference Macro +hi def link dtsComment Comment +hi def link dtsCommentInner Comment diff --git a/runtime/syntax/gdb.vim b/runtime/syntax/gdb.vim index aada70e547..64e89cce7f 100644 --- a/runtime/syntax/gdb.vim +++ b/runtime/syntax/gdb.vim @@ -2,7 +2,7 @@ " Language: GDB command files " Maintainer: Claudio Fleiner " URL: http://www.fleiner.com/vim/syntax/gdb.vim -" Last Change: 2009 May 25 +" Last Change: 2012 Oct 05 " For version 5.x: Clear all syntax items " For version 6.x: Quit when a syntax file was already loaded @@ -12,6 +12,9 @@ elseif exists("b:current_syntax") finish endif +let s:cpo_save = &cpo +set cpo&vim + syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache syn keyword gdbInfo contained display files float frame functions handle line syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals @@ -32,7 +35,7 @@ syn match gdbFuncDef "\.*" syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty -" some commonly used abreviations +" some commonly used abbreviations syn keyword gdbStatement c disp undisp disas p syn region gdbDocument matchgroup=gdbFuncDef start="\.*$" matchgroup=gdbFuncDef end="^end\s*$" @@ -65,12 +68,12 @@ syn match gdbSet "\" syn match gdbSet "\" syn match gdbSet "\" -syn match gdbComment "^\s*#.*" +syn match gdbComment "^\s*#.*" contains=@Spell syn match gdbVariable "\$\K\k*" " Strings and constants -syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+ +syn region gdbString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=@Spell syn match gdbCharacter "'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError syn match gdbCharacter "'\\''" contains=gdbSpecialChar syn match gdbCharacter "'[^\\]'" @@ -108,4 +111,6 @@ endif let b:current_syntax = "gdb" +let &cpo = s:cpo_save +unlet s:cpo_save " vim: ts=8 diff --git a/runtime/syntax/html.vim b/runtime/syntax/html.vim index 137c13c5b0..d59126dede 100644 --- a/runtime/syntax/html.vim +++ b/runtime/syntax/html.vim @@ -2,7 +2,7 @@ " Language: HTML " Maintainer: Claudio Fleiner " URL: http://www.fleiner.com/vim/syntax/html.vim -" Last Change: 2006 Jun 19 +" Last Change: 2012 Oct 05 " Please check :help html.vim for some comments and a description of the options @@ -17,6 +17,9 @@ if !exists("main_syntax") let main_syntax = 'html' endif +let s:cpo_save = &cpo +set cpo&vim + " don't use standard HiLink, it will not work with included syntax files if version < 508 command! -nargs=+ HtmlHiLink hi link @@ -37,7 +40,7 @@ syn region htmlString contained start=+"+ end=+"+ contains=htmlSpecialChar,ja syn region htmlString contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc syn match htmlValue contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1 contains=javaScriptExpression,@htmlPreproc syn region htmlEndTag start=++ contains=htmlTagN,htmlTagError -syn region htmlTag start=+<[^/]+ end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster +syn region htmlTag start=+<[^/]+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster syn match htmlTagN contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster syn match htmlTagN contained +]<"ms=s+1 @@ -98,11 +101,11 @@ syn match htmlSpecialChar "&#\=[0-9A-Za-z]\{1,8};" " Comments (the real ones or the old netscape ones) if exists("html_wrong_comments") - syn region htmlComment start=+