Submitted By: Matt Burgess (matthew at linuxfromscratch dot org) Date: 2006-10-29 Initial Package Version: 7.0 Origin: Upstream Upstream Status: Applied Description: Contains patches 001-152 from upstream excluding patches 005, 027, 028, 032, 045, 057, 065, 074, 108, 130, 132, and 138 as they are for "extras" (e.g. Mac, Windows) only. diff -Naur vim70.orig/configure vim70/configure --- vim70.orig/configure 2004-07-05 09:02:24.000000000 +0000 +++ vim70/configure 2006-10-29 11:54:25.000000000 +0000 @@ -3,4 +3,4 @@ # This is just a stub for the Unix configure script, to provide support for # doing "./configure" in the top Vim directory. -cd src && ./configure "$@" +cd src && exec ./configure "$@" diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim --- vim70.orig/runtime/autoload/ccomplete.vim 2006-05-03 14:35:56.000000000 +0000 +++ vim70/runtime/autoload/ccomplete.vim 2006-10-29 11:54:25.000000000 +0000 @@ -1,7 +1,7 @@ " Vim completion script " Language: C " Maintainer: Bram Moolenaar -" Last Change: 2006 May 03 +" Last Change: 2006 May 08 " This function is used for the 'omnifunc' option. @@ -458,7 +458,7 @@ " member. function! s:StructMembers(typename, items, all) " Todo: What about local structures? - let fnames = join(map(tagfiles(), 'escape(v:val, " \\")')) + let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")')) if fnames == '' return [] endif diff -Naur vim70.orig/runtime/autoload/gzip.vim vim70/runtime/autoload/gzip.vim --- vim70.orig/runtime/autoload/gzip.vim 2006-03-31 15:12:15.000000000 +0000 +++ vim70/runtime/autoload/gzip.vim 2006-10-29 11:54:26.000000000 +0000 @@ -1,6 +1,6 @@ " Vim autoload file for editing compressed files. " Maintainer: Bram Moolenaar -" Last Change: 2006 Mar 31 +" Last Change: 2006 Oct 03 " These functions are used by the gzip plugin. @@ -68,9 +68,9 @@ let tmp = tempname() let tmpe = tmp . "." . expand(":e") " write the just read lines to a temp file "'[,']w tmp.gz" - execute "silent '[,']w " . tmpe + execute "silent '[,']w " . escape(tmpe, ' ') " uncompress the temp file: call system("gzip -dn tmp.gz") - call system(a:cmd . " " . tmpe) + call system(a:cmd . " " . s:escape(tmpe)) if !filereadable(tmp) " uncompress didn't work! Keep the compressed file then. echoerr "Error: Could not read uncompressed file" @@ -127,9 +127,9 @@ let nmt = s:tempname(nm) if rename(nm, nmt) == 0 if exists("b:gzip_comp_arg") - call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt) + call system(a:cmd . " " . b:gzip_comp_arg . " " . s:escape(nmt)) else - call system(a:cmd . " " . nmt) + call system(a:cmd . " " . s:escape(nmt)) endif call rename(nmt . "." . expand(":e"), nm) endif @@ -154,10 +154,10 @@ if rename(nm, nmte) == 0 if &patchmode != "" && getfsize(nm . &patchmode) == -1 " Create patchmode file by creating the decompressed file new - call system(a:cmd . " -c " . nmte . " > " . nmt) + call system(a:cmd . " -c " . s:escape(nmte) . " > " . s:escape(nmt)) call rename(nmte, nm . &patchmode) else - call system(a:cmd . " " . nmte) + call system(a:cmd . " " . s:escape(nmte)) endif call rename(nmt, nm) endif @@ -175,4 +175,12 @@ return fnamemodify(a:name, ":p:h") . "/X~=@l9q5" endfun +fun s:escape(name) + " shellescape() was added by patch 7.0.111 + if v:version > 700 || (v:version == 700 && has('patch111')) + return shellescape(a:name) + endif + return "'" . a:name . "'" +endfun + " vim: set sw=2 : diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim --- vim70.orig/runtime/autoload/paste.vim 2006-04-21 18:31:01.000000000 +0000 +++ vim70/runtime/autoload/paste.vim 2006-10-29 11:54:25.000000000 +0000 @@ -1,6 +1,6 @@ " Vim support file to help with paste mappings and menus " Maintainer: Bram Moolenaar -" Last Change: 2006 Apr 21 +" Last Change: 2006 Jun 23 " Define the string to use for items that are present both in Edit, Popup and " Toolbar menu. Also used in mswin.vim and macmap.vim. @@ -12,7 +12,7 @@ if has("virtualedit") let paste#paste_cmd = {'n': ":call paste#Paste()"} let paste#paste_cmd['v'] = '"-c' . paste#paste_cmd['n'] - let paste#paste_cmd['i'] = '' . paste#paste_cmd['n'] . 'gi' + let paste#paste_cmd['i'] = 'x' . paste#paste_cmd['n'] . 'gi' func! paste#Paste() let ove = &ve diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim --- vim70.orig/runtime/autoload/spellfile.vim 2006-02-01 12:12:24.000000000 +0000 +++ vim70/runtime/autoload/spellfile.vim 2006-10-29 11:54:25.000000000 +0000 @@ -1,9 +1,9 @@ " Vim script to download a missing spell file " Maintainer: Bram Moolenaar -" Last Change: 2006 Feb 01 +" Last Change: 2006 Aug 29 if !exists('g:spellfile_URL') - let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell' + let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell' endif let s:spellfile_URL = '' " Start with nothing so that s:donedict is reset. @@ -61,13 +61,13 @@ new setlocal bin echo 'Downloading ' . fname . '...' - exe 'Nread ' g:spellfile_URL . '/' . fname + call spellfile#Nread(fname) if getline(2) !~ 'VIMspell' " Didn't work, perhaps there is an ASCII one. g/^/d let fname = a:lang . '.ascii.spl' echo 'Could not find it, trying ' . fname . '...' - exe 'Nread ' g:spellfile_URL . '/' . fname + call spellfile#Nread(fname) if getline(2) !~ 'VIMspell' echo 'Sorry, downloading failed' bwipe! @@ -95,7 +95,7 @@ g/^/d let fname = substitute(fname, '\.spl$', '.sug', '') echo 'Downloading ' . fname . '...' - exe 'Nread ' g:spellfile_URL . '/' . fname + call spellfile#Nread(fname) if getline(2) !~ 'VIMsug' echo 'Sorry, downloading failed' else @@ -109,3 +109,15 @@ bwipe endif endfunc + +" Read "fname" from the server. +function! spellfile#Nread(fname) + if g:spellfile_URL =~ '^ftp://' + " for an ftp server use a default login and password to avoid a prompt + let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '') + let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '') + exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"' + else + exe 'Nread ' g:spellfile_URL . '/' . a:fname + endif +endfunc diff -Naur vim70.orig/runtime/doc/eval.txt vim70/runtime/doc/eval.txt --- vim70.orig/runtime/doc/eval.txt 2006-05-07 12:16:44.000000000 +0000 +++ vim70/runtime/doc/eval.txt 2006-10-29 11:54:26.000000000 +0000 @@ -1,4 +1,4 @@ -*eval.txt* For Vim version 7.0. Last change: 2006 May 06 +*eval.txt* For Vim version 7.0. Last change: 2006 Sep 22 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1709,6 +1709,8 @@ settabwinvar( {tabnr}, {winnr}, {varname}, {val}) set {varname} in window {winnr} in tab page {tabnr} to {val} setwinvar( {nr}, {varname}, {val}) set {varname} in window {nr} to {val} +shellescape( {string}) String escape {string} for use as shell + command argument simplify( {filename}) String simplify filename as much as possible sort( {list} [, {func}]) List sort {list}, using {func} to compare soundfold( {word}) String sound-fold {word} @@ -4434,6 +4436,21 @@ :call setwinvar(1, "&list", 0) :call setwinvar(2, "myvar", "foobar") +shellescape({string}) *shellescape()* + Escape {string} for use as shell command argument. + On MS-Windows and MS-DOS, when 'shellslash' is not set, it + will enclose {string} double quotes and double all double + quotes within {string}. + For other systems, it will enclose {string} in single quotes + and replace all "'" with "'\''". + Example: > + :echo shellescape('c:\program files\vim') +< results in: + "c:\program files\vim" ~ + Example usage: > + :call system("chmod +x -- " . shellescape(expand("%"))) + + simplify({filename}) *simplify()* Simplify the file name as much as possible without changing the meaning. Shortcuts (on MS-Windows) or symbolic links (on diff -Naur vim70.orig/runtime/menu.vim vim70/runtime/menu.vim --- vim70.orig/runtime/menu.vim 2006-04-17 13:47:28.000000000 +0000 +++ vim70/runtime/menu.vim 2006-10-29 11:54:26.000000000 +0000 @@ -2,7 +2,7 @@ " You can also use this as a start for your own set of menus. " " Maintainer: Bram Moolenaar -" Last Change: 2006 Apr 17 +" Last Change: 2006 Sep 14 " Note that ":an" (short for ":anoremenu") is often used to make a menu work " in all modes and avoid side effects from mappings defined by the user. @@ -885,6 +885,8 @@ if exists("s:changeitem") && s:changeitem != '' call SpellDel() endif + + " Return quickly if spell checking is not enabled. if !&spell || &spelllang == '' return endif @@ -908,18 +910,18 @@ let s:fromword = w let pri = 1 for sug in s:suglist - exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .') + exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .') \ . ' :call SpellReplace(' . pri . ')' let pri += 1 endfor let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list' - exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '' + exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '' let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"' - exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '' + exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '' - amenu 1.8 PopUp.-SpellSep- : + anoremenu 1.8 PopUp.-SpellSep- : endif endif endfunc @@ -938,7 +940,9 @@ let s:changeitem = '' endfun - au! MenuPopup * call SpellPopup() + augroup SpellPopupMenu + au! MenuPopup * call SpellPopup() + augroup END endif " The GUI toolbar (for MS-Windows and GTK) @@ -1013,9 +1017,9 @@ tmenu ToolBar.FindPrev Find Previous tmenu ToolBar.Replace Find / Replace... endif - tmenu ToolBar.LoadSesn Chose a session to load + tmenu ToolBar.LoadSesn Choose a session to load tmenu ToolBar.SaveSesn Save current session - tmenu ToolBar.RunScript Chose a Vim Script to run + tmenu ToolBar.RunScript Choose a Vim Script to run tmenu ToolBar.Make Make current project (:make) tmenu ToolBar.RunCtags Build tags in current directory tree (!ctags -R .) tmenu ToolBar.TagJump Jump to tag under cursor diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim --- vim70.orig/runtime/plugin/matchparen.vim 2006-04-27 13:31:26.000000000 +0000 +++ vim70/runtime/plugin/matchparen.vim 2006-10-29 11:54:26.000000000 +0000 @@ -1,6 +1,6 @@ " Vim plugin for showing matching parens " Maintainer: Bram Moolenaar -" Last Change: 2006 Apr 27 +" Last Change: 2006 Sep 09 " Exit quickly when: " - this plugin was already loaded (or disabled) @@ -44,7 +44,7 @@ let before = 0 let c = getline(c_lnum)[c_col - 1] - let plist = split(&matchpairs, ':\|,') + let plist = split(&matchpairs, '.\zs[:,]') let i = index(plist, c) if i < 0 " not found, in Insert mode try character before the cursor @@ -90,19 +90,19 @@ " Find the match. When it was just before the cursor move it there for a " moment. if before > 0 - let save_cursor = getpos('.') + let save_cursor = winsaveview() call cursor(c_lnum, c_col - before) endif " When not in a string or comment ignore matches inside them. let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' . - \ '=~? "string\\|comment"' + \ '=~? "string\\|character\\|singlequote\\|comment"' execute 'if' s_skip '| let s_skip = 0 | endif' let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline) if before > 0 - call setpos('.', save_cursor) + call winrestview(save_cursor) endif " If a match is found setup match highlighting. diff -Naur vim70.orig/runtime/scripts.vim vim70/runtime/scripts.vim --- vim70.orig/runtime/scripts.vim 2006-03-28 19:30:49.000000000 +0000 +++ vim70/runtime/scripts.vim 2006-10-29 11:54:25.000000000 +0000 @@ -1,7 +1,7 @@ " Vim support file to detect file types in scripts " " Maintainer: Bram Moolenaar -" Last change: 2006 Mar 28 +" Last change: 2006 Jul 08 " This file is called by an autocommand for every file that has just been " loaded into a buffer. It checks if the type of file can be recognized by @@ -54,6 +54,12 @@ let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '') endif + " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the + " third line. Suggested by Steven Atkinson. + if getline(3) =~ '^exec wish' + let s:name = 'wish' + endif + " Bourne-like shell scripts: bash bash2 ksh ksh93 sh if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>' call SetFileTypeSH(s:line1) " defined in filetype.vim diff -Naur vim70.orig/runtime/tutor/Makefile vim70/runtime/tutor/Makefile --- vim70.orig/runtime/tutor/Makefile 2004-06-07 14:32:39.000000000 +0000 +++ vim70/runtime/tutor/Makefile 2006-10-29 11:54:26.000000000 +0000 @@ -2,8 +2,13 @@ # # The Japanese tutor exists in three encodings. Use the UTF-8 version as the # original and create the others with conversion. +# +# Similarly for Russian and Korean -all: tutor.ja.sjis tutor.ja.euc tutor.ko.euc +all: tutor.ja.sjis tutor.ja.euc \ + tutor.ko.euc \ + tutor.ru tutor.ru.cp1251 \ + tutor.gr tutor.gr.cp737 tutor.ja.sjis: tutor.ja.utf-8 nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis @@ -13,3 +18,15 @@ tutor.ko.euc: tutor.ko.utf-8 iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc + +tutor.ru: tutor.ru.utf-8 + iconv -f UTF-8 -t KOI8-R tutor.ru.utf-8 > tutor.ru + +tutor.ru.cp1251: tutor.ru.utf-8 + iconv -f UTF-8 -t cp1251 tutor.ru.utf-8 > tutor.ru.cp1251 + +tutor.gr: tutor.gr.utf-8 + iconv -f UTF-8 -t ISO-8859-7 tutor.gr.utf-8 > tutor.gr + +tutor.gr.cp737: tutor.gr.utf-8 + iconv -f UTF-8 -t cp737 tutor.gr.utf-8 > tutor.gr.cp737 diff -Naur vim70.orig/runtime/tutor/tutor.gr.utf-8 vim70/runtime/tutor/tutor.gr.utf-8 --- vim70.orig/runtime/tutor/tutor.gr.utf-8 1970-01-01 00:00:00.000000000 +0000 +++ vim70/runtime/tutor/tutor.gr.utf-8 2006-10-29 11:54:26.000000000 +0000 @@ -0,0 +1,815 @@ +=============================================================================== += Κ αλ ω σ ή ρ θ α τ ε σ τ ο V I M T u t o r - Έκδοση 1.5 = +=============================================================================== + + Ο Vim είναι ένας πανίσχυρος συντάκτης που έχει πολλές εντολές, πάρα + πολλές για να εξηγήσουμε σε μία περιήγηση όπως αυτή. Αυτή η περιήγηση + σχεδιάστηκε για να περιγράψει ικανοποιητικά τις εντολές που θα σας + κάνουν να χρησιμοποιείτε εύκολα τον Vim σαν έναν γενικής χρήσης συντάκτη. + + Ο κατά προσέγγιση χρόνος που απαιτείται για να ολοκληρώσετε την περιήγηση + είναι 25-30 λεπτά, εξαρτώντας από το πόσο χρόνο θα ξοδέψετε για + πειραματισμούς. + + Οι εντολές στα μαθήματα θα τροποποιήσουν το κείμενο. Δημιουργήστε ένα + αντίγραφο αυτού του αρχείου για να εξασκηθείτε (αν ξεκινήσατε το + "Vimtutor" αυτό είναι ήδη ένα αντίγραφο). + + Είναι σημαντικό να θυμάστε ότι αυτή η περιήγηση είναι οργανωμένη έτσι + ώστε να διδάσκει μέσω της χρήσης. Αυτό σημαίνει ότι χρειάζεται να + εκτελείτε τις εντολές για να τις μάθετε σωστά. Αν διαβάζετε μόνο το + κείμενο, θα τις ξεχάσετε! + + Τώρα, βεβαιωθείτε ότι το πλήκτρο Shift-Lock ΔΕΝ είναι πατημένο και + πατήστε το πλήκτρο j αρκετές φορές για να μετακινήσετε τον δρομέα έτσι + ώστε το Μάθημα 1.1 να γεμίσει πλήρως την οθόνη. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 1.1: ΜΕΤΑΚΙΝΟΝΤΑΣ ΤΟΝ ΔΡΟΜΕΑ + + ** Για να κινήσετε τον δρομέα, πατήστε τα πλήκτρα h,j,k,l όπως δείχνεται. ** + ^ + k Hint: Το πλήκτρο h είναι αριστερά και κινεί στ' αριστερά. + < h l > Το πλήκτρο l είναι δεξιά και κινεί στα δεξιά. + j Το πλήκτρο j μοιάζει με βελάκι προς τα κάτω. + v + + 1. Μετακινείστε τον δρομέα τριγύρω στην οθόνη μέχρι να νοιώθετε άνετα. + + 2. Κρατήστε πατημένο το κάτω πλήκτρο (j) μέχρι να επαναληφθεί. +---> Τώρα ξέρετε πώς να μετακινηθείτε στο επόμενο μάθημα. + + 3. Χρησιμοποιώντας το κάτω πλήκτρο, μετακινηθείτε στο Μάθημα 1.2. + +Σημείωση: Αν αμφιβάλλετε για κάτι που πατήσατε, πατήστε για να βρεθείτε + στην Κανονική Κατάσταση. Μετά πατήστε ξανά την εντολή που θέλατε. + +Σημείωση: Τα πλήκτρα του δρομέα θα πρέπει επίσης να δουλεύουν. Αλλά με τα hjkl + θα μπορείτε να κινηθείτε πολύ γρηγορότερα, μόλις τα συνηθίσετε. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 1.2: ΜΠΑΙΝΟΝΤΑΣ ΚΑΙ ΒΓΑΙΝΟΝΤΑΣ ΣΤΟΝ VIM + + !! ΣΗΜΕΙΩΣΗ: Πριν εκτελέσετε κάποιο από τα βήματα, διαβάστε όλο το μάθημα!! + + 1. Πατήστε το πλήκτρο (για να είστε σίγουρα στην Κανονική Κατάσταση). + + 2. Πληκτρολογήστε: :q! . + +---> Αυτό εξέρχεται από τον συντάκτη ΧΩΡΙΣ να σώσει όποιες αλλαγές έχετε κάνει. + Αν θέλετε να σώσετε τις αλλαγές και να εξέρθετε πληκτρολογήστε: + :wq + + 3. Όταν δείτε την προτροπή του φλοιού, πληκτρολογήστε την εντολή με την οποία + μπήκατε σε αυτήν την περιήγηση. Μπορεί να είναι: vimtutor + Κανονικά θα χρησιμοποιούσατε: vim tutor + +---> 'vim' σημαίνει εισαγωγή στον συντάκτη vim, 'tutor' είναι το αρχείο που + θέλουμε να διορθώσουμε. + + 4. Αν έχετε απομνημονεύσει αυτά τα βήματα και έχετε αυτοπεποίθηση, εκτελέστε + τα βήματα 1 έως 3 για να βγείτε και να μπείτε ξανά στον συντάκτη. Μετά + μετακινήστε τον δρομέα κάτω στο Μάθημα 1.3. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 1.3: ΔΙΟΡΘΩΣΗ ΚΕΙΜΕΝΟΥ - ΔΙΑΓΡΑΦΗ + + ** Όσο είστε στην Κανονική Κατάσταση πατήστε x για να διαγράψετε τον + χαρακτήρα κάτω από τον δρομέα. ** + + 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->. + + 2. Για να διορθώσετε τα λάθη, κινείστε τον δρομέα μέχρι να είναι πάνω από + τον χαρακτήρα που θα διαγραφεί. + + 3. Πατήστε το πλήκτρο x για να διαγράψετε τον ανεπιθύμητο χαρακτήρα. + + 4. Επαναλάβετε τα βήματα 2 μέχρι 4 μέχρι η πρόταση να είναι σωστή. + +---> The ccow jumpedd ovverr thhe mooon. + + 5. Τώρα που η γραμμή είναι σωστή, πηγαίντε στο Μάθημα 1.4. + +ΣΗΜΕΙΩΣΗ: Καθώς διατρέχετε αυτήν την περιήγηση, προσπαθήστε να μην + απομνημονεύετε, μαθαίνετε με τη χρήση. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 1.4: ΔΙΟΡΘΩΣΗ ΚΕΙΜΕΝΟΥ - ΠΑΡΕΜΒΟΛΗ + + ** Όσο είστε σε Κανονική Κατάσταση πατήστε i για να παρεμβάλλετε κείμενο. ** + + 1. Μετακινείστε τον δρομέα μέχρι την πρώτη γραμμή παρακάτω σημειωμένη με --->. + + 2. Για να κάνετε την πρώτη γραμμή ίδια με την δεύτερη, μετακινείστε τον + δρομέα πάνω στον πρώτο χαρακτήρα ΜΕΤΑ από όπου θα παρεμβληθεί το κείμενο. + + 3. Πατήστε το i και πληκτρολογήστε τις απαραίτητες προσθήκες. + + 4. Καθώς διορθώνετε κάθε λάθος πατήστε για να επιστρέψετε στην + Κανονική Κατάσταση. Επαναλάβετε τα βήματα 2 μέχρι 4 για να διορθώσετε + την πρόταση. + +---> There is text misng this . +---> There is some text missing from this line. + + 5. Όταν είστε άνετοι με την παρεμβολή κειμένου μετακινηθείτε στην + παρακάτω περίληψη. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 1 ΠΕΡΙΛΗΨΗ + + + 1. Ο δρομέας κινείται χρησιμοποιώντας είτε τα πλήκτρα δρομέα ή τα hjkl. + h (αριστέρα) j (κάτω) k (πάνω) l (δεξιά) + + 2. Για να μπείτε στον Vim (από την προτροπή %) γράψτε: vim ΑΡΧΕΙΟ + + 3. Για να βγείτε γράψτε: :q! για απόρριψη των αλλαγών. + Ή γράψτε: :wq για αποθήκευση των αλλαγών. + + 4. Για να διαγράψετε έναν χαρακτήρα κάτω από τον δρομέα σε + Κανονική Κατάσταση πατήστε: x + + 5. Για να εισάγετε κείμενο στον δρομέα όσο είστε σε Κανονική Κατάσταση γράψτε: + i πληκτρολογήστε το κείμενο + +ΣΗΜΕΙΩΣΗ: Πατώντας θα τοποθετηθείτε στην Κανονική Κατάσταση ή θα + ακυρώσετε μία ανεπιθύμητη και μερικώς ολοκληρωμένη εντολή. + +Τώρα συνεχίστε με το Μάθημα 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 2.1: ΕΝΤΟΛΕΣ ΔΙΑΓΡΑΦΗΣ + + ** Γράψτε dw για να διαγράψετε μέχρι το τέλος μίας λέξης. ** + + 1. Πατήστε για να βεβαιωθείτε ότι είστε στην Κανονική Κατάσταση. + + 2. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->. + + 3. Πηγαίνετε τον δρομέα στην αρχή της λέξης που πρέπει να διαγραφεί. + + 4. Γράψτε dw για να κάνετε την λέξη να εξαφανιστεί. + +ΣΗΜΕΙΩΣΗ: Τα γράμματα dw θα εμφανιστούν στην τελευταία γραμμή της οθόνης όσο + τα πληκτρολογείτε. Αν γράψατε κάτι λάθος, πατήστε και + ξεκινήστε από την αρχή. + +---> There are a some words fun that don't belong paper in this sentence. + + 5. Επαναλάβετε τα βήματα 3 και 4 μέχρι η πρόταση να είναι σωστή και + πηγαίνετε στο Μάθημα 2.2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 2.2: ΠΕΡΙΣΣΟΤΕΡΕΣ ΕΝΤΟΛΕΣ ΔΙΑΓΡΑΦΗΣ + + ** Πληκτρολογήστε d$ για να διαγράψετε μέχρι το τέλος της γραμμής. ** + + 1. Πατήστε για να βεβαιωθείτε ότι είστε στην Κανονική Κατάσταση. + + 2. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->. + + 3. Μετακινείστε τον δρομέα στο τέλος της σωστής γραμμής (ΜΕΤΑ την πρώτη . ). + + 4. Πατήστε d$ για να διαγράψετε μέχρι το τέλος της γραμμής. + +---> Somebody typed the end of this line twice. end of this line twice. + + 5. Πηγαίνετε στο Μάθημα 2.3 για να καταλάβετε τι συμβαίνει. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 2.3: ΠΕΡΙ ΕΝΤΟΛΩΝ ΚΑΙ ΑΝΤΙΚΕΙΜΕΝΩΝ + + +Η μορφή της εντολής διαγραφής d είναι ως εξής: + + [αριθμός] d αντικείμενο Ή d [αριθμός] αντικείμενο + Όπου: + αριθμός - πόσες φορές θα εκτελεστεί η εντολή (προαιρετικό, εξ' ορισμού=1). + d - η εντολή της διαγραφής. + αντικείμενο - πάνω σε τι θα λειτουργήσει η εντολή (παρακάτω λίστα). + + Μία μικρή λίστα από αντικείμενα: + w - από τον δρομέα μέχρι το τέλος της λέξης, περιλαμβάνοντας το διάστημα. + e - από τον δρομέα μέχρι το τέλος της λέξης, ΧΩΡΙΣ το διάστημα. + $ - από τον δρομέα μέχρι το τέλος της γραμμής. + +ΣΗΜΕΙΩΣΗ: Για τους τύπους της περιπέτειας, πατώντας απλώς το αντικείμενο όσο + είστε στην Κανονική Κατάσταση χωρίς κάποια εντολή θα μετακινήσετε + τον δρομέα όπως καθορίζεται στην λίστα αντικειμένων. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 2.4: ΜΙΑ ΕΞΑΙΡΕΣΗ ΣΤΗΝ 'ΕΝΤΟΛΗ-ΑΝΤΙΚΕΙΜΕΝΟ' + + ** Πληκτρολογήστε dd για να διαγράψετε όλη τη γραμμή. ** + + Εξαιτίας της συχνότητας της διαγραφής ολόκληρης γραμμής, οι σχεδιαστές + του Vim αποφάσισαν ότι θα ήταν ευκολότερο να γράφετε απλώς δύο d στη + σειρά για να διαγράψετε μία γραμμή. + + 1. Μετακινείστε τον δρομέα στη δεύτερη γραμμή της παρακάτω φράσης. + 2. Γράψτε dd για να διαγράψετε τη γραμμή. + 3. Τώρα μετακινηθείτε στην τέταρτη γραμμή. + 4. Γράψτε 2dd (θυμηθείτε αριθμός-εντολή-αντικείμενο) για να + διαγράψετε δύο γραμμές. + + 1) Roses are red, + 2) Mud is fun, + 3) Violets are blue, + 4) I have a car, + 5) Clocks tell time, + 6) Sugar is sweet + 7) And so are you. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 2.5: Η ΕΝΤΟΛΗ ΑΝΑΙΡΕΣΗΣ + + ** Πατήστε u για να αναιρέσετε τις τελευταίες εντολές, + U για να διορθώσετε όλη τη γραμμή. ** + + 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με ---> και + τοποθετήστε τον πάνω στο πρώτο λάθος. + 2. Πατήστε x για να διαγράψετε τον πρώτο ανεπιθύμητο χαρακτήρα. + 3. Τώρα πατήστε u για να αναιρέσετε την τελευταία εκτελεσμένη εντολή. + 4. Αυτή τη φορά διορθώστε όλα τα λάθη στη γραμμή χρησιμοποιώντας την εντολή x. + 5. Τώρα πατήστε ένα κεφαλαίο U για να επιστρέψετε τη γραμμή στην αρχική + της κατάσταση. + 6. Τώρα πατήστε u μερικές φορές για να αναιρέσετε την U και + προηγούμενες εντολές. + 7. Τώρα πατήστε CTRL-R (κρατώντας πατημένο το πλήκτρο CTRL καθώς πατάτε το R) + μερικές φορές για να επαναφέρετε τις εντολές (αναίρεση των αναιρέσεων). + +---> Fiix the errors oon thhis line and reeplace them witth undo. + + 8. Αυτές είναι πολύ χρήσιμες εντολές. Τώρα πηγαίνετε στην + Περίληψη του Μαθήματος 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 2 ΠΕΡΙΛΗΨΗ + + + 1. Για να διαγράψετε από τον δρομέα μέχρι το τέλος λέξης γράψτε: dw + + 2. Για να διαγράψετε από τον δρομέα μέχρι το τέλος γραμμής γράψτε: d$ + + 3. Για να διαγράψετε ολόκληρη τη γραμμή γράψτε: dd + + 4. Η μορφή για μία εντολή στην Κανονική Κατάσταση είναι: + + [αριθμός] εντολή αντικείμενο Ή εντολή [αριθμός] αντικείμενο + όπου: + αριθμός - πόσες φορές να επαναληφθεί η εντολή + εντολή - τι να γίνει, όπως η d για διαγραφή + αντικείμενο - πάνω σε τι να ενεργήσει η εντολή, όπως w (λέξη), + $ (τέλος της γραμμής), κτλ. + + 5. Για να αναιρέσετε προηγούμενες ενέργειες, πατήστε: u (πεζό u) + Για να αναιρέσετε όλες τις αλλαγές στη γραμμή, πατήστε: U (κεφαλαίο U) + Για να αναιρέσετε τις αναιρέσεις, πατήστε: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 3.1: Η ΕΝΤΟΛΗ ΤΟΠΟΘΕΤΗΣΗΣ + + + ** Πατήστε p για να τοποθετήσετε την τελευταία διαγραφή μετά τον δρομέα. ** + + 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή της παρακάτω ομάδας. + + 2. Πατήστε dd για να διαγράψετε τη γραμμή και να την αποθηκεύσετε σε + προσωρινή μνήμη του Vim. + + 3. Μετακινείστε τον δρομέα στη γραμμή ΠΑΝΩ από εκεί που θα πρέπει να πάει + η διαγραμμένη γραμμή. + + 4. Όσο είστε σε Κανονική Κατάσταση, πατήστε p για να βάλετε τη γραμμή. + + 5. Επαναλάβετε τα βήματα 2 έως 4 για να βάλετε όλες τις γραμμές στη + σωστή σειρά. + + d) Can you learn too? + b) Violets are blue, + c) Intelligence is learned, + a) Roses are red, + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 3.2: Η ΕΝΤΟΛΗ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ + + + ** Πατήστε r και χαρακτήρα για να αλλάξετε αυτόν που είναι + κάτω από τον δρομέα. ** + + 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->. + + 2. Μετακινείστε τον δρομέα έτσι ώστε να είναι πάνω στο πρώτο λάθος. + + 3. Πατήστε r και μετά τον χαρακτήρα ο οποίος διορθώνει το λάθος. + + 4. Επαναλάβετε τα βήματα 2 και 3 μέχρι να είναι σωστή η πρώτη γραμμή. + +---> Whan this lime was tuoed in, someone presswd some wrojg keys! +---> When this line was typed in, someone pressed some wrong keys! + + 5. Τώρα πηγαίνετε στο Μάθημα 3.2. + +ΣΗΜΕΙΩΣΗ: Να θυμάστε ότι πρέπει να μαθαίνετε με τη χρήση, και όχι με + την απομνημόνευση. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 3.3: Η ΕΝΤΟΛΗ ΑΛΛΑΓΗΣ + + ** Για να αλλάξετε τμήμα ή όλη τη λέξη, πατήστε cw . ** + + 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->. + + 2. Τοποθετήστε τον δρομέα πάνω στο u της λέξης lubw. + + 3. Πατήστε cw και τη σωστή λέξη (στην περίπτωση αυτή, γράψτε 'ine'.) + + 4. Πατήστε και πηγαίνετε στο επόμενο λάθος (στον πρώτο + χαρακτήρα προς αλλαγή). + + 5. Επαναλάβετε τα βήματα 3 και 4 μέχρις ότου η πρώτη πρόταση να είναι + ίδια με τη δεύτερη. + +---> This lubw has a few wptfd that mrrf changing usf the change command. +---> This line has a few words that need changing using the change command. + +Παρατηρείστε ότι η cw όχι μόνο αντικαθιστάει τη λέξη, αλλά σας εισάγει +επίσης σε παρεμβολή. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 3.4: ΠΕΡΙΣΣΟΤΕΡΕΣ ΑΛΛΑΓΕΣ ΜΕ c + + + ** Η εντολή αλλαγής χρησιμοποιείται με τα ίδια αντικείμενα της διαγραφής. ** + + + 1. Η εντολή αλλαγής δουλεύει με τον ίδιο τρόπο όπως η διαγραφή. Η μορφή είναι: + + [αριθμός] c αντικείμενο Ή c [αριθμός] αντικείμενο + + 2. Τα αντικείμενα είναι πάλι τα ίδια, όπως w (λέξη), $ (τέλος γραμμής), κτλ. + + 3. Μετακινηθείτε στην πρώτη γραμμή παρακάτω σημειωμένη με --->. + + 4. Μετακινείστε τον δρομέα στο πρώτο λάθος. + + 5. Γράψτε c$ για να κάνετε το υπόλοιπο της γραμμής ίδιο με τη δεύτερη + και πατήστε . + +---> The end of this line needs some help to make it like the second. +---> The end of this line needs to be corrected using the c$ command. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 3 ΠΕΡΙΛΗΨΗ + + + 1. Για να τοποθετήσετε κείμενο που μόλις έχει διαγραφεί, πατήστε p . + Αυτό τοποθετεί το διαγραμμένο κείμενο ΜΕΤΑ τον δρομέα (αν διαγράφτηκε + γραμμή θα πάει μετά στη γραμμή κάτω από τον δρομέα. + + 2. Για να αντικαταστήσετε τον χαρακτήρα κάτω από τον δρομέα, πατήστε r + και μετά τον χαρακτήρα που θα αντικαταστήσει τον αρχικό. + + 3. Η εντολή αλλαγής σας επιτρέπει να αλλάξετε το καθορισμένο αντικείμενο + από τον δρομέα μέχρι το τέλος του αντικείμενο. Π.χ. γράψτε cw για να + αλλάξετε από τον δρομέα μέχρι το τέλος της λέξης, c$ για να αλλάξετε + μέχρι το τέλος γραμμής. + + 4. Η μορφή για την αλλαγή είναι: + + [αριθμός] c αντικείμενο Ή c [αριθμός] αντικείμενο + +Τώρα συνεχίστε με το επόμενο μάθημα. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 4.1: ΘΕΣΗ ΚΑΙ ΚΑΤΑΣΤΑΣΗ ΑΡΧΕΙΟΥ + + + ** Πατήστε CTRL-g για να εμφανιστεί η θέση σας στο αρχείο και η κατάστασή του. + Πατήστε SHIFT-G για να πάτε σε μία γραμμή στο αρχείο. ** + + Σημείωση: Διαβάστε ολόκληρο το μάθημα πριν εκτελέσετε κάποιο από τα βήματα!! + + 1. Κρατήστε πατημένο το πλήκτρο Ctrl και πατήστε g . Μία γραμμή κατάστασης + θα εμφανιστεί στο κάτω μέρος της σελίδας με το όνομα αρχείου και τη + γραμμή που είστε. Θυμηθείτε τον αριθμό γραμμής για το Βήμα 3. + + 2. Πατήστε shift-G για να μετακινηθείτε στο τέλος του αρχείου. + + 3. Πατήστε τον αριθμό της γραμμής που ήσασταν και μετά shift-G. Αυτό θα + σας επιστρέψει στη γραμμή που ήσασταν πριν πατήσετε για πρώτη φορά Ctrl-g. + (Όταν πληκτρολογείτε τους αριθμούς, ΔΕΝ θα εμφανίζονται στην οθόνη). + + 4. Αν νοιώθετε σίγουρος για αυτό, εκτελέστε τα βήματα 1 έως 3. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 4.2: Η ΕΝΤΟΛΗ ΑΝΑΖΗΤΗΣΗΣ + + + ** Πατήστε / ακολουθούμενο από τη φράση που ψάχνετε. ** + + 1. Σε Κανονική Κατάσταση πατήστε τον χαρακτήρα / . Παρατηρήστε ότι αυτός και + ο δρομέας εμφανίζονται στο κάτω μέρος της οθόνης όπως με την εντολή : . + + 2. Τώρα γράψτε 'errroor' . Αυτή είναι η λέξη που θέλετε να ψάξετε. + + 3. Για να ψάξετε ξανά για την ίδια φράση, πατήστε απλώς n . + Για να ψάξετε την ίδια φράση στην αντίθετη κατεύθυνση, πατήστε Shift-N . + + 4. Αν θέλετε να ψάξετε για μία φράση προς τα πίσω, χρησιμοποιήστε την εντολή ? αντί της / . + +---> Όταν η αναζήτηση φτάσει στο τέλος του αρχείου θα συνεχίσει από την αρχή. + + "errroor" is not the way to spell error; errroor is an error. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 4.3: ΕΥΡΕΣΗ ΤΑΙΡΙΑΣΤΩΝ ΠΑΡΕΝΘΕΣΕΩΝ + + + ** Πατήστε % για να βρείτε την αντίστοιχη ), ], ή } . ** + + 1. Τοποθετήστε τον δρομέα σε κάποια (, [, ή { στην παρακάτω γραμμή + σημειωμένη με --->. + + 2. Τώρα πατήστε τον χαρακτήρα % . + + 3. Ο δρομέας θα πρέπει να είναι στην αντίστοιχη παρένθεση ή αγκύλη. + + 4. Πατήστε % για να μετακινήσετε τον δρομέα πίσω στην πρώτη αγκύλη + (του ζευγαριού). + +---> This ( is a test line with ('s, ['s ] and {'s } in it. )) + +ΣΗΜΕΙΩΣΗ: Αυτό είναι πολύ χρήσιμο στην αποσφαλμάτωση ενός προγράμματος + με μη ταιριαστές παρενθέσεις! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 4.4: ΕΝΑΣ ΤΡΟΠΟΣ ΓΙΑ ΑΛΛΑΓΗ ΛΑΘΩΝ + + + ** Γράψτε :s/old/new/g για να αλλάξετε το 'new' με το 'old'. ** + + 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->. + + 2. Γράψτε :s/thee/the . Σημειώστε ότι αυτή η εντολή αλλάζει μόνο + την πρώτη εμφάνιση στη γραμμή. + + 3. Τώρα γράψτε :s/thee/the/g εννοώντας γενική αντικατάσταση στη + γραμμή. Αυτό αλλάζει όλες τις εμφανίσεις επί της γραμμής. + +---> thee best time to see thee flowers is in thee spring. + + 4. Για να αλλάξετε κάθε εμφάνιση μίας συμβολοσειράς μεταξύ δύο γραμμών, + γράψτε :#,#s/old/new/g όπου #,# οι αριθμοί των δύο γραμμών. + Γράψτε :%s/old/new/g για να αλλάξετε κάθε εμφάνιση σε όλο το αρχείο. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 4 ΠΕΡΙΛΗΨΗ + + + 1. Το Ctrl-g εμφανίζει τη θέση σας στο αρχείο και την κατάστασή του. + Το Shift-G πηγαίνει στο τέλος του αρχείου. Ένας αριθμός γραμμής + ακολουθούμενος από Shift-G πηγαίνει σε εκείνη τη γραμμή. + + 2. Γράφοντας / ακολουθούμενο από μία φράση ψάχνει προς τα ΜΠΡΟΣΤΑ για + τη φράση. Γράφοντας ? ακολουθούμενο από μία φράση ψάχνει προς τα ΠΙΣΩ + για τη φράση. Μετά από μία αναζήτηση πατήστε n για να βρείτε την + επόμενη εμφάνιση προς την ίδια κατεύθυνση ή Shift-N για να ψάξετε + προς την αντίθετη κατεύθυνση. + + 3. Πατώντας % όσο ο δρομέας είναι πάνω σε μία (,),[,],{, ή } εντοπίζει + το αντίστοιχο ταίρι του ζευγαριού. + + 4. Για αντικατάσταση με new του πρώτου old στη γραμμή γράψτε :s/old/new + Για αντικατάσταση με new όλων των 'old' στη γραμμή γράψτε :s/old/new/g + Για αντικατάσταση φράσεων μεταξύ δύο # γραμμών γράψτε :#,#s/old/new/g + Για αντικατάσταση όλων των εμφανίσεων στο αρχείο γράψτε :%s/old/new/g + Για ερώτηση επιβεβαίωσης κάθε φορά προσθέστε ένα 'c' "%s/old/new/gc + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 5.1: ΠΩΣ ΕΚΤΕΛΩ ΜΙΑ ΕΞΩΤΕΡΙΚΗ ΕΝΤΟΛΗ + + +** Γράψτε :! ακολουθούμενο από μία εξωτερική εντολή για να την εκτελέσετε. ** + + 1. Πατήστε την οικεία εντολή : για να θέσετε τον δρομέα στο κάτω μέρος + της οθόνης. Αυτό σας επιτρέπει να δώσετε μία εντολή. + + 2. Τώρα πατήστε το ! (θαυμαστικό). Αυτό σας επιτρέπει να εκτελέσετε + οποιαδήποτε εξωτερική εντολή του φλοιού. + + 3. Σαν παράδειγμα γράψτε ls μετά από το ! και πατήστε . Αυτό θα + σας εμφανίσει μία λίστα του καταλόγου σας, ακριβώς σαν να ήσασταν στην + προτροπή του φλοιού. Ή χρησιμοποιήστε :!dir αν το ls δεν δουλεύει. + +---> Σημείωση: Είναι δυνατόν να εκτελέσετε οποιαδήποτε εξωτερική εντολή + με αυτόν τον τρόπο. + +---> Σημείωση: Όλες οι εντολές : πρέπει να τερματίζονται πατώντας το . + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 5.2: ΠΕΡΙΣΣΟΤΕΡΑ ΠΕΡΙ ΕΓΓΡΑΦΗΣ ΑΡΧΕΙΩΝ + + + ** Για να σώσετε τις αλλάγες που κάνατε στο αρχείο, γράψτε :w ΑΡΧΕΙΟ. ** + + 1. Γράψτε :!dir ή :!ls για να πάρετε μία λίστα του καταλόγου σας. + Ήδη ξέρετε ότι πρέπει να πατήσετε μετά από αυτό. + + 2. Διαλέξτε ένα όνομα αρχείου που δεν υπάρχει ακόμα, όπως το TEST. + + 3. Τώρα γράψτε: :w TEST (όπου TEST είναι το όνομα αρχείου που διαλέξατε). + + 4. Αυτό σώζει όλο το αρχείο (vim Tutor) με το όνομα TEST. Για να το + επαληθεύσετε, γράψτε ξανά :!dir για να δείτε τον κατάλογό σας. + +---> Σημειώστε ότι αν βγαίνατε από τον Vim και μπαίνατε ξανά με το όνομα + αρχείου TEST, το αρχείο θα ήταν ακριβές αντίγραφο του tutor όταν το σώσατε. + + 5. Τώρα διαγράψτε το αρχείο γράφοντας (MS-DOS): :!del TEST + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 5.3: ΕΠΙΛΕΚΤΙΚΗ ΕΝΤΟΛΗ ΕΓΓΡΑΦΗΣ + + + ** Για να σώσετε τμήμα του αρχείου, γράψτε :#,# w ΑΡΧΕΙΟ ** + + 1. Άλλη μια φορά, γράψτε :!dir ή :!ls για να πάρετε μία λίστα από τον + κατάλογό σας και διαλέξτε ένα κατάλληλο όνομα αρχείου όπως το TEST. + + 2. Μετακινείστε τον δρομέα στο πάνω μέρος αυτής της σελίδας και πατήστε + Ctrl-g για να βρείτε τον αριθμό αυτής της γραμμής. + ΝΑ ΘΥΜΑΣΤΕ ΑΥΤΟΝ ΤΟΝ ΑΡΙΘΜΟ! + + 3. Τώρα πηγαίνετε στο κάτω μέρος της σελίδας και πατήστε Ctrl-g ξανά. + ΝΑ ΘΥΜΑΣΤΕ ΚΑΙ ΑΥΤΟΝ ΤΟΝ ΑΡΙΘΜΟ! + + 4. Για να σώσετε ΜΟΝΟ ένα τμήμα σε αρχείο, γράψτε :#,# w TEST + όπου #,# οι δύο αριθμοί που απομνημονεύσατε (πάνω,κάτω) και TEST το + όνομα του αρχείου σας. + + 5. Ξανά, δείτε ότι το αρχείο είναι εκεί με την :!dir αλλά ΜΗΝ το διαγράψετε. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 5.4: ΑΝΑΚΤΩΝΤΑΣ ΚΑΙ ΕΝΩΝΟΝΤΑΣ ΑΡΧΕΙΑ + + + ** Για να εισάγετε τα περιεχόμενα ενός αρχείου, γράψτε :r ΑΡΧΕΙΟ ** + + 1. Γράψτε :!dir για να βεβαιωθείτε ότι το TEST υπάρχει από πριν. + + 2. Τοποθετήστε τον δρομέα στο πάνω μέρος της σελίδας. + +ΣΗΜΕΙΩΣΗ: Αφότου εκτελέσετε το Βήμα 3 θα δείτε το Μάθημα 5.3. + Μετά κινηθείτε ΚΑΤΩ ξανά προς το μάθημα αυτό. + + 3. Τώρα ανακτήστε το αρχείο σας TEST χρησιμοποιώντας την εντολή :r TEST + όπου TEST είναι το όνομα του αρχείου. + +ΣΗΜΕΙΩΣΗ: Το αρχείο που ανακτάτε τοποθετείται ξεκινώντας εκεί που βρίσκεται + ο δρομέας. + + 4. Για να επαληθεύσετε ότι το αρχείο ανακτήθηκε, πίσω τον δρομέα και + παρατηρήστε ότι υπάρχουν τώρα δύο αντίγραφα του Μαθήματος 5.3, το + αρχικό και η έκδοση του αρχείου. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 5 ΠΕΡΙΛΗΨΗ + + + 1. :!εντολή εκτελεί μία εξωτερική εντολή. + + Μερικά χρήσιμα παραδείγματα είναι (MS-DOS): + :!dir - εμφάνιση λίστας ενός καταλόγου. + :!del ΑΡΧΕΙΟ - διαγράφει το ΑΡΧΕΙΟ. + + 2. :w ΑΡΧΕΙΟ γράφει το τρέχων αρχείο του Vim στο δίσκο με όνομα ΑΡΧΕΙΟ. + + 3. :#,#w ΑΡΧΕΙΟ σώζει τις γραμμές από # μέχρι # στο ΑΡΧΕΙΟ. + + 4. :r ΑΡΧΕΙΟ ανακτεί το αρχείο δίσκου ΑΡΧΕΙΟ και το παρεμβάλλει μέσα + στο τρέχον αρχείο μετά από τη θέση του δρομέα. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 6.1: Η ΕΝΤΟΛΗ ΑΝΟΙΓΜΑΤΟΣ + + + ** Πατήστε o για να ανοίξετε μία γραμμή κάτω από τον δρομέα και να + βρεθείτε σε Κατάσταση Κειμένου. ** + + 1. Μετακινείστε τον δρομέα στην παρακάτω γραμμή σημειωμένη με --->. + + 2. Πατήστε o (πεζό) για να ανοίξετε μία γραμμή ΚΑΤΩ από τον δρομέα και να + βρεθείτε σε Κατάσταση Κειμένου. + + 3. Τώρα αντιγράψτε τη σημειωμένη με ---> γραμμή και πατήστε για να + βγείτε από την Κατάσταση Κειμένου. + +---> After typing o the cursor is placed on the open line in Insert mode. + + 4. Για να ανοίξετε μία γραμμή ΠΑΝΩ από τον δρομέα, πατήστε απλά ένα κεφαλαίο + O, αντί για ένα πεζό o. Δοκιμάστε το στην παρακάτω γραμμή. +Ανοίγετε γραμμή πάνω από αυτήν πατώντας Shift-O όσο ο δρομέας είναι στη γραμμή + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 6.2: Η ΕΝΤΟΛΗ ΠΡΟΣΘΗΚΗΣ + + ** Πατήστε a για να εισάγετε κείμενο ΜΕΤΑ τον δρομέα. ** + + 1. Μετακινείστε τον δρομέα στο τέλος της πρώτης γραμμής παρακάτω + σημειωμένη με ---> πατώντας $ στην Κανονική Κατάσταση. + + 2. Πατήστε ένα a (πεζό) για να προσθέσετε κείμενο ΜΕΤΑ από τον χαρακτήρα + που είναι κάτω από τον δρομέα. (Το κεφαλαίο A προσθέτει στο τέλος + της γραμμής). + +Σημείωση: Αυτό αποφεύγει το πάτημα του i , τον τελευταίο χαρακτήρα, το + κείμενο της εισαγωγής, , δρομέα-δεξιά, και τέλος, x, μόνο και + μόνο για να προσθέσετε στο τέλος της γραμμής! + + 3. Συμπληρώστε τώρα την πρώτη γραμμή. Σημειώστε επίσης ότι η προσθήκη είναι + ακριβώς ίδια στην Κατάσταση Κειμένου με την Κατάσταση Εισαγωγής, εκτός + από τη θέση που εισάγεται το κείμενο. + +---> This line will allow you to practice +---> This line will allow you to practice appending text to the end of a line. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 6.3: ΑΛΛΗ ΕΚΔΟΣΗ ΤΗΣ ΑΝΤΙΚΑΤΑΣΤΑΣΗΣ + + + ** Πατήστε κεφαλαίο R για να αλλάξετε περισσότερους από έναν χαρακτήρες. ** + + 1. Μετακινείστε τον δρομέα στην πρώτη γραμμή παρακάτω σημειωμένη με --->. + + 2. Τοποθετήστε τον δρομέα στην αρχή της πρώτης λέξης που είναι διαφορετική + από τη δεύτερη γραμμή σημειωμένη με ---> (η λέξη 'last'). + + 3. Πατήστε τώρα R και αλλάξτε το υπόλοιπο του κειμένου στην πρώτη γραμμή + γράφοντας πάνω από το παλιό κείμενο ώστε να κάνετε την πρώτη γραμμή ίδια + με τη δεύτερη. + +---> To make the first line the same as the last on this page use the keys. +---> To make the first line the same as the second, type R and the new text. + + 4. Σημειώστε ότι όταν πατάτε για να βγείτε, παραμένει οποιοδήποτε + αναλλοίωτο κείμενο. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Μάθημα 6.4: ΡΥΘΜΙΣΗ ΕΠΙΛΟΓΗΣ + + + ** Ρυθμίστε μία επιλογή έτσι ώστε η αναζήτηση ή η αντικατάσταση να αγνοεί + τη διαφορά πεζών-κεφαλαίων ** + + 1. Ψάξτε για 'ignore' εισάγοντας: + /ignore + Συνεχίστε αρκετές φορές πατώντας το πλήκτρο n. + + 2. Θέστε την επιλογή 'ic' (Ignore case) γράφοντας: + :set ic + + 3. Ψάξτε τώρα ξανά για 'ignore' πατώντας: n + Συνεχίστε την αναζήτηση μερικές ακόμα φορές πατώντας το πλήκτρο n + + 4. Θέστε τις επιλογές 'hlsearch' και 'incsearch': + :set hls is + + 5. Εισάγετε τώρα ξανά την εντολή αναζήτησης, και δείτε τι συμβαίνει + /ignore + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 6 ΠΕΡΙΛΗΨΗ + + + 1. Πατώντας o ανοίγει μία γραμμή ΚΑΤΩ από τον δρομέα και τοποθετεί τον + δρομέα στην ανοιχτή γραμμή σε Κατάσταση Κειμένου. + + 2. Πατήστε a για να εισάγετε κείμενο ΜΕΤΑ τον χαρακτήρα στον οποίο είναι + ο δρομέας. Πατώντας κεφαλαίο A αυτόματα προσθέτει κείμενο στο τέλος + της γραμμής. + + 3. Πατώντας κεφαλαίο R εισέρχεται στην Κατάσταη Αντικατάστασης μέχρι να + πατηθεί το και να εξέλθει. + + 4. Γράφοντας ":set xxx" ρυθμίζει την επιλογή "xxx". + + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ΜΑΘΗΜΑ 7: ON-LINE ΕΝΤΟΛΕΣ ΒΟΗΘΕΙΑΣ + + + ** Χρησιμοποιήστε το on-line σύστημα βοήθειας ** + + Ο Vim έχει ένα περιεκτικό on-line σύστημα βοήθειας. Για να ξεκινήσει, + δοκιμάστε κάποιο από τα τρία: + - πατήστε το πλήκτρο (αν έχετε κάποιο) + - πατήστε το πλήκτρο (αν έχετε κάποιο) + - γράψτε :help + + Γράψτε :q για να κλείσετε το παράθυρο της βοήθειας. + + Μπορείτε να βρείτε βοήθεια πάνω σε κάθε αντικείμενο, δίνοντας μία παράμετρο + στην εντολή ":help". Δοκιμάστε αυτά (μην ξεχνάτε να πατάτε ): + + :help w + :help c_ Клавиша l находится справа и перемещает вправо. + j Клавиша j похожа на стрелку `вниз'. + v + 1. Подвигайте курсор по экрану, пока не почувствуете себя уверенно. + + 2. Надавите клавишу `вниз' (j) пока она не начнет повторяться. +---> Теперь Вы знаете, как перейти к следующему уроку. + + 3. Используя клавишу `вниз' перейдите к Уроку 1.2. + +Замечание: Если вы пока не уверены в том, что набираете, нажмите для + перехода в обычный режим (Normal mode). После этого перенаберите + требуемую команду. + +Замечание: Обычные клавиши управления курсором (стрелки) также должны + работать. Однако, клавиши hjkl позволят Вам перемещаться + значительно быстрее, как только Вы научитесь ими пользоваться. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 1.2: ЗАПУСК И ЗАВЕРШЕНИЕ РАБОТЫ С VIM + +!! ВНИМАНИЕ! Прежде, чем выполнять любой из описанных ниже шагов, прочтите + урок целиком !! + + 1. Нажмите клавишу (для того, чтобы удостовериться, что Вы в обычном + режиме (Normal mode)). + + 2. Наберите: :q! . + +---> Это позволит Вам выйти из редактора БЕЗ СОХРАНЕНИЯ любых сделанных + изменений. Если Вы хотите сохранить изменения и выйти: + :wq + + 3. Когда Вы увидите приглашение командной оболочки, наберите команду, + которая привела Вас в этот учебник. Это может быть + vimtutor ru + Обычно можно использовать: vim tutor.ru + +---> 'vim' позволяет запустить редактор vim, 'tutor.ru' --- это файл, который + Вы будете редактировать. + + 4. Если Вы уверены в том, что запомнили эти шаги, выполните шаги от 1 до 3 + чтобы выйти снова запустить редактор. Затем переместите курсор вниз к + Уроку 1.3. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 1.3: РЕДАКТИРОВАНИЕ ТЕКСТА - УДАЛЕНИЕ + + +** Находясь в обычном режиме нажмите x, чтобы удалить символ под курсором. ** + + 1. Переместите курсор к строке внизу, помеченной --->. + + 2. Для исправления ошибок, переместите курсор, пока он не окажется над + удаляемым символом. + + 3. Нажмите клавишу x для удаления требуемого символа. + + 4. Повторите шаги 2--4 пока строка не будет исправлена. + +---> От тттопота копытт пппыль ппо ппполю леттитт. + + 5. Теперь, когда строка откорректирована, переходите к уроку 1.4. + +ЗАМЕЧАНИЕ: В ходе освоения этого учебника не пытайтесь запоминать, учите + в процессе использования. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 1.4: РЕДАКТИРОВАНИЕ ТЕКСТА - ВСТАВКА + + + ** Находясь в обычном режиме (Normal mode), нажмите i для вставки текста. ** + + 1. Переместите курсор к первой строке внизу, помеченной --->. + + 2. Для того, чтобы сделать первую строку идентичной второй, поместите + курсор на символ ПЕРЕД которым следует вставить текст. + + 3. Нажмите i и наберите требуемые добавления. + + 4. После исправления всех ошибок нажмите для возврата в обычный режим. + Повторите шаги 2--4, пока фраза не будет исправлена полностью. + +---> Часть текста в строке беследно . +---> Часть текста в этой строке бесследно пропала. + + 5. Когда освоите вставку текста, переходите дальше к Резюме. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 1 + + 1. Курсор перемещается либо клавишами со стрелками, либо клавишами hjkl. + h (влево) j (вниз) k (вверх) l (вправо) + + 2. Для запуска Vim (из приглашения % командной оболочки) наберите: + vim ИМЯ_ФАЙЛА + + 3. Для завершения работы с Vim наберите: + :q! чтобы отказаться от сохранения изменений. + Или наберите: + :wq чтобы сохранить изменения. + + 4. Для удаления символа под курсором в обычном режиме, наберите: x + + 5. Чтобы вставить текст перед курсором в обычном режиме, наберите: + i вводите текст + +ЗАМЕЧАНИЕ: Нажатие переместит Вас в обычный режим (Normal mode) либо + прервет нежелательную и частично завершенную команду. + +Теперь переходим к Уроку 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 2.1: КОМАНДЫ УДАЛЕНИЯ + + + ** Наберите dw для удаления участка текста до конца слова. ** + + 1. Нажмите , чтобы перейти в обычный режим. + + 2. Переместите курсор вниз, к строке, помеченной --->. + + 3. Переместите курсор в начало слова, которое следует удалить. + + 4. Наберите dw , чтобы удалить это слово. + +ЗАМЕЧАНИЕ: Во время набора буквы dw появятся в последней строке экрана. Если + Вы что-то наберете неправильно, нажмите и начните сначала. + +---> Несколько слов рафинад в этом предложении автокран излишни. + + 5. Повторите шаги 3 и 4, пока не исправите все ошибки и переходите к + Уроку 2.2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 2.2: ДОПОЛНИТЕЛЬНЫЕ КОМАНДЫ УДАЛЕНИЯ + + + ** Наберите d$ для удаления текста до конца строки. ** + + 1. Нажмите , чтобы перейти в обычный режим. + + 2. Переместите курсор вниз, к строке, помеченной --->. + + 3. Переместите курсор к концу правильной строки (ПОСЛЕ первой . ). + + 4. Чтобы удалить остаток строки, наберите d$ . + +---> Кто-то набрал окончание этой строки дважды. окончание этой строки дважды. + + + 5.Чтобы лучше разобраться в этом, переходите к Уроку 2.3. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 2.3: КОМАНДЫ И ОБЪЕКТЫ + + + Формат команды `удаление' d таков: + + [число] d объект ИЛИ d [число] объект + Здесь: + число - сколько раз исполнить команду (необязательно, по умолчанию=1). + d - команда удаления. + объект - с чем команда должна быть выполнена (перечислено ниже). + + Краткий список объектов: + w - от курсора до конца слова, включая завершающий пробел. + e - от курсора до конца слова, НЕ включая завершающий пробел. + $ - от курсора до конца строки. + ^ - от курсора до начала строки. + +ЗАМЕЧАНИЕ: Простое нажатие на символ объекта в обычном режиме (Normal mode) + без дополнительных команд передвинет курсор так, как указано в + списке объектов. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 2.4: ИСКЛЮЧЕНИЕ ИЗ ПРАВИЛА `КОМАНДА-ОБЪЕКТ' + + + ** Наберите dd для удаления всей строки. ** + + Вследствие частого применения операции удаления всей строки, разработчики + Vim решили, что для этого проще всего просто набрать d дважды. + + 1. Переместите курсор вниз, ко второй строке фразы. + 2. Наберите dd для удаления строки. + 3. Теперь переместитесь к четвертой строке. + 4. Наберите 2dd (вспомните правило `число-команда-объект'), чтобы удалить + две строки. + + 1) Летом я хожу на стадион, + 2) О, как внезапно кончился диван! + 3) Я болею за ``Зенит'', ``Зенит'' --- чемпион! + 4) Печально я гляжу на наше поколение! + 5) Его грядущее иль пусто иль темно... + 6) Я сижу на скамейке в ложе `Б' + 7) И играю на большой жестяной трубе. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 2.5: КОМАНДА `ОТКАТ' + + + ** Нажмите u для отмены результата работы предыдущей команды, U для отмены + исправлений во всей строке. ** + + 1. Переместите курсор вниз, к строке, помеченной ---> и установите его на + первую ошибку. + 2. Нажмите x для удаления первого неправильного символа. + 3. Теперь нажмите u для отмены (отката) последней выполненной команды. + 4. Исправьте все ошибки в строке, используя команду x . + 5. Теперь нажмите заглавную U для того, чтобы вернуть всю строку в исходное + состояние. + 6. Нажмите u несколько раз для отмены команды U и предыдущих команд. + 7. Нажмите теперь CTRL-R (удерживайте клавишу CTRL нажатой в момент нажатия + R) несколько раз для возврата команд (откат отката). + +---> Испрравьте оошибки в этойй строке и вернитте их сс помощьью `отката'. + + 8. Это были очень полезные команды. Далее переходите к Резюме Урока 2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 2 + + + 1. Для удаления текста от курсора до конца слова наберите: dw + + 2. Для удаления текста от курсора до конца строки наберите: d$ + + 3. Для удаления всей строки наберите: dd + + 4. Формат команды в обычном режиме имеет вид: + + [число] команда объект ИЛИ команда [число] объект + где: + число - сколько раз повторить выполнение команды + команда - что выполнить, например d для удаления + объект - на что должна воздействовать команда, например w (слово), + $ (до конца строки), и т.д. + + 5. Для отмены (отката) предшествующих действий наберите: u (строчная u) + Для отмены (отката) всех изменений в строке наберите: U (прописная U) + Для отмены отката наберите: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 3.1: КОМАНДА ВСТАВКИ + + + ** Наберите p для вставки последнего удаленного текста после курсора. ** + + 1. Переместите курсор вниз к последней строке из набора. + + 2. Наберите dd для удаления строки и ее сохранения в буфере Vim'а. + + 3. Переместите курсор к строке НАД тем местом, куда следует вставить + удаленную строку. + + 4. Находясь в обычном режиме наберите p для замены строки. + + 5. Повторите шаги 2--4, пока не расставите все строки в нужном порядке. + + г) И лучше выдумать не мог. + б) Когда не в шутку занемог, + в) Он уважать себя заставил + а) Мой дядя самых честных правил + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 3.2: КОМАНДА ЗАМЕНЫ + + + ** Наберите r и символ, заменяющий символ под курсором. ** + + 1. Переместите курсор вниз, к строке, помеченной --->. + + 2. Установите курсор так, чтобы он находился над первой ошибкой. + + 3. Наберите r и затем символ, исправляющий ошибку. + + 4. Повторите шаги 2 и 3, пока первая строка не будет исправлена. + +---> В момегт набтра этой чтроки кое0кто с трудом попвдал по клваишам! +---> В момент набора этой строки кое-кто с трудом попадал по клавишам! + + 5. Теперь переходите к Уроку 3.2. + +ЗАМЕЧАНИЕ: Помните, что вы должны учиться в процессе работы, а не просто + запоминая. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 3.3: КОМАНДА ИЗМЕНЕНИЯ + + + ** Для изменения части слова наберите cw . ** + + 1. Переместите курсор вниз, к строке, помеченной --->. + + 2. Расположите курсор над буквой `o' в слове `сола'. + + 3. Наберите cw и исправьте слово (в данном случае, наберите `лов'.) + + 4. Нажмите и переходите к следующей ошибке (к первому символу, который + надо изменить.) + + 5. Повторите шаги 3--4 пока первое предложение не станет идентичным второму. + +---> Несколько сола в эьгц строке тпгшцбь редалзкуюиесвх. +---> Несколько слов в этой строке требуют редактирования. + +Обратите внимание, что cw не только заменяет слово, но и переводит вас в режим +вставки. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 3.4: ПРОДОЛЖАЕМ ИЗМЕНЯТЬ С КОМАНДОЙ c + + +** Команда замены используется с теми же объектами, что и команда удаления. ** + + 1. Команда изменения применяется таким же образом, как и команда удаления. + Ее формат таков: + + [число] c объект ИЛИ c [число] объект + + 2. Объекты также совпадают: w (слово), $ (конец строки) и т.п. + + 3. Переместите курсор вниз, к строке, помеченной --->. + + 4. Перейдите к первой ошибке. + + 5. Наберите c$ и отредактируйте первую строку так, чтобы она совпадала со + второй, после чего нажмите . + +---> Конец этой строки нуждается в помощи, чтобы стать похожим на второй. +---> Конец этой строки нуждается в помощи команды c$ . + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 3 + + + 1. Для вставки текста, который только что был удален, наберите p . Эта + команда вставит удаленный текст ПОСЛЕ курсора (если была удалена строка, + то она будет помещена в строке под курсором). + + 2. Для замены символа под курсором наберите r и затем заменяющий символ. + + 3. Команда изменения позволяет Вам изменить указанный объект от курсора до + конца этого объекта. Например, наберите cw для замены от курсора до + конца слова, c$ для изменения до конца строки. + + 4. Формат команды изменения таков: + + [число] c объект ИЛИ c [число] объект + +Теперь отправляйтесь к следующему уроку. + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 4.1: ИНФОРМАЦИЯ О ФАЙЛЕ И РАСПОЛОЖЕНИЕ В НЕМ + + + ** Наберите CTRL-g чтобы увидеть Ваше месторасположение в файле и информацию + о нем. + Наберите SHIFT-G для перемещения к заданной строке в файле. ** + + Замечание: Прочитайте весь урок прежде чем выполнять любые команды!! + + 1. Удерживая клавишу Ctrl нажмите g . Внизу экрана появится строка статуса с + именем файла и номером строки, в которой Вы находитесь. Запомните номер + строки, он потребуется на Шаге 3. + + 2. Нажмите shift-G для перемещения к концу файла. + + 3. Наберите номер строки, в которой вы находились и затем shift-G. Это + вернет Вас к строке, в которой Вы были, когда в первый раз нажали Ctrl-g. + (Когда Вы будете набирать цифры, они НЕ отобразятся на экране.) + + 4. Если Вы запомнили все вышесказанное, выполните шаги 1--3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 4.2: КОМАНДА ПОИСКА + + ** Наберите / и затем введите искомую фразу. ** + + 1. В обычном режиме (Normal mode) наберите символ / . Обратите внимание, + что он вместе с курсором появится внизу экрана, как это происходит с + командой : . + + 2. Теперь наберите 'ошшшибка' . Это то слово, которое Вы будете + искать. + + 3. Для того, чтобы повторить поиск, просто нажмите n . + Для поиска этой фразы в обратном направлении, нажмите Shift-N . + + 4. Если Вы желаете сразу искать в обратном направлении, используйте + команду ? вместо / . + +---> Когда Вы при поиске достигнете конца файла, поиск будет продолжен с + начала. + + "ошшшибка" это не способ произнесения слова `ошибка'; ошшшибка это ошибка. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 4.3: ПОИСК ПАРНЫХ СКОБОК + + + ** Наберите % для поиска парных ),] или } . ** + + 1. Поместите курсор над любой из (, [ или { в строке внизу, помеченной --->. + + 2. Теперь наберите символ % . + + 3. Курсор должен перескочить на парную скобку. + + 4. Наберите % для возврата курсора назад к первой скобке. + +---> Это ( строка, содержащая такие (, такие [ ] и такие { } скобки. )) + +Замечание: Это очень удобно при отладке программ с пропущенными скобками! + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 4.4: СПОСОБ ИСПРАВЛЕНИЯ ОШИБОК + + + ** Наберите :s/было/стало/g для замены 'было' на 'стало'. ** + + 1. Переместите курсор вниз, к строке, помеченной --->. + + 2. Наберите :s/уводю/увожу . Обратите внимание на то, что эта команда + заменит только первое найденное вхождение в строке. + + 3. Теперь наберите :s/уводю/увожу/g , означающее подстановку глобально во + всей строке. Это заменит все найденные в строке вхождения. + +---> Я уводю к отверженным селеньям, я уводю сквозь вековечный стон, я уводю к + забытым поколеньям. + + 4. Для замены всех вхождений последовательности символов между двумя + строками, + наберите :#,#s/было/стало/g где #,# --- номера этих строк. + Наберите :%s/было/стало/g для замены всех вхождений во всем файле. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 4 + 1. Ctrl-g показывает ваше положение в файле и информацию о нем. + Shift-G перемещает Вас в конец файла. Номер, за которым следует Shift-G + позволяет перейти к строке с этим номером. + + 2. Нажатие / и затем ввод строки позволяет произвести поиск этой строки + ВПЕРЕД по тексту. + Нажатие ? и затем ввод строки позволяет произвести поиск этой строки + НАЗАД по тексту. + После поиска наберите n для перехода к следующему вхождению искомой + строки в том же направлении или Shift-N для перехода в противоположном + направлении. + + 3. Нажатие % , когда курсор находится на (,),[,],{, или } позволяет найти + парную скобку. + + 4. Для подстановки `стало' вместо первого `было' в строке, наберите + :s/old/new + Для подстановки `стало' вместо всех `было' в строке, наберите + :s/old/new/g + Для замены в интервале между двумя строками, наберите + :#,#s/old/new/g + Для замены всех вхождений `было' на `стало' в файле, наберите + :%s/old/new/g + Чтобы редактор каждый раз запрашивал подтверждение, добавьте 'c' + :%s/old/new/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 5.1: КАК ВЫПОЛНИТЬ ВНЕШНЮЮ КОМАНДУ + + + ** Наберите :! и затем внешнюю команду, которую следует выполнить. ** + + 1. Наберите уже знакомую Вам команду : для установки курсора в командную + строку редактора. Это позволит Вам ввести команду. + + 2. Теперь наберите символ ! (восклицательный знак). Теперь можно исполнить + внешнюю команду, используя командную оболочку. + + 3. Для примера наберите ls после ! и нажмите . Эта команда выведет + список файлов в текущем каталоге, точно также, как если бы Вы ввели эту + команду в приглашении оболочки. Или попробуйте :!dir , если предыдущая + команда не сработала. + +---> Замечание: Таким способом можно выполнить любую внешнюю команду. + +---> Замечание: Все команды, начинающиеся с : , должны завершаться нажатием + . + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 5.2: КАК ЗАПИСАТЬ ФАЙЛ + + +** Для сохранения изменений, произведенных в файле, наберите :w ИМЯ_ФАЙЛА. ** + + 1. Наберите :!dir или :!ls для получения списка файлов в текущем каталоге. + Как Вам уже известно, Вы должны нажать после ввода этих команд. + + 2. Придумайте название для файла, которое еще не существует, например TEST. + + 3. Теперь наберите :w TEST (где TEST --- это имя файла, придуманное Вами.) + + 4. Эта команда сохранит весь файл (Учебник по Vim) под именем TEST. Чтобы + удостовериться в этом, снова наберите :!dir и просмотрите каталог. + +---> Заметьте, что если Вы выйдете из Vim и затем запустите его снова с + файлом TEST, этот файл будет точной копией учебника в тот момент, когда + Вы его сохранили. + + 5. Теперь удалите этот файл, набрав :!del TEST + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 5.3: ВЫБОРОЧНОЕ СОХРАНЕНИЕ + + + ** Для сохранения части файла, наберите :#,# w ИМЯ_ФАЙЛА ** + + 1. Еще раз наберите :!dir или :!ls для получения списка файлов в текущем + каталоге и выберите подходящее имя, например TEST. + + 2. Переместите курсор к началу этой страницы и нажмите Ctrl-g для нахождения + номера строкиto. ЗАПОМНИТЕ ЭТОТ НОМЕР! + + 3. Теперь переместитесь в конец страницы и вновь наберите Ctrl-g. ЗАПОМНИТЕ + И ЭТОТ НОМЕР ТОЖЕ! + + 4. Для сохранения ТОЛЬКО ЧАСТИ файла наберите :#,# w TEST , где #,# --- это + номера, которые Вы запомнили (начало, конец), а TEST --- имя вашего файла. + + 5. Как и прежде, убедитесь в наличии этого файла командой :!dir , но НЕ + УДАЛЯЙТЕ его. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 5.4: ЧТЕНИЕ И ОБЪЕДИНЕНИЕ ФАЙЛОВ + + ** Для вставки содержимого файла, наберите :r FILENAME ** + + 1. Наберите :!dir для того, чтобы убедиться в том, что файл TEST все еще + существует. + + 2. Установите курсор в верхней части этой страницы. + +Замечание: После выполнения шага 3 Вы увидите Урок 5.3. После этого + перемещайтесь ВНИЗ, снова к этому уроку. + + 3. Теперь прочитайте Ваш файл TEST, используя команду :r TEST , где + TEST --- это имя файла. + +Замечание: Прочитанный Вами файл будет вставлен в том месте, где находится + курсор. + + 4. Чтобы убедиться в том, что файл прочитан, переместитесь немного назад по + тексту и заметьте, что теперь существуют две копии Урока 5.3, исходная + и полученная из файла. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 5 + + + 1. :!команда исполняет внешнюю команду. + + Некоторые полезные примеры: + :!dir --- выводит список файлов в каталоге. + :!del FILENAME --- удаляет файл FILENAME. + + 2. :w FILENAME записывает текущий редактируемый файл на диск + под именем FILENAME. + + 3. :#,#w FILENAME сохраняет строки от # до # в файл FILENAME. + + 4. :r FILENAME считывает с диска файл FILENAME и помещает его в текущий + файл следом за позицией курсора. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 6.1: КОМАНДА СОЗДАНИЯ + + + ** Наберите o чтобы создать пустую строку под курсором и перейти в режим + вставки (Insert mode) ** + + 1. Переместите курсор вниз, к строке, помеченной --->. + + 2. Наберите o (в нижнем регистре) для того, чтобы создать пустую строку + НИЖЕ курсора и перейти в режим вставки (Insert mode). + + 3. Теперь скопируйте помеченную ---> строку и нажмите для выхода из + режима вставки. + +---> После нажатия o курсор перейдет на новую пустую строку в режиме вставки. + + 4. Для создания строки ВЫШЕ курсора, просто наберите заглавную O, вместо + строчной o. Попробуйте проделать это с нижеследующей строкой. +Создайте новую строку над этой, нажав Shift-O, поместив курсор на эту строку. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 6.2: КОМАНДА ДОБАВЛЕНИЯ + + ** Наберите a , чтобы вставить текст ПОСЛЕ курсора. ** + + 1. Переместите курсор вниз, в конец первой строки, помеченной ---> , + набрав $ в обычном режиме (Normal mode). + + 2. Наберите a (в нижнем регистре) для добавления текста ПОСЛЕ символа, + находящегося под курсором. (Заглавная A позволяет добавить в конец + строки.) + +Замечание: Это позволяет избежать нажатия i , последнего символа, текста для + вставки, , курсор-вправо, и, наконец, x , просто для того, + чтобы добавить тест в конец строки! + + 3. Теперь завершите первую строку. Заметьте также, что добавление это в + точности то же самое, что и режим вставки, за исключением позиции, в + которую будет вставлен текст. + +---> Эта строчка позволит Вам попрактиковаться +---> Эта строчка позволит Вам попрактиковаться в добавлении текста в конец + строки. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 6.3: ЕЩЕ ОДИН СПОСОБ ЗАМЕНЫ + + + ** Наберите заглавную R для замены более, чем одного символа. ** + + 1. Переместите курсор вниз, к строке, помеченной --->. + + 2. Расположите курсор в начале первого слова, отличающегося от + соответствующего в следующей строке, помеченной ---> (слово 'последней'). + + 3. Теперь наберите R и замените остаток текста в первой строке, набрав + поверх старого текста так, чтобы обе строки стали одинаковыми. + +---> Первую строку можно сравнять с последней, используя клавиши. +---> Первую строку можно сравнять с второй, используя R и набрав новый текст. + + 4. Обратите внимание, что при нажатии для завершения, любой + не измененный текст сохранится. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 6.4: УСТАНОВКА ПАРАМЕТРОВ + + +** Установим параметры так, чтобы игнорировать регистр при поиске или замене ** + + + 1. Поищите слово 'игнорировать', набрав: + /игнорировать + Повторите поиск несколько раз, нажимая клавишу n + + 2. Включите параметр 'ic' (Игнорировать регистр), набрав: + :set ic + + 3. Теперь снова сделайте поиск слова 'игнорировать', нажав: n + Повторите поиск несколько раз, нажимая клавишу n + + 4. Включите параметры 'hlsearch' и 'incsearch': + :set hls is + + 5. Теперь опять введите команду поиска и посмотрите, что получится: + /игнорировать + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + РЕЗЮМЕ УРОКА 6 + + + 1. Нажатие o создает строку НИЖЕ курсора и перемещает курсор в нее в режиме + вставки. + Нажатие заглавной O создает строку ВЫШЕ строки, в которой находится + курсор. + + 2. Наберите a для вставки текста ПОСЛЕ символа, на котором находится курсор. + Нажатие заглавной A автоматически перемещает Вас для добавления текста + в конец строки. + + 3. Нажатие заглавной R переводит Вас в режим замены до тех пор, пока не + будет нажата клавиша для завершения. + + 4. Набрав ":set xxx" вы сможете включить параметр "xxx" + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Урок 7: КОМАНДЫ ПОЛУЧЕНИЯ ВСТРОЕННОЙ СПРАВКИ + + ** Используйте встроенную справочную систему ** + + Vim обладает мощной встроенной справочной системой. Для начала попробуйте + один из трех вариантов: + - нажмите клавишу (если таковая имеется на клавиатуре) + - нажмите клавишу (если таковая имеется на клавиатуре) + - наберите :help + + Наберите :q чтобы закрыть окно справки. + + Вы можете найти справку для любого понятия или команды, просто задав + соответствующий аргумент команде ":help". Попробуйте следующее (не забудьте + нажать ): + + :help w + :help c_, 2002. + Translator: Andrey Kiselev , 2002. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff -Naur vim70.orig/runtime/tutor/tutor.vim vim70/runtime/tutor/tutor.vim --- vim70.orig/runtime/tutor/tutor.vim 2006-03-18 20:20:36.000000000 +0000 +++ vim70/runtime/tutor/tutor.vim 2006-10-29 11:54:26.000000000 +0000 @@ -1,6 +1,6 @@ " Vim tutor support file " Author: Eduardo F. Amatria -" Last Change: 2006 Mar 18 +" Last Change: 2006 Sep 09 " This small source file is used for detecting if a translation of the " tutor file exist, i.e., a tutor.xx file, where xx is the language. @@ -93,9 +93,16 @@ endif endif -" The Greek tutor is available in two encodings, guess which one to use -if s:ext =~? '\.gr' && &enc =~ 737 - let s:ext = ".gr.cp737" +" The Greek tutor is available in three encodings, guess what to use. +" We used ".gr" (Greece) instead of ".el" (Greek); accept both. +if s:ext =~? '\.gr\|\.el' + if &enc == "iso-8859-7" + let s:ext = ".gr" + elseif &enc == "utf-8" + let s:ext = ".gr.utf-8" + elseif &enc =~ 737 + let s:ext = ".gr.cp737" + endif endif " The Slovak tutor is available in two encodings, guess which one to use @@ -103,11 +110,15 @@ let s:ext = ".sk.cp1250" endif -" The Russian tutor is available in two encodings, guess which one to use. -" This segment is from the above lines and modified by -" Alexey I. Froloff for Russian vim tutorial -if s:ext =~? '\.ru' && &enc =~ 1251 - let s:ext = ".ru.cp1251" +" The Russian tutor is available in three encodings, guess which one to use. +if s:ext =~? '\.ru' + if &enc == 'utf-8' + let s:ext = '.ru.utf-8' + elseif &enc =~ '1251' + let s:ext = '.ru.cp1251' + elseif &enc =~ 'koi8' + let s:ext = '.ru' + endif endif " Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch). diff -Naur vim70.orig/src/Makefile vim70/src/Makefile --- vim70.orig/src/Makefile 2006-05-07 13:25:27.000000000 +0000 +++ vim70/src/Makefile 2006-10-29 11:54:25.000000000 +0000 @@ -2177,6 +2177,7 @@ cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* . if test -d $(RSRC_DIR); then \ cd $(SHADOWDIR); \ + ln -s ../infplist.xml .; \ ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \ fi mkdir $(SHADOWDIR)/testdir @@ -2260,7 +2261,7 @@ auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh -QUOTESED = sed -e 's/"/\\"/g' -e 's/\\"/"/' -e 's/\\";$$/";/' +QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/' auto/pathdef.c: Makefile auto/config.mk -@echo creating $@ -@echo '/* pathdef.c */' > $@ diff -Naur vim70.orig/src/auto/configure vim70/src/auto/configure --- vim70.orig/src/auto/configure 2006-05-04 10:46:19.000000000 +0000 +++ vim70/src/auto/configure 2006-10-29 11:54:26.000000000 +0000 @@ -4014,7 +4014,7 @@ LDFLAGS=$ldflags_save if test $perl_ok = yes; then if test "X$perlcppflags" != "X"; then - PERL_CFLAGS="$perlcppflags" + PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'` fi if test "X$perlldflags" != "X"; then LDFLAGS="$perlldflags $LDFLAGS" @@ -4256,7 +4256,7 @@ echo $ECHO_N "checking if -pthread should be used... $ECHO_C" >&6 threadsafe_flag= thread_lib= - if test "x$MACOSX" != "xyes"; then + if test "`(uname) 2>/dev/null`" != Darwin; then test "$GCC" = yes && threadsafe_flag="-pthread" if test "`(uname) 2>/dev/null`" = FreeBSD; then threadsafe_flag="-D_THREAD_SAFE" @@ -11555,8 +11555,8 @@ else echo "$as_me:$LINENO: result: empty: automatic terminal library selection" >&5 echo "${ECHO_T}empty: automatic terminal library selection" >&6 - case "`uname -s 2>/dev/null`" in - OSF1) tlibs="ncurses curses termlib termcap";; + case "`uname -s 2>/dev/null`" in + OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";; *) tlibs="ncurses termlib termcap curses";; esac for libname in $tlibs; do @@ -15302,7 +15302,7 @@ && test "x$GUITYPE" != "xCARBONGUI"; then echo "$as_me:$LINENO: checking whether we need -framework Carbon" >&5 echo $ECHO_N "checking whether we need -framework Carbon... $ECHO_C" >&6 - if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \ + if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \ || test "x$features" = "xhuge"; then LIBS="$LIBS -framework Carbon" echo "$as_me:$LINENO: result: yes" >&5 diff -Naur vim70.orig/src/buffer.c vim70/src/buffer.c --- vim70.orig/src/buffer.c 2006-04-26 21:37:23.000000000 +0000 +++ vim70/src/buffer.c 2006-10-29 11:54:26.000000000 +0000 @@ -434,12 +434,8 @@ if (usingNetbeans) netbeans_file_closed(buf); #endif -#ifdef FEAT_AUTOCHDIR - /* Change directories when the acd option is set on. */ - if (p_acd && curbuf->b_ffname != NULL - && vim_chdirfile(curbuf->b_ffname) == OK) - shorten_fnames(TRUE); -#endif + /* Change directories when the 'acd' option is set. */ + DO_AUTOCHDIR /* * Remove the buffer from the list. @@ -1212,11 +1208,11 @@ { # ifdef FEAT_WINDOWS /* jump to first window containing buf if one exists ("useopen") */ - if (vim_strchr(p_swb, 'o') && buf_jump_open_win(buf)) + if (vim_strchr(p_swb, 'o') != NULL && buf_jump_open_win(buf)) return OK; /* jump to first window in any tab page containing buf if one exists * ("usetab") */ - if (vim_strchr(p_swb, 'a') && buf_jump_open_tab(buf)) + if (vim_strchr(p_swb, 'a') != NULL && buf_jump_open_tab(buf)) return OK; if (win_split(0, 0) == FAIL) # endif @@ -1390,7 +1386,8 @@ } else { - need_fileinfo = TRUE; /* display file info after redraw */ + if (!msg_silent) + need_fileinfo = TRUE; /* display file info after redraw */ (void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */ #ifdef FEAT_AUTOCMD curwin->w_topline = 1; @@ -1422,12 +1419,8 @@ netbeans_file_activated(curbuf); #endif -#ifdef FEAT_AUTOCHDIR - /* Change directories when the acd option is set on. */ - if (p_acd && curbuf->b_ffname != NULL - && vim_chdirfile(curbuf->b_ffname) == OK) - shorten_fnames(TRUE); -#endif + /* Change directories when the 'acd' option is set. */ + DO_AUTOCHDIR #ifdef FEAT_KEYMAP if (curbuf->b_kmap_state & KEYMAP_INIT) @@ -1436,6 +1429,18 @@ redraw_later(NOT_VALID); } +#if defined(FEAT_AUTOCHDIR) || defined(PROTO) +/* + * Change to the directory of the current buffer. + */ + void +do_autochdir() +{ + if (curbuf->b_ffname != NULL && vim_chdirfile(curbuf->b_ffname) == OK) + shorten_fnames(TRUE); +} +#endif + /* * functions for dealing with the buffer list */ @@ -1837,13 +1842,13 @@ if (options & GETF_SWITCH) { /* use existing open window for buffer if wanted */ - if (vim_strchr(p_swb, 'o')) /* useopen */ + if (vim_strchr(p_swb, 'o') != NULL) /* useopen */ wp = buf_jump_open_win(buf); /* use existing open window in any tab page for buffer if wanted */ - if (vim_strchr(p_swb, 'a')) /* usetab */ + if (vim_strchr(p_swb, 'a') != NULL) /* usetab */ wp = buf_jump_open_tab(buf); /* split window if wanted ("split") */ - if (wp == NULL && vim_strchr(p_swb, 't') && !bufempty()) + if (wp == NULL && vim_strchr(p_swb, 'l') != NULL && !bufempty()) { if (win_split(0, 0) == FAIL) return FAIL; @@ -3324,7 +3329,7 @@ { usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox); if (usefmt == NULL) - usefmt = (char_u *)""; + usefmt = fmt; } #endif @@ -5420,11 +5425,7 @@ buf_T *newbuf; int differ = TRUE; linenr_T lnum; -#ifdef FEAT_AUTOCMD aco_save_T aco; -#else - buf_T *old_curbuf = curbuf; -#endif exarg_T ea; /* Allocate a buffer without putting it in the buffer list. */ @@ -5439,13 +5440,8 @@ return TRUE; } -#ifdef FEAT_AUTOCMD /* set curwin/curbuf to buf and save a few things */ aucmd_prepbuf(&aco, newbuf); -#else - curbuf = newbuf; - curwin->w_buffer = newbuf; -#endif if (ml_open(curbuf) == OK && readfile(buf->b_ffname, buf->b_fname, @@ -5466,13 +5462,8 @@ } vim_free(ea.cmd); -#ifdef FEAT_AUTOCMD /* restore curwin/curbuf and a few other things */ aucmd_restbuf(&aco); -#else - curbuf = old_curbuf; - curwin->w_buffer = old_curbuf; -#endif if (curbuf != newbuf) /* safety check */ wipe_buffer(newbuf, FALSE); diff -Naur vim70.orig/src/configure vim70/src/configure --- vim70.orig/src/configure 2006-05-07 14:17:49.000000000 +0000 +++ vim70/src/configure 2006-10-29 11:54:25.000000000 +0000 @@ -2,5 +2,9 @@ # run the automatically generated configure script CONFIG_STATUS=auto/config.status \ auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache +result=$? + # Stupid autoconf 2.5x causes this file to be left behind. if test -f configure.lineno; then rm -f configure.lineno; fi + +exit $result diff -Naur vim70.orig/src/configure.in vim70/src/configure.in --- vim70.orig/src/configure.in 2006-05-04 10:46:11.000000000 +0000 +++ vim70/src/configure.in 2006-10-29 11:54:26.000000000 +0000 @@ -508,7 +508,8 @@ LDFLAGS=$ldflags_save if test $perl_ok = yes; then if test "X$perlcppflags" != "X"; then - PERL_CFLAGS="$perlcppflags" + dnl remove -pipe, it confuses cproto + PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'` fi if test "X$perlldflags" != "X"; then LDFLAGS="$perlldflags $LDFLAGS" @@ -680,7 +681,8 @@ AC_MSG_CHECKING([if -pthread should be used]) threadsafe_flag= thread_lib= - if test "x$MACOSX" != "xyes"; then + dnl if test "x$MACOSX" != "xyes"; then + if test "`(uname) 2>/dev/null`" != Darwin; then test "$GCC" = yes && threadsafe_flag="-pthread" if test "`(uname) 2>/dev/null`" = FreeBSD; then threadsafe_flag="-D_THREAD_SAFE" @@ -2150,8 +2152,9 @@ dnl Newer versions of ncurses are preferred over anything. dnl Older versions of ncurses have bugs, get a new one! dnl Digital Unix (OSF1) should use curses (Ronald Schild). + dnl On SCO Openserver should prefer termlib (Roger Cornelius). case "`uname -s 2>/dev/null`" in - OSF1) tlibs="ncurses curses termlib termcap";; + OSF1|SCO_SV) tlibs="ncurses curses termlib termcap";; *) tlibs="ncurses termlib termcap curses";; esac for libname in $tlibs; do @@ -2835,7 +2838,7 @@ && test "x$GUITYPE" != "xCARBONGUI"; then AC_MSG_CHECKING(whether we need -framework Carbon) dnl check for MACOSX without Carbon GUI, but with FEAT_MBYTE - if test "x$enable_multibyte" = "xyes" || test "x$features" == "xbig" \ + if test "x$enable_multibyte" = "xyes" || test "x$features" = "xbig" \ || test "x$features" = "xhuge"; then LIBS="$LIBS -framework Carbon" AC_MSG_RESULT(yes) diff -Naur vim70.orig/src/edit.c vim70/src/edit.c --- vim70.orig/src/edit.c 2006-05-07 11:48:51.000000000 +0000 +++ vim70/src/edit.c 2006-10-29 11:54:26.000000000 +0000 @@ -129,7 +129,7 @@ static void ins_ctrl_x __ARGS((void)); static int has_compl_option __ARGS((int dict_opt)); -static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int dup)); +static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup)); static int ins_compl_equal __ARGS((compl_T *match, char_u *str, int len)); static void ins_compl_longest_match __ARGS((compl_T *match)); static void ins_compl_add_matches __ARGS((int num_matches, char_u **matches, int icase)); @@ -707,6 +707,11 @@ lastc = c; /* remember previous char for CTRL-D */ c = safe_vgetc(); +#ifdef FEAT_AUTOCMD + /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */ + did_cursorhold = TRUE; +#endif + #ifdef FEAT_RIGHTLEFT if (p_hkmap && KeyTyped) c = hkmap(c); /* Hebrew mode mapping */ @@ -719,9 +724,14 @@ #ifdef FEAT_INS_EXPAND /* * Special handling of keys while the popup menu is visible or wanted - * and the cursor is still in the completed word. + * and the cursor is still in the completed word. Only when there is + * a match, skip this when no matches were found. */ - if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col) + if (compl_started + && pum_wanted() + && curwin->w_cursor.col >= compl_col + && (compl_shown_match == NULL + || compl_shown_match != compl_shown_match->cp_next)) { /* BS: Delete one character from "compl_leader". */ if ((c == K_BS || c == Ctrl_H) @@ -751,7 +761,7 @@ continue; } - /* Pressing CTRL-Y selects the current match. Shen + /* Pressing CTRL-Y selects the current match. When * compl_enter_selects is set the Enter key does the same. */ if (c == Ctrl_Y || (compl_enter_selects && (c == CAR || c == K_KENTER || c == NL))) @@ -877,6 +887,7 @@ /* Close the cmdline window. */ cmdwin_result = K_IGNORE; got_int = FALSE; /* don't stop executing autocommands et al. */ + nomove = TRUE; goto doESCkey; } #endif @@ -912,6 +923,7 @@ if (cmdchar != 'r' && cmdchar != 'v') apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL, FALSE, curbuf); + did_cursorhold = FALSE; #endif return (c == Ctrl_O); } @@ -1383,6 +1395,12 @@ break; } /* end of switch (c) */ +#ifdef FEAT_AUTOCMD + /* If typed something may trigger CursorHoldI again. */ + if (c != K_CURSORHOLD) + did_cursorhold = FALSE; +#endif + /* If the cursor was moved we didn't just insert a space */ if (arrow_used) inserted_space = FALSE; @@ -2112,7 +2130,7 @@ * maybe because alloc() returns NULL, then FAIL is returned. */ static int -ins_compl_add(str, len, icase, fname, cptext, cdir, flags, dup) +ins_compl_add(str, len, icase, fname, cptext, cdir, flags, adup) char_u *str; int len; int icase; @@ -2120,7 +2138,7 @@ char_u **cptext; /* extra text for popup menu or NULL */ int cdir; int flags; - int dup; /* accept duplicate match */ + int adup; /* accept duplicate match */ { compl_T *match; int dir = (cdir == 0 ? compl_direction : cdir); @@ -2134,13 +2152,13 @@ /* * If the same match is already present, don't add it. */ - if (compl_first_match != NULL && !dup) + if (compl_first_match != NULL && !adup) { match = compl_first_match; do { if ( !(match->cp_flags & ORIGINAL_TEXT) - && ins_compl_equal(match, str, len) + && STRNCMP(match->cp_str, str, len) == 0 && match->cp_str[len] == NUL) return NOTDONE; match = match->cp_next; @@ -2399,7 +2417,7 @@ /* compl_pattern doesn't need to be set */ compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length); if (compl_orig_text == NULL || ins_compl_add(compl_orig_text, - -1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK) + -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK) return; /* Handle like dictionary completion. */ @@ -2409,6 +2427,7 @@ compl_matches = ins_compl_make_cyclic(); compl_started = TRUE; compl_used_match = TRUE; + compl_cont_status = 0; compl_curr_match = compl_first_match; ins_complete(Ctrl_N); @@ -2753,6 +2772,7 @@ } else # endif + if (count > 0) /* avoid warning for using "files" uninit */ { ins_compl_files(count, files, thesaurus, flags, ®match, buf, &dir); @@ -2813,7 +2833,7 @@ ptr = find_word_end(ptr); add_r = ins_compl_add_infercase(regmatch->startp[0], (int)(ptr - regmatch->startp[0]), - FALSE, files[i], *dir, 0); + p_ic, files[i], *dir, 0); if (thesaurus) { char_u *wstart; @@ -2849,7 +2869,7 @@ ptr = find_word_end(ptr); add_r = ins_compl_add_infercase(wstart, (int)(ptr - wstart), - FALSE, files[i], *dir, 0); + p_ic, files[i], *dir, 0); } } if (add_r == OK) @@ -3015,9 +3035,6 @@ if ((int)(p - line) - (int)compl_col <= 0) return K_BS; - /* For redo we need to repeat this backspace. */ - AppendCharToRedobuff(K_BS); - /* Deleted more than what was used to find matches or didn't finish * finding all matches: need to look for matches all over again. */ if (curwin->w_cursor.col <= compl_col + compl_length @@ -3046,7 +3063,6 @@ ins_compl_delete(); ins_bytes(compl_leader + curwin->w_cursor.col - compl_col); compl_used_match = FALSE; - compl_enter_selects = FALSE; if (compl_started) ins_compl_set_original_text(compl_leader); @@ -3076,6 +3092,7 @@ compl_restarting = FALSE; } +#if 0 /* disabled, made CTRL-L, BS and typing char jump to original text. */ if (!compl_used_match) { /* Go to the original text, since none of the matches is inserted. */ @@ -3087,9 +3104,15 @@ compl_curr_match = compl_shown_match; compl_shows_dir = compl_direction; } +#endif + compl_enter_selects = !compl_used_match; /* Show the popup menu with a different set of matches. */ ins_compl_show_pum(); + + /* Don't let Enter select the original text when there is no popup menu. */ + if (compl_match_array == NULL) + compl_enter_selects = FALSE; } /* @@ -3115,10 +3138,6 @@ #endif ins_char(c); - /* For redo we need to count this character so that the number of - * backspaces is correct. */ - AppendCharToRedobuff(c); - /* If we didn't complete finding matches we must search again. */ if (compl_was_interrupted) ins_compl_restart(); @@ -3175,10 +3194,33 @@ char_u *p; int len = curwin->w_cursor.col - compl_col; int c; + compl_T *cp; p = compl_shown_match->cp_str; if ((int)STRLEN(p) <= len) /* the match is too short */ - return; + { + /* When still at the original match use the first entry that matches + * the leader. */ + if (compl_shown_match->cp_flags & ORIGINAL_TEXT) + { + p = NULL; + for (cp = compl_shown_match->cp_next; cp != NULL + && cp != compl_first_match; cp = cp->cp_next) + { + if (compl_leader == NULL + || ins_compl_equal(cp, compl_leader, + (int)STRLEN(compl_leader))) + { + p = cp->cp_str; + break; + } + } + if (p == NULL || (int)STRLEN(p) <= len) + return; + } + else + return; + } p += len; #ifdef FEAT_MBYTE c = mb_ptr2char(p); @@ -3198,7 +3240,6 @@ int c; { char_u *ptr; - int temp; int want_cindent; int retval = FALSE; @@ -3354,6 +3395,7 @@ if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E) { char_u *p; + int temp = 0; /* * If any of the original typed text has been changed, eg when @@ -3369,16 +3411,21 @@ ptr = compl_leader; else ptr = compl_orig_text; - p = compl_orig_text; - for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp) - ; + if (compl_orig_text != NULL) + { + p = compl_orig_text; + for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; + ++temp) + ; #ifdef FEAT_MBYTE - if (temp > 0) - temp -= (*mb_head_off)(compl_orig_text, p + temp); + if (temp > 0) + temp -= (*mb_head_off)(compl_orig_text, p + temp); #endif - for (p += temp; *p != NUL; mb_ptr_adv(p)) - AppendCharToRedobuff(K_BS); - AppendToRedobuffLit(ptr + temp, -1); + for (p += temp; *p != NUL; mb_ptr_adv(p)) + AppendCharToRedobuff(K_BS); + } + if (ptr != NULL) + AppendToRedobuffLit(ptr + temp, -1); } #ifdef FEAT_CINDENT @@ -3578,7 +3625,7 @@ { char_u *word; int icase = FALSE; - int dup = FALSE; + int adup = FALSE; char_u *(cptext[CPT_COUNT]); if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) @@ -3595,7 +3642,7 @@ if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL) icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase"); if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL) - dup = get_dict_number(tv->vval.v_dict, (char_u *)"dup"); + adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup"); } else { @@ -3604,7 +3651,7 @@ } if (word == NULL || *word == NUL) return FAIL; - return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, dup); + return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup); } #endif @@ -3796,7 +3843,7 @@ TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0), TAG_MANY, curbuf->b_ffname) == OK && num_matches > 0) { - ins_compl_add_matches(num_matches, matches, FALSE); + ins_compl_add_matches(num_matches, matches, p_ic); } p_ic = save_p_ic; break; @@ -3837,7 +3884,7 @@ num_matches = expand_spelling(first_match_pos.lnum, first_match_pos.col, compl_pattern, &matches); if (num_matches > 0) - ins_compl_add_matches(num_matches, matches, FALSE); + ins_compl_add_matches(num_matches, matches, p_ic); #endif break; @@ -3862,6 +3909,8 @@ { int flags = 0; + ++msg_silent; /* Don't want messages for wrapscan. */ + /* ctrl_x_mode == CTRL_X_WHOLE_LINE || word-wise search that * has