source: patches/vim-7.0-fixes-13.patch@ 508ef41

clfs-1.2 clfs-2.1 clfs-3.0.0-systemd clfs-3.0.0-sysvinit systemd sysvinit
Last change on this file since 508ef41 was 9903b4e, checked in by Jim Gifford <clfs@…>, 18 years ago

Updated vim patch

  • Property mode set to 100644
File size: 236.4 KB
  • configure

    Submitted By: Jim Gifford (jim at linuxfromscratch dot org)
    Date: 2006-09-18
    Initial Package Version: 7.0
    Origin: Upstream
    Upstream Status: Applied
    Description: Contains Patch 001-004, 006-026, 028-031, 033-044, 036-056,
            058-064, 066-073, 075-107, and 109  from Upstream
            005, 027, 032, 045, 057, 066, 074, 108  are for the extras, Mac, or
            Windows 32 only
    
    diff -Naur vim70.orig/configure vim70/configure
    old new  
    33# This is just a stub for the Unix configure script, to provide support for
    44# doing "./configure" in the top Vim directory.
    55
    6 cd src && ./configure "$@"
     6cd src && exec ./configure "$@"
  • runtime/autoload/ccomplete.vim

    diff -Naur vim70.orig/runtime/autoload/ccomplete.vim vim70/runtime/autoload/ccomplete.vim
    old new  
    11" Vim completion script
    22" Language:     C
    33" Maintainer:   Bram Moolenaar <Bram@vim.org>
    4 " Last Change:  2006 May 03
     4" Last Change:  2006 May 08
    55
    66
    77" This function is used for the 'omnifunc' option.
     
    458458" member.
    459459function! s:StructMembers(typename, items, all)
    460460  " Todo: What about local structures?
    461   let fnames = join(map(tagfiles(), 'escape(v:val, " \\")'))
     461  let fnames = join(map(tagfiles(), 'escape(v:val, " \\#%")'))
    462462  if fnames == ''
    463463    return []
    464464  endif
  • runtime/autoload/gzip.vim

    diff -Naur vim70.orig/runtime/autoload/gzip.vim vim70/runtime/autoload/gzip.vim
    old new  
    11" Vim autoload file for editing compressed files.
    22" Maintainer: Bram Moolenaar <Bram@vim.org>
    3 " Last Change: 2006 Mar 31
     3" Last Change: 2006 Jul 19
    44
    55" These functions are used by the gzip plugin.
    66
     
    127127    let nmt = s:tempname(nm)
    128128    if rename(nm, nmt) == 0
    129129      if exists("b:gzip_comp_arg")
    130         call system(a:cmd . " " . b:gzip_comp_arg . " " . nmt)
     130        call system(a:cmd . " " . b:gzip_comp_arg . " '" . nmt . "'")
    131131      else
    132         call system(a:cmd . " " . nmt)
     132        call system(a:cmd . " '" . nmt . "'")
    133133      endif
    134134      call rename(nmt . "." . expand("<afile>:e"), nm)
    135135    endif
  • runtime/autoload/paste.vim

    diff -Naur vim70.orig/runtime/autoload/paste.vim vim70/runtime/autoload/paste.vim
    old new  
    11" Vim support file to help with paste mappings and menus
    22" Maintainer:   Bram Moolenaar <Bram@vim.org>
    3 " Last Change:  2006 Apr 21
     3" Last Change:  2006 Jun 23
    44
    55" Define the string to use for items that are present both in Edit, Popup and
    66" Toolbar menu.  Also used in mswin.vim and macmap.vim.
     
    1212if has("virtualedit")
    1313  let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
    1414  let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
    15   let paste#paste_cmd['i'] = '<Esc>' . paste#paste_cmd['n'] . 'gi'
     15  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'
    1616
    1717  func! paste#Paste()
    1818    let ove = &ve
  • runtime/autoload/spellfile.vim

    diff -Naur vim70.orig/runtime/autoload/spellfile.vim vim70/runtime/autoload/spellfile.vim
    old new  
    11" Vim script to download a missing spell file
    22" Maintainer:   Bram Moolenaar <Bram@vim.org>
    3 " Last Change:  2006 Feb 01
     3" Last Change:  2006 Aug 29
    44
    55if !exists('g:spellfile_URL')
    6   let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/unstable/runtime/spell'
     6  let g:spellfile_URL = 'ftp://ftp.vim.org/pub/vim/runtime/spell'
    77endif
    88let s:spellfile_URL = ''    " Start with nothing so that s:donedict is reset.
    99
     
    6161    new
    6262    setlocal bin
    6363    echo 'Downloading ' . fname . '...'
    64     exe 'Nread ' g:spellfile_URL . '/' . fname
     64    call spellfile#Nread(fname)
    6565    if getline(2) !~ 'VIMspell'
    6666      " Didn't work, perhaps there is an ASCII one.
    6767      g/^/d
    6868      let fname = a:lang . '.ascii.spl'
    6969      echo 'Could not find it, trying ' . fname . '...'
    70       exe 'Nread ' g:spellfile_URL . '/' . fname
     70      call spellfile#Nread(fname)
    7171      if getline(2) !~ 'VIMspell'
    7272        echo 'Sorry, downloading failed'
    7373        bwipe!
     
    9595        g/^/d
    9696        let fname = substitute(fname, '\.spl$', '.sug', '')
    9797        echo 'Downloading ' . fname . '...'
    98         exe 'Nread ' g:spellfile_URL . '/' . fname
     98        call spellfile#Nread(fname)
    9999        if getline(2) !~ 'VIMsug'
    100100          echo 'Sorry, downloading failed'
    101101        else
     
    109109    bwipe
    110110  endif
    111111endfunc
     112
     113" Read "fname" from the server.
     114function! spellfile#Nread(fname)
     115  if g:spellfile_URL =~ '^ftp://'
     116    " for an ftp server use a default login and password to avoid a prompt
     117    let machine = substitute(g:spellfile_URL, 'ftp://\([^/]*\).*', '\1', '')
     118    let dir = substitute(g:spellfile_URL, 'ftp://[^/]*/\(.*\)', '\1', '')
     119    exe 'Nread "' . machine . ' anonymous vim7user ' . dir . '/' . a:fname . '"'
     120  else
     121    exe 'Nread ' g:spellfile_URL . '/' . a:fname
     122  endif
     123endfunc
  • runtime/menu.vim

    diff -Naur vim70.orig/runtime/menu.vim vim70/runtime/menu.vim
    old new  
    22" You can also use this as a start for your own set of menus.
    33"
    44" Maintainer:   Bram Moolenaar <Bram@vim.org>
    5 " Last Change:  2006 Apr 17
     5" Last Change:  2006 Sep 14
    66
    77" Note that ":an" (short for ":anoremenu") is often used to make a menu work
    88" in all modes and avoid side effects from mappings defined by the user.
     
    885885    if exists("s:changeitem") && s:changeitem != ''
    886886      call <SID>SpellDel()
    887887    endif
     888
     889    " Return quickly if spell checking is not enabled.
    888890    if !&spell || &spelllang == ''
    889891      return
    890892    endif
     
    908910        let s:fromword = w
    909911        let pri = 1
    910912        for sug in s:suglist
    911           exe 'amenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
     913          exe 'anoremenu 1.5.' . pri . ' PopUp.' . s:changeitem . '.' . escape(sug, ' .')
    912914                \ . ' :call <SID>SpellReplace(' . pri . ')<CR>'
    913915          let pri += 1
    914916        endfor
    915917
    916918        let s:additem = 'add\ "' . escape(w, ' .') . '"\ to\ word\ list'
    917         exe 'amenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
     919        exe 'anoremenu 1.6 PopUp.' . s:additem . ' :spellgood ' . w . '<CR>'
    918920
    919921        let s:ignoreitem = 'ignore\ "' . escape(w, ' .') . '"'
    920         exe 'amenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
     922        exe 'anoremenu 1.7 PopUp.' . s:ignoreitem . ' :spellgood! ' . w . '<CR>'
    921923
    922         amenu 1.8 PopUp.-SpellSep- :
     924        anoremenu 1.8 PopUp.-SpellSep- :
    923925      endif
    924926    endif
    925927  endfunc
     
    938940    let s:changeitem = ''
    939941  endfun
    940942
    941   au! MenuPopup * call <SID>SpellPopup()
     943  augroup SpellPopupMenu
     944    au! MenuPopup * call <SID>SpellPopup()
     945  augroup END
    942946endif
    943947
    944948" The GUI toolbar (for MS-Windows and GTK)
     
    10131017    tmenu ToolBar.FindPrev      Find Previous
    10141018    tmenu ToolBar.Replace               Find / Replace...
    10151019  endif
    1016   tmenu ToolBar.LoadSesn        Chose a session to load
     1020  tmenu ToolBar.LoadSesn        Choose a session to load
    10171021  tmenu ToolBar.SaveSesn        Save current session
    1018   tmenu ToolBar.RunScript       Chose a Vim Script to run
     1022  tmenu ToolBar.RunScript       Choose a Vim Script to run
    10191023  tmenu ToolBar.Make            Make current project (:make)
    10201024  tmenu ToolBar.RunCtags        Build tags in current directory tree (!ctags -R .)
    10211025  tmenu ToolBar.TagJump         Jump to tag under cursor
  • runtime/plugin/matchparen.vim

    diff -Naur vim70.orig/runtime/plugin/matchparen.vim vim70/runtime/plugin/matchparen.vim
    old new  
    11" Vim plugin for showing matching parens
    22" Maintainer:  Bram Moolenaar <Bram@vim.org>
    3 " Last Change: 2006 Apr 27
     3" Last Change: 2006 Sep 09
    44
    55" Exit quickly when:
    66" - this plugin was already loaded (or disabled)
     
    4444  let before = 0
    4545
    4646  let c = getline(c_lnum)[c_col - 1]
    47   let plist = split(&matchpairs, ':\|,')
     47  let plist = split(&matchpairs, '.\zs[:,]')
    4848  let i = index(plist, c)
    4949  if i < 0
    5050    " not found, in Insert mode try character before the cursor
     
    9090  " Find the match.  When it was just before the cursor move it there for a
    9191  " moment.
    9292  if before > 0
    93     let save_cursor = getpos('.')
     93    let save_cursor = winsaveview()
    9494    call cursor(c_lnum, c_col - before)
    9595  endif
    9696
    9797  " When not in a string or comment ignore matches inside them.
    9898  let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
    99         \ '=~?  "string\\|comment"'
     99        \ '=~?  "string\\|character\\|singlequote\\|comment"'
    100100  execute 'if' s_skip '| let s_skip = 0 | endif'
    101101
    102102  let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline)
    103103
    104104  if before > 0
    105     call setpos('.', save_cursor)
     105    call winrestview(save_cursor)
    106106  endif
    107107
    108108  " If a match is found setup match highlighting.
  • runtime/scripts.vim

    diff -Naur vim70.orig/runtime/scripts.vim vim70/runtime/scripts.vim
    old new  
    11" Vim support file to detect file types in scripts
    22"
    33" Maintainer:   Bram Moolenaar <Bram@vim.org>
    4 " Last change:  2006 Mar 28
     4" Last change:  2006 Jul 08
    55
    66" This file is called by an autocommand for every file that has just been
    77" loaded into a buffer.  It checks if the type of file can be recognized by
     
    5454    let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
    5555  endif
    5656
     57  " tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
     58  " third line.  Suggested by Steven Atkinson.
     59  if getline(3) =~ '^exec wish'
     60    let s:name = 'wish'
     61  endif
     62
    5763  " Bourne-like shell scripts: bash bash2 ksh ksh93 sh
    5864  if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
    5965    call SetFileTypeSH(s:line1) " defined in filetype.vim
  • runtime/tutor/Makefile

    diff -Naur vim70.orig/runtime/tutor/Makefile vim70/runtime/tutor/Makefile
    old new  
    22#
    33# The Japanese tutor exists in three encodings.  Use the UTF-8 version as the
    44# original and create the others with conversion.
     5#
     6# Similarly for Russian and Korean
    57
    6 all: tutor.ja.sjis tutor.ja.euc tutor.ko.euc
     8all: tutor.ja.sjis tutor.ja.euc \
     9        tutor.ko.euc \
     10        tutor.ru tutor.ru.cp1251 \
     11        tutor.gr tutor.gr.cp737
    712
    813tutor.ja.sjis: tutor.ja.utf-8
    914        nkf -WXs tutor.ja.utf-8 > tutor.ja.sjis
     
    1318
    1419tutor.ko.euc: tutor.ko.utf-8
    1520        iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
     21
     22tutor.ru: tutor.ru.utf-8
     23        iconv -f UTF-8 -t KOI8-R tutor.ru.utf-8 > tutor.ru
     24
     25tutor.ru.cp1251: tutor.ru.utf-8
     26        iconv -f UTF-8 -t cp1251 tutor.ru.utf-8 > tutor.ru.cp1251
     27
     28tutor.gr: tutor.gr.utf-8
     29        iconv -f UTF-8 -t ISO-8859-7 tutor.gr.utf-8 > tutor.gr
     30
     31tutor.gr.cp737: tutor.gr.utf-8
     32        iconv -f UTF-8 -t cp737 tutor.gr.utf-8 > tutor.gr.cp737
  • runtime/tutor/tutor.gr.utf-8

    diff -Naur vim70.orig/runtime/tutor/tutor.gr.utf-8 vim70/runtime/tutor/tutor.gr.utf-8
    old new  
     1===============================================================================
     2=    Î. αλ Ï. Ï. ή ρ Ξ α Ï. ε    Ï. Ï. ο   V I M   T u t o r    -    Î.κΎοÏ.η 1.5     =
     3===============================================================================
     4
     5     Î. Vim είΜαι έΜαÏ. Ï.αΜίÏ.Ï.Ï.ροÏ. Ï.Ï.ÎœÏ.άκÏ.ηÏ. Ï.οÏ. έÏ.ει Ï.ολλέÏ. εΜÏ.ολέÏ., Ï.άρα
     6     Ï.ολλέÏ. για Μα εΟηγήÏ.οÏ.Όε Ï.ε Όία Ï.εριήγηÏ.η Ï.Ï.Ï.Ï. αÏ.Ï.ή. Î.Ï.Ï.ή η Ï.εριήγηÏ.η
     7     Ï.Ï.εΎιάÏ.Ï.ηκε για Μα Ï.εριγράÏ.ει ικαΜοÏ.οιηÏ.ικά Ï.ιÏ. εΜÏ.ολέÏ. Ï.οÏ. Ξα Ï.αÏ.
     8     ÎºÎ¬ÎœÎ¿Ï.Îœ Μα Ï.ρηÏ.ιΌοÏ.οιείÏ.ε εύκολα Ï.οΜ Vim Ï.αΜ έΜαΜ γεΜικήÏ. Ï.ρήÏ.ηÏ. Ï.Ï.ÎœÏ.άκÏ.η.
     9
     10     Î. καÏ.ά Ï.ροÏ.έγγιÏ.η Ï.ρÏ.ΜοÏ. Ï.οÏ. αÏ.αιÏ.είÏ.αι για Μα ολοκληρÏ.Ï.εÏ.ε Ï.ηΜ Ï.εριήγηÏ.η
     11     ÎµÎ¯ÎœÎ±Î¹ 25-30 λεÏ.Ï.ά, εΟαρÏ.Ï.ÎœÏ.αÏ. αÏ.Ï. Ï.ο Ï.Ï.Ï.ο Ï.ρÏ.Μο Ξα ΟοΎέÏ.εÏ.ε για
     12     Ï.ειραΌαÏ.ιÏ.ΌούÏ..
     13
     14     Î.ι εΜÏ.ολέÏ. Ï.Ï.α ΌαΞήΌαÏ.α Ξα Ï.ροÏ.οÏ.οιήÏ.οÏ.Îœ Ï.ο κείΌεΜο. Î.ηΌιοÏ.ργήÏ.Ï.ε έΜα
     15     Î±ÎœÏ.ίγραÏ.ο αÏ.Ï.ού Ï.οÏ. αρÏ.είοÏ. για Μα εΟαÏ.κηΞείÏ.ε (αΜ ΟεκιΜήÏ.αÏ.ε Ï.ο
     16     "Vimtutor" αÏ.Ï.Ï. είΜαι ήΎη έΜα αΜÏ.ίγραÏ.ο).
     17
     18     Î.ίΜαι Ï.ηΌαΜÏ.ικÏ. Μα ΞÏ.ΌάÏ.Ï.ε Ï.Ï.ι αÏ.Ï.ή η Ï.εριήγηÏ.η είΜαι οργαΜÏ.ΌέΜη έÏ.Ï.ι
     19     Ï.Ï.Ï.ε Μα ΎιΎάÏ.κει ΌέÏ.Ï. Ï.ηÏ. Ï.ρήÏ.ηÏ.. Î.Ï.Ï.Ï. Ï.ηΌαίΜει Ï.Ï.ι Ï.ρειάζεÏ.αι Μα
     20     ÎµÎºÏ.ελείÏ.ε Ï.ιÏ. εΜÏ.ολέÏ. για Μα Ï.ιÏ. ΌάΞεÏ.ε Ï.Ï.Ï.Ï.ά. Î.Îœ ΎιαβάζεÏ.ε ÎŒÏ.Μο Ï.ο
     21     ÎºÎµÎ¯ÎŒÎµÎœÎ¿, Ξα Ï.ιÏ. ΟεÏ.άÏ.εÏ.ε!
     22
     23     Î€Ï.ρα, βεβαιÏ.ΞείÏ.ε Ï.Ï.ι Ï.ο Ï.λήκÏ.ρο Shift-Lock Î.Î.Ν είΜαι Ï.αÏ.ηΌέΜο και
     24     Ï.αÏ.ήÏ.Ï.ε Ï.ο Ï.λήκÏ.ρο j αρκεÏ.έÏ. Ï.ορέÏ. για Μα ΌεÏ.ακιΜήÏ.εÏ.ε Ï.οΜ ΎροΌέα έÏ.Ï.ι
     25     Ï.Ï.Ï.ε Ï.ο Î.άΞηΌα 1.1 Μα γεΌίÏ.ει Ï.λήρÏ.Ï. Ï.ηΜ οΞÏ.Μη.
     26
     27~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     28                      Î.άΞηΌα 1.1:  Î.Î.΀Î.Î.Î.ΝÎ.Ν΀Î.Σ ΀Î.Ν Î.ΡÎ.Î.Î.Î.
     29
     30  ** Î.ια Μα κιΜήÏ.εÏ.ε Ï.οΜ ΎροΌέα, Ï.αÏ.ήÏ.Ï.ε Ï.α Ï.λήκÏ.ρα h,j,k,l Ï.Ï.Ï.Ï. ΎείÏ.ΜεÏ.αι. **
     31             ^
     32             k        Hint: ΀ο Ï.λήκÏ.ρο h είΜαι αριÏ.Ï.ερά και κιΜεί Ï.Ï.' αριÏ.Ï.ερά.
     33       < h       l >        ΀ο Ï.λήκÏ.ρο l είΜαι ΎεΟιά και κιΜεί Ï.Ï.α ΎεΟιά.
     34             j              ΀ο Ï.λήκÏ.ρο j Όοιάζει Όε βελάκι Ï.ροÏ. Ï.α κάÏ.Ï..
     35             v
     36
     37  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.ριγύρÏ. Ï.Ï.ηΜ οΞÏ.Μη ΌέÏ.ρι Μα ΜοιÏ.ΞεÏ.ε άΜεÏ.α.
     38
     39  2. Î.ραÏ.ήÏ.Ï.ε Ï.αÏ.ηΌέΜο Ï.ο κάÏ.Ï. Ï.λήκÏ.ρο (j) ΌέÏ.ρι Μα εÏ.αΜαληÏ.Ξεί.
     40---> ΀Ï.ρα ΟέρεÏ.ε Ï.Ï.Ï. Μα ΌεÏ.ακιΜηΞείÏ.ε Ï.Ï.ο εÏ.Ï.ΌεΜο ΌάΞηΌα.
     41
     42  3. ΧρηÏ.ιΌοÏ.οιÏ.ÎœÏ.αÏ. Ï.ο κάÏ.Ï. Ï.λήκÏ.ρο, ΌεÏ.ακιΜηΞείÏ.ε Ï.Ï.ο Î.άΞηΌα 1.2.
     43
     44ΣηΌείÏ.Ï.η: Î.Îœ αΌÏ.ιβάλλεÏ.ε για κάÏ.ι Ï.οÏ. Ï.αÏ.ήÏ.αÏ.ε, Ï.αÏ.ήÏ.Ï.ε <ESC> για Μα βρεΞείÏ.ε
     45          Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η. Î.εÏ.ά Ï.αÏ.ήÏ.Ï.ε ΟαΜά Ï.ηΜ εΜÏ.ολή Ï.οÏ. ΞέλαÏ.ε.
     46
     47ΣηΌείÏ.Ï.η: ΀α Ï.λήκÏ.ρα Ï.οÏ. ΎροΌέα Ξα Ï.ρέÏ.ει εÏ.ίÏ.ηÏ. Μα ΎοÏ.λεύοÏ.Îœ. Î.λλά Όε Ï.α hjkl
     48          Ξα ÎŒÏ.ορείÏ.ε Μα κιΜηΞείÏ.ε Ï.ολύ γρηγορÏ.Ï.ερα, ÎŒÏ.λιÏ. Ï.α Ï.Ï.ΜηΞίÏ.εÏ.ε.
     49
     50~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     51                Î.άΞηΌα 1.2:  Î.Î Î.Î.ΝÎ.Ν΀Î.Σ Î.Î.Î. Î.Î.Î.Î.ΝÎ.Ν΀Î.Σ Σ΀Î.Ν VIM
     52
     53  !! ΣÎ.Î.Î.Î.ΩΣÎ.: ΠριΜ εκÏ.ελέÏ.εÏ.ε κάÏ.οιο αÏ.Ï. Ï.α βήΌαÏ.α, ΎιαβάÏ.Ï.ε Ï.λο Ï.ο ΌάΞηΌα!!
     54
     55  1. ΠαÏ.ήÏ.Ï.ε Ï.ο Ï.λήκÏ.ρο <ESC> (για Μα είÏ.Ï.ε Ï.ίγοÏ.ρα Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η).
     56
     57  2. ΠληκÏ.ρολογήÏ.Ï.ε:              :q! <ENTER>.
     58
     59---> Î.Ï.Ï.Ï. εΟέρÏ.εÏ.αι αÏ.Ï. Ï.οΜ Ï.Ï.ÎœÏ.άκÏ.η ΧΩΡÎ.Σ Μα Ï.Ï.Ï.ει Ï.Ï.οιεÏ. αλλαγέÏ. έÏ.εÏ.ε κάΜει.
     60     Î.Îœ ΞέλεÏ.ε Μα Ï.Ï.Ï.εÏ.ε Ï.ιÏ. αλλαγέÏ. και Μα εΟέρΞεÏ.ε Ï.ληκÏ.ρολογήÏ.Ï.ε:
     61              :wq <ENTER>
     62
     63  3. Î.Ï.αΜ ΎείÏ.ε Ï.ηΜ Ï.ροÏ.ροÏ.ή Ï.οÏ. Ï.λοιού, Ï.ληκÏ.ρολογήÏ.Ï.ε Ï.ηΜ εΜÏ.ολή Όε Ï.ηΜ οÏ.οία
     64     ÎŒÏ.ήκαÏ.ε Ï.ε αÏ.Ï.ήΜ Ï.ηΜ Ï.εριήγηÏ.η. Î.Ï.ορεί Μα είΜαι:    vimtutor <ENTER>
     65     Î.αΜοΜικά Ξα Ï.ρηÏ.ιΌοÏ.οιούÏ.αÏ.ε:                    vim tutor <ENTER>
     66
     67---> 'vim' Ï.ηΌαίΜει ειÏ.αγÏ.γή Ï.Ï.οΜ Ï.Ï.ÎœÏ.άκÏ.η vim, 'tutor' είΜαι Ï.ο αρÏ.είο Ï.οÏ.
     68     ÎžÎ­Î»Î¿Ï.Όε Μα ΎιορΞÏ.Ï.οÏ.Όε.
     69
     70  4. Î.Îœ έÏ.εÏ.ε αÏ.οΌΜηΌοΜεύÏ.ει αÏ.Ï.ά Ï.α βήΌαÏ.α και έÏ.εÏ.ε αÏ.Ï.οÏ.εÏ.οίΞηÏ.η, εκÏ.ελέÏ.Ï.ε
     71     Ï.α βήΌαÏ.α 1 έÏ.Ï. 3 για Μα βγείÏ.ε και Μα ÎŒÏ.είÏ.ε ΟαΜά Ï.Ï.οΜ Ï.Ï.ÎœÏ.άκÏ.η. Î.εÏ.ά
     72     ÎŒÎµÏ.ακιΜήÏ.Ï.ε Ï.οΜ ΎροΌέα κάÏ.Ï. Ï.Ï.ο Î.άΞηΌα 1.3.
     73~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     74                   Î.άΞηΌα 1.3:  Î.Î.Î.ΡÎ.ΩΣÎ. Î.Î.Î.Î.Î.ΝÎ.Î¥ - Î.Î.Î.Î.ΡÎ.ΊÎ.
     75
     76   ** Î.Ï.ο είÏ.Ï.ε Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η Ï.αÏ.ήÏ.Ï.ε  x  για Μα ΎιαγράÏ.εÏ.ε Ï.οΜ
     77      Ï.αρακÏ.ήρα κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα. **
     78
     79  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε --->.
     80
     81  2. Î.ια Μα ΎιορΞÏ.Ï.εÏ.ε Ï.α λάΞη, κιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα ΌέÏ.ρι Μα είΜαι Ï.άΜÏ. αÏ.Ï.
     82     Ï.οΜ Ï.αρακÏ.ήρα Ï.οÏ. Ξα ΎιαγραÏ.εί.
     83
     84  3. ΠαÏ.ήÏ.Ï.ε Ï.ο Ï.λήκÏ.ρο x για Μα ΎιαγράÏ.εÏ.ε Ï.οΜ αΜεÏ.ιΞύΌηÏ.ο Ï.αρακÏ.ήρα.
     85
     86  4. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 2 ΌέÏ.ρι 4 ΌέÏ.ρι η Ï.ρÏ.Ï.αÏ.η Μα είΜαι Ï.Ï.Ï.Ï.ή.
     87
     88---> The ccow jumpedd ovverr thhe mooon.
     89
     90  5. ΀Ï.ρα Ï.οÏ. η γραΌΌή είΜαι Ï.Ï.Ï.Ï.ή, Ï.ηγαίΜÏ.ε Ï.Ï.ο Î.άΞηΌα 1.4.
     91
     92ΣÎ.Î.Î.Î.ΩΣÎ.: Î.αΞÏ.Ï. ΎιαÏ.ρέÏ.εÏ.ε αÏ.Ï.ήΜ Ï.ηΜ Ï.εριήγηÏ.η, Ï.ροÏ.Ï.αΞήÏ.Ï.ε Μα ΌηΜ
     93          αÏ.οΌΜηΌοΜεύεÏ.ε, ΌαΞαίΜεÏ.ε Όε Ï.η Ï.ρήÏ.η.
     94
     95~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     96                   Î.άΞηΌα 1.4: Î.Î.Î.ΡÎ.ΩΣÎ. Î.Î.Î.Î.Î.ΝÎ.Î¥ - Î Î.ΡÎ.Î.Î.Î.Î.Î.
     97
     98 ** Î.Ï.ο είÏ.Ï.ε Ï.ε Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η Ï.αÏ.ήÏ.Ï.ε  i  για Μα Ï.αρεΌβάλλεÏ.ε κείΌεΜο. **
     99
     100  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.αρακάÏ.Ï. Ï.ηΌειÏ.ΌέΜη Όε --->.
     101
     102  2. Î.ια Μα κάΜεÏ.ε Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή ίΎια Όε Ï.ηΜ ΎεύÏ.ερη, ΌεÏ.ακιΜείÏ.Ï.ε Ï.οΜ
     103     ÎŽÏÎ¿ÎŒÎ­Î± Ï.άΜÏ. Ï.Ï.οΜ Ï.ρÏ.Ï.ο Ï.αρακÏ.ήρα Î.Î.΀Î. αÏ.Ï. Ï.Ï.οÏ. Ξα Ï.αρεΌβληΞεί Ï.ο κείΌεΜο.
     104
     105  3. ΠαÏ.ήÏ.Ï.ε Ï.ο  i  και Ï.ληκÏ.ρολογήÏ.Ï.ε Ï.ιÏ. αÏ.αραίÏ.ηÏ.εÏ. Ï.ροÏ.ΞήκεÏ..
     106
     107  4. Î.αΞÏ.Ï. ΎιορΞÏ.ΜεÏ.ε κάΞε λάΞοÏ. Ï.αÏ.ήÏ.Ï.ε <ESC> για Μα εÏ.ιÏ.Ï.ρέÏ.εÏ.ε Ï.Ï.ηΜ
     108     Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 2 ΌέÏ.ρι 4 για Μα ΎιορΞÏ.Ï.εÏ.ε
     109     Ï.ηΜ Ï.ρÏ.Ï.αÏ.η.
     110
     111---> There is text misng this .
     112---> There is some text missing from this line.
     113
     114  5. Î.Ï.αΜ είÏ.Ï.ε άΜεÏ.οι Όε Ï.ηΜ Ï.αρεΌβολή κειΌέΜοÏ. ΌεÏ.ακιΜηΞείÏ.ε Ï.Ï.ηΜ
     115     Ï.αρακάÏ.Ï. Ï.ερίληÏ.η.
     116
     117~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     118                               Î.Î.Î.Î.Î.Î. 1 Î Î.ΡÎ.Î.Î.ΚÎ.
     119
     120
     121  1. Î. ΎροΌέαÏ. κιΜείÏ.αι Ï.ρηÏ.ιΌοÏ.οιÏ.ÎœÏ.αÏ. είÏ.ε Ï.α Ï.λήκÏ.ρα ΎροΌέα ή Ï.α hjkl.
     122         h (αριÏ.Ï.έρα)   j (κάÏ.Ï.)    k (Ï.άΜÏ.)    l (ΎεΟιά)
     123
     124  2. Î.ια Μα ÎŒÏ.είÏ.ε Ï.Ï.οΜ Vim (αÏ.Ï. Ï.ηΜ Ï.ροÏ.ροÏ.ή %) γράÏ.Ï.ε:  vim Î.ΡΧÎ.Î.Î. <ENTER>
     125
     126  3. Î.ια Μα βγείÏ.ε γράÏ.Ï.ε:  <ESC>   :q!   <ENTER>   Î³Î¹Î± αÏ.Ï.ρριÏ.η Ï.Ï.Îœ αλλαγÏ.Îœ.
     127                 Î. γράÏ.Ï.ε:  <ESC>   :wq   <ENTER>   Î³Î¹Î± αÏ.οΞήκεÏ.Ï.η Ï.Ï.Îœ αλλαγÏ.Îœ.
     128
     129  4. Î.ια Μα ΎιαγράÏ.εÏ.ε έΜαΜ Ï.αρακÏ.ήρα κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα Ï.ε
     130     Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η Ï.αÏ.ήÏ.Ï.ε:  x
     131
     132  5. Î.ια Μα ειÏ.άγεÏ.ε κείΌεΜο Ï.Ï.οΜ ΎροΌέα Ï.Ï.ο είÏ.Ï.ε Ï.ε Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η γράÏ.Ï.ε:
     133         i     Ï.ληκÏ.ρολογήÏ.Ï.ε Ï.ο κείΌεΜο <ESC>
     134
     135ΣÎ.Î.Î.Î.ΩΣÎ.: ΠαÏ.Ï.ÎœÏ.αÏ. <ESC> Ξα Ï.οÏ.οΞεÏ.ηΞείÏ.ε Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η ή Ξα
     136          ακÏ.ρÏ.Ï.εÏ.ε Όία αΜεÏ.ιΞύΌηÏ.η και ΌερικÏ.Ï. ολοκληρÏ.ΌέΜη εΜÏ.ολή.
     137
     138΀Ï.ρα Ï.Ï.ΜεÏ.ίÏ.Ï.ε Όε Ï.ο Î.άΞηΌα 2.
     139
     140~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     141                         Î.άΞηΌα 2.1: Î.Ν΀Î.Î.Î.Σ Î.Î.Î.Î.ΡÎ.ΊÎ.Σ
     142
     143         ** Î.ράÏ.Ï.ε  dw  για Μα ΎιαγράÏ.εÏ.ε ΌέÏ.ρι Ï.ο Ï.έλοÏ. ΌίαÏ. λέΟηÏ.. **
     144
     145  1. ΠαÏ.ήÏ.Ï.ε  <ESC>  για Μα βεβαιÏ.ΞείÏ.ε Ï.Ï.ι είÏ.Ï.ε Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η.
     146
     147  2. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε --->.
     148
     149  3. ΠηγαίΜεÏ.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ αρÏ.ή Ï.ηÏ. λέΟηÏ. Ï.οÏ. Ï.ρέÏ.ει Μα ΎιαγραÏ.εί.
     150
     151  4. Î.ράÏ.Ï.ε  dw  για Μα κάΜεÏ.ε Ï.ηΜ λέΟη Μα εΟαÏ.αΜιÏ.Ï.εί.
     152
     153ΣÎ.Î.Î.Î.ΩΣÎ.: ΀α γράΌΌαÏ.α dw Ξα εΌÏ.αΜιÏ.Ï.ούΜ Ï.Ï.ηΜ Ï.ελεÏ.Ï.αία γραΌΌή Ï.ηÏ. οΞÏ.ΜηÏ. Ï.Ï.ο
     154          Ï.α Ï.ληκÏ.ρολογείÏ.ε. Î.Îœ γράÏ.αÏ.ε κάÏ.ι λάΞοÏ., Ï.αÏ.ήÏ.Ï.ε  <ESC>  και
     155          ΟεκιΜήÏ.Ï.ε αÏ.Ï. Ï.ηΜ αρÏ.ή.
     156
     157---> There are a some words fun that don't belong paper in this sentence.
     158
     159  5. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 3 και 4 ΌέÏ.ρι η Ï.ρÏ.Ï.αÏ.η Μα είΜαι Ï.Ï.Ï.Ï.ή και
     160     Ï.ηγαίΜεÏ.ε Ï.Ï.ο Î.άΞηΌα 2.2.
     161
     162~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     163                   Î.άΞηΌα 2.2: Î Î.ΡÎ.ΣΣÎ.΀Î.ΡÎ.Σ Î.Ν΀Î.Î.Î.Σ Î.Î.Î.Î.ΡÎ.ΊÎ.Σ
     164
     165    ** ΠληκÏ.ρολογήÏ.Ï.ε  d$  για Μα ΎιαγράÏ.εÏ.ε ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. γραΌΌήÏ.. **
     166
     167  1. ΠαÏ.ήÏ.Ï.ε  <ESC>  για Μα βεβαιÏ.ΞείÏ.ε Ï.Ï.ι είÏ.Ï.ε Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η.
     168
     169  2. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε --->.
     170
     171  3. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ο Ï.έλοÏ. Ï.ηÏ. Ï.Ï.Ï.Ï.ήÏ. γραΌΌήÏ. (Î.Î.΀Î. Ï.ηΜ Ï.ρÏ.Ï.η . ).
     172
     173  4. ΠαÏ.ήÏ.Ï.ε   d$   Î³Î¹Î± Μα ΎιαγράÏ.εÏ.ε ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. γραΌΌήÏ..
     174
     175---> Somebody typed the end of this line twice. end of this line twice.
     176
     177  5. ΠηγαίΜεÏ.ε Ï.Ï.ο Î.άΞηΌα 2.3 για Μα καÏ.αλάβεÏ.ε Ï.ι Ï.Ï.ΌβαίΜει.
     178
     179
     180
     181
     182
     183
     184
     185~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     186                   Î.άΞηΌα 2.3: Î Î.ΡÎ. Î.Ν΀Î.Î.ΩΝ Î.Î.Î. Î.Ν΀Î.Î.Î.Î.Î.Î.ΝΩΝ
     187
     188
     189Î. ΌορÏ.ή Ï.ηÏ. εΜÏ.ολήÏ. ΎιαγραÏ.ήÏ.  d  είΜαι Ï.Ï. εΟήÏ.:
     190
     191         [αριΞΌÏ.Ï.]   d   Î±ÎœÏ.ικείΌεΜο  Î.      d   [αριΞΌÏ.Ï.]   Î±ÎœÏ.ικείΌεΜο
     192  Î.Ï.οÏ.:
     193    αριΞΌÏ.Ï. - Ï.Ï.Ï.εÏ. Ï.ορέÏ. Ξα εκÏ.ελεÏ.Ï.εί η εΜÏ.ολή (Ï.ροαιρεÏ.ικÏ., εΟ' οριÏ.Όού=1).
     194    d - η εΜÏ.ολή Ï.ηÏ. ΎιαγραÏ.ήÏ..
     195    αΜÏ.ικείΌεΜο - Ï.άΜÏ. Ï.ε Ï.ι Ξα λειÏ.οÏ.ργήÏ.ει η εΜÏ.ολή (Ï.αρακάÏ.Ï. λίÏ.Ï.α).
     196
     197  Î.ία Όικρή λίÏ.Ï.α αÏ.Ï. αΜÏ.ικείΌεΜα:
     198    w - αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. λέΟηÏ., Ï.εριλαΌβάΜοΜÏ.αÏ. Ï.ο ΎιάÏ.Ï.ηΌα.
     199    e - αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. λέΟηÏ., ΧΩΡÎ.Σ Ï.ο ΎιάÏ.Ï.ηΌα.
     200    $ - αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. γραΌΌήÏ..
     201
     202ΣÎ.Î.Î.Î.ΩΣÎ.:  Î.ια Ï.οÏ.Ï. Ï.ύÏ.οÏ.Ï. Ï.ηÏ. Ï.εριÏ.έÏ.ειαÏ., Ï.αÏ.Ï.ÎœÏ.αÏ. αÏ.λÏ.Ï. Ï.ο αΜÏ.ικείΌεΜο Ï.Ï.ο
     203           ÎµÎ¯Ï.Ï.ε Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η Ï.Ï.ρίÏ. κάÏ.οια εΜÏ.ολή Ξα ΌεÏ.ακιΜήÏ.εÏ.ε
     204           Ï.οΜ ΎροΌέα Ï.Ï.Ï.Ï. καΞορίζεÏ.αι Ï.Ï.ηΜ λίÏ.Ï.α αΜÏ.ικειΌέΜÏ.Îœ.
     205
     206
     207
     208~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     209               Î.άΞηΌα 2.4: Î.Î.Î. Î.Î.Î.Î.ΡÎ.ΣÎ. Σ΀Î.Ν 'Î.Ν΀Î.Î.Î.-Î.Ν΀Î.Î.Î.Î.Î.Î.ΝÎ.'
     210
     211           ** ΠληκÏ.ρολογήÏ.Ï.ε  dd  για Μα ΎιαγράÏ.εÏ.ε Ï.λη Ï.η γραΌΌή. **
     212
     213  Î.ΟαιÏ.ίαÏ. Ï.ηÏ. Ï.Ï.Ï.ÎœÏ.Ï.ηÏ.αÏ. Ï.ηÏ. ΎιαγραÏ.ήÏ. ολÏ.κληρηÏ. γραΌΌήÏ., οι Ï.Ï.εΎιαÏ.Ï.έÏ.
     214  Ï.οÏ. Vim αÏ.οÏ.άÏ.ιÏ.αΜ Ï.Ï.ι Ξα ήÏ.αΜ εÏ.κολÏ.Ï.ερο Μα γράÏ.εÏ.ε αÏ.λÏ.Ï. Ύύο d Ï.Ï.η
     215  Ï.ειρά για Μα ΎιαγράÏ.εÏ.ε Όία γραΌΌή.
     216
     217  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.η ΎεύÏ.ερη γραΌΌή Ï.ηÏ. Ï.αρακάÏ.Ï. Ï.ράÏ.ηÏ..
     218  2. Î.ράÏ.Ï.ε  dd  για Μα ΎιαγράÏ.εÏ.ε Ï.η γραΌΌή.
     219  3. ΀Ï.ρα ΌεÏ.ακιΜηΞείÏ.ε Ï.Ï.ηΜ Ï.έÏ.αρÏ.η γραΌΌή.
     220  4. Î.ράÏ.Ï.ε  2dd  (ΞÏ.ΌηΞείÏ.ε  αριΞΌÏ.Ï.-εΜÏ.ολή-αΜÏ.ικείΌεΜο) για Μα
     221     ÎŽÎ¹Î±Î³ÏÎ¬Ï.εÏ.ε Ύύο γραΌΌέÏ..
     222
     223      1)  Roses are red,
     224      2)  Mud is fun,
     225      3)  Violets are blue,
     226      4)  I have a car,
     227      5)  Clocks tell time,
     228      6)  Sugar is sweet
     229      7)  And so are you.
     230
     231~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     232                         Î.άΞηΌα 2.5: Î. Î.Ν΀Î.Î.Î. Î.ΝÎ.Î.ΡÎ.ΣÎ.Σ
     233
     234            ** ΠαÏ.ήÏ.Ï.ε  u  για Μα αΜαιρέÏ.εÏ.ε Ï.ιÏ. Ï.ελεÏ.Ï.αίεÏ. εΜÏ.ολέÏ.,
     235               U για Μα ΎιορΞÏ.Ï.εÏ.ε Ï.λη Ï.η γραΌΌή. **
     236
     237  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε ---> και
     238     Ï.οÏ.οΞεÏ.ήÏ.Ï.ε Ï.οΜ Ï.άΜÏ. Ï.Ï.ο Ï.ρÏ.Ï.ο λάΞοÏ..
     239  2. ΠαÏ.ήÏ.Ï.ε  x  για Μα ΎιαγράÏ.εÏ.ε Ï.οΜ Ï.ρÏ.Ï.ο αΜεÏ.ιΞύΌηÏ.ο Ï.αρακÏ.ήρα.
     240  3. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε  u  για Μα αΜαιρέÏ.εÏ.ε Ï.ηΜ Ï.ελεÏ.Ï.αία εκÏ.ελεÏ.ΌέΜη εΜÏ.ολή.
     241  4. Î.Ï.Ï.ή Ï.η Ï.ορά ΎιορΞÏ.Ï.Ï.ε Ï.λα Ï.α λάΞη Ï.Ï.η γραΌΌή Ï.ρηÏ.ιΌοÏ.οιÏ.ÎœÏ.αÏ. Ï.ηΜ εΜÏ.ολή x.
     242  5. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε έΜα κεÏ.αλαίο  U  για Μα εÏ.ιÏ.Ï.ρέÏ.εÏ.ε Ï.η γραΌΌή Ï.Ï.ηΜ αρÏ.ική
     243     Ï.ηÏ. καÏ.άÏ.Ï.αÏ.η.
     244  6. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε  u  ΌερικέÏ. Ï.ορέÏ. για Μα αΜαιρέÏ.εÏ.ε Ï.ηΜ  U  και
     245     Ï.ροηγούΌεΜεÏ. εΜÏ.ολέÏ..
     246  7. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε CTRL-R (κραÏ.Ï.ÎœÏ.αÏ. Ï.αÏ.ηΌέΜο Ï.ο Ï.λήκÏ.ρο CTRL καΞÏ.Ï. Ï.αÏ.άÏ.ε Ï.ο R)
     247     ÎŒÎµÏÎ¹ÎºÎ­Ï. Ï.ορέÏ. για Μα εÏ.αΜαÏ.έρεÏ.ε Ï.ιÏ. εΜÏ.ολέÏ. (αΜαίρεÏ.η Ï.Ï.Îœ αΜαιρέÏ.εÏ.Îœ).
     248
     249---> Fiix the errors oon thhis line and reeplace them witth undo.
     250
     251  8. Î.Ï.Ï.έÏ. είΜαι Ï.ολύ Ï.ρήÏ.ιΌεÏ. εΜÏ.ολέÏ..  ΀Ï.ρα Ï.ηγαίΜεÏ.ε Ï.Ï.ηΜ
     252     Î ερίληÏ.η Ï.οÏ. Î.αΞήΌαÏ.οÏ. 2.
     253
     254~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     255                               Î.Î.Î.Î.Î.Î. 2 Î Î.ΡÎ.Î.Î.ΚÎ.
     256
     257
     258  1. Î.ια Μα ΎιαγράÏ.εÏ.ε αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. λέΟηÏ. γράÏ.Ï.ε:      dw
     259
     260  2. Î.ια Μα ΎιαγράÏ.εÏ.ε αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. γραΌΌήÏ. γράÏ.Ï.ε:    d$
     261
     262  3. Î.ια Μα ΎιαγράÏ.εÏ.ε ολÏ.κληρη Ï.η γραΌΌή γράÏ.Ï.ε:    dd
     263
     264  4. Î. ΌορÏ.ή για Όία εΜÏ.ολή Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η είΜαι:
     265
     266      [αριΞΌÏ.Ï.]   ÎµÎœÏ.ολή   Î±ÎœÏ.ικείΌεΜο    Î.    εΜÏ.ολή   [αριΞΌÏ.Ï.]   Î±ÎœÏ.ικείΌεΜο
     267     Ï.Ï.οÏ.:
     268       Î±ÏÎ¹ÎžÎŒÏ.Ï. - Ï.Ï.Ï.εÏ. Ï.ορέÏ. Μα εÏ.αΜαληÏ.Ξεί η εΜÏ.ολή
     269       ÎµÎœÏ.ολή - Ï.ι Μα γίΜει, Ï.Ï.Ï.Ï. η  d  για ΎιαγραÏ.ή
     270       Î±ÎœÏ.ικείΌεΜο - Ï.άΜÏ. Ï.ε Ï.ι Μα εΜεργήÏ.ει η εΜÏ.ολή, Ï.Ï.Ï.Ï.  w  (λέΟη),
     271                     $ (Ï.έλοÏ. Ï.ηÏ. γραΌΌήÏ.), κÏ.λ.
     272
     273  5. Î.ια Μα αΜαιρέÏ.εÏ.ε Ï.ροηγούΌεΜεÏ. εΜέργειεÏ., Ï.αÏ.ήÏ.Ï.ε:        u   (Ï.εζÏ. u)
     274     Î.ια Μα αΜαιρέÏ.εÏ.ε Ï.λεÏ. Ï.ιÏ. αλλαγέÏ. Ï.Ï.η γραΌΌή, Ï.αÏ.ήÏ.Ï.ε:  U  (κεÏ.αλαίο U)
     275     Î.ια Μα αΜαιρέÏ.εÏ.ε Ï.ιÏ. αΜαιρέÏ.ειÏ., Ï.αÏ.ήÏ.Ï.ε:               CTRL-R
     276
     277~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     278                        Î.άΞηΌα 3.1: Î. Î.Ν΀Î.Î.Î. ΀Î.Î Î.Î.Î.΀Î.ΣÎ.Σ
     279
     280
     281  ** ΠαÏ.ήÏ.Ï.ε  p  για Μα Ï.οÏ.οΞεÏ.ήÏ.εÏ.ε Ï.ηΜ Ï.ελεÏ.Ï.αία ΎιαγραÏ.ή ΌεÏ.ά Ï.οΜ ΎροΌέα.  **
     282
     283  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.ηÏ. Ï.αρακάÏ.Ï. οΌάΎαÏ..
     284
     285  2. ΠαÏ.ήÏ.Ï.ε  dd  για Μα ΎιαγράÏ.εÏ.ε Ï.η γραΌΌή και Μα Ï.ηΜ αÏ.οΞηκεύÏ.εÏ.ε Ï.ε
     286     Ï.ροÏ.Ï.ριΜή ΌΜήΌη Ï.οÏ. Vim.
     287
     288  3. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.η γραΌΌή Î Î.ΝΩ αÏ.Ï. εκεί Ï.οÏ. Ξα Ï.ρέÏ.ει Μα Ï.άει
     289     Î· ΎιαγραΌΌέΜη γραΌΌή.
     290
     291  4. Î.Ï.ο είÏ.Ï.ε Ï.ε Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η, Ï.αÏ.ήÏ.Ï.ε  p  για Μα βάλεÏ.ε Ï.η γραΌΌή.
     292
     293  5. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 2 έÏ.Ï. 4 για Μα βάλεÏ.ε Ï.λεÏ. Ï.ιÏ. γραΌΌέÏ. Ï.Ï.η
     294     Ï.Ï.Ï.Ï.ή Ï.ειρά.
     295
     296     d) Can you learn too?
     297     b) Violets are blue,
     298     c) Intelligence is learned,
     299     a) Roses are red,
     300
     301~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     302                      Î.άΞηΌα 3.2: Î. Î.Ν΀Î.Î.Î. Î.Ν΀Î.Î.Î.΀Î.Σ΀Î.ΣÎ.Σ
     303
     304
     305    ** ΠαÏ.ήÏ.Ï.ε  r  και Ï.αρακÏ.ήρα για Μα αλλάΟεÏ.ε αÏ.Ï.Ï.Îœ Ï.οÏ. είΜαι
     306       ÎºÎ¬Ï.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα. **
     307
     308  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.αρακάÏ.Ï. Ï.ηΌειÏ.ΌέΜη Όε --->.
     309
     310  2. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα έÏ.Ï.ι Ï.Ï.Ï.ε Μα είΜαι Ï.άΜÏ. Ï.Ï.ο Ï.ρÏ.Ï.ο λάΞοÏ..
     311
     312  3. ΠαÏ.ήÏ.Ï.ε  r  και ΌεÏ.ά Ï.οΜ Ï.αρακÏ.ήρα ο οÏ.οίοÏ. ΎιορΞÏ.Μει Ï.ο λάΞοÏ..
     313
     314  4. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 2 και 3 ΌέÏ.ρι Μα είΜαι Ï.Ï.Ï.Ï.ή η Ï.ρÏ.Ï.η γραΌΌή.
     315
     316--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
     317--->  When this line was typed in, someone pressed some wrong keys!
     318
     319  5. ΀Ï.ρα Ï.ηγαίΜεÏ.ε Ï.Ï.ο Î.άΞηΌα 3.2.
     320
     321ΣÎ.Î.Î.Î.ΩΣÎ.: Να ΞÏ.ΌάÏ.Ï.ε Ï.Ï.ι Ï.ρέÏ.ει Μα ΌαΞαίΜεÏ.ε Όε Ï.η Ï.ρήÏ.η, και Ï.Ï.ι Όε
     322          Ï.ηΜ αÏ.οΌΜηΌÏ.ΜεÏ.Ï.η.
     323
     324~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     325                          Î.άΞηΌα 3.3: Î. Î.Ν΀Î.Î.Î. Î.Î.Î.Î.Î.Î.Σ
     326
     327           ** Î.ια Μα αλλάΟεÏ.ε Ï.ΌήΌα ή Ï.λη Ï.η λέΟη, Ï.αÏ.ήÏ.Ï.ε  cw  . **
     328
     329  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.αρακάÏ.Ï. Ï.ηΌειÏ.ΌέΜη Όε --->.
     330
     331  2. ΀οÏ.οΞεÏ.ήÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.άΜÏ. Ï.Ï.ο u Ï.ηÏ. λέΟηÏ. lubw.
     332
     333  3. ΠαÏ.ήÏ.Ï.ε  cw  και Ï.η Ï.Ï.Ï.Ï.ή λέΟη (Ï.Ï.ηΜ Ï.ερίÏ.Ï.Ï.Ï.η αÏ.Ï.ή, γράÏ.Ï.ε  'ine'.)
     334
     335  4. ΠαÏ.ήÏ.Ï.ε <ESC> και Ï.ηγαίΜεÏ.ε Ï.Ï.ο εÏ.Ï.ΌεΜο λάΞοÏ. (Ï.Ï.οΜ Ï.ρÏ.Ï.ο
     336     Ï.αρακÏ.ήρα Ï.ροÏ. αλλαγή).
     337
     338  5. Î.Ï.αΜαλάβεÏ.ε Ï.α βήΌαÏ.α 3 και 4 ΌέÏ.ριÏ. Ï.Ï.οÏ. η Ï.ρÏ.Ï.η Ï.ρÏ.Ï.αÏ.η Μα είΜαι
     339     Î¯ÎŽÎ¹Î± Όε Ï.η ΎεύÏ.ερη.
     340
     341---> This lubw has a few wptfd that mrrf changing usf the change command.
     342---> This line has a few words that need changing using the change command.
     343
     344ΠαραÏ.ηρείÏ.Ï.ε Ï.Ï.ι η  cw  Ï.Ï.ι ÎŒÏ.Μο αΜÏ.ικαΞιÏ.Ï.άει Ï.η λέΟη, αλλά Ï.αÏ. ειÏ.άγει
     345εÏ.ίÏ.ηÏ. Ï.ε Ï.αρεΌβολή.
     346
     347~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     348                     Î.άΞηΌα 3.4: Î Î.ΡÎ.ΣΣÎ.΀Î.ΡÎ.Σ Î.Î.Î.Î.Î.Î.Σ Î.Î. c
     349
     350
     351  ** Î. εΜÏ.ολή αλλαγήÏ. Ï.ρηÏ.ιΌοÏ.οιείÏ.αι Όε Ï.α ίΎια αΜÏ.ικείΌεΜα Ï.ηÏ. ΎιαγραÏ.ήÏ.. **
     352
     353
     354  1. Î. εΜÏ.ολή αλλαγήÏ. ΎοÏ.λεύει Όε Ï.οΜ ίΎιο Ï.ρÏ.Ï.ο Ï.Ï.Ï.Ï. η ΎιαγραÏ.ή. Î. ΌορÏ.ή είΜαι:
     355
     356       [αριΞΌÏ.Ï.]   c   Î±ÎœÏ.ικείΌεΜο     Î.     c   [αριΞΌÏ.Ï.]   Î±ÎœÏ.ικείΌεΜο
     357
     358  2. ΀α αΜÏ.ικείΌεΜα είΜαι Ï.άλι Ï.α ίΎια, Ï.Ï.Ï.Ï. w (λέΟη), $ (Ï.έλοÏ. γραΌΌήÏ.), κÏ.λ.
     359
     360  3. Î.εÏ.ακιΜηΞείÏ.ε Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.αρακάÏ.Ï. Ï.ηΌειÏ.ΌέΜη Όε --->.
     361
     362  4. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ο Ï.ρÏ.Ï.ο λάΞοÏ..
     363
     364  5. Î.ράÏ.Ï.ε  c$  για Μα κάΜεÏ.ε Ï.ο Ï.Ï.Ï.λοιÏ.ο Ï.ηÏ. γραΌΌήÏ. ίΎιο Όε Ï.η ΎεύÏ.ερη
     365     ÎºÎ±Î¹ Ï.αÏ.ήÏ.Ï.ε <ESC>.
     366
     367---> The end of this line needs some help to make it like the second.
     368---> The end of this line needs to be corrected using the  c$  command.
     369
     370
     371~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     372                               Î.Î.Î.Î.Î.Î. 3 Î Î.ΡÎ.Î.Î.ΚÎ.
     373
     374
     375  1. Î.ια Μα Ï.οÏ.οΞεÏ.ήÏ.εÏ.ε κείΌεΜο Ï.οÏ. ÎŒÏ.λιÏ. έÏ.ει ΎιαγραÏ.εί, Ï.αÏ.ήÏ.Ï.ε  p .
     376     Î.Ï.Ï.Ï. Ï.οÏ.οΞεÏ.εί Ï.ο ΎιαγραΌΌέΜο κείΌεΜο Î.Î.΀Î. Ï.οΜ ΎροΌέα (αΜ ΎιαγράÏ.Ï.ηκε
     377     Î³ÏÎ±ÎŒÎŒÎ® Ξα Ï.άει ΌεÏ.ά Ï.Ï.η γραΌΌή κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα.
     378
     379  2. Î.ια Μα αΜÏ.ικαÏ.αÏ.Ï.ήÏ.εÏ.ε Ï.οΜ Ï.αρακÏ.ήρα κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα, Ï.αÏ.ήÏ.Ï.ε  r
     380     ÎºÎ±Î¹ ΌεÏ.ά Ï.οΜ Ï.αρακÏ.ήρα Ï.οÏ. Ξα αΜÏ.ικαÏ.αÏ.Ï.ήÏ.ει Ï.οΜ αρÏ.ικÏ..
     381
     382  3. Î. εΜÏ.ολή αλλαγήÏ. Ï.αÏ. εÏ.ιÏ.ρέÏ.ει Μα αλλάΟεÏ.ε Ï.ο καΞοριÏ.ΌέΜο αΜÏ.ικείΌεΜο
     383     Î±Ï.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.οÏ. αΜÏ.ικείΌεΜο. Î .Ï.. γράÏ.Ï.ε  cw  για Μα
     384     Î±Î»Î»Î¬ÎŸÎµÏ.ε αÏ.Ï. Ï.οΜ ΎροΌέα ΌέÏ.ρι Ï.ο Ï.έλοÏ. Ï.ηÏ. λέΟηÏ., c$ για Μα αλλάΟεÏ.ε
     385     ÎŒÎ­Ï.ρι Ï.ο Ï.έλοÏ. γραΌΌήÏ..
     386
     387  4. Î. ΌορÏ.ή για Ï.ηΜ αλλαγή είΜαι:
     388
     389         [αριΞΌÏ.Ï.]   c   Î±ÎœÏ.ικείΌεΜο     Î.     c   [αριΞΌÏ.Ï.]   Î±ÎœÏ.ικείΌεΜο
     390
     391΀Ï.ρα Ï.Ï.ΜεÏ.ίÏ.Ï.ε Όε Ï.ο εÏ.Ï.ΌεΜο ΌάΞηΌα.
     392
     393
     394~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     395                     Î.άΞηΌα 4.1: Î.Î.ΣÎ. Î.Î.Î. Î.Î.΀Î.Σ΀Î.ΣÎ. Î.ΡΧÎ.Î.Î.Î¥
     396
     397
     398 ** ΠαÏ.ήÏ.Ï.ε CTRL-g για Μα εΌÏ.αΜιÏ.Ï.εί η ΞέÏ.η Ï.αÏ. Ï.Ï.ο αρÏ.είο και η καÏ.άÏ.Ï.αÏ.ή Ï.οÏ..
     399    ΠαÏ.ήÏ.Ï.ε SHIFT-G για Μα Ï.άÏ.ε Ï.ε Όία γραΌΌή Ï.Ï.ο αρÏ.είο. **
     400
     401  ΣηΌείÏ.Ï.η: Î.ιαβάÏ.Ï.ε ολÏ.κληρο Ï.ο ΌάΞηΌα Ï.ριΜ εκÏ.ελέÏ.εÏ.ε κάÏ.οιο αÏ.Ï. Ï.α βήΌαÏ.α!!
     402
     403  1. Î.ραÏ.ήÏ.Ï.ε Ï.αÏ.ηΌέΜο Ï.ο Ï.λήκÏ.ρο Ctrl και Ï.αÏ.ήÏ.Ï.ε  g . Î.ία γραΌΌή καÏ.άÏ.Ï.αÏ.ηÏ.
     404     ÎžÎ± εΌÏ.αΜιÏ.Ï.εί Ï.Ï.ο κάÏ.Ï. ΌέροÏ. Ï.ηÏ. Ï.ελίΎαÏ. Όε Ï.ο Ï.ΜοΌα αρÏ.είοÏ. και Ï.η
     405     Î³ÏÎ±ÎŒÎŒÎ® Ï.οÏ. είÏ.Ï.ε. Î.Ï.ΌηΞείÏ.ε Ï.οΜ αριΞΌÏ. γραΌΌήÏ. για Ï.ο Î.ήΌα 3.
     406
     407  2. ΠαÏ.ήÏ.Ï.ε shift-G για Μα ΌεÏ.ακιΜηΞείÏ.ε Ï.Ï.ο Ï.έλοÏ. Ï.οÏ. αρÏ.είοÏ..
     408
     409  3. ΠαÏ.ήÏ.Ï.ε Ï.οΜ αριΞΌÏ. Ï.ηÏ. γραΌΌήÏ. Ï.οÏ. ήÏ.αÏ.Ï.αΜ και ΌεÏ.ά shift-G. Î.Ï.Ï.Ï. Ξα
     410     Ï.αÏ. εÏ.ιÏ.Ï.ρέÏ.ει Ï.Ï.η γραΌΌή Ï.οÏ. ήÏ.αÏ.Ï.αΜ Ï.ριΜ Ï.αÏ.ήÏ.εÏ.ε για Ï.ρÏ.Ï.η Ï.ορά Ctrl-g.
     411     (Î.Ï.αΜ Ï.ληκÏ.ρολογείÏ.ε Ï.οÏ.Ï. αριΞΌούÏ., Î.Î.Ν Ξα εΌÏ.αΜίζοΜÏ.αι Ï.Ï.ηΜ οΞÏ.Μη).
     412
     413  4. Î.Îœ ΜοιÏ.ΞεÏ.ε Ï.ίγοÏ.ροÏ. για αÏ.Ï.Ï., εκÏ.ελέÏ.Ï.ε Ï.α βήΌαÏ.α 1 έÏ.Ï. 3.
     414
     415
     416
     417~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     418                        Î.άΞηΌα 4.2: Î. Î.Ν΀Î.Î.Î. Î.ΝÎ.Î.Î.΀Î.ΣÎ.Σ
     419
     420
     421          ** ΠαÏ.ήÏ.Ï.ε   /   Î±ÎºÎ¿Î»Î¿Ï.ΞούΌεΜο αÏ.Ï. Ï.η Ï.ράÏ.η Ï.οÏ. Ï.άÏ.ΜεÏ.ε. **
     422
     423  1. Σε Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η Ï.αÏ.ήÏ.Ï.ε Ï.οΜ Ï.αρακÏ.ήρα  / . ΠαραÏ.ηρήÏ.Ï.ε Ï.Ï.ι αÏ.Ï.Ï.Ï. και
     424     Î¿ ΎροΌέαÏ. εΌÏ.αΜίζοΜÏ.αι Ï.Ï.ο κάÏ.Ï. ΌέροÏ. Ï.ηÏ. οΞÏ.ΜηÏ. Ï.Ï.Ï.Ï. Όε Ï.ηΜ εΜÏ.ολή  : .
     425
     426  2. ΀Ï.ρα γράÏ.Ï.ε 'errroor' <ENTER>. Î.Ï.Ï.ή είΜαι η λέΟη Ï.οÏ. ΞέλεÏ.ε Μα Ï.άΟεÏ.ε.
     427
     428  3. Î.ια Μα Ï.άΟεÏ.ε ΟαΜά για Ï.ηΜ ίΎια Ï.ράÏ.η, Ï.αÏ.ήÏ.Ï.ε αÏ.λÏ.Ï.  n .
     429     Î.ια Μα Ï.άΟεÏ.ε Ï.ηΜ ίΎια Ï.ράÏ.η Ï.Ï.ηΜ αΜÏ.ίΞεÏ.η καÏ.εύΞÏ.ÎœÏ.η, Ï.αÏ.ήÏ.Ï.ε  Shift-N .
     430
     431  4. Î.Îœ ΞέλεÏ.ε Μα Ï.άΟεÏ.ε για Όία Ï.ράÏ.η Ï.ροÏ. Ï.α Ï.ίÏ.Ï., Ï.ρηÏ.ιΌοÏ.οιήÏ.Ï.ε Ï.ηΜ εΜÏ.ολή  ?  αΜÏ.ί Ï.ηÏ.  / .
     432
     433---> Î.Ï.αΜ η αΜαζήÏ.ηÏ.η Ï.Ï.άÏ.ει Ï.Ï.ο Ï.έλοÏ. Ï.οÏ. αρÏ.είοÏ. Ξα Ï.Ï.ΜεÏ.ίÏ.ει αÏ.Ï. Ï.ηΜ αρÏ.ή.
     434
     435  "errroor" is not the way to spell error;  errroor is an error.
     436
     437
     438
     439~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     440                   Î.άΞηΌα 4.3: Î.ΥΡÎ.ΣÎ. ΀Î.Î.ΡÎ.Î.Σ΀ΩΝ Î Î.ΡÎ.ΝÎ.Î.ΣÎ.ΩΝ
     441
     442
     443          ** ΠαÏ.ήÏ.Ï.ε   %   Î³Î¹Î± Μα βρείÏ.ε Ï.ηΜ αΜÏ.ίÏ.Ï.οιÏ.η ), ], ή } . **
     444
     445  1. ΀οÏ.οΞεÏ.ήÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.ε κάÏ.οια (, [, ή { Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή
     446     Ï.ηΌειÏ.ΌέΜη Όε --->.
     447
     448  2. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε Ï.οΜ Ï.αρακÏ.ήρα  % .
     449
     450  3. Î. ΎροΌέαÏ. Ξα Ï.ρέÏ.ει Μα είΜαι Ï.Ï.ηΜ αΜÏ.ίÏ.Ï.οιÏ.η Ï.αρέΜΞεÏ.η ή αγκύλη.
     451
     452  4. ΠαÏ.ήÏ.Ï.ε  %  για Μα ΌεÏ.ακιΜήÏ.εÏ.ε Ï.οΜ ΎροΌέα Ï.ίÏ.Ï. Ï.Ï.ηΜ Ï.ρÏ.Ï.η αγκύλη
     453    (Ï.οÏ. ζεÏ.γαριού).
     454
     455---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
     456
     457ΣÎ.Î.Î.Î.ΩΣÎ.: Î.Ï.Ï.Ï. είΜαι Ï.ολύ Ï.ρήÏ.ιΌο Ï.Ï.ηΜ αÏ.οÏ.Ï.αλΌάÏ.Ï.Ï.η εΜÏ.Ï. Ï.ρογράΌΌαÏ.οÏ.
     458          Όε Όη Ï.αιριαÏ.Ï.έÏ. Ï.αρεΜΞέÏ.ειÏ.!
     459
     460
     461
     462~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     463                    Î.άΞηΌα 4.4: Î.ΝÎ.Σ ΀ΡÎ.Î Î.Σ Î.Î.Î. Î.Î.Î.Î.Î.Î. Î.Î.Î.ΩΝ
     464
     465
     466       ** Î.ράÏ.Ï.ε  :s/old/new/g  για Μα αλλάΟεÏ.ε Ï.ο 'new' Όε Ï.ο 'old'. **
     467
     468  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε --->.
     469
     470  2. Î.ράÏ.Ï.ε  :s/thee/the <ENTER> . ΣηΌειÏ.Ï.Ï.ε Ï.Ï.ι αÏ.Ï.ή η εΜÏ.ολή αλλάζει ÎŒÏ.Μο
     471     Ï.ηΜ Ï.ρÏ.Ï.η εΌÏ.άΜιÏ.η Ï.Ï.η γραΌΌή.
     472
     473  3. ΀Ï.ρα γράÏ.Ï.ε   :s/thee/the/g    εΜΜοÏ.ÎœÏ.αÏ. γεΜική αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Ï.Ï.η
     474     Î³ÏÎ±ÎŒÎŒÎ®. Î.Ï.Ï.Ï. αλλάζει Ï.λεÏ. Ï.ιÏ. εΌÏ.αΜίÏ.ειÏ. εÏ.ί Ï.ηÏ. γραΌΌήÏ..
     475
     476---> thee best time to see thee flowers is in thee spring.
     477
     478  4. Î.ια Μα αλλάΟεÏ.ε κάΞε εΌÏ.άΜιÏ.η ΌίαÏ. Ï.Ï.ΌβολοÏ.ειράÏ. ΌεÏ.αΟύ Ύύο γραΌΌÏ.Îœ,
     479     Î³ÏÎ¬Ï.Ï.ε   :#,#s/old/new/g   Ï.Ï.οÏ. #,# οι αριΞΌοί Ï.Ï.Îœ Ύύο γραΌΌÏ.Îœ.
     480     Î.ράÏ.Ï.ε   :%s/old/new/g     Î³Î¹Î± Μα αλλάΟεÏ.ε κάΞε εΌÏ.άΜιÏ.η Ï.ε Ï.λο Ï.ο αρÏ.είο.
     481
     482
     483
     484
     485~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     486                               Î.Î.Î.Î.Î.Î. 4 Î Î.ΡÎ.Î.Î.ΚÎ.
     487
     488
     489  1. ΀ο  Ctrl-g  εΌÏ.αΜίζει Ï.η ΞέÏ.η Ï.αÏ. Ï.Ï.ο αρÏ.είο και Ï.ηΜ καÏ.άÏ.Ï.αÏ.ή Ï.οÏ..
     490     Î€Î¿  Shift-G  Ï.ηγαίΜει Ï.Ï.ο Ï.έλοÏ. Ï.οÏ. αρÏ.είοÏ.. Î.ΜαÏ. αριΞΌÏ.Ï. γραΌΌήÏ.
     491     Î±ÎºÎ¿Î»Î¿Ï.ΞούΌεΜοÏ. αÏ.Ï.  Shift-G  Ï.ηγαίΜει Ï.ε εκείΜη Ï.η γραΌΌή.
     492
     493  2. Î.ράÏ.οΜÏ.αÏ.  /  ακολοÏ.ΞούΌεΜο αÏ.Ï. Όία Ï.ράÏ.η Ï.άÏ.Μει Ï.ροÏ. Ï.α Î.ΠΡÎ.Σ΀Î. για
     494     Ï.η Ï.ράÏ.η. Î.ράÏ.οΜÏ.αÏ.  ?  ακολοÏ.ΞούΌεΜο αÏ.Ï. Όία Ï.ράÏ.η Ï.άÏ.Μει Ï.ροÏ. Ï.α Î Î.ΣΩ
     495     Î³Î¹Î± Ï.η Ï.ράÏ.η. Î.εÏ.ά αÏ.Ï. Όία αΜαζήÏ.ηÏ.η Ï.αÏ.ήÏ.Ï.ε  n  για Μα βρείÏ.ε Ï.ηΜ
     496     ÎµÏ.Ï.ΌεΜη εΌÏ.άΜιÏ.η Ï.ροÏ. Ï.ηΜ ίΎια καÏ.εύΞÏ.ÎœÏ.η ή  Shift-N  για Μα Ï.άΟεÏ.ε
     497     Ï.ροÏ. Ï.ηΜ αΜÏ.ίΞεÏ.η καÏ.εύΞÏ.ÎœÏ.η.
     498
     499  3. ΠαÏ.Ï.ÎœÏ.αÏ.  %  Ï.Ï.ο ο ΎροΌέαÏ. είΜαι Ï.άΜÏ. Ï.ε Όία (,),[,],{, ή }  εΜÏ.οÏ.ίζει
     500     Ï.ο αΜÏ.ίÏ.Ï.οιÏ.ο Ï.αίρι Ï.οÏ. ζεÏ.γαριού.
     501
     502  4. Î.ια αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Όε new Ï.οÏ. Ï.ρÏ.Ï.οÏ. old Ï.Ï.η γραΌΌή γράÏ.Ï.ε  :s/old/new
     503     Î.ια αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Όε new Ï.λÏ.Îœ Ï.Ï.Îœ 'old' Ï.Ï.η γραΌΌή γράÏ.Ï.ε  :s/old/new/g
     504     Î.ια αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Ï.ράÏ.εÏ.Îœ ΌεÏ.αΟύ Ύύο # γραΌΌÏ.Îœ γράÏ.Ï.ε      :#,#s/old/new/g
     505     Î.ια αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Ï.λÏ.Îœ Ï.Ï.Îœ εΌÏ.αΜίÏ.εÏ.Îœ Ï.Ï.ο αρÏ.είο γράÏ.Ï.ε    :%s/old/new/g
     506     Î.ια ερÏ.Ï.ηÏ.η εÏ.ιβεβαίÏ.Ï.ηÏ. κάΞε Ï.ορά Ï.ροÏ.ΞέÏ.Ï.ε έΜα 'c'       "%s/old/new/gc
     507
     508~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     509                  Î.άΞηΌα 5.1: ΠΩΣ Î.Î.΀Î.Î.Ω Î.Î.Î. Î.Î.Ω΀Î.ΡÎ.Î.Î. Î.Ν΀Î.Î.Î.
     510
     511
     512** Î.ράÏ.Ï.ε  :!  ακολοÏ.ΞούΌεΜο αÏ.Ï. Όία εΟÏ.Ï.ερική εΜÏ.ολή για Μα Ï.ηΜ εκÏ.ελέÏ.εÏ.ε. **
     513
     514  1. ΠαÏ.ήÏ.Ï.ε Ï.ηΜ οικεία εΜÏ.ολή  :  για Μα ΞέÏ.εÏ.ε Ï.οΜ ΎροΌέα Ï.Ï.ο κάÏ.Ï. ΌέροÏ.
     515     Ï.ηÏ. οΞÏ.ΜηÏ.. Î.Ï.Ï.Ï. Ï.αÏ. εÏ.ιÏ.ρέÏ.ει Μα ÎŽÏ.Ï.εÏ.ε Όία εΜÏ.ολή.
     516
     517  2. ΀Ï.ρα Ï.αÏ.ήÏ.Ï.ε  Ï.ο  !  (ΞαÏ.ΌαÏ.Ï.ικÏ.). Î.Ï.Ï.Ï. Ï.αÏ. εÏ.ιÏ.ρέÏ.ει Μα εκÏ.ελέÏ.εÏ.ε
     518     Î¿Ï.οιαΎήÏ.οÏ.ε εΟÏ.Ï.ερική εΜÏ.ολή Ï.οÏ. Ï.λοιού.
     519
     520  3. ΣαΜ Ï.αράΎειγΌα γράÏ.Ï.ε  ls  ΌεÏ.ά αÏ.Ï. Ï.ο ! και Ï.αÏ.ήÏ.Ï.ε <ENTER>. Î.Ï.Ï.Ï. Ξα
     521     Ï.αÏ. εΌÏ.αΜίÏ.ει Όία λίÏ.Ï.α Ï.οÏ. καÏ.αλÏ.γοÏ. Ï.αÏ., ακριβÏ.Ï. Ï.αΜ Μα ήÏ.αÏ.Ï.αΜ Ï.Ï.ηΜ
     522     Ï.ροÏ.ροÏ.ή Ï.οÏ. Ï.λοιού. Î. Ï.ρηÏ.ιΌοÏ.οιήÏ.Ï.ε  :!dir  αΜ Ï.ο ls ΎεΜ ΎοÏ.λεύει.
     523
     524---> ΣηΌείÏ.Ï.η: Î.ίΜαι ÎŽÏ.ΜαÏ.Ï.Îœ Μα εκÏ.ελέÏ.εÏ.ε οÏ.οιαΎήÏ.οÏ.ε εΟÏ.Ï.ερική εΜÏ.ολή
     525     ÎŒÎµ αÏ.Ï.Ï.Îœ Ï.οΜ Ï.ρÏ.Ï.ο.
     526
     527---> ΣηΌείÏ.Ï.η: Î.λεÏ. οι εΜÏ.ολέÏ.  :  Ï.ρέÏ.ει Μα Ï.ερΌαÏ.ίζοΜÏ.αι Ï.αÏ.Ï.ÎœÏ.αÏ. Ï.ο <ENTER>.
     528
     529
     530
     531~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     532                 Î.άΞηΌα 5.2: Î Î.ΡÎ.ΣΣÎ.΀Î.ΡÎ. Î Î.ΡÎ. Î.Î.Î.ΡÎ.ΊÎ.Σ Î.ΡΧÎ.Î.ΩΝ
     533
     534
     535   ** Î.ια Μα Ï.Ï.Ï.εÏ.ε Ï.ιÏ. αλλάγεÏ. Ï.οÏ. κάΜαÏ.ε Ï.Ï.ο αρÏ.είο, γράÏ.Ï.ε  :w Î.ΡΧÎ.Î.Î..  **
     536
     537  1. Î.ράÏ.Ï.ε  :!dir  ή  :!ls  για Μα Ï.άρεÏ.ε Όία λίÏ.Ï.α Ï.οÏ. καÏ.αλÏ.γοÏ. Ï.αÏ..
     538     Î.Ύη ΟέρεÏ.ε Ï.Ï.ι Ï.ρέÏ.ει Μα Ï.αÏ.ήÏ.εÏ.ε <ENTER> ΌεÏ.ά αÏ.Ï. αÏ.Ï.Ï..
     539
     540  2. Î.ιαλέΟÏ.ε έΜα Ï.ΜοΌα αρÏ.είοÏ. Ï.οÏ. ΎεΜ Ï.Ï.άρÏ.ει ακÏ.Όα, Ï.Ï.Ï.Ï. Ï.ο TEST.
     541
     542  3. ΀Ï.ρα γράÏ.Ï.ε:  :w TEST  (Ï.Ï.οÏ. TEST είΜαι Ï.ο Ï.ΜοΌα αρÏ.είοÏ. Ï.οÏ. ΎιαλέΟαÏ.ε).
     543
     544  4. Î.Ï.Ï.Ï. Ï.Ï.ζει Ï.λο Ï.ο αρÏ.είο (vim Tutor) Όε Ï.ο Ï.ΜοΌα TEST. Î.ια Μα Ï.ο
     545     ÎµÏ.αληΞεύÏ.εÏ.ε, γράÏ.Ï.ε ΟαΜά  :!dir για Μα ΎείÏ.ε Ï.οΜ καÏ.άλογÏ. Ï.αÏ..
     546
     547---> ΣηΌειÏ.Ï.Ï.ε Ï.Ï.ι αΜ βγαίΜαÏ.ε αÏ.Ï. Ï.οΜ Vim και ÎŒÏ.αίΜαÏ.ε ΟαΜά Όε Ï.ο Ï.ΜοΌα
     548     Î±ÏÏ.είοÏ. TEST, Ï.ο αρÏ.είο Ξα ήÏ.αΜ ακριβέÏ. αΜÏ.ίγραÏ.ο Ï.οÏ. tutor Ï.Ï.αΜ Ï.ο Ï.Ï.Ï.αÏ.ε.
     549
     550  5. ΀Ï.ρα ΎιαγράÏ.Ï.ε Ï.ο αρÏ.είο γράÏ.οΜÏ.αÏ. (MS-DOS):      :!del TEST
     551
     552
     553
     554~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     555                     Î.άΞηΌα 5.3: Î.Î Î.Î.Î.Î.΀Î.Î.Î. Î.Ν΀Î.Î.Î. Î.Î.Î.ΡÎ.ΊÎ.Σ
     556
     557
     558          ** Î.ια Μα Ï.Ï.Ï.εÏ.ε Ï.ΌήΌα Ï.οÏ. αρÏ.είοÏ., γράÏ.Ï.ε  :#,# w Î.ΡΧÎ.Î.Î. **
     559
     560  1. Î.λλη Όια Ï.ορά, γράÏ.Ï.ε  :!dir  ή  :!ls  για Μα Ï.άρεÏ.ε Όία λίÏ.Ï.α αÏ.Ï. Ï.οΜ
     561     ÎºÎ±Ï.άλογÏ. Ï.αÏ. και ΎιαλέΟÏ.ε έΜα καÏ.άλληλο Ï.ΜοΌα αρÏ.είοÏ. Ï.Ï.Ï.Ï. Ï.ο TEST.
     562
     563  2. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ο Ï.άΜÏ. ΌέροÏ. αÏ.Ï.ήÏ. Ï.ηÏ. Ï.ελίΎαÏ. και Ï.αÏ.ήÏ.Ï.ε
     564     Ctrl-g  για Μα βρείÏ.ε Ï.οΜ αριΞΌÏ. αÏ.Ï.ήÏ. Ï.ηÏ. γραΌΌήÏ..
     565     ÎÎ. Î.Î¥Î.Î.Σ΀Î. Î.Υ΀Î.Ν ΀Î.Ν Î.ΡÎ.Î.Î.Î.!
     566
     567  3. ΀Ï.ρα Ï.ηγαίΜεÏ.ε Ï.Ï.ο κάÏ.Ï. ΌέροÏ. Ï.ηÏ. Ï.ελίΎαÏ. και Ï.αÏ.ήÏ.Ï.ε  Ctrl-g  ΟαΜά.
     568     ÎÎ. Î.Î¥Î.Î.Σ΀Î. Î.Î.Î. Î.Υ΀Î.Ν ΀Î.Ν Î.ΡÎ.Î.Î.Î.!
     569
     570  4. Î.ια Μα Ï.Ï.Ï.εÏ.ε Î.Î.ΝÎ. έΜα Ï.ΌήΌα Ï.ε αρÏ.είο, γράÏ.Ï.ε   :#,# w TEST
     571     Ï.Ï.οÏ. #,# οι Ύύο αριΞΌοί Ï.οÏ. αÏ.οΌΜηΌοΜεύÏ.αÏ.ε (Ï.άΜÏ.,κάÏ.Ï.) και TEST Ï.ο
     572     Ï.ΜοΌα Ï.οÏ. αρÏ.είοÏ. Ï.αÏ..
     573
     574  5. Î.αΜά, ΎείÏ.ε Ï.Ï.ι Ï.ο αρÏ.είο είΜαι εκεί Όε Ï.ηΜ  :!dir αλλά Î.Î.Ν Ï.ο ΎιαγράÏ.εÏ.ε.
     575
     576
     577~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     578                  Î.άΞηΌα 5.4: Î.ΝÎ.Î.΀ΩΝ΀Î.Σ Î.Î.Î. Î.ΝΩΝÎ.Ν΀Î.Σ Î.ΡΧÎ.Î.Î.
     579
     580
     581     ** Î.ια Μα ειÏ.άγεÏ.ε Ï.α Ï.εριεÏ.Ï.ΌεΜα εΜÏ.Ï. αρÏ.είοÏ., γράÏ.Ï.ε   :r Î.ΡΧÎ.Î.Î. **
     582
     583  1. Î.ράÏ.Ï.ε  :!dir  για Μα βεβαιÏ.ΞείÏ.ε Ï.Ï.ι Ï.ο TEST Ï.Ï.άρÏ.ει αÏ.Ï. Ï.ριΜ.
     584
     585  2. ΀οÏ.οΞεÏ.ήÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ο Ï.άΜÏ. ΌέροÏ. Ï.ηÏ. Ï.ελίΎαÏ..
     586
     587ΣÎ.Î.Î.Î.ΩΣÎ.:  Î.Ï.Ï.Ï.οÏ. εκÏ.ελέÏ.εÏ.ε Ï.ο Î.ήΌα 3 Ξα ΎείÏ.ε Ï.ο Î.άΞηΌα 5.3.
     588           Î.εÏ.ά κιΜηΞείÏ.ε Î.Î.΀Ω ΟαΜά Ï.ροÏ. Ï.ο ΌάΞηΌα αÏ.Ï.Ï..
     589
     590  3. ΀Ï.ρα αΜακÏ.ήÏ.Ï.ε Ï.ο αρÏ.είο Ï.αÏ. TEST Ï.ρηÏ.ιΌοÏ.οιÏ.ÎœÏ.αÏ. Ï.ηΜ εΜÏ.ολή  :r TEST
     591     Ï.Ï.οÏ. TEST είΜαι Ï.ο Ï.ΜοΌα Ï.οÏ. αρÏ.είοÏ..
     592
     593ΣÎ.Î.Î.Î.ΩΣÎ.:  ΀ο αρÏ.είο Ï.οÏ. αΜακÏ.άÏ.ε Ï.οÏ.οΞεÏ.είÏ.αι ΟεκιΜÏ.ÎœÏ.αÏ. εκεί Ï.οÏ. βρίÏ.κεÏ.αι
     594           Î¿ ΎροΌέαÏ..
     595
     596  4. Î.ια Μα εÏ.αληΞεύÏ.εÏ.ε Ï.Ï.ι Ï.ο αρÏ.είο αΜακÏ.ήΞηκε, Ï.ίÏ.Ï. Ï.οΜ ΎροΌέα και
     597     Ï.αραÏ.ηρήÏ.Ï.ε Ï.Ï.ι Ï.Ï.άρÏ.οÏ.Îœ Ï.Ï.ρα Ύύο αΜÏ.ίγραÏ.α Ï.οÏ. Î.αΞήΌαÏ.οÏ. 5.3, Ï.ο
     598     Î±ÏÏ.ικÏ. και η έκΎοÏ.η Ï.οÏ. αρÏ.είοÏ..
     599
     600~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     601                               Î.Î.Î.Î.Î.Î. 5 Î Î.ΡÎ.Î.Î.ΚÎ.
     602
     603
     604  1.  :!εΜÏ.ολή  εκÏ.ελεί Όία εΟÏ.Ï.ερική εΜÏ.ολή.
     605
     606      Î.ερικά Ï.ρήÏ.ιΌα Ï.αραΎείγΌαÏ.α είΜαι (MS-DOS):
     607      :!dir            - εΌÏ.άΜιÏ.η λίÏ.Ï.αÏ. εΜÏ.Ï. καÏ.αλÏ.γοÏ..
     608      :!del Î.ΡΧÎ.Î.Î.     - ΎιαγράÏ.ει Ï.ο Î.ΡΧÎ.Î.Î..
     609
     610  2.  :w Î.ΡΧÎ.Î.Î.   Î³ÏÎ¬Ï.ει Ï.ο Ï.ρέÏ.Ï.Îœ αρÏ.είο Ï.οÏ. Vim Ï.Ï.ο ΎίÏ.κο Όε Ï.ΜοΌα Î.ΡΧÎ.Î.Î..
     611
     612  3.  :#,#w Î.ΡΧÎ.Î.Î.   Ï.Ï.ζει Ï.ιÏ. γραΌΌέÏ. αÏ.Ï. # ΌέÏ.ρι # Ï.Ï.ο Î.ΡΧÎ.Î.Î..
     613
     614  4.  :r Î.ΡΧÎ.Î.Î.  αΜακÏ.εί Ï.ο αρÏ.είο ΎίÏ.κοÏ. Î.ΡΧÎ.Î.Î. και Ï.ο Ï.αρεΌβάλλει ΌέÏ.α
     615      Ï.Ï.ο Ï.ρέÏ.οΜ αρÏ.είο ΌεÏ.ά αÏ.Ï. Ï.η ΞέÏ.η Ï.οÏ. ΎροΌέα.
     616
     617
     618
     619
     620
     621
     622
     623~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     624                        Î.άΞηΌα 6.1: Î. Î.Ν΀Î.Î.Î. Î.ΝÎ.Î.Î.Î.Î.΀Î.Σ
     625
     626
     627      ** ΠαÏ.ήÏ.Ï.ε  o  για Μα αΜοίΟεÏ.ε Όία γραΌΌή κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα και Μα
     628         Î²ÏÎµÎžÎµÎ¯Ï.ε Ï.ε Î.αÏ.άÏ.Ï.αÏ.η Î.ειΌέΜοÏ.. **
     629
     630  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε --->.
     631
     632  2. ΠαÏ.ήÏ.Ï.ε  o (Ï.εζÏ.) για Μα αΜοίΟεÏ.ε Όία γραΌΌή Î.Î.΀Ω αÏ.Ï. Ï.οΜ ΎροΌέα και Μα
     633     Î²ÏÎµÎžÎµÎ¯Ï.ε Ï.ε Î.αÏ.άÏ.Ï.αÏ.η Î.ειΌέΜοÏ..
     634
     635  3. ΀Ï.ρα αΜÏ.ιγράÏ.Ï.ε Ï.η Ï.ηΌειÏ.ΌέΜη Όε ---> γραΌΌή  και Ï.αÏ.ήÏ.Ï.ε <ESC> για Μα
     636     Î²Î³ÎµÎ¯Ï.ε αÏ.Ï. Ï.ηΜ Î.αÏ.άÏ.Ï.αÏ.η Î.ειΌέΜοÏ..
     637
     638---> After typing  o  the cursor is placed on the open line in Insert mode.
     639
     640  4. Î.ια Μα αΜοίΟεÏ.ε Όία γραΌΌή Î Î.ΝΩ αÏ.Ï. Ï.οΜ ΎροΌέα, Ï.αÏ.ήÏ.Ï.ε αÏ.λά έΜα κεÏ.αλαίο
     641     O, αΜÏ.ί για έΜα Ï.εζÏ.  o.  Î.οκιΌάÏ.Ï.ε Ï.ο Ï.Ï.ηΜ Ï.αρακάÏ.Ï. γραΌΌή.
     642Î.ΜοίγεÏ.ε γραΌΌή Ï.άΜÏ. αÏ.Ï. αÏ.Ï.ήΜ Ï.αÏ.Ï.ÎœÏ.αÏ. Shift-O Ï.Ï.ο ο ΎροΌέαÏ. είΜαι Ï.Ï.η γραΌΌή
     643
     644
     645
     646~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     647                         Î.άΞηΌα 6.2: Î. Î.Ν΀Î.Î.Î. ΠΡÎ.ΣÎ.Î.Î.Î.Σ
     648
     649          ** ΠαÏ.ήÏ.Ï.ε   a   Î³Î¹Î± Μα ειÏ.άγεÏ.ε κείΌεΜο Î.Î.΀Î. Ï.οΜ ΎροΌέα. **
     650
     651  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ο Ï.έλοÏ. Ï.ηÏ. Ï.ρÏ.Ï.ηÏ. γραΌΌήÏ. Ï.αρακάÏ.Ï.
     652     Ï.ηΌειÏ.ΌέΜη Όε ---> Ï.αÏ.Ï.ÎœÏ.αÏ.  $  Ï.Ï.ηΜ Î.αΜοΜική Î.αÏ.άÏ.Ï.αÏ.η.
     653
     654  2. ΠαÏ.ήÏ.Ï.ε έΜα  a  (Ï.εζÏ.) για Μα Ï.ροÏ.ΞέÏ.εÏ.ε κείΌεΜο Î.Î.΀Î. αÏ.Ï. Ï.οΜ Ï.αρακÏ.ήρα
     655     Ï.οÏ. είΜαι κάÏ.Ï. αÏ.Ï. Ï.οΜ ΎροΌέα.  (΀ο κεÏ.αλαίο  A  Ï.ροÏ.ΞέÏ.ει Ï.Ï.ο Ï.έλοÏ.
     656     Ï.ηÏ. γραΌΌήÏ.).
     657
     658ΣηΌείÏ.Ï.η: Î.Ï.Ï.Ï. αÏ.οÏ.εύγει Ï.ο Ï.άÏ.ηΌα Ï.οÏ.  i , Ï.οΜ Ï.ελεÏ.Ï.αίο Ï.αρακÏ.ήρα, Ï.ο
     659          κείΌεΜο Ï.ηÏ. ειÏ.αγÏ.γήÏ., <ESC>, ΎροΌέα-ΎεΟιά, και Ï.έλοÏ., x, ÎŒÏ.Μο και
     660          ÎŒÏ.Μο για Μα Ï.ροÏ.ΞέÏ.εÏ.ε Ï.Ï.ο Ï.έλοÏ. Ï.ηÏ. γραΌΌήÏ.!
     661
     662  3. ΣÏ.ÎŒÏ.ληρÏ.Ï.Ï.ε Ï.Ï.ρα Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή. ΣηΌειÏ.Ï.Ï.ε εÏ.ίÏ.ηÏ. Ï.Ï.ι η Ï.ροÏ.Ξήκη είΜαι
     663     Î±ÎºÏÎ¹Î²Ï.Ï. ίΎια Ï.Ï.ηΜ Î.αÏ.άÏ.Ï.αÏ.η Î.ειΌέΜοÏ. Όε Ï.ηΜ Î.αÏ.άÏ.Ï.αÏ.η Î.ιÏ.αγÏ.γήÏ., εκÏ.Ï.Ï.
     664     Î±Ï.Ï. Ï.η ΞέÏ.η Ï.οÏ. ειÏ.άγεÏ.αι Ï.ο κείΌεΜο.
     665
     666---> This line will allow you to practice
     667---> This line will allow you to practice appending text to the end of a line.
     668
     669~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     670                   Î.άΞηΌα 6.3: Î.Î.Î.Î. Î.Î.Î.Î.ΣÎ. ΀Î.Σ Î.Ν΀Î.Î.Î.΀Î.Σ΀Î.ΣÎ.Σ
     671
     672
     673 ** ΠαÏ.ήÏ.Ï.ε κεÏ.αλαίο  R  για Μα αλλάΟεÏ.ε Ï.εριÏ.Ï.Ï.Ï.εροÏ.Ï. αÏ.Ï. έΜαΜ Ï.αρακÏ.ήρεÏ.. **
     674
     675  1. Î.εÏ.ακιΜείÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή Ï.αρακάÏ.Ï. Ï.ηΌειÏ.ΌέΜη Όε --->.
     676
     677  2. ΀οÏ.οΞεÏ.ήÏ.Ï.ε Ï.οΜ ΎροΌέα Ï.Ï.ηΜ αρÏ.ή Ï.ηÏ. Ï.ρÏ.Ï.ηÏ. λέΟηÏ. Ï.οÏ. είΜαι ΎιαÏ.ορεÏ.ική
     678     Î±Ï.Ï. Ï.η ΎεύÏ.ερη γραΌΌή Ï.ηΌειÏ.ΌέΜη Όε ---> (η λέΟη 'last').
     679
     680  3. ΠαÏ.ήÏ.Ï.ε Ï.Ï.ρα  R   ÎºÎ±Î¹ αλλάΟÏ.ε Ï.ο Ï.Ï.Ï.λοιÏ.ο Ï.οÏ. κειΌέΜοÏ. Ï.Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή
     681     Î³ÏÎ¬Ï.οΜÏ.αÏ. Ï.άΜÏ. αÏ.Ï. Ï.ο Ï.αλιÏ. κείΌεΜο Ï.Ï.Ï.ε Μα κάΜεÏ.ε Ï.ηΜ Ï.ρÏ.Ï.η γραΌΌή ίΎια
     682     ÎŒÎµ Ï.η ΎεύÏ.ερη.
     683
     684---> To make the first line the same as the last on this page use the keys.
     685---> To make the first line the same as the second, type R and the new text.
     686
     687  4. ΣηΌειÏ.Ï.Ï.ε Ï.Ï.ι Ï.Ï.αΜ Ï.αÏ.άÏ.ε <ESC> για Μα βγείÏ.ε, Ï.αραΌέΜει οÏ.οιοΎήÏ.οÏ.ε
     688     Î±ÎœÎ±Î»Î»Î¿Î¯Ï.Ï.ο κείΌεΜο.
     689
     690
     691
     692~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     693                          Î.άΞηΌα 6.4: ΡΥÎ.Î.Î.ΣÎ. Î.Î Î.Î.Î.Î.Î.Σ
     694
     695
     696   ** ΡÏ.ΞΌίÏ.Ï.ε Όία εÏ.ιλογή έÏ.Ï.ι Ï.Ï.Ï.ε η αΜαζήÏ.ηÏ.η ή η αΜÏ.ικαÏ.άÏ.Ï.αÏ.η Μα αγΜοεί
     697      Ï.η ΎιαÏ.ορά Ï.εζÏ.Îœ-κεÏ.αλαίÏ.Îœ **
     698
     699  1. ΚάΟÏ.ε για 'ignore' ειÏ.άγοΜÏ.αÏ.:
     700     /ignore
     701     Î£Ï.ΜεÏ.ίÏ.Ï.ε αρκεÏ.έÏ. Ï.ορέÏ. Ï.αÏ.Ï.ÎœÏ.αÏ. Ï.ο Ï.λήκÏ.ρο n.
     702
     703  2. Î.έÏ.Ï.ε Ï.ηΜ εÏ.ιλογή 'ic' (Ignore case) γράÏ.οΜÏ.αÏ.:
     704     :set ic
     705
     706  3. ΚάΟÏ.ε Ï.Ï.ρα ΟαΜά για 'ignore' Ï.αÏ.Ï.ÎœÏ.αÏ.: n
     707     Î£Ï.ΜεÏ.ίÏ.Ï.ε Ï.ηΜ αΜαζήÏ.ηÏ.η ΌερικέÏ. ακÏ.Όα Ï.ορέÏ. Ï.αÏ.Ï.ÎœÏ.αÏ. Ï.ο Ï.λήκÏ.ρο n
     708
     709  4. Î.έÏ.Ï.ε Ï.ιÏ. εÏ.ιλογέÏ. 'hlsearch' και 'incsearch':
     710     :set hls is
     711
     712  5. Î.ιÏ.άγεÏ.ε Ï.Ï.ρα ΟαΜά Ï.ηΜ εΜÏ.ολή αΜαζήÏ.ηÏ.ηÏ., και ΎείÏ.ε Ï.ι Ï.Ï.ΌβαίΜει
     713     /ignore
     714
     715~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     716                               Î.Î.Î.Î.Î.Î. 6 Î Î.ΡÎ.Î.Î.ΚÎ.
     717
     718
     719  1. ΠαÏ.Ï.ÎœÏ.αÏ.  o  αΜοίγει Όία γραΌΌή Î.Î.΀Ω αÏ.Ï. Ï.οΜ ΎροΌέα και Ï.οÏ.οΞεÏ.εί Ï.οΜ
     720     ÎŽÏÎ¿ÎŒÎ­Î± Ï.Ï.ηΜ αΜοιÏ.Ï.ή γραΌΌή Ï.ε Î.αÏ.άÏ.Ï.αÏ.η Î.ειΌέΜοÏ..
     721
     722  2. ΠαÏ.ήÏ.Ï.ε  a  για Μα ειÏ.άγεÏ.ε κείΌεΜο Î.Î.΀Î. Ï.οΜ Ï.αρακÏ.ήρα Ï.Ï.οΜ οÏ.οίο είΜαι
     723     Î¿ ΎροΌέαÏ.. ΠαÏ.Ï.ÎœÏ.αÏ. κεÏ.αλαίο  A  αÏ.Ï.Ï.ΌαÏ.α Ï.ροÏ.ΞέÏ.ει κείΌεΜο Ï.Ï.ο Ï.έλοÏ.
     724     Ï.ηÏ. γραΌΌήÏ..
     725
     726  3. ΠαÏ.Ï.ÎœÏ.αÏ. κεÏ.αλαίο  R  ειÏ.έρÏ.εÏ.αι Ï.Ï.ηΜ Î.αÏ.άÏ.Ï.αη Î.ÎœÏ.ικαÏ.άÏ.Ï.αÏ.ηÏ. ΌέÏ.ρι Μα
     727     Ï.αÏ.ηΞεί Ï.ο <ESC> και Μα εΟέλΞει.
     728
     729  4. Î.ράÏ.οΜÏ.αÏ. ":set xxx" ρÏ.ΞΌίζει Ï.ηΜ εÏ.ιλογή "xxx".
     730
     731
     732
     733
     734
     735
     736
     737
     738~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     739                       Î.Î.Î.Î.Î.Î. 7: ON-LINE Î.Ν΀Î.Î.Î.Σ Î.Î.Î.Î.Î.Î.Î.Σ
     740
     741
     742                ** ΧρηÏ.ιΌοÏ.οιήÏ.Ï.ε Ï.ο on-line Ï.ύÏ.Ï.ηΌα βοήΞειαÏ. **
     743
     744  Î. Vim έÏ.ει έΜα Ï.εριεκÏ.ικÏ. on-line Ï.ύÏ.Ï.ηΌα βοήΞειαÏ.. Î.ια Μα ΟεκιΜήÏ.ει,
     745  ΎοκιΌάÏ.Ï.ε κάÏ.οιο αÏ.Ï. Ï.α Ï.ρία:
     746        - Ï.αÏ.ήÏ.Ï.ε Ï.ο Ï.λήκÏ.ρο <HELP> (αΜ έÏ.εÏ.ε κάÏ.οιο)
     747        - Ï.αÏ.ήÏ.Ï.ε Ï.ο Ï.λήκÏ.ρο <F1> (αΜ έÏ.εÏ.ε κάÏ.οιο)
     748        - γράÏ.Ï.ε   :help <ENTER>
     749
     750  Î.ράÏ.Ï.ε  :q <ENTER>   Î³Î¹Î± Μα κλείÏ.εÏ.ε Ï.ο Ï.αράΞÏ.ρο Ï.ηÏ. βοήΞειαÏ..
     751
     752  Î.Ï.ορείÏ.ε Μα βρείÏ.ε βοήΞεια Ï.άΜÏ. Ï.ε κάΞε αΜÏ.ικείΌεΜο, ΎίΜοΜÏ.αÏ. Όία Ï.αράΌεÏ.ρο
     753  Ï.Ï.ηΜ εΜÏ.ολή ":help".  Î.οκιΌάÏ.Ï.ε αÏ.Ï.ά (ΌηΜ ΟεÏ.ΜάÏ.ε Μα Ï.αÏ.άÏ.ε <ENTER>):
     754
     755        :help w
     756        :help c_<T
     757        :help insert-index
     758        :help user-manual
     759
     760
     761~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     762                  Î.Î.Î.Î.Î.Î. 8: Î.Î.Î.Î.Î.ΥΡÎ.Î.Σ΀Î. Î.ΝÎ. SCRIPT Î.Î.Î.Î.ΝÎ.ΣÎ.Σ
     763
     764                   ** Î.ΜεργοÏ.οιήÏ.Ï.ε Ï.αρακÏ.ηριÏ.Ï.ικά Ï.οÏ. Vim **
     765
     766  Î. Vim έÏ.ει Ï.ολλά Ï.εριÏ.Ï.Ï.Ï.ερα Ï.αρακÏ.ηριÏ.Ï.ικά αÏ.' Ï.,Ï.ι ο Vi, αλλά Ï.α
     767  Ï.εριÏ.Ï.Ï.Ï.ερα είΜαι αρÏ.ικά αÏ.εΜεργοÏ.οιηΌέΜα. Î.ια Μα αρÏ.ίÏ.εÏ.ε Μα Ï.ρηÏ.ιΌοÏ.οιείÏ.ε
     768  Ï.εριÏ.Ï.Ï.Ï.ερα Ï.αρακÏ.ηριÏ.Ï.ικά Ï.ρέÏ.ει Μα Ï.Ï.ιάΟεÏ.ε έΜα αρÏ.είο "vimrc".
     769
     770  1. Î.ρÏ.ίÏ.Ï.ε ΎιορΞÏ.ΜοΜÏ.αÏ. Ï.ο αρÏ.είο "vimrc", αÏ.Ï.Ï. εΟαρÏ.άÏ.αι αÏ.Ï. Ï.ο Ï.ύÏ.Ï.ηΌά Ï.αÏ.:
     771        :edit ~/.vimrc               Î³Î¹Î± Unix
     772        :edit $VIM/_vimrc            για MS-Windows
     773
     774  2. ΀Ï.ρα ειÏ.άγεÏ.ε Ï.ο κείΌεΜο Ï.αραΎείγΌαÏ.οÏ. για αρÏ.είο "vimrc":
     775        :read $VIMRUNTIME/vimrc_example.vim
     776
     777  3. Î.ράÏ.Ï.ε Ï.ο αρÏ.είο Όε Ï.ηΜ:
     778        :write
     779
     780  ΀ηΜ εÏ.Ï.ΌεΜη Ï.ορά Ï.οÏ. Ξα ΟεκιΜήÏ.εÏ.ε Ï.οΜ Vim Ξα Ï.ρηÏ.ιΌοÏ.οιήÏ.ει Ï.Ï.Ï.ιÏ.ÎŒÏ.
     781  Ï.ύΜÏ.αΟηÏ..  Î.Ï.ορείÏ.ε Μα Ï.ροÏ.ΞέÏ.εÏ.ε Ï.λεÏ. Ï.ιÏ. Ï.ροÏ.ιΌÏ.ΌεΜεÏ. εÏ.ιλογέÏ. Ï.' αÏ.Ï.Ï.
     782  Ï.ο αρÏ.είο "vimrc".
     783
     784~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     785
     786  Î.ÎŽÏ. ολοκληρÏ.ΜεÏ.αι Ï.ο Vim Tutor. ΣκοÏ.Ï.Ï. Ï.οÏ. ήÏ.αΜ Μα ÎŽÏ.Ï.ει Όία Ï.ύΜÏ.οΌη
     787  Ï.ερίληÏ.η Ï.οÏ. Ï.Ï.ÎœÏ.άκÏ.η Vim, Ï.οÏ.λάÏ.ιÏ.Ï.οΜ Ï.Ï.Ï.η Ï.Ï.Ï.ε Μα Ï.αÏ. εÏ.ιÏ.ρέÏ.ει Μα
     788  Ï.ρηÏ.ιΌοÏ.οιήÏ.εÏ.ε Ï.οΜ Ï.Ï.ÎœÏ.άκÏ.η αρκεÏ.ά εύκολα. Î.Ï.έÏ.ει Ï.ολύ αÏ.Ï. Όία
     789  ολοκληρÏ.ΌέΜη Ï.αροÏ.Ï.ίαÏ.η καΞÏ.Ï. ο Vim έÏ.ει Ï.άρα Ï.ολλέÏ. εΜÏ.ολέÏ.. Î.ιαβάÏ.Ï.ε
     790  καÏ.Ï.Ï.ιΜ Ï.ο εγÏ.ειρίΎιο Ï.ρήÏ.ηÏ.:
     791        ":help user-manual".
     792
     793  Î.ια Ï.εραιÏ.έρÏ. ΎιάβαÏ.Όα και ΌελέÏ.η, Ï.Ï.Ï.Ï.ήΜεÏ.αι αÏ.Ï.Ï. Ï.ο βιβλίο:
     794        Vim - Vi Improved - by Steve Oualline
     795        Publisher: New Riders
     796        ΀ο Ï.ρÏ.Ï.ο βιβλίο Ï.λήρÏ.Ï. αÏ.ιερÏ.ΌέΜο Ï.Ï.οΜ Vim.
     797        Î.ΎιαίÏ.ερα Ï.ρήÏ.ιΌο για αρÏ.άριοÏ.Ï..
     798        Î¥Ï.άρÏ.οÏ.Îœ Ï.ολλά Ï.αραΎείγΌαÏ.α και εικÏ.ΜεÏ..
     799        Î.είÏ.ε Ï.ηΜ http://iccf-holland.org/click5.html
     800
     801  Î.Ï.Ï.Ï. Ï.ο βιβλίο είΜαι Ï.αλιÏ.Ï.ερο και Ï.εριÏ.Ï.Ï.Ï.ερο για Ï.οΜ Vi Ï.αρά για Ï.οΜ Vim,
     802  αλλά εÏ.ίÏ.ηÏ. Ï.Ï.ΜιÏ.Ï.Ï.ΌεΜο:
     803        Learning the Vi Editor - by Linda Lamb
     804        Publisher: O'Reilly & Associates Inc.
     805        Î.ίΜαι έΜα καλÏ. βιβλίο για Μα ΌάΞεÏ.ε Ï.Ï.εΎÏ.Îœ Ï.α Ï.άΜÏ.α Ï.οÏ. ΞέλεÏ.ε
     806        Μα κάΜεÏ.ε Όε Ï.οΜ Vi.
     807        Î. έκÏ.η έκΎοÏ.η Ï.εριέÏ.ει ακÏ.Όα Ï.ληροÏ.ορίεÏ. για Ï.οΜ Vim.
     808
     809  Î.Ï.Ï.ή η Ï.εριήγηÏ.η γράÏ.Ï.ηκε αÏ.Ï. Ï.οÏ.Ï. Michael C. Pierce και Robert K. Ware,
     810  Colorado School of Mines Ï.ρηÏ.ιΌοÏ.οιÏ.ÎœÏ.αÏ. ιΎέεÏ. αÏ.Ï. Ï.οΜ Charles Smith,
     811  Colorado State University.  E-mail: bware@mines.colorado.edu.
     812
     813  ΠροÏ.αρΌογή για Ï.οΜ Vim αÏ.Ï. Ï.οΜ Bram Moolenaar.
     814
     815~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • runtime/tutor/tutor.ru.utf-8

    diff -Naur vim70.orig/runtime/tutor/tutor.ru.utf-8 vim70/runtime/tutor/tutor.ru.utf-8
    old new  
     1===============================================================================
     2=    Ð. П б Ñ. П   Ð¿ П ж а л П в а Ñ. Ñ.   Ð²   Ñ. Ñ. е б Ðœ О к   VIM  -  Ð.еÑ.сОя 1.5 =
     3===============================================================================
     4     Vim --- эÑ.П ПÑ.еМÑ. ЌПÑ.ÐœÑ.й Ñ.еЎакÑ.ПÑ., ОЌеÑ.Ñ.Ой ЌМПжесÑ.вП кПЌаМЎ, слОÑ.кПЌ
     5     ÐŒÐœÐŸÐ³ÐŸ Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. ОÑ. все ЌПжМП бÑ.лП ПпОсаÑ.Ñ. в Ñ.акПЌ Ñ.Ñ.ебМОке, как
     6     ÑÑ.ПÑ.. ЭÑ.ПÑ. Ñ.Ñ.ебМОк пÑ.ОзваМ ПбÑ.ясМОÑ.Ñ. ЎПсÑ.аÑ.ПÑ.МПе Ñ.ОслП кПЌаМЎ Ўля Ñ.ПгП,
     7     Ñ.Ñ.ПбÑ. Ð.Ñ. ЌПглО с легкПсÑ.Ñ.Ñ. ОспПлÑ.зПваÑ.Ñ. Vim в каÑ.есÑ.ве Ñ.еЎакÑ.ПÑ.а ПбÑ.егП
     8     ÐœÐ°Ð·ÐœÐ°Ñ.еМОя.
     9
     10     Ð.аЌ пПÑ.Ñ.ебÑ.еÑ.ся пÑ.ОблОзОÑ.елÑ.МП 25-30 ЌОМÑ.Ñ. Ма ПсвПеМОе ЎаММПгП Ñ.Ñ.ебМОка в
     11     Ð·Ð°Ð²ÐžÑÐžÐŒÐŸÑÑ.О ПÑ. Ñ.ПгП, скПлÑ.кП вÑ.еЌеМО Ð.Ñ. пПÑ.Ñ.аÑ.ОÑ.е Ма экспеÑ.ОЌеМÑ.Ñ..
     12
     13     Ð.ПЌаМЎÑ. в Ñ.Ñ.ПкаÑ. бÑ.ÐŽÑ.Ñ. ЌПЎОÑ.ОÑ.ОÑ.ПваÑ.Ñ. Ñ.ексÑ.. СПзЎайÑ.е кПпОÑ. эÑ.ПгП Ñ.айла,
     14     Ñ.Ñ.ПбÑ. пПпÑ.акÑ.ОкПваÑ.Ñ.ся Ма Мей (еслО Ð.Ñ. запÑ.сÑ.ОлО "vimtutor", Ñ.П эÑ.П Ñ.же
     15     ÐºÐŸÐ¿ÐžÑ).
     16
     17     Ð.ажМП пПЌМОÑ.Ñ., Ñ.Ñ.П эÑ.ПÑ. Ñ.Ñ.ебМОк пÑ.еЎМазМаÑ.еМ Ўля ПбÑ.Ñ.еМОя в пÑ.ПÑ.ессе
     18     ÐžÑÐ¿ÐŸÐ»Ñ.зПваМОя. ЭÑ.П ПзМаÑ.аеÑ., Ñ.Ñ.П Ð.Ñ. ЎПлжМÑ. запÑ.скаÑ.Ñ. кПЌаМЎÑ. Ўля Ñ.ПгП,
     19     Ñ.Ñ.ПбÑ. как слеЎÑ.еÑ. ОÑ. ОзÑ.Ñ.ОÑ.Ñ.. Ð.слО Ð.Ñ. пÑ.ПсÑ.П пÑ.ПÑ.ОÑ.аеÑ.е Ñ.ексÑ., Ñ.П
     20     Ð·Ð°Ð±Ñ.ЎеÑ.е кПЌаМЎÑ.!
     21
     22     Ð¢ÐµÐ¿ÐµÑ.Ñ. Ñ.беЎОÑ.есÑ. в Ñ.ПЌ, Ñ.Ñ.П клавОÑ.а CapsLock Ме вклÑ.Ñ.еМа О МажЌОÑ.е
     23     ÐºÐ»Ð°Ð²ÐžÑ.Ñ.   j   ÐœÐµÑÐºÐŸÐ»Ñ.кП Ñ.аз, Ñ.ак, Ñ.Ñ.ПбÑ. УÑ.Пк 1.1 пПлМПсÑ.Ñ.Ñ. пПЌесÑ.Олся Ма
     24     ÑÐºÑ.аМе.
     25~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     26                        УÑ.Пк 1.1:  Ð.Ð.Ð Ð.Ð.Ð.ЩÐ.НÐ.Ð. Ð.УРСÐ.РА
     27
     28** Ð.ля пеÑ.еЌеÑ.еМОя кÑ.Ñ.сПÑ.а МажЌОÑ.е клавОÑ.О h,j,k,l Ñ.ак, как пПказаМП МОже. **
     29             ^
     30             k          СПвеÑ.Ñ.:   Ð.лавОÑ.а h МаÑ.ПЎОÑ.ся слева О пеÑ.еЌеÑ.аеÑ. влевП.
     31       < h       l >            Ð.лавОÑ.а l МаÑ.ПЎОÑ.ся спÑ.ава О пеÑ.еЌеÑ.аеÑ. впÑ.авП.
     32             j                  Ð.лавОÑ.а j пПÑ.Пжа Ма сÑ.Ñ.елкÑ. `вМОз'.
     33             v
     34  1. Ð.ПЎвОгайÑ.е кÑ.Ñ.сПÑ. пП экÑ.аМÑ., пПка Ме пПÑ.Ñ.всÑ.вÑ.еÑ.е себя Ñ.веÑ.еММП.
     35
     36  2. НаЎавОÑ.е клавОÑ.Ñ. `вМОз' (j) пПка ПМа Ме МаÑ.МеÑ. пПвÑ.ПÑ.яÑ.Ñ.ся.
     37---> ТепеÑ.Ñ. Ð.Ñ. зМаеÑ.е, как пеÑ.ейÑ.О к слеЎÑ.Ñ.Ñ.еЌÑ. Ñ.Ñ.ПкÑ..
     38
     39  3. Ð.спПлÑ.зÑ.я клавОÑ.Ñ. `вМОз' пеÑ.ейЎОÑ.е к УÑ.ПкÑ. 1.2.
     40
     41Ð.аЌеÑ.аМОе: Ð.слО вÑ. пПка Ме Ñ.веÑ.еМÑ. в Ñ.ПЌ, Ñ.Ñ.П МабОÑ.аеÑ.е, МажЌОÑ.е <ESC> Ўля
     42           Ð¿ÐµÑ.еÑ.ПЎа в ПбÑ.Ñ.ÐœÑ.й Ñ.ежОЌ (Normal mode). Ð.Псле эÑ.ПгП пеÑ.еМабеÑ.ОÑ.е
     43           Ñ.Ñ.ебÑ.еЌÑ.Ñ. кПЌаМЎÑ..
     44
     45Ð.аЌеÑ.аМОе: Ð.бÑ.Ñ.ÐœÑ.е клавОÑ.О Ñ.пÑ.авлеМОя кÑ.Ñ.сПÑ.ПЌ (сÑ.Ñ.елкО) Ñ.акже ЎПлжМÑ.
     46           Ñ.абПÑ.аÑ.Ñ.. Ð.ЎМакП, клавОÑ.О hjkl пПзвПляÑ. Ð.аЌ пеÑ.еЌеÑ.аÑ.Ñ.ся
     47           Ð·ÐœÐ°Ñ.ОÑ.елÑ.МП бÑ.сÑ.Ñ.ее, как Ñ.ПлÑ.кП Ð.Ñ. МаÑ.Ñ.ОÑ.есÑ. ОЌО пПлÑ.зПваÑ.Ñ.ся.
     48~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     49                  УÑ.Пк 1.2: Ð.АÐ.УСÐ. Ð. Ð.АÐ.Ð.РКÐ.НÐ.Ð. РАÐ.Ð.ТЫ С VIM
     50
     51!! Ð.НÐ.Ð.АНÐ.Ð.! Ð.Ñ.ежЎе, Ñ.еЌ вÑ.пПлМяÑ.Ñ. лÑ.бПй Оз ПпОсаММÑ.Ñ. МОже Ñ.агПв, пÑ.ПÑ.Ñ.ОÑ.е
     52                               Ñ.Ñ.Пк Ñ.елОкПЌ !!
     53
     54  1. НажЌОÑ.е клавОÑ.Ñ. <ESC> (Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. Ñ.ЎПсÑ.ПвеÑ.ОÑ.Ñ.ся, Ñ.Ñ.П Ð.Ñ. в ПбÑ.Ñ.МПЌ
     55     Ñ.ежОЌе (Normal mode)).
     56
     57  2. НабеÑ.ОÑ.е:                  :q! <ENTER>.
     58
     59---> ЭÑ.П пПзвПлОÑ. Ð.аЌ вÑ.йÑ.О Оз Ñ.еЎакÑ.ПÑ.а Ð.Ð.Ð. СÐ.ХРАНÐ.НÐ.Я лÑ.бÑ.Ñ. сЎелаММÑ.Ñ.
     60     ÐžÐ·ÐŒÐµÐœÐµÐœÐžÐ¹. Ð.слО Ð.Ñ. Ñ.ПÑ.ОÑ.е сПÑ.Ñ.аМОÑ.Ñ. ОзЌеМеМОя О вÑ.йÑ.О:
     61                                :wq  <ENTER>
     62
     63  3. Ð.ПгЎа Ð.Ñ. Ñ.вОЎОÑ.е пÑ.ОглаÑ.еМОе кПЌаМЎМПй ПбПлПÑ.кО, МабеÑ.ОÑ.е кПЌаМЎÑ.,
     64     ÐºÐŸÑ.ПÑ.ая пÑ.Овела Ð.ас в эÑ.ПÑ. Ñ.Ñ.ебМОк. ЭÑ.П ЌПжеÑ. бÑ.Ñ.Ñ.
     65                                vimtutor ru <ENTER>
     66     Ð.бÑ.Ñ.МП ЌПжМП ОспПлÑ.зПваÑ.Ñ.:  vim tutor.ru <ENTER>
     67
     68---> 'vim' пПзвПляеÑ. запÑ.сÑ.ОÑ.Ñ. Ñ.еЎакÑ.ПÑ. vim, 'tutor.ru' --- эÑ.П Ñ.айл, кПÑ.ПÑ.Ñ.й
     69     Ð.Ñ. бÑ.ЎеÑ.е Ñ.еЎакÑ.ОÑ.ПваÑ.Ñ..
     70
     71  4. Ð.слО Ð.Ñ. Ñ.веÑ.еМÑ. в Ñ.ПЌ, Ñ.Ñ.П запПЌМОлО эÑ.О Ñ.агО, вÑ.пПлМОÑ.е Ñ.агО ПÑ. 1 ЎП 3
     72     Ñ.Ñ.ПбÑ. вÑ.йÑ.О сМПва запÑ.сÑ.ОÑ.Ñ. Ñ.еЎакÑ.ПÑ.. Ð.аÑ.еЌ пеÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз к
     73     Ð£Ñ.ПкÑ. 1.3.
     74~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     75                  УÑ.Пк 1.3: Ð Ð.Ð.АÐ.ТÐ.Ð Ð.Ð.АНÐ.Ð. ТÐ.Ð.СТА - УÐ.АÐ.Ð.НÐ.Ð.
     76
     77
     78** НаÑ.ПЎясÑ. в ПбÑ.Ñ.МПЌ Ñ.ежОЌе МажЌОÑ.е x, Ñ.Ñ.ПбÑ. Ñ.ЎалОÑ.Ñ. сОЌвПл пПЎ кÑ.Ñ.сПÑ.ПЌ. **
     79
     80  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. к сÑ.Ñ.Пке вМОзÑ., пПЌеÑ.еММПй --->.
     81
     82  2. Ð.ля ОспÑ.авлеМОя ПÑ.ОбПк, пеÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ., пПка ПМ Ме ПкажеÑ.ся МаЎ
     83     Ñ.ЎаляеЌÑ.ÐŒ сОЌвПлПЌ.
     84
     85  3. НажЌОÑ.е клавОÑ.Ñ. x Ўля Ñ.ЎалеМОя Ñ.Ñ.ебÑ.еЌПгП сОЌвПла.
     86
     87  4. Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 2--4 пПка сÑ.Ñ.Пка Ме бÑ.ЎеÑ. ОспÑ.авлеМа.
     88
     89---> Ð.Ñ. Ñ.Ñ.Ñ.ПпПÑ.а кПпÑ.Ñ.Ñ. пппÑ.лÑ. ппП пппПлÑ. леÑ.Ñ.ОÑ.Ñ..
     90
     91  5. ТепеÑ.Ñ., кПгЎа сÑ.Ñ.Пка ПÑ.кПÑ.Ñ.екÑ.ОÑ.ПваМа, пеÑ.еÑ.ПЎОÑ.е к Ñ.Ñ.ПкÑ. 1.4.
     92
     93Ð.АÐ.Ð.ЧАНÐ.Ð.: Ð. Ñ.ПЎе ПсвПеМОя эÑ.ПгП Ñ.Ñ.ебМОка Ме пÑ.Ñ.айÑ.есÑ. запПЌОМаÑ.Ñ., Ñ.Ñ.ОÑ.е
     94           Ð² пÑ.ПÑ.ессе ОспПлÑ.зПваМОя.
     95
     96
     97~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     98                  УÑ.Пк 1.4: Ð Ð.Ð.АÐ.ТÐ.Ð Ð.Ð.АНÐ.Ð. ТÐ.Ð.СТА - Ð.СТАÐ.Ð.А
     99
     100
     101 ** НаÑ.ПЎясÑ. в ПбÑ.Ñ.МПЌ Ñ.ежОЌе (Normal mode), МажЌОÑ.е i Ўля всÑ.авкО Ñ.ексÑ.а. **
     102
     103  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. к пеÑ.вПй сÑ.Ñ.Пке вМОзÑ., пПЌеÑ.еММПй --->.
     104
     105  2. Ð.ля Ñ.ПгП, Ñ.Ñ.ПбÑ. сЎелаÑ.Ñ. пеÑ.вÑ.Ñ. сÑ.Ñ.ПкÑ. ОЎеМÑ.ОÑ.МПй вÑ.ПÑ.Пй, пПЌесÑ.ОÑ.е
     106     ÐºÑ.Ñ.сПÑ. Ма сОЌвПл Ð.Ð.Ð Ð.Ð. кПÑ.ПÑ.Ñ.ÐŒ слеЎÑ.еÑ. всÑ.авОÑ.Ñ. Ñ.ексÑ..
     107
     108  3. НажЌОÑ.е i О МабеÑ.ОÑ.е Ñ.Ñ.ебÑ.еЌÑ.е ЎПбавлеМОя.
     109
     110  4. Ð.Псле ОспÑ.авлеМОя всеÑ. ПÑ.ОбПк МажЌОÑ.е <ESC> Ўля вПзвÑ.аÑ.а в ПбÑ.Ñ.ÐœÑ.й Ñ.ежОЌ.
     111     Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 2--4, пПка Ñ.Ñ.аза Ме бÑ.ЎеÑ. ОспÑ.авлеМа пПлМПсÑ.Ñ.Ñ..
     112
     113---> ЧасÑ.Ñ. Ñ.ексÑ.а в сÑ.Ñ.Пке беслеЎМП .
     114---> ЧасÑ.Ñ. Ñ.ексÑ.а в эÑ.Пй сÑ.Ñ.Пке бесслеЎМП пÑ.Ппала.
     115
     116  5. Ð.ПгЎа ПсвПОÑ.е всÑ.авкÑ. Ñ.ексÑ.а, пеÑ.еÑ.ПЎОÑ.е ЎалÑ.Ñ.е к РезÑ.Ќе.
     117
     118
     119
     120~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     121                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 1
     122
     123  1. Ð.Ñ.Ñ.сПÑ. пеÑ.еЌеÑ.аеÑ.ся лОбП клавОÑ.аЌО сП сÑ.Ñ.елкаЌО, лОбП клавОÑ.аЌО hjkl.
     124         h (влевП) j (вМОз)       k (ввеÑ.Ñ.)           l (впÑ.авП)
     125
     126  2. Ð.ля запÑ.ска Vim (Оз пÑ.ОглаÑ.еМОя % кПЌаМЎМПй ПбПлПÑ.кО) МабеÑ.ОÑ.е:
     127     vim Ð.Ð.Я_ЀАÐ.Ð.А <ENTER>
     128
     129  3. Ð.ля завеÑ.Ñ.еМОя Ñ.абПÑ.Ñ. с Vim МабеÑ.ОÑ.е:
     130     <ESC>   :q!         <ENTER>  Ñ.Ñ.ПбÑ. ПÑ.казаÑ.Ñ.ся ПÑ. сПÑ.Ñ.аМеМОя ОзЌеМеМОй.
     131     Ð.лО МабеÑ.ОÑ.е:
     132     <ESC>   :wq         <ENTER>  Ñ.Ñ.ПбÑ. сПÑ.Ñ.аМОÑ.Ñ. ОзЌеМеМОя.
     133
     134  4. Ð.ля Ñ.ЎалеМОя сОЌвПла пПЎ кÑ.Ñ.сПÑ.ПЌ в ПбÑ.Ñ.МПЌ Ñ.ежОЌе, МабеÑ.ОÑ.е: x
     135
     136  5. ЧÑ.ПбÑ. всÑ.авОÑ.Ñ. Ñ.ексÑ. пеÑ.еЎ кÑ.Ñ.сПÑ.ПЌ в ПбÑ.Ñ.МПЌ Ñ.ежОЌе, МабеÑ.ОÑ.е:
     137         i     Ð²Ð²ÐŸÐŽÐžÑ.е Ñ.ексÑ.        <ESC>
     138
     139Ð.АÐ.Ð.ЧАНÐ.Ð.: НажаÑ.Ое <ESC> пеÑ.еЌесÑ.ОÑ. Ð.ас в ПбÑ.Ñ.ÐœÑ.й Ñ.ежОЌ (Normal mode) лОбП
     140           Ð¿Ñ.еÑ.веÑ. МежелаÑ.елÑ.ÐœÑ.Ñ. О Ñ.асÑ.ОÑ.МП завеÑ.Ñ.еММÑ.Ñ. кПЌаМЎÑ..
     141
     142ТепеÑ.Ñ. пеÑ.еÑ.ПЎОЌ к УÑ.ПкÑ. 2.
     143
     144~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     145                          УÑ.Пк 2.1: Ð.Ð.Ð.АНÐ.Ы УÐ.АÐ.Ð.НÐ.Я
     146
     147
     148        ** НабеÑ.ОÑ.е dw Ўля Ñ.ЎалеМОя Ñ.Ñ.асÑ.ка Ñ.ексÑ.а ЎП кПМÑ.а слПва. **
     149
     150  1. НажЌОÑ.е <ESC>, Ñ.Ñ.ПбÑ. пеÑ.ейÑ.О в ПбÑ.Ñ.ÐœÑ.й Ñ.ежОЌ.
     151
     152  2. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     153
     154  3. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. в МаÑ.алП слПва, кПÑ.ПÑ.Пе слеЎÑ.еÑ. Ñ.ЎалОÑ.Ñ..
     155
     156  4. НабеÑ.ОÑ.е  dw , Ñ.Ñ.ПбÑ. Ñ.ЎалОÑ.Ñ. эÑ.П слПвП.
     157
     158Ð.АÐ.Ð.ЧАНÐ.Ð.: Ð.П вÑ.еЌя МабПÑ.а бÑ.квÑ. dw пПявяÑ.ся в пПслеЎМей сÑ.Ñ.Пке экÑ.аМа. Ð.слО
     159           Ð.Ñ. Ñ.Ñ.П-Ñ.П МабеÑ.еÑ.е МепÑ.авОлÑ.МП, МажЌОÑ.е <ESC> О МаÑ.МОÑ.е сМаÑ.ала.
     160
     161---> НескПлÑ.кП слПв Ñ.аÑ.ОМаЎ в эÑ.ПЌ пÑ.еЎлПжеМОО авÑ.ПкÑ.аМ ОзлОÑ.МО.
     162
     163  5. Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 3 О 4, пПка Ме ОспÑ.авОÑ.е все ПÑ.ОбкО О пеÑ.еÑ.ПЎОÑ.е к
     164     Ð£Ñ.ПкÑ. 2.2.
     165
     166
     167~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     168                  УÑ.Пк 2.2: Ð.Ð.Ð.Ð.Ð.НÐ.ТÐ.Ð.ЬНЫÐ. Ð.Ð.Ð.АНÐ.Ы УÐ.АÐ.Ð.НÐ.Я
     169
     170
     171            ** НабеÑ.ОÑ.е d$ Ўля Ñ.ЎалеМОя Ñ.ексÑ.а ЎП кПМÑ.а сÑ.Ñ.ПкО. **
     172
     173  1. НажЌОÑ.е <ESC>, Ñ.Ñ.ПбÑ. пеÑ.ейÑ.О в ПбÑ.Ñ.ÐœÑ.й Ñ.ежОЌ.
     174
     175  2. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     176
     177  3. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. к кПМÑ.Ñ. пÑ.авОлÑ.МПй сÑ.Ñ.ПкО (Ð.Ð.СÐ.Ð. пеÑ.вПй . ).
     178
     179  4. ЧÑ.ПбÑ. Ñ.ЎалОÑ.Ñ. ПсÑ.аÑ.Пк сÑ.Ñ.ПкО, МабеÑ.ОÑ.е  d$ .
     180
     181---> Ð.Ñ.П-Ñ.П МабÑ.ал ПкПМÑ.аМОе эÑ.Пй сÑ.Ñ.ПкО ЎважЎÑ.. ПкПМÑ.аМОе эÑ.Пй сÑ.Ñ.ПкО ЎважЎÑ..
     182
     183
     184  5.ЧÑ.ПбÑ. лÑ.Ñ.Ñ.е Ñ.азПбÑ.аÑ.Ñ.ся в эÑ.ПЌ, пеÑ.еÑ.ПЎОÑ.е к УÑ.ПкÑ. 2.3.
     185
     186
     187
     188
     189
     190~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     191                         Ð£Ñ.Пк 2.3: Ð.Ð.Ð.АНÐ.Ы Ð. Ð.Ð.ЪÐ.Ð.ТЫ
     192
     193
     194  ЀПÑ.ЌаÑ. кПЌаМЎÑ. `Ñ.ЎалеМОе' d Ñ.акПв:
     195
     196         [Ñ.ОслП]   d       ÐŸÐ±Ñ.екÑ.        Ð.Ð.Ð.           d   [Ñ.ОслП]   ÐŸÐ±Ñ.екÑ.
     197  Ð.ЎесÑ.:
     198    Ñ.ОслП  - скПлÑ.кП Ñ.аз ОспПлМОÑ.Ñ. кПЌаМЎÑ. (МеПбязаÑ.елÑ.МП, пП Ñ.ЌПлÑ.аМОÑ.=1).
     199    d      - кПЌаМЎа Ñ.ЎалеМОя.
     200    ПбÑ.екÑ. - с Ñ.еЌ кПЌаМЎа ЎПлжМа бÑ.Ñ.Ñ. вÑ.пПлМеМа (пеÑ.еÑ.ОслеМП МОже).
     201
     202  Ð.Ñ.аÑ.кОй спОсПк ПбÑ.екÑ.Пв:
     203    w - ПÑ. кÑ.Ñ.сПÑ.а ЎП кПМÑ.а слПва, вклÑ.Ñ.ая завеÑ.Ñ.аÑ.Ñ.Ой пÑ.Пбел.
     204    e - ПÑ. кÑ.Ñ.сПÑ.а ЎП кПМÑ.а слПва, НÐ. вклÑ.Ñ.ая завеÑ.Ñ.аÑ.Ñ.Ой пÑ.Пбел.
     205    $ - ПÑ. кÑ.Ñ.сПÑ.а ЎП кПМÑ.а сÑ.Ñ.ПкО.
     206    ^ - ПÑ. кÑ.Ñ.сПÑ.а ЎП МаÑ.ала сÑ.Ñ.ПкО.
     207
     208Ð.АÐ.Ð.ЧАНÐ.Ð.: Ð.Ñ.ПсÑ.Пе МажаÑ.Ое Ма сОЌвПл ПбÑ.екÑ.а в ПбÑ.Ñ.МПЌ Ñ.ежОЌе (Normal mode)
     209           Ð±ÐµÐ· ЎПпПлМОÑ.елÑ.ÐœÑ.Ñ. кПЌаМЎ пеÑ.еЎвОМеÑ. кÑ.Ñ.сПÑ. Ñ.ак, как Ñ.казаМП в
     210           ÑÐ¿ÐžÑÐºÐµ ПбÑ.екÑ.Пв.
     211
     212
     213
     214~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     215               Ð£Ñ.Пк 2.4: Ð.СÐ.Ð.ЮЧÐ.НÐ.Ð. Ð.Ð. Ð.РАÐ.Ð.Ð.А `Ð.Ð.Ð.АНÐ.А-Ð.Ð.ЪÐ.Ð.Т'
     216
     217
     218                 ** НабеÑ.ОÑ.е dd Ўля Ñ.ЎалеМОя всей сÑ.Ñ.ПкО. **
     219
     220  Ð.слеЎсÑ.вОе Ñ.асÑ.ПгП пÑ.ОЌеМеМОя ПпеÑ.аÑ.ОО Ñ.ЎалеМОя всей сÑ.Ñ.ПкО, Ñ.азÑ.абПÑ.Ñ.ОкО
     221  Vim Ñ.еÑ.ОлО, Ñ.Ñ.П Ўля эÑ.ПгП пÑ.ПÑ.е всегП пÑ.ПсÑ.П МабÑ.аÑ.Ñ. d ЎважЎÑ..
     222
     223  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, кП вÑ.ПÑ.Пй сÑ.Ñ.Пке Ñ.Ñ.азÑ..
     224  2. НабеÑ.ОÑ.е dd Ўля Ñ.ЎалеМОя сÑ.Ñ.ПкО.
     225  3. ТепеÑ.Ñ. пеÑ.еЌесÑ.ОÑ.есÑ. к Ñ.еÑ.веÑ.Ñ.Пй сÑ.Ñ.Пке.
     226  4. НабеÑ.ОÑ.е 2dd (вспПЌМОÑ.е пÑ.авОлП `Ñ.ОслП-кПЌаМЎа-ПбÑ.екÑ.'), Ñ.Ñ.ПбÑ. Ñ.ЎалОÑ.Ñ.
     227     ÐŽÐ²Ðµ сÑ.Ñ.ПкО.
     228
     229      1)  Ð.еÑ.ПЌ я Ñ.ПжÑ. Ма сÑ.аЎОПМ,
     230      2)  Ð., как вМезапМП кПМÑ.Олся ЎОваМ!
     231      3)  Я бПлеÑ. за ``Ð.еМОÑ.'', ``Ð.еМОÑ.'' --- Ñ.еЌпОПМ!
     232      4)  Ð.еÑ.алÑ.МП я гляжÑ. Ма МаÑ.е пПкПлеМОе!
     233      5)  Ð.гП гÑ.яЎÑ.Ñ.ее ОлÑ. пÑ.сÑ.П ОлÑ. Ñ.еЌМП...
     234      6)  Я сОжÑ. Ма скаЌейке в лПже `Ð.'
     235      7)  Ð. ОгÑ.аÑ. Ма бПлÑ.Ñ.Пй жесÑ.яМПй Ñ.Ñ.Ñ.бе.
     236
     237~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     238                          УÑ.Пк 2.5: Ð.Ð.Ð.АНÐ.А `Ð.ТÐ.АТ'
     239
     240
     241  ** НажЌОÑ.е u   ÐŽÐ»Ñ ПÑ.ЌеМÑ. Ñ.езÑ.лÑ.Ñ.аÑ.а Ñ.абПÑ.Ñ. пÑ.еЎÑ.ÐŽÑ.Ñ.ей кПЌаМЎÑ., U Ўля ПÑ.ЌеМÑ.
     242                        ОспÑ.авлеМОй вП всей сÑ.Ñ.Пке. **
     243
     244  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй ---> О Ñ.сÑ.аМПвОÑ.е егП Ма
     245     Ð¿ÐµÑ.вÑ.Ñ. ПÑ.ОбкÑ..
     246  2. НажЌОÑ.е x Ўля Ñ.ЎалеМОя пеÑ.вПгП МепÑ.авОлÑ.МПгП сОЌвПла.
     247  3. ТепеÑ.Ñ. МажЌОÑ.е u Ўля ПÑ.ЌеМÑ. (ПÑ.каÑ.а) пПслеЎМей вÑ.пПлМеММПй кПЌаМЎÑ..
     248  4. Ð.спÑ.авÑ.Ñ.е все ПÑ.ОбкО в сÑ.Ñ.Пке, ОспПлÑ.зÑ.я кПЌаМЎÑ. x .
     249  5. ТепеÑ.Ñ. МажЌОÑ.е заглавМÑ.Ñ. U Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. веÑ.ÐœÑ.Ñ.Ñ. всÑ. сÑ.Ñ.ПкÑ. в ОсÑ.ПЎМПе
     250     ÑÐŸÑÑ.ПяМОе.
     251  6. НажЌОÑ.е u МескПлÑ.кП Ñ.аз Ўля ПÑ.ЌеМÑ. кПЌаМЎÑ. U О пÑ.еЎÑ.ÐŽÑ.Ñ.ОÑ. кПЌаМЎ.
     252  7. НажЌОÑ.е Ñ.епеÑ.Ñ. CTRL-R (Ñ.ЎеÑ.жОвайÑ.е клавОÑ.Ñ. CTRL МажаÑ.Пй в ЌПЌеМÑ. МажаÑ.Оя
     253  R)     ÐœÐµÑÐºÐŸÐ»Ñ.кП Ñ.аз Ўля вПзвÑ.аÑ.а кПЌаМЎ (ПÑ.каÑ. ПÑ.каÑ.а).
     254
     255---> Ð.спÑ.Ñ.авÑ.Ñ.е ППÑ.ОбкО в эÑ.Пйй сÑ.Ñ.Пке О веÑ.МОÑ.Ñ.е ОÑ. сс пПЌПÑ.Ñ.Ñ.Ñ. `ПÑ.каÑ.а'.
     256
     257  8. ЭÑ.П бÑ.лО ПÑ.еМÑ. пПлезМÑ.е кПЌаМЎÑ.. Ð.алее пеÑ.еÑ.ПЎОÑ.е к РезÑ.Ќе УÑ.Пка 2.
     258
     259
     260~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     261                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 2
     262
     263
     264  1. Ð.ля Ñ.ЎалеМОя Ñ.ексÑ.а ПÑ. кÑ.Ñ.сПÑ.а ЎП кПМÑ.а слПва МабеÑ.ОÑ.е:    dw
     265
     266  2. Ð.ля Ñ.ЎалеМОя Ñ.ексÑ.а ПÑ. кÑ.Ñ.сПÑ.а ЎП кПМÑ.а сÑ.Ñ.ПкО МабеÑ.ОÑ.е:    d$
     267
     268  3. Ð.ля Ñ.ЎалеМОя всей сÑ.Ñ.ПкО МабеÑ.ОÑ.е:    dd
     269
     270  4. ЀПÑ.ЌаÑ. кПЌаМЎÑ. в ПбÑ.Ñ.МПЌ Ñ.ежОЌе ОЌееÑ. вОЎ:
     271
     272       [Ñ.ОслП]   ÐºÐŸÐŒÐ°ÐœÐŽÐ°   ÐŸÐ±Ñ.екÑ.     Ð.Ð.Ð.     ÐºÐŸÐŒÐ°ÐœÐŽÐ°       [Ñ.ОслП]   ÐŸÐ±Ñ.екÑ.
     273     Ð³ÐŽÐµ:
     274       Ñ.ОслП   - скПлÑ.кП Ñ.аз пПвÑ.ПÑ.ОÑ.Ñ. вÑ.пПлМеМОе кПЌаМЎÑ.
     275       ÐºÐŸÐŒÐ°ÐœÐŽÐ° - Ñ.Ñ.П вÑ.пПлМОÑ.Ñ., МапÑ.ОЌеÑ. d Ўля Ñ.ЎалеМОя
     276       ÐŸÐ±Ñ.екÑ.  - Ма Ñ.Ñ.П ЎПлжМа вПзЎейсÑ.вПваÑ.Ñ. кПЌаМЎа, МапÑ.ОЌеÑ. w (слПвП),
     277                $ (ЎП кПМÑ.а сÑ.Ñ.ПкО), О Ñ..ÐŽ.
     278
     279  5. Ð.ля ПÑ.ЌеМÑ. (ПÑ.каÑ.а) пÑ.еЎÑ.есÑ.вÑ.Ñ.Ñ.ОÑ. ЎейсÑ.вОй МабеÑ.ОÑ.е:  u (сÑ.Ñ.ПÑ.Мая u)
     280     Ð.ля ПÑ.ЌеМÑ. (ПÑ.каÑ.а) всеÑ. ОзЌеМеМОй в сÑ.Ñ.Пке МабеÑ.ОÑ.е:  U (пÑ.ПпОсМая U)
     281     Ð.ля ПÑ.ЌеМÑ. ПÑ.каÑ.а МабеÑ.ОÑ.е:  CTRL-R
     282
     283~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     284                          УÑ.Пк 3.1: Ð.Ð.Ð.АНÐ.А Ð.СТАÐ.Ð.Ð.
     285
     286
     287   ** НабеÑ.ОÑ.е p Ўля всÑ.авкО пПслеЎМегП Ñ.ЎалеММПгП Ñ.ексÑ.а пПсле кÑ.Ñ.сПÑ.а. **
     288
     289  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз к пПслеЎМей сÑ.Ñ.Пке Оз МабПÑ.а.
     290
     291  2. НабеÑ.ОÑ.е dd Ўля Ñ.ЎалеМОя сÑ.Ñ.ПкО О ее сПÑ.Ñ.аМеМОя в бÑ.Ñ.еÑ.е Vim'а.
     292
     293  3. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. к сÑ.Ñ.Пке НАÐ. Ñ.еЌ ЌесÑ.ПЌ, кÑ.Ўа слеЎÑ.еÑ. всÑ.авОÑ.Ñ.
     294     Ñ.ЎалеММÑ.Ñ. сÑ.Ñ.ПкÑ..
     295
     296  4. НаÑ.ПЎясÑ. в ПбÑ.Ñ.МПЌ Ñ.ежОЌе МабеÑ.ОÑ.е p Ўля заЌеМÑ. сÑ.Ñ.ПкО.
     297
     298  5. Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 2--4, пПка Ме Ñ.ассÑ.авОÑ.е все сÑ.Ñ.ПкО в ÐœÑ.жМПЌ пПÑ.яЎке.
     299
     300     Ð³) Ð. лÑ.Ñ.Ñ.е вÑ.ÐŽÑ.ЌаÑ.Ñ. Ме ЌПг.
     301     Ð±) Ð.ПгЎа Ме в Ñ.Ñ.Ñ.кÑ. заМеЌПг,
     302     Ð²) Ð.Ðœ Ñ.важаÑ.Ñ. себя засÑ.авОл
     303     Ð°) Ð.Пй ЎяЎя саЌÑ.Ñ. Ñ.есÑ.ÐœÑ.Ñ. пÑ.авОл
     304
     305
     306~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     307                       Ð£Ñ.Пк 3.2: Ð.Ð.Ð.АНÐ.А Ð.АÐ.Ð.НЫ
     308
     309
     310          ** НабеÑ.ОÑ.е r О сОЌвПл, заЌеМяÑ.Ñ.Ой сОЌвПл пПЎ кÑ.Ñ.сПÑ.ПЌ. **
     311
     312  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     313
     314  2. УсÑ.аМПвОÑ.е кÑ.Ñ.сПÑ. Ñ.ак, Ñ.Ñ.ПбÑ. ПМ МаÑ.ПЎОлся МаЎ пеÑ.вПй ПÑ.ОбкПй.
     315
     316  3. НабеÑ.ОÑ.е r О заÑ.еЌ сОЌвПл, ОспÑ.авляÑ.Ñ.Ой ПÑ.ОбкÑ..
     317
     318  4. Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 2 О 3, пПка пеÑ.вая сÑ.Ñ.Пка Ме бÑ.ЎеÑ. ОспÑ.авлеМа.
     319
     320--->  Ð. ЌПЌегÑ. МабÑ.Ñ.а эÑ.Пй Ñ.Ñ.Ñ.ПкО кПе0кÑ.П с Ñ.Ñ.Ñ.ЎПЌ пПпвЎал пП клваОÑ.аЌ!
     321--->  Ð. ЌПЌеМÑ. МабПÑ.а эÑ.Пй сÑ.Ñ.ПкО кПе-кÑ.П с Ñ.Ñ.Ñ.ЎПЌ пПпаЎал пП клавОÑ.аЌ!
     322
     323  5. ТепеÑ.Ñ. пеÑ.еÑ.ПЎОÑ.е к УÑ.ПкÑ. 3.2.
     324
     325Ð.АÐ.Ð.ЧАНÐ.Ð.: Ð.ПЌМОÑ.е, Ñ.Ñ.П вÑ. ЎПлжМÑ. Ñ.Ñ.ОÑ.Ñ.ся в пÑ.ПÑ.ессе Ñ.абПÑ.Ñ., а Ме пÑ.ПсÑ.П
     326           Ð·Ð°Ð¿ÐŸÐŒÐžÐœÐ°Ñ.
     327
     328
     329~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     330                         Ð£Ñ.Пк 3.3: Ð.Ð.Ð.АНÐ.А Ð.Ð.Ð.Ð.НÐ.НÐ.Я
     331
     332
     333                ** Ð.ля ОзЌеМеМОя Ñ.асÑ.О слПва МабеÑ.ОÑ.е cw . **
     334
     335  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     336
     337  2. РаспПлПжОÑ.е кÑ.Ñ.сПÑ. МаЎ бÑ.квПй `o' в слПве `сПла'.
     338
     339  3. НабеÑ.ОÑ.е cw О ОспÑ.авÑ.Ñ.е слПвП (в ЎаММПЌ слÑ.Ñ.ае, МабеÑ.ОÑ.е `лПв'.)
     340
     341  4. НажЌОÑ.е <ESC> О пеÑ.еÑ.ПЎОÑ.е к слеЎÑ.Ñ.Ñ.ей ПÑ.Обке (к пеÑ.вПЌÑ. сОЌвПлÑ., кПÑ.ПÑ.Ñ.й
     342     ÐœÐ°ÐŽÐŸ ОзЌеМОÑ.Ñ..)
     343
     344  5. Ð.ПвÑ.ПÑ.ОÑ.е Ñ.агО 3--4 пПка пеÑ.вПе пÑ.еЎлПжеМОе Ме сÑ.аМеÑ. ОЎеМÑ.ОÑ.ÐœÑ.ÐŒ вÑ.ПÑ.ПЌÑ..
     345
     346---> НескПлÑ.кП сПла в эÑ.гÑ. сÑ.Ñ.Пке Ñ.пгÑ.Ñ.бÑ. Ñ.еЎалзкÑ.Ñ.ОесвÑ..
     347---> НескПлÑ.кП слПв в эÑ.Пй сÑ.Ñ.Пке Ñ.Ñ.ебÑ.Ñ.Ñ. Ñ.еЎакÑ.ОÑ.ПваМОя.
     348
     349Ð.бÑ.аÑ.ОÑ.е вМОЌаМОе, Ñ.Ñ.П cw Ме Ñ.ПлÑ.кП заЌеМяеÑ. слПвП, МП О пеÑ.евПЎОÑ. вас в Ñ.ежОЌ
     350всÑ.авкО.
     351
     352
     353~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     354                  УÑ.Пк 3.4: Ð.Ð Ð.Ð.Ð.Ð.Ð.АÐ.Ð. Ð.Ð.Ð.Ð.НЯТЬ С Ð.Ð.Ð.АНÐ.Ð.Ð. c
     355
     356
     357** Ð.ПЌаМЎа заЌеМÑ. ОспПлÑ.зÑ.еÑ.ся с Ñ.еЌО же ПбÑ.екÑ.аЌО, Ñ.Ñ.П О кПЌаМЎа Ñ.ЎалеМОя. **
     358
     359  1. Ð.ПЌаМЎа ОзЌеМеМОя пÑ.ОЌеМяеÑ.ся Ñ.акОЌ же ПбÑ.азПЌ, как О кПЌаМЎа Ñ.ЎалеМОя.
     360     Ð.е Ñ.ПÑ.ЌаÑ. Ñ.акПв:
     361
     362       [Ñ.ОслП]   c   ÐŸÐ±Ñ.екÑ.     Ð.Ð.Ð.           c   [Ñ.ОслП]   ÐŸÐ±Ñ.екÑ.
     363
     364  2. Ð.бÑ.екÑ.Ñ. Ñ.акже сПвпаЎаÑ.Ñ.: w (слПвП), $ (кПМеÑ. сÑ.Ñ.ПкО) О Ñ..п.
     365
     366  3. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     367
     368  4. Ð.еÑ.ейЎОÑ.е к пеÑ.вПй ПÑ.Обке.
     369
     370  5. НабеÑ.ОÑ.е c$ О ПÑ.Ñ.еЎакÑ.ОÑ.Ñ.йÑ.е пеÑ.вÑ.Ñ. сÑ.Ñ.ПкÑ. Ñ.ак, Ñ.Ñ.ПбÑ. ПМа сПвпаЎала сП
     371     Ð²Ñ.ПÑ.Пй, пПсле Ñ.егП МажЌОÑ.е <ESC>.
     372
     373---> Ð.ПМеÑ. эÑ.Пй сÑ.Ñ.ПкО ÐœÑ.жЎаеÑ.ся в пПЌПÑ.О, Ñ.Ñ.ПбÑ. сÑ.аÑ.Ñ. пПÑ.ПжОЌ Ма вÑ.ПÑ.Пй.
     374---> Ð.ПМеÑ. эÑ.Пй сÑ.Ñ.ПкО ÐœÑ.жЎаеÑ.ся в пПЌПÑ.О кПЌаМЎÑ. c$ .
     375
     376
     377~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     378                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 3
     379
     380
     381  1. Ð.ля всÑ.авкО Ñ.ексÑ.а, кПÑ.ПÑ.Ñ.й Ñ.ПлÑ.кП Ñ.Ñ.П бÑ.л Ñ.ЎалеМ, МабеÑ.ОÑ.е p . ЭÑ.а
     382     ÐºÐŸÐŒÐ°ÐœÐŽÐ° всÑ.авОÑ. Ñ.ЎалеММÑ.й Ñ.ексÑ. Ð.Ð.СÐ.Ð. кÑ.Ñ.сПÑ.а (еслО бÑ.ла Ñ.ЎалеМа сÑ.Ñ.Пка,
     383     Ñ.П ПМа бÑ.ЎеÑ. пПЌеÑ.еМа в сÑ.Ñ.Пке пПЎ кÑ.Ñ.сПÑ.ПЌ).
     384
     385  2. Ð.ля заЌеМÑ. сОЌвПла пПЎ кÑ.Ñ.сПÑ.ПЌ МабеÑ.ОÑ.е r О заÑ.еЌ заЌеМяÑ.Ñ.Ой сОЌвПл.
     386
     387  3. Ð.ПЌаМЎа ОзЌеМеМОя пПзвПляеÑ. Ð.аЌ ОзЌеМОÑ.Ñ. Ñ.казаММÑ.й ПбÑ.екÑ. ПÑ. кÑ.Ñ.сПÑ.а ЎП
     388     ÐºÐŸÐœÑ.а эÑ.ПгП ПбÑ.екÑ.а. НапÑ.ОЌеÑ., МабеÑ.ОÑ.е cw Ўля заЌеМÑ. ПÑ. кÑ.Ñ.сПÑ.а ЎП
     389     ÐºÐŸÐœÑ.а слПва, c$ Ўля ОзЌеМеМОя ЎП кПМÑ.а сÑ.Ñ.ПкО.
     390
     391  4. ЀПÑ.ЌаÑ. кПЌаМЎÑ. ОзЌеМеМОя Ñ.акПв:
     392
     393         [Ñ.ОслП]   c       ÐŸÐ±Ñ.екÑ.          Ð.Ð.Ð.    c   [Ñ.ОслП]   ÐŸÐ±Ñ.екÑ.
     394
     395ТепеÑ.Ñ. ПÑ.пÑ.авляйÑ.есÑ. к слеЎÑ.Ñ.Ñ.еЌÑ. Ñ.Ñ.ПкÑ..
     396
     397
     398
     399
     400
     401~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     402              УÑ.Пк 4.1: Ð.НЀÐ.Ð Ð.АЊÐ.Я Ð. ЀАÐ.Ð.Ð. Ð. РАСÐ.Ð.Ð.Ð.Ð.Ð.НÐ.Ð. Ð. НÐ.Ð.
     403
     404
     405 ** НабеÑ.ОÑ.е CTRL-g Ñ.Ñ.ПбÑ. Ñ.вОЎеÑ.Ñ. Ð.аÑ.е ЌесÑ.ПÑ.аспПлПжеМОе в Ñ.айле О ОМÑ.ПÑ.ЌаÑ.ОÑ.
     406                                    П МеЌ.
     407        НабеÑ.ОÑ.е SHIFT-G Ўля пеÑ.еЌеÑ.еМОя к заЎаММПй сÑ.Ñ.Пке в Ñ.айле. **
     408
     409  Ð.аЌеÑ.аМОе: Ð.Ñ.ПÑ.ОÑ.айÑ.е весÑ. Ñ.Ñ.Пк пÑ.ежЎе Ñ.еЌ вÑ.пПлМяÑ.Ñ. лÑ.бÑ.е кПЌаМЎÑ.!!
     410
     411  1. УЎеÑ.жОвая клавОÑ.Ñ. Ctrl МажЌОÑ.е g . Ð.МОзÑ. экÑ.аМа пПявОÑ.ся сÑ.Ñ.Пка сÑ.аÑ.Ñ.са с
     412     ÐžÐŒÐµÐœÐµÐŒ Ñ.айла О МПЌеÑ.ПЌ сÑ.Ñ.ПкО, в кПÑ.ПÑ.Пй Ð.Ñ. МаÑ.ПЎОÑ.есÑ.. Ð.апПЌМОÑ.е МПЌеÑ.
     413     ÑÑ.Ñ.ПкО, ПМ пПÑ.Ñ.ебÑ.еÑ.ся Ма Каге 3.
     414
     415  2. НажЌОÑ.е shift-G Ўля пеÑ.еЌеÑ.еМОя к кПМÑ.Ñ. Ñ.айла.
     416
     417  3. НабеÑ.ОÑ.е МПЌеÑ. сÑ.Ñ.ПкО, в кПÑ.ПÑ.Пй вÑ. МаÑ.ПЎОлОсÑ. О заÑ.еЌ shift-G. ЭÑ.П
     418     Ð²ÐµÑ.МеÑ. Ð.ас к сÑ.Ñ.Пке, в кПÑ.ПÑ.Пй Ð.Ñ. бÑ.лО, кПгЎа в пеÑ.вÑ.й Ñ.аз МажалО Ctrl-g.
     419     (Ð.ПгЎа Ð.Ñ. бÑ.ЎеÑ.е МабОÑ.аÑ.Ñ. Ñ.ОÑ.Ñ.Ñ., ПМО НÐ. ПÑ.ПбÑ.азяÑ.ся Ма экÑ.аМе.)
     420
     421  4. Ð.слО Ð.Ñ. запПЌМОлО все вÑ.Ñ.есказаММПе, вÑ.пПлМОÑ.е Ñ.агО 1--3.
     422
     423
     424~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     425                           Ð£Ñ.Пк 4.2: Ð.Ð.Ð.АНÐ.А Ð.Ð.Ð.СÐ.А
     426
     427              ** НабеÑ.ОÑ.е  /  О заÑ.еЌ ввеЎОÑ.е ОскПЌÑ.Ñ. Ñ.Ñ.азÑ.. **
     428
     429  1. Ð. ПбÑ.Ñ.МПЌ Ñ.ежОЌе (Normal mode) МабеÑ.ОÑ.е сОЌвПл  / . Ð.бÑ.аÑ.ОÑ.е вМОЌаМОе,
     430     Ñ.Ñ.П ПМ вЌесÑ.е с кÑ.Ñ.сПÑ.ПЌ пПявОÑ.ся вМОзÑ. экÑ.аМа, как эÑ.П пÑ.ПОсÑ.ПЎОÑ. с
     431     ÐºÐŸÐŒÐ°ÐœÐŽÐŸÐ¹ : .
     432
     433  2. ТепеÑ.Ñ. МабеÑ.ОÑ.е 'ПÑ.Ñ.Ñ.Обка' <ENTER>. ЭÑ.П Ñ.П слПвП, кПÑ.ПÑ.Пе Ð.Ñ. бÑ.ЎеÑ.е
     434     ÐžÑÐºÐ°Ñ.Ñ..
     435
     436  3. Ð.ля Ñ.ПгП, Ñ.Ñ.ПбÑ. пПвÑ.ПÑ.ОÑ.Ñ. пПОск, пÑ.ПсÑ.П МажЌОÑ.е n .
     437     Ð.ля пПОска эÑ.Пй Ñ.Ñ.азÑ. в ПбÑ.аÑ.МПЌ МапÑ.авлеМОО, МажЌОÑ.е Shift-N .
     438
     439  4. Ð.слО Ð.Ñ. желаеÑ.е сÑ.азÑ. ОскаÑ.Ñ. в ПбÑ.аÑ.МПЌ МапÑ.авлеМОО, ОспПлÑ.зÑ.йÑ.е
     440     ÐºÐŸÐŒÐ°ÐœÐŽÑ. ? вЌесÑ.П / .
     441
     442---> Ð.ПгЎа Ð.Ñ. пÑ.О пПОске ЎПсÑ.ОгМеÑ.е кПМÑ.а Ñ.айла, пПОск бÑ.ЎеÑ. пÑ.ПЎПлжеМ с
     443     ÐœÐ°Ñ.ала.
     444
     445  "ПÑ.Ñ.Ñ.Обка" эÑ.П Ме спПсПб пÑ.ПОзМесеМОя слПва `ПÑ.Обка';  ПÑ.Ñ.Ñ.Обка эÑ.П ПÑ.Обка.
     446
     447~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     448                        УÑ.Пк 4.3: Ð.Ð.Ð.СÐ. Ð.АРНЫХ СÐ.Ð.Ð.Ð.Ð.
     449
     450
     451                ** НабеÑ.ОÑ.е % Ўля пПОска паÑ.ÐœÑ.Ñ. ),] ОлО } . **
     452
     453  1. Ð.ПЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. МаЎ лÑ.бПй Оз (, [ ОлО { в сÑ.Ñ.Пке вМОзÑ., пПЌеÑ.еММПй --->.
     454
     455  2. ТепеÑ.Ñ. МабеÑ.ОÑ.е сОЌвПл % .
     456
     457  3. Ð.Ñ.Ñ.сПÑ. ЎПлжеМ пеÑ.ескПÑ.ОÑ.Ñ. Ма паÑ.ÐœÑ.Ñ. скПбкÑ..
     458
     459  4. НабеÑ.ОÑ.е % Ўля вПзвÑ.аÑ.а кÑ.Ñ.сПÑ.а МазаЎ к пеÑ.вПй скПбке.
     460
     461---> ЭÑ.П ( сÑ.Ñ.Пка, сПЎеÑ.жаÑ.ая Ñ.акОе (, Ñ.акОе [ ] О Ñ.акОе { } скПбкО. ))
     462
     463Ð.аЌеÑ.аМОе: ЭÑ.П ПÑ.еМÑ. Ñ.ЎПбМП пÑ.О ПÑ.лаЎке пÑ.ПгÑ.аЌЌ с пÑ.ПпÑ.Ñ.еММÑ.ЌО скПбкаЌО!
     464
     465
     466
     467
     468
     469
     470~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     471                      УÑ.Пк 4.4: СÐ.Ð.СÐ.Ð. Ð.СÐ.РАÐ.Ð.Ð.НÐ.Я Ð.КÐ.Ð.Ð.Ð.
     472
     473
     474         ** НабеÑ.ОÑ.е :s/бÑ.лП/сÑ.алП/g Ўля заЌеМÑ. 'бÑ.лП' Ма 'сÑ.алП'. **
     475
     476  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     477
     478  2. НабеÑ.ОÑ.е :s/Ñ.вПЎÑ./Ñ.вПжÑ. <ENTER> . Ð.бÑ.аÑ.ОÑ.е вМОЌаМОе Ма Ñ.П, Ñ.Ñ.П эÑ.а кПЌаМЎа
     479     Ð·Ð°ÐŒÐµÐœÐžÑ. Ñ.ПлÑ.кП пеÑ.вПе МайЎеММПе вÑ.ПжЎеМОе в сÑ.Ñ.Пке.
     480
     481  3. ТепеÑ.Ñ. МабеÑ.ОÑ.е :s/Ñ.вПЎÑ./Ñ.вПжÑ./g , ПзМаÑ.аÑ.Ñ.ее пПЎсÑ.аМПвкÑ. глПбалÑ.МП вП
     482     Ð²ÑÐµÐ¹ сÑ.Ñ.Пке. ЭÑ.П заЌеМОÑ. все МайЎеММÑ.е в сÑ.Ñ.Пке вÑ.ПжЎеМОя.
     483
     484---> Я Ñ.вПЎÑ. к ПÑ.веÑ.жеММÑ.ÐŒ селеМÑ.яЌ, я Ñ.вПЎÑ. сквПзÑ. векПвеÑ.ÐœÑ.й сÑ.ПМ, я Ñ.вПЎÑ. к
     485     Ð·Ð°Ð±Ñ.Ñ.Ñ.ÐŒ пПкПлеМÑ.яЌ.
     486
     487  4. Ð.ля заЌеМÑ. всеÑ. вÑ.ПжЎеМОй пПслеЎПваÑ.елÑ.МПсÑ.О сОЌвПлПв ЌежЎÑ. ЎвÑ.Ќя
     488     ÑÑ.Ñ.ПкаЌО,
     489     ÐœÐ°Ð±ÐµÑ.ОÑ.е :#,#s/бÑ.лП/сÑ.алП/g  гЎе #,# --- МПЌеÑ.а эÑ.ОÑ. сÑ.Ñ.Пк.
     490     ÐÐ°Ð±ÐµÑ.ОÑ.е :%s/бÑ.лП/сÑ.алП/g    Ўля заЌеМÑ. всеÑ. вÑ.ПжЎеМОй вП всеЌ Ñ.айле.
     491
     492
     493~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     494                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 4
     495  1. Ctrl-g пПказÑ.ваеÑ. ваÑ.е пПлПжеМОе в Ñ.айле О ОМÑ.ПÑ.ЌаÑ.ОÑ. П МеЌ.
     496     Shift-G пеÑ.еЌеÑ.аеÑ. Ð.ас в кПМеÑ. Ñ.айла. НПЌеÑ., за кПÑ.ПÑ.Ñ.ÐŒ слеЎÑ.еÑ. Shift-G
     497     Ð¿ÐŸÐ·Ð²ÐŸÐ»ÑÐµÑ. пеÑ.ейÑ.О к сÑ.Ñ.Пке с эÑ.ОЌ МПЌеÑ.ПЌ.
     498
     499  2. НажаÑ.Ое / О заÑ.еЌ ввПЎ сÑ.Ñ.ПкО пПзвПляеÑ. пÑ.ПОзвесÑ.О пПОск эÑ.Пй сÑ.Ñ.ПкО
     500     Ð.Ð.Ð.Ð Ð.Ð. пП Ñ.ексÑ.Ñ..
     501     ÐÐ°Ð¶Ð°Ñ.Ое ? О заÑ.еЌ ввПЎ сÑ.Ñ.ПкО пПзвПляеÑ. пÑ.ПОзвесÑ.О пПОск эÑ.Пй сÑ.Ñ.ПкО
     502     ÐÐÐ.АÐ. пП Ñ.ексÑ.Ñ..
     503     Ð.Псле пПОска МабеÑ.ОÑ.е n Ўля пеÑ.еÑ.ПЎа к слеЎÑ.Ñ.Ñ.еЌÑ. вÑ.ПжЎеМОÑ. ОскПЌПй
     504     ÑÑ.Ñ.ПкО в Ñ.ПЌ же МапÑ.авлеМОО ОлО Shift-N Ўля пеÑ.еÑ.ПЎа в пÑ.ПÑ.ОвПпПлПжМПЌ
     505     ÐœÐ°Ð¿Ñ.авлеМОО.
     506
     507  3. НажаÑ.Ое % , кПгЎа кÑ.Ñ.сПÑ. МаÑ.ПЎОÑ.ся Ма (,),[,],{, ОлО } пПзвПляеÑ. МайÑ.О
     508     Ð¿Ð°Ñ.ÐœÑ.Ñ. скПбкÑ..
     509
     510  4. Ð.ля пПЎсÑ.аМПвкО `сÑ.алП' вЌесÑ.П пеÑ.вПгП `бÑ.лП' в сÑ.Ñ.Пке, МабеÑ.ОÑ.е
     511     :s/old/new
     512     Ð.ля пПЎсÑ.аМПвкО `сÑ.алП' вЌесÑ.П всеÑ. `бÑ.лП' в сÑ.Ñ.Пке, МабеÑ.ОÑ.е
     513     :s/old/new/g
     514     Ð.ля заЌеМÑ. в ОМÑ.еÑ.вале ЌежЎÑ. ЎвÑ.Ќя сÑ.Ñ.ПкаЌО, МабеÑ.ОÑ.е
     515     :#,#s/old/new/g
     516     Ð.ля заЌеМÑ. всеÑ. вÑ.ПжЎеМОй `бÑ.лП' Ма `сÑ.алП' в Ñ.айле, МабеÑ.ОÑ.е
     517     :%s/old/new/g
     518     Ð§Ñ.ПбÑ. Ñ.еЎакÑ.ПÑ. кажЎÑ.й Ñ.аз запÑ.аÑ.Овал пПЎÑ.веÑ.жЎеМОе, ЎПбавÑ.Ñ.е 'c'
     519     :%s/old/new/gc
     520~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     521                   Ð£Ñ.Пк 5.1: Ð.АÐ. Ð.ЫÐ.Ð.Ð.НÐ.ТЬ Ð.НÐ.КНЮЮ Ð.Ð.Ð.АНÐ.У
     522
     523
     524    ** НабеÑ.ОÑ.е :! О заÑ.еЌ вМеÑ.ÐœÑ.Ñ. кПЌаМЎÑ., кПÑ.ПÑ.Ñ.Ñ. слеЎÑ.еÑ. вÑ.пПлМОÑ.Ñ.. **
     525
     526  1. НабеÑ.ОÑ.е Ñ.же зМакПЌÑ.Ñ. Ð.аЌ кПЌаМЎÑ. : Ўля Ñ.сÑ.аМПвкО кÑ.Ñ.сПÑ.а в кПЌаМЎМÑ.Ñ.
     527     ÑÑ.Ñ.ПкÑ. Ñ.еЎакÑ.ПÑ.а. ЭÑ.П пПзвПлОÑ. Ð.аЌ ввесÑ.О кПЌаМЎÑ..
     528
     529  2. ТепеÑ.Ñ. МабеÑ.ОÑ.е сОЌвПл ! (вПсклОÑ.аÑ.елÑ.ÐœÑ.й зМак). ТепеÑ.Ñ. ЌПжМП ОспПлМОÑ.Ñ.
     530     Ð²ÐœÐµÑ.ÐœÑ.Ñ. кПЌаМЎÑ., ОспПлÑ.зÑ.я кПЌаМЎМÑ.Ñ. ПбПлПÑ.кÑ..
     531
     532  3. Ð.ля пÑ.ОЌеÑ.а МабеÑ.ОÑ.е ls пПсле ! О МажЌОÑ.е <ENTER>. ЭÑ.а кПЌаМЎа вÑ.веЎеÑ.
     533     ÑÐ¿ÐžÑÐŸÐº Ñ.айлПв в Ñ.екÑ.Ñ.еЌ каÑ.алПге, Ñ.ПÑ.МП Ñ.акже, как еслО бÑ. Ð.Ñ. ввелО эÑ.Ñ.
     534     ÐºÐŸÐŒÐ°ÐœÐŽÑ. в пÑ.ОглаÑ.еМОО ПбПлПÑ.кО. Ð.лО пПпÑ.ПбÑ.йÑ.е :!dir , еслО пÑ.еЎÑ.ÐŽÑ.Ñ.ая
     535     ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ме сÑ.абПÑ.ала.
     536
     537---> Ð.аЌеÑ.аМОе: ТакОЌ спПсПбПЌ ЌПжМП вÑ.пПлМОÑ.Ñ. лÑ.бÑ.Ñ. вМеÑ.ÐœÑ.Ñ. кПЌаМЎÑ..
     538
     539---> Ð.аЌеÑ.аМОе: Ð.се кПЌаМЎÑ., МаÑ.ОМаÑ.Ñ.Оеся с : , ЎПлжМÑ. завеÑ.Ñ.аÑ.Ñ.ся МажаÑ.ОеЌ
     540     <ENTER>.
     541
     542
     543~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     544                         Ð£Ñ.Пк 5.2: Ð.АÐ. Ð.АÐ.Ð.САТЬ ЀАÐ.Ð.
     545
     546
     547** Ð.ля сПÑ.Ñ.аМеМОя ОзЌеМеМОй, пÑ.ПОзвеЎеММÑ.Ñ. в Ñ.айле, МабеÑ.ОÑ.е :w Ð.Ð.Я_ЀАÐ.Ð.А. **
     548
     549  1. НабеÑ.ОÑ.е :!dir ОлО :!ls Ўля пПлÑ.Ñ.еМОя спОска Ñ.айлПв в Ñ.екÑ.Ñ.еЌ каÑ.алПге.
     550     Ð.ак Ð.аЌ Ñ.же ОзвесÑ.МП, Ð.Ñ. ЎПлжМÑ. МажаÑ.Ñ. <ENTER> пПсле ввПЎа эÑ.ОÑ. кПЌаМЎ.
     551
     552  2. Ð.Ñ.ОЎÑ.ЌайÑ.е МазваМОе Ўля Ñ.айла, кПÑ.ПÑ.Пе еÑ.е Ме сÑ.Ñ.есÑ.вÑ.еÑ., МапÑ.ОЌеÑ. TEST.
     553
     554  3. ТепеÑ.Ñ. МабеÑ.ОÑ.е :w TEST (гЎе TEST --- эÑ.П ОЌя Ñ.айла, пÑ.ОЎÑ.ЌаММПе Ð.аЌО.)
     555
     556  4. ЭÑ.а кПЌаМЎа сПÑ.Ñ.аМОÑ. весÑ. Ñ.айл (УÑ.ебМОк пП Vim) пПЎ ОЌеМеЌ TEST. ЧÑ.ПбÑ.
     557     Ñ.ЎПсÑ.ПвеÑ.ОÑ.Ñ.ся в эÑ.ПЌ, сМПва МабеÑ.ОÑ.е :!dir О пÑ.ПсЌПÑ.Ñ.ОÑ.е каÑ.алПг.
     558
     559---> Ð.аЌеÑ.Ñ.Ñ.е, Ñ.Ñ.П еслО Ð.Ñ. вÑ.йЎеÑ.е Оз Vim О заÑ.еЌ запÑ.сÑ.ОÑ.е егП сМПва с
     560     Ñ.айлПЌ TEST, эÑ.ПÑ. Ñ.айл бÑ.ЎеÑ. Ñ.ПÑ.МПй кПпОей Ñ.Ñ.ебМОка в Ñ.ПÑ. ЌПЌеМÑ., кПгЎа
     561     Ð.Ñ. егП сПÑ.Ñ.аМОлО.
     562
     563  5. ТепеÑ.Ñ. Ñ.ЎалОÑ.е эÑ.ПÑ. Ñ.айл, МабÑ.ав :!del TEST
     564
     565
     566~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     567                       Ð£Ñ.Пк 5.3: Ð.ЫÐ.Ð.Ð Ð.ЧНÐ.Ð. СÐ.ХРАНÐ.НÐ.Ð.
     568
     569
     570         ** Ð.ля сПÑ.Ñ.аМеМОя Ñ.асÑ.О Ñ.айла, МабеÑ.ОÑ.е :#,# w Ð.Ð.Я_ЀАÐ.Ð.А **
     571
     572  1. Ð.Ñ.е Ñ.аз МабеÑ.ОÑ.е :!dir ОлО :!ls Ўля пПлÑ.Ñ.еМОя спОска Ñ.айлПв в Ñ.екÑ.Ñ.еЌ
     573     ÐºÐ°Ñ.алПге О вÑ.беÑ.ОÑ.е пПЎÑ.ПЎяÑ.ее ОЌя, МапÑ.ОЌеÑ. TEST.
     574
     575  2. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. к МаÑ.алÑ. эÑ.Пй сÑ.Ñ.аМОÑ.Ñ. О МажЌОÑ.е Ctrl-g Ўля МаÑ.ПжЎеМОя
     576     ÐœÐŸÐŒÐµÑ.а сÑ.Ñ.ПкОto. Ð.АÐ.Ð.Ð.НÐ.ТÐ. ЭТÐ.Т НÐ.Ð.Ð.Ð !
     577
     578  3. ТепеÑ.Ñ. пеÑ.еЌесÑ.ОÑ.есÑ. в кПМеÑ. сÑ.Ñ.аМОÑ.Ñ. О вМПвÑ. МабеÑ.ОÑ.е Ctrl-g. Ð.АÐ.Ð.Ð.НÐ.ТÐ.
     579     Ð. ЭТÐ.Т НÐ.Ð.Ð.Р ТÐ.Ð.Ð.!
     580
     581  4. Ð.ля сПÑ.Ñ.аМеМОя ТÐ.Ð.ЬÐ.Ð. ЧАСТÐ. Ñ.айла МабеÑ.ОÑ.е :#,# w TEST , гЎе #,# --- эÑ.П
     582     ÐœÐŸÐŒÐµÑ.а, кПÑ.ПÑ.Ñ.е Ð.Ñ. запПЌМОлО (МаÑ.алП, кПМеÑ.), а TEST --- ОЌя ваÑ.егП Ñ.айла.
     583
     584  5. Ð.ак О пÑ.ежЎе, Ñ.беЎОÑ.есÑ. в МалОÑ.ОО эÑ.ПгП Ñ.айла кПЌаМЎПй :!dir , МП НÐ.
     585     Ð£Ð.АÐ.ЯÐ.ТÐ. егП.
     586
     587
     588
     589~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     590                    УÑ.Пк 5.4: ЧТÐ.НÐ.Ð. Ð. Ð.Ð.ЪÐ.Ð.Ð.НÐ.НÐ.Ð. ЀАÐ.Ð.Ð.Ð.
     591
     592          ** Ð.ля всÑ.авкО сПЎеÑ.жОЌПгП Ñ.айла, МабеÑ.ОÑ.е  :r FILENAME **
     593
     594  1. НабеÑ.ОÑ.е :!dir Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. Ñ.беЎОÑ.Ñ.ся в Ñ.ПЌ, Ñ.Ñ.П Ñ.айл TEST все еÑ.е
     595     ÑÑ.Ñ.есÑ.вÑ.еÑ..
     596
     597  2. УсÑ.аМПвОÑ.е кÑ.Ñ.сПÑ. в веÑ.Ñ.Мей Ñ.асÑ.О эÑ.Пй сÑ.Ñ.аМОÑ.Ñ..
     598
     599Ð.аЌеÑ.аМОе: Ð.Псле вÑ.пПлМеМОя Ñ.ага 3 Ð.Ñ. Ñ.вОЎОÑ.е УÑ.Пк 5.3.        Ð.Псле эÑ.ПгП
     600           Ð¿ÐµÑ.еЌеÑ.айÑ.есÑ. Ð.НÐ.Ð., сМПва к эÑ.ПЌÑ. Ñ.Ñ.ПкÑ..
     601
     602  3. ТепеÑ.Ñ. пÑ.ПÑ.ОÑ.айÑ.е Ð.аÑ. Ñ.айл TEST, ОспПлÑ.зÑ.я кПЌаМЎÑ. :r TEST , гЎе
     603     TEST --- эÑ.П ОЌя Ñ.айла.
     604
     605Ð.аЌеÑ.аМОе: Ð.Ñ.ПÑ.ОÑ.аММÑ.й Ð.аЌО Ñ.айл бÑ.ЎеÑ. всÑ.авлеМ в Ñ.ПЌ ЌесÑ.е, гЎе МаÑ.ПЎОÑ.ся
     606           ÐºÑ.Ñ.сПÑ..
     607
     608  4. ЧÑ.ПбÑ. Ñ.беЎОÑ.Ñ.ся в Ñ.ПЌ, Ñ.Ñ.П Ñ.айл пÑ.ПÑ.ОÑ.аМ, пеÑ.еЌесÑ.ОÑ.есÑ. МеЌМПгП МазаЎ пП
     609     Ñ.ексÑ.Ñ. О заЌеÑ.Ñ.Ñ.е, Ñ.Ñ.П Ñ.епеÑ.Ñ. сÑ.Ñ.есÑ.вÑ.Ñ.Ñ. Ўве кПпОО УÑ.Пка 5.3, ОсÑ.ПЎМая
     610     Ðž пПлÑ.Ñ.еММая Оз Ñ.айла.
     611
     612~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     613                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 5
     614
     615
     616  1.  :!кПЌаМЎа  ОспПлМяеÑ. вМеÑ.ÐœÑ.Ñ. кПЌаМЎÑ..
     617
     618      НекПÑ.ПÑ.Ñ.е пПлезМÑ.е пÑ.ОЌеÑ.Ñ.:
     619          :!dir --- вÑ.вПЎОÑ. спОсПк Ñ.айлПв в каÑ.алПге.
     620          :!del FILENAME --- Ñ.ЎаляеÑ. Ñ.айл FILENAME.
     621
     622  2.  :w FILENAME запОсÑ.ваеÑ. Ñ.екÑ.Ñ.Ой Ñ.еЎакÑ.ОÑ.Ñ.еЌÑ.й Ñ.айл Ма ЎОск
     623      пПЎ ОЌеМеЌ FILENAME.
     624
     625  3.  :#,#w FILENAME сПÑ.Ñ.аМяеÑ. сÑ.Ñ.ПкО ПÑ. # ЎП # в Ñ.айл FILENAME.
     626
     627  4.  :r FILENAME сÑ.ОÑ.Ñ.ваеÑ. с ЎОска Ñ.айл FILENAME О пПЌеÑ.аеÑ. егП в Ñ.екÑ.Ñ.Ой
     628      Ñ.айл слеЎПЌ за пПзОÑ.Оей кÑ.Ñ.сПÑ.а.
     629
     630
     631
     632
     633
     634
     635
     636~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     637                          УÑ.Пк 6.1: Ð.Ð.Ð.АНÐ.А СÐ.Ð.Ð.АНÐ.Я
     638
     639
     640 ** НабеÑ.ОÑ.е o Ñ.Ñ.ПбÑ. сПзЎаÑ.Ñ. пÑ.сÑ.Ñ.Ñ. сÑ.Ñ.ПкÑ. пПЎ кÑ.Ñ.сПÑ.ПЌ О пеÑ.ейÑ.О в Ñ.ежОЌ
     641                           Ð²ÑÑ.авкО (Insert mode) **
     642
     643  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     644
     645  2. НабеÑ.ОÑ.е o (в МОжМеЌ Ñ.егОсÑ.Ñ.е) Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. сПзЎаÑ.Ñ. пÑ.сÑ.Ñ.Ñ. сÑ.Ñ.ПкÑ.
     646     ÐÐ.Ð.Ð. кÑ.Ñ.сПÑ.а О пеÑ.ейÑ.О в Ñ.ежОЌ всÑ.авкО (Insert mode).
     647
     648  3. ТепеÑ.Ñ. скПпОÑ.Ñ.йÑ.е пПЌеÑ.еММÑ.Ñ. ---> сÑ.Ñ.ПкÑ. О МажЌОÑ.е <ESC> Ўля вÑ.Ñ.ПЎа Оз
     649     Ñ.ежОЌа всÑ.авкО.
     650
     651---> Ð.Псле МажаÑ.Оя o кÑ.Ñ.сПÑ. пеÑ.ейЎеÑ. Ма МПвÑ.Ñ. пÑ.сÑ.Ñ.Ñ. сÑ.Ñ.ПкÑ. в Ñ.ежОЌе всÑ.авкО.
     652
     653  4. Ð.ля сПзЎаМОя сÑ.Ñ.ПкО Ð.ЫКÐ. кÑ.Ñ.сПÑ.а, пÑ.ПсÑ.П МабеÑ.ОÑ.е заглавМÑ.Ñ. O, вЌесÑ.П
     654     ÑÑ.Ñ.ПÑ.МПй o. Ð.ПпÑ.ПбÑ.йÑ.е пÑ.ПЎелаÑ.Ñ. эÑ.П с МОжеслеЎÑ.Ñ.Ñ.ей сÑ.Ñ.ПкПй.
     655СПзЎайÑ.е МПвÑ.Ñ. сÑ.Ñ.ПкÑ. МаЎ эÑ.Пй, Мажав Shift-O, пПЌесÑ.Ов кÑ.Ñ.сПÑ. Ма эÑ.Ñ. сÑ.Ñ.ПкÑ..
     656
     657
     658
     659
     660~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     661                         Ð£Ñ.Пк 6.2: Ð.Ð.Ð.АНÐ.А Ð.Ð.Ð.АÐ.Ð.Ð.НÐ.Я
     662
     663            ** НабеÑ.ОÑ.е a , Ñ.Ñ.ПбÑ. всÑ.авОÑ.Ñ. Ñ.ексÑ. Ð.Ð.СÐ.Ð. кÑ.Ñ.сПÑ.а. **
     664
     665  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, в кПМеÑ. пеÑ.вПй сÑ.Ñ.ПкО, пПЌеÑ.еММПй ---> ,
     666     ÐœÐ°Ð±Ñ.ав $ в ПбÑ.Ñ.МПЌ Ñ.ежОЌе (Normal mode).
     667
     668  2. НабеÑ.ОÑ.е a (в МОжМеЌ Ñ.егОсÑ.Ñ.е) Ўля ЎПбавлеМОя Ñ.ексÑ.а Ð.Ð.СÐ.Ð. сОЌвПла,
     669     ÐœÐ°Ñ.ПЎяÑ.егПся пПЎ кÑ.Ñ.сПÑ.ПЌ. (Ð.аглавМая A пПзвПляеÑ. ЎПбавОÑ.Ñ. в кПМеÑ.
     670     ÑÑ.Ñ.ПкО.)
     671
     672Ð.аЌеÑ.аМОе: ЭÑ.П пПзвПляеÑ. ОзбежаÑ.Ñ. МажаÑ.Оя i , пПслеЎМегП сОЌвПла, Ñ.ексÑ.а Ўля
     673           Ð²ÑÑ.авкО, <ESC>, кÑ.Ñ.сПÑ.-впÑ.авП, О, МакПМеÑ., x , пÑ.ПсÑ.П Ўля Ñ.ПгП,
     674           Ñ.Ñ.ПбÑ. ЎПбавОÑ.Ñ. Ñ.есÑ. в кПМеÑ. сÑ.Ñ.ПкО!
     675
     676  3. ТепеÑ.Ñ. завеÑ.Ñ.ОÑ.е пеÑ.вÑ.Ñ. сÑ.Ñ.ПкÑ.. Ð.аЌеÑ.Ñ.Ñ.е Ñ.акже, Ñ.Ñ.П ЎПбавлеМОе эÑ.П в
     677     Ñ.ПÑ.МПсÑ.О Ñ.П же саЌПе, Ñ.Ñ.П О Ñ.ежОЌ всÑ.авкО, за ОсклÑ.Ñ.еМОеЌ пПзОÑ.ОО, в
     678     ÐºÐŸÑ.ПÑ.Ñ.Ñ. бÑ.ЎеÑ. всÑ.авлеМ Ñ.ексÑ..
     679
     680---> ЭÑ.а сÑ.Ñ.ПÑ.ка пПзвПлОÑ. Ð.аЌ пПпÑ.акÑ.ОкПваÑ.Ñ.ся
     681---> ЭÑ.а сÑ.Ñ.ПÑ.ка пПзвПлОÑ. Ð.аЌ пПпÑ.акÑ.ОкПваÑ.Ñ.ся в ЎПбавлеМОО Ñ.ексÑ.а в кПМеÑ.
     682     ÑÑ.Ñ.ПкО.
     683~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     684                       Ð£Ñ.Пк 6.3: Ð.ЩÐ. Ð.Ð.Ð.Н СÐ.Ð.СÐ.Ð. Ð.АÐ.Ð.НЫ
     685
     686
     687       ** НабеÑ.ОÑ.е заглавМÑ.Ñ. R Ўля заЌеМÑ. бПлее, Ñ.еЌ ПЎМПгП сОЌвПла. **
     688
     689  1. Ð.еÑ.еЌесÑ.ОÑ.е кÑ.Ñ.сПÑ. вМОз, к сÑ.Ñ.Пке, пПЌеÑ.еММПй --->.
     690
     691  2. РаспПлПжОÑ.е кÑ.Ñ.сПÑ. в МаÑ.але пеÑ.вПгП слПва, ПÑ.лОÑ.аÑ.Ñ.егПся ПÑ.
     692     ÑÐŸÐŸÑ.веÑ.сÑ.вÑ.Ñ.Ñ.егП в слеЎÑ.Ñ.Ñ.ей сÑ.Ñ.Пке, пПЌеÑ.еММПй ---> (слПвП 'пПслеЎМей').
     693
     694  3. ТепеÑ.Ñ. МабеÑ.ОÑ.е R О заЌеМОÑ.е ПсÑ.аÑ.Пк Ñ.ексÑ.а в пеÑ.вПй сÑ.Ñ.Пке, МабÑ.ав
     695     Ð¿ÐŸÐ²ÐµÑ.Ñ. сÑ.аÑ.ПгП Ñ.ексÑ.а Ñ.ак, Ñ.Ñ.ПбÑ. Пбе сÑ.Ñ.ПкО сÑ.алО ПЎОМакПвÑ.ЌО.
     696
     697---> Ð.еÑ.вÑ.Ñ. сÑ.Ñ.ПкÑ. ЌПжМП сÑ.авМяÑ.Ñ. с пПслеЎМей, ОспПлÑ.зÑ.я клавОÑ.О.
     698---> Ð.еÑ.вÑ.Ñ. сÑ.Ñ.ПкÑ. ЌПжМП сÑ.авМяÑ.Ñ. с вÑ.ПÑ.Пй, ОспПлÑ.зÑ.я R О МабÑ.ав МПвÑ.й Ñ.ексÑ..
     699
     700  4. Ð.бÑ.аÑ.ОÑ.е вМОЌаМОе, Ñ.Ñ.П пÑ.О МажаÑ.ОО <ESC> Ўля завеÑ.Ñ.еМОя, лÑ.бПй
     701     ÐœÐµ ОзЌеМеММÑ.й Ñ.ексÑ. сПÑ.Ñ.аМОÑ.ся.
     702
     703
     704
     705
     706~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     707                        УÑ.Пк 6.4: УСТАНÐ.Ð.Ð.А Ð.АРАÐ.Ð.ТРÐ.Ð.
     708
     709
     710** УсÑ.аМПвОЌ паÑ.аЌеÑ.Ñ.Ñ. Ñ.ак, Ñ.Ñ.ПбÑ. ОгМПÑ.ОÑ.ПваÑ.Ñ. Ñ.егОсÑ.Ñ. пÑ.О пПОске ОлО заЌеМе **
     711
     712
     713  1. Ð.ПОÑ.ОÑ.е слПвП 'ОгМПÑ.ОÑ.ПваÑ.Ñ.', МабÑ.ав:
     714     /ОгМПÑ.ОÑ.ПваÑ.Ñ.
     715     Ð.ПвÑ.ПÑ.ОÑ.е пПОск МескПлÑ.кП Ñ.аз, МажОЌая клавОÑ.Ñ. n
     716
     717  2. Ð.клÑ.Ñ.ОÑ.е паÑ.аЌеÑ.Ñ. 'ic' (Ð.гМПÑ.ОÑ.ПваÑ.Ñ. Ñ.егОсÑ.Ñ.), МабÑ.ав:
     718     :set ic
     719
     720  3. ТепеÑ.Ñ. сМПва сЎелайÑ.е пПОск слПва 'ОгМПÑ.ОÑ.ПваÑ.Ñ.', Мажав: n
     721     Ð.ПвÑ.ПÑ.ОÑ.е пПОск МескПлÑ.кП Ñ.аз, МажОЌая клавОÑ.Ñ. n
     722
     723  4. Ð.клÑ.Ñ.ОÑ.е паÑ.аЌеÑ.Ñ.Ñ. 'hlsearch' О 'incsearch':
     724     :set hls is
     725
     726  5. ТепеÑ.Ñ. ПпяÑ.Ñ. ввеЎОÑ.е кПЌаМЎÑ. пПОска О пПсЌПÑ.Ñ.ОÑ.е, Ñ.Ñ.П пПлÑ.Ñ.ОÑ.ся:
     727     /ОгМПÑ.ОÑ.ПваÑ.Ñ.
     728
     729
     730
     731~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     732                                Ð Ð.Ð.ЮÐ.Ð. УРÐ.Ð.А 6
     733
     734
     735  1. НажаÑ.Ое o сПзЎаеÑ. сÑ.Ñ.ПкÑ. НÐ.Ð.Ð. кÑ.Ñ.сПÑ.а О пеÑ.еЌеÑ.аеÑ. кÑ.Ñ.сПÑ. в Мее в Ñ.ежОЌе
     736     Ð²ÑÑ.авкО.
     737     ÐÐ°Ð¶Ð°Ñ.Ое заглавМПй O сПзЎаеÑ. сÑ.Ñ.ПкÑ. Ð.ЫКÐ. сÑ.Ñ.ПкО, в кПÑ.ПÑ.Пй МаÑ.ПЎОÑ.ся
     738     ÐºÑ.Ñ.сПÑ..
     739
     740  2. НабеÑ.ОÑ.е a Ўля всÑ.авкО Ñ.ексÑ.а Ð.Ð.СÐ.Ð. сОЌвПла, Ма кПÑ.ПÑ.ПЌ МаÑ.ПЎОÑ.ся кÑ.Ñ.сПÑ..
     741     ÐÐ°Ð¶Ð°Ñ.Ое заглавМПй A авÑ.ПЌаÑ.ОÑ.ескО пеÑ.еЌеÑ.аеÑ. Ð.ас Ўля ЎПбавлеМОя Ñ.ексÑ.а
     742     Ð² кПМеÑ. сÑ.Ñ.ПкО.
     743
     744  3. НажаÑ.Ое заглавМПй R пеÑ.евПЎОÑ. Ð.ас в Ñ.ежОЌ заЌеМÑ. ЎП Ñ.еÑ. пПÑ., пПка Ме
     745     Ð±Ñ.ЎеÑ. МажаÑ.а клавОÑ.а <ESC> Ўля завеÑ.Ñ.еМОя.
     746
     747  4. НабÑ.ав ":set xxx" вÑ. сЌПжеÑ.е вклÑ.Ñ.ОÑ.Ñ. паÑ.аЌеÑ.Ñ. "xxx"
     748
     749
     750
     751
     752
     753
     754
     755~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     756                 Ð£Ñ.Пк 7: Ð.Ð.Ð.АНÐ.Ы Ð.Ð.Ð.УЧÐ.НÐ.Я Ð.СТРÐ.Ð.ННÐ.Ð. СÐ.РАÐ.Ð.Ð.
     757
     758               ** Ð.спПлÑ.зÑ.йÑ.е всÑ.Ñ.ПеММÑ.Ñ. спÑ.авПÑ.ÐœÑ.Ñ. сОсÑ.еЌÑ. **
     759
     760  Vim ПблаЎаеÑ. ЌПÑ.МПй всÑ.Ñ.ПеММПй спÑ.авПÑ.МПй сОсÑ.еЌПй. Ð.ля МаÑ.ала пПпÑ.ПбÑ.йÑ.е
     761  ПЎОМ Оз Ñ.Ñ.еÑ. ваÑ.ОаМÑ.Пв:
     762        - МажЌОÑ.е клавОÑ.Ñ. <HELP> (еслО Ñ.акПвая ОЌееÑ.ся Ма клавОаÑ.Ñ.Ñ.е)
     763        - МажЌОÑ.е клавОÑ.Ñ. <F1> (еслО Ñ.акПвая ОЌееÑ.ся Ма клавОаÑ.Ñ.Ñ.е)
     764        - МабеÑ.ОÑ.е   :help <ENTER>
     765
     766  НабеÑ.ОÑ.е   :q <ENTER>   Ñ.Ñ.ПбÑ. закÑ.Ñ.Ñ.Ñ. ПкМП спÑ.авкО.
     767
     768  Ð.Ñ. ЌПжеÑ.е МайÑ.О спÑ.авкÑ. Ўля лÑ.бПгП пПМяÑ.Оя ОлО кПЌаМЎÑ., пÑ.ПсÑ.П заЎав
     769  сППÑ.веÑ.сÑ.вÑ.Ñ.Ñ.Ой аÑ.гÑ.ЌеМÑ. кПЌаМЎе ":help". Ð.ПпÑ.ПбÑ.йÑ.е слеЎÑ.Ñ.Ñ.ее (Ме забÑ.ÐŽÑ.Ñ.е
     770  МажаÑ.Ñ. <ENTER>):
     771
     772  :help w
     773  :help c_<T
     774  :help insert-index
     775
     776
     777
     778
     779
     780~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     781                     Ð£Ñ.Пк 8: СÐ.Ð.Ð.АНÐ.Ð. СТАРТÐ.Ð.Ð.Ð.Ð. СÐ.Ð Ð.Ð.ТА
     782
     783                        ** Ð.клÑ.Ñ.ОЌ вПзЌПжМПсÑ.О Vim **
     784
     785  Vim ОЌееÑ. МаЌМПгП бПлÑ.Ñ.е вПзЌПжМПсÑ.ей, Ñ.еЌ Vi, ПЎМакП бПлÑ.Ñ.ОМсÑ.ваП Оз МОÑ.
     786  вÑ.клÑ.Ñ.еМÑ. пП Ñ.ЌПлÑ.аМОÑ.. Ð.ля Ñ.ПгП, Ñ.Ñ.ПбÑ. МаÑ.аÑ.Ñ. ОспПлÑ.зПваÑ.Ñ. МПвÑ.е
     787  вПзЌПжМПсÑ.О Ð.аЌ слеЎÑ.еÑ. сПзЎаÑ.Ñ. Ñ.айл "vimrc".
     788
     789  1. Ð.Ñ.Ñ.еЎакÑ.ОÑ.Ñ.йÑ.е Ñ.айл "vimrc", егП Ñ.аспПлПжеМОе завОсОÑ. ПÑ. ОспПлÑ.зÑ.еЌПй
     790     ÑÐžÑÑ.еЌÑ.:
     791
     792       :edit ~/.vimrc                   ÐŽÐ»Ñ Unix
     793       :edit $VIM/_vimrc                Ўля MS-Windows
     794
     795  2. ТепеÑ.Ñ. пÑ.ПÑ.ОÑ.айÑ.е пÑ.ОЌеÑ. Ñ.айла "vimrc":
     796
     797       :read $VIMRUNTIME/vimrc_example.vim
     798
     799  3. Ð.апОÑ.ОÑ.е Ñ.айл:
     800
     801       :write
     802
     803  ТепеÑ.Ñ. пÑ.О слеЎÑ.Ñ.Ñ.еЌ запÑ.ске Vim бÑ.ЎеÑ. вклÑ.Ñ.еМа пПЎсвеÑ.ка сОМÑ.аксОса. Ð.се
     804  МасÑ.Ñ.ПйкО, пÑ.еЎпПÑ.ОÑ.аеЌÑ.е Ð.аЌО, ЌПгÑ.Ñ. бÑ.Ñ.Ñ. ЎПбавлеМÑ. в Ñ.айл "vimrc".
     805
     806~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     807  На эÑ.ПЌ завеÑ.Ñ.аеÑ.ся УÑ.ебМОк Vim. Ð.Ðœ бÑ.л пÑ.еЎМазМаÑ.еМ Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. ЎаÑ.Ñ.
     808  ПбÑ.ее пÑ.еЎсÑ.авлеМОе П Ñ.еЎакÑ.ПÑ.е Vim, ЎПсÑ.аÑ.ПÑ.МПе Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. с легкПсÑ.Ñ.Ñ.
     809  ОспПлÑ.зПваÑ.Ñ. егП. УÑ.ебМОк Ўалек ПÑ. пПлМПÑ.Ñ., пПскПлÑ.кÑ. Vim ОЌееÑ. ПÑ.еМÑ. ЌМПгП
     810  кПЌаМЎ. Ð.Ñ.ПÑ.ОÑ.айÑ.е Ñ.епеÑ.Ñ. Ñ.Ñ.кПвПЎсÑ.вП пПлÑ.зПваÑ.еля: ":help user-manual".
     811
     812  Ð.ля ЎалÑ.МейÑ.егП Ñ.Ñ.еМОя Ñ.екПЌеМЎÑ.еÑ.ся кМОга:
     813        Vim - Vi Improved - АвÑ.ПÑ.: Steve Oualline
     814        Ð.зЎаÑ.елÑ.: New Riders
     815  ЭÑ.а кМОга пПлМПсÑ.Ñ.Ñ. пПсвяÑ.еМа Vim. Ð.сПбеММП пПлезМа МПвОÑ.каЌ. СПЎеÑ.жОÑ.
     816  ЌМПжесÑ.вП пÑ.ОЌеÑ.Пв О ОллÑ.сÑ.Ñ.аÑ.Ой.
     817  Ð.згляМОÑ.е Ма See http://iccf-holland.org/click5.html
     818
     819  СлеЎÑ.Ñ.Ñ.ая кМОга бПлее пПÑ.Ñ.еММПгП вПзÑ.асÑ.а О пПсвяÑ.еМа бПлÑ.Ñ.е Vi, Ñ.еЌ Vim,
     820  ПЎМакП Ñ.акже Ñ.екПЌеМЎÑ.еÑ.ся:
     821        Learning the Vi Editor - АвÑ.ПÑ.: Linda Lamb
     822        Ð.зЎаÑ.елÑ.: O'Reilly & Associates Inc.
     823  ЭÑ.П Ñ.ПÑ.ПÑ.ая кМОга Ўля Ñ.ПгП, Ñ.Ñ.ПбÑ. Ñ.зМаÑ.Ñ. все, Ñ.Ñ.П Ñ.ПлÑ.кП ЌПжМП пÑ.ПЎелÑ.ваÑ.Ñ. с
     824  Vi. КесÑ.Пе ОзЎаМОе Ñ.акже вклÑ.Ñ.аеÑ. ОМÑ.ПÑ.ЌаÑ.ОÑ. П Vim.
     825
     826  ЭÑ.ПÑ. Ñ.Ñ.ебМОк бÑ.л МапОсаМ Michael C. Pierce О Robert K. Ware, Colorado School
     827  of Mines с ОспПлÑ.зПваМОеЌ ОЎей, пÑ.еЎлПжеММÑ.Ñ. Charles Smith, Colorado State
     828  University. E-mail: bware@mines.colorado.edu.
     829
     830  Ð.ПÑ.абПÑ.аМП Ўля Vim Bram Moolenaar.
     831
     832  Ð.еÑ.евПЎ: АМЎÑ.ей Ð.Оселев <a_kissel@eudoramail.com>, 2002.
     833  Translator: Andrey Kiselev <a_kissel@eudoramail.com>, 2002.
     834~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • runtime/tutor/tutor.vim

    diff -Naur vim70.orig/runtime/tutor/tutor.vim vim70/runtime/tutor/tutor.vim
    old new  
    11" Vim tutor support file
    22" Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
    3 " Last Change:  2006 Mar 18
     3" Last Change:  2006 Sep 09
    44
    55" This small source file is used for detecting if a translation of the
    66" tutor file exist, i.e., a tutor.xx file, where xx is the language.
     
    9393  endif
    9494endif
    9595
    96 " The Greek tutor is available in two encodings, guess which one to use
    97 if s:ext =~? '\.gr' && &enc =~ 737
    98   let s:ext = ".gr.cp737"
     96" The Greek tutor is available in three encodings, guess what to use.
     97" We used ".gr" (Greece) instead of ".el" (Greek); accept both.
     98if s:ext =~? '\.gr\|\.el'
     99  if &enc == "iso-8859-7"
     100    let s:ext = ".gr"
     101  elseif &enc == "utf-8"
     102    let s:ext = ".gr.utf-8"
     103  elseif &enc =~ 737
     104    let s:ext = ".gr.cp737"
     105  endif
    99106endif
    100107
    101108" The Slovak tutor is available in two encodings, guess which one to use
     
    103110  let s:ext = ".sk.cp1250"
    104111endif
    105112
    106 " The Russian tutor is available in two encodings, guess which one to use.
    107 " This segment is from the above lines and modified by
    108 " Alexey I. Froloff <raorn@altlinux.org> for Russian vim tutorial
    109 if s:ext =~? '\.ru' && &enc =~ 1251
    110   let s:ext = ".ru.cp1251"
     113" The Russian tutor is available in three encodings, guess which one to use.
     114if s:ext =~? '\.ru'
     115  if &enc == 'utf-8'
     116    let s:ext = '.ru.utf-8'
     117  elseif &enc =~ '1251'
     118    let s:ext = '.ru.cp1251'
     119  elseif &enc =~ 'koi8'
     120    let s:ext = '.ru'
     121  endif
    111122endif
    112123
    113124" Somehow ".ge" (Germany) is sometimes used for ".de" (Deutsch).
  • src/auto/configure

    diff -Naur vim70.orig/src/auto/configure vim70/src/auto/configure
    old new  
    40144014      LDFLAGS=$ldflags_save
    40154015      if test $perl_ok = yes; then
    40164016        if test "X$perlcppflags" != "X"; then
    4017           PERL_CFLAGS="$perlcppflags"
     4017                  PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
    40184018        fi
    40194019        if test "X$perlldflags" != "X"; then
    40204020          LDFLAGS="$perlldflags $LDFLAGS"
  • src/buffer.c

    diff -Naur vim70.orig/src/buffer.c vim70/src/buffer.c
    old new  
    434434    if (usingNetbeans)
    435435        netbeans_file_closed(buf);
    436436#endif
    437 #ifdef FEAT_AUTOCHDIR
    438     /* Change directories when the acd option is set on. */
    439     if (p_acd && curbuf->b_ffname != NULL
    440                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    441         shorten_fnames(TRUE);
    442 #endif
     437    /* Change directories when the 'acd' option is set. */
     438    DO_AUTOCHDIR
    443439
    444440    /*
    445441     * Remove the buffer from the list.
     
    13901386    }
    13911387    else
    13921388    {
    1393         need_fileinfo = TRUE;           /* display file info after redraw */
     1389        if (!msg_silent)
     1390            need_fileinfo = TRUE;       /* display file info after redraw */
    13941391        (void)buf_check_timestamp(curbuf, FALSE); /* check if file changed */
    13951392#ifdef FEAT_AUTOCMD
    13961393        curwin->w_topline = 1;
     
    14221419        netbeans_file_activated(curbuf);
    14231420#endif
    14241421
    1425 #ifdef FEAT_AUTOCHDIR
    1426     /* Change directories when the acd option is set on. */
    1427     if (p_acd && curbuf->b_ffname != NULL
    1428                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    1429         shorten_fnames(TRUE);
    1430 #endif
     1422    /* Change directories when the 'acd' option is set. */
     1423    DO_AUTOCHDIR
    14311424
    14321425#ifdef FEAT_KEYMAP
    14331426    if (curbuf->b_kmap_state & KEYMAP_INIT)
     
    14361429    redraw_later(NOT_VALID);
    14371430}
    14381431
     1432#if defined(FEAT_AUTOCHDIR) || defined(PROTO)
     1433/*
     1434 * Change to the directory of the current buffer.
     1435 */
     1436    void
     1437do_autochdir()
     1438{
     1439    if (curbuf->b_ffname != NULL && vim_chdirfile(curbuf->b_ffname) == OK)
     1440        shorten_fnames(TRUE);
     1441}
     1442#endif
     1443
    14391444/*
    14401445 * functions for dealing with the buffer list
    14411446 */
     
    33243329    {
    33253330        usefmt = eval_to_string_safe(fmt + 2, NULL, use_sandbox);
    33263331        if (usefmt == NULL)
    3327             usefmt = (char_u *)"";
     3332            usefmt = fmt;
    33283333    }
    33293334#endif
    33303335
     
    54205425    buf_T       *newbuf;
    54215426    int         differ = TRUE;
    54225427    linenr_T    lnum;
    5423 #ifdef FEAT_AUTOCMD
    54245428    aco_save_T  aco;
    5425 #else
    5426     buf_T       *old_curbuf = curbuf;
    5427 #endif
    54285429    exarg_T     ea;
    54295430
    54305431    /* Allocate a buffer without putting it in the buffer list. */
     
    54395440        return TRUE;
    54405441    }
    54415442
    5442 #ifdef FEAT_AUTOCMD
    54435443    /* set curwin/curbuf to buf and save a few things */
    54445444    aucmd_prepbuf(&aco, newbuf);
    5445 #else
    5446     curbuf = newbuf;
    5447     curwin->w_buffer = newbuf;
    5448 #endif
    54495445
    54505446    if (ml_open(curbuf) == OK
    54515447            && readfile(buf->b_ffname, buf->b_fname,
     
    54665462    }
    54675463    vim_free(ea.cmd);
    54685464
    5469 #ifdef FEAT_AUTOCMD
    54705465    /* restore curwin/curbuf and a few other things */
    54715466    aucmd_restbuf(&aco);
    5472 #else
    5473     curbuf = old_curbuf;
    5474     curwin->w_buffer = old_curbuf;
    5475 #endif
    54765467
    54775468    if (curbuf != newbuf)       /* safety check */
    54785469        wipe_buffer(newbuf, FALSE);
  • src/configure

    diff -Naur vim70.orig/src/configure vim70/src/configure
    old new  
    22# run the automatically generated configure script
    33CONFIG_STATUS=auto/config.status \
    44        auto/configure "$@" --srcdir="${srcdir:-.}" --cache-file=auto/config.cache
     5result=$?
     6
    57# Stupid autoconf 2.5x causes this file to be left behind.
    68if test -f configure.lineno; then rm -f configure.lineno; fi
     9
     10exit $result
  • src/configure.in

    diff -Naur vim70.orig/src/configure.in vim70/src/configure.in
    old new  
    508508      LDFLAGS=$ldflags_save
    509509      if test $perl_ok = yes; then
    510510        if test "X$perlcppflags" != "X"; then
    511           PERL_CFLAGS="$perlcppflags"
     511          dnl remove -pipe, it confuses cproto
     512          PERL_CFLAGS=`echo "$perlcppflags" | sed 's/-pipe //'`
    512513        fi
    513514        if test "X$perlldflags" != "X"; then
    514515          LDFLAGS="$perlldflags $LDFLAGS"
  • src/edit.c

    diff -Naur vim70.orig/src/edit.c vim70/src/edit.c
    old new  
    129129
    130130static void ins_ctrl_x __ARGS((void));
    131131static int  has_compl_option __ARGS((int dict_opt));
    132 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));
     132static int ins_compl_add __ARGS((char_u *str, int len, int icase, char_u *fname, char_u **cptext, int cdir, int flags, int adup));
    133133static int  ins_compl_equal __ARGS((compl_T *match, char_u *str, int len));
    134134static void ins_compl_longest_match __ARGS((compl_T *match));
    135135static void ins_compl_add_matches __ARGS((int num_matches, char_u **matches, int icase));
     
    707707        lastc = c;                      /* remember previous char for CTRL-D */
    708708        c = safe_vgetc();
    709709
     710#ifdef FEAT_AUTOCMD
     711        /* Don't want K_CURSORHOLD for the second key, e.g., after CTRL-V. */
     712        did_cursorhold = TRUE;
     713#endif
     714
    710715#ifdef FEAT_RIGHTLEFT
    711716        if (p_hkmap && KeyTyped)
    712717            c = hkmap(c);               /* Hebrew mode mapping */
     
    719724#ifdef FEAT_INS_EXPAND
    720725        /*
    721726         * Special handling of keys while the popup menu is visible or wanted
    722          * and the cursor is still in the completed word.
     727         * and the cursor is still in the completed word.  Only when there is
     728         * a match, skip this when no matches were found.
    723729         */
    724         if (compl_started && pum_wanted() && curwin->w_cursor.col >= compl_col)
     730        if (compl_started
     731                && pum_wanted()
     732                && curwin->w_cursor.col >= compl_col
     733                && (compl_shown_match == NULL
     734                    || compl_shown_match != compl_shown_match->cp_next))
    725735        {
    726736            /* BS: Delete one character from "compl_leader". */
    727737            if ((c == K_BS || c == Ctrl_H)
     
    751761                    continue;
    752762                }
    753763
    754                 /* Pressing CTRL-Y selects the current match.  Shen
     764                /* Pressing CTRL-Y selects the current match.  When
    755765                 * compl_enter_selects is set the Enter key does the same. */
    756766                if (c == Ctrl_Y || (compl_enter_selects
    757767                                   && (c == CAR || c == K_KENTER || c == NL)))
     
    877887                /* Close the cmdline window. */
    878888                cmdwin_result = K_IGNORE;
    879889                got_int = FALSE; /* don't stop executing autocommands et al. */
     890                nomove = TRUE;
    880891                goto doESCkey;
    881892            }
    882893#endif
     
    13831394            break;
    13841395        }   /* end of switch (c) */
    13851396
     1397#ifdef FEAT_AUTOCMD
     1398        /* If typed something may trigger CursorHoldI again. */
     1399        if (c != K_CURSORHOLD)
     1400            did_cursorhold = FALSE;
     1401#endif
     1402
    13861403        /* If the cursor was moved we didn't just insert a space */
    13871404        if (arrow_used)
    13881405            inserted_space = FALSE;
     
    21122129 * maybe because alloc() returns NULL, then FAIL is returned.
    21132130 */
    21142131    static int
    2115 ins_compl_add(str, len, icase, fname, cptext, cdir, flags, dup)
     2132ins_compl_add(str, len, icase, fname, cptext, cdir, flags, adup)
    21162133    char_u      *str;
    21172134    int         len;
    21182135    int         icase;
     
    21202137    char_u      **cptext;   /* extra text for popup menu or NULL */
    21212138    int         cdir;
    21222139    int         flags;
    2123     int         dup;        /* accept duplicate match */
     2140    int         adup;       /* accept duplicate match */
    21242141{
    21252142    compl_T     *match;
    21262143    int         dir = (cdir == 0 ? compl_direction : cdir);
     
    21342151    /*
    21352152     * If the same match is already present, don't add it.
    21362153     */
    2137     if (compl_first_match != NULL && !dup)
     2154    if (compl_first_match != NULL && !adup)
    21382155    {
    21392156        match = compl_first_match;
    21402157        do
     
    23992416    /* compl_pattern doesn't need to be set */
    24002417    compl_orig_text = vim_strnsave(ml_get_curline() + compl_col, compl_length);
    24012418    if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
    2402                         -1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
     2419                        -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
    24032420        return;
    24042421
    24052422    /* Handle like dictionary completion. */
     
    24092426    compl_matches = ins_compl_make_cyclic();
    24102427    compl_started = TRUE;
    24112428    compl_used_match = TRUE;
     2429    compl_cont_status = 0;
    24122430
    24132431    compl_curr_match = compl_first_match;
    24142432    ins_complete(Ctrl_N);
     
    27532771        }
    27542772        else
    27552773# endif
     2774            if (count > 0)      /* avoid warning for using "files" uninit */
    27562775        {
    27572776            ins_compl_files(count, files, thesaurus, flags,
    27582777                                                        &regmatch, buf, &dir);
     
    28132832                        ptr = find_word_end(ptr);
    28142833                    add_r = ins_compl_add_infercase(regmatch->startp[0],
    28152834                                          (int)(ptr - regmatch->startp[0]),
    2816                                                      FALSE, files[i], *dir, 0);
     2835                                                     p_ic, files[i], *dir, 0);
    28172836                    if (thesaurus)
    28182837                    {
    28192838                        char_u *wstart;
     
    28492868                                ptr = find_word_end(ptr);
    28502869                            add_r = ins_compl_add_infercase(wstart,
    28512870                                    (int)(ptr - wstart),
    2852                                     FALSE, files[i], *dir, 0);
     2871                                    p_ic, files[i], *dir, 0);
    28532872                        }
    28542873                    }
    28552874                    if (add_r == OK)
     
    30153034    if ((int)(p - line) - (int)compl_col <= 0)
    30163035        return K_BS;
    30173036
    3018     /* For redo we need to repeat this backspace. */
    3019     AppendCharToRedobuff(K_BS);
    3020 
    30213037    /* Deleted more than what was used to find matches or didn't finish
    30223038     * finding all matches: need to look for matches all over again. */
    30233039    if (curwin->w_cursor.col <= compl_col + compl_length
     
    30463062    ins_compl_delete();
    30473063    ins_bytes(compl_leader + curwin->w_cursor.col - compl_col);
    30483064    compl_used_match = FALSE;
    3049     compl_enter_selects = FALSE;
    30503065
    30513066    if (compl_started)
    30523067        ins_compl_set_original_text(compl_leader);
     
    30763091        compl_restarting = FALSE;
    30773092    }
    30783093
     3094#if 0   /* disabled, made CTRL-L, BS and typing char jump to original text. */
    30793095    if (!compl_used_match)
    30803096    {
    30813097        /* Go to the original text, since none of the matches is inserted. */
     
    30873103        compl_curr_match = compl_shown_match;
    30883104        compl_shows_dir = compl_direction;
    30893105    }
     3106#endif
     3107    compl_enter_selects = !compl_used_match;
    30903108
    30913109    /* Show the popup menu with a different set of matches. */
    30923110    ins_compl_show_pum();
     3111
     3112    /* Don't let Enter select the original text when there is no popup menu. */
     3113    if (compl_match_array == NULL)
     3114        compl_enter_selects = FALSE;
    30933115}
    30943116
    30953117/*
     
    31153137#endif
    31163138        ins_char(c);
    31173139
    3118     /* For redo we need to count this character so that the number of
    3119      * backspaces is correct. */
    3120     AppendCharToRedobuff(c);
    3121 
    31223140    /* If we didn't complete finding matches we must search again. */
    31233141    if (compl_was_interrupted)
    31243142        ins_compl_restart();
     
    31753193    char_u      *p;
    31763194    int         len = curwin->w_cursor.col - compl_col;
    31773195    int         c;
     3196    compl_T     *cp;
    31783197
    31793198    p = compl_shown_match->cp_str;
    31803199    if ((int)STRLEN(p) <= len)   /* the match is too short */
    3181         return;
     3200    {
     3201        /* When still at the original match use the first entry that matches
     3202         * the leader. */
     3203        if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
     3204        {
     3205            p = NULL;
     3206            for (cp = compl_shown_match->cp_next; cp != NULL
     3207                                 && cp != compl_first_match; cp = cp->cp_next)
     3208            {
     3209                if (ins_compl_equal(cp, compl_leader,
     3210                                                   (int)STRLEN(compl_leader)))
     3211                {
     3212                    p = cp->cp_str;
     3213                    break;
     3214                }
     3215            }
     3216            if (p == NULL || (int)STRLEN(p) <= len)
     3217                return;
     3218        }
     3219        else
     3220            return;
     3221    }
    31823222    p += len;
    31833223#ifdef FEAT_MBYTE
    31843224    c = mb_ptr2char(p);
     
    31983238    int     c;
    31993239{
    32003240    char_u      *ptr;
    3201     int         temp;
    32023241    int         want_cindent;
    32033242    int         retval = FALSE;
    32043243
     
    33543393            if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
    33553394            {
    33563395                char_u  *p;
     3396                int     temp = 0;
    33573397
    33583398                /*
    33593399                 * If any of the original typed text has been changed, eg when
     
    33693409                    ptr = compl_leader;
    33703410                else
    33713411                    ptr = compl_orig_text;
    3372                 p = compl_orig_text;
    3373                 for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp]; ++temp)
    3374                     ;
     3412                if (compl_orig_text != NULL)
     3413                {
     3414                    p = compl_orig_text;
     3415                    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
     3416                                                                       ++temp)
     3417                        ;
    33753418#ifdef FEAT_MBYTE
    3376                 if (temp > 0)
    3377                     temp -= (*mb_head_off)(compl_orig_text, p + temp);
     3419                    if (temp > 0)
     3420                        temp -= (*mb_head_off)(compl_orig_text, p + temp);
    33783421#endif
    3379                 for (p += temp; *p != NUL; mb_ptr_adv(p))
    3380                     AppendCharToRedobuff(K_BS);
    3381                 AppendToRedobuffLit(ptr + temp, -1);
     3422                    for (p += temp; *p != NUL; mb_ptr_adv(p))
     3423                        AppendCharToRedobuff(K_BS);
     3424                }
     3425                if (ptr != NULL)
     3426                    AppendToRedobuffLit(ptr + temp, -1);
    33823427            }
    33833428
    33843429#ifdef FEAT_CINDENT
     
    35783623{
    35793624    char_u      *word;
    35803625    int         icase = FALSE;
    3581     int         dup = FALSE;
     3626    int         adup = FALSE;
    35823627    char_u      *(cptext[CPT_COUNT]);
    35833628
    35843629    if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
     
    35953640        if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
    35963641            icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
    35973642        if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
    3598             dup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
     3643            adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
    35993644    }
    36003645    else
    36013646    {
     
    36043649    }
    36053650    if (word == NULL || *word == NUL)
    36063651        return FAIL;
    3607     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, dup);
     3652    return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
    36083653}
    36093654#endif
    36103655
     
    37963841                    TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0),
    37973842                    TAG_MANY, curbuf->b_ffname) == OK && num_matches > 0)
    37983843            {
    3799                 ins_compl_add_matches(num_matches, matches, FALSE);
     3844                ins_compl_add_matches(num_matches, matches, p_ic);
    38003845            }
    38013846            p_ic = save_p_ic;
    38023847            break;
     
    38373882            num_matches = expand_spelling(first_match_pos.lnum,
    38383883                                 first_match_pos.col, compl_pattern, &matches);
    38393884            if (num_matches > 0)
    3840                 ins_compl_add_matches(num_matches, matches, FALSE);
     3885                ins_compl_add_matches(num_matches, matches, p_ic);
    38413886#endif
    38423887            break;
    38433888
     
    39714016                            continue;
    39724017                    }
    39734018                }
    3974                 if (ins_compl_add_infercase(ptr, len, FALSE,
     4019                if (ins_compl_add_infercase(ptr, len, p_ic,
    39754020                                 ins_buf == curbuf ? NULL : ins_buf->b_sfname,
    39764021                                           0, flags) != NOTDONE)
    39774022                {
     
    41004145                && compl_shown_match->cp_next != NULL
    41014146                && compl_shown_match->cp_next != compl_first_match)
    41024147            compl_shown_match = compl_shown_match->cp_next;
     4148
     4149        /* If we didn't find it searching forward, and compl_shows_dir is
     4150         * backward, find the last match. */
     4151        if (compl_shows_dir == BACKWARD
     4152                && !ins_compl_equal(compl_shown_match,
     4153                                      compl_leader, (int)STRLEN(compl_leader))
     4154                && (compl_shown_match->cp_next == NULL
     4155                    || compl_shown_match->cp_next == compl_first_match))
     4156        {
     4157            while (!ins_compl_equal(compl_shown_match,
     4158                                      compl_leader, (int)STRLEN(compl_leader))
     4159                    && compl_shown_match->cp_prev != NULL
     4160                    && compl_shown_match->cp_prev != compl_first_match)
     4161                compl_shown_match = compl_shown_match->cp_prev;
     4162        }
    41034163    }
    41044164
    41054165    if (allow_get_expansion && insert_match
     
    41244184    {
    41254185        if (compl_shows_dir == FORWARD && compl_shown_match->cp_next != NULL)
    41264186        {
    4127             if (compl_pending != 0)
    4128                 --compl_pending;
    41294187            compl_shown_match = compl_shown_match->cp_next;
    41304188            found_end = (compl_first_match != NULL
    41314189                           && (compl_shown_match->cp_next == compl_first_match
     
    41344192        else if (compl_shows_dir == BACKWARD
    41354193                                        && compl_shown_match->cp_prev != NULL)
    41364194        {
    4137             if (compl_pending != 0)
    4138                 ++compl_pending;
    41394195            found_end = (compl_shown_match == compl_first_match);
    41404196            compl_shown_match = compl_shown_match->cp_prev;
    41414197            found_end |= (compl_shown_match == compl_first_match);
    41424198        }
    41434199        else
    41444200        {
     4201            if (!allow_get_expansion)
     4202            {
     4203                if (advance)
     4204                {
     4205                    if (compl_shows_dir == BACKWARD)
     4206                        compl_pending -= todo + 1;
     4207                    else
     4208                        compl_pending += todo + 1;
     4209                }
     4210                return -1;
     4211            }
     4212
    41454213            if (advance)
    41464214            {
    41474215                if (compl_shows_dir == BACKWARD)
     
    41494217                else
    41504218                    ++compl_pending;
    41514219            }
    4152             if (!allow_get_expansion)
    4153                 return -1;
    41544220
    41554221            /* Find matches. */
    41564222            num_matches = ins_compl_get_exp(&compl_startpos);
    4157             if (compl_pending != 0 && compl_direction == compl_shows_dir
     4223
     4224            /* handle any pending completions */
     4225            while (compl_pending != 0 && compl_direction == compl_shows_dir
    41584226                                                                   && advance)
    4159                 compl_shown_match = compl_curr_match;
     4227            {
     4228                if (compl_pending > 0 && compl_shown_match->cp_next != NULL)
     4229                {
     4230                    compl_shown_match = compl_shown_match->cp_next;
     4231                    --compl_pending;
     4232                }
     4233                if (compl_pending < 0 && compl_shown_match->cp_prev != NULL)
     4234                {
     4235                    compl_shown_match = compl_shown_match->cp_prev;
     4236                    ++compl_pending;
     4237                }
     4238                else
     4239                    break;
     4240            }
    41604241            found_end = FALSE;
    41614242        }
    41624243        if ((compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0
     
    42654346        return;
    42664347    count = 0;
    42674348
    4268     ++no_mapping;
     4349    /* Check for a typed key.  Do use mappings, otherwise vim_is_ctrl_x_key()
     4350     * can't do its work correctly. */
    42694351    c = vpeekc_any();
    4270     --no_mapping;
    42714352    if (c != NUL)
    42724353    {
    42734354        if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R)
     
    42774358            (void)ins_compl_next(FALSE, ins_compl_key2count(c),
    42784359                                                    c != K_UP && c != K_DOWN);
    42794360        }
    4280         else if (c != Ctrl_R)
    4281             compl_interrupted = TRUE;
     4361        else
     4362        {
     4363            /* Need to get the character to have KeyTyped set.  We'll put it
     4364             * back with vungetc() below. */
     4365            c = safe_vgetc();
     4366
     4367            /* Don't interrupt completion when the character wasn't typed,
     4368             * e.g., when doing @q to replay keys. */
     4369            if (c != Ctrl_R && KeyTyped)
     4370                compl_interrupted = TRUE;
     4371
     4372            vungetc(c);
     4373        }
    42824374    }
    42834375    if (compl_pending != 0 && !got_int)
    4284         (void)ins_compl_next(FALSE, compl_pending > 0
    4285                                       ? compl_pending : -compl_pending, TRUE);
     4376    {
     4377        int todo = compl_pending > 0 ? compl_pending : -compl_pending;
     4378
     4379        compl_pending = 0;
     4380        (void)ins_compl_next(FALSE, todo, TRUE);
     4381    }
    42864382}
    42874383
    42884384/*
     
    46114707                                     (int)STRLEN(compl_pattern), curs_col);
    46124708            if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
    46134709                    || compl_xp.xp_context == EXPAND_NOTHING)
    4614                 return FAIL;
    4615             startcol = (int)(compl_xp.xp_pattern - compl_pattern);
    4616             compl_col = startcol;
    4617             compl_length = curs_col - startcol;
     4710                /* No completion possible, use an empty pattern to get a
     4711                 * "pattern not found" message. */
     4712                compl_col = curs_col;
     4713            else
     4714                compl_col = (int)(compl_xp.xp_pattern - compl_pattern);
     4715            compl_length = curs_col - compl_col;
    46184716        }
    46194717        else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
    46204718        {
     
    46684766            else
    46694767                compl_col = spell_word_start(startcol);
    46704768            if (compl_col >= (colnr_T)startcol)
    4671                 return FAIL;
    4672             spell_expand_check_cap(compl_col);
     4769            {
     4770                compl_length = 0;
     4771                compl_col = curs_col;
     4772            }
     4773            else
     4774            {
     4775                spell_expand_check_cap(compl_col);
     4776                compl_length = (int)curs_col - compl_col;
     4777            }
    46734778            /* Need to obtain "line" again, it may have become invalid. */
    46744779            line = ml_get(curwin->w_cursor.lnum);
    4675             compl_length = (int)curs_col - compl_col;
    46764780            compl_pattern = vim_strnsave(line + compl_col, compl_length);
    46774781            if (compl_pattern == NULL)
    46784782#endif
     
    47204824        vim_free(compl_orig_text);
    47214825        compl_orig_text = vim_strnsave(line + compl_col, compl_length);
    47224826        if (compl_orig_text == NULL || ins_compl_add(compl_orig_text,
    4723                         -1, FALSE, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
     4827                        -1, p_ic, NULL, NULL, 0, ORIGINAL_TEXT, FALSE) != OK)
    47244828        {
    47254829            vim_free(compl_pattern);
    47264830            compl_pattern = NULL;
     
    85088612    tpos = curwin->w_cursor;
    85098613    if (oneleft() == OK)
    85108614    {
    8511         start_arrow(&tpos);
     8615#if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
     8616        /* Only call start_arrow() when not busy with preediting, it will
     8617         * break undo.  K_LEFT is inserted in im_correct_cursor(). */
     8618        if (!im_is_preediting())
     8619#endif
     8620            start_arrow(&tpos);
    85128621#ifdef FEAT_RIGHTLEFT
    85138622        /* If exit reversed string, position is fixed */
    85148623        if (revins_scol != -1 && (int)curwin->w_cursor.col >= revins_scol)
  • src/eval.c

    diff -Naur vim70.orig/src/eval.c vim70/src/eval.c
    old new  
    454454static char_u *deref_func_name __ARGS((char_u *name, int *lenp));
    455455static int get_func_tv __ARGS((char_u *name, int len, typval_T *rettv, char_u **arg, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
    456456static int call_func __ARGS((char_u *name, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
    457 static void emsg_funcname __ARGS((char *msg, char_u *name));
     457static void emsg_funcname __ARGS((char *ermsg, char_u *name));
    458458
    459459static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
    460460static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
     
    701701static void list_one_var_a __ARGS((char_u *prefix, char_u *name, int type, char_u *string));
    702702static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
    703703static int var_check_ro __ARGS((int flags, char_u *name));
     704static int var_check_fixed __ARGS((int flags, char_u *name));
    704705static int tv_check_lock __ARGS((int lock, char_u *name));
    705706static void copy_tv __ARGS((typval_T *from, typval_T *to));
    706707static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
     
    22602261            EMSG(_(e_letunexp));
    22612262        else
    22622263        {
    2263             char_u      *tofree = NULL;
     2264            char_u      *ptofree = NULL;
    22642265            char_u      *s;
    22652266
    22662267            p = get_tv_string_chk(tv);
     
    22692270                s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE);
    22702271                if (s != NULL)
    22712272                {
    2272                     p = tofree = concat_str(s, p);
     2273                    p = ptofree = concat_str(s, p);
    22732274                    vim_free(s);
    22742275                }
    22752276            }
     
    22782279                write_reg_contents(*arg == '@' ? '"' : *arg, p, -1, FALSE);
    22792280                arg_end = arg + 1;
    22802281            }
    2281             vim_free(tofree);
     2282            vim_free(ptofree);
    22822283        }
    22832284    }
    22842285
     
    33643365        hi = hash_find(ht, varname);
    33653366        if (!HASHITEM_EMPTY(hi))
    33663367        {
     3368            if (var_check_fixed(HI2DI(hi)->di_flags, name))
     3369                return FAIL;
    33673370            if (var_check_ro(HI2DI(hi)->di_flags, name))
    33683371                return FAIL;
    33693372            delete_var(ht, hi);
     
    60596062    tabpage_T   *tp;
    60606063#endif
    60616064
     6065    /* Only do this once. */
     6066    want_garbage_collect = FALSE;
     6067    may_garbage_collect = FALSE;
     6068
    60626069    /*
    60636070     * 1. Go through all accessible variables and mark all lists and dicts
    60646071     *    with copyID.
     
    75957602 * Give an error message with a function name.  Handle <SNR> things.
    75967603 */
    75977604    static void
    7598 emsg_funcname(msg, name)
    7599     char        *msg;
     7605emsg_funcname(ermsg, name)
     7606    char        *ermsg;
    76007607    char_u      *name;
    76017608{
    76027609    char_u      *p;
     
    76057612        p = concat_str((char_u *)"<SNR>", name + 3);
    76067613    else
    76077614        p = name;
    7608     EMSG2(_(msg), p);
     7615    EMSG2(_(ermsg), p);
    76097616    if (p != name)
    76107617        vim_free(p);
    76117618}
     
    82528259        EMSG(_("E785: complete() can only be used in Insert mode"));
    82538260        return;
    82548261    }
     8262
     8263    /* Check for undo allowed here, because if something was already inserted
     8264     * the line was already saved for undo and this check isn't done. */
     8265    if (!undo_allowed())
     8266        return;
     8267
    82558268    if (argvars[1].v_type != VAR_LIST || argvars[1].vval.v_list == NULL)
    82568269    {
    82578270        EMSG(_(e_invarg));
     
    91739186    typval_T    save_key;
    91749187    int         rem;
    91759188    int         todo;
    9176     char_u      *msg = map ? (char_u *)"map()" : (char_u *)"filter()";
     9189    char_u      *ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
    91779190    int         save_did_emsg;
    91789191
    91799192    rettv->vval.v_number = 0;
    91809193    if (argvars[0].v_type == VAR_LIST)
    91819194    {
    91829195        if ((l = argvars[0].vval.v_list) == NULL
    9183                 || (map && tv_check_lock(l->lv_lock, msg)))
     9196                || (map && tv_check_lock(l->lv_lock, ermsg)))
    91849197            return;
    91859198    }
    91869199    else if (argvars[0].v_type == VAR_DICT)
    91879200    {
    91889201        if ((d = argvars[0].vval.v_dict) == NULL
    9189                 || (map && tv_check_lock(d->dv_lock, msg)))
     9202                || (map && tv_check_lock(d->dv_lock, ermsg)))
    91909203            return;
    91919204    }
    91929205    else
    91939206    {
    9194         EMSG2(_(e_listdictarg), msg);
     9207        EMSG2(_(e_listdictarg), ermsg);
    91959208        return;
    91969209    }
    91979210
     
    92239236                {
    92249237                    --todo;
    92259238                    di = HI2DI(hi);
    9226                     if (tv_check_lock(di->di_tv.v_lock, msg))
     9239                    if (tv_check_lock(di->di_tv.v_lock, ermsg))
    92279240                        break;
    92289241                    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
    92299242                    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
     
    92429255        {
    92439256            for (li = l->lv_first; li != NULL; li = nli)
    92449257            {
    9245                 if (tv_check_lock(li->li_tv.v_lock, msg))
     9258                if (tv_check_lock(li->li_tv.v_lock, ermsg))
    92469259                    break;
    92479260                nli = li->li_next;
    92489261                if (filter_map_one(&li->li_tv, expr, map, &rem) == FAIL
     
    95989611    typval_T    *argvars;
    95999612    typval_T    *rettv;
    96009613{
    9601     garbage_collect();
     9614    /* This is postponed until we are back at the toplevel, because we may be
     9615     * using Lists and Dicts internally.  E.g.: ":echo [garbagecollect()]". */
     9616    want_garbage_collect = TRUE;
    96029617}
    96039618
    96049619/*
     
    97929807    varnumber_T         n;
    97939808    int                 error = FALSE;
    97949809
     9810    /* Position the cursor.  Needed after a message that ends in a space. */
     9811    windgoto(msg_row, msg_col);
     9812
    97959813    ++no_mapping;
    97969814    ++allow_keys;
    97979815    if (argvars[0].v_type == VAR_UNKNOWN)
     
    1131211330
    1131311331static int inputsecret_flag = 0;
    1131411332
     11333static void get_user_input __ARGS((typval_T *argvars, typval_T *rettv, int inputdialog));
     11334
    1131511335/*
    11316  * "input()" function
    11317  *     Also handles inputsecret() when inputsecret is set.
     11336 * This function is used by f_input() and f_inputdialog() functions. The third
     11337 * argument to f_input() specifies the type of completion to use at the
     11338 * prompt. The third argument to f_inputdialog() specifies the value to return
     11339 * when the user cancels the prompt.
    1131811340 */
    1131911341    static void
    11320 f_input(argvars, rettv)
     11342get_user_input(argvars, rettv, inputdialog)
    1132111343    typval_T    *argvars;
    1132211344    typval_T    *rettv;
     11345    int         inputdialog;
    1132311346{
    1132411347    char_u      *prompt = get_tv_string_chk(&argvars[0]);
    1132511348    char_u      *p = NULL;
     
    1136911392            if (defstr != NULL)
    1137011393                stuffReadbuffSpec(defstr);
    1137111394
    11372             if (argvars[2].v_type != VAR_UNKNOWN)
     11395            if (!inputdialog && argvars[2].v_type != VAR_UNKNOWN)
    1137311396            {
    1137411397                char_u  *xp_name;
    11375                 int             xp_namelen;
     11398                int     xp_namelen;
    1137611399                long    argt;
    1137711400
    1137811401                rettv->vval.v_string = NULL;
     
    1140411427}
    1140511428
    1140611429/*
     11430 * "input()" function
     11431 *     Also handles inputsecret() when inputsecret is set.
     11432 */
     11433    static void
     11434f_input(argvars, rettv)
     11435    typval_T    *argvars;
     11436    typval_T    *rettv;
     11437{
     11438    get_user_input(argvars, rettv, FALSE);
     11439}
     11440
     11441/*
    1140711442 * "inputdialog()" function
    1140811443 */
    1140911444    static void
     
    1144311478    }
    1144411479    else
    1144511480#endif
    11446         f_input(argvars, rettv);
     11481        get_user_input(argvars, rettv, TRUE);
    1144711482}
    1144811483
    1144911484/*
     
    1147111506    }
    1147211507
    1147311508    msg_start();
     11509    msg_row = Rows - 1; /* for when 'cmdheight' > 1 */
    1147411510    lines_left = Rows;  /* avoid more prompt */
    1147511511    msg_scroll = TRUE;
    1147611512    msg_clr_eos();
     
    1325013286        if (argvars[2].v_type != VAR_UNKNOWN)
    1325113287            EMSG2(_(e_toomanyarg), "remove()");
    1325213288        else if ((d = argvars[0].vval.v_dict) != NULL
    13253                 && !tv_check_lock(d->dv_lock, (char_u *)"remove()"))
     13289                && !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
    1325413290        {
    1325513291            key = get_tv_string_chk(&argvars[1]);
    1325613292            if (key != NULL)
     
    1327013306    else if (argvars[0].v_type != VAR_LIST)
    1327113307        EMSG2(_(e_listdictarg), "remove()");
    1327213308    else if ((l = argvars[0].vval.v_list) != NULL
    13273             && !tv_check_lock(l->lv_lock, (char_u *)"remove()"))
     13309            && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
    1327413310    {
    1327513311        int         error = FALSE;
    1327613312
     
    1415714193    typval_T    *rettv;
    1415814194{
    1415914195    buf_T       *buf;
    14160 #ifdef FEAT_AUTOCMD
    1416114196    aco_save_T  aco;
    14162 #else
    14163     buf_T       *save_curbuf;
    14164 #endif
    1416514197    char_u      *varname, *bufvarname;
    1416614198    typval_T    *varp;
    1416714199    char_u      nbuf[NUMBUFLEN];
     
    1417814210    if (buf != NULL && varname != NULL && varp != NULL)
    1417914211    {
    1418014212        /* set curbuf to be our buf, temporarily */
    14181 #ifdef FEAT_AUTOCMD
    1418214213        aucmd_prepbuf(&aco, buf);
    14183 #else
    14184         save_curbuf = curbuf;
    14185         curbuf = buf;
    14186 #endif
    1418714214
    1418814215        if (*varname == '&')
    1418914216        {
     
    1421014237        }
    1421114238
    1421214239        /* reset notion of buffer */
    14213 #ifdef FEAT_AUTOCMD
    1421414240        aucmd_restbuf(&aco);
    14215 #else
    14216         curbuf = save_curbuf;
    14217 #endif
    1421814241    }
    1421914242}
    1422014243
     
    1617316196        curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
    1617416197        curwin->w_set_curswant = FALSE;
    1617516198
    16176         curwin->w_topline = get_dict_number(dict, (char_u *)"topline");
     16199        set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
    1617716200#ifdef FEAT_DIFF
    1617816201        curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
    1617916202#endif
     
    1621816241#ifdef FEAT_VIRTUALEDIT
    1621916242    dict_add_nr_str(dict, "coladd", (long)curwin->w_cursor.coladd, NULL);
    1622016243#endif
     16244    update_curswant();
    1622116245    dict_add_nr_str(dict, "curswant", (long)curwin->w_curswant, NULL);
    1622216246
    1622316247    dict_add_nr_str(dict, "topline", (long)curwin->w_topline, NULL);
     
    1643816462    long        i = 0;
    1643916463    long        n;
    1644016464
    16441     /* List must be: [fnum, lnum, col, coladd] */
    16442     if (arg->v_type != VAR_LIST || l == NULL
    16443                                       || l->lv_len != (fnump == NULL ? 3 : 4))
     16465    /* List must be: [fnum, lnum, col, coladd], where "fnum" is only there
     16466     * when "fnump" isn't NULL and "coladd" is optional. */
     16467    if (arg->v_type != VAR_LIST
     16468            || l == NULL
     16469            || l->lv_len < (fnump == NULL ? 2 : 3)
     16470            || l->lv_len > (fnump == NULL ? 3 : 4))
    1644416471        return FAIL;
    1644516472
    1644616473    if (fnump != NULL)
     
    1646616493#ifdef FEAT_VIRTUALEDIT
    1646716494    n = list_find_nr(l, i, NULL);
    1646816495    if (n < 0)
    16469         return FAIL;
    16470     posp->coladd = n;
     16496        posp->coladd = 0;
     16497    else
     16498        posp->coladd = n;
    1647116499#endif
    1647216500
    1647316501    return OK;
     
    1775917787    }
    1776017788    else                    /* add a new variable */
    1776117789    {
     17790        /* Can't add "v:" variable. */
     17791        if (ht == &vimvarht)
     17792        {
     17793            EMSG2(_(e_illvar), name);
     17794            return;
     17795        }
     17796
    1776217797        /* Make sure the variable name is valid. */
    1776317798        for (p = varname; *p != NUL; ++p)
    1776417799            if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
     
    1779217827}
    1779317828
    1779417829/*
    17795  * Return TRUE if di_flags "flags" indicate read-only variable "name".
     17830 * Return TRUE if di_flags "flags" indicates variable "name" is read-only.
    1779617831 * Also give an error message.
    1779717832 */
    1779817833    static int
     
    1781417849}
    1781517850
    1781617851/*
     17852 * Return TRUE if di_flags "flags" indicates variable "name" is fixed.
     17853 * Also give an error message.
     17854 */
     17855    static int
     17856var_check_fixed(flags, name)
     17857    int         flags;
     17858    char_u      *name;
     17859{
     17860    if (flags & DI_FLAGS_FIX)
     17861    {
     17862        EMSG2(_("E795: Cannot delete variable %s"), name);
     17863        return TRUE;
     17864    }
     17865    return FALSE;
     17866}
     17867
     17868/*
    1781717869 * Return TRUE if typeval "tv" is set to be locked (immutable).
    1781817870 * Also give an error message, using "name".
    1781917871 */
     
    1878618838                if (dict_add(fudi.fd_dict, fudi.fd_di) == FAIL)
    1878718839                {
    1878818840                    vim_free(fudi.fd_di);
     18841                    vim_free(fp);
    1878918842                    goto erret;
    1879018843                }
    1879118844            }
     
    1896319016    else if (lead > 0)
    1896419017    {
    1896519018        lead = 3;
    18966         if (eval_fname_sid(lv.ll_exp_name != NULL ? lv.ll_exp_name : *pp))
     19019        if ((lv.ll_exp_name != NULL && eval_fname_sid(lv.ll_exp_name))
     19020                                                       || eval_fname_sid(*pp))
    1896719021        {
    1896819022            /* It's "s:" or "<SID>" */
    1896919023            if (current_SID <= 0)
     
    1968519739    v->di_tv.vval.v_list = &fc.l_varlist;
    1968619740    vim_memset(&fc.l_varlist, 0, sizeof(list_T));
    1968719741    fc.l_varlist.lv_refcount = 99999;
     19742    fc.l_varlist.lv_lock = VAR_FIXED;
    1968819743
    1968919744    /*
    1969019745     * Set a:firstline to "firstline" and a:lastline to "lastline".
     
    1976119816            if (p_verbose >= 14)
    1976219817            {
    1976319818                char_u  buf[MSG_BUF_LEN];
    19764                 char_u  numbuf[NUMBUFLEN];
     19819                char_u  numbuf2[NUMBUFLEN];
    1976519820                char_u  *tofree;
    1976619821
    1976719822                msg_puts((char_u *)"(");
     
    1977319828                        msg_outnum((long)argvars[i].vval.v_number);
    1977419829                    else
    1977519830                    {
    19776                         trunc_string(tv2string(&argvars[i], &tofree, numbuf, 0),
    19777                                                             buf, MSG_BUF_CLEN);
     19831                        trunc_string(tv2string(&argvars[i], &tofree,
     19832                                              numbuf2, 0), buf, MSG_BUF_CLEN);
    1977819833                        msg_puts(buf);
    1977919834                        vim_free(tofree);
    1978019835                    }
     
    1985219907        else
    1985319908        {
    1985419909            char_u      buf[MSG_BUF_LEN];
    19855             char_u      numbuf[NUMBUFLEN];
     19910            char_u      numbuf2[NUMBUFLEN];
    1985619911            char_u      *tofree;
    1985719912
    1985819913            /* The value may be very long.  Skip the middle part, so that we
    1985919914             * have some idea how it starts and ends. smsg() would always
    1986019915             * truncate it at the end. */
    19861             trunc_string(tv2string(fc.rettv, &tofree, numbuf, 0),
     19916            trunc_string(tv2string(fc.rettv, &tofree, numbuf2, 0),
    1986219917                                                           buf, MSG_BUF_CLEN);
    1986319918            smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
    1986419919            vim_free(tofree);
  • src/ex_cmds2.c

    diff -Naur vim70.orig/src/ex_cmds2.c vim70/src/ex_cmds2.c
    old new  
    36483648 * Return FALSE when not sourcing a file.
    36493649 */
    36503650    int
    3651 source_finished(getline, cookie)
    3652     char_u      *(*getline) __ARGS((int, void *, int));
     3651source_finished(fgetline, cookie)
     3652    char_u      *(*fgetline) __ARGS((int, void *, int));
    36533653    void        *cookie;
    36543654{
    3655     return (getline_equal(getline, cookie, getsourceline)
     3655    return (getline_equal(fgetline, cookie, getsourceline)
    36563656            && ((struct source_cookie *)getline_cookie(
    3657                                                  getline, cookie))->finished);
     3657                                                fgetline, cookie))->finished);
    36583658}
    36593659#endif
    36603660
  • src/ex_cmds.c

    diff -Naur vim70.orig/src/ex_cmds.c vim70/src/ex_cmds.c
    old new  
    9595                _("<%s>%s%s  %d,  Hex %02x,  Octal %03o"),
    9696                                           transchar(c), buf1, buf2, c, c, c);
    9797#ifdef FEAT_MBYTE
    98         c = cc[ci++];
     98        if (enc_utf8)
     99            c = cc[ci++];
     100        else
     101            c = 0;
    99102#endif
    100103    }
    101104
     
    108111        if (len > 0)
    109112            IObuff[len++] = ' ';
    110113        IObuff[len++] = '<';
    111         if (utf_iscomposing(c)
     114        if (enc_utf8 && utf_iscomposing(c)
    112115# ifdef USE_GUI
    113116                && !gui.in_use
    114117# endif
     
    120123                                    : _("> %d, Hex %08x, Octal %o"), c, c, c);
    121124        if (ci == MAX_MCO)
    122125            break;
    123         c = cc[ci++];
     126        if (enc_utf8)
     127            c = cc[ci++];
     128        else
     129            c = 0;
    124130    }
    125131#endif
    126132
     
    185191            new_indent = indent;
    186192        else
    187193        {
     194            has_tab = FALSE;    /* avoid uninit warnings */
    188195            len = linelen(eap->cmdidx == CMD_right ? &has_tab
    189196                                                   : NULL) - get_indent();
    190197
     
    17721779                                ? (st_old.st_mode & 0020)
    17731780                                : (st_old.st_mode & 0002))))
    17741781        {
    1775             int tt;
     1782            int tt = msg_didany;
    17761783
    17771784            /* avoid a wait_return for this message, it's annoying */
    1778             tt = msg_didany;
    17791785            EMSG2(_("E137: Viminfo file is not writable: %s"), fname);
    17801786            msg_didany = tt;
    17811787            fclose(fp_in);
     
    24582464#ifdef FEAT_AUTOCMD
    24592465        apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
    24602466#endif
     2467        /* Change directories when the 'acd' option is set. */
     2468        DO_AUTOCHDIR
    24612469    }
    24622470    /* print full file name if :cd used */
    24632471    fileinfo(FALSE, FALSE, eap->forceit);
     
    26752683                                 eap, eap->append, eap->forceit, TRUE, FALSE);
    26762684
    26772685        /* After ":saveas fname" reset 'readonly'. */
    2678         if (eap->cmdidx == CMD_saveas && retval == OK)
    2679             curbuf->b_p_ro = FALSE;
     2686        if (eap->cmdidx == CMD_saveas)
     2687        {
     2688            if (retval == OK)
     2689                curbuf->b_p_ro = FALSE;
     2690            /* Change directories when the 'acd' option is set. */
     2691            DO_AUTOCHDIR
     2692        }
    26802693    }
    26812694
    26822695theend:
     
    35473560        foldUpdateAll(curwin);
    35483561#endif
    35493562
    3550 #ifdef FEAT_AUTOCHDIR
    3551         if (p_acd && curbuf->b_ffname != NULL
    3552                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    3553             shorten_fnames(TRUE);
    3554 #endif
     3563        /* Change directories when the 'acd' option is set. */
     3564        DO_AUTOCHDIR
     3565
    35553566        /*
    35563567         * Careful: open_buffer() and apply_autocmds() may change the current
    35573568         * buffer and window.
     
    37183729    if (p_im)
    37193730        need_start_insertmode = TRUE;
    37203731
    3721 #ifdef FEAT_AUTOCHDIR
    3722     /* Change directories when the acd option is set on. */
    3723     if (p_acd && curbuf->b_ffname != NULL
    3724                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    3725         shorten_fnames(TRUE);
    3726 #endif
     3732    /* Change directories when the 'acd' option is set. */
     3733    DO_AUTOCHDIR
    37273734
    37283735#if defined(FEAT_SUN_WORKSHOP) || defined(FEAT_NETBEANS_INTG)
    37293736    if (gui.in_use && curbuf->b_ffname != NULL)
  • src/ex_cmds.h

    diff -Naur vim70.orig/src/ex_cmds.h vim70/src/ex_cmds.h
    old new  
    262262EX(CMD_comclear,        "comclear",     ex_comclear,
    263263                        TRLBAR|CMDWIN),
    264264EX(CMD_compiler,        "compiler",     ex_compiler,
    265                         BANG|TRLBAR|WORD1),
     265                        BANG|TRLBAR|WORD1|CMDWIN),
    266266EX(CMD_continue,        "continue",     ex_continue,
    267267                        TRLBAR|SBOXOK|CMDWIN),
    268268EX(CMD_confirm,         "confirm",      ex_wrongmodifier,
  • src/ex_docmd.c

    diff -Naur vim70.orig/src/ex_docmd.c vim70/src/ex_docmd.c
    old new  
    5858#endif
    5959
    6060#ifdef FEAT_EVAL
    61 static char_u   *do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*getline)(int, void *, int), void *cookie));
     61static char_u   *do_one_cmd __ARGS((char_u **, int, struct condstack *, char_u *(*fgetline)(int, void *, int), void *cookie));
    6262#else
    63 static char_u   *do_one_cmd __ARGS((char_u **, int, char_u *(*getline)(int, void *, int), void *cookie));
     63static char_u   *do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
    6464static int      if_level = 0;           /* depth in :if */
    6565#endif
    6666static char_u   *find_command __ARGS((exarg_T *eap, int *full));
     
    831831
    832832    /*
    833833     * If requested, store and reset the global values controlling the
    834      * exception handling (used when debugging).
     834     * exception handling (used when debugging).  Otherwise clear it to avoid
     835     * a bogus compiler warning when the optimizer uses inline functions...
    835836     */
    836     else if (flags & DOCMD_EXCRESET)
     837    if (flags & DOCMD_EXCRESET)
    837838        save_dbg_stuff(&debug_saved);
     839    else
     840        memset(&debug_saved, 0, 1);
    838841
    839842    initial_trylevel = trylevel;
    840843
     
    15741577#endif
    15751578
    15761579/*
    1577  * If "getline" is get_loop_line(), return TRUE if the getline it uses equals
    1578  * "func".  * Otherwise return TRUE when "getline" equals "func".
     1580 * If "fgetline" is get_loop_line(), return TRUE if the getline it uses equals
     1581 * "func".  * Otherwise return TRUE when "fgetline" equals "func".
    15791582 */
    15801583/*ARGSUSED*/
    15811584    int
    1582 getline_equal(getline, cookie, func)
    1583     char_u      *(*getline) __ARGS((int, void *, int));
    1584     void        *cookie;                /* argument for getline() */
     1585getline_equal(fgetline, cookie, func)
     1586    char_u      *(*fgetline) __ARGS((int, void *, int));
     1587    void        *cookie;                /* argument for fgetline() */
    15851588    char_u      *(*func) __ARGS((int, void *, int));
    15861589{
    15871590#ifdef FEAT_EVAL
    15881591    char_u              *(*gp) __ARGS((int, void *, int));
    15891592    struct loop_cookie *cp;
    15901593
    1591     /* When "getline" is "get_loop_line()" use the "cookie" to find the
     1594    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
    15921595     * function that's orignally used to obtain the lines.  This may be nested
    15931596     * several levels. */
    1594     gp = getline;
     1597    gp = fgetline;
    15951598    cp = (struct loop_cookie *)cookie;
    15961599    while (gp == get_loop_line)
    15971600    {
     
    16001603    }
    16011604    return gp == func;
    16021605#else
    1603     return getline == func;
     1606    return fgetline == func;
    16041607#endif
    16051608}
    16061609
    16071610#if defined(FEAT_EVAL) || defined(FEAT_MBYTE) || defined(PROTO)
    16081611/*
    1609  * If "getline" is get_loop_line(), return the cookie used by the original
     1612 * If "fgetline" is get_loop_line(), return the cookie used by the original
    16101613 * getline function.  Otherwise return "cookie".
    16111614 */
    16121615/*ARGSUSED*/
    16131616    void *
    1614 getline_cookie(getline, cookie)
    1615     char_u      *(*getline) __ARGS((int, void *, int));
    1616     void        *cookie;                /* argument for getline() */
     1617getline_cookie(fgetline, cookie)
     1618    char_u      *(*fgetline) __ARGS((int, void *, int));
     1619    void        *cookie;                /* argument for fgetline() */
    16171620{
    16181621# ifdef FEAT_EVAL
    16191622    char_u              *(*gp) __ARGS((int, void *, int));
    16201623    struct loop_cookie *cp;
    16211624
    1622     /* When "getline" is "get_loop_line()" use the "cookie" to find the
     1625    /* When "fgetline" is "get_loop_line()" use the "cookie" to find the
    16231626     * cookie that's orignally used to obtain the lines.  This may be nested
    16241627     * several levels. */
    1625     gp = getline;
     1628    gp = fgetline;
    16261629    cp = (struct loop_cookie *)cookie;
    16271630    while (gp == get_loop_line)
    16281631    {
     
    16481651 * 5. parse arguments
    16491652 * 6. switch on command name
    16501653 *
    1651  * Note: "getline" can be NULL.
     1654 * Note: "fgetline" can be NULL.
    16521655 *
    16531656 * This function may be called recursively!
    16541657 */
     
    16631666#ifdef FEAT_EVAL
    16641667                            cstack,
    16651668#endif
    1666                                     getline, cookie)
     1669                                    fgetline, cookie)
    16671670    char_u              **cmdlinep;
    16681671    int                 sourcing;
    16691672#ifdef FEAT_EVAL
    16701673    struct condstack    *cstack;
    16711674#endif
    1672     char_u              *(*getline) __ARGS((int, void *, int));
    1673     void                *cookie;                /* argument for getline() */
     1675    char_u              *(*fgetline) __ARGS((int, void *, int));
     1676    void                *cookie;                /* argument for fgetline() */
    16741677{
    16751678    char_u              *p;
    16761679    linenr_T            lnum;
     
    16981701    if (quitmore
    16991702#ifdef FEAT_EVAL
    17001703            /* avoid that a function call in 'statusline' does this */
    1701             && !getline_equal(getline, cookie, get_func_line)
     1704            && !getline_equal(fgetline, cookie, get_func_line)
    17021705#endif
    17031706            )
    17041707        --quitmore;
     
    17101713    save_cmdmod = cmdmod;
    17111714    vim_memset(&cmdmod, 0, sizeof(cmdmod));
    17121715
     1716    /* "#!anything" is handled like a comment. */
     1717    if ((*cmdlinep)[0] == '#' && (*cmdlinep)[1] == '!')
     1718        goto doend;
     1719
    17131720    /*
    17141721     * Repeat until no more command modifiers are found.
    17151722     */
     
    17241731
    17251732        /* in ex mode, an empty line works like :+ */
    17261733        if (*ea.cmd == NUL && exmode_active
    1727                         && (getline_equal(getline, cookie, getexmodeline)
    1728                             || getline_equal(getline, cookie, getexline))
     1734                        && (getline_equal(fgetline, cookie, getexmodeline)
     1735                            || getline_equal(fgetline, cookie, getexline))
    17291736                        && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
    17301737        {
    17311738            ea.cmd = (char_u *)"+";
     
    19141921    /* Count this line for profiling if ea.skip is FALSE. */
    19151922    if (do_profiling == PROF_YES && !ea.skip)
    19161923    {
    1917         if (getline_equal(getline, cookie, get_func_line))
    1918             func_line_exec(getline_cookie(getline, cookie));
    1919         else if (getline_equal(getline, cookie, getsourceline))
     1924        if (getline_equal(fgetline, cookie, get_func_line))
     1925            func_line_exec(getline_cookie(fgetline, cookie));
     1926        else if (getline_equal(fgetline, cookie, getsourceline))
    19201927            script_line_exec();
    19211928    }
    19221929#endif
     
    25852592 * The "ea" structure holds the arguments that can be used.
    25862593 */
    25872594    ea.cmdlinep = cmdlinep;
    2588     ea.getline = getline;
     2595    ea.getline = fgetline;
    25892596    ea.cookie = cookie;
    25902597#ifdef FEAT_EVAL
    25912598    ea.cstack = cstack;
     
    26232630        do_throw(cstack);
    26242631    else if (check_cstack)
    26252632    {
    2626         if (source_finished(getline, cookie))
     2633        if (source_finished(fgetline, cookie))
    26272634            do_finish(&ea, TRUE);
    2628         else if (getline_equal(getline, cookie, get_func_line)
     2635        else if (getline_equal(fgetline, cookie, get_func_line)
    26292636                                                   && current_func_returned())
    26302637            do_return(&ea, TRUE, FALSE, NULL);
    26312638    }
     
    62896296    exarg_T     *eap;
    62906297{
    62916298    tabpage_T   *tp;
    6292     int         h = tabline_height();
    62936299
    62946300# ifdef FEAT_CMDWIN
    62956301    if (cmdwin_type != 0)
     
    63216327               )
    63226328                tabpage_close(eap->forceit);
    63236329        }
    6324 
    6325     if (h != tabline_height())
    6326         shell_new_rows();
    63276330}
    63286331
    63296332/*
     
    63356338{
    63366339    tabpage_T   *tp;
    63376340    int         done;
    6338     int         h = tabline_height();
    63396341
    63406342# ifdef FEAT_CMDWIN
    63416343    if (cmdwin_type != 0)
     
    63646366                    break;
    63656367            }
    63666368        }
    6367 
    6368     if (h != tabline_height())
    6369         shell_new_rows();
    63706369}
    63716370
    63726371/*
     
    63906389/*
    63916390 * Close tab page "tp", which is not the current tab page.
    63926391 * Note that autocommands may make "tp" invalid.
     6392 * Also takes care of the tab pages line disappearing when closing the
     6393 * last-but-one tab page.
    63936394 */
    63946395    void
    63956396tabpage_close_other(tp, forceit)
     
    63986399{
    63996400    int         done = 0;
    64006401    win_T       *wp;
     6402    int         h = tabline_height();
    64016403
    64026404    /* Limit to 1000 windows, autocommands may add a window while we close
    64036405     * one.  OK, so I'm paranoid... */
     
    64116413        if (!valid_tabpage(tp) || tp->tp_firstwin == wp)
    64126414            break;
    64136415    }
     6416
    64146417    redraw_tabline = TRUE;
     6418    if (h != tabline_height())
     6419        shell_new_rows();
    64156420}
    64166421
    64176422/*
     
    84178422        else
    84188423            EMSG2(_(e_invarg2), eap->arg);
    84198424    }
     8425
     8426    /* Make sure redirection is not off.  Can happen for cmdline completion
     8427     * that indirectly invokes a command to catch its output. */
     8428    if (redir_fd != NULL
     8429#ifdef FEAT_EVAL
     8430                          || redir_reg || redir_vname
     8431#endif
     8432                                                        )
     8433        redir_off = FALSE;
    84208434}
    84218435
    84228436/*
  • src/ex_getln.c

    diff -Naur vim70.orig/src/ex_getln.c vim70/src/ex_getln.c
    old new  
    324324     */
    325325    for (;;)
    326326    {
     327        redir_off = TRUE;       /* Don't redirect the typed command.
     328                                   Repeated, because a ":redir" inside
     329                                   completion may switch it on. */
    327330#ifdef USE_ON_FLY_SCROLL
    328331        dont_scroll = FALSE;    /* allow scrolling here */
    329332#endif
     
    17531756                end_pos = curwin->w_cursor; /* shutup gcc 4 */
    17541757
    17551758            validate_cursor();
     1759# ifdef FEAT_WINDOWS
     1760            /* May redraw the status line to show the cursor position. */
     1761            if (p_ru && curwin->w_status_height > 0)
     1762                curwin->w_redr_status = TRUE;
     1763# endif
    17561764
    17571765            save_cmdline(&save_ccline);
    17581766            update_screen(SOME_VALID);
     
    23602368{
    23612369    if ((State & CMDLINE)
    23622370            && xic != NULL
    2363             && im_get_status()
     2371            /* && im_get_status()  doesn't work when using SCIM */
    23642372            && !p_imdisable
    23652373            && im_is_preediting())
    23662374    {
     
    45214529    flags |= EW_FILE | EW_EXEC;
    45224530
    45234531    /* For an absolute name we don't use $PATH. */
    4524     if ((pat[0] == '.' && (vim_ispathsep(pat[1])
     4532    if (mch_isFullName(pat))
     4533        path = (char_u *)" ";
     4534    else if ((pat[0] == '.' && (vim_ispathsep(pat[1])
    45254535                            || (pat[1] == '.' && vim_ispathsep(pat[2])))))
    45264536        path = (char_u *)".";
    45274537    else
     
    45344544    ga_init2(&ga, (int)sizeof(char *), 10);
    45354545    for (s = path; *s != NUL; s = e)
    45364546    {
     4547        if (*s == ' ')
     4548            ++s;        /* Skip space used for absolute path name. */
     4549
    45374550#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
    45384551        e = vim_strchr(s, ';');
    45394552#else
     
    59825995    typestr[0] = cmdwin_type;
    59835996    typestr[1] = NUL;
    59845997    apply_autocmds(EVENT_CMDWINENTER, typestr, typestr, FALSE, curbuf);
     5998    if (restart_edit != 0)      /* autocmd with ":startinsert" */
     5999        stuffcharReadbuff(K_NOP);
    59856000# endif
    59866001
    59876002    i = RedrawingDisabled;
  • src/fileio.c

    diff -Naur vim70.orig/src/fileio.c vim70/src/fileio.c
    old new  
    316316     * display the line. */
    317317    ex_no_reprint = TRUE;
    318318
     319    /* don't display the file info for another buffer now */
     320    need_fileinfo = FALSE;
     321
    319322    /*
    320323     * For Unix: Use the short file name whenever possible.
    321324     * Avoids problems with networks and when directory names are changed.
     
    64506453    int         old_ro = buf->b_p_ro;
    64516454    buf_T       *savebuf;
    64526455    int         saved = OK;
    6453 #ifdef FEAT_AUTOCMD
    64546456    aco_save_T  aco;
    64556457
    64566458    /* set curwin/curbuf for "buf" and save some things */
    64576459    aucmd_prepbuf(&aco, buf);
    6458 #else
    6459     buf_T       *save_curbuf = curbuf;
    6460 
    6461     curbuf = buf;
    6462     curwin->w_buffer = buf;
    6463 #endif
    64646460
    64656461    /* We only want to read the text from the file, not reset the syntax
    64666462     * highlighting, clear marks, diff status, etc.  Force the fileformat
     
    65736569            curbuf->b_p_ro |= old_ro;
    65746570    }
    65756571
    6576 #ifdef FEAT_AUTOCMD
    65776572    /* restore curwin/curbuf and a few other things */
    65786573    aucmd_restbuf(&aco);
    65796574    /* Careful: autocommands may have made "buf" invalid! */
    6580 #else
    6581     curwin->w_buffer = save_curbuf;
    6582     curbuf = save_curbuf;
    6583 #endif
    65846575}
    65856576
    65866577/*ARGSUSED*/
     
    69926983    {"FocusLost",       EVENT_FOCUSLOST},
    69936984    {"FuncUndefined",   EVENT_FUNCUNDEFINED},
    69946985    {"GUIEnter",        EVENT_GUIENTER},
     6986    {"GUIFailed",       EVENT_GUIFAILED},
    69956987    {"InsertChange",    EVENT_INSERTCHANGE},
    69966988    {"InsertEnter",     EVENT_INSERTENTER},
    69976989    {"InsertLeave",     EVENT_INSERTLEAVE},
     
    80888080 * Search a window for the current buffer.  Save the cursor position and
    80898081 * screen offset.
    80908082 * Set "curbuf" and "curwin" to match "buf".
     8083 * When FEAT_AUTOCMD is not defined another version is used, see below.
    80918084 */
    80928085    void
    80938086aucmd_prepbuf(aco, buf)
     
    81518144/*
    81528145 * Cleanup after executing autocommands for a (hidden) buffer.
    81538146 * Restore the window as it was (if possible).
     8147 * When FEAT_AUTOCMD is not defined another version is used, see below.
    81548148 */
    81558149    void
    81568150aucmd_restbuf(aco)
     
    82958289{
    82968290    int         state;
    82978291
    8298     if (!did_cursorhold && has_cursorhold() && !Recording)
     8292    if (!did_cursorhold && has_cursorhold() && !Recording
     8293#ifdef FEAT_INS_EXPAND
     8294            && !ins_compl_active()
     8295#endif
     8296            )
    82998297    {
    83008298        state = get_real_state();
    83018299        if (state == NORMAL_BUSY || (state & INSERT) != 0)
     
    90639061    return retval;
    90649062}
    90659063
     9064#else   /* FEAT_AUTOCMD */
     9065
     9066/*
     9067 * Prepare for executing commands for (hidden) buffer "buf".
     9068 * This is the non-autocommand version, it simply saves "curbuf" and sets
     9069 * "curbuf" and "curwin" to match "buf".
     9070 */
     9071    void
     9072aucmd_prepbuf(aco, buf)
     9073    aco_save_T  *aco;           /* structure to save values in */
     9074    buf_T       *buf;           /* new curbuf */
     9075{
     9076    aco->save_buf = buf;
     9077    curbuf = buf;
     9078    curwin->w_buffer = buf;
     9079}
     9080
     9081/*
     9082 * Restore after executing commands for a (hidden) buffer.
     9083 * This is the non-autocommand version.
     9084 */
     9085    void
     9086aucmd_restbuf(aco)
     9087    aco_save_T  *aco;           /* structure holding saved values */
     9088{
     9089    curbuf = aco->save_buf;
     9090    curwin->w_buffer = curbuf;
     9091}
     9092
    90669093#endif  /* FEAT_AUTOCMD */
    90679094
     9095
    90689096#if defined(FEAT_AUTOCMD) || defined(FEAT_WILDIGN) || defined(PROTO)
    90699097/*
    90709098 * Try matching a filename with a "pattern" ("prog" is NULL), or use the
  • src/getchar.c

    diff -Naur vim70.orig/src/getchar.c vim70/src/getchar.c
    old new  
    14511451{
    14521452    updatescript(0);
    14531453#ifdef FEAT_EVAL
    1454     garbage_collect();
     1454    if (may_garbage_collect)
     1455        garbage_collect();
    14551456#endif
    14561457}
    14571458
     
    15021503    int         i;
    15031504#endif
    15041505
     1506#ifdef FEAT_EVAL
     1507    /* Do garbage collection when garbagecollect() was called previously and
     1508     * we are now at the toplevel. */
     1509    if (may_garbage_collect && want_garbage_collect)
     1510        garbage_collect();
     1511#endif
     1512
    15051513    /*
    15061514     * If a character was put back with vungetc, it was already processed.
    15071515     * Return it directly.
     
    15111519        c = old_char;
    15121520        old_char = -1;
    15131521        mod_mask = old_mod_mask;
    1514         return c;
    15151522    }
    1516 
    1517     mod_mask = 0x0;
    1518     last_recorded_len = 0;
    1519     for (;;)                    /* this is done twice if there are modifiers */
     1523    else
    15201524    {
     1525      mod_mask = 0x0;
     1526      last_recorded_len = 0;
     1527      for (;;)                  /* this is done twice if there are modifiers */
     1528      {
    15211529        if (mod_mask)           /* no mapping after modifier has been read */
    15221530        {
    15231531            ++no_mapping;
     
    16951703        }
    16961704#endif
    16971705
    1698         return c;
     1706        break;
     1707      }
    16991708    }
     1709
     1710#ifdef FEAT_EVAL
     1711    /*
     1712     * In the main loop "may_garbage_collect" can be set to do garbage
     1713     * collection in the first next vgetc().  It's disabled after that to
     1714     * avoid internally used Lists and Dicts to be freed.
     1715     */
     1716    may_garbage_collect = FALSE;
     1717#endif
     1718
     1719    return c;
    17001720}
    17011721
    17021722/*
  • src/globals.h

    diff -Naur vim70.orig/src/globals.h vim70/src/globals.h
    old new  
    300300#endif
    301301
    302302#ifdef FEAT_EVAL
    303 EXTERN scid_T   current_SID INIT(= 0);      /* ID of script being sourced or
    304                                                was sourced to define the
    305                                                current function. */
     303/* Garbage collection can only take place when we are sure there are no Lists
     304 * or Dictionaries being used internally.  This is flagged with
     305 * "may_garbage_collect" when we are at the toplevel.
     306 * "want_garbage_collect" is set by the garbagecollect() function, which means
     307 * we do garbage collection before waiting for a char at the toplevel. */
     308EXTERN int      may_garbage_collect INIT(= FALSE);
     309EXTERN int      want_garbage_collect INIT(= FALSE);
     310
     311/* ID of script being sourced or was sourced to define the current function. */
     312EXTERN scid_T   current_SID INIT(= 0);
    306313#endif
    307314
    308315#if defined(FEAT_EVAL) || defined(FEAT_SYN_HL)
     
    14411448EXTERN char_u e_readonly[]      INIT(= N_("E45: 'readonly' option is set (add ! to override)"));
    14421449#ifdef FEAT_EVAL
    14431450EXTERN char_u e_readonlyvar[]   INIT(= N_("E46: Cannot change read-only variable \"%s\""));
    1444 EXTERN char_u e_readonlysbx[]   INIT(= N_("E46: Cannot set variable in the sandbox: \"%s\""));
     1451EXTERN char_u e_readonlysbx[]   INIT(= N_("E794: Cannot set variable in the sandbox: \"%s\""));
    14451452#endif
    14461453#ifdef FEAT_QUICKFIX
    14471454EXTERN char_u e_readerrf[]      INIT(= N_("E47: Error while reading errorfile"));
  • src/gui_at_fs.c

    diff -Naur vim70.orig/src/gui_at_fs.c vim70/src/gui_at_fs.c
    old new  
    18611861    XtPointer   pnew;
    18621862{
    18631863    SFDir       *dir;
    1864     int         nw;
     1864    int         nw = (int)(long)pnew;
    18651865
    18661866    dir = &(SFdirs[SFdirPtr + (int)(long)n]);
    18671867
    18681868#ifdef FEAT_GUI_NEXTAW
    1869     if ((int)(long)pnew < 0)
     1869    if (nw < 0)
    18701870    {
    1871         if ((int)(long)pnew > -SFvScrollHeight)
    1872             (int)(long)pnew = -1;
     1871        if (nw > -SFvScrollHeight)
     1872            nw = -1;
    18731873        else
    1874             (int)(long)pnew = -SFlistSize;
     1874            nw = -SFlistSize;
    18751875    }
    1876     else if ((int)(long)pnew > 0)
     1876    else if (nw > 0)
    18771877    {
    1878         if ((int)(long)pnew < SFvScrollHeight)
    1879             (int)(long)pnew = 1;
     1878        if (nw < SFvScrollHeight)
     1879            nw = 1;
    18801880        else
    1881             (int)(long)pnew = SFlistSize;
     1881            nw = SFlistSize;
    18821882    }
    18831883#endif
    1884     nw = dir->vOrigin + (int)(long)pnew;
     1884    nw += dir->vOrigin;
    18851885
    18861886    if (nw > dir->nEntries - SFlistSize)
    18871887        nw = dir->nEntries - SFlistSize;
     
    19411941    XtPointer   pnew;
    19421942{
    19431943    SFDir       *dir;
    1944     int         nw;
     1944    int         nw = (int)(long)pnew;
    19451945
    19461946    dir = &(SFdirs[SFdirPtr + (int)(long)n]);
    19471947
    19481948#ifdef FEAT_GUI_NEXTAW
    1949     if ((int)(long)pnew < 0)
     1949    if (nw < 0)
    19501950    {
    1951         if ((int)(long)pnew > -SFhScrollWidth)
    1952             (int)(long)pnew = -1;
     1951        if (nw > -SFhScrollWidth)
     1952            nw = -1;
    19531953        else
    1954             (int)(long)pnew = -SFcharsPerEntry;
     1954            nw = -SFcharsPerEntry;
    19551955    }
    1956     else if ((int)(long)pnew > 0)
     1956    else if (nw > 0)
    19571957    {
    1958         if ((int)(long)pnew < SFhScrollWidth)
    1959             (int)(long)pnew = 1;
     1958        if (nw < SFhScrollWidth)
     1959            nw = 1;
    19601960        else
    1961             (int)(long)pnew = SFcharsPerEntry;
     1961            nw = SFcharsPerEntry;
    19621962    }
    19631963#endif
    1964     nw = dir->hOrigin + (int)(long)pnew;
     1964    nw += dir->hOrigin;
    19651965
    19661966    if (nw > dir->nChars - SFcharsPerEntry)
    19671967        nw = dir->nChars - SFcharsPerEntry;
     
    20382038    XtPointer   client_data;
    20392039    XtPointer   pnew;
    20402040{
    2041     int         nw;
     2041    int         nw = (int)(long)pnew;
    20422042    float       f;
    20432043
    20442044#ifdef FEAT_GUI_NEXTAW
    2045     if ((int)(long)pnew < 0)
     2045    if (nw < 0)
    20462046    {
    2047         if ((int)(long)pnew > -SFpathScrollWidth)
    2048             (int)(long)pnew = -1;
     2047        if (nw > -SFpathScrollWidth)
     2048            nw = -1;
    20492049        else
    2050             (int)(long)pnew = -3;
     2050            nw = -3;
    20512051    }
    2052     else if ((int)(long)pnew > 0)
     2052    else if (nw > 0)
    20532053    {
    2054         if ((int)(long)pnew < SFpathScrollWidth)
    2055             (int)(long)pnew = 1;
     2054        if (nw < SFpathScrollWidth)
     2055            nw = 1;
    20562056        else
    2057             (int)(long)pnew = 3;
     2057            nw = 3;
    20582058    }
    20592059#endif
    2060     nw = SFdirPtr + (int)(long)pnew;
     2060    nw += SFdirPtr;
    20612061
    20622062    if (nw > SFdirEnd - 3)
    20632063        nw = SFdirEnd - 3;
  • src/gui_beval.c

    diff -Naur vim70.orig/src/gui_beval.c vim70/src/gui_beval.c
    old new  
    926926#  define IS_NONPRINTABLE(c) (((c) < 0x20 && (c) != TAB && (c) != NL) \
    927927                              || (c) == DEL)
    928928    static void
    929 set_printable_label_text(GtkLabel *label, char_u *msg)
     929set_printable_label_text(GtkLabel *label, char_u *text)
    930930{
    931931    char_u          *convbuf = NULL;
    932932    char_u          *buf;
     
    940940    /* Convert to UTF-8 if it isn't already */
    941941    if (output_conv.vc_type != CONV_NONE)
    942942    {
    943         convbuf = string_convert(&output_conv, msg, NULL);
     943        convbuf = string_convert(&output_conv, text, NULL);
    944944        if (convbuf != NULL)
    945             msg = convbuf;
     945            text = convbuf;
    946946    }
    947947
    948948    /* First let's see how much we need to allocate */
    949949    len = 0;
    950     for (p = msg; *p != NUL; p += charlen)
     950    for (p = text; *p != NUL; p += charlen)
    951951    {
    952952        if ((*p & 0x80) == 0)   /* be quick for ASCII */
    953953        {
     
    992992                                     (unsigned long)pixel, &color);
    993993
    994994        pdest = buf;
    995         p = msg;
     995        p = text;
    996996        while (*p != NUL)
    997997        {
    998998            /* Be quick for ASCII */
  • src/gui.c

    diff -Naur vim70.orig/src/gui.c vim70/src/gui.c
    old new  
    187187#endif
    188188
    189189#ifdef FEAT_AUTOCMD
    190     /* If the GUI started successfully, trigger the GUIEnter event */
    191     if (gui.in_use)
    192         apply_autocmds(EVENT_GUIENTER, NULL, NULL, FALSE, curbuf);
     190    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
     191     * the GUIFailed event. */
     192    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
     193                                                   NULL, NULL, FALSE, curbuf);
    193194#endif
    194195
    195196    --recursive;
     
    37333734    if (dont_scroll || input_available())
    37343735        return;
    37353736#endif
     3737#ifdef FEAT_INS_EXPAND
     3738    /* Disallow scrolling the current window when the completion popup menu is
     3739     * visible. */
     3740    if ((sb->wp == NULL || sb->wp == curwin) && pum_visible())
     3741        return;
     3742#endif
    37363743
    37373744#ifdef FEAT_RIGHTLEFT
    37383745    if (sb->wp == NULL && curwin->w_p_rl)
     
    42074214        updateWindow(wp);   /* update window, status line, and cmdline */
    42084215    }
    42094216
     4217#ifdef FEAT_INS_EXPAND
     4218    /* May need to redraw the popup menu. */
     4219    if (pum_visible())
     4220        pum_redraw();
     4221#endif
     4222
    42104223    return (wp == curwin && !equalpos(curwin->w_cursor, old_cursor));
    42114224}
    42124225
     
    45154528    int         y;
    45164529{
    45174530    win_T       *wp;
    4518     char_u      st[6];
     4531    char_u      st[8];
    45194532
    45204533    /* Ignore this while still starting up. */
    45214534    if (!gui.in_use || gui.starting)
     
    46034616    /* Don't move the mouse when it's left or right of the Vim window */
    46044617    if (x < 0 || x > Columns * gui.char_width)
    46054618        return;
     4619    if (y >= 0
    46064620# ifdef FEAT_WINDOWS
    4607     if (Y_2_ROW(y) >= tabline_height())
    4608 # else
    4609     if (y >= 0)
     4621            && Y_2_ROW(y) >= tabline_height()
    46104622# endif
     4623       )
    46114624        wp = xy2win(x, y);
    46124625    if (wp != curwin && wp != NULL)     /* If in other than current window */
    46134626    {
  • src/gui_gtk.c

    diff -Naur vim70.orig/src/gui_gtk.c vim70/src/gui_gtk.c
    old new  
    957957get_menu_position(vimmenu_T *menu)
    958958{
    959959    vimmenu_T   *node;
    960     int         index = 0;
     960    int         idx = 0;
    961961
    962962    for (node = menu->parent->children; node != menu; node = node->next)
    963963    {
    964964        g_return_val_if_fail(node != NULL, -1);
    965         ++index;
     965        ++idx;
    966966    }
    967967
    968     return index;
     968    return idx;
    969969}
    970970#endif /* FEAT_TOOLBAR && HAVE_GTK2 */
    971971
     
    21272127    char    **ync;  /* "yes no cancel" */
    21282128    char    **buttons;
    21292129    int     n_buttons = 0;
    2130     int     index;
     2130    int     idx;
    21312131
    21322132    button_string = vim_strsave(button_string); /* must be writable */
    21332133    if (button_string == NULL)
     
    21612161     * Well, apparently somebody changed his mind: with GTK 2.2.4 it works the
    21622162     * other way around...
    21632163     */
    2164     for (index = 1; index <= n_buttons; ++index)
     2164    for (idx = 1; idx <= n_buttons; ++idx)
    21652165    {
    21662166        char    *label;
    21672167        char_u  *label8;
    21682168
    2169         label = buttons[index - 1];
     2169        label = buttons[idx - 1];
    21702170        /*
    21712171         * Perform some guesswork to find appropriate stock items for the
    21722172         * buttons.  We have to compare with a sample of the translated
     
    21882188            else if (button_equal(label, "Cancel")) label = GTK_STOCK_CANCEL;
    21892189        }
    21902190        label8 = CONVERT_TO_UTF8((char_u *)label);
    2191         gtk_dialog_add_button(dialog, (const gchar *)label8, index);
     2191        gtk_dialog_add_button(dialog, (const gchar *)label8, idx);
    21922192        CONVERT_TO_UTF8_FREE(label8);
    21932193    }
    21942194
  • src/gui_gtk_x11.c

    diff -Naur vim70.orig/src/gui_gtk_x11.c vim70/src/gui_gtk_x11.c
    old new  
    32333233on_select_tab(
    32343234        GtkNotebook     *notebook,
    32353235        GtkNotebookPage *page,
    3236         gint            index,
     3236        gint            idx,
    32373237        gpointer        data)
    32383238{
    32393239    if (!ignore_tabline_evt)
    32403240    {
    3241         if (send_tabline_event(index + 1) && gtk_main_level() > 0)
     3241        if (send_tabline_event(idx + 1) && gtk_main_level() > 0)
    32423242            gtk_main_quit();
    32433243    }
    32443244}
     
    53035303# ifdef HAVE_GTK2
    53045304    if (font != NOFONT)
    53055305    {
    5306         char    *name = pango_font_description_to_string(font);
     5306        char    *pangoname = pango_font_description_to_string(font);
    53075307
    5308         if (name != NULL)
     5308        if (pangoname != NULL)
    53095309        {
    5310             char_u      *s = vim_strsave((char_u *)name);
     5310            char_u      *s = vim_strsave((char_u *)pangoname);
    53115311
    5312             g_free(name);
     5312            g_free(pangoname);
    53135313            return s;
    53145314        }
    53155315    }
     
    62416241{
    62426242    GdkGCValues values;
    62436243    GdkGC *invert_gc;
    6244     GdkColor foreground;
    6245     GdkColor background;
    62466244
    62476245    if (gui.drawarea->window == NULL)
    62486246        return;
    62496247
    6250     foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
    6251     background.pixel = gui.norm_pixel ^ gui.back_pixel;
    6252 
    6253     values.foreground = foreground;
    6254     values.background = background;
     6248    values.foreground.pixel = gui.norm_pixel ^ gui.back_pixel;
     6249    values.background.pixel = gui.norm_pixel ^ gui.back_pixel;
    62556250    values.function = GDK_XOR;
    62566251    invert_gc = gdk_gc_new_with_values(gui.drawarea->window,
    62576252                                       &values,
    62586253                                       GDK_GC_FOREGROUND |
    62596254                                       GDK_GC_BACKGROUND |
    62606255                                       GDK_GC_FUNCTION);
    6261     gdk_gc_set_exposures(invert_gc, gui.visibility != GDK_VISIBILITY_UNOBSCURED);
     6256    gdk_gc_set_exposures(invert_gc, gui.visibility !=
     6257                                                   GDK_VISIBILITY_UNOBSCURED);
    62626258    gdk_draw_rectangle(gui.drawarea->window, invert_gc,
    62636259                       TRUE,
    62646260                       FILL_X(c), FILL_Y(r),
  • src/gui_xmebw.c

    diff -Naur vim70.orig/src/gui_xmebw.c vim70/src/gui_xmebw.c
    old new  
    4747#include "gui_xmebwp.h"
    4848
    4949/* Provide some missing wrappers, which are missed from the LessTif
    50  * implementation.
     50 * implementation.  Also missing in Motif 1.2 and earlier.
    5151 *
    5252 * We neither use XmeGetPixmapData or _XmGetPixmapData, since with LessTif the
    5353 * pixmap will not appear in it's caches properly. We cache the interresting
    5454 * values in XmEnhancedButtonPart instead ourself.
    5555 */
    56 #ifdef LESSTIF_VERSION
     56#if defined(LESSTIF_VERSION) || (XmVersion <= 1002)
    5757# ifndef Lab_IsMenupane
    5858#  define Lab_IsMenupane(w) (Lab_MenuType(w) == (int)XmMENU_POPUP || \
    5959                    Lab_MenuType(w) == (int)XmMENU_PULLDOWN)
     
    480480            || (eb->core.height <= 2 * eb->primitive.highlight_thickness))
    481481        return;
    482482
    483 #ifndef LESSTIF_VERSION
     483#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    484484    {
    485485        XmDisplay       dpy;
    486486
     
    641641    GC          tmp_gc = NULL;
    642642    Boolean     replaceGC = False;
    643643    Boolean     deadjusted = False;
    644 #ifndef LESSTIF_VERSION
     644#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    645645    XmDisplay   dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
    646646    Boolean     etched_in = dpy->display.enable_etched_in_menu;
    647647#else
     
    726726        if ((((ShellWidget) XtParent(XtParent(eb)))->shell.popped_up)
    727727                && _XmGetInDragMode((Widget) eb))
    728728        {
    729 #ifndef LESSTIF_VERSION
     729#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    730730            XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
    731731            Boolean etched_in = dpy->display.enable_etched_in_menu;
    732732#else
     
    810810
    811811    if (Lab_IsMenupane(eb))
    812812    {
    813 #ifndef LESSTIF_VERSION
     813#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    814814        XmDisplay dpy = (XmDisplay) XmGetXmDisplay(XtDisplay(wid));
    815815        Boolean etched_in = dpy->display.enable_etched_in_menu;
    816816#else
     
    11501150Redisplay(Widget w, XEvent *event, Region region)
    11511151{
    11521152    XmEnhancedButtonWidget  eb = (XmEnhancedButtonWidget) w;
    1153 #ifndef LESSTIF_VERSION
     1153#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    11541154    XmDisplay               dpy;
    11551155    XtEnum                  default_button_emphasis;
    11561156#endif
     
    11621162    if (!XtIsRealized((Widget)eb))
    11631163        return;
    11641164
    1165 #ifndef LESSTIF_VERSION
     1165#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    11661166    dpy = (XmDisplay)XmGetXmDisplay(XtDisplay(eb));
    11671167    default_button_emphasis = dpy->display.default_button_emphasis;
    11681168#endif
     
    12411241    {
    12421242        int adjust = 0;
    12431243
    1244 #ifndef LESSTIF_VERSION
     1244#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    12451245        /*
    12461246         *  NOTE: PushButton has two types of shadows: primitive-shadow and
    12471247         *  default-button-shadow.  If pushbutton is in a menu only primitive
     
    12891289                          adjust, adjust, rectwidth, rectheight, borderwidth);
    12901290            }
    12911291
    1292 #ifndef LESSTIF_VERSION
     1292#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    12931293            switch (default_button_emphasis)
    12941294            {
    12951295                case XmINTERNAL_HIGHLIGHT:
     
    13651365                    default_button_shadow_thickness =
    13661366                               eb->pushbutton.default_button_shadow_thickness;
    13671367
    1368 #ifndef LESSTIF_VERSION
     1368#if !defined(LESSTIF_VERSION) && (XmVersion > 1002)
    13691369                /*
    13701370                 * Compute location of bounding box to contain the
    13711371                 * defaultButtonShadow.
  • src/hardcopy.c

    diff -Naur vim70.orig/src/hardcopy.c vim70/src/hardcopy.c
    old new  
    17941794    static int
    17951795prt_resfile_next_line()
    17961796{
    1797     int     index;
     1797    int     idx;
    17981798
    17991799    /* Move to start of next line and then find end of line */
    1800     index = prt_resfile.line_end + 1;
    1801     while (index < prt_resfile.len)
     1800    idx = prt_resfile.line_end + 1;
     1801    while (idx < prt_resfile.len)
    18021802    {
    1803         if (prt_resfile.buffer[index] != PSLF && prt_resfile.buffer[index]
    1804                                                                         != PSCR)
     1803        if (prt_resfile.buffer[idx] != PSLF && prt_resfile.buffer[idx] != PSCR)
    18051804            break;
    1806         index++;
     1805        idx++;
    18071806    }
    1808     prt_resfile.line_start = index;
     1807    prt_resfile.line_start = idx;
    18091808
    1810     while (index < prt_resfile.len)
     1809    while (idx < prt_resfile.len)
    18111810    {
    1812         if (prt_resfile.buffer[index] == PSLF || prt_resfile.buffer[index]
    1813                                                                         == PSCR)
     1811        if (prt_resfile.buffer[idx] == PSLF || prt_resfile.buffer[idx] == PSCR)
    18141812            break;
    1815         index++;
     1813        idx++;
    18161814    }
    1817     prt_resfile.line_end = index;
     1815    prt_resfile.line_end = idx;
    18181816
    1819     return (index < prt_resfile.len);
     1817    return (idx < prt_resfile.len);
    18201818}
    18211819
    18221820    static int
     
    18371835prt_resfile_skip_nonws(offset)
    18381836    int     offset;
    18391837{
    1840     int     index;
     1838    int     idx;
    18411839
    1842     index = prt_resfile.line_start + offset;
    1843     while (index < prt_resfile.line_end)
     1840    idx = prt_resfile.line_start + offset;
     1841    while (idx < prt_resfile.line_end)
    18441842    {
    1845         if (isspace(prt_resfile.buffer[index]))
    1846             return index - prt_resfile.line_start;
    1847         index++;
     1843        if (isspace(prt_resfile.buffer[idx]))
     1844            return idx - prt_resfile.line_start;
     1845        idx++;
    18481846    }
    18491847    return -1;
    18501848}
     
    18531851prt_resfile_skip_ws(offset)
    18541852    int     offset;
    18551853{
    1856     int     index;
     1854    int     idx;
    18571855
    1858     index = prt_resfile.line_start + offset;
    1859     while (index < prt_resfile.line_end)
     1856    idx = prt_resfile.line_start + offset;
     1857    while (idx < prt_resfile.line_end)
    18601858    {
    1861         if (!isspace(prt_resfile.buffer[index]))
    1862             return index - prt_resfile.line_start;
    1863         index++;
     1859        if (!isspace(prt_resfile.buffer[idx]))
     1860            return idx - prt_resfile.line_start;
     1861        idx++;
    18641862    }
    18651863    return -1;
    18661864}
     
    24782476    char_u      *p_encoding;
    24792477    struct prt_ps_encoding_S *p_mbenc;
    24802478    struct prt_ps_encoding_S *p_mbenc_first;
    2481     struct prt_ps_charset_S  *p_mbchar;
     2479    struct prt_ps_charset_S  *p_mbchar = NULL;
    24822480#endif
    24832481
    24842482#if 0
     
    25162514    if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE)))
    25172515    {
    25182516        p_mbenc_first = NULL;
    2519         p_mbchar = NULL;
    25202517        for (cmap = 0; cmap < NUM_ELEMENTS(prt_ps_mbfonts); cmap++)
    25212518            if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
    25222519                                                                    &p_mbenc))
  • src/if_cscope.c

    diff -Naur vim70.orig/src/if_cscope.c vim70/src/if_cscope.c
    old new  
    989989{
    990990    int i;
    991991    char *cmd;
    992     char **matches, **contexts;
    993     int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches, matched;
     992    int nummatches[CSCOPE_MAX_CONNECTIONS], totmatches;
    994993#ifdef FEAT_QUICKFIX
    995994    char cmdletter;
    996995    char *qfpos;
     
    11411140    else
    11421141#endif /* FEAT_QUICKFIX */
    11431142    {
     1143        char **matches = NULL, **contexts = NULL;
     1144        int matched = 0;
     1145
    11441146        /* read output */
    11451147        cs_fill_results((char *)pat, totmatches, nummatches, &matches,
    11461148                                                         &contexts, &matched);
  • src/if_perl.xs

    diff -Naur vim70.orig/src/if_perl.xs vim70/src/if_perl.xs
    old new  
    155155static int (*perl_run)(PerlInterpreter*);
    156156static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
    157157static void* (*Perl_get_context)(void);
    158 static void (*Perl_croak)(pTHX_ const char*, ...) __attribute__((noreturn));
    159 static void (*Perl_croak_nocontext)(const char*, ...) __attribute__((noreturn));
     158static void (*Perl_croak)(pTHX_ const char*, ...);
     159static void (*Perl_croak_nocontext)(const char*, ...);
    160160static I32 (*Perl_dowantarray)(pTHX);
    161161static void (*Perl_free_tmps)(pTHX);
    162162static HV* (*Perl_gv_stashpv)(pTHX_ const char*, I32);
     
    10561056    int i;
    10571057    long lnum;
    10581058    char *line;
    1059     buf_T *savebuf;
    10601059    PPCODE:
    10611060    if (buf_valid(vimbuf))
    10621061    {
     
    10691068            line = SvPV(ST(i),PL_na);
    10701069            if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
    10711070            {
    1072                 savebuf = curbuf;
    1073                 curbuf = vimbuf;
     1071                aco_save_T      aco;
     1072
     1073                /* set curwin/curbuf for "vimbuf" and save some things */
     1074                aucmd_prepbuf(&aco, vimbuf);
     1075
    10741076                if (u_savesub(lnum) == OK)
    10751077                {
    10761078                    ml_replace(lnum, (char_u *)line, TRUE);
    10771079                    changed_bytes(lnum, 0);
    10781080                }
    1079                 curbuf = savebuf;
     1081
     1082                /* restore curwin/curbuf and a few other things */
     1083                aucmd_restbuf(&aco);
     1084                /* Careful: autocommands may have made "vimbuf" invalid! */
    10801085            }
    10811086        }
    10821087    }
     
    10871092
    10881093    PREINIT:
    10891094    long i, lnum = 0, count = 0;
    1090     buf_T *savebuf;
    10911095    PPCODE:
    10921096    if (buf_valid(vimbuf))
    10931097    {
     
    11141118            {
    11151119                if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
    11161120                {
    1117                     savebuf = curbuf;
    1118                     curbuf = vimbuf;
     1121                    aco_save_T  aco;
     1122
     1123                    /* set curwin/curbuf for "vimbuf" and save some things */
     1124                    aucmd_prepbuf(&aco, vimbuf);
     1125
    11191126                    if (u_savedel(lnum, 1) == OK)
    11201127                    {
    11211128                        ml_delete(lnum, 0);
    11221129                        deleted_lines_mark(lnum, 1L);
    1123                         if (savebuf == curbuf)
     1130                        if (aco.save_buf == curbuf)
    11241131                            check_cursor();
    11251132                    }
    1126                     curbuf = savebuf;
     1133
     1134                    /* restore curwin/curbuf and a few other things */
     1135                    aucmd_restbuf(&aco);
     1136                    /* Careful: autocommands may have made "vimbuf" invalid! */
     1137
    11271138                    update_curbuf(VALID);
    11281139                }
    11291140            }
     
    11381149    int         i;
    11391150    long        lnum;
    11401151    char        *line;
    1141     buf_T       *savebuf;
    11421152    PPCODE:
    11431153    if (buf_valid(vimbuf))
    11441154    {
     
    11511161            line = SvPV(ST(i),PL_na);
    11521162            if (lnum >= 0 && lnum <= vimbuf->b_ml.ml_line_count && line != NULL)
    11531163            {
    1154                 savebuf = curbuf;
    1155                 curbuf = vimbuf;
     1164                aco_save_T      aco;
     1165
     1166                /* set curwin/curbuf for "vimbuf" and save some things */
     1167                aucmd_prepbuf(&aco, vimbuf);
     1168
    11561169                if (u_inssub(lnum + 1) == OK)
    11571170                {
    11581171                    ml_append(lnum, (char_u *)line, (colnr_T)0, FALSE);
    11591172                    appended_lines_mark(lnum, 1L);
    11601173                }
    1161                 curbuf = savebuf;
     1174
     1175                /* restore curwin/curbuf and a few other things */
     1176                aucmd_restbuf(&aco);
     1177                /* Careful: autocommands may have made "vimbuf" invalid! */
     1178
    11621179                update_curbuf(VALID);
    11631180            }
    11641181        }
  • src/if_ruby.c

    diff -Naur vim70.orig/src/if_ruby.c vim70/src/if_ruby.c
    old new  
    643643
    644644static VALUE set_buffer_line(buf_T *buf, linenr_T n, VALUE str)
    645645{
    646     buf_T *savebuf = curbuf;
    647     char *line = STR2CSTR(str);
     646    char        *line = STR2CSTR(str);
     647    aco_save_T  aco;
     648
     649    if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL)
     650    {
     651        /* set curwin/curbuf for "buf" and save some things */
     652        aucmd_prepbuf(&aco, buf);
    648653
    649     if (n > 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
    650         curbuf = buf;
    651654        if (u_savesub(n) == OK) {
    652655            ml_replace(n, (char_u *)line, TRUE);
    653656            changed();
     
    655658            syn_changed(n); /* recompute syntax hl. for this line */
    656659#endif
    657660        }
    658         curbuf = savebuf;
     661
     662        /* restore curwin/curbuf and a few other things */
     663        aucmd_restbuf(&aco);
     664        /* Careful: autocommands may have made "buf" invalid! */
     665
    659666        update_curbuf(NOT_VALID);
    660667    }
    661     else {
     668    else
     669    {
    662670        rb_raise(rb_eIndexError, "index %d out of buffer", n);
    663671        return Qnil; /* For stop warning */
    664672    }
     
    676684
    677685static VALUE buffer_delete(VALUE self, VALUE num)
    678686{
    679     buf_T *buf = get_buf(self);
    680     buf_T *savebuf = curbuf;
    681     long n = NUM2LONG(num);
     687    buf_T       *buf = get_buf(self);
     688    long        n = NUM2LONG(num);
     689    aco_save_T  aco;
     690
     691    if (n > 0 && n <= buf->b_ml.ml_line_count)
     692    {
     693        /* set curwin/curbuf for "buf" and save some things */
     694        aucmd_prepbuf(&aco, buf);
    682695
    683     if (n > 0 && n <= buf->b_ml.ml_line_count) {
    684         curbuf = buf;
    685696        if (u_savedel(n, 1) == OK) {
    686697            ml_delete(n, 0);
    687698
     
    691702
    692703            changed();
    693704        }
    694         curbuf = savebuf;
     705
     706        /* restore curwin/curbuf and a few other things */
     707        aucmd_restbuf(&aco);
     708        /* Careful: autocommands may have made "buf" invalid! */
     709
    695710        update_curbuf(NOT_VALID);
    696711    }
    697     else {
     712    else
     713    {
    698714        rb_raise(rb_eIndexError, "index %d out of buffer", n);
    699715    }
    700716    return Qnil;
     
    702718
    703719static VALUE buffer_append(VALUE self, VALUE num, VALUE str)
    704720{
    705     buf_T *buf = get_buf(self);
    706     buf_T *savebuf = curbuf;
    707     char *line = STR2CSTR(str);
    708     long n = NUM2LONG(num);
     721    buf_T       *buf = get_buf(self);
     722    char        *line = STR2CSTR(str);
     723    long        n = NUM2LONG(num);
     724    aco_save_T  aco;
     725
     726    if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL)
     727    {
     728        /* set curwin/curbuf for "buf" and save some things */
     729        aucmd_prepbuf(&aco, buf);
    709730
    710     if (n >= 0 && n <= buf->b_ml.ml_line_count && line != NULL) {
    711         curbuf = buf;
    712731        if (u_inssub(n + 1) == OK) {
    713732            ml_append(n, (char_u *) line, (colnr_T) 0, FALSE);
    714733
     
    718737
    719738            changed();
    720739        }
    721         curbuf = savebuf;
     740
     741        /* restore curwin/curbuf and a few other things */
     742        aucmd_restbuf(&aco);
     743        /* Careful: autocommands may have made "buf" invalid! */
     744
    722745        update_curbuf(NOT_VALID);
    723746    }
    724747    else {
  • src/macros.h

    diff -Naur vim70.orig/src/macros.h vim70/src/macros.h
    old new  
    276276# define MB_CHARLEN(p)          STRLEN(p)
    277277# define PTR2CHAR(p)            ((int)*(p))
    278278#endif
     279
     280#ifdef FEAT_AUTOCHDIR
     281# define DO_AUTOCHDIR if (p_acd) do_autochdir();
     282#else
     283# define DO_AUTOCHDIR
     284#endif
  • src/main.c

    diff -Naur vim70.orig/src/main.c vim70/src/main.c
    old new  
    564564     */
    565565    if (p_lpl)
    566566    {
     567# ifdef VMS     /* Somehow VMS doesn't handle the "**". */
     568        source_runtime((char_u *)"plugin/*.vim", TRUE);
     569# else
    567570        source_runtime((char_u *)"plugin/**/*.vim", TRUE);
     571# endif
    568572        TIME_MSG("loading plugins");
    569573    }
    570574#endif
     
    11261130         */
    11271131        update_curswant();
    11281132
     1133#ifdef FEAT_EVAL
     1134        /*
     1135         * May perform garbage collection when waiting for a character, but
     1136         * only at the very toplevel.  Otherwise we may be using a List or
     1137         * Dict internally somewhere.
     1138         * "may_garbage_collect" is reset in vgetc() which is invoked through
     1139         * do_exmode() and normal_cmd().
     1140         */
     1141        may_garbage_collect = (!cmdwin && !noexmode);
     1142#endif
    11291143        /*
    11301144         * If we're invoked as ex, do a round of ex commands.
    11311145         * Otherwise, get and execute a normal mode command.
     
    22812295    mparm_T     *parmp;
    22822296{
    22832297#ifdef FEAT_WINDOWS
    2284     int         rewind;
     2298    int         dorewind;
    22852299    int         done = 0;
    22862300
    22872301    /*
     
    23382352        ++autocmd_no_leave;
    23392353#endif
    23402354#ifdef FEAT_WINDOWS
    2341         rewind = TRUE;
     2355        dorewind = TRUE;
    23422356        while (done++ < 1000)
    23432357        {
    2344             if (rewind)
     2358            if (dorewind)
    23452359            {
    23462360                if (parmp->window_layout == WIN_TABS)
    23472361                    goto_tabpage(1);
     
    23602374                    break;
    23612375                curwin = curwin->w_next;
    23622376            }
    2363             rewind = FALSE;
     2377            dorewind = FALSE;
    23642378#endif
    23652379            curbuf = curwin->w_buffer;
    23662380            if (curbuf->b_ml.ml_mfp == NULL)
     
    23812395                check_swap_exists_action();
    23822396#endif
    23832397#ifdef FEAT_AUTOCMD
    2384                 rewind = TRUE;          /* start again */
     2398                dorewind = TRUE;                /* start again */
    23852399#endif
    23862400            }
    23872401#ifdef FEAT_WINDOWS
     
    32083222     * Register for remote command execution with :serversend and --remote
    32093223     * unless there was a -X or a --servername '' on the command line.
    32103224     * Only register nongui-vim's with an explicit --servername argument.
     3225     * When running as root --servername is also required.
    32113226     */
    32123227    if (X_DISPLAY != NULL && parmp->servername != NULL && (
    32133228#  ifdef FEAT_GUI
    3214                 gui.in_use ||
     3229                (gui.in_use
     3230#   ifdef UNIX
     3231                 && getuid() != 0
     3232#   endif
     3233                ) ||
    32153234#  endif
    32163235                parmp->serverName_arg != NULL))
    32173236    {
  • src/Makefile

    diff -Naur vim70.orig/src/Makefile vim70/src/Makefile
    old new  
    21772177        cd $(SHADOWDIR)/xxd; ln -s ../../xxd/*.[ch] ../../xxd/Make* .
    21782178        if test -d $(RSRC_DIR); then \
    21792179                cd $(SHADOWDIR); \
     2180                ln -s ../infplist.xml .; \
    21802181                ln -s ../$(RSRC_DIR) ../os_mac.rsr.hqx ../dehqx.py .; \
    21812182        fi
    21822183        mkdir $(SHADOWDIR)/testdir
     
    22602261auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
    22612262        CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
    22622263
    2263 QUOTESED = sed -e 's/"/\\"/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
     2264QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
    22642265auto/pathdef.c: Makefile auto/config.mk
    22652266        -@echo creating $@
    22662267        -@echo '/* pathdef.c */' > $@
  • src/mbyte.c

    diff -Naur vim70.orig/src/mbyte.c vim70/src/mbyte.c
    old new  
    311311
    312312#define IDX_MACROMAN    57
    313313    {"macroman",        ENC_8BIT + ENC_MACROMAN, 0},    /* Mac OS */
    314 #define IDX_COUNT       58
     314#define IDX_DECMCS      58
     315    {"dec-mcs",         ENC_8BIT,               0},     /* DEC MCS */
     316#define IDX_HPROMAN8    59
     317    {"hp-roman8",       ENC_8BIT,               0},     /* HP Roman8 */
     318#define IDX_COUNT       60
    315319};
    316320
    317321/*
     
    359363    {"932",             IDX_CP932},
    360364    {"949",             IDX_CP949},
    361365    {"936",             IDX_CP936},
     366    {"gbk",             IDX_CP936},
     367    {"gb18030",         IDX_CP936},     /* only 99% the same */
    362368    {"950",             IDX_CP950},
    363369    {"eucjp",           IDX_EUC_JP},
    364370    {"unix-jis",        IDX_EUC_JP},
     
    386392    {"950",             IDX_BIG5},
    387393#endif
    388394    {"mac",             IDX_MACROMAN},
     395    {"mac-roman",       IDX_MACROMAN},
    389396    {NULL,              0}
    390397};
    391398
     
    35073514        add_to_input_buf(delkey, (int)sizeof(delkey));
    35083515}
    35093516
     3517/*
     3518 * Move the cursor left by "num_move_back" characters.
     3519 * Note that ins_left() checks im_is_preediting() to avoid breaking undo for
     3520 * these K_LEFT keys.
     3521 */
    35103522    static void
    35113523im_correct_cursor(int num_move_back)
    35123524{
     
    37343746    }
    37353747    else if (cursor_index == 0 && preedit_string[0] == '\0')
    37363748    {
    3737         if (preedit_start_col == MAXCOL)
    3738             xim_has_preediting = FALSE;
     3749        xim_has_preediting = FALSE;
    37393750
    37403751        /* If at the start position (after typing backspace)
    37413752         * preedit_start_col must be reset. */
     
    38503861
    38513862    if (preedit_string != NULL && attr_list != NULL)
    38523863    {
    3853         int index;
     3864        int idx;
    38543865
    38553866        /* Get the byte index as used by PangoAttrIterator */
    3856         for (index = 0; col > 0 && preedit_string[index] != '\0'; --col)
    3857             index += utfc_ptr2len((char_u *)preedit_string + index);
     3867        for (idx = 0; col > 0 && preedit_string[idx] != '\0'; --col)
     3868            idx += utfc_ptr2len((char_u *)preedit_string + idx);
    38583869
    3859         if (preedit_string[index] != '\0')
     3870        if (preedit_string[idx] != '\0')
    38603871        {
    38613872            PangoAttrIterator   *iter;
    38623873            int                 start, end;
     
    38693880            {
    38703881                pango_attr_iterator_range(iter, &start, &end);
    38713882
    3872                 if (index >= start && index < end)
     3883                if (idx >= start && idx < end)
    38733884                    char_attr |= translate_pango_attributes(iter);
    38743885            }
    38753886            while (pango_attr_iterator_next(iter));
  • src/memline.c

    diff -Naur vim70.orig/src/memline.c vim70/src/memline.c
    old new  
    215215#define ML_FLUSH        0x02        /* flush locked block */
    216216#define ML_SIMPLE(x)    (x & 0x10)  /* DEL, INS or FIND */
    217217
    218 static void ml_upd_block0 __ARGS((buf_T *buf, int setfname));
     218static void ml_upd_block0 __ARGS((buf_T *buf, int set_fname));
    219219static void set_b0_fname __ARGS((ZERO_BL *, buf_T *buf));
    220220static void set_b0_dir_flag __ARGS((ZERO_BL *b0p, buf_T *buf));
    221221#ifdef FEAT_MBYTE
     
    679679 * Update the timestamp or the B0_SAME_DIR flag of the .swp file.
    680680 */
    681681    static void
    682 ml_upd_block0(buf, setfname)
     682ml_upd_block0(buf, set_fname)
    683683    buf_T       *buf;
    684     int         setfname;
     684    int         set_fname;
    685685{
    686686    memfile_T   *mfp;
    687687    bhdr_T      *hp;
     
    695695        EMSG(_("E304: ml_upd_block0(): Didn't get block 0??"));
    696696    else
    697697    {
    698         if (setfname)
     698        if (set_fname)
    699699            set_b0_fname(b0p, buf);
    700700        else
    701701            set_b0_dir_flag(b0p, buf);
  • src/menu.c

    diff -Naur vim70.orig/src/menu.c vim70/src/menu.c
    old new  
    511511         * name (without mnemonic and accelerator text). */
    512512        next_name = menu_name_skip(name);
    513513        dname = menu_text(name, NULL, NULL);
     514        if (dname == NULL)
     515            goto erret;
     516        if (*dname == NUL)
     517        {
     518            /* Only a mnemonic or accelerator is not valid. */
     519            EMSG(_("E792: Empty menu name"));
     520            goto erret;
     521        }
    514522
    515523        /* See if it's already there */
    516524        lower_pri = menup;
     
    704712        parent = menu;
    705713        name = next_name;
    706714        vim_free(dname);
     715        dname = NULL;
    707716        if (pri_tab[pri_idx + 1] != -1)
    708717            ++pri_idx;
    709718    }
     
    793802erret:
    794803    vim_free(path_name);
    795804    vim_free(dname);
     805
     806    /* Delete any empty submenu we added before discovering the error.  Repeat
     807     * for higher levels. */
     808    while (parent != NULL && parent->children == NULL)
     809    {
     810        if (parent->parent == NULL)
     811            menup = &root_menu;
     812        else
     813            menup = &parent->parent->children;
     814        for ( ; *menup != NULL && *menup != parent; menup = &((*menup)->next))
     815            ;
     816        if (*menup == NULL) /* safety check */
     817            break;
     818        parent = parent->parent;
     819        free_menu(menup);
     820    }
    796821    return FAIL;
    797822}
    798823
     
    17531778}
    17541779
    17551780/*
     1781 * Check that a pointer appears in the menu tree.  Used to protect from using
     1782 * a menu that was deleted after it was selected but before the event was
     1783 * handled.
     1784 * Return OK or FAIL.  Used recursively.
     1785 */
     1786    int
     1787check_menu_pointer(root, menu_to_check)
     1788    vimmenu_T *root;
     1789    vimmenu_T *menu_to_check;
     1790{
     1791    vimmenu_T   *p;
     1792
     1793    for (p = root; p != NULL; p = p->next)
     1794        if (p == menu_to_check
     1795                || (p->children != NULL
     1796                    && check_menu_pointer(p->children, menu_to_check) == OK))
     1797            return OK;
     1798    return FAIL;
     1799}
     1800
     1801/*
    17561802 * After we have started the GUI, then we can create any menus that have been
    17571803 * defined.  This is done once here.  add_menu_path() may have already been
    17581804 * called to define these menus, and may be called again.  This function calls
  • src/message.c

    diff -Naur vim70.orig/src/message.c vim70/src/message.c
    old new  
    19251925             * If screen is completely filled and 'more' is set then wait
    19261926             * for a character.
    19271927             */
    1928             if (p_more && --lines_left == 0 && State != HITRETURN
     1928            --lines_left;
     1929            if (p_more && lines_left == 0 && State != HITRETURN
    19291930                                            && !msg_no_more && !exmode_active)
    19301931            {
    19311932#ifdef FEAT_CON_DIALOG
     
    41754176                        str_arg_l = 0;
    41764177                    else
    41774178                    {
    4178                         /* memchr on HP does not like n > 2^31  !!! */
    4179                         char *q = memchr(str_arg, '\0',
     4179                        /* Don't put the #if inside memchr(), it can be a
     4180                         * macro. */
    41804181#if SIZEOF_INT <= 2
    4181                                 precision
     4182                        char *q = memchr(str_arg, '\0', precision);
    41824183#else
    4183                                 precision <= (size_t)0x7fffffffL ? precision
    4184                                                        : (size_t)0x7fffffffL
     4184                        /* memchr on HP does not like n > 2^31  !!! */
     4185                        char *q = memchr(str_arg, '\0',
     4186                                  precision <= (size_t)0x7fffffffL ? precision
     4187                                                       : (size_t)0x7fffffffL);
    41854188#endif
    4186                                                        );
    41874189                        str_arg_l = (q == NULL) ? precision : q - str_arg;
    41884190                    }
    41894191                    break;
  • src/misc1.c

    diff -Naur vim70.orig/src/misc1.c vim70/src/misc1.c
    old new  
    30163016    int         len = 0;
    30173017    int         n;
    30183018    int         save_mapped_ctrl_c = mapped_ctrl_c;
     3019    int         waited = 0;
    30193020
    30203021    mapped_ctrl_c = FALSE;      /* mappings are not used here */
    30213022    for (;;)
     
    30343035            /* Replace zero and CSI by a special key code. */
    30353036            n = fix_input_buffer(buf + len, n, FALSE);
    30363037            len += n;
     3038            waited = 0;
    30373039        }
     3040        else if (len > 0)
     3041            ++waited;       /* keep track of the waiting time */
    30383042
    3039         /* incomplete termcode: get more characters */
    3040         if ((n = check_termcode(1, buf, len)) < 0)
     3043        /* Incomplete termcode and not timed out yet: get more characters */
     3044        if ((n = check_termcode(1, buf, len)) < 0
     3045               && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
    30413046            continue;
     3047
    30423048        /* found a termcode: adjust length */
    30433049        if (n > 0)
    30443050            len = n;
     
    31963202    else
    31973203        MSG_PUTS(_("Choice number (<Enter> cancels): "));
    31983204
    3199     /* Set the state such that text can be selected/copied/pasted. */
     3205    /* Set the state such that text can be selected/copied/pasted and we still
     3206     * get mouse events. */
    32003207    save_cmdline_row = cmdline_row;
    3201     cmdline_row = Rows - 1;
     3208    cmdline_row = 0;
    32023209    save_State = State;
    3203     if (mouse_used == NULL)
    3204         State = CMDLINE;
    3205     else
    3206         State = NORMAL;
     3210    State = CMDLINE;
    32073211
    32083212    i = get_number(TRUE, mouse_used);
    32093213    if (KeyTyped)
     
    44924496                int l = mb_ptr2len(s);
    44934497
    44944498                while (--l > 0)
    4495                     *d++ = *s++;
     4499                    *d++ = *++s;
    44964500            }
    44974501# endif
    44984502        }
     
    80708074                }
    80718075                if (*that == '"' && *(that + 1) != NUL)
    80728076                {
    8073                     that++;
    8074                     while (*that && (*that != '"' || *(that - 1) == '\\'))
    8075                         ++that;
     8077                    while (*++that && *that != '"')
     8078                    {
     8079                        /* skipping escaped characters in the string */
     8080                        if (*that == '\\')
     8081                        {
     8082                            if (*++that == NUL)
     8083                                break;
     8084                            if (that[1] == NUL)
     8085                            {
     8086                                ++that;
     8087                                break;
     8088                            }
     8089                        }
     8090                    }
    80768091                }
    80778092                if (*that == '(' || *that == '[')
    80788093                    ++parencount;
  • src/netbeans.c

    diff -Naur vim70.orig/src/netbeans.c vim70/src/netbeans.c
    old new  
    103103static int  inputHandler = -1;          /* simply ret.value of WSAAsyncSelect() */
    104104extern HWND s_hwnd;                     /* Gvim's Window handle */
    105105#endif
    106 static int cmdno;                       /* current command number for reply */
     106static int r_cmdno;                     /* current command number for reply */
    107107static int haveConnection = FALSE;      /* socket is connected and
    108108                                           initialization is done */
    109109#ifdef FEAT_GUI_MOTIF
     
    832832        return;
    833833    }
    834834
    835     cmdno = strtol(q, &q, 10);
     835    r_cmdno = strtol(q, &q, 10);
    836836
    837837    q = (char *)skipwhite((char_u *)q);
    838838
    839     if (nb_do_cmd(bufno, (char_u *)verb, isfunc, cmdno, (char_u *)q) == FAIL)
     839    if (nb_do_cmd(bufno, (char_u *)verb, isfunc, r_cmdno, (char_u *)q) == FAIL)
    840840    {
    841841#ifdef NBDEBUG
    842842        /*
     
    10081008        if (netbeansForcedQuit)
    10091009        {
    10101010            /* mark as unmodified so NetBeans won't put up dialog on "killed" */
    1011             sprintf(buf, "%d:unmodified=%d\n", i, cmdno);
     1011            sprintf(buf, "%d:unmodified=%d\n", i, r_cmdno);
    10121012            nbdebug(("EVT: %s", buf));
    10131013            nb_send(buf, "netbeans_end");
    10141014        }
    1015         sprintf(buf, "%d:killed=%d\n", i, cmdno);
     1015        sprintf(buf, "%d:killed=%d\n", i, r_cmdno);
    10161016        nbdebug(("EVT: %s", buf));
    10171017/*      nb_send(buf, "netbeans_end");    avoid "write failed" messages */
    10181018        if (sd >= 0)
     
    19861986            if (buf->bufp != NULL)
    19871987                do_buffer(DOBUF_WIPE, DOBUF_FIRST, FORWARD,
    19881988                                                     buf->bufp->b_fnum, TRUE);
     1989            buf->bufp = NULL;
     1990            buf->initDone = FALSE;
    19891991            doupdate = 1;
    19901992/* =====================================================================*/
    19911993        }
     
    25612563            if (p != NULL)
    25622564            {
    25632565                vim_snprintf(buf, sizeof(buf),
    2564                                        "0:balloonText=%d \"%s\"\n", cmdno, p);
     2566                                       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
    25652567                vim_free(p);
    25662568            }
    25672569            nbdebug(("EVT: %s", buf));
     
    26152617
    26162618    if (haveConnection)
    26172619    {
    2618         sprintf(buf, "0:disconnect=%d\n", cmdno);
     2620        sprintf(buf, "0:disconnect=%d\n", r_cmdno);
    26192621        nbdebug(("EVT: %s", buf));
    26202622        nb_send(buf, "netbeans_disconnect");
    26212623    }
     
    26342636        return;
    26352637
    26362638    sprintf(buf, "0:geometry=%d %d %d %d %d\n",
    2637                     cmdno, (int)Columns, (int)Rows, new_x, new_y);
     2639                    r_cmdno, (int)Columns, (int)Rows, new_x, new_y);
    26382640    /*nbdebug(("EVT: %s", buf)); happens too many times during a move */
    26392641    nb_send(buf, "netbeans_frame_moved");
    26402642}
     
    27432745    if (bufno <= 0)
    27442746        return;
    27452747
    2746     sprintf(buffer, "%d:killed=%d\n", bufno, cmdno);
     2748    sprintf(buffer, "%d:killed=%d\n", bufno, r_cmdno);
    27472749
    27482750    nbdebug(("EVT: %s", buffer));
    27492751
     
    28172819    if (p != NULL)
    28182820    {
    28192821        buf = alloc(128 + 2*newlen);
    2820         sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n", bufno, cmdno, off, p);
     2822        sprintf((char *)buf, "%d:insert=%d %ld \"%s\"\n",
     2823                                                      bufno, r_cmdno, off, p);
    28212824        nbdebug(("EVT: %s", buf));
    28222825        nb_send((char *)buf, "netbeans_inserted");
    28232826        vim_free(p);
     
    28592862
    28602863    off = pos2off(bufp, &pos);
    28612864
    2862     sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, cmdno, off, len);
     2865    sprintf((char *)buf, "%d:remove=%d %ld %ld\n", bufno, r_cmdno, off, len);
    28632866    nbdebug(("EVT: %s", buf));
    28642867    nb_send((char *)buf, "netbeans_removed");
    28652868}
     
    28842887
    28852888    nbbuf->modified = 0;
    28862889
    2887     sprintf((char *)buf, "%d:unmodified=%d\n", bufno, cmdno);
     2890    sprintf((char *)buf, "%d:unmodified=%d\n", bufno, r_cmdno);
    28882891    nbdebug(("EVT: %s", buf));
    28892892    nb_send((char *)buf, "netbeans_unmodified");
    28902893#endif
     
    29082911        long off = pos2off(curbuf, &curwin->w_cursor);
    29092912
    29102913        /* sync the cursor position */
    2911         sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
     2914        sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
    29122915        nbdebug(("EVT: %s", buf));
    29132916        nb_send(buf, "netbeans_button_release[newDotAndMark]");
    29142917
    2915         sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, cmdno,
     2918        sprintf(buf, "%d:buttonRelease=%d %d %ld %d\n", bufno, r_cmdno,
    29162919                                    button, (long)curwin->w_cursor.lnum, col);
    29172920        nbdebug(("EVT: %s", buf));
    29182921        nb_send(buf, "netbeans_button_release");
     
    29732976
    29742977    /* sync the cursor position */
    29752978    off = pos2off(curbuf, &curwin->w_cursor);
    2976     sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, cmdno, off, off);
     2979    sprintf(buf, "%d:newDotAndMark=%d %ld %ld\n", bufno, r_cmdno, off, off);
    29772980    nbdebug(("EVT: %s", buf));
    29782981    nb_send(buf, "netbeans_keycommand");
    29792982
     
    29842987
    29852988    /* now send keyCommand event */
    29862989    vim_snprintf(buf, sizeof(buf), "%d:keyCommand=%d \"%s\"\n",
    2987                                                        bufno, cmdno, keyName);
     2990                                                     bufno, r_cmdno, keyName);
    29882991    nbdebug(("EVT: %s", buf));
    29892992    nb_send(buf, "netbeans_keycommand");
    29902993
    29912994    /* New: do both at once and include the lnum/col. */
    29922995    vim_snprintf(buf, sizeof(buf), "%d:keyAtPos=%d \"%s\" %ld %ld/%ld\n",
    2993             bufno, cmdno, keyName,
     2996            bufno, r_cmdno, keyName,
    29942997                off, (long)curwin->w_cursor.lnum, (long)curwin->w_cursor.col);
    29952998    nbdebug(("EVT: %s", buf));
    29962999    nb_send(buf, "netbeans_keycommand");
     
    30133016
    30143017    nbbuf->modified = 0;
    30153018
    3016     sprintf((char *)buf, "%d:save=%d\n", bufno, cmdno);
     3019    sprintf((char *)buf, "%d:save=%d\n", bufno, r_cmdno);
    30173020    nbdebug(("EVT: %s", buf));
    30183021    nb_send((char *)buf, "netbeans_save_buffer");
    30193022}
     
    30373040    if (nbbuf->insertDone)
    30383041        nbbuf->modified = 1;
    30393042
    3040     sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, cmdno);
     3043    sprintf((char *)buf, "%d:remove=%d 0 -1\n", bufno, r_cmdno);
    30413044    nbdebug(("EVT(suppressed): %s", buf));
    30423045/*     nb_send(buf, "netbeans_deleted_all_lines"); */
    30433046}
  • src/normal.c

    diff -Naur vim70.orig/src/normal.c vim70/src/normal.c
    old new  
    25042504             * NOTE: Ignore right button down and drag mouse events.
    25052505             * Windows only shows the popup menu on the button up event.
    25062506             */
    2507 #if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON)
     2507#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_GTK) \
     2508                          || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
    25082509            if (!is_click)
    25092510                return FALSE;
    25102511#endif
     
    41264127    int         save_p_ws;
    41274128    int         save_p_scs;
    41284129    int         retval = OK;
    4129     int         incl;
     4130    int         incll;
    41304131
    41314132    if ((pat = alloc(len + 7)) == NULL)
    41324133        return FAIL;
     
    41464147     * With "gd" Search back for the start of the current function, then go
    41474148     * back until a blank line.  If this fails go to line 1.
    41484149     */
    4149     if (!locally || !findpar(&incl, BACKWARD, 1L, '{', FALSE))
     4150    if (!locally || !findpar(&incll, BACKWARD, 1L, '{', FALSE))
    41504151    {
    41514152        setpcmark();                    /* Set in findpar() otherwise */
    41524153        curwin->w_cursor.lnum = 1;
  • src/ops.c

    diff -Naur vim70.orig/src/ops.c vim70/src/ops.c
    old new  
    24132413        else
    24142414        {
    24152415            curwin->w_cursor = oap->end;
     2416            check_cursor_col();
    24162417
    24172418            /* Works just like an 'i'nsert on the next character. */
    24182419            if (!lineempty(curwin->w_cursor.lnum)
     
    34923493# endif
    34933494        if (flags & PUT_CURSEND)
    34943495        {
     3496            colnr_T len;
     3497
    34953498            curwin->w_cursor = curbuf->b_op_end;
    34963499            curwin->w_cursor.col++;
     3500
     3501            /* in Insert mode we might be after the NUL, correct for that */
     3502            len = (colnr_T)STRLEN(ml_get_curline());
     3503            if (curwin->w_cursor.col > len)
     3504                curwin->w_cursor.col = len;
    34973505        }
    34983506        else
    34993507            curwin->w_cursor.lnum = lnum;
  • src/option.c

    diff -Naur vim70.orig/src/option.c vim70/src/option.c
    old new  
    22942294                            {(char_u *)0L, (char_u *)0L}
    22952295#endif
    22962296                            },
    2297     {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE,
     2297    {"spellsuggest", "sps", P_STRING|P_VI_DEF|P_EXPAND|P_SECURE|P_COMMA,
    22982298#ifdef FEAT_SPELL
    22992299                            (char_u *)&p_sps, PV_NONE,
    23002300                            {(char_u *)"best", (char_u *)0L}
     
    52275227            case PV_STL:        return &curwin->w_p_stl_flags;
    52285228#endif
    52295229#ifdef FEAT_EVAL
     5230# ifdef FEAT_FOLDING
    52305231            case PV_FDE:        return &curwin->w_p_fde_flags;
    52315232            case PV_FDT:        return &curwin->w_p_fdt_flags;
     5233# endif
    52325234# ifdef FEAT_BEVAL
    52335235            case PV_BEXPR:      return &curbuf->b_p_bexpr_flags;
    52345236# endif
    5235 #endif
    5236 #if defined(FEAT_EVAL)
    52375237# if defined(FEAT_CINDENT)
    52385238            case PV_INDE:       return &curbuf->b_p_inde_flags;
    52395239# endif
     
    52685268    char_u      *s;
    52695269    char_u      **varp;
    52705270    int         both = (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0;
     5271    int         idx = opt_idx;
    52715272
    5272     if (opt_idx == -1)          /* use name */
     5273    if (idx == -1)              /* use name */
    52735274    {
    5274         opt_idx = findoption(name);
    5275         if (opt_idx < 0)        /* not found (should not happen) */
     5275        idx = findoption(name);
     5276        if (idx < 0)    /* not found (should not happen) */
    52765277        {
    52775278            EMSG2(_(e_intern2), "set_string_option_direct()");
    52785279            return;
    52795280        }
    52805281    }
    52815282
    5282     if (options[opt_idx].var == NULL)   /* can't set hidden option */
     5283    if (options[idx].var == NULL)       /* can't set hidden option */
    52835284        return;
    52845285
    52855286    s = vim_strsave(val);
    52865287    if (s != NULL)
    52875288    {
    5288         varp = (char_u **)get_varp_scope(&(options[opt_idx]),
     5289        varp = (char_u **)get_varp_scope(&(options[idx]),
    52895290                                               both ? OPT_LOCAL : opt_flags);
    5290         if ((opt_flags & OPT_FREE) && (options[opt_idx].flags & P_ALLOCED))
     5291        if ((opt_flags & OPT_FREE) && (options[idx].flags & P_ALLOCED))
    52915292            free_string_option(*varp);
    52925293        *varp = s;
    52935294
    52945295        /* For buffer/window local option may also set the global value. */
    52955296        if (both)
    5296             set_string_option_global(opt_idx, varp);
     5297            set_string_option_global(idx, varp);
    52975298
    5298         options[opt_idx].flags |= P_ALLOCED;
     5299        options[idx].flags |= P_ALLOCED;
    52995300
    53005301        /* When setting both values of a global option with a local value,
    53015302         * make the local value empty, so that the global value is used. */
    5302         if (((int)options[opt_idx].indir & PV_BOTH) && both)
     5303        if (((int)options[idx].indir & PV_BOTH) && both)
    53035304        {
    53045305            free_string_option(*varp);
    53055306            *varp = empty_option;
    53065307        }
    53075308# ifdef FEAT_EVAL
    53085309        if (set_sid != SID_NONE)
    5309             set_option_scriptID_idx(opt_idx, opt_flags,
     5310            set_option_scriptID_idx(idx, opt_flags,
    53105311                                        set_sid == 0 ? current_SID : set_sid);
    53115312# endif
    53125313    }
     
    63256326            else
    63266327                errmsg = check_stl_option(p_ruf);
    63276328        }
    6328         else
     6329        /* check 'statusline' only if it doesn't start with "%!" */
     6330        else if (varp != &p_stl || s[0] != '%' || s[1] != '!')
    63296331            errmsg = check_stl_option(s);
    63306332        if (varp == &p_ruf && errmsg == NULL)
    63316333            comp_col();
     
    73247326#ifdef FEAT_AUTOCHDIR
    73257327    else if ((int *)varp == &p_acd)
    73267328    {
    7327         if (p_acd && curbuf->b_ffname != NULL
    7328                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    7329             shorten_fnames(TRUE);
     7329        /* Change directories when the 'acd' option is set now. */
     7330        DO_AUTOCHDIR
    73307331    }
    73317332#endif
    73327333
  • src/os_unix.c

    diff -Naur vim70.orig/src/os_unix.c vim70/src/os_unix.c
    old new  
    39343934                    {
    39353935                        linenr_T    lnum = curbuf->b_op_start.lnum;
    39363936                        int         written = 0;
    3937                         char_u      *p = ml_get(lnum);
     3937                        char_u      *lp = ml_get(lnum);
    39383938                        char_u      *s;
    39393939                        size_t      l;
    39403940
     
    39423942                        close(fromshell_fd);
    39433943                        for (;;)
    39443944                        {
    3945                             l = STRLEN(p + written);
     3945                            l = STRLEN(lp + written);
    39463946                            if (l == 0)
    39473947                                len = 0;
    3948                             else if (p[written] == NL)
     3948                            else if (lp[written] == NL)
    39493949                                /* NL -> NUL translation */
    39503950                                len = write(toshell_fd, "", (size_t)1);
    39513951                            else
    39523952                            {
    3953                                 s = vim_strchr(p + written, NL);
    3954                                 len = write(toshell_fd, (char *)p + written,
    3955                                            s == NULL ? l : s - (p + written));
     3953                                s = vim_strchr(lp + written, NL);
     3954                                len = write(toshell_fd, (char *)lp + written,
     3955                                           s == NULL ? l : s - (lp + written));
    39563956                            }
    39573957                            if (len == l)
    39583958                            {
     
    39733973                                    toshell_fd = -1;
    39743974                                    break;
    39753975                                }
    3976                                 p = ml_get(lnum);
     3976                                lp = ml_get(lnum);
    39773977                                written = 0;
    39783978                            }
    39793979                            else if (len > 0)
     
    49714971                    if (((*file)[*num_file] = alloc(len + 2)) != NULL)
    49724972                    {
    49734973                        STRCPY((*file)[*num_file], p);
    4974                         if (!after_pathsep((*file)[*num_file] + len))
     4974                        if (!after_pathsep((*file)[*num_file],
     4975                                                    (*file)[*num_file] + len))
    49754976                        {
    49764977                            (*file)[*num_file][len] = psepc;
    49774978                            (*file)[*num_file][len + 1] = NUL;
     
    57575758    int         retval_int = 0;
    57585759    int         success = FALSE;
    57595760
    5760     /* Get a handle to the DLL module. */
     5761    /*
     5762     * Get a handle to the DLL module.
     5763     */
    57615764# if defined(USE_DLOPEN)
     5765    /* First clear any error, it's not cleared by the dlopen() call. */
     5766    (void)dlerror();
     5767
    57625768    hinstLib = dlopen((char *)libname, RTLD_LAZY
    57635769#  ifdef RTLD_LOCAL
    57645770            | RTLD_LOCAL
  • src/popupmnu.c

    diff -Naur vim70.orig/src/popupmnu.c vim70/src/popupmnu.c
    old new  
    552552{
    553553    pum_array = NULL;
    554554    redraw_all_later(SOME_VALID);
     555#ifdef FEAT_WINDOWS
     556    redraw_tabline = TRUE;
     557#endif
    555558    status_redraw_all();
    556559}
    557560
  • src/proto/buffer.pro

    diff -Naur vim70.orig/src/proto/buffer.pro vim70/src/proto/buffer.pro
    old new  
    1010extern int do_buffer __ARGS((int action, int start, int dir, int count, int forceit));
    1111extern void set_curbuf __ARGS((buf_T *buf, int action));
    1212extern void enter_buffer __ARGS((buf_T *buf));
     13extern void do_autochdir __ARGS((void));
    1314extern buf_T *buflist_new __ARGS((char_u *ffname, char_u *sfname, linenr_T lnum, int flags));
    1415extern void free_buf_options __ARGS((buf_T *buf, int free_p_ff));
    1516extern int buflist_getfile __ARGS((int n, linenr_T lnum, int options, int forceit));
  • src/proto/menu.pro

    diff -Naur vim70.orig/src/proto/menu.pro vim70/src/proto/menu.pro
    old new  
    1010extern int menu_is_child_of_popup __ARGS((vimmenu_T *menu));
    1111extern int menu_is_toolbar __ARGS((char_u *name));
    1212extern int menu_is_separator __ARGS((char_u *name));
     13extern int check_menu_pointer __ARGS((vimmenu_T *root, vimmenu_T *menu_to_check));
    1314extern void gui_create_initial_menus __ARGS((vimmenu_T *menu));
    1415extern void gui_update_menus __ARGS((int modes));
    1516extern int gui_is_menu_shortcut __ARGS((int key));
  • src/proto/undo.pro

    diff -Naur vim70.orig/src/proto/undo.pro vim70/src/proto/undo.pro
    old new  
    44extern int u_savesub __ARGS((linenr_T lnum));
    55extern int u_inssub __ARGS((linenr_T lnum));
    66extern int u_savedel __ARGS((linenr_T lnum, long nlines));
     7extern int undo_allowed __ARGS((void));
    78extern void u_undo __ARGS((int count));
    89extern void u_redo __ARGS((int count));
    910extern void undo_time __ARGS((long step, int sec, int absolute));
  • src/quickfix.c

    diff -Naur vim70.orig/src/quickfix.c vim70/src/quickfix.c
    old new  
    500500        {
    501501            if (tv != NULL)
    502502            {
    503                 int len;
    504 
    505503                if (tv->v_type == VAR_STRING)
    506504                {
    507505                    /* Get the next line from the supplied string */
     
    602600                else
    603601                    type = 0;
    604602                /*
    605                  * Extract error message data from matched line
     603                 * Extract error message data from matched line.
     604                 * We check for an actual submatch, because "\[" and "\]" in
     605                 * the 'errorformat' may cause the wrong submatch to be used.
    606606                 */
    607607                if ((i = (int)fmt_ptr->addr[0]) > 0)            /* %f */
    608608                {
    609                     int c = *regmatch.endp[i];
     609                    int c;
     610
     611                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     612                        continue;
    610613
    611614                    /* Expand ~/file and $HOME/file to full path. */
     615                    c = *regmatch.endp[i];
    612616                    *regmatch.endp[i] = NUL;
    613617                    expand_env(regmatch.startp[i], namebuf, CMDBUFFSIZE);
    614618                    *regmatch.endp[i] = c;
     
    618622                        continue;
    619623                }
    620624                if ((i = (int)fmt_ptr->addr[1]) > 0)            /* %n */
     625                {
     626                    if (regmatch.startp[i] == NULL)
     627                        continue;
    621628                    enr = (int)atol((char *)regmatch.startp[i]);
     629                }
    622630                if ((i = (int)fmt_ptr->addr[2]) > 0)            /* %l */
     631                {
     632                    if (regmatch.startp[i] == NULL)
     633                        continue;
    623634                    lnum = atol((char *)regmatch.startp[i]);
     635                }
    624636                if ((i = (int)fmt_ptr->addr[3]) > 0)            /* %c */
     637                {
     638                    if (regmatch.startp[i] == NULL)
     639                        continue;
    625640                    col = (int)atol((char *)regmatch.startp[i]);
     641                }
    626642                if ((i = (int)fmt_ptr->addr[4]) > 0)            /* %t */
     643                {
     644                    if (regmatch.startp[i] == NULL)
     645                        continue;
    627646                    type = *regmatch.startp[i];
     647                }
    628648                if (fmt_ptr->flags == '+' && !multiscan)        /* %+ */
    629649                    STRCPY(errmsg, IObuff);
    630650                else if ((i = (int)fmt_ptr->addr[5]) > 0)       /* %m */
    631651                {
     652                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     653                        continue;
    632654                    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
    633655                    vim_strncpy(errmsg, regmatch.startp[i], len);
    634656                }
    635657                if ((i = (int)fmt_ptr->addr[6]) > 0)            /* %r */
     658                {
     659                    if (regmatch.startp[i] == NULL)
     660                        continue;
    636661                    tail = regmatch.startp[i];
     662                }
    637663                if ((i = (int)fmt_ptr->addr[7]) > 0)            /* %p */
    638664                {
     665                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     666                        continue;
    639667                    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
    640668                    if (*((char_u *)regmatch.startp[i]) != TAB)
    641669                        use_viscol = TRUE;
    642670                }
    643671                if ((i = (int)fmt_ptr->addr[8]) > 0)            /* %v */
    644672                {
     673                    if (regmatch.startp[i] == NULL)
     674                        continue;
    645675                    col = (int)atol((char *)regmatch.startp[i]);
    646676                    use_viscol = TRUE;
    647677                }
    648678                if ((i = (int)fmt_ptr->addr[9]) > 0)            /* %s */
    649679                {
     680                    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
     681                        continue;
    650682                    len = (int)(regmatch.endp[i] - regmatch.startp[i]);
    651683                    if (len > CMDBUFFSIZE - 5)
    652684                        len = CMDBUFFSIZE - 5;
     
    24292461    qf_info_T   *qi;
    24302462{
    24312463    buf_T       *buf;
    2432 #ifdef FEAT_AUTOCMD
    24332464    aco_save_T  aco;
    2434 #else
    2435     buf_T       *save_curbuf;
    2436 #endif
    24372465
    24382466    /* Check if a buffer for the quickfix list exists.  Update it. */
    24392467    buf = qf_find_buf(qi);
    24402468    if (buf != NULL)
    24412469    {
    2442 #ifdef FEAT_AUTOCMD
    24432470        /* set curwin/curbuf to buf and save a few things */
    24442471        aucmd_prepbuf(&aco, buf);
    2445 #else
    2446         save_curbuf = curbuf;
    2447         curbuf = buf;
    2448 #endif
    24492472
    24502473        qf_fill_buffer(qi);
    24512474
    2452 #ifdef FEAT_AUTOCMD
    24532475        /* restore curwin/curbuf and a few other things */
    24542476        aucmd_restbuf(&aco);
    2455 #else
    2456         curbuf = save_curbuf;
    2457 #endif
    24582477
    24592478        (void)qf_win_pos_update(qi, 0);
    24602479    }
     
    29432962#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
    29442963    char_u      *save_ei = NULL;
    29452964#endif
    2946 #ifndef FEAT_AUTOCMD
    2947     buf_T       *save_curbuf;
    2948 #else
    29492965    aco_save_T  aco;
     2966#ifdef FEAT_AUTOCMD
    29502967    char_u      *au_name =  NULL;
    29512968    int         flags = 0;
    29522969    colnr_T     col;
     
    31673184                     * need to be done now, in that buffer.  And the modelines
    31683185                     * need to be done (again).  But not the window-local
    31693186                     * options! */
    3170 #if defined(FEAT_AUTOCMD)
    31713187                    aucmd_prepbuf(&aco, buf);
    3172 #else
    3173                     save_curbuf = curbuf;
    3174                     curbuf = buf;
    3175                     curwin->w_buffer = curbuf;
    3176 #endif
    31773188#if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
    31783189                    apply_autocmds(EVENT_FILETYPE, buf->b_p_ft,
    31793190                                                     buf->b_fname, TRUE, buf);
    31803191#endif
    31813192                    do_modelines(OPT_NOWIN);
    3182 #if defined(FEAT_AUTOCMD)
    31833193                    aucmd_restbuf(&aco);
    3184 #else
    3185                     curbuf = save_curbuf;
    3186                     curwin->w_buffer = curbuf;
    3187 #endif
    31883194                }
    31893195            }
    31903196        }
     
    32853291{
    32863292    buf_T       *newbuf;
    32873293    int         failed = TRUE;
    3288 #ifdef FEAT_AUTOCMD
    32893294    aco_save_T  aco;
    3290 #else
    3291     buf_T       *old_curbuf = curbuf;
    3292 #endif
    32933295
    32943296    /* Allocate a buffer without putting it in the buffer list. */
    32953297    newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
     
    32993301    /* Init the options. */
    33003302    buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
    33013303
    3302 #ifdef FEAT_AUTOCMD
    33033304    /* set curwin/curbuf to buf and save a few things */
    33043305    aucmd_prepbuf(&aco, newbuf);
    3305 #else
    3306     curbuf = newbuf;
    3307     curwin->w_buffer = newbuf;
    3308 #endif
    33093306
    33103307    /* Need to set the filename for autocommands. */
    33113308    (void)setfname(curbuf, fname, NULL, FALSE);
     
    33363333        }
    33373334    }
    33383335
    3339 #ifdef FEAT_AUTOCMD
    33403336    /* restore curwin/curbuf and a few other things */
    33413337    aucmd_restbuf(&aco);
    3342 #else
    3343     curbuf = old_curbuf;
    3344     curwin->w_buffer = old_curbuf;
    3345 #endif
    33463338
    33473339    if (!buf_valid(newbuf))
    33483340        return NULL;
     
    34343426          || dict_add_nr_str(dict, "col",   (long)qfp->qf_col, NULL) == FAIL
    34353427          || dict_add_nr_str(dict, "vcol",  (long)qfp->qf_viscol, NULL) == FAIL
    34363428          || dict_add_nr_str(dict, "nr",    (long)qfp->qf_nr, NULL) == FAIL
    3437           || dict_add_nr_str(dict, "pattern",  0L, qfp->qf_pattern) == FAIL
    3438           || dict_add_nr_str(dict, "text",  0L, qfp->qf_text) == FAIL
     3429          || dict_add_nr_str(dict, "pattern",  0L,
     3430             qfp->qf_pattern == NULL ? (char_u *)"" : qfp->qf_pattern) == FAIL
     3431          || dict_add_nr_str(dict, "text",  0L,
     3432                   qfp->qf_text == NULL ? (char_u *)"" : qfp->qf_text) == FAIL
    34393433          || dict_add_nr_str(dict, "type",  0L, buf) == FAIL
    34403434          || dict_add_nr_str(dict, "valid", (long)qfp->qf_valid, NULL) == FAIL)
    34413435            return FAIL;
  • src/regexp.c

    diff -Naur vim70.orig/src/regexp.c vim70/src/regexp.c
    old new  
    39123912                {
    39133913                    colnr_T         start, end;
    39143914                    colnr_T         start2, end2;
    3915                     colnr_T         col;
     3915                    colnr_T         cols;
    39163916
    39173917                    getvvcol(wp, &top, &start, NULL, &end);
    39183918                    getvvcol(wp, &bot, &start2, NULL, &end2);
     
    39223922                        end = end2;
    39233923                    if (top.col == MAXCOL || bot.col == MAXCOL)
    39243924                        end = MAXCOL;
    3925                     col = win_linetabsize(wp,
     3925                    cols = win_linetabsize(wp,
    39263926                                      regline, (colnr_T)(reginput - regline));
    3927                     if (col < start || col > end - (*p_sel == 'e'))
     3927                    if (cols < start || cols > end - (*p_sel == 'e'))
    39283928                        status = RA_NOMATCH;
    39293929                }
    39303930            }
     
    42534253            {
    42544254                int     i, len;
    42554255                char_u  *opnd;
    4256                 int     opndc, inpc;
     4256                int     opndc = 0, inpc;
    42574257
    42584258                opnd = OPERAND(scan);
    42594259                /* Safety check (just in case 'encoding' was changed since
  • src/screen.c

    diff -Naur vim70.orig/src/screen.c vim70/src/screen.c
    old new  
    12281228        {
    12291229            mid_end = wp->w_height;
    12301230            if (lastwin == firstwin)
     1231            {
    12311232                screenclear();
     1233#ifdef FEAT_WINDOWS
     1234                /* The screen was cleared, redraw the tab pages line. */
     1235                if (redraw_tabline)
     1236                    draw_tabline();
     1237#endif
     1238            }
    12321239        }
    12331240    }
    12341241    else
     
    26122619#ifdef FEAT_LINEBREAK
    26132620    int         need_showbreak = FALSE;
    26142621#endif
    2615 #if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS))
     2622#if defined(FEAT_SIGNS) || (defined(FEAT_QUICKFIX) && defined(FEAT_WINDOWS)) \
     2623        || defined(FEAT_SYN_HL) || defined(FEAT_DIFF)
    26162624# define LINE_ATTR
    26172625    int         line_attr = 0;          /* atrribute for the whole line */
    26182626#endif
     
    26262634    int         prev_c = 0;             /* previous Arabic character */
    26272635    int         prev_c1 = 0;            /* first composing char for prev_c */
    26282636#endif
    2629 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     2637#if defined(LINE_ATTR)
    26302638    int         did_line_attr = 0;
    26312639#endif
    26322640
     
    41164124                    --ptr;          /* put it back at the NUL */
    41174125                }
    41184126#endif
    4119 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4127#if defined(LINE_ATTR)
    41204128                else if ((
    41214129# ifdef FEAT_DIFF
    4122                             diff_hlf != (hlf_T)0
    4123 #  ifdef LINE_ATTR
    4124                             ||
    4125 #  endif
     4130                            diff_hlf != (hlf_T)0 ||
    41264131# endif
    4127 # ifdef LINE_ATTR
    41284132                            line_attr != 0
    4129 # endif
    41304133                        ) && (
    41314134# ifdef FEAT_RIGHTLEFT
    41324135                            wp->w_p_rl ? (col >= 0) :
     
    42374240         * At end of the text line or just after the last character.
    42384241         */
    42394242        if (c == NUL
    4240 #if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4243#if defined(LINE_ATTR)
    42414244                || did_line_attr == 1
    42424245#endif
    42434246                )
     
    42584261                                || prevcol == (long)match_hl[0].startcol
    42594262                                || prevcol == (long)match_hl[1].startcol
    42604263                                || prevcol == (long)match_hl[2].startcol)
    4261 # if defined(FEAT_DIFF) || defined(LINE_ATTR)
     4264# if defined(LINE_ATTR)
    42624265                            && did_line_attr <= 1
    42634266# endif
    42644267                           )
     
    71037106    tabpage_T       *tp;
    71047107#endif
    71057108    static int      entered = FALSE;            /* avoid recursiveness */
    7106     static int      did_outofmem_msg = FALSE;   /* did outofmem message */
     7109    static int      done_outofmem_msg = FALSE;  /* did outofmem message */
    71077110
    71087111    /*
    71097112     * Allocation of the screen buffers is done only when the size changes and
     
    71337136        return;
    71347137    entered = TRUE;
    71357138
     7139    /*
     7140     * Note that the window sizes are updated before reallocating the arrays,
     7141     * thus we must not redraw here!
     7142     */
     7143    ++RedrawingDisabled;
     7144
    71367145    win_new_shellsize();    /* fit the windows in the new sized shell */
    71377146
    71387147    comp_col();         /* recompute columns for shown command and ruler */
     
    72057214#endif
    72067215            || outofmem)
    72077216    {
    7208         if (ScreenLines != NULL || !did_outofmem_msg)
     7217        if (ScreenLines != NULL || !done_outofmem_msg)
    72097218        {
    72107219            /* guess the size */
    72117220            do_outofmem_msg((long_u)((Rows + 1) * Columns));
    72127221
    72137222            /* Remember we did this to avoid getting outofmem messages over
    72147223             * and over again. */
    7215             did_outofmem_msg = TRUE;
     7224            done_outofmem_msg = TRUE;
    72167225        }
    72177226        vim_free(new_ScreenLines);
    72187227        new_ScreenLines = NULL;
     
    72407249    }
    72417250    else
    72427251    {
    7243         did_outofmem_msg = FALSE;
     7252        done_outofmem_msg = FALSE;
    72447253
    72457254        for (new_row = 0; new_row < Rows; ++new_row)
    72467255        {
     
    73677376#endif
    73687377
    73697378    entered = FALSE;
     7379    --RedrawingDisabled;
    73707380
    73717381#ifdef FEAT_AUTOCMD
    73727382    if (starting == 0)
  • src/search.c

    diff -Naur vim70.orig/src/search.c vim70/src/search.c
    old new  
    12591259        /*
    12601260         * Add character and/or line offset
    12611261         */
    1262         if (!(options & SEARCH_NOOF) || *pat == ';')
     1262        if (!(options & SEARCH_NOOF) || (pat != NULL && *pat == ';'))
    12631263        {
    12641264            if (spats[0].off.line)      /* Add the offset to the line number. */
    12651265            {
     
    48264826
    48274827                if ((compl_cont_status & CONT_ADDING) && i == compl_length)
    48284828                {
    4829                     /* get the next line */
    48304829                    /* IOSIZE > compl_length, so the STRNCPY works */
    48314830                    STRNCPY(IObuff, aux, i);
    4832                     if (!(     depth < 0
    4833                             && lnum < end_lnum
    4834                             && (line = ml_get(++lnum)) != NULL)
    4835                         && !(   depth >= 0
    4836                             && !vim_fgets(line = file_line,
    4837                                                      LSIZE, files[depth].fp)))
     4831
     4832                    /* Get the next line: when "depth" < 0  from the current
     4833                     * buffer, otherwise from the included file.  Jump to
     4834                     * exit_matched when past the last line. */
     4835                    if (depth < 0)
     4836                    {
     4837                        if (lnum >= end_lnum)
     4838                            goto exit_matched;
     4839                        line = ml_get(++lnum);
     4840                    }
     4841                    else if (vim_fgets(line = file_line,
     4842                                                      LSIZE, files[depth].fp))
    48384843                        goto exit_matched;
    48394844
    48404845                    /* we read a line, set "already" to check this "line" later
     
    48714876                        goto exit_matched;
    48724877                }
    48734878
    4874                 add_r = ins_compl_add_infercase(aux, i, FALSE,
     4879                add_r = ins_compl_add_infercase(aux, i, p_ic,
    48754880                        curr_fname == curbuf->b_fname ? NULL : curr_fname,
    48764881                        dir, reuse);
    48774882                if (add_r == OK)
  • src/spell.c

    diff -Naur vim70.orig/src/spell.c vim70/src/spell.c
    old new  
    14831483            else if ((mode == FIND_COMPOUND || mode == FIND_KEEPCOMPOUND
    14841484                                                                || !word_ends))
    14851485            {
    1486                 /* If there is no flag or the word is shorter than
     1486                /* If there is no compound flag or the word is shorter than
    14871487                 * COMPOUNDMIN reject it quickly.
    14881488                 * Makes you wonder why someone puts a compound flag on a word
    14891489                 * that's too short...  Myspell compatibility requires this
     
    20432043    int         len;
    20442044# ifdef FEAT_SYN_HL
    20452045    int         has_syntax = syntax_present(wp->w_buffer);
    2046     int         col;
    20472046# endif
     2047    int         col;
    20482048    int         can_spell;
    20492049    char_u      *buf = NULL;
    20502050    int         buflen = 0;
     
    20932093            capcol = (int)(skipwhite(line) - line);
    20942094        else if (curline && wp == curwin)
    20952095        {
    2096             int     col = (int)(skipwhite(line) - line);
    2097 
    20982096            /* For spellbadword(): check if first word needs a capital. */
     2097            col = (int)(skipwhite(line) - line);
    20992098            if (check_need_cap(lnum, col))
    21002099                capcol = col;
    21012100
     
    21082107         * possible. */
    21092108        STRCPY(buf, line);
    21102109        if (lnum < wp->w_buffer->b_ml.ml_line_count)
    2111             spell_cat_line(buf + STRLEN(buf), ml_get(lnum + 1), MAXWLEN);
     2110            spell_cat_line(buf + STRLEN(buf),
     2111                          ml_get_buf(wp->w_buffer, lnum + 1, FALSE), MAXWLEN);
    21122112
    21132113        p = buf + skip;
    21142114        endp = buf + len;
     
    50605060    int         do_rep;
    50615061    int         do_repsal;
    50625062    int         do_sal;
    5063     int         do_map;
     5063    int         do_mapline;
    50645064    int         found_map = FALSE;
    50655065    hashitem_T  *hi;
    50665066    int         l;
     
    50985098    do_sal = spin->si_sal.ga_len == 0;
    50995099
    51005100    /* Only do MAP lines when not done in another .aff file already. */
    5101     do_map = spin->si_map.ga_len == 0;
     5101    do_mapline = spin->si_map.ga_len == 0;
    51025102
    51035103    /*
    51045104     * Allocate and init the afffile_T structure.
     
    57805780                        smsg((char_u *)_("Expected MAP count in %s line %d"),
    57815781                                                                 fname, lnum);
    57825782                }
    5783                 else if (do_map)
     5783                else if (do_mapline)
    57845784                {
    57855785                    int         c;
    57865786
     
    75077507{
    75087508    char_u      *p = p_msm;
    75097509    long        start = 0;
    7510     long        inc = 0;
     7510    long        incr = 0;
    75117511    long        added = 0;
    75127512
    75137513    if (!VIM_ISDIGIT(*p))
     
    75197519    ++p;
    75207520    if (!VIM_ISDIGIT(*p))
    75217521        return FAIL;
    7522     inc = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
     7522    incr = (getdigits(&p) * 102) / (SBLOCKSIZE / 10);
    75237523    if (*p != ',')
    75247524        return FAIL;
    75257525    ++p;
     
    75297529    if (*p != NUL)
    75307530        return FAIL;
    75317531
    7532     if (start == 0 || inc == 0 || added == 0 || inc > start)
     7532    if (start == 0 || incr == 0 || added == 0 || incr > start)
    75337533        return FAIL;
    75347534
    75357535    compress_start = start;
    7536     compress_inc = inc;
     7536    compress_inc = incr;
    75377537    compress_added = added;
    75387538    return OK;
    75397539}
     
    82918291 * Returns the number of nodes used.
    82928292 */
    82938293    static int
    8294 put_node(fd, node, index, regionmask, prefixtree)
     8294put_node(fd, node, idx, regionmask, prefixtree)
    82958295    FILE        *fd;            /* NULL when only counting */
    82968296    wordnode_T  *node;
    8297     int         index;
     8297    int         idx;
    82988298    int         regionmask;
    82998299    int         prefixtree;     /* TRUE for PREFIXTREE */
    83008300{
    8301     int         newindex = index;
     8301    int         newindex = idx;
    83028302    int         siblingcount = 0;
    83038303    wordnode_T  *np;
    83048304    int         flags;
     
    83088308        return 0;
    83098309
    83108310    /* Store the index where this node is written. */
    8311     node->wn_u1.index = index;
     8311    node->wn_u1.index = idx;
    83128312
    83138313    /* Count the number of siblings. */
    83148314    for (np = node; np != NULL; np = np->wn_sibling)
     
    92439243 * Add "word[len]" to 'spellfile' as a good or bad word.
    92449244 */
    92459245    void
    9246 spell_add_word(word, len, bad, index, undo)
     9246spell_add_word(word, len, bad, idx, undo)
    92479247    char_u      *word;
    92489248    int         len;
    92499249    int         bad;
    9250     int         index;      /* "zG" and "zW": zero, otherwise index in
     9250    int         idx;        /* "zG" and "zW": zero, otherwise index in
    92519251                               'spellfile' */
    92529252    int         undo;       /* TRUE for "zug", "zuG", "zuw" and "zuW" */
    92539253{
    9254     FILE        *fd;
     9254    FILE        *fd = NULL;
    92559255    buf_T       *buf = NULL;
    92569256    int         new_spf = FALSE;
    92579257    char_u      *fname;
     
    92619261    int         i;
    92629262    char_u      *spf;
    92639263
    9264     if (index == 0)         /* use internal wordlist */
     9264    if (idx == 0)           /* use internal wordlist */
    92659265    {
    92669266        if (int_wordlist == NULL)
    92679267        {
     
    92899289        for (spf = curbuf->b_p_spf, i = 1; *spf != NUL; ++i)
    92909290        {
    92919291            copy_option_part(&spf, fnamebuf, MAXPATHL, ",");
    9292             if (i == index)
     9292            if (i == idx)
    92939293                break;
    92949294            if (*spf == NUL)
    92959295            {
    9296                 EMSGN(_("E765: 'spellfile' does not have %ld entries"), index);
     9296                EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
    92979297                return;
    92989298            }
    92999299        }
     
    93369336                    {
    93379337                        fputc('#', fd);
    93389338                        if (undo)
     9339                        {
     9340                            home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE);
    93399341                            smsg((char_u *)_("Word removed from %s"), NameBuff);
     9342                        }
    93409343                    }
    93419344                    fseek(fd, fpos_next, SEEK_SET);
    93429345                }
     
    93449347            fclose(fd);
    93459348        }
    93469349    }
    9347     else
     9350
     9351    if (!undo)
    93489352    {
    93499353        fd = mch_fopen((char *)fname, "a");
    93509354        if (fd == NULL && new_spf)
    93519355        {
     9356            char_u *p;
     9357
    93529358            /* We just initialized the 'spellfile' option and can't open the
    93539359             * file.  We may need to create the "spell" directory first.  We
    93549360             * already checked the runtime directory is writable in
    93559361             * init_spellfile(). */
    9356             if (!dir_of_file_exists(fname))
     9362            if (!dir_of_file_exists(fname) && (p = gettail_sep(fname)) != fname)
    93579363            {
     9364                int c = *p;
     9365
    93589366                /* The directory doesn't exist.  Try creating it and opening
    93599367                 * the file again. */
    9360                 vim_mkdir(NameBuff, 0755);
     9368                *p = NUL;
     9369                vim_mkdir(fname, 0755);
     9370                *p = c;
    93619371                fd = mch_fopen((char *)fname, "a");
    93629372            }
    93639373        }
     
    1007010080
    1007110081        /* List the suggestions. */
    1007210082        msg_start();
     10083        msg_row = Rows - 1;     /* for when 'cmdheight' > 1 */
    1007310084        lines_left = Rows;      /* avoid more prompt */
    1007410085        vim_snprintf((char *)IObuff, IOSIZE, _("Change \"%.*s\" to:"),
    1007510086                                                sug.su_badlen, sug.su_badptr);
     
    1357913590         * the first "the" to itself. */
    1358013591        return;
    1358113592
    13582     /* Check if the word is already there.  Also check the length that is
    13583      * being replaced "thes," -> "these" is a different suggestion from
    13584      * "thes" -> "these". */
    13585     stp = &SUG(*gap, 0);
    13586     for (i = gap->ga_len; --i >= 0; ++stp)
    13587         if (stp->st_wordlen == goodlen
    13588                 && stp->st_orglen == badlen
    13589                 && STRNCMP(stp->st_word, goodword, goodlen) == 0)
    13590         {
    13591             /*
    13592              * Found it.  Remember the word with the lowest score.
    13593              */
    13594             if (stp->st_slang == NULL)
    13595                 stp->st_slang = slang;
     13593    if (gap->ga_len == 0)
     13594        i = -1;
     13595    else
     13596    {
     13597        /* Check if the word is already there.  Also check the length that is
     13598         * being replaced "thes," -> "these" is a different suggestion from
     13599         * "thes" -> "these". */
     13600        stp = &SUG(*gap, 0);
     13601        for (i = gap->ga_len; --i >= 0; ++stp)
     13602            if (stp->st_wordlen == goodlen
     13603                    && stp->st_orglen == badlen
     13604                    && STRNCMP(stp->st_word, goodword, goodlen) == 0)
     13605            {
     13606                /*
     13607                 * Found it.  Remember the word with the lowest score.
     13608                 */
     13609                if (stp->st_slang == NULL)
     13610                    stp->st_slang = slang;
    1359613611
    13597             new_sug.st_score = score;
    13598             new_sug.st_altscore = altscore;
    13599             new_sug.st_had_bonus = had_bonus;
     13612                new_sug.st_score = score;
     13613                new_sug.st_altscore = altscore;
     13614                new_sug.st_had_bonus = had_bonus;
     13615
     13616                if (stp->st_had_bonus != had_bonus)
     13617                {
     13618                    /* Only one of the two had the soundalike score computed.
     13619                     * Need to do that for the other one now, otherwise the
     13620                     * scores can't be compared.  This happens because
     13621                     * suggest_try_change() doesn't compute the soundalike
     13622                     * word to keep it fast, while some special methods set
     13623                     * the soundalike score to zero. */
     13624                    if (had_bonus)
     13625                        rescore_one(su, stp);
     13626                    else
     13627                    {
     13628                        new_sug.st_word = stp->st_word;
     13629                        new_sug.st_wordlen = stp->st_wordlen;
     13630                        new_sug.st_slang = stp->st_slang;
     13631                        new_sug.st_orglen = badlen;
     13632                        rescore_one(su, &new_sug);
     13633                    }
     13634                }
    1360013635
    13601             if (stp->st_had_bonus != had_bonus)
    13602             {
    13603                 /* Only one of the two had the soundalike score computed.
    13604                  * Need to do that for the other one now, otherwise the
    13605                  * scores can't be compared.  This happens because
    13606                  * suggest_try_change() doesn't compute the soundalike
    13607                  * word to keep it fast, while some special methods set
    13608                  * the soundalike score to zero. */
    13609                 if (had_bonus)
    13610                     rescore_one(su, stp);
    13611                 else
     13636                if (stp->st_score > new_sug.st_score)
    1361213637                {
    13613                     new_sug.st_word = stp->st_word;
    13614                     new_sug.st_wordlen = stp->st_wordlen;
    13615                     new_sug.st_slang = stp->st_slang;
    13616                     new_sug.st_orglen = badlen;
    13617                     rescore_one(su, &new_sug);
     13638                    stp->st_score = new_sug.st_score;
     13639                    stp->st_altscore = new_sug.st_altscore;
     13640                    stp->st_had_bonus = new_sug.st_had_bonus;
    1361813641                }
     13642                break;
    1361913643            }
    13620 
    13621             if (stp->st_score > new_sug.st_score)
    13622             {
    13623                 stp->st_score = new_sug.st_score;
    13624                 stp->st_altscore = new_sug.st_altscore;
    13625                 stp->st_had_bonus = new_sug.st_had_bonus;
    13626             }
    13627             break;
    13628         }
     13644    }
    1362913645
    1363013646    if (i < 0 && ga_grow(gap, 1) == OK)
    1363113647    {
     
    1565615672                    ? MB_STRNICMP(p, pat, STRLEN(pat)) == 0
    1565715673                    : STRNCMP(p, pat, STRLEN(pat)) == 0)
    1565815674                && ins_compl_add_infercase(p, (int)STRLEN(p),
    15659                                           FALSE, NULL, *dir, 0) == OK)
     15675                                          p_ic, NULL, *dir, 0) == OK)
    1566015676        /* if dir was BACKWARD then honor it just once */
    1566115677        *dir = FORWARD;
    1566215678}
  • src/structs.h

    diff -Naur vim70.orig/src/structs.h vim70/src/structs.h
    old new  
    22132213
    22142214/*
    22152215 * Struct to save values in before executing autocommands for a buffer that is
    2216  * not the current buffer.
     2216 * not the current buffer.  Without FEAT_AUTOCMD only "curbuf" is remembered.
    22172217 */
    22182218typedef struct
    22192219{
    22202220    buf_T       *save_buf;      /* saved curbuf */
     2221#ifdef FEAT_AUTOCMD
    22212222    buf_T       *new_curbuf;    /* buffer to be used */
    22222223    win_T       *save_curwin;   /* saved curwin, NULL if it didn't change */
    22232224    win_T       *new_curwin;    /* new curwin if save_curwin != NULL */
    22242225    pos_T       save_cursor;    /* saved cursor pos of save_curwin */
    22252226    linenr_T    save_topline;   /* saved topline of save_curwin */
    2226 #ifdef FEAT_DIFF
     2227# ifdef FEAT_DIFF
    22272228    int         save_topfill;   /* saved topfill of save_curwin */
     2229# endif
    22282230#endif
    22292231} aco_save_T;
    22302232
  • src/tag.c

    diff -Naur vim70.orig/src/tag.c vim70/src/tag.c
    old new  
    37873787{
    37883788    int         num_matches, i, ret;
    37893789    char_u      **matches, *p;
     3790    char_u      *full_fname;
    37903791    dict_T      *dict;
    37913792    tagptrs_T   tp;
    37923793    long        is_static;
     
    38093810            if (list_append_dict(list, dict) == FAIL)
    38103811                ret = FAIL;
    38113812
     3813            full_fname = tag_full_fname(&tp);
    38123814            if (add_tag_field(dict, "name", tp.tagname, tp.tagname_end) == FAIL
    3813                     || add_tag_field(dict, "filename", tp.fname,
    3814                                                          tp.fname_end) == FAIL
     3815                    || add_tag_field(dict, "filename", full_fname,
     3816                                                         NULL) == FAIL
    38153817                    || add_tag_field(dict, "cmd", tp.command,
    38163818                                                       tp.command_end) == FAIL
    38173819                    || add_tag_field(dict, "kind", tp.tagkind,
     
    38193821                    || dict_add_nr_str(dict, "static", is_static, NULL) == FAIL)
    38203822                ret = FAIL;
    38213823
     3824            vim_free(full_fname);
     3825
    38223826            if (tp.command_end != NULL)
    38233827            {
    38243828                for (p = tp.command_end + 3;
  • src/term.c

    diff -Naur vim70.orig/src/term.c vim70/src/term.c
    old new  
    47834783                return -1;
    47844784            current_menu = (vimmenu_T *)val;
    47854785            slen += num_bytes;
     4786
     4787            /* The menu may have been deleted right after it was used, check
     4788             * for that. */
     4789            if (check_menu_pointer(root_menu, current_menu) == FAIL)
     4790            {
     4791                key_name[0] = KS_EXTRA;
     4792                key_name[1] = (int)KE_IGNORE;
     4793            }
    47864794        }
    47874795# endif
    47884796# ifdef FEAT_GUI_TABLINE
  • src/testdir/test56.in

    diff -Naur vim70.orig/src/testdir/test56.in vim70/src/testdir/test56.in
    old new  
    33STARTTEST
    44:so small.vim
    55:"
    6 :set nocp
     6:set nocp viminfo+=nviminfo
    77:/^start:/+1,/^end:/-1w! Xtest.vim
    88:source Xtest.vim
    99_x
  • src/ui.c

    diff -Naur vim70.orig/src/ui.c vim70/src/ui.c
    old new  
    11371137    int         len;
    11381138#ifdef FEAT_MBYTE
    11391139    char_u      *p;
    1140     int         i;
    11411140#endif
    11421141    int         row1 = clip_star.start.lnum;
    11431142    int         col1 = clip_star.start.col;
     
    12181217#ifdef FEAT_MBYTE
    12191218            if (enc_dbcs != 0)
    12201219            {
     1220                int     i;
     1221
    12211222                p = ScreenLines + LineOffset[row];
    12221223                for (i = start_col; i < end_col; ++i)
    12231224                    if (enc_dbcs == DBCS_JPNU && p[i] == 0x8e)
  • src/undo.c

    diff -Naur vim70.orig/src/undo.c vim70/src/undo.c
    old new  
    8484static void u_unch_branch __ARGS((u_header_T *uhp));
    8585static u_entry_T *u_get_headentry __ARGS((void));
    8686static void u_getbot __ARGS((void));
    87 static int undo_allowed __ARGS((void));
    8887static int u_savecommon __ARGS((linenr_T, linenr_T, linenr_T));
    8988static void u_doit __ARGS((int count));
    9089static void u_undoredo __ARGS((int undo));
     
    196195 * Return TRUE when undo is allowed.  Otherwise give an error message and
    197196 * return FALSE.
    198197 */
    199     static int
     198    int
    200199undo_allowed()
    201200{
    202201    /* Don't allow changes when 'modifiable' is off.  */
     
    11881187    int         did_undo;       /* just did an undo */
    11891188    int         absolute;       /* used ":undo N" */
    11901189{
    1191     char        *msg;
     1190    char        *msgstr;
    11921191    u_header_T  *uhp;
    11931192    char_u      msgbuf[80];
    11941193
     
    12061205
    12071206    u_oldcount -= u_newcount;
    12081207    if (u_oldcount == -1)
    1209         msg = N_("more line");
     1208        msgstr = N_("more line");
    12101209    else if (u_oldcount < 0)
    1211         msg = N_("more lines");
     1210        msgstr = N_("more lines");
    12121211    else if (u_oldcount == 1)
    1213         msg = N_("line less");
     1212        msgstr = N_("line less");
    12141213    else if (u_oldcount > 1)
    1215         msg = N_("fewer lines");
     1214        msgstr = N_("fewer lines");
    12161215    else
    12171216    {
    12181217        u_oldcount = u_newcount;
    12191218        if (u_newcount == 1)
    1220             msg = N_("change");
     1219            msgstr = N_("change");
    12211220        else
    1222             msg = N_("changes");
     1221            msgstr = N_("changes");
    12231222    }
    12241223
    12251224    if (curbuf->b_u_curhead != NULL)
     
    12451244
    12461245    smsg((char_u *)_("%ld %s; %s #%ld  %s"),
    12471246            u_oldcount < 0 ? -u_oldcount : u_oldcount,
    1248             _(msg),
     1247            _(msgstr),
    12491248            did_undo ? _("before") : _("after"),
    12501249            uhp == NULL ? 0L : uhp->uh_seq,
    12511250            msgbuf);
  • src/version.c

    diff -Naur vim70.orig/src/version.c vim70/src/version.c
    old new  
    667667static int included_patches[] =
    668668{   /* Add new patch number below this line */
    669669/**/
     670    109,
     671/**/
     672    107,
     673/**/
     674    106,
     675/**/
     676    105,
     677/**/
     678    104,
     679/**/
     680    103,
     681/**/
     682    102,
     683/**/
     684    101,
     685/**/
     686    100,
     687/**/
     688    99,
     689/**/
     690    98,
     691/**/
     692    97,
     693/**/
     694    96,
     695/**/
     696    95,
     697/**/
     698    94,
     699/**/
     700    93,
     701/**/
     702    92,
     703/**/
     704    91,
     705/**/
     706    90,
     707/**/
     708    89,
     709/**/
     710    88,
     711/**/
     712    87,
     713/**/
     714    86,
     715/**/
     716    85,
     717/**/
     718    84,
     719/**/
     720    83,
     721/**/
     722    82,
     723/**/
     724    81,
     725/**/
     726    80,
     727/**/
     728    79,
     729/**/
     730    78,
     731/**/
     732    77,
     733/**/
     734    76,
     735/**/
     736    75,
     737/**/
     738    73,
     739/**/
     740    72,
     741/**/
     742    71,
     743/**/
     744    70,
     745/**/
     746    69,
     747/**/
     748    68,
     749/**/
     750    67,
     751/**/
     752    66,
     753/**/
     754    64,
     755/**/
     756    63,
     757/**/
     758    62,
     759/**/
     760    61,
     761/**/
     762    60,
     763/**/
     764    59,
     765/**/
     766    58,
     767/**/
     768    56,
     769/**/
     770    55,
     771/**/
     772    54,
     773/**/
     774    53,
     775/**/
     776    52,
     777/**/
     778    51,
     779/**/
     780    50,
     781/**/
     782    49,
     783/**/
     784    48,
     785/**/
     786    47,
     787/**/
     788    46,
     789/**/
     790    44,
     791/**/
     792    43,
     793/**/
     794    42,
     795/**/
     796    41,
     797/**/
     798    40,
     799/**/
     800    39,
     801/**/
     802    38,
     803/**/
     804    37,
     805/**/
     806    36,
     807/**/
     808    35,
     809/**/
     810    34,
     811/**/
     812    33,
     813/**/
     814    31,
     815/**/
     816    30,
     817/**/
     818    29,
     819/**/
     820    28,
     821/**/
     822    26,
     823/**/
     824    25,
     825/**/
     826    24,
     827/**/
     828    23,
     829/**/
     830    22,
     831/**/
     832    21,
     833/**/
     834    20,
     835/**/
     836    19,
     837/**/
     838    18,
     839/**/
     840    17,
     841/**/
     842    16,
     843/**/
     844    15,
     845/**/
     846    14,
     847/**/
     848    13,
     849/**/
     850    12,
     851/**/
     852    11,
     853/**/
     854    10,
     855/**/
     856    9,
     857/**/
     858    8,
     859/**/
     860    7,
     861/**/
     862    6,
     863/**/
     864    4,
     865/**/
     866    3,
     867/**/
     868    2,
     869/**/
     870    1,
     871/**/
    670872    0
    671873};
    672874
  • src/vim.h

    diff -Naur vim70.orig/src/vim.h vim70/src/vim.h
    old new  
    585585#define INSERT          0x10    /* Insert mode */
    586586#define LANGMAP         0x20    /* Language mapping, can be combined with
    587587                                   INSERT and CMDLINE */
    588 #define MAP_ALL_MODES   0x3f    /* all mode bits used for mapping */
    589588
    590589#define REPLACE_FLAG    0x40    /* Replace mode flag */
    591590#define REPLACE         (REPLACE_FLAG + INSERT)
     
    605604#define CONFIRM         0x800   /* ":confirm" prompt */
    606605#define SELECTMODE      0x1000  /* Select mode, only for mappings */
    607606
     607#define MAP_ALL_MODES   (0x3f | SELECTMODE)     /* all mode bits used for
     608                                                 * mapping */
     609
    608610/* directions */
    609611#define FORWARD                 1
    610612#define BACKWARD                (-1)
     
    11181120    EVENT_FOCUSGAINED,          /* got the focus */
    11191121    EVENT_FOCUSLOST,            /* lost the focus to another app */
    11201122    EVENT_GUIENTER,             /* after starting the GUI */
     1123    EVENT_GUIFAILED,            /* after starting the GUI failed */
    11211124    EVENT_INSERTCHANGE,         /* when changing Insert/Replace mode */
    11221125    EVENT_INSERTENTER,          /* when entering Insert mode */
    11231126    EVENT_INSERTLEAVE,          /* when leaving Insert mode */
     
    19831986/* values for vim_handle_signal() that are not a signal */
    19841987#define SIGNAL_BLOCK    -1
    19851988#define SIGNAL_UNBLOCK  -2
    1986 #if !defined(UNIX) && !defined(VMS)
     1989#if !defined(UNIX) && !defined(VMS) && !defined(OS2)
    19871990# define vim_handle_signal(x) 0
    19881991#endif
    19891992
  • src/window.c

    diff -Naur vim70.orig/src/window.c vim70/src/window.c
    old new  
    340340                {
    341341                    tabpage_T   *oldtab = curtab;
    342342                    tabpage_T   *newtab;
    343                     win_T       *wp = curwin;
    344343
    345344                    /* First create a new tab with the window, then go back to
    346345                     * the old tab and close the window there. */
     346                    wp = curwin;
    347347                    if (win_new_tabpage((int)Prenum) == OK
    348348                                                     && valid_tabpage(oldtab))
    349349                    {
     
    39543954    setmouse();                 /* in case jumped to/from help buffer */
    39553955#endif
    39563956
    3957 #ifdef FEAT_AUTOCHDIR
    3958     /* Change directories when the 'acd' option is set on and after
    3959      * switching windows. */
    3960     if (p_acd && curbuf->b_ffname != NULL
    3961                                      && vim_chdirfile(curbuf->b_ffname) == OK)
    3962         shorten_fnames(TRUE);
    3963 #endif
     3957    /* Change directories when the 'acd' option is set. */
     3958    DO_AUTOCHDIR
    39643959}
    39653960
    39663961#endif /* FEAT_WINDOWS */
Note: See TracBrowser for help on using the repository browser.