Ignore:
Timestamp:
Jul 23, 2014, 12:36:25 AM (10 years ago)
Author:
Chris Staub <chris@…>
Branches:
clfs-3.0.0-systemd, master, systemd
Children:
7703780
Parents:
1393767 (diff), d923363 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of git.cross-lfs.org:cross-lfs

File:
1 moved

Legend:

Unmodified
Added
Removed
  • patches/vim-7.4-branch_update-5.patch

    r1393767 r52b4b72  
    11Submitted By: William Harrington (kb0iic at cross-lfs dot org)
    2 Date: 2014-05-31
     2Date: 2014-07-21
    33Initial Package Version: 7.4
    44Origin: Upstream
    55Upstream Status: Applied
    6 Description: Contains all upstream patches up to 7.4.316.
     6Description: Contains all upstream patches up to 7.4.373.
    77
    88diff -Naur vim74.orig/.hg_archival.txt vim74/.hg_archival.txt
    99--- vim74.orig/.hg_archival.txt 1970-01-01 00:00:00.000000000 +0000
    10 +++ vim74/.hg_archival.txt      2014-06-01 00:42:48.067546692 +0000
     10+++ vim74/.hg_archival.txt      2014-07-21 23:33:10.410210199 +0000
    1111@@ -0,0 +1,5 @@
    1212+repo: 770908d1cb47c04be0aef5c173b17ab8be6b6476
    13 +node: bed71c37618c11240596390f277d4f5e60d35ebc
     13+node: 32a77cc160d922036ee28363f1a183f8e37f77ed
    1414+branch: default
    15 +latesttag: v7-4-316
    16 +latesttagdistance: 1
     15+latesttag: v7-4-373
     16+latesttagdistance: 2
    1717diff -Naur vim74.orig/.hgignore vim74/.hgignore
    1818--- vim74.orig/.hgignore        1970-01-01 00:00:00.000000000 +0000
    19 +++ vim74/.hgignore     2014-06-01 00:42:48.107546590 +0000
    20 @@ -0,0 +1,74 @@
     19+++ vim74/.hgignore     2014-07-21 23:33:10.436876796 +0000
     20@@ -0,0 +1,75 @@
    2121+syntax: glob
    2222+
     
    8585+
    8686+# Generated by "make test"
    87 +src/po/*.ck 
    88 +src/testdir/mbyte.vim 
    89 +src/testdir/mzscheme.vim 
    90 +src/testdir/lua.vim 
    91 +src/testdir/small.vim 
    92 +src/testdir/tiny.vim 
     87+src/po/*.ck
     88+src/testdir/mbyte.vim
     89+src/testdir/mzscheme.vim
     90+src/testdir/lua.vim
     91+src/testdir/small.vim
     92+src/testdir/tiny.vim
    9393+src/testdir/test*.out
    9494+src/testdir/test.log
     95+src/memfile_test
    9596diff -Naur vim74.orig/.hgtags vim74/.hgtags
    9697--- vim74.orig/.hgtags  1970-01-01 00:00:00.000000000 +0000
    97 +++ vim74/.hgtags       2014-06-01 00:42:48.127546539 +0000
    98 @@ -0,0 +1,3041 @@
     98+++ vim74/.hgtags       2014-07-21 23:33:10.453543419 +0000
     99@@ -0,0 +1,3098 @@
    99100+004eb98eb3c30714cb6a24ec3e810275080a8413 v7-1-117
    100101+006e9c8a6a8ad354a5cb6adcce6ebfceddeb20ee v7-0079
     
    31383139+646616b6ff4defcc7bef0b198b540f6d965a8126 v7-4-315
    31393140+0fc665889e8f0af532cb4e3be2f0ff0421bf2fbc v7-4-316
     3141+8ffcb546d782121dfc9d88c7edc6f62421efce89 v7-4-317
     3142+5c47dacf397c1c65d2dfc237b3ff395c66ec3d4d v7-4-318
     3143+a076237d1c3849535681e82946a9041ed5525d7f v7-4-319
     3144+f7bc601823e5c81e2ca412506a42eff9fd790ace v7-4-320
     3145+c052937aae8ca5082f308b8ff0712c7eccdd30c8 v7-4-321
     3146+fd96c55d683d76ece4ba01490d9796c13c988cdc v7-4-322
     3147+238f5027830cad22e17a970483af9b160869cdf3 v7-4-323
     3148+c476e0ac8b406693c3877baffa0e97ff25e59b06 v7-4-324
     3149+1f288d2475488c3f44c7248e99019e2612580716 v7-4-325
     3150+1dbcb23ae7a8b68ddbc28b4feb794c4c1db12395 v7-4-326
     3151+99d8f2d72dcd4b850de81998cc9b1120c8165762 v7-4-327
     3152+01d9ffdd6e6ffb39faf946e13ec63bd7dc31e162 v7-4-328
     3153+018df65085f8990c1407442f8c783d4cee72a479 v7-4-329
     3154+f9fa2e506b9f07549cd91074835c5c553db7b3a7 v7-4-330
     3155+6d984caa0409fd284722c44cb09a0a2b5360bd4f v7-4-331
     3156+8fed02d53b45848b0fff60de13d06858963cfb17 v7-4-332
     3157+8ae50e3ef8bf733c0869c01b5132d02feffc0955 v7-4-333
     3158+03d260a8ea0c0c67f424c387dbe2af5754e5e589 v7-4-334
     3159+8ad2ecd116021ad5c945426e8bb80d741392b780 v7-4-335
     3160+a42ba1e5099290a86cac1a9ac490c49e82e4c2cf v7-4-336
     3161+0206ac84ff5fdce6d893c470e0909d2aed547a24 v7-4-337
     3162+ef83b423ebf7de11c1063c795dd2186a9b59b90f v7-4-338
     3163+fd7110d0c3bf4fea3cfa3d16da6c2a945d327c27 v7-4-339
     3164+03f95f5e311b84653df70fb3c08a9d92cf21b8f0 v7-4-340
     3165+adc4a84f72eb44dae657af713922a6e2c1f64ae3 v7-4-341
     3166+8dcc6f142460b2d5eee119a174d441d46d95cd99 v7-4-342
     3167+539ce56d8f35fe2deb5c4f57335e1adf97ae4e74 v7-4-343
     3168+ce284c205558d103326a4c3f22f181774690b3eb v7-4-344
     3169+ea2c5dfee1b04d216ebf992c5f46ecbdfee2854a v7-4-345
     3170+3248c6e40aee01a7254d111dd846c6ec7889a804 v7-4-346
     3171+a162d41f10e1c3c8673d86d8b0c58fdaf1bddeaf v7-4-347
     3172+0b7586868f6da0372af7510650240e22dc1e6e64 v7-4-348
     3173+79950dae1d7de8fc2cb0f8ddd087d403e2b9ce8e v7-4-349
     3174+ad005d0114c1d2d83490787ef7ea2a3c6e5e7b9e v7-4-350
     3175+f9ec944e4474c649faad642797ffd798a7102549 v7-4-351
     3176+b4962cf3a1c06a1f60f1d750df8fcf7035b00b99 v7-4-352
     3177+d42a1d3b74d40f580359dbd139d2d0dfa7235252 v7-4-353
     3178+5deaa4e9812d4b4ae59d8a3e70bf19983e07e6da v7-4-354
     3179+9a4efda75b5ef0f496d6a29c0a4dfcc7c03412f9 v7-4-355
     3180+34465a179ce21c827cab4c65a75e6b490600a96f v7-4-356
     3181+4eedfc4911a1db9c4874689f6c652be0094838f2 v7-4-357
     3182+771b97ba3b4768c77f2070423a93152d6977f012 v7-4-358
     3183+182c7b987283a567121e9c43d831779d1c88645f v7-4-359
     3184+761687c6808f4c9c80d33a919a6bb506dfe9f674 v7-4-360
     3185+a97e5b9dbc26800830e46cf3c1aa6efbfe258097 v7-4-361
     3186+7fa2bed947fde3514a700c96861a537d816d6fd4 v7-4-362
     3187+ff3816167b73fde35017d364b1a820014cd42e76 v7-4-363
     3188+7b324826757595b21b0410a7b6f00227d73c655f v7-4-364
     3189+4625fa27ba6f5b06294675b7f0d1bf8ae8f249fb v7-4-365
     3190+ad775b58706587b6acfb0bb2c732e184efe4f778 v7-4-366
     3191+bdbe2037066df6a463346be1768a56d98001fb36 v7-4-367
     3192+021e16be3c026c9f883b2aba0b48469ecbae5d88 v7-4-368
     3193+72ee0db83788638c36bbcb076cabc2ba6c8cd4e7 v7-4-369
     3194+50575818a97fa4777e52272f5ffc769179d76a8d v7-4-370
     3195+d44f298c43c74555f4ea21b710d377133f948d61 v7-4-371
     3196+a122efb555c4f08405051369310451a627ed524b v7-4-372
     3197+353330c512a9488cf5c1a3f8b8a57fa8cdd83a7a v7-4-373
    31403198diff -Naur vim74.orig/Filelist vim74/Filelist
    31413199--- vim74.orig/Filelist 2013-07-13 13:23:38.000000000 +0000
    3142 +++ vim74/Filelist      2014-06-01 00:42:48.197546361 +0000
     3200+++ vim74/Filelist      2014-07-21 23:33:10.503543288 +0000
    31433201@@ -3,6 +3,7 @@
    31443202 
     
    31673225diff -Naur vim74.orig/runtime/autoload/clojurecomplete.vim vim74/runtime/autoload/clojurecomplete.vim
    31683226--- vim74.orig/runtime/autoload/clojurecomplete.vim     2013-02-06 14:35:23.000000000 +0000
    3169 +++ vim74/runtime/autoload/clojurecomplete.vim  2014-06-01 00:42:49.274210286 +0000
     3227+++ vim74/runtime/autoload/clojurecomplete.vim  2014-07-21 23:33:11.583540470 +0000
    31703228@@ -1,20 +1,22 @@
    31713229 " Vim completion script
     
    32083266diff -Naur vim74.orig/runtime/autoload/getscript.vim vim74/runtime/autoload/getscript.vim
    32093267--- vim74.orig/runtime/autoload/getscript.vim   2013-04-17 13:40:44.000000000 +0000
    3210 +++ vim74/runtime/autoload/getscript.vim        2014-06-01 00:42:49.320876834 +0000
     3268+++ vim74/runtime/autoload/getscript.vim        2014-07-21 23:33:11.626873690 +0000
    32113269@@ -1,8 +1,8 @@
    32123270 " ---------------------------------------------------------------------
     
    32403298 
    32413299   " this loop updates the GetLatestVimScripts.dat file
     3300diff -Naur vim74.orig/runtime/autoload/htmlcomplete.vim vim74/runtime/autoload/htmlcomplete.vim
     3301--- vim74.orig/runtime/autoload/htmlcomplete.vim        2011-04-28 11:13:20.000000000 +0000
     3302+++ vim74/runtime/autoload/htmlcomplete.vim     2014-07-21 23:33:11.673540235 +0000
     3303@@ -1,7 +1,49 @@
     3304 " Vim completion script
     3305 " Language:    HTML and XHTML
     3306 " Maintainer:  Mikolaj Machowski ( mikmach AT wp DOT pl )
     3307-" Last Change: 2011 Apr 28
     3308+" Last Change: 2014 Jun 20
     3309+
     3310+" Distinguish between HTML versions.
     3311+" To use with other HTML versions add another "elseif" condition to match
     3312+" proper DOCTYPE.
     3313+function! htmlcomplete#DetectOmniFlavor()
     3314+  if &filetype == 'xhtml'
     3315+    let b:html_omni_flavor = 'xhtml10s'
     3316+  else
     3317+    let b:html_omni_flavor = 'html401t'
     3318+  endif
     3319+  let i = 1
     3320+  let line = ""
     3321+  while i < 10 && i < line("$")
     3322+    let line = getline(i)
     3323+    if line =~ '<!DOCTYPE.*\<DTD '
     3324+      break
     3325+    endif
     3326+    let i += 1
     3327+  endwhile
     3328+  if line =~ '<!DOCTYPE.*\<DTD '  " doctype line found above
     3329+    if line =~ ' HTML 3\.2'
     3330+      let b:html_omni_flavor = 'html32'
     3331+    elseif line =~ ' XHTML 1\.1'
     3332+      let b:html_omni_flavor = 'xhtml11'
     3333+    else    " two-step detection with strict/frameset/transitional
     3334+      if line =~ ' XHTML 1\.0'
     3335+       let b:html_omni_flavor = 'xhtml10'
     3336+      elseif line =~ ' HTML 4\.01'
     3337+       let b:html_omni_flavor = 'html401'
     3338+      elseif line =~ ' HTML 4.0\>'
     3339+       let b:html_omni_flavor = 'html40'
     3340+      endif
     3341+      if line =~ '\<Transitional\>'
     3342+       let b:html_omni_flavor .= 't'
     3343+      elseif line =~ '\<Frameset\>'
     3344+       let b:html_omni_flavor .= 'f'
     3345+      else
     3346+       let b:html_omni_flavor .= 's'
     3347+      endif
     3348+    endif
     3349+  endif
     3350+endfunction
     3351 
     3352 function! htmlcomplete#CompleteTags(findstart, base)
     3353   if a:findstart
    32423354diff -Naur vim74.orig/runtime/autoload/netrw.vim vim74/runtime/autoload/netrw.vim
    32433355--- vim74.orig/runtime/autoload/netrw.vim       2013-05-19 03:28:33.000000000 +0000
    3244 +++ vim74/runtime/autoload/netrw.vim    2014-06-01 00:42:49.417543255 +0000
     3356+++ vim74/runtime/autoload/netrw.vim    2014-07-21 23:33:11.806873220 +0000
    32453357@@ -1,10 +1,10 @@
    32463358 " netrw.vim: Handles file transfer and remote directory listing across
     
    1075410866diff -Naur vim74.orig/runtime/autoload/netrwSettings.vim vim74/runtime/autoload/netrwSettings.vim
    1075510867--- vim74.orig/runtime/autoload/netrwSettings.vim       2013-05-03 19:53:43.000000000 +0000
    10756 +++ vim74/runtime/autoload/netrwSettings.vim    2014-06-01 00:42:49.474209777 +0000
     10868+++ vim74/runtime/autoload/netrwSettings.vim    2014-07-21 23:33:11.856873090 +0000
    1075710869@@ -1,7 +1,7 @@
    1075810870 " netrwSettings.vim: makes netrw settings simpler
     
    1078810900diff -Naur vim74.orig/runtime/autoload/netrw_gitignore.vim vim74/runtime/autoload/netrw_gitignore.vim
    1078910901--- vim74.orig/runtime/autoload/netrw_gitignore.vim     1970-01-01 00:00:00.000000000 +0000
    10790 +++ vim74/runtime/autoload/netrw_gitignore.vim  2014-06-01 00:42:49.487543077 +0000
     10902+++ vim74/runtime/autoload/netrw_gitignore.vim  2014-07-21 23:33:12.126872385 +0000
    1079110903@@ -0,0 +1,71 @@
    1079210904+" netrw_gitignore#Hide: gitignore-based hiding
     
    1086310975diff -Naur vim74.orig/runtime/autoload/phpcomplete.vim vim74/runtime/autoload/phpcomplete.vim
    1086410976--- vim74.orig/runtime/autoload/phpcomplete.vim 2011-12-08 15:38:25.000000000 +0000
    10865 +++ vim74/runtime/autoload/phpcomplete.vim      2014-06-01 00:42:49.544209599 +0000
     10977+++ vim74/runtime/autoload/phpcomplete.vim      2014-07-21 23:33:12.173538930 +0000
    1086610978@@ -1,27 +1,101 @@
    1086710979 " Vim completion script
     
    1087210984+" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
    1087310985+" URL: https://github.com/shawncplus/phpcomplete.vim
    10874 +" Last Change:  2014 May 08
     10986+" Last Change:  2014 May 30
    1087510987 "
    1087610988-"   TODO:
     
    1098011092 
    1098111093                if phpbegin == [0,0] && phpend == [0,0]
    10982 @@ -37,5116 +111,2449 @@
     11094@@ -35,5118 +109,2464 @@
     11095                        " locate the start of the word
     11096                        let line = getline('.')
    1098311097                        let start = col('.') - 1
    10984                         let curline = line('.')
     11098-                       let curline = line('.')
    1098511099                        let compl_begin = col('.') - 2
    1098611100-                       while start >= 0 && line[start - 1] =~ '[a-zA-Z_0-9\x7f-\xff$]'
     
    1099111105-                       return start
    1099211106+                       let b:phpbegin = phpbegin
    10993 +                       let b:compl_context = phpcomplete#GetCurrentInstruction(line('.'), col('.') - 2, phpbegin)
     11107+                       let b:compl_context = phpcomplete#GetCurrentInstruction(line('.'), max([0, col('.') - 2]), phpbegin)
    1099411108 
    1099511109+                       return start
     
    1119411308+               let builtin_classnames = filter(keys(copy(g:php_builtin_classnames)), 'v:val =~? "^'.classname_match_pattern.'"')
    1119511309+               for classname in builtin_classnames
    11196 +                       call add(res, {'word': classname, 'kind': 'c'})
     11310+                       call add(res, {'word': g:php_builtin_classes[tolower(classname)].name, 'kind': 'c'})
    1119711311                endfor
    1119811312+               let builtin_interfacenames = filter(keys(copy(g:php_builtin_interfacenames)), 'v:val =~? "^'.classname_match_pattern.'"')
    1119911313+               for interfacename in builtin_interfacenames
    11200 +                       call add(res, {'word': interfacename, 'kind': 'i'})
     11314+                       call add(res, {'word': g:php_builtin_interfaces[tolower(interfacename)].name, 'kind': 'i'})
    1120111315+               endfor
    1120211316+       endif
     
    1150611620+               for [classname, info] in items(g:php_builtin_classnames)
    1150711621+                       if classname =~? '^'.base
    11508 +                               let builtin_classnames[leading_slash.classname] = info
     11622+                               let builtin_classnames[leading_slash.g:php_builtin_classes[tolower(classname)].name] = info
    1150911623                        endif
    1151011624                endfor
     
    1663816752-                       \ 'include(': 'string filename | resource',
    1663916753-                       \ 'include_once(': 'string filename | resource',
     16754-                       \ 'require(': 'string filename | resource',
    1664016755+       for line in file
    1664116756+               let c_name = matchstr(line, '\c\(class\|interface\)\s*\zs[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*')
     
    1669816813+                                       let menu = g:php_builtin_classes[tolower(classname)]['methods']['__construct']['signature']
    1669916814+                               endif
    16700 +                               call add(res, {'word': leading_slash.classname, 'kind': 'c', 'menu': menu})
     16815+                               call add(res, {'word': leading_slash.g:php_builtin_classes[tolower(classname)].name, 'kind': 'c', 'menu': menu})
    1670116816+                       endfor
    1670216817+               endif
     
    1679216907+               let f_args = matchstr(i,
    1679316908+                                       \ 'function\s*&\?[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*\s*(\zs.\{-}\ze)\_s*\({\|\_$\)')
    16794 +               if f_name != ''
     16909+               if f_name != '' && stridx(f_name, '__') != 0
    1679516910+                       let c_functions[f_name.'('] = f_args
    1679616911+                       if g:phpcomplete_parse_docblock_comments
    16797 +                               let c_doc[f_name.'('] = phpcomplete#GetDocBlock(a:sccontent, 'function\s*\<'.f_name.'\>')
     16912+                               let c_doc[f_name.'('] = phpcomplete#GetDocBlock(a:sccontent, 'function\s*&\?\<'.f_name.'\>')
    1679816913+                       endif
    1679916914+               endif
     
    1691517030+               " methods
    1691617031+               for [method_name, method_info] in items(class_info.methods)
    16917 +                       if a:base == '' || method_name =~? '^'.a:base
     17032+                       if stridx(method_name, '__') != 0 && (a:base == '' || method_name =~? '^'.a:base)
    1691817033+                               call add(res, {'word':method_name.'(', 'kind': 'f', 'menu': method_info.signature, 'info': method_info.signature })
    1691917034+                       endif
     
    1718317298+                       return unknown_result
    1718417299+
    17185 +               elseif filereadable(classlocation)
     17300+               elseif classlocation != '' && filereadable(classlocation)
    1718617301+                       " Read the next method from the stack and extract only the name
    1718717302+
     
    1719117306+                       " try to find the method's return type in docblock comment
    1719217307+                       for classstructure in classcontents
    17193 +                               let doclock_target_pattern = 'function\s\+'.method.'\|\(public\|private\|protected\|var\).\+\$'.method
     17308+                               let doclock_target_pattern = 'function\s\+&\?'.method.'\|\(public\|private\|protected\|var\).\+\$'.method
    1719417309+                               let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), doclock_target_pattern)
    1719517310+                               if doc_str != ''
     
    1722317338+                                                       let fullnamespace = class_candidate_namespace
    1722417339+                                               endif
    17225 +                                               let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(returnclass, fullnamespace, a:imports)
     17340+                                               " make @return self, static, $this the same way
     17341+                                               " (not exactly what php means by these)
     17342+                                               if returnclass == 'self' || returnclass == 'static' || returnclass == '$this'
     17343+                                                       let classname_candidate = a:classname_candidate
     17344+                                                       let class_candidate_namespace = a:class_candidate_namespace
     17345+                                               else
     17346+                                                       let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(returnclass, fullnamespace, a:imports)
     17347+                                               endif
    1722617348+                                       endif
    1722717349+
     
    1736217484+                       let classname_candidate = return_type
    1736317485+                       let class_candidate_namespace = '\'
    17364 +               else
     17486+               elseif function_file != '' && filereadable(function_file)
    1736517487+                       let file_lines = readfile(function_file)
    17366 +                       let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*\<'.function_name.'\>')
     17488+                       let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
    1736717489+                       let docblock = phpcomplete#ParseDocBlock(docblock_str)
    1736817490+                       if has_key(docblock.return, 'type')
     
    1738017502+               endif
    1738117503+       else
     17504+               " extract the variable name from the context
     17505+               let object = methodstack[0]
     17506+               let object_is_array = (object =~ '\v^[^[]+\[' ? 1 : 0)
     17507+               let object = matchstr(object, variable_name_pattern)
     17508+
    1738217509+               " check Constant lookup
    1738317510+               let constant_object = matchstr(a:context, '\zs'.class_name_pattern.'\ze::')
     
    1738617513+               endif
    1738717514+
    17388 +               " extract the variable name from the context
    17389 +               let object = methodstack[0]
    17390 +               let object_is_array = (object =~ '\v^[^[]+\[' ? 1 : 0)
    17391 +               let object = matchstr(object, variable_name_pattern)
    17392 +
    17393 +               " scan the file backwards from current line for explicit type declaration (@var $variable Classname)
    17394 +               let i = 1 " start from the current line - 1
    17395 +               while i < a:start_line
    17396 +                       let line = getline(a:start_line - i)
    17397 +                       " in file lookup for /* @var $foo Class */
    17398 +                       if line =~# '@var\s\+'.object.'\s\+'.class_name_pattern
    17399 +                               let classname_candidate = matchstr(line, '@var\s\+'.object.'\s\+\zs'.class_name_pattern.'\(\[\]\)\?')
    17400 +                               break
    17401 +                       elseif line !~ '^\s*$'
    17402 +                               " type indicator comments should be next to the variable
    17403 +                               " non empty lines break the search
    17404 +                               break
    17405 +                       endif
    17406 +                       let i += 1
    17407 +               endwhile
     17515+               if classname_candidate == ''
     17516+                       " scan the file backwards from current line for explicit type declaration (@var $variable Classname)
     17517+                       let i = 1 " start from the current line - 1
     17518+                       while i < a:start_line
     17519+                               let line = getline(a:start_line - i)
     17520+                               " in file lookup for /* @var $foo Class */
     17521+                               if line =~# '@var\s\+'.object.'\s\+'.class_name_pattern
     17522+                                       let classname_candidate = matchstr(line, '@var\s\+'.object.'\s\+\zs'.class_name_pattern.'\(\[\]\)\?')
     17523+                                       let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, a:current_namespace, a:imports)
     17524+                                       break
     17525+                               elseif line !~ '^\s*$'
     17526+                                       " type indicator comments should be next to the variable
     17527+                                       " non empty lines break the search
     17528+                                       break
     17529+                               endif
     17530+                               let i += 1
     17531+                       endwhile
     17532+               endif
    1740817533+
    1740917534+               if classname_candidate != ''
     
    1741517540+               " scan the file backwards from the current line
    1741617541+               let i = 1
    17417 +               while i < a:start_line
     17542+               while i < a:start_line " {{{
    1741817543+                       let line = getline(a:start_line - i)
    1741917544+
     
    1752717652+                                       let class_candidate_namespace = '\'
    1752817653+                                       break
    17529 +                               else
     17654+                               elseif function_file != '' && filereadable(function_file)
    1753017655+                                       let file_lines = readfile(function_file)
    17531 +                                       let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*\<'.function_name.'\>')
     17656+                                       let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
    1753217657+                                       let docblock = phpcomplete#ParseDocBlock(docblock_str)
    1753317658+                                       if has_key(docblock.return, 'type')
     
    1757917704+
    1758017705+                       let i += 1
    17581 +               endwhile
     17706+               endwhile " }}}
    1758217707+
    1758317708+               if classname_candidate != ''
     
    1765017775+       endif
    1765117776+
     17777+       return ''
    1765217778+endfunction
    1765317779+" }}}
     
    1766017786+       endif
    1766117787+
     17788+
    1766217789+       " do in-file lookup for function definition
    1766317790+       let i = 1
    1766417791+       let buffer_lines = getline(1, line('$'))
    1766517792+       for line in buffer_lines
    17666 +               if line =~? '^\s*function\s\+'.a:function_name.'\s*('
     17793+               if line =~? '^\s*function\s\+&\?'.a:function_name.'\s*('
    1766717794+                       return expand('%:p')
    1766817795+               endif
     
    1769217819+               return no_namespace_candidate
    1769317820+       endif
     17821+
     17822+       return ''
    1769417823+endfunction
    1769517824+" }}}
     
    1778217911+       silent! below 1new
    1778317912+       silent! 0put =cfile
    17784 +       call search('\(class\|interface\)\s\+'.a:class_name.'\(\>\|$\)')
     17913+       call search('\(class\|interface\)\_s\+'.a:class_name.'\(\>\|$\)')
    1778517914+       let cfline = line('.')
    1778617915+       call search('{')
     
    1781517944+               endif
    1781617945+               let classlocation = phpcomplete#GetClassLocation(extends_class, namespace)
    17817 +               if filereadable(classlocation)
     17946+               if classlocation != '' && filereadable(classlocation)
    1781817947+                       let full_file_path = fnamemodify(classlocation, ':p')
    1781917948+                       let result += phpcomplete#GetClassContentsStructure(full_file_path, readfile(full_file_path), extends_class)
     
    1813218261+                                               let import['kind'] = 'c'
    1813318262+                                               let import['builtin'] = 1
    18134 +                                       elseif has_key(g:php_builtin_interfaces, import.name)
     18263+                                       elseif has_key(g:php_builtin_interfacenames, tolower(import.name))
    1813518264+                                               let import['kind'] = 'i'
    1813618265+                                               let import['builtin'] = 1
     
    1836018489+       endfor
    1836118490+
    18362 +       let g:php_builtin_classnames[class_info.name] = ''
     18491+       let g:php_builtin_classnames[classname] = ''
    1836318492+       for [method_name, method_info] in items(class_info.methods)
    1836418493+               let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature
     
    1837918508+       let g:php_builtin_interfacenames[interfacename] = ''
    1838018509+       for [method_name, method_info] in items(class_info.methods)
    18381 +               let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature
     18510+               let g:php_builtin_object_functions[interfacename.'::'.method_name.'('] = method_info.signature
    1838218511+       endfor
    1838318512+       for [method_name, method_info] in items(class_info.static_methods)
    18384 +               let g:php_builtin_object_functions[classname.'::'.method_name.'('] = method_info.signature
     18513+               let g:php_builtin_object_functions[interfacename.'::'.method_name.'('] = method_info.signature
    1838518514+       endfor
    1838618515+endfor
     
    1839118520+                       \ 'include(': 'string filename | resource',
    1839218521+                       \ 'include_once(': 'string filename | resource',
    18393                         \ 'require(': 'string filename | resource',
     18522+                       \ 'require(': 'string filename | resource',
    1839418523                        \ 'require_once(': 'string filename | resource',
    1839518524                        \ }
     
    1842618555diff -Naur vim74.orig/runtime/colors/README.txt vim74/runtime/colors/README.txt
    1842718556--- vim74.orig/runtime/colors/README.txt        2010-05-15 11:03:31.000000000 +0000
    18428 +++ vim74/runtime/colors/README.txt     2014-06-01 00:42:49.970875179 +0000
     18557+++ vim74/runtime/colors/README.txt     2014-07-21 23:33:12.600204483 +0000
    1842918558@@ -36,6 +36,14 @@
    1843018559 removed in your color scheme.  Use something like "gui=NONE" to remove the
     
    1844418573diff -Naur vim74.orig/runtime/colors/delek.vim vim74/runtime/colors/delek.vim
    1844518574--- vim74.orig/runtime/colors/delek.vim 2010-05-15 11:03:31.000000000 +0000
    18446 +++ vim74/runtime/colors/delek.vim      2014-06-01 00:42:50.027541702 +0000
     18575+++ vim74/runtime/colors/delek.vim      2014-07-21 23:33:12.646871028 +0000
    1844718576@@ -1,10 +1,10 @@
    1844818577 " Vim color file
     
    1847418603diff -Naur vim74.orig/runtime/colors/industry.vim vim74/runtime/colors/industry.vim
    1847518604--- vim74.orig/runtime/colors/industry.vim      1970-01-01 00:00:00.000000000 +0000
    18476 +++ vim74/runtime/colors/industry.vim   2014-06-01 00:42:50.067541600 +0000
     18605+++ vim74/runtime/colors/industry.vim   2014-07-21 23:33:12.710204196 +0000
    1847718606@@ -0,0 +1,40 @@
    1847818607+" Vim color file
     
    1851818647diff -Naur vim74.orig/runtime/compiler/gcc.vim vim74/runtime/compiler/gcc.vim
    1851918648--- vim74.orig/runtime/compiler/gcc.vim 2011-12-15 20:20:22.000000000 +0000
    18520 +++ vim74/runtime/compiler/gcc.vim      2014-06-01 00:42:50.447540632 +0000
     18649+++ vim74/runtime/compiler/gcc.vim      2014-07-21 23:33:13.026870036 +0000
    1852118650@@ -25,10 +25,10 @@
    1852218651       \%f:%l:\ %tarning:\ %m,
     
    1853618665diff -Naur vim74.orig/runtime/doc/autocmd.txt vim74/runtime/doc/autocmd.txt
    1853718666--- vim74.orig/runtime/doc/autocmd.txt  2013-08-10 11:24:52.000000000 +0000
    18538 +++ vim74/runtime/doc/autocmd.txt       2014-06-01 00:42:51.010872531 +0000
     18667+++ vim74/runtime/doc/autocmd.txt       2014-07-21 23:33:13.573535276 +0000
    1853918668@@ -1,4 +1,4 @@
    1854018669-*autocmd.txt*   For Vim version 7.4.  Last change: 2013 Aug 04
     
    1859418723diff -Naur vim74.orig/runtime/doc/change.txt vim74/runtime/doc/change.txt
    1859518724--- vim74.orig/runtime/doc/change.txt   2013-08-10 11:24:52.000000000 +0000
    18596 +++ vim74/runtime/doc/change.txt        2014-06-01 00:42:51.047539105 +0000
     18725+++ vim74/runtime/doc/change.txt        2014-07-21 23:33:13.596868549 +0000
    1859718726@@ -1,4 +1,4 @@
    1859818727-*change.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
    18599 +*change.txt*    For Vim version 7.4.  Last change: 2014 Feb 11
     18728+*change.txt*    For Vim version 7.4.  Last change: 2014 Jun 26
    1860018729 
    1860118730 
     
    1866118790                                                        *:sor* *:sort*
    1866218791 :[range]sor[t][!] [i][u][r][n][x][o] [/{pattern}/]
     18792@@ -1707,8 +1717,8 @@
     18793 quite useless.
     18794 
     18795 The details about sorting depend on the library function used.  There is no
     18796-guarantee that sorting is "stable" or obeys the current locale.  You will have
     18797-to try it out.
     18798+guarantee that sorting obeys the current locale.  You will have to try it out.
     18799+Vim does do a "stable" sort.
     18800 
     18801 The sorting can be interrupted, but if you interrupt it too late in the
     18802 process you may end up with duplicated lines.  This also depends on the system
    1866318803diff -Naur vim74.orig/runtime/doc/cmdline.txt vim74/runtime/doc/cmdline.txt
    1866418804--- vim74.orig/runtime/doc/cmdline.txt  2013-08-10 11:24:52.000000000 +0000
    18665 +++ vim74/runtime/doc/cmdline.txt       2014-06-01 00:42:51.080872353 +0000
     18805+++ vim74/runtime/doc/cmdline.txt       2014-07-21 23:33:13.640201769 +0000
    1866618806@@ -1,4 +1,4 @@
    1866718807-*cmdline.txt*   For Vim version 7.4.  Last change: 2013 Mar 16
     
    1871318853diff -Naur vim74.orig/runtime/doc/develop.txt vim74/runtime/doc/develop.txt
    1871418854--- vim74.orig/runtime/doc/develop.txt  2013-08-10 11:24:52.000000000 +0000
    18715 +++ vim74/runtime/doc/develop.txt       2014-06-01 00:42:51.124205576 +0000
     18855+++ vim74/runtime/doc/develop.txt       2014-07-21 23:33:13.676868340 +0000
    1871618856@@ -1,4 +1,4 @@
    1871718857-*develop.txt*   For Vim version 7.4.  Last change: 2013 Apr 27
     
    1873018870diff -Naur vim74.orig/runtime/doc/diff.txt vim74/runtime/doc/diff.txt
    1873118871--- vim74.orig/runtime/doc/diff.txt     2013-08-10 11:24:52.000000000 +0000
    18732 +++ vim74/runtime/doc/diff.txt  2014-06-01 00:42:51.130872226 +0000
     18872+++ vim74/runtime/doc/diff.txt  2014-07-21 23:33:13.686868314 +0000
    1873318873@@ -1,4 +1,4 @@
    1873418874-*diff.txt*      For Vim version 7.4.  Last change: 2013 Jul 07
     
    1876518905diff -Naur vim74.orig/runtime/doc/digraph.txt vim74/runtime/doc/digraph.txt
    1876618906--- vim74.orig/runtime/doc/digraph.txt  2013-08-10 11:24:52.000000000 +0000
    18767 +++ vim74/runtime/doc/digraph.txt       2014-06-01 00:42:51.154205500 +0000
     18907+++ vim74/runtime/doc/digraph.txt       2014-07-21 23:33:13.713534911 +0000
    1876818908@@ -1,4 +1,4 @@
    1876918909-*digraph.txt*   For Vim version 7.4.  Last change: 2011 Jan 15
    18770 +*digraph.txt*   For Vim version 7.4.  Last change: 2014 Apr 17
     18910+*digraph.txt*   For Vim version 7.4.  Last change: 2014 Jun 19
    1877118911 
    1877218912 
     
    1878118921        Percent sign            %       Greek/Cyrillic special
    1878218922        Plus                    +       smalls: Arabic, capitals: Hebrew
    18783 @@ -1077,7 +1077,7 @@
     18923@@ -170,6 +170,11 @@
     18924 used for the euro sign, while both of them are the character 164, 0xa4.  For
     18925 compatibility with zsh Eu can also be used for the euro sign.
     18926 
     18927+ROUBLE
     18928+
     18929+The rouble sign was added in 2014 as 0x20bd.  Vim supports the digraphs =R and
     18930+=P for this.  Note that R= and P= are other characters.
     18931+
     18932                                                        *digraph-table*
     18933 char  digraph  hex     dec     official name ~
     18934 ^@     NU      0x00      0     NULL (NUL)
     18935@@ -966,6 +971,8 @@
     18936 â‚§    Pt      20A7    8359    PESETA SIGN
     18937 â‚©    W=      20A9    8361    WON SIGN
     18938 â‚¬    Eu      20AC    8364    EURO SIGN
     18939+â‚œ    =R      20BD    8381    ROUBLE SIGN
     18940+â‚œ    =P      20BD    8381    ROUBLE SIGN
     18941 â„ƒ    oC      2103    8451    DEGREE CELSIUS
     18942 â„
     18943        co      2105    8453    CARE OF
     18944 â„‰    oF      2109    8457    DEGREE FAHRENHEIT
     18945@@ -1077,7 +1084,7 @@
    1878418946 âŠ¥    -T      22A5    8869    UP TACK
    1878518947 â‹
     
    1879318955diff -Naur vim74.orig/runtime/doc/editing.txt vim74/runtime/doc/editing.txt
    1879418956--- vim74.orig/runtime/doc/editing.txt  2013-08-10 11:24:53.000000000 +0000
    18795 +++ vim74/runtime/doc/editing.txt       2014-06-01 00:42:51.197538723 +0000
     18957+++ vim74/runtime/doc/editing.txt       2014-07-21 23:33:13.746868157 +0000
    1879618958@@ -1,4 +1,4 @@
    1879718959-*editing.txt*   For Vim version 7.4.  Last change: 2013 Aug 03
    18798 +*editing.txt*   For Vim version 7.4.  Last change: 2014 May 02
     18960+*editing.txt*   For Vim version 7.4.  Last change: 2014 Jul 19
    1879918961 
    1880018962 
     
    1880818970                                                        *:keepalt* *:keepa*
    1880918971 :keepalt {cmd}         Execute {cmd} while keeping the current alternate file
    18810 @@ -1468,14 +1469,15 @@
     18972@@ -1361,6 +1362,11 @@
     18973 {only available when compiled with the |+cryptv| feature}  *E833*
     18974 
     18975 The text in the swap file and the undo file is also encrypted.  *E843*
     18976+However, this is done block-by-block and may reduce the time needed to crack a
     18977+password.  You can disable the swap file, but then a crash will cause you to
     18978+lose your work.  The undo file can be disabled without much disadvantage. >
     18979+       :set noundofile
     18980+       :noswapfile edit secrets
     18981 
     18982 Note: The text in memory is not encrypted.  A system administrator may be able
     18983 to see your text while you are editing it.  When filtering text with
     18984@@ -1468,14 +1474,15 @@
    1881118985 ==============================================================================
    1881218986 10. Timestamps                                 *timestamp* *timestamps*
     
    1883419008diff -Naur vim74.orig/runtime/doc/eval.txt vim74/runtime/doc/eval.txt
    1883519009--- vim74.orig/runtime/doc/eval.txt     2013-08-10 11:24:53.000000000 +0000
    18836 +++ vim74/runtime/doc/eval.txt  2014-06-01 00:42:51.230871971 +0000
     19010+++ vim74/runtime/doc/eval.txt  2014-07-21 23:33:13.853534545 +0000
    1883719011@@ -1,4 +1,4 @@
    1883819012-*eval.txt*     For Vim version 7.4.  Last change: 2013 Aug 03
    18839 +*eval.txt*     For Vim version 7.4.  Last change: 2014 May 07
     19013+*eval.txt*     For Vim version 7.4.  Last change: 2014 Jul 19
    1884019014 
    1884119015 
     
    1900719181 has( {feature})                        Number  TRUE if feature {feature} supported
    1900819182 has_key( {dict}, {key})                Number  TRUE if {dict} has entry {key}
    19009 @@ -1968,7 +1994,8 @@
     19183@@ -1861,6 +1887,8 @@
     19184                                Number  position where {pat} matches in {expr}
     19185 matchadd( {group}, {pattern}[, {priority}[, {id}]])
     19186                                Number  highlight {pattern} with {group}
     19187+matchaddpos( {group}, {list}[, {priority}[, {id}]])
     19188+                               Number  highlight positions with {group}
     19189 matcharg( {nr})                        List    arguments of |:match|
     19190 matchdelete( {id})             Number  delete match identified by {id}
     19191 matchend( {expr}, {pat}[, {start}[, {count}]])
     19192@@ -1968,7 +1996,8 @@
    1901019193                                Number  last index of {needle} in {haystack}
    1901119194 strtrans( {expr})              String  translate string to make it printable
     
    1901719200                                String  all {pat} in {expr} replaced with {sub}
    1901819201 synID( {lnum}, {col}, {trans}) Number  syntax ID at {lnum} and {col}
    19019 @@ -1978,6 +2005,7 @@
     19202@@ -1978,6 +2007,7 @@
    1902019203 synconcealed( {lnum}, {col})   List    info about concealing
    1902119204 synstack( {lnum}, {col})       List    stack of syntax IDs at {lnum} and {col}
     
    1902519208 tabpagenr( [{arg}])            Number  number of current or last tab page
    1902619209 tabpagewinnr( {tabarg}[, {arg}])
    19027 @@ -1995,6 +2023,8 @@
     19210@@ -1995,6 +2025,8 @@
    1902819211 type( {name})                  Number  type of variable {name}
    1902919212 undofile( {name})              String  undo file name for {name}
     
    1903419217 virtcol( {expr})               Number  screen column of cursor or mark
    1903519218 visualmode( [expr])            String  last visual mode used
    19036 @@ -2076,6 +2106,18 @@
     19219@@ -2076,6 +2108,18 @@
    1903719220 argidx()       The result is the current index in the argument list.  0 is
    1903819221                the first file.  argc() - 1 is the last one.  See |arglist|.
     
    1905319236 argv([{nr}])   The result is the {nr}th file in the argument list of the
    1905419237                current window.  See |arglist|.  "argv(0)" is the first one.
    19055 @@ -2260,7 +2302,10 @@
     19238@@ -2260,7 +2304,10 @@
    1905619239                {expr}.  Use zero for the first character, it returns zero.
    1905719240                This function is only useful when there are multibyte
     
    1906519248                        echo matchstr(str, ".", byteidx(str, 3))
    1906619249 <              will display the fourth character.  Another way to do the
    19067 @@ -2269,7 +2314,20 @@
     19250@@ -2269,7 +2316,20 @@
    1906819251                        echo strpart(s, 0, byteidx(s, 1))
    1906919252 <              If there are less than {nr} characters -1 is returned.
     
    1908719270 call({func}, {arglist} [, {dict}])                     *call()* *E699*
    1908819271                Call function {func} with the items in |List| {arglist} as
    19089 @@ -2544,9 +2602,14 @@
     19272@@ -2544,9 +2604,14 @@
    1909019273 cursor({list})
    1909119274                Positions the cursor at the column (byte count) {col} in the
     
    1909819281+                       [{lnum}, {col}, {off}]
    1909919282+                       [{lnum}, {col}, {off}, {curswant}]
    19100 +               This is like the return value of |getpos()| or |getcurpos|,
     19283+               This is like the return value of |getpos()| or |getcurpos()|,
    1910119284+               but without the first item.
    1910219285+
     
    1910419287                If {lnum} is greater than the number of lines in the buffer,
    1910519288                the cursor will be positioned at the last line in the buffer.
    19106 @@ -2555,6 +2618,8 @@
     19289@@ -2555,6 +2620,8 @@
    1910719290                the cursor will be positioned at the last character in the
    1910819291                line.
     
    1911319296                screen columns from the start of the character.  E.g., a
    1911419297                position within a <Tab> or after the last character.
    19115 @@ -2671,6 +2736,15 @@
     19298@@ -2671,6 +2738,15 @@
    1911619299                        0       does not exist
    1911719300                        -1      not implemented on this system
     
    1912919312 exists({expr}) The result is a Number, which is non-zero if {expr} is
    1913019313                defined, zero otherwise.  The {expr} argument is a string,
    19131 @@ -2683,7 +2757,8 @@
     19314@@ -2683,7 +2759,8 @@
    1913219315                                        string)
    1913319316                        *funcname       built-in function (see |functions|)
     
    1913919322                                        |internal-variables|).  Also works
    1914019323                                        for |curly-braces-names|, |Dictionary|
    19141 @@ -2789,7 +2864,7 @@
     19324@@ -2789,7 +2866,7 @@
    1914219325                        <afile>         autocmd file name
    1914319326                        <abuf>          autocmd buffer number (as a String!)
     
    1914819331                        <cword>         word under the cursor
    1914919332                        <cWORD>         WORD under the cursor
    19150 @@ -3175,7 +3250,7 @@
     19333@@ -3175,7 +3252,7 @@
    1915119334                If [expr] is 1, only check if a character is available, it is
    1915219335                        not consumed.  Return zero if no character available.
     
    1915719340                result is a number.  Use nr2char() to convert it to a String.
    1915819341                Otherwise a String is returned with the encoded character.
    19159 @@ -3185,7 +3260,7 @@
     19342@@ -3185,7 +3262,11 @@
    1916019343                String when a modifier (shift, control, alt) was used that is
    1916119344                not included in the character.
    1916219345 
    1916319346-               When {expr} is 1 only the first byte is returned.  For a
     19347+               When [expr] is 0 and Esc is typed, there will be a short delay
     19348+               while Vim waits to see if this is the start of an escape
     19349+               sequence.
     19350+
    1916419351+               When [expr] is 1 only the first byte is returned.  For a
    1916519352                one-byte character it is the character itself as a number.
    1916619353                Use nr2char() to convert it to a String.
    1916719354 
    19168 @@ -3268,6 +3343,17 @@
     19355@@ -3268,6 +3349,17 @@
    1916919356                Returns an empty string otherwise.
    1917019357                Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
     
    1918419371 getcwd()       The result is a String, which is the name of the current
    1918519372                working directory.
    19186 @@ -3417,7 +3503,7 @@
     19373@@ -3389,6 +3481,34 @@
     19374                        'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
     19375                        :unlet m
     19376 <
     19377+                                                       *getpid()*
     19378+getpid()       Return a Number which is the process ID of the Vim process.
     19379+               On Unix and MS-Windows this is a unique number, until Vim
     19380+               exits.  On MS-DOS it's always zero.
     19381+
     19382+                                                       *getpos()*
     19383+getpos({expr}) Get the position for {expr}.  For possible values of {expr}
     19384+               see |line()|.  For getting the cursor position see
     19385+               |getcurpos()|.
     19386+               The result is a |List| with four numbers:
     19387+                   [bufnum, lnum, col, off]
     19388+               "bufnum" is zero, unless a mark like '0 or 'A is used, then it
     19389+               is the buffer number of the mark.
     19390+               "lnum" and "col" are the position in the buffer.  The first
     19391+               column is 1.
     19392+               The "off" number is zero, unless 'virtualedit' is used.  Then
     19393+               it is the offset in screen columns from the start of the
     19394+               character.  E.g., a position within a <Tab> or after the last
     19395+               character.
     19396+               Note that for '< and '> Visual mode matters: when it is "V"
     19397+               (visual line mode) the column of '< is zero and the column of
     19398+               '> is a large number.
     19399+               This can be used to save and restore the position of a mark: >
     19400+                       let save_a_mark = getpos("'a")
     19401+                       ...
     19402+                       call setpos(''a', save_a_mark
     19403+<              Also see |getcurpos()| and |setpos()|.
     19404+
     19405 
     19406 getqflist()                                            *getqflist()*
     19407                Returns a list with all the current quickfix errors.  Each
     19408@@ -3417,7 +3537,7 @@
    1918719409                        :endfor
    1918819410 
     
    1919319415                {regname}.  Example: >
    1919419416                        :let cliptext = getreg('*')
    19195 @@ -3426,6 +3512,11 @@
     19417@@ -3426,6 +3546,11 @@
    1919619418                getreg('=', 1) returns the expression itself, so that it can
    1919719419                be restored with |setreg()|.  For other registers the extra
     
    1920519427 
    1920619428 
    19207 @@ -3435,7 +3526,7 @@
     19429@@ -3435,7 +3560,7 @@
    1920819430                    "v"                 for |characterwise| text
    1920919431                    "V"                 for |linewise| text
     
    1921419436                If {regname} is not specified, |v:register| is used.
    1921519437 
    19216 @@ -3513,11 +3604,12 @@
     19438@@ -3513,11 +3638,12 @@
    1921719439                See |expand()| for expanding special Vim variables.  See
    1921819440                |system()| for getting the raw output of an external command.
     
    1922919451                |glob()|.  A path separator is inserted when needed.
    1923019452                To add a comma inside a directory name escape it with a
    19231 @@ -3525,11 +3617,19 @@
     19453@@ -3525,11 +3651,19 @@
    1923219454                trailing backslash, remove it if you put a comma after it.
    1923319455                If the expansion fails for one of the directories, there is no
     
    1925019472                For example, to find all "README.txt" files in the directories
    1925119473                in 'runtimepath' and below: >
    19252 @@ -4109,6 +4209,8 @@
     19474@@ -4109,6 +4243,8 @@
    1925319475                                     (|mapmode-ic|)
    1925419476                  "sid"      The script local ID, used for <sid> mappings
     
    1925919481                The mappings local to the current buffer are checked first,
    1926019482                then the global mappings.
    19261 @@ -4210,6 +4312,9 @@
     19483@@ -4210,6 +4346,9 @@
    1926219484                "match").  It will be highlighted with {group}.  Returns an
    1926319485                identification number (ID), which can be used to delete the
     
    1926919491                The optional {priority} argument assigns a priority to the
    1927019492                match.  A match with a high priority will have its
    19271 @@ -4408,7 +4513,8 @@
    19272  
    19273                                                         *getpos()*
    19274  getpos({expr}) Get the position for {expr}.  For possible values of {expr}
     19493@@ -4243,6 +4382,41 @@
     19494                available from |getmatches()|.  All matches can be deleted in
     19495                one operation by |clearmatches()|.
     19496 
     19497+matchaddpos({group}, {pos}[, {priority}[, {id}]])              *matchaddpos()*
     19498+               Same as |matchadd()|, but requires a list of positions {pos}
     19499+               instead of a pattern. This command is faster than |matchadd()|
     19500+               because it does not require to handle regular expressions and
     19501+               sets buffer line boundaries to redraw screen. It is supposed
     19502+               to be used when fast match additions and deletions are
     19503+               required, for example to highlight matching parentheses.
     19504+
     19505+               The list {pos} can contain one of these items:
     19506+               - A number.  This whole line will be highlighted.  The first
     19507+                 line has number 1.
     19508+               - A list with one number, e.g., [23]. The whole line with this
     19509+                 number will be highlighted.
     19510+               - A list with two numbers, e.g., [23, 11]. The first number is
     19511+                 the line number, the second one is the column number (first
     19512+                 column is 1, the value must correspond to the byte index as
     19513+                 |col()| would return).  The character at this position will
     19514+                 be highlighted.
     19515+               - A list with three numbers, e.g., [23, 11, 3]. As above, but
     19516+                 the third number gives the length of the highlight in bytes.
     19517+               
     19518+               The maximum number of positions is 8.
     19519+
     19520+               Example: >
     19521+                       :highlight MyGroup ctermbg=green guibg=green
     19522+                       :let m = matchaddpos("MyGroup", [[23, 24], 34])
     19523+<              Deletion of the pattern: >
     19524+                       :call matchdelete(m)
     19525+
     19526+<              Matches added by |matchaddpos()| are returned by
     19527+               |getmatches()| with an entry "pos1", "pos2", etc., with the
     19528+               value a list like the {pos} item.
     19529+               These matches cannot be set via |setmatches()|, however they
     19530+               can still be deleted by |clearmatches()|.
     19531+
     19532 matcharg({nr})                                                 *matcharg()*
     19533                Selects the {nr} match item, as set with a |:match|,
     19534                |:2match| or |:3match| command.
     19535@@ -4401,30 +4575,6 @@
     19536                characters.  nr2char(0) is a real NUL and terminates the
     19537                string, thus results in an empty string.
     19538 
     19539-                                                       *getpid()*
     19540-getpid()       Return a Number which is the process ID of the Vim process.
     19541-               On Unix and MS-Windows this is a unique number, until Vim
     19542-               exits.  On MS-DOS it's always zero.
     19543-
     19544-                                                       *getpos()*
     19545-getpos({expr}) Get the position for {expr}.  For possible values of {expr}
    1927519546-               see |line()|.
    19276 +               see |line()|.  For getting the cursor position see
    19277 +               |getcurpos()|.
    19278                 The result is a |List| with four numbers:
    19279                     [bufnum, lnum, col, off]
    19280                 "bufnum" is zero, unless a mark like '0 or 'A is used, then it
    19281 @@ -4419,11 +4525,14 @@
    19282                 it is the offset in screen columns from the start of the
    19283                 character.  E.g., a position within a <Tab> or after the last
    19284                 character.
     19547-               The result is a |List| with four numbers:
     19548-                   [bufnum, lnum, col, off]
     19549-               "bufnum" is zero, unless a mark like '0 or 'A is used, then it
     19550-               is the buffer number of the mark.
     19551-               "lnum" and "col" are the position in the buffer.  The first
     19552-               column is 1.
     19553-               The "off" number is zero, unless 'virtualedit' is used.  Then
     19554-               it is the offset in screen columns from the start of the
     19555-               character.  E.g., a position within a <Tab> or after the last
     19556-               character.
    1928519557-               This can be used to save and restore the cursor position: >
    1928619558-                       let save_cursor = getpos(".")
     
    1928819560-                       call setpos('.', save_cursor)
    1928919561-<              Also see |setpos()|.
    19290 +               Note that for '< and '> Visual mode matters: when it is "V"
    19291 +               (visual line mode) the column of '< is zero and the column of
    19292 +               '> is a large number.
    19293 +               This can be used to save and restore the position of a mark: >
    19294 +                       let save_a_mark = getpos("'a")
    19295 +                       ...
    19296 +                       call setpos(''a', save_a_mark
    19297 +<              Also see |getcurpos()| and |setpos()|.
    19298  
     19562-
    1929919563 or({expr}, {expr})                                     *or()*
    1930019564                Bitwise OR on the two arguments.  The arguments are converted
    19301 @@ -5223,8 +5332,9 @@
     19565                to a number.  A List, Dict or Float argument causes an error.
     19566@@ -5223,8 +5373,9 @@
    1930219567                        .       the cursor
    1930319568                        'x      mark x
     
    1931019575                "bufnum" is the buffer number.  Zero can be used for the
    1931119576                current buffer.  Setting the cursor is only possible for
    19312 @@ -5242,13 +5352,26 @@
     19577@@ -5242,13 +5393,26 @@
    1931319578                character.  E.g., a position within a <Tab> or after the last
    1931419579                character.
     
    1933919604 
    1934019605 setqflist({list} [, {action}])                         *setqflist()*
    19341 @@ -5300,6 +5423,8 @@
     19606@@ -5300,6 +5464,8 @@
    1934219607                                                        *setreg()*
    1934319608 setreg({regname}, {value} [,{options}])
     
    1934819613                then the value is appended.
    1934919614                {options} can also contain a register type specification:
    19350 @@ -5312,10 +5437,15 @@
     19615@@ -5312,10 +5478,15 @@
    1935119616                in the longest line (counting a <Tab> as 1 character).
    1935219617 
     
    1936819633                Examples: >
    1936919634                        :call setreg(v:register, @*)
    19370 @@ -5323,8 +5453,11 @@
     19635@@ -5323,8 +5494,11 @@
    1937119636                        :call setreg('a', "1\n2\n3", 'b5')
    1937219637 
     
    1938219647                            ....
    1938319648                        :call setreg('a', var_a, var_amode)
    19384 @@ -5390,6 +5523,7 @@
     19649@@ -5390,6 +5564,7 @@
    1938519650 <              This results in a directory listing for the file under the
    1938619651                cursor.  Example of use with |system()|: >
     
    1939019655 
    1939119656 shiftwidth()                                           *shiftwidth()*
    19392 @@ -5449,20 +5583,26 @@
     19657@@ -5449,20 +5624,40 @@
    1939319658 
    1939419659 
     
    1940019665+               If you want a list to remain unmodified make a copy first: >
    1940119666                        :let sortedlist = sort(copy(mylist))
    19402  <              Uses the string representation of each item to sort on.
    19403                 Numbers sort after Strings, |Lists| after Numbers.
    19404                 For sorting text in the current buffer use |:sort|.
    19405 +
    19406                 When {func} is given and it is one then case is ignored.
     19667-<              Uses the string representation of each item to sort on.
     19668-               Numbers sort after Strings, |Lists| after Numbers.
     19669-               For sorting text in the current buffer use |:sort|.
     19670-               When {func} is given and it is one then case is ignored.
    1940719671-               {dict} is for functions with the "dict" attribute.  It will be
    1940819672-               used to set the local variable "self". |Dictionary-function|
     19673+
     19674+<              When {func} is omitted, is empty or zero, then sort() uses the
     19675+               string representation of each item to sort on.  Numbers sort
     19676+               after Strings, |Lists| after Numbers.  For sorting text in the
     19677+               current buffer use |:sort|.
     19678+
     19679+               When {func} is given and it is is '1' or 'i' then case is
     19680+               ignored.
     19681+               
     19682+               When {func} is given and it is 'n' then all items will be
     19683+               sorted numerical (Implementation detail: This uses the
     19684+               strtod() function to parse numbers, Strings, Lists, Dicts and
     19685+               Funcrefs will be considered as being 0).
     19686+
    1940919687                When {func} is a |Funcref| or a function name, this function
    1941019688                is called to compare items.  The function is invoked with two
     
    1941619694+               used to set the local variable "self". |Dictionary-function|
    1941719695+
     19696+               The sort is stable, items which compare equal (as number or as
     19697+               string) will keep their relative position. E.g., when sorting
     19698+               on numbers, text strings will sort next to each other, in the
     19699+               same order as they were originally.
     19700+
    1941819701+               Also see |uniq()|.
    1941919702+
     
    1942119704                        func MyCompare(i1, i2)
    1942219705                           return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
    19423 @@ -5604,7 +5744,7 @@
     19706@@ -5604,7 +5799,7 @@
    1942419707 
    1942519708 strdisplaywidth({expr}[, {col}])                       *strdisplaywidth()*
     
    1943019713                screen column where to start.  This matters for Tab
    1943119714                characters.
    19432 @@ -5729,12 +5869,23 @@
     19715@@ -5729,12 +5924,23 @@
    1943319716                Ambiguous, this function's return value depends on 'ambiwidth'.
    1943419717                Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
     
    1945519738                        :s/\d\+/\=submatch(0) + 1/
    1945619739 <              This finds the first number in the line and adds one to it.
    19457 @@ -5867,19 +6018,29 @@
     19740@@ -5867,19 +6073,29 @@
    1945819741                valid positions.
    1945919742 
     
    1949419777 <              To make the result more system-independent, the shell output
    1949519778                is filtered to replace <CR> with <NL> for Macintosh, and
    19496 @@ -5906,6 +6067,16 @@
     19779@@ -5906,6 +6122,16 @@
    1949719780                Use |:checktime| to force a check.
    1949819781 
     
    1951119794                The result is a |List|, where each item is the number of the
    1951219795                buffer associated with each window in the current tab page.
    19513 @@ -5928,7 +6099,7 @@
     19796@@ -5928,7 +6154,7 @@
    1951419797                The number can be used with the |:tab| command.
    1951519798 
     
    1952019803                {tabarg} specifies the number of tab page to be used.
    1952119804                {arg} is used like with |winnr()|:
    19522 @@ -6128,6 +6299,14 @@
     19805@@ -6128,6 +6354,14 @@
    1952319806                                blocks.  Each item may again have an "alt"
    1952419807                                item.
     
    1953519818                Return a |List| with all the values of {dict}.  The |List| is
    1953619819                in arbitrary order.
    19537 @@ -6257,6 +6436,16 @@
     19820@@ -6257,6 +6491,16 @@
    1953819821 winrestview({dict})
    1953919822                Uses the |Dictionary| returned by |winsaveview()| to restore
     
    1955219835                If the window size changed the result won't be the same.
    1955319836 
    19554 @@ -6271,7 +6460,9 @@
    19555                 not opened when moving around.
     19837@@ -6268,10 +6512,12 @@
     19838                buffer and you want to go back to the original view.
     19839                This does not save fold information.  Use the 'foldenable'
     19840                option to temporarily switch off folding, so that folds are
     19841-               not opened when moving around.
     19842+               not opened when moving around. This may have side effects.
    1955619843                The return value includes:
    1955719844                        lnum            cursor line number
     
    1956319850                        curswant        column for vertical movement
    1956419851                        topline         first line in the window
    19565 @@ -6330,13 +6521,24 @@
     19852@@ -6322,7 +6568,7 @@
     19853 
     19854 
     19855                                                        *feature-list*
     19856-There are three types of features:
     19857+There are four types of features:
     19858 1.  Features that are only supported when they have been enabled when Vim
     19859     was compiled |+feature-list|.  Example: >
     19860        :if has("cindent")
     19861@@ -6330,13 +6576,24 @@
    1956619862     Example: >
    1956719863        :if has("gui_running")
     
    1959219888 amiga                  Amiga version of Vim.
    1959319889 arabic                 Compiled with Arabic support |Arabic|.
    19594 @@ -6503,7 +6705,9 @@
     19890@@ -6407,8 +6664,8 @@
     19891 keymap                 Compiled with 'keymap' support.
     19892 langmap                        Compiled with 'langmap' support.
     19893 libcall                        Compiled with |libcall()| support.
     19894-linebreak              Compiled with 'linebreak', 'breakat' and 'showbreak'
     19895-                       support.
     19896+linebreak              Compiled with 'linebreak', 'breakat', 'showbreak' and
     19897+                       'breakindent' support.
     19898 lispindent             Compiled with support for lisp indenting.
     19899 listcmds               Compiled with commands for the buffer list |:files|
     19900                        and the argument list |arglist|.
     19901@@ -6503,7 +6760,9 @@
    1959519902 writebackup            Compiled with 'writebackup' default on.
    1959619903 xfontset               Compiled with X fontset support |xfontset|.
     
    1960319910 xsmp_interact          Compiled with interactive X session management support.
    1960419911 xterm_clipboard                Compiled with support for xterm clipboard.
    19605 @@ -6553,6 +6757,8 @@
     19912@@ -6553,6 +6812,8 @@
    1960619913 and autocommands defined in the script.  It is also possible to call the
    1960719914 function from a mapping defined in the script, but then |<SID>| must be used
     
    1961219919                                        *:fu* *:function* *E128* *E129* *E123*
    1961319920 :fu[nction]            List all functions and their arguments.
    19614 @@ -6576,11 +6782,15 @@
     19921@@ -6576,11 +6837,15 @@
    1961519922 <
    1961619923 See |:verbose-cmd| for more information.
     
    1963019937                        {name} can also be a |Dictionary| entry that is a
    1963119938                        |Funcref|: >
    19632 @@ -6599,7 +6809,7 @@
     19939@@ -6599,7 +6864,7 @@
    1963319940 
    1963419941                        For the {arguments} see |function-argument|.
     
    1963919946                        expected to take care of a range itself.  The range is
    1964019947                        passed as "a:firstline" and "a:lastline".  If [range]
    19641 @@ -6608,10 +6818,10 @@
     19948@@ -6608,10 +6873,10 @@
    1964219949                        of each line.  See |function-range-example|.
    1964319950                        The cursor is still moved to the first line of the
     
    1965219959                        be invoked through an entry in a |Dictionary|.  The
    1965319960                        local variable "self" will then be set to the
    19654 @@ -7273,6 +7483,8 @@
     19961@@ -7273,6 +7538,8 @@
    1965519962                        {pattern}, so long as it does not have a special
    1965619963                        meaning (e.g., '|' or '"') and doesn't occur inside
     
    1966119968                        an error message because it may vary in different
    1966219969                        locales.
    19663 @@ -7416,13 +7628,22 @@
     19970@@ -7416,13 +7683,22 @@
    1966419971                        for Vim commands, |shellescape()| for |:!| commands.
    1966519972                        Examples: >
     
    1969119998diff -Naur vim74.orig/runtime/doc/filetype.txt vim74/runtime/doc/filetype.txt
    1969219999--- vim74.orig/runtime/doc/filetype.txt 2013-08-10 11:24:53.000000000 +0000
    19693 +++ vim74/runtime/doc/filetype.txt      2014-06-01 00:42:51.354204990 +0000
     20000+++ vim74/runtime/doc/filetype.txt      2014-07-21 23:33:13.986867531 +0000
    1969420001@@ -1,4 +1,4 @@
    1969520002-*filetype.txt*  For Vim version 7.4.  Last change: 2013 May 25
     
    1972920036diff -Naur vim74.orig/runtime/doc/fold.txt vim74/runtime/doc/fold.txt
    1973020037--- vim74.orig/runtime/doc/fold.txt     2013-08-10 11:24:53.000000000 +0000
    19731 +++ vim74/runtime/doc/fold.txt  2014-06-01 00:42:51.370871615 +0000
     20038+++ vim74/runtime/doc/fold.txt  2014-07-21 23:33:13.996867505 +0000
    1973220039@@ -1,4 +1,4 @@
    1973320040-*fold.txt*      For Vim version 7.4.  Last change: 2010 May 13
     
    1975220059diff -Naur vim74.orig/runtime/doc/gui.txt vim74/runtime/doc/gui.txt
    1975320060--- vim74.orig/runtime/doc/gui.txt      2013-08-10 11:24:53.000000000 +0000
    19754 +++ vim74/runtime/doc/gui.txt   2014-06-01 00:42:51.410871513 +0000
     20061+++ vim74/runtime/doc/gui.txt   2014-07-21 23:33:14.040200725 +0000
    1975520062@@ -1,4 +1,4 @@
    1975620063-*gui.txt*       For Vim version 7.4.  Last change: 2013 Jun 12
     
    1978220089diff -Naur vim74.orig/runtime/doc/gui_x11.txt vim74/runtime/doc/gui_x11.txt
    1978320090--- vim74.orig/runtime/doc/gui_x11.txt  2013-08-10 11:24:54.000000000 +0000
    19784 +++ vim74/runtime/doc/gui_x11.txt       2014-06-01 00:42:51.460871386 +0000
     20091+++ vim74/runtime/doc/gui_x11.txt       2014-07-21 23:33:14.100200568 +0000
    1978520092@@ -1,4 +1,4 @@
    1978620093-*gui_x11.txt*   For Vim version 7.4.  Last change: 2011 Sep 14
     
    1980020107diff -Naur vim74.orig/runtime/doc/if_lua.txt vim74/runtime/doc/if_lua.txt
    1980120108--- vim74.orig/runtime/doc/if_lua.txt   2013-08-10 11:24:55.000000000 +0000
    19802 +++ vim74/runtime/doc/if_lua.txt        2014-06-01 00:42:51.564204456 +0000
     20109+++ vim74/runtime/doc/if_lua.txt        2014-07-21 23:33:14.180200360 +0000
    1980320110@@ -1,4 +1,4 @@
    1980420111-*if_lua.txt*    For Vim version 7.4.  Last change: 2012 Jun 29
     
    1981820125diff -Naur vim74.orig/runtime/doc/if_perl.txt vim74/runtime/doc/if_perl.txt
    1981920126--- vim74.orig/runtime/doc/if_perl.txt  2013-08-10 11:24:55.000000000 +0000
    19820 +++ vim74/runtime/doc/if_perl.txt       2014-06-01 00:42:51.620870978 +0000
     20127+++ vim74/runtime/doc/if_perl.txt       2014-07-21 23:33:14.236866878 +0000
    1982120128@@ -1,4 +1,4 @@
    1982220129-*if_perl.txt*   For Vim version 7.4.  Last change: 2012 Oct 25
     
    1982720134diff -Naur vim74.orig/runtime/doc/indent.txt vim74/runtime/doc/indent.txt
    1982820135--- vim74.orig/runtime/doc/indent.txt   2013-08-10 11:24:56.000000000 +0000
    19829 +++ vim74/runtime/doc/indent.txt        2014-06-01 00:42:51.750870647 +0000
     20136+++ vim74/runtime/doc/indent.txt        2014-07-21 23:33:14.356866565 +0000
    1983020137@@ -1,4 +1,4 @@
    1983120138-*indent.txt*    For Vim version 7.4.  Last change: 2013 Aug 03
     
    1997220279diff -Naur vim74.orig/runtime/doc/index.txt vim74/runtime/doc/index.txt
    1997320280--- vim74.orig/runtime/doc/index.txt    2013-08-10 11:24:56.000000000 +0000
    19974 +++ vim74/runtime/doc/index.txt 2014-06-01 00:42:51.770870596 +0000
     20281+++ vim74/runtime/doc/index.txt 2014-07-21 23:33:14.376866513 +0000
    1997520282@@ -1,4 +1,4 @@
    1997620283-*index.txt*     For Vim version 7.4.  Last change: 2013 Jul 17
     
    2003020337 |:nunmap|      :nun[map]       like ":unmap" but for Normal mode
    2003120338 |:nunmenu|     :nunme[nu]      remove menu for Normal mode
     20339diff -Naur vim74.orig/runtime/doc/insert.txt vim74/runtime/doc/insert.txt
     20340--- vim74.orig/runtime/doc/insert.txt   2013-08-10 11:24:56.000000000 +0000
     20341+++ vim74/runtime/doc/insert.txt        2014-07-21 23:33:14.403533110 +0000
     20342@@ -1,4 +1,4 @@
     20343-*insert.txt*    For Vim version 7.4.  Last change: 2013 Jul 12
     20344+*insert.txt*    For Vim version 7.4.  Last change: 2014 Jul 06
     20345 
     20346 
     20347                  VIM REFERENCE MANUAL    by Bram Moolenaar
     20348@@ -1302,7 +1302,7 @@
     20349 XHTML                                                  *ft-xhtml-omni*
     20350 
     20351 CTRL-X CTRL-O provides completion of various elements of (X)HTML files.  It is
     20352-designed to support writing of XHTML 1.0 Strict files but will also works for
     20353+designed to support writing of XHTML 1.0 Strict files but will also work for
     20354 other versions of HTML. Features:
     20355 
     20356 - after "<" complete tag name depending on context (no div suggestion inside
     20357diff -Naur vim74.orig/runtime/doc/intro.txt vim74/runtime/doc/intro.txt
     20358--- vim74.orig/runtime/doc/intro.txt    2013-08-10 11:24:56.000000000 +0000
     20359+++ vim74/runtime/doc/intro.txt 2014-07-21 23:33:14.423533058 +0000
     20360@@ -1,4 +1,4 @@
     20361-*intro.txt*     For Vim version 7.4.  Last change: 2013 Jun 17
     20362+*intro.txt*     For Vim version 7.4.  Last change: 2014 May 24
     20363 
     20364 
     20365                  VIM REFERENCE MANUAL    by Bram Moolenaar
     20366@@ -136,9 +136,10 @@
     20367 Bug reports:                           *bugs* *bug-reports* *bugreport.vim*
     20368 
     20369 Send bug reports to: Vim Developers <vim_dev@vim.org>
     20370-This is a maillist, many people will see the message.  If you don't want that,
     20371-e.g. because it is a security issue, send it to <bugs@vim.org>, this only goes
     20372-to the Vim maintainer (that's Bram).
     20373+This is a maillist, you need to become a member first and many people will see
     20374+the message.  If you don't want that, e.g. because it is a security issue,
     20375+send it to <bugs@vim.org>, this only goes to the Vim maintainer (that's Bram).
     20376+
     20377 Please be brief; all the time that is spent on answering mail is subtracted
     20378 from the time that is spent on improving Vim!  Always give a reproducible
     20379 example and try to find out which settings or other things influence the
    2003220380diff -Naur vim74.orig/runtime/doc/map.txt vim74/runtime/doc/map.txt
    2003320381--- vim74.orig/runtime/doc/map.txt      2013-08-10 11:24:56.000000000 +0000
    20034 +++ vim74/runtime/doc/map.txt   2014-06-01 00:42:51.837537093 +0000
     20382+++ vim74/runtime/doc/map.txt   2014-07-21 23:33:14.446866330 +0000
    2003520383@@ -1,4 +1,4 @@
    2003620384-*map.txt*       For Vim version 7.4.  Last change: 2013 Aug 03
    20037 +*map.txt*       For Vim version 7.4.  Last change: 2014 May 10
     20385+*map.txt*       For Vim version 7.4.  Last change: 2014 Jun 02
    2003820386 
    2003920387 
    2004020388                  VIM REFERENCE MANUAL    by Bram Moolenaar
     20389@@ -60,17 +60,17 @@
     20390                        {rhs}, is then further scanned for mappings.  This
     20391                        allows for nested and recursive use of mappings.
     20392 
     20393-
     20394-:no[remap]  {lhs} {rhs}                |mapmode-nvo|           *:no*  *:noremap*
     20395-:nn[oremap] {lhs} {rhs}                |mapmode-n|             *:nn*  *:nnoremap*
     20396-:vn[oremap] {lhs} {rhs}                |mapmode-v|             *:vn*  *:vnoremap*
     20397-:xn[oremap] {lhs} {rhs}                |mapmode-x|             *:xn*  *:xnoremap*
     20398-:snor[emap] {lhs} {rhs}                |mapmode-s|             *:snor* *:snoremap*
     20399-:ono[remap] {lhs} {rhs}                |mapmode-o|             *:ono* *:onoremap*
     20400-:no[remap]! {lhs} {rhs}                |mapmode-ic|            *:no!* *:noremap!*
     20401-:ino[remap] {lhs} {rhs}                |mapmode-i|             *:ino* *:inoremap*
     20402-:ln[oremap] {lhs} {rhs}                |mapmode-l|             *:ln*  *:lnoremap*
     20403-:cno[remap] {lhs} {rhs}                |mapmode-c|             *:cno* *:cnoremap*
     20404+                                               *:nore* *:norem*
     20405+:no[remap]  {lhs} {rhs}                |mapmode-nvo|   *:no*  *:noremap* *:nor*
     20406+:nn[oremap] {lhs} {rhs}                |mapmode-n|     *:nn*  *:nnoremap*
     20407+:vn[oremap] {lhs} {rhs}                |mapmode-v|     *:vn*  *:vnoremap*
     20408+:xn[oremap] {lhs} {rhs}                |mapmode-x|     *:xn*  *:xnoremap*
     20409+:snor[emap] {lhs} {rhs}                |mapmode-s|     *:snor* *:snoremap*
     20410+:ono[remap] {lhs} {rhs}                |mapmode-o|     *:ono* *:onoremap*
     20411+:no[remap]! {lhs} {rhs}                |mapmode-ic|    *:no!* *:noremap!*
     20412+:ino[remap] {lhs} {rhs}                |mapmode-i|     *:ino* *:inoremap*
     20413+:ln[oremap] {lhs} {rhs}                |mapmode-l|     *:ln*  *:lnoremap*
     20414+:cno[remap] {lhs} {rhs}                |mapmode-c|     *:cno* *:cnoremap*
     20415                        Map the key sequence {lhs} to {rhs} for the modes
     20416                        where the map command applies.  Disallow mapping of
     20417                        {rhs}, to avoid nested and recursive mappings.  Often
    2004120418@@ -306,9 +306,21 @@
    2004220419 to type a count with a zero.
     
    2005620433+:lmap  :lnoremap :lunmap    Insert, Command-line, Lang-Arg
    2005720434+:cmap  :cnoremap :cunmap    Command-line
     20435+
    2005820436 
    2005920437-    commands:                                modes: ~
    20060 +
    2006120438+    COMMANDS                                 MODES ~
    2006220439                                       Normal  Visual+Select  Operator-pending ~
     
    2009920476 To avoid mapping of the characters you type in insert or Command-line mode,
    2010020477 type a CTRL-V first.  The mapping in Insert mode is disabled if the 'paste'
    20101 @@ -1359,6 +1371,8 @@
     20478@@ -816,12 +828,10 @@
     20479          let &selection = "inclusive"
     20480          let reg_save = @@
     20481 
     20482-         if a:0  " Invoked from Visual mode, use '< and '> marks.
     20483-           silent exe "normal! `<" . a:type . "`>y"
     20484+         if a:0  " Invoked from Visual mode, use gv command.
     20485+           silent exe "normal! gvy"
     20486          elseif a:type == 'line'
     20487            silent exe "normal! '[V']y"
     20488-         elseif a:type == 'block'
     20489-           silent exe "normal! `[\<C-V>`]y"
     20490          else
     20491            silent exe "normal! `[v`]y"
     20492          endif
     20493@@ -1359,6 +1369,8 @@
    2010220494 In the cases of the -count and -register attributes, if the optional argument
    2010320495 is supplied, it is removed from the argument list and is available to the
     
    2011020502diff -Naur vim74.orig/runtime/doc/motion.txt vim74/runtime/doc/motion.txt
    2011120503--- vim74.orig/runtime/doc/motion.txt   2013-08-10 11:24:57.000000000 +0000
    20112 +++ vim74/runtime/doc/motion.txt        2014-06-01 00:42:51.920870214 +0000
     20504+++ vim74/runtime/doc/motion.txt        2014-07-21 23:33:14.526866121 +0000
    2011320505@@ -1,4 +1,4 @@
    2011420506-*motion.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
     
    2012820520diff -Naur vim74.orig/runtime/doc/options.txt vim74/runtime/doc/options.txt
    2012920521--- vim74.orig/runtime/doc/options.txt  2013-08-10 11:24:57.000000000 +0000
    20130 +++ vim74/runtime/doc/options.txt       2014-06-01 00:42:51.970870087 +0000
     20522+++ vim74/runtime/doc/options.txt       2014-07-21 23:33:14.600199263 +0000
    2013120523@@ -1,4 +1,4 @@
    2013220524-*options.txt*  For Vim version 7.4.  Last change: 2013 Jul 09
    20133 +*options.txt*  For Vim version 7.4.  Last change: 2014 May 13
     20525+*options.txt*  For Vim version 7.4.  Last change: 2014 Jun 26
    2013420526 
    2013520527 
     
    2014420536                        global
    2014520537                        {not in Vi}
    20146 @@ -1884,8 +1884,8 @@
     20538@@ -1200,6 +1200,38 @@
     20539        break if 'linebreak' is on.  Only works for ASCII and also for 8-bit
     20540        characters when 'encoding' is an 8-bit encoding.
     20541 
     20542+                                               *'breakindent'* *'bri'*
     20543+'breakindent' 'bri'    boolean (default off)
     20544+                       local to window
     20545+                       {not in Vi}
     20546+                       {not available when compiled without the |+linebreak|
     20547+                       feature}
     20548+       Every wrapped line will continue visually indented (same amount of
     20549+       space as the beginning of that line), thus preserving horizontal blocks
     20550+       of text.
     20551+
     20552+                                               *'breakindentopt'* *'briopt'*
     20553+'breakindentopt' 'briopt' string (default empty)
     20554+                       local to window
     20555+                       {not in Vi}
     20556+                       {not available when compiled without the |+linebreak|
     20557+                       feature}
     20558+       Settings for 'breakindent'. It can consist of the following optional
     20559+       items and must be separated by a comma:
     20560+               min:{n}     Minimum text width that will be kept after
     20561+                           applying 'breakindent', even if the resulting
     20562+                           text should normally be narrower. This prevents
     20563+                           text indented almost to the right window border
     20564+                           occupying lot of vertical space when broken.
     20565+               shift:{n}   After applying 'breakindent', the wrapped line's
     20566+                           beginning will be shifted by the given number of
     20567+                           characters.  It permits dynamic French paragraph
     20568+                           indentation (negative) or emphasizing the line
     20569+                           continuation (positive).
     20570+               sbr         Display the 'showbreak' value before applying the
     20571+                           additional indent.
     20572+       The default value for min is 20 and shift is 0.
     20573+
     20574                                                *'browsedir'* *'bsdir'*
     20575 'browsedir' 'bsdir'    string  (default: "last")
     20576                        global
     20577@@ -1884,8 +1916,8 @@
    2014720578                        global
    2014820579                        {not in Vi}
     
    2015520586        Commas can be added for readability.
    2015620587        To avoid problems with flags that are added in the future, use the
    20157 @@ -2477,7 +2477,7 @@
     20588@@ -2477,7 +2509,7 @@
    2015820589 
    2015920590                                                *'directory'* *'dir'*
     
    2016420595                        global
    2016520596        List of directory names for the swap file, separated with commas.
    20166 @@ -4492,6 +4492,8 @@
     20597@@ -3920,12 +3952,13 @@
     20598        NOTE: This option is reset when 'compatible' is set.
     20599 
     20600                                                *'history'* *'hi'*
     20601-'history' 'hi'         number  (Vim default: 20, Vi default: 0)
     20602+'history' 'hi'         number  (Vim default: 50, Vi default: 0)
     20603                        global
     20604                        {not in Vi}
     20605        A history of ":" commands, and a history of previous search patterns
     20606-       are remembered.  This option decides how many entries may be stored in
     20607+       is remembered.  This option decides how many entries may be stored in
     20608        each of these histories (see |cmdline-editing|).
     20609+       The maximum value is 10000.
     20610        NOTE: This option is set to the Vi default value when 'compatible' is
     20611        set and to the Vim default value when 'compatible' is reset.
     20612 
     20613@@ -4492,6 +4525,8 @@
    2016720614        be able to execute Normal mode commands.
    2016820615        This is the opposite of the 'keymap' option, where characters are
     
    2017420621            :set langmap=ΑA,ΒB,ΚC,ΔD,ΕE,ΊF,ΓG,ΗH,ΙI,ΞJ,ΚK,ΛL,ΜM,ΝN,ΟO,ΠP,QQ,ΡR,ΣS,΀T,ΘU,ΩV,WW,ΧX,Î¥Y,ΖZ,αa,βb,ψc,ÎŽd,εe,φf,γg,ηh,ιi,Οj,κk,λl,ÎŒm,Îœn,οo,πp,qq,ρr,σs,τt,Ξu,ωv,ςw,χx,Ï
    2017520622y,ζz
    20176 @@ -4629,7 +4631,7 @@
     20623@@ -4572,12 +4607,13 @@
     20624                        {not in Vi}
     20625                        {not available when compiled without the |+linebreak|
     20626                        feature}
     20627-       If on Vim will wrap long lines at a character in 'breakat' rather
     20628+       If on, Vim will wrap long lines at a character in 'breakat' rather
     20629        than at the last character that fits on the screen.  Unlike
     20630        'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
     20631-       it only affects the way the file is displayed, not its contents.  The
     20632-       value of 'showbreak' is used to put in front of wrapped lines.
     20633-       This option is not used when the 'wrap' option is off or 'list' is on.
     20634+       it only affects the way the file is displayed, not its contents.
     20635+       If 'breakindent' is set, line is visually indented. Then, the value
     20636+       of 'showbreak' is used to put in front of wrapped lines. This option
     20637+       is not used when the 'wrap' option is off.
     20638        Note that <Tab> characters after an <EOL> are mostly not displayed
     20639        with the right amount of white space.
     20640 
     20641@@ -4629,7 +4665,7 @@
    2017720642 
    2017820643                                                *'lispwords'* *'lw'*
     
    2018320648                        {not available when compiled without the |+lispindent|
    2018420649                        feature}
    20185 @@ -4757,8 +4759,9 @@
     20650@@ -4757,8 +4793,9 @@
    2018620651                        global or local to buffer |global-local|
    2018720652                        {not in Vi}
     
    2019520660        about including spaces and backslashes.
    2019620661        Note that a '|' must be escaped twice: once for ":set" and once for
    20197 @@ -6251,6 +6254,9 @@
     20662@@ -6251,6 +6288,9 @@
    2019820663          A     don't give the "ATTENTION" message when an existing swap file
    2019920664                is found.
     
    2020520670        This gives you the opportunity to avoid that a change between buffers
    2020620671        requires you to hit <Enter>, but still gives as useful a message as
    20207 @@ -6555,6 +6561,9 @@
     20672@@ -6555,6 +6595,9 @@
    2020820673        region by listing them: "en_us,en_ca" supports both US and Canadian
    2020920674        English, but not words specific for Australia, New Zealand or Great
     
    2021520680        As a special case the name of a .spl file can be given as-is.  The
    2021620681        first "_xx" in the name is removed and used as the region name
    20217 @@ -6615,6 +6624,10 @@
     20682@@ -6615,6 +6658,10 @@
    2021820683                        top of the suggestion list with the internal methods.
    2021920684                        Lines without a slash are ignored, use this for
     
    2022620691 
    2022720692        expr:{expr}     Evaluate expression {expr}.  Use a function to avoid
    20228 @@ -6878,6 +6891,8 @@
     20693@@ -6878,6 +6925,8 @@
    2022920694        immediately deleted.  When 'swapfile' is set, and 'updatecount' is
    2023020695        non-zero, a swap file is immediately created.
     
    2023520700        This option is used together with 'bufhidden' and 'buftype' to
    2023620701        specify special kinds of buffers.   See |special-buffers|.
    20237 @@ -7498,8 +7513,8 @@
     20702@@ -7498,8 +7547,8 @@
    2023820703                                "s"  = button state
    2023920704                                "c"  = column plus 33
     
    2024620711                        mouse position while the mouse is dragged.  This works
    2024720712                        much faster and more precise.  Your xterm must at
    20248 @@ -7521,29 +7536,35 @@
     20713@@ -7521,29 +7570,35 @@
    2024920714           pterm        QNX pterm mouse handling.
    2025020715                                                        *urxvt-mouse*
     
    2029620761 <
    2029720762                                                *'ttyscroll'* *'tsl'*
    20298 @@ -7594,7 +7615,7 @@
     20763@@ -7594,7 +7649,7 @@
    2029920764                                                *'undolevels'* *'ul'*
    2030020765 'undolevels' 'ul'      number  (default 100, 1000 for Unix, VMS,
     
    2030520770        Maximum number of changes that can be undone.  Since undo information
    2030620771        is kept in memory, higher numbers will cause more memory to be used
    20307 @@ -7605,8 +7626,9 @@
     20772@@ -7605,8 +7660,9 @@
    2030820773 <      But you can also get Vi compatibility by including the 'u' flag in
    2030920774        'cpoptions', and still be able to use CTRL-R to repeat undo.
     
    2031920784diff -Naur vim74.orig/runtime/doc/os_vms.txt vim74/runtime/doc/os_vms.txt
    2032020785--- vim74.orig/runtime/doc/os_vms.txt   2013-08-10 11:24:59.000000000 +0000
    20321 +++ vim74/runtime/doc/os_vms.txt        2014-06-01 00:42:52.130869680 +0000
     20786+++ vim74/runtime/doc/os_vms.txt        2014-07-21 23:33:14.766865495 +0000
    2032220787@@ -1,4 +1,4 @@
    2032320788-*os_vms.txt*    For Vim version 7.4.  Last change: 2011 Aug 14
     
    2036020825diff -Naur vim74.orig/runtime/doc/os_win32.txt vim74/runtime/doc/os_win32.txt
    2036120826--- vim74.orig/runtime/doc/os_win32.txt 2013-08-10 11:24:59.000000000 +0000
    20362 +++ vim74/runtime/doc/os_win32.txt      2014-06-01 00:42:52.144202979 +0000
     20827+++ vim74/runtime/doc/os_win32.txt      2014-07-21 23:33:14.783532118 +0000
    2036320828@@ -93,7 +93,7 @@
    2036420829 $PATH                                                  *win32-PATH*
     
    2037220837diff -Naur vim74.orig/runtime/doc/pattern.txt vim74/runtime/doc/pattern.txt
    2037320838--- vim74.orig/runtime/doc/pattern.txt  2013-08-10 11:24:59.000000000 +0000
    20374 +++ vim74/runtime/doc/pattern.txt       2014-06-01 00:42:52.164202928 +0000
     20839+++ vim74/runtime/doc/pattern.txt       2014-07-21 23:33:14.803532066 +0000
    2037520840@@ -1,4 +1,4 @@
    2037620841-*pattern.txt*   For Vim version 7.4.  Last change: 2013 Jul 06
    20377 +*pattern.txt*   For Vim version 7.4.  Last change: 2014 May 13
     20842+*pattern.txt*   For Vim version 7.4.  Last change: 2014 May 28
    2037820843 
    2037920844 
     
    2042320888 When a composing character appears at the start of the pattern of after an
    2042420889 item that doesn't include the composing character, a match is found at any
     20890@@ -1325,7 +1332,7 @@
     20891                patterns defined by both |matchadd()| and |:match|.
     20892 
     20893                Highlighting matches using |:match| are limited to three
     20894-               matches (aside from |:match|, |:2match| and |:3match|are
     20895+               matches (aside from |:match|, |:2match| and |:3match| are
     20896                available). |matchadd()| does not have this limitation and in
     20897                addition makes it possible to prioritize matches.
     20898 
    2042520899diff -Naur vim74.orig/runtime/doc/pi_getscript.txt vim74/runtime/doc/pi_getscript.txt
    2042620900--- vim74.orig/runtime/doc/pi_getscript.txt     2013-08-10 11:24:59.000000000 +0000
    20427 +++ vim74/runtime/doc/pi_getscript.txt  2014-06-01 00:42:52.197536177 +0000
     20901+++ vim74/runtime/doc/pi_getscript.txt  2014-07-21 23:33:14.836865312 +0000
    2042820902@@ -1,4 +1,4 @@
    2042920903-*pi_getscript.txt*  For Vim version 7.4.  Last change: 2012 Apr 07
     
    2044520919diff -Naur vim74.orig/runtime/doc/pi_netrw.txt vim74/runtime/doc/pi_netrw.txt
    2044620920--- vim74.orig/runtime/doc/pi_netrw.txt 2013-08-10 11:24:59.000000000 +0000
    20447 +++ vim74/runtime/doc/pi_netrw.txt      2014-06-01 00:42:52.234202750 +0000
     20921+++ vim74/runtime/doc/pi_netrw.txt      2014-07-21 23:33:14.936865051 +0000
    2044820922@@ -1,4 +1,4 @@
    2044920923-*pi_netrw.txt*  For Vim version 7.4.  Last change: 2013 May 18
     
    2159822072diff -Naur vim74.orig/runtime/doc/pi_vimball.txt vim74/runtime/doc/pi_vimball.txt
    2159922073--- vim74.orig/runtime/doc/pi_vimball.txt       2013-08-10 11:25:00.000000000 +0000
    21600 +++ vim74/runtime/doc/pi_vimball.txt    2014-06-01 00:42:52.307535896 +0000
     22074+++ vim74/runtime/doc/pi_vimball.txt    2014-07-21 23:33:14.990198246 +0000
    2160122075@@ -188,7 +188,7 @@
    2160222076                          * Changed silent! to sil! (shorter)
     
    2161022084diff -Naur vim74.orig/runtime/doc/quickfix.txt vim74/runtime/doc/quickfix.txt
    2161122085--- vim74.orig/runtime/doc/quickfix.txt 2013-08-10 11:25:00.000000000 +0000
    21612 +++ vim74/runtime/doc/quickfix.txt      2014-06-01 00:42:52.350869119 +0000
     22086+++ vim74/runtime/doc/quickfix.txt      2014-07-21 23:33:15.036864790 +0000
    2161322087@@ -1,4 +1,4 @@
    2161422088-*quickfix.txt*  For Vim version 7.4.  Last change: 2013 Aug 03
     
    2169022164 You need to put the following in "vim-javac-filter" somewhere in your path
    2169122165 (e.g., in ~/bin) and make it executable: >
     22166diff -Naur vim74.orig/runtime/doc/quickref.txt vim74/runtime/doc/quickref.txt
     22167--- vim74.orig/runtime/doc/quickref.txt 2013-08-10 11:25:00.000000000 +0000
     22168+++ vim74/runtime/doc/quickref.txt      2014-07-21 23:33:15.056864738 +0000
     22169@@ -1,4 +1,4 @@
     22170-*quickref.txt*  For Vim version 7.4.  Last change: 2013 Jun 29
     22171+*quickref.txt*  For Vim version 7.4.  Last change: 2014 Jun 25
     22172 
     22173 
     22174                  VIM REFERENCE MANUAL    by Bram Moolenaar
     22175@@ -624,6 +624,8 @@
     22176 'bioskey'        'biosk'   MS-DOS: use bios calls for input characters
     22177 'bomb'                     prepend a Byte Order Mark to the file
     22178 'breakat'        'brk'     characters that may cause a line break
     22179+'breakindent'    'bri'     wrapped line repeats indent
     22180+'breakindentopt'  'briopt'  settings for 'breakindent'
     22181 'browsedir'      'bsdir'   which directory to start browsing in
     22182 'bufhidden'      'bh'      what to do when buffer is no longer in window
     22183 'buflisted'      'bl'      whether the buffer shows up in the buffer list
    2169222184diff -Naur vim74.orig/runtime/doc/recover.txt vim74/runtime/doc/recover.txt
    2169322185--- vim74.orig/runtime/doc/recover.txt  2013-08-10 11:25:00.000000000 +0000
    21694 +++ vim74/runtime/doc/recover.txt       2014-06-01 00:42:52.410868967 +0000
     22186+++ vim74/runtime/doc/recover.txt       2014-07-21 23:33:15.096864634 +0000
    2169522187@@ -1,4 +1,4 @@
    2169622188-*recover.txt*   For Vim version 7.4.  Last change: 2010 Jul 20
     
    2171722209diff -Naur vim74.orig/runtime/doc/repeat.txt vim74/runtime/doc/repeat.txt
    2171822210--- vim74.orig/runtime/doc/repeat.txt   2013-08-10 11:25:00.000000000 +0000
    21719 +++ vim74/runtime/doc/repeat.txt        2014-06-01 00:42:52.434202241 +0000
     22211+++ vim74/runtime/doc/repeat.txt        2014-07-21 23:33:15.120197906 +0000
    2172022212@@ -1,4 +1,4 @@
    2172122213-*repeat.txt*    For Vim version 7.4.  Last change: 2013 Jul 25
     
    2177122263diff -Naur vim74.orig/runtime/doc/sign.txt vim74/runtime/doc/sign.txt
    2177222264--- vim74.orig/runtime/doc/sign.txt     2013-08-10 11:25:01.000000000 +0000
    21773 +++ vim74/runtime/doc/sign.txt  2014-06-01 00:42:52.494202088 +0000
     22265+++ vim74/runtime/doc/sign.txt  2014-07-21 23:33:15.176864425 +0000
    2177422266@@ -1,4 +1,4 @@
    2177522267-*sign.txt*      For Vim version 7.4.  Last change: 2012 Jul 10
     
    2179722289diff -Naur vim74.orig/runtime/doc/spell.txt vim74/runtime/doc/spell.txt
    2179822290--- vim74.orig/runtime/doc/spell.txt    2013-08-10 11:25:01.000000000 +0000
    21799 +++ vim74/runtime/doc/spell.txt 2014-06-01 00:42:52.504202062 +0000
     22291+++ vim74/runtime/doc/spell.txt 2014-07-21 23:33:15.190197724 +0000
    2180022292@@ -1,4 +1,4 @@
    2180122293-*spell.txt*    For Vim version 7.4.  Last change: 2013 Jul 17
    21802 +*spell.txt*    For Vim version 7.4.  Last change: 2013 Nov 12
     22294+*spell.txt*    For Vim version 7.4.  Last change: 2014 Jul 02
    2180322295 
    2180422296 
     
    2181822310 SPELL FILES                                            *spell-load*
    2181922311 
     22312@@ -932,9 +939,10 @@
     22313 
     22314 If you get an E763 warning that the word tables differ you need to update your
     22315 ".spl" spell files.  If you downloaded the files, get the latest version of
     22316-all spell files you use.  Otherwise generate the .spl file again with
     22317-|:mkspell|.  If you still get errors check the FOL, LOW and UPP lines in the
     22318-used .aff files.
     22319+all spell files you use.  If you are only using one, e.g., German, then also
     22320+download the recent English spell files.  Otherwise generate the .spl file
     22321+again with |:mkspell|.  If you still get errors check the FOL, LOW and UPP
     22322+lines in the used .aff files.
     22323 
     22324 The XX.ascii.spl spell file generated with the "-ascii" argument will not
     22325 contain the table with characters, so that it can be combine with spell files
    2182022326diff -Naur vim74.orig/runtime/doc/starting.txt vim74/runtime/doc/starting.txt
    2182122327--- vim74.orig/runtime/doc/starting.txt 2013-08-10 11:25:01.000000000 +0000
    21822 +++ vim74/runtime/doc/starting.txt      2014-06-01 00:42:52.540868636 +0000
     22328+++ vim74/runtime/doc/starting.txt      2014-07-21 23:33:15.223530970 +0000
    2182322329@@ -1,4 +1,4 @@
    2182422330-*starting.txt*  For Vim version 7.4.  Last change: 2013 Jul 20
    21825 +*starting.txt*  For Vim version 7.4.  Last change: 2014 Mar 29
     22331+*starting.txt*  For Vim version 7.4.  Last change: 2014 Jul 09
    2182622332 
    2182722333 
    2182822334                  VIM REFERENCE MANUAL    by Bram Moolenaar
    21829 @@ -1276,8 +1276,10 @@
     22335@@ -167,7 +167,10 @@
     22336                                                        *-+/*
     22337 +/{pat}                The cursor will be positioned on the first line containing
     22338                "pat" in the first file being edited (see |pattern| for the
     22339-               available search patterns).
     22340+               available search patterns).  The search starts at the cursor
     22341+               position, which can be the first line or the cursor position
     22342+               last used from |viminfo|. To force a search from the first
     22343+               line use "+1 +/pat".
     22344 
     22345 +{command}                                             *-+c* *-c*
     22346 -c {command}   {command} will be executed after the first file has been
     22347@@ -1276,8 +1279,10 @@
    2183022348                        When [!] is included an existing file is overwritten.
    2183122349                        When [file] is omitted or is a number from 1 to 9, a
     
    2184022358                        |:loadview| to load this view again.
    2184122359                        When [file] is the name of a file ('viewdir' is not
     22360@@ -1501,7 +1506,7 @@
     22361                        already set (registers, marks, |v:oldfiles|, etc.)
     22362                        will be overwritten   {not in Vi}
     22363 
     22364-                                       *:wv* *:wviminfo* *E137* *E138* *E574*
     22365+                               *:wv* *:wviminfo* *E137* *E138* *E574* *E886*
     22366 :wv[iminfo][!] [file]  Write to viminfo file [file] (default: see above).
     22367                        The information in the file is first read in to make
     22368                        a merge between old and new info.  When [!] is used,
    2184222369diff -Naur vim74.orig/runtime/doc/syntax.txt vim74/runtime/doc/syntax.txt
    2184322370--- vim74.orig/runtime/doc/syntax.txt   2013-08-10 11:25:01.000000000 +0000
    21844 +++ vim74/runtime/doc/syntax.txt        2014-06-01 00:42:52.604201808 +0000
     22371+++ vim74/runtime/doc/syntax.txt        2014-07-21 23:33:15.276864164 +0000
    2184522372@@ -1,4 +1,4 @@
    2184622373-*syntax.txt*   For Vim version 7.4.  Last change: 2013 Jul 05
    21847 +*syntax.txt*   For Vim version 7.4.  Last change: 2014 Apr 05
     22374+*syntax.txt*   For Vim version 7.4.  Last change: 2014 Jun 27
    2184822375 
    2184922376 
     
    2190422431 
    2190522432 Erlang is a functional programming language developed by Ericsson.  Files with
     22433@@ -1647,7 +1688,7 @@
     22434 HTML comments are rather special (see an HTML reference document for the
     22435 details), and the syntax coloring scheme will highlight all errors.
     22436 However, if you prefer to use the wrong style (starts with <!-- and
     22437-ends with --!>) you can define >
     22438+ends with -->) you can define >
     22439        :let html_wrong_comments=1
     22440 
     22441 JavaScript and Visual Basic embedded inside HTML documents are highlighted as
    2190622442@@ -1918,7 +1959,7 @@
    2190722443 There are several implementations for LPC, we intend to support most widely
     
    2191322449 
    2191422450        :let lpc_pre_v22 = 1
     22451@@ -2238,7 +2279,7 @@
     22452 
     22453        :let perl_include_pod = 0
     22454 
     22455-The reduce the complexity of parsing (and increase performance) you can switch
     22456+To reduce the complexity of parsing (and increase performance) you can switch
     22457 off two elements in the parsing of variable names and contents. >
     22458 
     22459 To handle package references in variable and function names not differently
    2191522460@@ -3156,18 +3197,16 @@
    2191622461 embedded script highlighting they wish to have. >
     
    2194422489diff -Naur vim74.orig/runtime/doc/tags vim74/runtime/doc/tags
    2194522490--- vim74.orig/runtime/doc/tags 2013-08-10 12:23:34.000000000 +0000
    21946 +++ vim74/runtime/doc/tags      2014-06-01 00:42:52.630868407 +0000
     22491+++ vim74/runtime/doc/tags      2014-07-21 23:33:15.336864008 +0000
    2194722492@@ -12,6 +12,7 @@
    2194822493 %      motion.txt      /*%*
     
    2195322498 %:gs   cmdline.txt     /*%:gs*
    2195422499 %:h    cmdline.txt     /*%:h*
    21955 @@ -1140,6 +1141,7 @@
     22500@@ -90,6 +91,10 @@
     22501 'bl'   options.txt     /*'bl'*
     22502 'bomb' options.txt     /*'bomb'*
     22503 'breakat'      options.txt     /*'breakat'*
     22504+'breakindent'  options.txt     /*'breakindent'*
     22505+'breakindentopt'       options.txt     /*'breakindentopt'*
     22506+'bri'  options.txt     /*'bri'*
     22507+'briopt'       options.txt     /*'briopt'*
     22508 'brk'  options.txt     /*'brk'*
     22509 'browsedir'    options.txt     /*'browsedir'*
     22510 'bs'   options.txt     /*'bs'*
     22511@@ -1140,6 +1145,7 @@
    2195622512 +GUI_Photon    various.txt     /*+GUI_Photon*
    2195722513 +GUI_neXtaw    various.txt     /*+GUI_neXtaw*
     
    2196122517 +autocmd       various.txt     /*+autocmd*
    2196222518 +balloon_eval  various.txt     /*+balloon_eval*
    21963 @@ -1199,6 +1201,7 @@
     22519@@ -1199,6 +1205,7 @@
    2196422520 +mouse various.txt     /*+mouse*
    2196522521 +mouse_dec     various.txt     /*+mouse_dec*
     
    2196922525 +mouse_pterm   various.txt     /*+mouse_pterm*
    2197022526 +mouse_sgr     various.txt     /*+mouse_sgr*
    21971 @@ -1262,6 +1265,7 @@
     22527@@ -1262,6 +1269,7 @@
    2197222528 +writebackup   various.txt     /*+writebackup*
    2197322529 +xfontset      various.txt     /*+xfontset*
     
    2197722533 +xsmp  various.txt     /*+xsmp*
    2197822534 +xsmp_interact various.txt     /*+xsmp_interact*
    21979 @@ -1412,6 +1416,7 @@
     22535@@ -1412,6 +1420,7 @@
    2198022536 /\%>c  pattern.txt     /*\/\\%>c*
    2198122537 /\%>l  pattern.txt     /*\/\\%>l*
     
    2198522541 /\%V   pattern.txt     /*\/\\%V*
    2198622542 /\%[]  pattern.txt     /*\/\\%[]*
    21987 @@ -1786,6 +1791,7 @@
     22543@@ -1786,6 +1795,7 @@
    2198822544 :3match        pattern.txt     /*:3match*
    2198922545 ::.    cmdline.txt     /*::.*
     
    2199322549 ::gs   cmdline.txt     /*::gs*
    2199422550 ::h    cmdline.txt     /*::h*
    21995 @@ -1825,6 +1831,7 @@
     22551@@ -1825,6 +1835,7 @@
    2199622552 :GnatPretty    ft_ada.txt      /*:GnatPretty*
    2199722553 :GnatTags      ft_ada.txt      /*:GnatTags*
     
    2200122557 :MkVimball     pi_vimball.txt  /*:MkVimball*
    2200222558 :N     editing.txt     /*:N*
    22003 @@ -1836,6 +1843,7 @@
     22559@@ -1836,6 +1847,7 @@
    2200422560 :Nread pi_netrw.txt    /*:Nread*
    2200522561 :Ns    pi_netrw.txt    /*:Ns*
     
    2200922565 :Nwrite        pi_netrw.txt    /*:Nwrite*
    2201022566 :P     various.txt     /*:P*
    22011 @@ -1967,8 +1975,8 @@
     22567@@ -1967,8 +1979,8 @@
    2201222568 :cabc  map.txt /*:cabc*
    2201322569 :cabclear      map.txt /*:cabclear*
     
    2201922575 :caddf quickfix.txt    /*:caddf*
    2202022576 :caddfile      quickfix.txt    /*:caddfile*
    22021 @@ -2212,6 +2220,9 @@
     22577@@ -2212,6 +2224,9 @@
    2202222578 :foldopen      fold.txt        /*:foldopen*
    2202322579 :for   eval.txt        /*:for*
     
    2202922585 :function-verbose      eval.txt        /*:function-verbose*
    2203022586 :g     repeat.txt      /*:g*
    22031 @@ -2298,6 +2309,8 @@
     22587@@ -2298,6 +2313,8 @@
    2203222588 :keepj motion.txt      /*:keepj*
    2203322589 :keepjumps     motion.txt      /*:keepjumps*
     
    2203822594 :lN    quickfix.txt    /*:lN*
    2203922595 :lNext quickfix.txt    /*:lNext*
    22040 @@ -2489,6 +2502,7 @@
     22596@@ -2489,6 +2506,7 @@
    2204122597 :nbkey netbeans.txt    /*:nbkey*
    2204222598 :nbstart       netbeans.txt    /*:nbstart*
     
    2204622602 :next  editing.txt     /*:next*
    2204722603 :next_f        editing.txt     /*:next_f*
    22048 @@ -2518,6 +2532,8 @@
     22604@@ -2509,8 +2527,11 @@
     22605 :noautocmd     autocmd.txt     /*:noautocmd*
     22606 :noh   pattern.txt     /*:noh*
     22607 :nohlsearch    pattern.txt     /*:nohlsearch*
     22608+:nor   map.txt /*:nor*
     22609+:nore  map.txt /*:nore*
     22610 :norea map.txt /*:norea*
     22611 :noreabbrev    map.txt /*:noreabbrev*
     22612+:norem map.txt /*:norem*
     22613 :noremap       map.txt /*:noremap*
     22614 :noremap!      map.txt /*:noremap!*
     22615 :noreme        gui.txt /*:noreme*
     22616@@ -2518,6 +2539,8 @@
    2204922617 :norm  various.txt     /*:norm*
    2205022618 :normal        various.txt     /*:normal*
     
    2205522623 :number        various.txt     /*:number*
    2205622624 :nun   map.txt /*:nun*
    22057 @@ -2738,6 +2754,7 @@
     22625@@ -2738,6 +2761,7 @@
    2205822626 :sign-jump     sign.txt        /*:sign-jump*
    2205922627 :sign-list     sign.txt        /*:sign-list*
     
    2206322631 :sign-unplace  sign.txt        /*:sign-unplace*
    2206422632 :sil   various.txt     /*:sil*
    22065 @@ -4294,6 +4311,11 @@
     22633@@ -4294,6 +4318,12 @@
    2206622634 E879   syntax.txt      /*E879*
    2206722635 E88    windows.txt     /*E88*
     
    2207222640+E884   eval.txt        /*E884*
    2207322641+E885   sign.txt        /*E885*
     22642+E886   starting.txt    /*E886*
    2207422643 E89    message.txt     /*E89*
    2207522644 E90    message.txt     /*E90*
    2207622645 E91    options.txt     /*E91*
    22077 @@ -4423,6 +4445,13 @@
     22646@@ -4423,6 +4453,13 @@
    2207822647 OverTheSpot    mbyte.txt       /*OverTheSpot*
    2207922648 P      change.txt      /*P*
     
    2208922658 Perl   if_perl.txt     /*Perl*
    2209022659 Posix  intro.txt       /*Posix*
    22091 @@ -4900,6 +4929,7 @@
     22660@@ -4766,6 +4803,7 @@
     22661 arglist        editing.txt     /*arglist*
     22662 arglist-position       editing.txt     /*arglist-position*
     22663 arglist-quit   usr_07.txt      /*arglist-quit*
     22664+arglistid()    eval.txt        /*arglistid()*
     22665 argument-list  editing.txt     /*argument-list*
     22666 argv() eval.txt        /*argv()*
     22667 as     motion.txt      /*as*
     22668@@ -4900,6 +4938,7 @@
    2209222669 byte-count     editing.txt     /*byte-count*
    2209322670 byte2line()    eval.txt        /*byte2line()*
     
    2209722674 c      change.txt      /*c*
    2209822675 c.vim  syntax.txt      /*c.vim*
    22099 @@ -5350,6 +5380,7 @@
     22676@@ -5350,6 +5389,7 @@
    2210022677 dialog gui_w32.txt     /*dialog*
    2210122678 dialogs-added  version5.txt    /*dialogs-added*
     
    2210522682 dict-identity  eval.txt        /*dict-identity*
    2210622683 dict-modification      eval.txt        /*dict-modification*
    22107 @@ -5458,6 +5489,8 @@
     22684@@ -5458,6 +5498,8 @@
    2210822685 escape intro.txt       /*escape*
    2210922686 escape()       eval.txt        /*escape()*
     
    2211422691 eval() eval.txt        /*eval()*
    2211522692 eval-examples  eval.txt        /*eval-examples*
    22116 @@ -5492,6 +5525,7 @@
     22693@@ -5492,6 +5534,7 @@
    2211722694 exclusive-linewise     motion.txt      /*exclusive-linewise*
    2211822695 executable()   eval.txt        /*executable()*
     
    2212222699 exists()       eval.txt        /*exists()*
    2212322700 exp()  eval.txt        /*exp()*
    22124 @@ -5708,6 +5742,7 @@
     22701@@ -5708,6 +5751,7 @@
    2212522702 ft-changelog-syntax    syntax.txt      /*ft-changelog-syntax*
    2212622703 ft-chill-syntax        syntax.txt      /*ft-chill-syntax*
     
    2213022707 ft-coldfusion-syntax   syntax.txt      /*ft-coldfusion-syntax*
    2213122708 ft-cpp-syntax  syntax.txt      /*ft-cpp-syntax*
    22132 @@ -5724,6 +5759,7 @@
     22709@@ -5724,6 +5768,7 @@
    2213322710 ft-dtd-syntax  syntax.txt      /*ft-dtd-syntax*
    2213422711 ft-eiffel-syntax       syntax.txt      /*ft-eiffel-syntax*
     
    2213822715 ft-form-syntax syntax.txt      /*ft-form-syntax*
    2213922716 ft-fortran-indent      indent.txt      /*ft-fortran-indent*
    22140 @@ -5876,6 +5912,8 @@
     22717@@ -5876,6 +5921,8 @@
    2214122718 g:ada_with_gnat_project_files  ft_ada.txt      /*g:ada_with_gnat_project_files*
    2214222719 g:ada_withuse_ordinary ft_ada.txt      /*g:ada_withuse_ordinary*
     
    2214722724 g:clojure_fuzzy_indent_blacklist       indent.txt      /*g:clojure_fuzzy_indent_blacklist*
    2214822725 g:clojure_fuzzy_indent_patterns        indent.txt      /*g:clojure_fuzzy_indent_patterns*
    22149 @@ -5924,6 +5962,7 @@
     22726@@ -5924,6 +5971,7 @@
    2215022727 g:html_use_encoding    syntax.txt      /*g:html_use_encoding*
    2215122728 g:html_use_xhtml       syntax.txt      /*g:html_use_xhtml*
     
    2215522732 g:netrw_altv   pi_netrw.txt    /*g:netrw_altv*
    2215622733 g:netrw_banner pi_netrw.txt    /*g:netrw_banner*
    22157 @@ -5944,6 +5983,7 @@
     22734@@ -5944,6 +5992,7 @@
    2215822735 g:netrw_errorlvl       pi_netrw.txt    /*g:netrw_errorlvl*
    2215922736 g:netrw_fastbrowse     pi_netrw.txt    /*g:netrw_fastbrowse*
     
    2216322740 g:netrw_ftp    pi_netrw.txt    /*g:netrw_ftp*
    2216422741 g:netrw_ftp_browse_reject      pi_netrw.txt    /*g:netrw_ftp_browse_reject*
    22165 @@ -5958,6 +5998,7 @@
     22742@@ -5958,6 +6007,7 @@
    2216622743 g:netrw_hide   pi_netrw.txt    /*g:netrw_hide*
    2216722744 g:netrw_home   pi_netrw.txt    /*g:netrw_home*
     
    2217122748 g:netrw_ignorenetrc    pi_netrw.txt    /*g:netrw_ignorenetrc*
    2217222749 g:netrw_keepdir        pi_netrw.txt    /*g:netrw_keepdir*
    22173 @@ -6358,6 +6399,7 @@
     22750@@ -6087,6 +6137,7 @@
     22751 getcmdline()   eval.txt        /*getcmdline()*
     22752 getcmdpos()    eval.txt        /*getcmdpos()*
     22753 getcmdtype()   eval.txt        /*getcmdtype()*
     22754+getcurpos()    eval.txt        /*getcurpos()*
     22755 getcwd()       eval.txt        /*getcwd()*
     22756 getfontname()  eval.txt        /*getfontname()*
     22757 getfperm()     eval.txt        /*getfperm()*
     22758@@ -6358,6 +6409,7 @@
    2217422759 hl-WildMenu    syntax.txt      /*hl-WildMenu*
    2217522760 hlID() eval.txt        /*hlID()*
     
    2217922764 home   intro.txt       /*home*
    2218022765 home-replace   editing.txt     /*home-replace*
    22181 @@ -6669,6 +6711,7 @@
     22766@@ -6669,6 +6721,7 @@
    2218222767 linewise-visual        visual.txt      /*linewise-visual*
    2218322768 lisp.vim       syntax.txt      /*lisp.vim*
     
    2218722772 list-identity  eval.txt        /*list-identity*
    2218822773 list-index     eval.txt        /*list-index*
    22189 @@ -6921,6 +6964,15 @@
     22774@@ -6780,6 +6833,7 @@
     22775 match-highlight        pattern.txt     /*match-highlight*
     22776 match-parens   tips.txt        /*match-parens*
     22777 matchadd()     eval.txt        /*matchadd()*
     22778+matchaddpos()  eval.txt        /*matchaddpos()*
     22779 matcharg()     eval.txt        /*matcharg()*
     22780 matchdelete()  eval.txt        /*matchdelete()*
     22781 matchend()     eval.txt        /*matchend()*
     22782@@ -6921,6 +6975,15 @@
    2219022783 netrw  pi_netrw.txt    /*netrw*
    2219122784 netrw-%        pi_netrw.txt    /*netrw-%*
     
    2220322796 netrw-D        pi_netrw.txt    /*netrw-D*
    2220422797 netrw-O        pi_netrw.txt    /*netrw-O*
    22205 @@ -6978,6 +7030,7 @@
     22798@@ -6978,6 +7041,7 @@
    2220622799 netrw-getftype pi_netrw.txt    /*netrw-getftype*
    2220722800 netrw-gf       pi_netrw.txt    /*netrw-gf*
     
    2221122804 netrw-gx       pi_netrw.txt    /*netrw-gx*
    2221222805 netrw-handler  pi_netrw.txt    /*netrw-handler*
    22213 @@ -6992,6 +7045,7 @@
     22806@@ -6992,6 +7056,7 @@
    2221422807 netrw-internal-variables       pi_netrw.txt    /*netrw-internal-variables*
    2221522808 netrw-intro-browse     pi_netrw.txt    /*netrw-intro-browse*
     
    2221922812 netrw-listbookmark     pi_netrw.txt    /*netrw-listbookmark*
    2222022813 netrw-listhack pi_netrw.txt    /*netrw-listhack*
    22221 @@ -7022,6 +7076,7 @@
     22814@@ -7022,6 +7087,7 @@
    2222222815 netrw-nexplore pi_netrw.txt    /*netrw-nexplore*
    2222322816 netrw-noload   pi_netrw.txt    /*netrw-noload*
     
    2222722820 netrw-o        pi_netrw.txt    /*netrw-o*
    2222822821 netrw-options  pi_netrw.txt    /*netrw-options*
    22229 @@ -7033,6 +7088,7 @@
     22822@@ -7033,6 +7099,7 @@
    2223022823 netrw-p13      pi_netrw.txt    /*netrw-p13*
    2223122824 netrw-p14      pi_netrw.txt    /*netrw-p14*
     
    2223522828 netrw-p3       pi_netrw.txt    /*netrw-p3*
    2223622829 netrw-p4       pi_netrw.txt    /*netrw-p4*
    22237 @@ -7374,6 +7430,7 @@
     22830@@ -7374,6 +7441,7 @@
    2223822831 profiling      repeat.txt      /*profiling*
    2223922832 profiling-variable     eval.txt        /*profiling-variable*
     
    2224322836 pronounce      intro.txt       /*pronounce*
    2224422837 psql   ft_sql.txt      /*psql*
    22245 @@ -7577,6 +7634,7 @@
     22838@@ -7577,6 +7645,7 @@
    2224622839 s/\3   change.txt      /*s\/\\3*
    2224722840 s/\9   change.txt      /*s\/\\9*
     
    2225122844 s/\L   change.txt      /*s\/\\L*
    2225222845 s/\U   change.txt      /*s\/\\U*
    22253 @@ -7787,6 +7845,7 @@
     22846@@ -7787,6 +7856,7 @@
    2225422847 spell-affix-mbyte      spell.txt       /*spell-affix-mbyte*
    2225522848 spell-affix-not-supported      spell.txt       /*spell-affix-not-supported*
     
    2225922852 spell-dic-format       spell.txt       /*spell-dic-format*
    2226022853 spell-double-scoring   spell.txt       /*spell-double-scoring*
    22261 @@ -7872,6 +7931,7 @@
     22854@@ -7872,6 +7942,7 @@
    2226222855 strdisplaywidth()      eval.txt        /*strdisplaywidth()*
    2226322856 strftime()     eval.txt        /*strftime()*
     
    2226722860 string-functions       usr_41.txt      /*string-functions*
    2226822861 string-match   eval.txt        /*string-match*
    22269 @@ -7936,6 +7996,7 @@
     22862@@ -7936,6 +8007,7 @@
    2227022863 system()       eval.txt        /*system()*
    2227122864 system-functions       usr_41.txt      /*system-functions*
     
    2227522868 t      motion.txt      /*t*
    2227622869 t:     eval.txt        /*t:*
    22277 @@ -8280,6 +8341,7 @@
     22870@@ -8280,6 +8352,7 @@
    2227822871 undofile()     eval.txt        /*undofile()*
    2227922872 undotree()     eval.txt        /*undotree()*
     
    2228322876 unlisted-buffer        windows.txt     /*unlisted-buffer*
    2228422877 up-down-motions        motion.txt      /*up-down-motions*
    22285 @@ -8364,6 +8426,7 @@
     22878@@ -8364,6 +8437,7 @@
    2228622879 v:foldend      eval.txt        /*v:foldend*
    2228722880 v:foldlevel    eval.txt        /*v:foldlevel*
     
    2229122884 v:key  eval.txt        /*v:key*
    2229222885 v:lang eval.txt        /*v:lang*
    22293 @@ -8377,6 +8440,7 @@
     22886@@ -8377,6 +8451,7 @@
    2229422887 v:prevcount    eval.txt        /*v:prevcount*
    2229522888 v:profiling    eval.txt        /*v:profiling*
     
    2230122894diff -Naur vim74.orig/runtime/doc/tagsrch.txt vim74/runtime/doc/tagsrch.txt
    2230222895--- vim74.orig/runtime/doc/tagsrch.txt  2013-08-10 11:25:02.000000000 +0000
    22303 +++ vim74/runtime/doc/tagsrch.txt       2014-06-01 00:42:52.637535056 +0000
     22896+++ vim74/runtime/doc/tagsrch.txt       2014-07-21 23:33:15.386863877 +0000
    2230422897@@ -1,4 +1,4 @@
    2230522898-*tagsrch.txt*   For Vim version 7.4.  Last change: 2013 Jul 28
     
    2232522918diff -Naur vim74.orig/runtime/doc/term.txt vim74/runtime/doc/term.txt
    2232622919--- vim74.orig/runtime/doc/term.txt     2013-08-10 11:25:02.000000000 +0000
    22327 +++ vim74/runtime/doc/term.txt  2014-06-01 00:42:52.644201706 +0000
     22920+++ vim74/runtime/doc/term.txt  2014-07-21 23:33:15.423530448 +0000
    2232822921@@ -1,4 +1,4 @@
    2232922922-*term.txt*      For Vim version 7.4.  Last change: 2013 Mar 13
     
    2234522938diff -Naur vim74.orig/runtime/doc/todo.txt vim74/runtime/doc/todo.txt
    2234622939--- vim74.orig/runtime/doc/todo.txt     2013-08-10 11:25:02.000000000 +0000
    22347 +++ vim74/runtime/doc/todo.txt  2014-06-01 00:42:52.700868228 +0000
     22940+++ vim74/runtime/doc/todo.txt  2014-07-21 23:33:15.583530030 +0000
    2234822941@@ -1,4 +1,4 @@
    2234922942-*todo.txt*      For Vim version 7.4.  Last change: 2013 Aug 10
    22350 +*todo.txt*      For Vim version 7.4.  Last change: 2014 May 22
     22943+*todo.txt*      For Vim version 7.4.  Last change: 2014 Jul 19
    2235122944 
    2235222945 
    2235322946                  VIM REFERENCE MANUAL    by Bram Moolenaar
    22354 @@ -34,38 +34,242 @@
     22947@@ -34,38 +34,289 @@
    2235522948                                                        *known-bugs*
    2235622949 -------------------- Known bugs and current work -----------------------
    2235722950 
     22951+Completion menu: remove redraw (Hirohito Higashi)
     22952+
    2235822953+Regexp problems:
    2235922954+- Bug with pattern: '\vblock (\d+)\.\n.*\d+%(\1)@<!\.$'
     
    2236922964+  \%u, \%x, \%o, \%d followed by a composing character
    2237022965+
     22966+Crash when splitting the window when the size is tiny.
     22967+(Yukihiro Nakadaira, 2014 Jul 15-16)
     22968+
     22969+Another problem with splitting window. (Yukihiro Nakadaira, 2014 Jul 17)
     22970+Patch Jul 17.
     22971+
     22972+Using freed memory when jumping from a quickfix list. (lcd47, 2014 Jul 17)
     22973+
     22974+Patch to fix valgrind error. (Dominique Pelle, 2014 Jul 9)
     22975+
     22976+Vroom filetype support. (David Barnett, 2014 Jul 10)
     22977+
     22978+u_undo error.  Reproduce with description from Ayberk Ozgur, 2014 Jul 17.
     22979+
     22980+Updated Django files. (Dave Hodder, 2014 Jul 13)
     22981+
     22982+Title of quickfist list is not kept for setqflist(list 'r').
     22983+(Lcd, 2014 Jul 17)  With test Jul 18.
     22984+
     22985+Patch to fix noremap flags not cleared after typing Esc. (Jacob Niehus, 2014
     22986+Jul 9)
     22987+
    2237122988+Problem that a previous silent ":throw" causes a following try/catch not to
    2237222989+work. (ZyX, 2013 Sep 28)
    2237322990+
     22991+DiffChange highlighting doesn't combine with 'cursurline'. (Benjamin Fritz)
     22992+Patch by Christian (2014 Jul 12)
     22993+
     22994+BufWinLeave autocommand executed in the wrong buffer? (Davit Samvelyan, 2014
     22995+Jul 14)
     22996+
     22997+When 'clipboard' is "unnamed", :g/pat/d is very slow.  Only set the clipboard
     22998+after the last delete? (Praful, 2014 May 28)
     22999+Patch by Christian Brabandt, 2014 Jun 18.  Update Jun 25.
     23000+
     23001+Completion for :buf does not use 'wildignorecase'. (Akshay H, 2014 May 31)
     23002+
    2237423003+":cd C:\Windows\System32\drivers\etc*" does not work, even though the
    2237523004+directory exists. (Sergio Gallelli, 2013 Dec 29)
    2237623005+
     23006+The entries added by matchaddpos() are returned by getmatches() but can't be
     23007+set with setmatches(). (lcd47, 2014 Jun 29)
     23008+
    2237723009+Problem using ":try" inside ":execute". (ZyX, 2013 Sep 15)
    2237823010+
    22379 +Setting 'ttymouse' empty causes Dec mouse to be detected. (Elijah Griffin,
    22380 +2014 May 13)
    22381 +
    2238223011 Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
    2238323012 
    2238423013-Patch to add "acl" and "xpm" as a feature. (Ken Takata, 2013 Jul 8)
     23014+When using an undo file, also restore the changelist, so that "g;" works.
     23015+
     23016+Value returned by virtcol() changes depending on how lines wrap.  This is
     23017+inconsistant with the documentation.
     23018+
    2238523019+MS-Windows: Crash opening very long file name starting with "\\".
    2238623020+(Christian Brock, 2012 Jun 29)
     
    2239023024+Adding "~" to 'cdpath' doesn't work for completion?  (Davido, 2013 Aug 19)
    2239123025+
     23026+"hi link" does not respect groups with GUI settings only. (Mark Lodato, 2014
     23027+Jun 8)
     23028+
    2239223029+Syntax file for gnuplot.  Existing one is very old. (Andrew Rasmussen, 2014
    2239323030+Feb 24)
    2239423031+
    22395 +Add digraph for Rouble: =P.  What's the Unicode?
    22396 +
    2239723032+Issue 174: Detect Mason files.
    2239823033+
     
    2240223037+
    2240323038+PHP syntax is extremely slow. (Anhad Jai Singh, 2014 Jan 19)
     23039+
     23040+Patch for matchparen. (James McCoy, 2014 Jul 11)
    2240423041+
    2240523042+Spell files use a latin single quote. Unicode also has another single quote:
     
    2241323050+
    2241423051+Win32: use 64 bit stat() if possible. (Ken Takata, 2014 May 12)
    22415 +More tests May 14.
     23052+More tests May 14. Update May 29.
     23053 
     23054-Patch to make has() check for Vim version and patch at the same time.
     23055-(Marc Weber, 2013 Jun 7)
     23056+The garbage collector may use too much stack.  Make set_ref_in_item()
     23057+iterative instead of recursive.   Test program by Marc Weber (2013 Dec 10)
     23058+Patch by Ben Fritz, 2014 Jun 22.
    2241623059+
    2241723060+Idea: For a window in the middle (has window above and below it), use
     
    2242123064+Can we make ":unlet $VAR" use unsetenv() to delete the env var?
    2242223065+What for systems that don't have unsetenv()?
    22423 +
    22424 +Patch to make getchar() work for typing Esc. (Yasuhiro Matsumoto, 2014 May 13)
    22425 +
    22426 +Patch for problem that v:register is set to '_' after deleting into the black
    22427 +hole register.
    2242823066+
    2242923067+This does not give an error: (Andre Sihera, 2014 Mar 21)
     
    2243623074+from?
    2243723075+
    22438 +Patch to add arglistid(), get the ID of the currently used argument list.
    22439 +(Marcin Szamotulski, 2014 Apr 27)
     23076+Problem with upwards search on Windows (works OK on Linux). (Brett Stahlman,
     23077+2014 Jun 8)
    2244023078+
    2244123079+Include a plugin manager with Vim? Neobundle seems to be the best currently.
     
    2247623114+normal spell file. (Enno Nagel, 2014 Mar 29)
    2247723115+
    22478 +-   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
    22479 +    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
    22480 +    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
    22481 +    More recent version: https://retracile.net/wiki/VimBreakIndent
    22482 +    Posted to vim-dev by Taylor Hedberg, 2011 Nov 25
    22483 +    Update by Taylor Hedberg, 2013 May 30.
    22484 +    Updated for Vim 7.4 by Ken Takata, 2013 Oct 5.
    22485 +    Update by Christian Brabandt, 2014 May 9.  Remarks by Ken Takata.
    22486 +    Update by Christian 2014 May 12, github link on May 15
     23116+CTRL-] in Visual mode uses the selected text as a tag.  This does not work
     23117+when preceded with CTRL-W. (Patrick Hemmer, 2014 Jun 28)
    2248723118+
    2248823119+When typing the first character of a command, e.g. "f", then using a menu, the
     
    2249523126+various other commands.  (ZyX, 2014 Mar 30)
    2249623127+
     23128+patch to skip sort if no line matches the expression.
     23129+(Christian Brabandt, 2014 Jun 25)
     23130+
     23131+Patch to add sortuniq(). (Cade Forester, 2014 Mar 19)
     23132+Or add uniq() instead?  Patch by lcd47, but it has problems.
     23133+
     23134+Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
     23135+30)
     23136+
     23137+Patch to support expression argument to sort() instead of a function name.
     23138+Yasuhiro Matsumoto, 2013 May 31.
     23139+Or should we add a more general mechanism, like lambda functions?
     23140+
    2249723141+VMS: Select() doesn't work properly, typing ESC may hang Vim.  Use sys$qiow
    2249823142+instead. (Samuel Ferencik, 2013 Sep 28)
    22499  
    22500 -Patch to make has() check for Vim version and patch at the same time.
    22501 -(Marc Weber, 2013 Jun 7)
     23143+
    2250223144+Patch for XDG base directory support. (Jean François Bignolles, 2014 Mar 4)
    22503 +
    22504 +Patch to add flag to shortmess to avoid giving completion messages.
    22505 +(Shougo Matsu, 2014 Jan 6, update Jan 11)
     23145+Remark on the docs.  Should not be a compile time feature.  But then what?
     23146+
     23147+Completion of ":e" is ":earlier", whould be ":edit".  Complete to the matching
     23148+command instead of doing this alphabetically. (Mikel Jorgensen)
    2250623149+
    2250723150+Patch to add v:completed_item. (Shougo Matsu, 2013 Nov 29).
     
    2251023153+
    2251123154+Patch to define macros for hardcoded values. (Elias Diem, 2013 Dec 14)
    22512 +
    22513 +Patch to add sortuniq(). (Cade Forester, 2014 Mar 19)
    22514 +Or add uniq() instead?  Patch by lcd47, but it has problems.
    2251523155+
    2251623156+Perl: support for Activestate perl 5.18: Issue 170.
     
    2252723167+Patch to add ":undorecover", get as much text out of the undo file as
    2252823168+possible. (Christian Brabandt, 2014 Mar 12)
    22529 +
    22530 +Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
    2253123169 
    2253223170-Several Win32 functions are not using Unicode.
    2253323171-Patches to fix this. (Ken Takata, 2013 Aug 9)
     23172+Include Haiku port? (Adrien Destugues, Siarzhuk Zharski, 2013 Oct 24)
     23173+
    2253423174+Updated spec ftplugin. (Matěj Cepl, 2013 Oct 16)
    2253523175+
     
    2260423244 
    2260523245 The BufUnload event is triggered when re-using the empty buffer.
    22606 @@ -76,6 +280,10 @@
     23246@@ -76,6 +327,10 @@
    2260723247 - The word that was selected (empty if abandoned complete)
    2260823248 - Type of completion: tag, omnifunc, user func.
     
    2261523255 That is, calling a dictionary function on an autoloaded dict.
    2261623256 Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
    22617 @@ -83,10 +291,6 @@
     23257@@ -83,17 +338,19 @@
    2261823258 Patch by Christian Brabandt, 2013 Mar 23.
    2261923259 Not 100% sure this is the right solution.
     
    2262323263-Stocker, 2012 Jan 5)
    2262423264-
    22625  Patch to support expression argument to sort() instead of a function name.
    22626  Yasuhiro Matsumoto, 2013 May 31.
    22627  Or should we add a more general mechanism, like lambda functions?
    22628 @@ -94,6 +298,19 @@
     23265-Patch to support expression argument to sort() instead of a function name.
     23266-Yasuhiro Matsumoto, 2013 May 31.
     23267-Or should we add a more general mechanism, like lambda functions?
     23268-
    2262923269 Problem caused by patch 7.3.638: window->open does not update window
    2263023270 correctly. Issue 91.
     
    2263223272+Patch to add {lhs} to :mapclear: clear all maps starting with {lhs}.
    2263323273+(Christian Brabandt, 2013 Dec 9)
    22634 +
    22635 +The garbage collector may use too much stack.  Make set_ref_in_item()
    22636 +iterative instead of recursive.   Test program by Marc Weber (2013 Dec 10)
    2263723274+
    2263823275+Exception caused by argument of return is not caught by try/catch.
     
    2264623283 2013 Mar 19, later message)
    2264723284 
    22648 @@ -108,6 +325,8 @@
     23285@@ -108,6 +365,8 @@
    2264923286 Bug with 'cursorline' in diff mode.  Line being scrolled into view gets
    2265023287 highlighted as the cursor line.  (Alessandro Ivaldi, 2013 Jun 4)
     
    2265523292 May 17: with winlist() and tabpagelist().
    2265623293 May 19: with local variables.
    22657 @@ -119,6 +338,8 @@
     23294@@ -119,10 +378,13 @@
    2265823295 Patch from Christian Brabandt to make the "buffer" argument for ":sign place"
    2265923296 optional. (2013 Jul 12)
     
    2266423301 functions. (Christian Brabandt, 2013 May 8, update May 21)
    2266523302 Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
    22666 @@ -149,11 +370,19 @@
     23303 Second one. Update May 22.
     23304+Update by Daniel Hahler, 2014 Jul 4.
     23305 
     23306 Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
     23307 
     23308@@ -137,9 +399,6 @@
     23309 
     23310 Bug: findfile("any", "file:///tmp;") does not work.
     23311 
     23312-v:register is not directly reset to " after a delete command that specifies a
     23313-register.  It is reset after the next command. (Steve Vermeulen, 2013 Mar 16)
     23314-
     23315 'ff' is wrong for one-line file without EOL. (Issue 77)
     23316 
     23317 Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
     23318@@ -149,11 +408,19 @@
    2266723319 process that is running.  It might actually be some other program, e.g. after
    2266823320 a reboot.
     
    2268623338 not correctly updated. (Paul Harris, 2012 Feb 27)
    2268723339 
    22688 @@ -167,8 +396,17 @@
     23340@@ -167,8 +434,17 @@
    2268923341 
    2269023342 Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27)
     
    2270423356 Patch to add 'completeselect' option.  Specifies how to select a candidate in
    2270523357 insert completion. (Shougo, 2013 May 29)
    22706 @@ -182,9 +420,6 @@
     23358@@ -182,9 +458,6 @@
    2270723359 Win32: The Python interface only works with one version of Python, selected at
    2270823360 compile time.  Can this be made to work with version 2.1 and 2.2 dynamically?
     
    2271423366 Vim script.  Requires converting the arguments and return value, like with
    2271523367 vim.bindeval().
    22716 @@ -205,9 +440,6 @@
     23368@@ -205,9 +478,6 @@
    2271723369 Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
    2271823370 Szamotulski, 2012 Nov 8)
     
    2272423376 
    2272523377 Session file creation: 'autochdir' causes trouble.  Keep it off until after
    22726 @@ -240,10 +472,6 @@
     23378@@ -240,10 +510,6 @@
    2272723379 Help for 'b:undo_indent'. (Thilo Six, 2012 May 28)
    2272823380 Also question if examples are correct.
     
    2273523387 Suggestion for another map. (Philip Mat, 2012 Jun 18)
    2273623388 But use "gi" instead of "a".  Or use CTRL-\ CTRL-O.
    22737 @@ -251,10 +479,6 @@
     23389@@ -251,13 +517,12 @@
    2273823390 Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012
    2273923391 Aug 16)
     
    2274623398 is confusing.  Should say "the argument list is empty".
    2274723399 
    22748 @@ -272,27 +496,23 @@
     23400+xterm supports escape sequences to mark a paste operation.  Need to be
     23401+enabled. (Bruno Sutic, 2014 Jul 11)  How to know the terminal supports this?
     23402+
     23403 URXVT:
     23404 - will get stuck if byte sequence does not contain the expected semicolon.
     23405 - Use urxvt mouse support also in xterm.  Explanations:
     23406@@ -272,27 +537,23 @@
    2274923407 
    2275023408 Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14)
     
    2277923437 
    2278023438 Update for vim2html.pl. (Tyru, 2013 Feb 22)
    22781 @@ -374,8 +594,6 @@
     23439@@ -374,8 +635,6 @@
    2278223440 Setting $HOME on MS-Windows is not very well documented.  Suggestion by Ben
    2278323441 Fritz (2011 Oct 27).
     
    2278823446 doing ":g/test/d".  Putting every delete on the clipboard? (Robert Chan, 2011
    2278923447 Jun 17)
    22790 @@ -396,10 +614,10 @@
     23448@@ -396,10 +655,10 @@
    2279123449 Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)
    2279223450 
     
    2280123459 On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a
    2280223460 64 bits value.  Change all number options to use nropt_T and define it to the
    22803 @@ -419,6 +637,8 @@
     23461@@ -419,6 +678,8 @@
    2280423462 When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
    2280523463 doesn't jump to the correct line with :cfirst. (ZyX,  2011 Sep 18)
     
    2281023468 Patch from Christian Brabandt, 2011 Aug 19.
    2281123469 
    22812 @@ -456,6 +676,9 @@
     23470@@ -439,9 +700,6 @@
     23471 
     23472 "0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22)
     23473 
     23474-Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
     23475-30)
     23476-
     23477 Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
     23478 May 24)  Update May 26.
     23479 
     23480@@ -456,6 +714,9 @@
    2281323481 number, but it is in the sign column.  Doesn't look right. (ZyX 2011 Jun 5)
    2281423482 Patch by Christian Brabandt, 2011 Jun 5.  Introduces new problems.
     
    2282023488 Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9.
    2282123489 
    22822 @@ -524,9 +747,6 @@
     23490@@ -524,9 +785,6 @@
    2282323491 Patch to add FoldedLineNr highlighting: different highlighting for the line
    2282423492 number of a closed fold. (eXerigumo Clanjor, 2013 Jul 15)
     
    2283023498 - Profiling:
    2283123499        ./vim -u NONE -s ~/vim/test/ruby.vim
    22832 @@ -556,7 +776,7 @@
     23500@@ -556,7 +814,7 @@
    2283323501 the system encoding (usually utf-8).
    2283423502 
     
    2283923507 Problem producing tags file when hebrew.frx is present.  It has a BOM.
    2284023508 Results in E670. (Tony Mechelynck, 2010 May 2)
    22841 @@ -573,8 +793,7 @@
    22842  
    22843  getpos()/setpos() don't include curswant.  getpos() could return a fifth
    22844  element.  setpos() could accept an optional fifth element.
     23509@@ -571,11 +829,6 @@
     23510     file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
     23511     Patch by Christian Brabandt, 2010 Oct 21.
     23512 
     23513-getpos()/setpos() don't include curswant.  getpos() could return a fifth
     23514-element.  setpos() could accept an optional fifth element.
    2284523515-Patch by Christian Brabandt, 2010 Sep 6.  Check that new argument is optional
    2284623516-and that it's documented.
    22847 +Patch by Christian Brabandt, 2010 Sep 6.  Again 2013 Aug 22.
    22848  
     23517-
    2284923518 With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott,
    2285023519 2010 Oct 24)
    22851 @@ -595,9 +814,6 @@
     23520 
     23521@@ -595,9 +848,6 @@
    2285223522 checked to be in a comment.  Implement FM_SKIPCOMM flag of findmatchlimit().
    2285323523 Issue 46.
     
    2285923529 
    2286023530 Using CompilerSet doesn't record where an option was set from.  E.g., in the
    22861 @@ -620,8 +836,6 @@
     23531@@ -620,8 +870,6 @@
    2286223532 When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines
    2286323533 instead of one. (Constantin Pan, 2010 Sep 10)
     
    2286823538 Winckler, 2011 May 11)
    2286923539 Requires a map mode for Insert mode started from blockwise Visual mode.
    22870 @@ -629,10 +843,6 @@
     23540@@ -629,10 +877,6 @@
    2287123541 Writing nested List and Dict in viminfo gives error message and can't be read
    2287223542 back. (Yukihiro Nakadaira, 2010 Nov 13)
     
    2287923549 Additional info by Dominique Pelle. (also on 2010 Apr 10)
    2288023550 
    22881 @@ -759,6 +969,7 @@
     23551@@ -759,6 +1003,7 @@
    2288223552 
    2288323553 Patch to add farsi handling to arabic.c (Ali Gholami Rudi, 2009 May 2)
     
    2288723557 Patch to add "focusonly" to 'scrollopt', so that scrollbind also applies in
    2288823558 window that doesn't have focus. (Jonathon Mah, 2009 Jan 12)
    22889 @@ -838,8 +1049,6 @@
     23559@@ -838,8 +1083,6 @@
    2289023560 Win32 GUI: last message from startup doesn't show up when there is an echoerr
    2289123561 command. (Cyril Slobin, 2009 Mar 13)
     
    2289623566 does not work. (Nieko Maatjes, 2009 Jan 8, Ingo Karkat, 2009 Jan 22)
    2289723567 
    22898 @@ -856,7 +1065,12 @@
     23568@@ -856,7 +1099,12 @@
    2289923569 Using ~ works OK on 'a' with composing char, but not on 0x0418  with composing
    2290023570 char 0x0301. (Tony Mechelynck, 2009 Mar 4)
     
    2291023580 Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish
    2291123581 messages, even though locale is not supported.  But ":lang messages
    22912 @@ -885,7 +1099,7 @@
     23582@@ -885,7 +1133,7 @@
    2291323583 Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off.
    2291423584 (Henrik Ohman, 2009, Jan 29)
     
    2291923589 Use a different option or let it depend on whether 'shell' looks like a
    2292023590 unix-like shell?
    22921 @@ -918,8 +1132,6 @@
     23591@@ -918,8 +1166,6 @@
    2292223592 Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
    2292323593 Maybe call it v:motiontype.
     
    2292823598 doesn't set 'ff' to "unix".  (Ben Fritz, 2008 Dec 5) Reusing the old buffer
    2292923599 probably causes this.
    22930 @@ -928,7 +1140,7 @@
     23600@@ -928,7 +1174,7 @@
    2293123601 2009 Jan 16)
    2293223602 
     
    2293723607 Document that default font in Athena can be set with resources:
    2293823608    XtDefaultFont: "9x15"
    22939 @@ -942,6 +1154,7 @@
     23609@@ -942,6 +1188,7 @@
    2294023610 
    2294123611 ":pedit %" with a BufReadPre autocommand causes the cursor to move to the
     
    2294523615 Wildmenu not deleted: "gvim -u NONE", ":set nocp wildmenu cmdheight=3
    2294623616 laststatus=2", CTRL-D CTRL-H CTRL-H CTRL-H. (A.Politz, 2008 April 1)
    22947 @@ -1085,9 +1298,6 @@
     23617@@ -1085,9 +1332,6 @@
    2294823618 result in no matches.  Convert chars to lower case? (Erik Wognsen, 2009 Apr
    2294923619 16)
     
    2295523625 (Lech Lorens, 2010 Aug 30)
    2295623626 
    22957 @@ -1289,6 +1499,7 @@
     23627@@ -1289,6 +1533,7 @@
    2295823628 
    2295923629 Win64: Seek error in swap file for a very big file (3 Gbyte).  Check storing
     
    2296323633 Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17)
    2296423634 
    22965 @@ -1296,14 +1507,17 @@
     23635@@ -1296,14 +1541,17 @@
    2296623636 Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
    2296723637 only takes 'shellslash' into account.
     
    2298523655 2007 Jun 21)
    2298623656 
    22987 @@ -1459,6 +1673,9 @@
     23657@@ -1459,6 +1707,9 @@
    2298823658 tree stops unexpectedly when using ":cd " and entering a directory that
    2298923659 doesn't contain other directories.
     
    2299523665    highlight Normal ctermbg=DarkGray
    2299623666    set background=dark
    22997 @@ -1685,7 +1902,7 @@
     23667@@ -1685,7 +1936,7 @@
    2299823668 -   testdir/Make_dos_sh.mak for running tests with MingW. (Bill Mccarthy, 2008
    2299923669     Sep 13)
     
    2300423674     Vissale Neang.  (Martin Stubenschrott) Asked Vissale to make the scripts
    2300523675     more friendly for the Vim distribution.
    23006 @@ -1715,7 +1932,7 @@
     23676@@ -1715,7 +1966,7 @@
    2300723677     How does this work?  Missing comments.
    2300823678 8   Add a few more command names to the menus.  Patch from Jiri Brezina
     
    2301323683 -   Include flipcase patch: ~/vim/patches/wall.flipcase2 ?  Make it work
    2301423684     for multi-byte characters.
    23015 @@ -1864,8 +2081,6 @@
     23685@@ -1864,8 +2115,6 @@
    2301623686 Win32 GUI known bugs:
    2301723687 -   Win32: tearoff menu window should have a scrollbar when it's taller than
     
    2302223692     file names.  Can we load unicows.dll dynamically?
    2302323693 8   The -P argument doesn't work very well with many MDI applications.
    23024 @@ -1873,9 +2088,6 @@
     23694@@ -1873,9 +2122,6 @@
    2302523695     Tutorial: http://win32assembly.online.fr/tut32.html
    2302623696 8   In eval.c, io.h is included when MSWIN32 is defined.  Shouldn't this be
     
    2303223702     of ":only" is highlighted like the cursor.  (Lipelis)
    2303323703 8   When 'encoding' is "utf-8", should use 'guifont' for both normal and wide
    23034 @@ -1887,9 +2099,6 @@
     23704@@ -1887,9 +2133,6 @@
    2303523705 8   Use another default for 'termencoding': the active codepage.  Means that
    2303623706     when 'encoding' is changed typing characters still works properly.
     
    2304223712     2004 May 9)
    2304323713 8   Win32: When clicking on the gvim title bar, which gives it focus, produces
    23044 @@ -2272,8 +2481,6 @@
     23714@@ -2272,8 +2515,6 @@
    2304523715     character. (Yasuhiro Matsumoto)  It should return 1 when used on a tail
    2304623716     byte, like for utf-8.  Store second byte of double-byte in ScreenLines2[]
     
    2305123721     ":insert" command, causing the following "endfunction" not to be found.
    2305223722     Add skipping this perl construction inside function definitions.
    23053 @@ -2566,8 +2773,6 @@
     23723@@ -2566,8 +2807,6 @@
    2305423724     input method called from GDK code.  Without Perl it doesn't crash.
    2305523725 -   VMS: Vimdiff doesn't work with the VMS diff, because the output looks
     
    2306023730     in Vim as if the rightmost scrollbar was used.
    2306123731 -   GTK with Gnome: Produces an error message when starting up:
    23062 @@ -2736,10 +2941,6 @@
     23732@@ -2736,10 +2975,6 @@
    2306323733 
    2306423734 
     
    2307123741     https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=219777   
    2307223742 -   Unicode defines another quote character: 0x2019.  Use it as an equivalent
    23073 @@ -2925,12 +3126,8 @@
     23743@@ -2925,12 +3160,8 @@
    2307423744 8   toupper() function doesn't handle byte count changes.
    2307523745 7   Searching and composing characters:
     
    2308423754 8   Detect overlong UTF-8 sequences and handle them like illegal bytes.
    2308523755 8   ":s/x/\u\1/" doesn't work, making uppercase isn't done for multi-byte
    23086 @@ -3153,6 +3350,7 @@
     23756@@ -3153,6 +3384,7 @@
    2308723757 Built-in script language:
    2308823758 8   Make the filename and line number available to script functions, so that
     
    2309223762     restore option values.  Especially useful for new options.  Problem: how
    2309323763     to avoid a performance penalty (esp. for string options)?
    23094 @@ -4035,8 +4233,7 @@
     23764@@ -4035,8 +4267,7 @@
    2309523765 7   Use Tabs for the indent of starting lines, pad with spaces for
    2309623766     continuation lines.  Allows changing 'tabstop' without messing up the
     
    2310223772 
    2310323773 Java:
    23104 @@ -4655,7 +4852,7 @@
     23774@@ -4655,7 +4886,7 @@
    2310523775 
    2310623776 Digraphs:
     
    2311123781     characters?
    2311223782 8   Add command to remove one or more (all) digraphs. (Brown)
    23113 @@ -4852,6 +5049,7 @@
     23783@@ -4852,6 +5083,7 @@
    2311423784 6   Add ":timer" command, to set a command to be executed at a certain
    2311523785     interval, or once after some time has elapsed. (Aaron)
     
    2312123791diff -Naur vim74.orig/runtime/doc/undo.txt vim74/runtime/doc/undo.txt
    2312223792--- vim74.orig/runtime/doc/undo.txt     2013-08-10 11:25:02.000000000 +0000
    23123 +++ vim74/runtime/doc/undo.txt  2014-06-01 00:42:52.734201477 +0000
     23793+++ vim74/runtime/doc/undo.txt  2014-07-21 23:33:15.630196575 +0000
    2312423794@@ -1,4 +1,4 @@
    2312523795-*undo.txt*      For Vim version 7.4.  Last change: 2012 Mar 04
    23126 +*undo.txt*      For Vim version 7.4.  Last change: 2013 Sep 08
     23796+*undo.txt*      For Vim version 7.4.  Last change: 2014 May 24
    2312723797 
    2312823798 
     
    2313723807 nothing (undoes an undo).
    2313823808 
     23809@@ -97,9 +97,9 @@
     23810                        or redo.
     23811                        {not in Vi}
     23812 
     23813-This is most useful when you need to prompt the user halfway a change.  For
     23814-example in a function that calls |getchar()|.  Do make sure that there was a
     23815-related change before this that you must join with.
     23816+This is most useful when you need to prompt the user halfway through a change.
     23817+For example in a function that calls |getchar()|.  Do make sure that there was
     23818+a related change before this that you must join with.
     23819 
     23820 This doesn't work by itself, because the next key press will start a new
     23821 change again.  But you can do something like this: >
    2313923822@@ -249,8 +249,9 @@
    2314023823 detect if an undo file is no longer synchronized with the file it was written
     
    2314923832 Undo files are normally saved in the same directory as the file.  This can be
    2315023833 changed with the 'undodir' option.
     23834diff -Naur vim74.orig/runtime/doc/usr_08.txt vim74/runtime/doc/usr_08.txt
     23835--- vim74.orig/runtime/doc/usr_08.txt   2013-08-10 11:25:03.000000000 +0000
     23836+++ vim74/runtime/doc/usr_08.txt        2014-07-21 23:33:15.696863068 +0000
     23837@@ -1,4 +1,4 @@
     23838-*usr_08.txt*   For Vim version 7.4.  Last change: 2006 Jul 18
     23839+*usr_08.txt*   For Vim version 7.4.  Last change: 2014 Jul 06
     23840 
     23841                     VIM USER MANUAL - by Bram Moolenaar
     23842 
     23843@@ -532,7 +532,7 @@
     23844 
     23845 You now have two tab pages.  The first one has a window for "thisfile" and the
     23846 second one a window for "thatfile".  It's like two pages that are on top of
     23847-eachother, with a tab sticking out of each page showing the file name.
     23848+each other, with a tab sticking out of each page showing the file name.
     23849 
     23850 Now use the mouse to click on "thisfile" in the top line.  The result is
     23851 
    2315123852diff -Naur vim74.orig/runtime/doc/usr_25.txt vim74/runtime/doc/usr_25.txt
    2315223853--- vim74.orig/runtime/doc/usr_25.txt   2013-08-10 11:25:05.000000000 +0000
    23153 +++ vim74/runtime/doc/usr_25.txt        2014-06-01 00:42:52.944200942 +0000
     23854+++ vim74/runtime/doc/usr_25.txt        2014-07-21 23:33:15.816862755 +0000
    2315423855@@ -86,7 +86,7 @@
    2315523856 
     
    2316323864diff -Naur vim74.orig/runtime/doc/usr_30.txt vim74/runtime/doc/usr_30.txt
    2316423865--- vim74.orig/runtime/doc/usr_30.txt   2013-08-10 11:25:05.000000000 +0000
    23165 +++ vim74/runtime/doc/usr_30.txt        2014-06-01 00:42:53.064200637 +0000
     23866+++ vim74/runtime/doc/usr_30.txt        2014-07-21 23:33:15.870195949 +0000
    2316623867@@ -128,7 +128,7 @@
    2316723868 You can include special Vim keywords in the command specification.  The %
     
    2318423885diff -Naur vim74.orig/runtime/doc/usr_40.txt vim74/runtime/doc/usr_40.txt
    2318523886--- vim74.orig/runtime/doc/usr_40.txt   2013-08-10 11:25:05.000000000 +0000
    23186 +++ vim74/runtime/doc/usr_40.txt        2014-06-01 00:42:53.100867210 +0000
     23887+++ vim74/runtime/doc/usr_40.txt        2014-07-21 23:33:15.920195819 +0000
    2318723888@@ -209,7 +209,7 @@
    2318823889 separates the two commands.  This also means that a | character can't be used
     
    2319623897diff -Naur vim74.orig/runtime/doc/usr_41.txt vim74/runtime/doc/usr_41.txt
    2319723898--- vim74.orig/runtime/doc/usr_41.txt   2013-08-10 11:25:05.000000000 +0000
    23198 +++ vim74/runtime/doc/usr_41.txt        2014-06-01 00:42:53.110867184 +0000
     23899+++ vim74/runtime/doc/usr_41.txt        2014-07-21 23:33:15.946862416 +0000
    2319923900@@ -1,4 +1,4 @@
    2320023901-*usr_41.txt*   For Vim version 7.4.  Last change: 2013 Feb 20
    23201 +*usr_41.txt*   For Vim version 7.4.  Last change: 2014 Apr 05
     23902+*usr_41.txt*   For Vim version 7.4.  Last change: 2014 May 28
    2320223903 
    2320323904                     VIM USER MANUAL - by Bram Moolenaar
     
    2324823949 Variables:                                             *var-functions*
    2324923950        type()                  type of a variable
    23250 @@ -697,11 +706,15 @@
     23951@@ -697,11 +706,16 @@
    2325123952        wincol()                window column number of the cursor
    2325223953        winline()               window line number of the cursor
     
    2325423955+       screencol()             get screen column of the cursor
    2325523956+       screenrow()             get screen row of the cursor
     23957+       getcurpos()             get position of the cursor
    2325623958        getpos()                get position of cursor, mark, etc.
    2325723959        setpos()                set position of cursor, mark, etc.
     
    2326423966 Working with text in the current buffer:               *text-functions*
    2326523967        getline()               get a line or list of lines from the buffer
    23266 @@ -729,6 +742,7 @@
     23968@@ -729,6 +743,7 @@
    2326723969        pathshorten()           shorten directory names in a path
    2326823970        simplify()              simplify a path without changing its meaning
     
    2327223974        filewritable()          check if a file can be written to
    2327323975        getfperm()              get the permissions of a file
    23274 @@ -741,7 +755,8 @@
     23976@@ -741,7 +756,8 @@
    2327523977        mkdir()                 create a new directory
    2327623978        delete()                delete a file
     
    2328223984        readfile()              read a file into a List of lines
    2328323985        writefile()             write a List of lines into a file
    23284 @@ -757,6 +772,7 @@
     23986@@ -757,6 +773,7 @@
    2328523987 Buffers, windows and the argument list:
    2328623988        argc()                  number of entries in the argument list
     
    2329023992        bufexists()             check if a buffer exists
    2329123993        buflisted()             check if a buffer exists and is listed
    23292 @@ -883,14 +899,22 @@
     23994@@ -810,6 +827,7 @@
     23995        synconcealed()          get info about concealing
     23996        diff_hlID()             get highlight ID for diff mode at a position
     23997        matchadd()              define a pattern to highlight (a "match")
     23998+       matchaddpos()           define a list of positions to highlight
     23999        matcharg()              get info about |:match| arguments
     24000        matchdelete()           delete a match defined by |matchadd()| or a
     24001                                |:match| command
     24002@@ -883,14 +901,22 @@
    2329324003        libcall()               call a function in an external library
    2329424004        libcallnr()             idem, returning a number
     
    2331524025diff -Naur vim74.orig/runtime/doc/usr_42.txt vim74/runtime/doc/usr_42.txt
    2331624026--- vim74.orig/runtime/doc/usr_42.txt   2013-08-10 11:25:05.000000000 +0000
    23317 +++ vim74/runtime/doc/usr_42.txt        2014-06-01 00:42:53.120867159 +0000
     24027+++ vim74/runtime/doc/usr_42.txt        2014-07-21 23:33:15.973529013 +0000
    2331824028@@ -311,7 +311,7 @@
    2331924029 item with a bitmap.  For example, define a new toolbar item with: >
     
    2332724037diff -Naur vim74.orig/runtime/doc/usr_45.txt vim74/runtime/doc/usr_45.txt
    2332824038--- vim74.orig/runtime/doc/usr_45.txt   2013-08-10 11:25:06.000000000 +0000
    23329 +++ vim74/runtime/doc/usr_45.txt        2014-06-01 00:42:53.167533707 +0000
     24039+++ vim74/runtime/doc/usr_45.txt        2014-07-21 23:33:16.006862259 +0000
    2333024040@@ -328,8 +328,8 @@
    2333124041 *45.5* Entering language text
     
    2334124051diff -Naur vim74.orig/runtime/doc/various.txt vim74/runtime/doc/various.txt
    2334224052--- vim74.orig/runtime/doc/various.txt  2013-08-10 11:25:06.000000000 +0000
    23343 +++ vim74/runtime/doc/various.txt       2014-06-01 00:42:53.190866981 +0000
     24053+++ vim74/runtime/doc/various.txt       2014-07-21 23:33:16.030195531 +0000
    2334424054@@ -1,4 +1,4 @@
    2334524055-*various.txt*   For Vim version 7.4.  Last change: 2013 May 18
     
    2342724137diff -Naur vim74.orig/runtime/doc/version5.txt vim74/runtime/doc/version5.txt
    2342824138--- vim74.orig/runtime/doc/version5.txt 2013-08-10 11:25:07.000000000 +0000
    23429 +++ vim74/runtime/doc/version5.txt      2014-06-01 00:42:53.237533529 +0000
     24139+++ vim74/runtime/doc/version5.txt      2014-07-21 23:33:16.090195375 +0000
    2343024140@@ -2020,7 +2020,7 @@
    2343124141 
     
    2343924149diff -Naur vim74.orig/runtime/doc/version7.txt vim74/runtime/doc/version7.txt
    2344024150--- vim74.orig/runtime/doc/version7.txt 2013-08-10 12:23:06.000000000 +0000
    23441 +++ vim74/runtime/doc/version7.txt      2014-06-01 00:42:53.430866370 +0000
     24151+++ vim74/runtime/doc/version7.txt      2014-07-21 23:33:16.276861554 +0000
    2344224152@@ -1,4 +1,4 @@
    2344324153-*version7.txt*  For Vim version 7.4.  Last change: 2013 Aug 10
     
    2348324193diff -Naur vim74.orig/runtime/doc/vi_diff.txt vim74/runtime/doc/vi_diff.txt
    2348424194--- vim74.orig/runtime/doc/vi_diff.txt  2013-08-10 11:25:07.000000000 +0000
    23485 +++ vim74/runtime/doc/vi_diff.txt       2014-06-01 00:42:53.477532917 +0000
     24195+++ vim74/runtime/doc/vi_diff.txt       2014-07-21 23:33:16.303528151 +0000
    2348624196@@ -1,4 +1,4 @@
    2348724197-*vi_diff.txt*   For Vim version 7.4.  Last change: 2012 Aug 08
     
    2351024220diff -Naur vim74.orig/runtime/doc/visual.txt vim74/runtime/doc/visual.txt
    2351124221--- vim74.orig/runtime/doc/visual.txt   2013-08-10 11:25:08.000000000 +0000
    23512 +++ vim74/runtime/doc/visual.txt        2014-06-01 00:42:53.920865122 +0000
     24222+++ vim74/runtime/doc/visual.txt        2014-07-21 23:33:16.740193679 +0000
    2351324223@@ -1,4 +1,4 @@
    2351424224-*visual.txt*    For Vim version 7.4.  Last change: 2012 Aug 15
     
    2354124251diff -Naur vim74.orig/runtime/doc/windows.txt vim74/runtime/doc/windows.txt
    2354224252--- vim74.orig/runtime/doc/windows.txt  2013-08-10 11:25:08.000000000 +0000
    23543 +++ vim74/runtime/doc/windows.txt       2014-06-01 00:42:53.937531746 +0000
     24253+++ vim74/runtime/doc/windows.txt       2014-07-21 23:33:16.756860302 +0000
    2354424254@@ -1,4 +1,4 @@
    2354524255-*windows.txt*   For Vim version 7.4.  Last change: 2012 Nov 15
     
    2357724287diff -Naur vim74.orig/runtime/filetype.vim vim74/runtime/filetype.vim
    2357824288--- vim74.orig/runtime/filetype.vim     2013-08-03 15:50:05.000000000 +0000
    23579 +++ vim74/runtime/filetype.vim  2014-06-01 00:42:54.130864587 +0000
     24289+++ vim74/runtime/filetype.vim  2014-07-21 23:33:16.946859806 +0000
    2358024290@@ -1,7 +1,7 @@
    2358124291 " Vim support file to detect file types
     
    2358324293 " Maintainer:  Bram Moolenaar <Bram@vim.org>
    2358424294-" Last Change: 2013 Aug 03
    23585 +" Last Change: 2014 Feb 26
     24295+" Last Change: 2014 Jul 16
    2358624296 
    2358724297 " Listen very carefully, I will say this only once
     
    2366424374 
    2366524375 " ERicsson LANGuage; Yaws is erlang too
     24376@@ -843,7 +864,7 @@
     24377       setf xhtml
     24378       return
     24379     endif
     24380-    if getline(n) =~ '{%\s*\(extends\|block\)\>'
     24381+    if getline(n) =~ '{%\s*\(extends\|block\|load\)\>'
     24382       setf htmldjango
     24383       return
     24384     endif
    2366624385@@ -952,6 +973,9 @@
    2366724386 " Inno Setup
     
    2367424393 au BufNewFile,BufRead *.jal,*.JAL              setf jal
    2367524394 
    23676 @@ -1014,7 +1038,7 @@
     24395@@ -965,7 +989,7 @@
     24396 au BufNewFile,BufRead *.jj,*.jjt               setf javacc
     24397 
     24398 " JavaScript, ECMAScript
     24399-au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json   setf javascript
     24400+au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx   setf javascript
     24401 
     24402 " Java Server Pages
     24403 au BufNewFile,BufRead *.jsp                    setf jsp
     24404@@ -983,12 +1007,18 @@
     24405 " Jovial
     24406 au BufNewFile,BufRead *.jov,*.j73,*.jovial     setf jovial
     24407 
     24408+" JSON
     24409+au BufNewFile,BufRead *.json                   setf json
     24410+
     24411 " Kixtart
     24412 au BufNewFile,BufRead *.kix                    setf kix
     24413 
     24414 " Kimwitu[++]
     24415 au BufNewFile,BufRead *.k                      setf kwt
     24416 
     24417+" Kivy
     24418+au BufNewFile,BufRead *.kv                     setf kivy
     24419+
     24420 " KDE script
     24421 au BufNewFile,BufRead *.ks                     setf kscript
     24422 
     24423@@ -1014,7 +1044,7 @@
    2367724424 au BufNewFile,BufRead *.ld                     setf ld
    2367824425 
     
    2368324430 " Libao
    2368424431 au BufNewFile,BufRead */etc/libao.conf,*/.libao        setf libao
    23685 @@ -1169,6 +1193,9 @@
     24432@@ -1169,6 +1199,9 @@
    2368624433 " MGL
    2368724434 au BufNewFile,BufRead *.mgl                    setf mgl
     
    2369324440 au BufNewFile,BufRead *.mms                    call s:FTmms()
    2369424441 
    23695 @@ -2058,14 +2085,15 @@
     24442@@ -1619,6 +1652,20 @@
     24443   au BufNewFile,BufRead *.rnw,*.snw                    setf rnoweb
     24444 endif
     24445 
     24446+" R Markdown file
     24447+if has("fname_case")
     24448+  au BufNewFile,BufRead *.Rmd,*.rmd,*.Smd,*.smd                setf rmd
     24449+else
     24450+  au BufNewFile,BufRead *.rmd,*.smd                    setf rmd
     24451+endif
     24452+
     24453+" R reStructuredText file
     24454+if has("fname_case")
     24455+  au BufNewFile,BufRead *.Rrst,*.rrst,*.Srst,*.srst    setf rrst
     24456+else
     24457+  au BufNewFile,BufRead *.rrst,*.srst                  setf rrst
     24458+endif
     24459+
     24460 " Rexx, Rebol or R
     24461 au BufNewFile,BufRead *.r,*.R                  call s:FTr()
     24462 
     24463@@ -2058,14 +2105,15 @@
    2369624464 " SVG (Scalable Vector Graphics)
    2369724465 au BufNewFile,BufRead *.svg                    setf svg
     
    2371224480     return 1
    2371324481   endif
    23714 @@ -2092,7 +2120,7 @@
     24482@@ -2092,7 +2140,7 @@
    2371524483 
    2371624484 " Task
     
    2372124489 " Tcl (JACL too)
    2372224490 au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl   setf tcl
    23723 @@ -2217,12 +2245,12 @@
     24491@@ -2217,12 +2265,12 @@
    2372424492 au BufNewFile,BufRead */etc/updatedb.conf      setf updatedb
    2372524493 
     
    2373824506 " Vera
    2373924507 au BufNewFile,BufRead *.vr,*.vri,*.vrh         setf vera
    23740 @@ -2233,6 +2261,9 @@
     24508@@ -2233,6 +2281,9 @@
    2374124509 " Verilog-AMS HDL
    2374224510 au BufNewFile,BufRead *.va,*.vams              setf verilogams
     
    2374824516 au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst  setf vhdl
    2374924517 au BufNewFile,BufRead *.vhdl_[0-9]*            call s:StarSetf('vhdl')
    23750 @@ -2405,7 +2436,7 @@
     24518@@ -2405,7 +2456,7 @@
    2375124519 au BufNewFile,BufRead *.xsl,*.xslt             setf xslt
    2375224520 
     
    2375724525 " Yacc or racc
    2375824526 au BufNewFile,BufRead *.y                      call s:FTy()
     24527@@ -2630,7 +2681,7 @@
     24528 
     24529 " Plain text files, needs to be far down to not override others.  This avoids
     24530 " the "conf" type being used if there is a line starting with '#'.
     24531-au BufNewFile,BufRead *.txt,*.text             setf text
     24532+au BufNewFile,BufRead *.txt,*.text,README      setf text
     24533 
     24534 
     24535 " Use the filetype detect plugins.  They may overrule any of the previously
    2375924536diff -Naur vim74.orig/runtime/ftplugin/changelog.vim vim74/runtime/ftplugin/changelog.vim
    2376024537--- vim74.orig/runtime/ftplugin/changelog.vim   2012-08-23 20:47:22.000000000 +0000
    23761 +++ vim74/runtime/ftplugin/changelog.vim        2014-06-01 00:42:54.380863951 +0000
     24538+++ vim74/runtime/ftplugin/changelog.vim        2014-07-21 23:33:17.186859180 +0000
    2376224539@@ -1,7 +1,7 @@
    2376324540 " Vim filetype plugin file
     
    2387424651diff -Naur vim74.orig/runtime/ftplugin/clojure.vim vim74/runtime/ftplugin/clojure.vim
    2387524652--- vim74.orig/runtime/ftplugin/clojure.vim     2013-02-06 14:35:23.000000000 +0000
    23876 +++ vim74/runtime/ftplugin/clojure.vim  2014-06-01 00:42:54.384197276 +0000
     24653+++ vim74/runtime/ftplugin/clojure.vim  2014-07-21 23:33:17.193525829 +0000
    2387724654@@ -1,44 +1,60 @@
    2387824655 " Vim filetype plugin file
     
    2400624783diff -Naur vim74.orig/runtime/ftplugin/cobol.vim vim74/runtime/ftplugin/cobol.vim
    2400724784--- vim74.orig/runtime/ftplugin/cobol.vim       2010-05-15 11:04:03.000000000 +0000
    24008 +++ vim74/runtime/ftplugin/cobol.vim    2014-06-01 00:42:54.400863900 +0000
     24785+++ vim74/runtime/ftplugin/cobol.vim    2014-07-21 23:33:17.206859127 +0000
    2400924786@@ -1,7 +1,7 @@
    2401024787 " Vim filetype plugin file
     
    2405524832diff -Naur vim74.orig/runtime/ftplugin/debchangelog.vim vim74/runtime/ftplugin/debchangelog.vim
    2405624833--- vim74.orig/runtime/ftplugin/debchangelog.vim        2012-02-04 19:59:23.000000000 +0000
    24057 +++ vim74/runtime/ftplugin/debchangelog.vim     2014-06-01 00:42:54.534196894 +0000
     24834+++ vim74/runtime/ftplugin/debchangelog.vim     2014-07-21 23:33:17.316858840 +0000
    2405824835@@ -3,7 +3,7 @@
    2405924836 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
     
    2407624853diff -Naur vim74.orig/runtime/ftplugin/fortran.vim vim74/runtime/ftplugin/fortran.vim
    2407724854--- vim74.orig/runtime/ftplugin/fortran.vim     2012-04-18 07:32:40.000000000 +0000
    24078 +++ vim74/runtime/ftplugin/fortran.vim  2014-06-01 00:42:54.750863009 +0000
     24855+++ vim74/runtime/ftplugin/fortran.vim  2014-07-21 23:33:17.536858266 +0000
    2407924856@@ -1,12 +1,12 @@
    2408024857 " Vim settings file
     
    2412624903 
    2412724904 let &cpoptions=s:cposet
     24905diff -Naur vim74.orig/runtime/ftplugin/html.vim vim74/runtime/ftplugin/html.vim
     24906--- vim74.orig/runtime/ftplugin/html.vim        2012-03-11 13:50:46.000000000 +0000
     24907+++ vim74/runtime/ftplugin/html.vim     2014-07-21 23:33:17.760191017 +0000
     24908@@ -20,49 +20,9 @@
     24909     setlocal formatoptions-=t formatoptions+=croql
     24910 endif
     24911 
     24912-
     24913 if exists('&omnifunc')
     24914-    " Distinguish between HTML versions
     24915-    " To use with other HTML versions add another
     24916-    " elseif condition to match proper DOCTYPE
     24917-    setlocal omnifunc=htmlcomplete#CompleteTags
     24918-
     24919-    if &filetype == 'xhtml'
     24920-            let b:html_omni_flavor = 'xhtml10s'
     24921-    else
     24922-            let b:html_omni_flavor = 'html401t'
     24923-    endif
     24924-    let i = 1
     24925-    let line = ""
     24926-    while i < 10 && i < line("$")
     24927-        let line = getline(i)
     24928-        if line =~ '<!DOCTYPE.*\<DTD '
     24929-            break
     24930-        endif
     24931-        let i += 1
     24932-    endwhile
     24933-    if line =~ '<!DOCTYPE.*\<DTD '  " doctype line found above
     24934-        if line =~ ' HTML 3\.2'
     24935-            let b:html_omni_flavor = 'html32'
     24936-        elseif line =~ ' XHTML 1\.1'
     24937-            let b:html_omni_flavor = 'xhtml11'
     24938-        else    " two-step detection with strict/frameset/transitional
     24939-            if line =~ ' XHTML 1\.0'
     24940-                let b:html_omni_flavor = 'xhtml10'
     24941-            elseif line =~ ' HTML 4\.01'
     24942-                let b:html_omni_flavor = 'html401'
     24943-            elseif line =~ ' HTML 4.0\>'
     24944-                let b:html_omni_flavor = 'html40'
     24945-            endif
     24946-            if line =~ '\<Transitional\>'
     24947-                let b:html_omni_flavor .= 't'
     24948-            elseif line =~ '\<Frameset\>'
     24949-                let b:html_omni_flavor .= 'f'
     24950-            else
     24951-                let b:html_omni_flavor .= 's'
     24952-            endif
     24953-        endif
     24954-    endif
     24955+  setlocal omnifunc=htmlcomplete#CompleteTags
     24956+  call htmlcomplete#DetectOmniFlavor()
     24957 endif
     24958 
     24959 " HTML:  thanks to Johannes Zellner and Benji Fisher.
    2412824960diff -Naur vim74.orig/runtime/ftplugin/j.vim vim74/runtime/ftplugin/j.vim
    2412924961--- vim74.orig/runtime/ftplugin/j.vim   1970-01-01 00:00:00.000000000 +0000
    24130 +++ vim74/runtime/ftplugin/j.vim        2014-06-01 00:42:55.014195672 +0000
     24962+++ vim74/runtime/ftplugin/j.vim        2014-07-21 23:33:17.823524185 +0000
    2413124963@@ -0,0 +1,75 @@
    2413224964+" Vim filetype plugin
     
    2420725039diff -Naur vim74.orig/runtime/ftplugin/jproperties.vim vim74/runtime/ftplugin/jproperties.vim
    2420825040--- vim74.orig/runtime/ftplugin/jproperties.vim 1970-01-01 00:00:00.000000000 +0000
    24209 +++ vim74/runtime/ftplugin/jproperties.vim      2014-06-01 00:42:55.057528895 +0000
     25041+++ vim74/runtime/ftplugin/jproperties.vim      2014-07-21 23:33:17.863524080 +0000
    2421025042@@ -0,0 +1,15 @@
    2421125043+" Vim filetype plugin
     
    2422425056+
    2422525057+let b:undo_ftplugin = "setl cms< com< fo<"
     25058diff -Naur vim74.orig/runtime/ftplugin/json.vim vim74/runtime/ftplugin/json.vim
     25059--- vim74.orig/runtime/ftplugin/json.vim        1970-01-01 00:00:00.000000000 +0000
     25060+++ vim74/runtime/ftplugin/json.vim     2014-07-21 23:33:17.896857327 +0000
     25061@@ -0,0 +1,17 @@
     25062+" Vim filetype plugin
     25063+" Language:            JSON
     25064+" Maintainer:          David Barnett <daviebdawg+vim@gmail.com>
     25065+" Last Change:         2014 Jul 16
     25066+
     25067+if exists('b:did_ftplugin')
     25068+  finish
     25069+endif
     25070+let b:did_ftplugin = 1
     25071+
     25072+let b:undo_ftplugin = 'setlocal formatoptions< comments< commentstring<'
     25073+
     25074+setlocal formatoptions-=t
     25075+
     25076+" JSON has no comments.
     25077+setlocal comments=
     25078+setlocal commentstring=
    2422625079diff -Naur vim74.orig/runtime/ftplugin/lisp.vim vim74/runtime/ftplugin/lisp.vim
    2422725080--- vim74.orig/runtime/ftplugin/lisp.vim        2013-02-13 11:35:55.000000000 +0000
    24228 +++ vim74/runtime/ftplugin/lisp.vim     2014-06-01 00:42:55.154195315 +0000
     25081+++ vim74/runtime/ftplugin/lisp.vim     2014-07-21 23:33:18.006857040 +0000
    2422925082@@ -4,7 +4,7 @@
    2423025083 " URL:          http://sites.google.com/site/khorser/opensource/vim
     
    2424825101diff -Naur vim74.orig/runtime/ftplugin/python.vim vim74/runtime/ftplugin/python.vim
    2424925102--- vim74.orig/runtime/ftplugin/python.vim      2012-04-30 11:49:26.000000000 +0000
    24250 +++ vim74/runtime/ftplugin/python.vim   2014-06-01 00:42:55.670860666 +0000
     25103+++ vim74/runtime/ftplugin/python.vim   2014-07-21 23:33:18.453522541 +0000
    2425125104@@ -1,7 +1,8 @@
    2425225105 " Vim filetype plugin file
     
    2432925182 let &cpo = s:keepcpo
    2433025183 unlet s:keepcpo
     25184diff -Naur vim74.orig/runtime/ftplugin/r.vim vim74/runtime/ftplugin/r.vim
     25185--- vim74.orig/runtime/ftplugin/r.vim   1970-01-01 00:00:00.000000000 +0000
     25186+++ vim74/runtime/ftplugin/r.vim        2014-07-21 23:33:18.483522462 +0000
     25187@@ -0,0 +1,31 @@
     25188+" Vim filetype plugin file
     25189+" Language: R
     25190+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
     25191+" Last Change: Sun Feb 23, 2014  04:07PM
     25192+
     25193+" Only do this when not yet done for this buffer
     25194+if exists("b:did_ftplugin")
     25195+  finish
     25196+endif
     25197+
     25198+" Don't load another plugin for this buffer
     25199+let b:did_ftplugin = 1
     25200+
     25201+let s:cpo_save = &cpo
     25202+set cpo&vim
     25203+
     25204+setlocal iskeyword=@,48-57,_,.
     25205+setlocal formatoptions-=t
     25206+setlocal commentstring=#\ %s
     25207+setlocal comments=:#',:###,:##,:#
     25208+
     25209+if has("gui_win32") && !exists("b:browsefilter")
     25210+  let b:browsefilter = "R Source Files (*.R)\t*.R\n" .
     25211+        \ "Files that include R (*.Rnw *.Rd *.Rmd *.Rrst)\t*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
     25212+        \ "All Files (*.*)\t*.*\n"
     25213+endif
     25214+
     25215+let b:undo_ftplugin = "setl cms< com< fo< isk< | unlet! b:browsefilter"
     25216+
     25217+let &cpo = s:cpo_save
     25218+unlet s:cpo_save
    2433125219diff -Naur vim74.orig/runtime/ftplugin/registry.vim vim74/runtime/ftplugin/registry.vim
    2433225220--- vim74.orig/runtime/ftplugin/registry.vim    1970-01-01 00:00:00.000000000 +0000
    24333 +++ vim74/runtime/ftplugin/registry.vim 2014-06-01 00:42:55.717527214 +0000
     25221+++ vim74/runtime/ftplugin/registry.vim 2014-07-21 23:33:18.523522358 +0000
    2433425222@@ -0,0 +1,36 @@
    2433525223+" Vim filetype plugin file
     
    2436925257+let &cpo = s:cpo_save
    2437025258+unlet s:cpo_save
     25259diff -Naur vim74.orig/runtime/ftplugin/rhelp.vim vim74/runtime/ftplugin/rhelp.vim
     25260--- vim74.orig/runtime/ftplugin/rhelp.vim       1970-01-01 00:00:00.000000000 +0000
     25261+++ vim74/runtime/ftplugin/rhelp.vim    2014-07-21 23:33:18.536855656 +0000
     25262@@ -0,0 +1,29 @@
     25263+" Vim filetype plugin file
     25264+" Language: R help file
     25265+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
     25266+" Last Change: Wed Jul 09, 2014  06:23PM
     25267+
     25268+" Only do this when not yet done for this buffer
     25269+if exists("b:did_ftplugin")
     25270+  finish
     25271+endif
     25272+
     25273+" Don't load another plugin for this buffer
     25274+let b:did_ftplugin = 1
     25275+
     25276+let s:cpo_save = &cpo
     25277+set cpo&vim
     25278+
     25279+setlocal iskeyword=@,48-57,_,.
     25280+
     25281+if has("gui_win32") && !exists("b:browsefilter")
     25282+  let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
     25283+        \ "All Files (*.*)\t*.*\n"
     25284+endif
     25285+
     25286+let b:undo_ftplugin = "setl isk< | unlet! b:browsefilter"
     25287+
     25288+let &cpo = s:cpo_save
     25289+unlet s:cpo_save
     25290+
     25291+" vim: sw=2
     25292diff -Naur vim74.orig/runtime/ftplugin/rmd.vim vim74/runtime/ftplugin/rmd.vim
     25293--- vim74.orig/runtime/ftplugin/rmd.vim 1970-01-01 00:00:00.000000000 +0000
     25294+++ vim74/runtime/ftplugin/rmd.vim      2014-07-21 23:33:18.563522253 +0000
     25295@@ -0,0 +1,43 @@
     25296+" Vim filetype plugin file
     25297+" Language: R help file
     25298+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
     25299+" Last Change: Wed Jul 09, 2014  06:23PM
     25300+" Original work by Alex Zvoleff (adjusted for rmd by Michel Kuhlmann)
     25301+
     25302+" Only do this when not yet done for this buffer
     25303+if exists("b:did_ftplugin")
     25304+  finish
     25305+endif
     25306+
     25307+runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
     25308+
     25309+setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
     25310+setlocal formatoptions+=tcqln
     25311+setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+
     25312+setlocal iskeyword=@,48-57,_,.
     25313+
     25314+let s:cpo_save = &cpo
     25315+set cpo&vim
     25316+
     25317+" Enables pandoc if it is installed
     25318+unlet! b:did_ftplugin
     25319+runtime ftplugin/pandoc.vim
     25320+
     25321+" Don't load another plugin for this buffer
     25322+let b:did_ftplugin = 1
     25323+
     25324+if has("gui_win32") && !exists("b:browsefilter")
     25325+  let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
     25326+        \ "All Files (*.*)\t*.*\n"
     25327+endif
     25328+
     25329+if exists('b:undo_ftplugin')
     25330+  let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
     25331+else
     25332+  let b:undo_ftplugin = "setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
     25333+endif
     25334+
     25335+let &cpo = s:cpo_save
     25336+unlet s:cpo_save
     25337+
     25338+" vim: sw=2
     25339diff -Naur vim74.orig/runtime/ftplugin/rnoweb.vim vim74/runtime/ftplugin/rnoweb.vim
     25340--- vim74.orig/runtime/ftplugin/rnoweb.vim      1970-01-01 00:00:00.000000000 +0000
     25341+++ vim74/runtime/ftplugin/rnoweb.vim   2014-07-21 23:33:18.580188877 +0000
     25342@@ -0,0 +1,40 @@
     25343+" Vim filetype plugin file
     25344+" Language: Rnoweb
     25345+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
     25346+" Last Change: Wed Jul 09, 2014  06:23PM
     25347+
     25348+" Only do this when not yet done for this buffer
     25349+if exists("b:did_ftplugin")
     25350+  finish
     25351+endif
     25352+
     25353+let s:cpo_save = &cpo
     25354+set cpo&vim
     25355+
     25356+runtime! ftplugin/tex.vim
     25357+
     25358+" Don't load another plugin for this buffer
     25359+let b:did_ftplugin = 1
     25360+
     25361+" Enables Vim-Latex-Suite, LaTeX-Box if installed
     25362+runtime ftplugin/tex_*.vim
     25363+
     25364+setlocal iskeyword=@,48-57,_,.
     25365+setlocal suffixesadd=.bib,.tex
     25366+setlocal comments=b:%,b:#,b:##,b:###,b:#'
     25367+
     25368+if has("gui_win32") && !exists("b:browsefilter")
     25369+  let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
     25370+        \ "All Files (*.*)\t*.*\n"
     25371+endif
     25372+
     25373+if exists('b:undo_ftplugin')
     25374+  let b:undo_ftplugin .= " | setl isk< sua< com< | unlet! b:browsefilter"
     25375+else
     25376+  let b:undo_ftplugin = "setl isk< sua< com< | unlet! b:browsefilter"
     25377+endif
     25378+
     25379+let &cpo = s:cpo_save
     25380+unlet s:cpo_save
     25381+
     25382+" vim: sw=2
     25383diff -Naur vim74.orig/runtime/ftplugin/rrst.vim vim74/runtime/ftplugin/rrst.vim
     25384--- vim74.orig/runtime/ftplugin/rrst.vim        1970-01-01 00:00:00.000000000 +0000
     25385+++ vim74/runtime/ftplugin/rrst.vim     2014-07-21 23:33:18.586855526 +0000
     25386@@ -0,0 +1,37 @@
     25387+" Vim filetype plugin file
     25388+" Language: reStructuredText documentation format with R code
     25389+" Maintainer: Jakson Alves de Aquino <jalvesaq@gmail.com>
     25390+" Last Change: Wed Jul 09, 2014  06:23PM
     25391+" Original work by Alex Zvoleff
     25392+
     25393+" Only do this when not yet done for this buffer
     25394+if exists("b:did_ftplugin")
     25395+  finish
     25396+endif
     25397+
     25398+" Don't load another plugin for this buffer
     25399+let b:did_ftplugin = 1
     25400+
     25401+let s:cpo_save = &cpo
     25402+set cpo&vim
     25403+
     25404+setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
     25405+setlocal formatoptions+=tcqln
     25406+setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^\\s*[-*+]\\s\\+
     25407+setlocal iskeyword=@,48-57,_,.
     25408+
     25409+if has("gui_win32") && !exists("b:browsefilter")
     25410+  let b:browsefilter = "R Source Files (*.R *.Rnw *.Rd *.Rmd *.Rrst)\t*.R;*.Rnw;*.Rd;*.Rmd;*.Rrst\n" .
     25411+        \ "All Files (*.*)\t*.*\n"
     25412+endif
     25413+
     25414+if exists('b:undo_ftplugin')
     25415+  let b:undo_ftplugin .= " | setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
     25416+else
     25417+  let b:undo_ftplugin = "setl cms< com< fo< flp< isk< | unlet! b:browsefilter"
     25418+endif
     25419+
     25420+let &cpo = s:cpo_save
     25421+unlet s:cpo_save
     25422+
     25423+" vim: sw=2
    2437125424diff -Naur vim74.orig/runtime/ftplugin/scheme.vim vim74/runtime/ftplugin/scheme.vim
    2437225425--- vim74.orig/runtime/ftplugin/scheme.vim      2013-02-13 11:35:55.000000000 +0000
    24373 +++ vim74/runtime/ftplugin/scheme.vim   2014-06-01 00:42:55.780860386 +0000
     25426+++ vim74/runtime/ftplugin/scheme.vim   2014-07-21 23:33:18.620188772 +0000
    2437425427@@ -4,7 +4,7 @@
    2437525428 " URL:          http://sites.google.com/site/khorser/opensource/vim
     
    2439425447diff -Naur vim74.orig/runtime/ftplugin/spec.vim vim74/runtime/ftplugin/spec.vim
    2439525448--- vim74.orig/runtime/ftplugin/spec.vim        2012-03-07 12:16:03.000000000 +0000
    24396 +++ vim74/runtime/ftplugin/spec.vim     2014-06-01 00:42:55.910860055 +0000
     25449+++ vim74/runtime/ftplugin/spec.vim     2014-07-21 23:33:18.763521732 +0000
    2439725450@@ -1,7 +1,8 @@
    2439825451 " Plugin to update the %changelog section of RPM spec files
     
    2441925472diff -Naur vim74.orig/runtime/ftplugin/systemverilog.vim vim74/runtime/ftplugin/systemverilog.vim
    2442025473--- vim74.orig/runtime/ftplugin/systemverilog.vim       1970-01-01 00:00:00.000000000 +0000
    24421 +++ vim74/runtime/ftplugin/systemverilog.vim    2014-06-01 00:42:55.994193176 +0000
     25474+++ vim74/runtime/ftplugin/systemverilog.vim    2014-07-21 23:33:18.843521523 +0000
    2442225475@@ -0,0 +1,11 @@
    2442325476+" Vim filetype plugin file
     
    2443225485+" Behaves just like Verilog
    2443325486+runtime! ftplugin/verilog.vim
     25487diff -Naur vim74.orig/runtime/ftplugin/text.vim vim74/runtime/ftplugin/text.vim
     25488--- vim74.orig/runtime/ftplugin/text.vim        1970-01-01 00:00:00.000000000 +0000
     25489+++ vim74/runtime/ftplugin/text.vim     2014-07-21 23:33:18.910188015 +0000
     25490@@ -0,0 +1,17 @@
     25491+" Vim filetype plugin
     25492+" Language:            Text
     25493+" Maintainer:          David Barnett <daviebdawg+vim@gmail.com>
     25494+" Last Change:         2014 Jul 09
     25495+
     25496+if exists('b:did_ftplugin')
     25497+  finish
     25498+endif
     25499+let b:did_ftplugin = 1
     25500+
     25501+let b:undo_ftplugin = 'setlocal comments< commentstring<'
     25502+
     25503+" We intentionally don't set formatoptions-=t since text should wrap as text.
     25504+
     25505+" Pseudo comment leaders to indent bulleted lists.
     25506+setlocal comments=fb:-,fb:*
     25507+setlocal commentstring=
    2443425508diff -Naur vim74.orig/runtime/indent/clojure.vim vim74/runtime/indent/clojure.vim
    2443525509--- vim74.orig/runtime/indent/clojure.vim       2013-02-06 14:35:23.000000000 +0000
    24436 +++ vim74/runtime/indent/clojure.vim    2014-06-01 00:42:56.610858273 +0000
     25510+++ vim74/runtime/indent/clojure.vim    2014-07-21 23:33:19.486853177 +0000
    2443725511@@ -1,23 +1,27 @@
    2443825512 " Vim indent file
     
    2512526199-" vim:sts=4 sw=4 et:
    2512626200+" vim:sts=8:sw=8:ts=8:noet
     26201diff -Naur vim74.orig/runtime/indent/html.vim vim74/runtime/indent/html.vim
     26202--- vim74.orig/runtime/indent/html.vim  2013-06-13 17:50:24.000000000 +0000
     26203+++ vim74/runtime/indent/html.vim       2014-07-21 23:33:19.803519017 +0000
     26204@@ -1,505 +1,1003 @@
     26205 " Vim indent script for HTML
     26206-" General: "{{{
     26207-" File:                html.vim (Vimscript #2075)
     26208-" Author:      Andy Wokula <anwoku@yahoo.de>
     26209-" Last Change: 2013 Jun 12
     26210-" Rev Days:     13
     26211-" Version:     0.9
     26212-" Vim Version: Vim7
     26213-" Description:
     26214-"   Improved version of the distributed html indent script, faster on a
     26215-"   range of lines.
     26216+" Header: "{{{
     26217+" Maintainer:  Bram Moolenaar
     26218+" Original Author: Andy Wokula <anwoku@yahoo.de>
     26219+" Last Change: 2014 Jul 04
     26220+" Version:     1.0
     26221+" Description: HTML indent script with cached state for faster indenting on a
     26222+"              range of lines.
     26223+"              Supports template systems through hooks.
     26224+"              Supports Closure stylesheets.
     26225 "
     26226 " Credits:
     26227 "      indent/html.vim (2006 Jun 05) from J. Zellner
     26228 "      indent/css.vim (2006 Dec 20) from N. Weibull
     26229 "
     26230 " History:
     26231+" 2014 June    (v1.0) overhaul (Bram)
     26232 " 2012 Oct 21  (v0.9) added support for shiftwidth()
     26233 " 2011 Sep 09  (v0.8) added HTML5 tags (thx to J. Zuckerman)
     26234 " 2008 Apr 28  (v0.6) revised customization
     26235 " 2008 Mar 09  (v0.5) fixed 'indk' issue (thx to C.J. Robinson)
     26236-" }}}
     26237+"}}}
     26238 
     26239-" Init Folklore, check user settings (2nd time ++) "{{{
     26240-if exists("b:did_indent")
     26241-    finish
     26242+" Init Folklore, check user settings (2nd time ++)
     26243+if exists("b:did_indent") "{{{
     26244+  finish
     26245 endif
     26246 let b:did_indent = 1
     26247 
     26248 setlocal indentexpr=HtmlIndent()
     26249 setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
     26250 
     26251-let b:indent = {"lnum": -1}
     26252-let b:undo_indent = "set inde< indk<| unlet b:indent"
     26253+" "j1" is included to make cindent() work better with Javascript.
     26254+setlocal cino=j1
     26255+" "J1" should be included, but it doen't work properly before 7.4.355.
     26256+if has("patch-7.4.355")
     26257+  setlocal cino+=J1
     26258+endif
     26259+" Before patch 7.4.355 indenting after "(function() {" does not work well, add
     26260+" )2 to limit paren search.
     26261+if !has("patch-7.4.355")
     26262+  setlocal cino+=)2
     26263+endif
     26264+
     26265+" Needed for % to work when finding start/end of a tag.
     26266+setlocal matchpairs+=<:>
     26267 
     26268-" Load Once:
     26269-if exists("*HtmlIndent")
     26270-    call HtmlIndent_CheckUserSettings()
     26271-    finish
     26272+let b:undo_indent = "setlocal inde< indk< cino<"
     26273+
     26274+" b:hi_indent keeps state to speed up indenting consecutive lines.
     26275+let b:hi_indent = {"lnum": -1}
     26276+
     26277+"""""" Code below this is loaded only once. """""
     26278+if exists("*HtmlIndent") && !exists('g:force_reload_html')
     26279+  call HtmlIndent_CheckUserSettings()
     26280+  finish
     26281 endif
     26282 
     26283-" Patch 7.3.694
     26284+" shiftwidth() exists since patch 7.3.694
     26285 if exists('*shiftwidth')
     26286-    let s:ShiftWidth = function('shiftwidth')
     26287+  let s:ShiftWidth = function('shiftwidth')
     26288 else
     26289-    func! s:ShiftWidth()
     26290-       return &shiftwidth
     26291-    endfunc
     26292+  func! s:ShiftWidth()
     26293+    return &shiftwidth
     26294+  endfunc
     26295 endif
     26296 
     26297+" Allow for line continuation below.
     26298 let s:cpo_save = &cpo
     26299 set cpo-=C
     26300 "}}}
     26301 
     26302-func! HtmlIndent_CheckUserSettings() "{{{
     26303-    if exists("g:html_indent_inctags")
     26304-       call s:AddITags(split(g:html_indent_inctags, ","))
     26305-    endif
     26306-    if exists("g:html_indent_autotags")
     26307-       call s:RemoveITags(split(g:html_indent_autotags, ","))
     26308-    endif
     26309+" Check and process settings from b:html_indent and g:html_indent... variables.
     26310+" Prefer using buffer-local settings over global settings, so that there can
     26311+" be defaults for all HTML files and exceptions for specific types of HTML
     26312+" files.
     26313+func! HtmlIndent_CheckUserSettings()
     26314+  "{{{
     26315+  let inctags = ''
     26316+  if exists("b:html_indent_inctags")
     26317+    let inctags = b:html_indent_inctags
     26318+  elseif exists("g:html_indent_inctags")
     26319+    let inctags = g:html_indent_inctags
     26320+  endif
     26321+  let b:hi_tags = {}
     26322+  if len(inctags) > 0
     26323+    call s:AddITags(b:hi_tags, split(inctags, ","))
     26324+  endif
     26325+
     26326+  let autotags = ''
     26327+  if exists("b:html_indent_autotags")
     26328+    let autotags = b:html_indent_autotags
     26329+  elseif exists("g:html_indent_autotags")
     26330+    let autotags = g:html_indent_autotags
     26331+  endif
     26332+  let b:hi_removed_tags = {}
     26333+  if autotags
     26334+    call s:RemoveITags(b:hi_removed_tags, split(autotags, ","))
     26335+  endif
     26336+
     26337+  " Syntax names indicating being inside a string of an attribute value.
     26338+  let string_names = []
     26339+  if exists("b:html_indent_string_names")
     26340+    let string_names = b:html_indent_string_names
     26341+  elseif exists("g:html_indent_string_names")
     26342+    let string_names = g:html_indent_string_names
     26343+  endif
     26344+  let b:hi_insideStringNames = ['htmlString']
     26345+  if len(string_names) > 0
     26346+    for s in string_names
     26347+      call add(b:hi_insideStringNames, s)
     26348+    endfor
     26349+  endif
     26350 
     26351-    let indone = {"zero": 0
     26352-               \,"auto": "indent(prevnonblank(v:lnum-1))"
     26353-               \,"inc": "b:indent.blocktagind + s:ShiftWidth()"}
     26354-    if exists("g:html_indent_script1")
     26355-       let s:js1indent = get(indone, g:html_indent_script1, indone.zero)
     26356-    endif
     26357-    if exists("g:html_indent_style1")
     26358-       let s:css1indent = get(indone, g:html_indent_style1, indone.zero)
     26359+  " Syntax names indicating being inside a tag.
     26360+  let tag_names = []
     26361+  if exists("b:html_indent_tag_names")
     26362+    let tag_names = b:html_indent_tag_names
     26363+  elseif exists("g:html_indent_tag_names")
     26364+    let tag_names = g:html_indent_tag_names
     26365+  endif
     26366+  let b:hi_insideTagNames = ['htmlTag', 'htmlScriptTag']
     26367+  if len(tag_names) > 0
     26368+    for s in tag_names
     26369+      call add(b:hi_insideTagNames, s)
     26370+    endfor
     26371+  endif
     26372+
     26373+  let indone = {"zero": 0
     26374+              \,"auto": "indent(prevnonblank(v:lnum-1))"
     26375+              \,"inc": "b:hi_indent.blocktagind + s:ShiftWidth()"}
     26376+
     26377+  let script1 = ''
     26378+  if exists("b:html_indent_script1")
     26379+    let script1 = b:html_indent_script1
     26380+  elseif exists("g:html_indent_script1")
     26381+    let script1 = g:html_indent_script1
     26382+  endif
     26383+  if len(script1) > 0
     26384+    let b:hi_js1indent = get(indone, script1, indone.zero)
     26385+  else
     26386+    let b:hi_js1indent = 0
     26387+  endif
     26388+
     26389+  let style1 = ''
     26390+  if exists("b:html_indent_style1")
     26391+    let style1 = b:html_indent_style1
     26392+  elseif exists("g:html_indent_style1")
     26393+    let style1 = g:html_indent_style1
     26394+  endif
     26395+  if len(style1) > 0
     26396+    let b:hi_css1indent = get(indone, style1, indone.zero)
     26397+  else
     26398+    let b:hi_css1indent = 0
     26399+  endif
     26400+
     26401+  if !exists('b:html_indent_line_limit')
     26402+    if exists('g:html_indent_line_limit')
     26403+      let b:html_indent_line_limit = g:html_indent_line_limit
     26404+    else
     26405+      let b:html_indent_line_limit = 200
     26406     endif
     26407+  endif
     26408 endfunc "}}}
     26409 
     26410-" Init Script Vars  "{{{
     26411-let s:usestate = 1
     26412-let s:css1indent = 0
     26413-let s:js1indent = 0
     26414-" not to be changed:
     26415-let s:endtags = [0,0,0,0,0,0,0,0]   " some places unused
     26416-let s:newstate = {}
     26417+" Init Script Vars
     26418+"{{{
     26419+let b:hi_lasttick = 0
     26420+let b:hi_newstate = {}
     26421 let s:countonly = 0
     26422  "}}}
     26423-func! s:AddITags(taglist) "{{{
     26424-    for itag in a:taglist
     26425-       let s:indent_tags[itag] = 1
     26426-       let s:indent_tags['/'.itag] = -1
     26427-    endfor
     26428-endfunc "}}}
     26429-func! s:AddBlockTag(tag, id, ...) "{{{
     26430-    if !(a:id >= 2 && a:id < 2+len(s:endtags))
     26431-       return
     26432-    endif
     26433-    let s:indent_tags[a:tag] = a:id
     26434-    if a:0 == 0
     26435-       let s:indent_tags['/'.a:tag] = -a:id
     26436-       let s:endtags[a:id-2] = "</".a:tag.">"
     26437-    else
     26438-       let s:indent_tags[a:1] = -a:id
     26439-       let s:endtags[a:id-2] = a:1
     26440-    endif
     26441-endfunc "}}}
     26442-func! s:RemoveITags(taglist) "{{{
     26443-    " remove itags (protect blocktags from being removed)
     26444-    for itag in a:taglist
     26445-       if !has_key(s:indent_tags, itag) || s:indent_tags[itag] != 1
     26446-           continue
     26447-       endif
     26448-       unlet s:indent_tags[itag]
     26449-       if itag =~ '^\w\+$'
     26450-           unlet s:indent_tags["/".itag]
     26451-       endif
     26452-    endfor
     26453-endfunc "}}}
     26454-" Add Indent Tags: {{{
     26455-if !exists("s:indent_tags")
     26456-    let s:indent_tags = {}
     26457-endif
     26458 
     26459-" old tags:
     26460-call s:AddITags(['a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
     26461-    \ 'blockquote', 'button', 'caption', 'center', 'cite', 'code', 'colgroup',
     26462-    \ 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', 'form',
     26463-    \ 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'i', 'iframe', 'ins', 'kbd',
     26464-    \ 'label', 'legend', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
     26465+" Fill the s:indent_tags dict with known tags.
     26466+" The key is "tagname" or "/tagname".  {{{
     26467+" The value is:
     26468+" 1   opening tag
     26469+" 2   "pre"
     26470+" 3   "script"
     26471+" 4   "style"
     26472+" 5   comment start
     26473+" -1  closing tag
     26474+" -2  "/pre"
     26475+" -3  "/script"
     26476+" -4  "/style"
     26477+" -5  comment end
     26478+let s:indent_tags = {}
     26479+let s:endtags = [0,0,0,0,0,0]   " long enough for the highest index
     26480+"}}}
     26481+
     26482+" Add a list of tag names for a pair of <tag> </tag> to "tags".
     26483+func! s:AddITags(tags, taglist)
     26484+  "{{{
     26485+  for itag in a:taglist
     26486+    let a:tags[itag] = 1
     26487+    let a:tags['/' . itag] = -1
     26488+  endfor
     26489+endfunc "}}}
     26490+
     26491+" Take a list of tag name pairs that are not to be used as tag pairs.
     26492+func! s:RemoveITags(tags, taglist)
     26493+  "{{{
     26494+  for itag in a:taglist
     26495+    let a:tags[itag] = 1
     26496+    let a:tags['/' . itag] = 1
     26497+  endfor
     26498+endfunc "}}}
     26499+
     26500+" Add a block tag, that is a tag with a different kind of indenting.
     26501+func! s:AddBlockTag(tag, id, ...)
     26502+  "{{{
     26503+  if !(a:id >= 2 && a:id < len(s:endtags))
     26504+    echoerr 'AddBlockTag ' . a:id
     26505+    return
     26506+  endif
     26507+  let s:indent_tags[a:tag] = a:id
     26508+  if a:0 == 0
     26509+    let s:indent_tags['/' . a:tag] = -a:id
     26510+    let s:endtags[a:id] = "</" . a:tag . ">"
     26511+  else
     26512+    let s:indent_tags[a:1] = -a:id
     26513+    let s:endtags[a:id] = a:1
     26514+  endif
     26515+endfunc "}}}
     26516+
     26517+" Add known tag pairs.
     26518+" Self-closing tags and tags that are sometimes {{{
     26519+" self-closing (e.g., <p>) are not here (when encountering </p> we can find
     26520+" the matching <p>, but not the other way around).
     26521+" Old HTML tags:
     26522+call s:AddITags(s:indent_tags, [
     26523+    \ 'a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
     26524+    \ 'blockquote', 'body', 'button', 'caption', 'center', 'cite', 'code',
     26525+    \ 'colgroup', 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font',
     26526+    \ 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'html',
     26527+    \ 'i', 'iframe', 'ins', 'kbd', 'label', 'legend', 'li',
     26528+    \ 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
     26529     \ 'optgroup', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub',
     26530     \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td',
     26531-    \ 'tr', 'tfoot', 'thead'])
     26532+    \ 'tr', 'tbody', 'tfoot', 'thead'])
     26533 
     26534-" tags added 2011 Sep 09 (especially HTML5 tags):
     26535-call s:AddITags(['area', 'article', 'aside', 'audio', 'bdi', 'canvas',
     26536+" Tags added 2011 Sep 09 (especially HTML5 tags):
     26537+call s:AddITags(s:indent_tags, [
     26538+    \ 'area', 'article', 'aside', 'audio', 'bdi', 'canvas',
     26539     \ 'command', 'datalist', 'details', 'embed', 'figure', 'footer',
     26540     \ 'header', 'group', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
     26541     \ 'progress', 'ruby', 'section', 'svg', 'texture', 'time', 'video',
     26542     \ 'wbr', 'text'])
     26543-
     26544 "}}}
     26545-" Add Block Tags: contain alien content "{{{
     26546+
     26547+" Add Block Tags: these contain alien content
     26548+"{{{
     26549 call s:AddBlockTag('pre', 2)
     26550 call s:AddBlockTag('script', 3)
     26551 call s:AddBlockTag('style', 4)
     26552 call s:AddBlockTag('<!--', 5, '-->')
     26553 "}}}
     26554 
     26555-func! s:CountITags(...) "{{{
     26556-
     26557-    " relative indent steps for current line [unit &sw]:
     26558-    let s:curind = 0
     26559-    " relative indent steps for next line [unit &sw]:
     26560-    let s:nextrel = 0
     26561-
     26562-    if a:0==0
     26563-       let s:block = s:newstate.block
     26564-       let tmpline = substitute(s:curline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
     26565-       if s:block == 3
     26566-           let s:newstate.scripttype = s:GetScriptType(matchstr(tmpline, '\C.*<SCRIPT\>\zs[^>]*'))
     26567-       endif
     26568-       let s:newstate.block = s:block
     26569-    else
     26570-       let s:block = 0         " assume starting outside of a block
     26571-       let s:countonly = 1     " don't change state
     26572-       let tmpline = substitute(s:altline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
     26573-       let s:countonly = 0
     26574-    endif
     26575-endfunc "}}}
     26576-func! s:CheckTag(itag) "{{{
     26577-    " "tag" or "/tag" or "<!--" or "-->"
     26578-    let ind = get(s:indent_tags, a:itag)
     26579-    if ind == -1
     26580-       " closing tag
     26581-       if s:block != 0
     26582-           " ignore itag within a block
     26583-           return "foo"
     26584-       endif
     26585-       if s:nextrel == 0
     26586-           let s:curind -= 1
     26587-       else
     26588-           let s:nextrel -= 1
     26589-       endif
     26590-       " if s:curind >= 1
     26591-       "     let s:curind -= 1
     26592-       " else
     26593-       "     let s:nextrel -= 1
     26594-       " endif
     26595-    elseif ind == 1
     26596-       " opening tag
     26597-       if s:block != 0
     26598-           return "foo"
     26599-       endif
     26600-       let s:nextrel += 1
     26601-    elseif ind != 0
     26602-       " block-tag (opening or closing)
     26603-       return s:Blocktag(a:itag, ind)
     26604-    endif
     26605-    " else ind==0 (other tag found): keep indent
     26606-    return "foo"   " no matter
     26607-endfunc "}}}
     26608-func! s:Blocktag(blocktag, ind) "{{{
     26609-    if a:ind > 0
     26610-       " a block starts here
     26611-       if s:block != 0
     26612-           " already in a block (nesting) - ignore
     26613-           " especially ignore comments after other blocktags
     26614-           return "foo"
     26615-       endif
     26616-       let s:block = a:ind             " block type
     26617-       if s:countonly
     26618-           return "foo"
     26619-       endif
     26620-       let s:newstate.blocklnr = v:lnum
     26621-       " save allover indent for the endtag
     26622-       let s:newstate.blocktagind = b:indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth()
     26623-       if a:ind == 3
     26624-           return "SCRIPT"    " all except this must be lowercase
     26625-           " line is to be checked again for the type attribute
     26626-       endif
     26627-    else
     26628-       let s:block = 0
     26629-       " we get here if starting and closing block-tag on same line
     26630+" Return non-zero when "tagname" is an opening tag, not being a block tag, for
     26631+" which there should be a closing tag.  Can be used by scripts that include
     26632+" HTML indenting.
     26633+func! HtmlIndent_IsOpenTag(tagname)
     26634+  "{{{
     26635+  if get(s:indent_tags, a:tagname) == 1
     26636+    return 1
     26637+  endif
     26638+  return get(b:hi_tags, a:tagname) == 1
     26639+endfunc "}}}
     26640+
     26641+" Get the value for "tagname", taking care of buffer-local tags.
     26642+func! s:get_tag(tagname)
     26643+  "{{{
     26644+  let i = get(s:indent_tags, a:tagname)
     26645+  if (i == 1 || i == -1) && get(b:hi_removed_tags, a:tagname) != 0
     26646+    return 0
     26647+  endif
     26648+  if i == 0
     26649+    let i = get(b:hi_tags, a:tagname)
     26650+  endif
     26651+  return i
     26652+endfunc "}}}
     26653+
     26654+" Count the number of start and end tags in "text".
     26655+func! s:CountITags(text)
     26656+  "{{{
     26657+  " Store the result in s:curind and s:nextrel.
     26658+  let s:curind = 0  " relative indent steps for current line [unit &sw]:
     26659+  let s:nextrel = 0  " relative indent steps for next line [unit &sw]:
     26660+  let s:block = 0              " assume starting outside of a block
     26661+  let s:countonly = 1  " don't change state
     26662+  call substitute(a:text, '<\zs/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
     26663+  let s:countonly = 0
     26664+endfunc "}}}
     26665+
     26666+" Count the number of start and end tags in text.
     26667+func! s:CountTagsAndState(text)
     26668+  "{{{
     26669+  " Store the result in s:curind and s:nextrel.  Update b:hi_newstate.block.
     26670+  let s:curind = 0  " relative indent steps for current line [unit &sw]:
     26671+  let s:nextrel = 0  " relative indent steps for next line [unit &sw]:
     26672+
     26673+  let s:block = b:hi_newstate.block
     26674+  let tmp = substitute(a:text, '<\zs/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
     26675+  if s:block == 3
     26676+    let b:hi_newstate.scripttype = s:GetScriptType(matchstr(tmp, '\C.*<SCRIPT\>\zs[^>]*'))
     26677+  endif
     26678+  let b:hi_newstate.block = s:block
     26679+endfunc "}}}
     26680+
     26681+" Used by s:CountITags() and s:CountTagsAndState().
     26682+func! s:CheckTag(itag)
     26683+  "{{{
     26684+  " Returns an empty string or "SCRIPT".
     26685+  " a:itag can be "tag" or "/tag" or "<!--" or "-->"
     26686+  let ind = s:get_tag(a:itag)
     26687+  if ind == -1
     26688+    " closing tag
     26689+    if s:block != 0
     26690+      " ignore itag within a block
     26691+      return ""
     26692     endif
     26693-    return "foo"
     26694-endfunc "}}}
     26695-func! s:GetScriptType(str) "{{{
     26696-    if a:str == "" || a:str =~ "java"
     26697-       return "javascript"
     26698+    if s:nextrel == 0
     26699+      let s:curind -= 1
     26700     else
     26701-       return ""
     26702+      let s:nextrel -= 1
     26703     endif
     26704-endfunc "}}}
     26705+  elseif ind == 1
     26706+    " opening tag
     26707+    if s:block != 0
     26708+      return ""
     26709+    endif
     26710+    let s:nextrel += 1
     26711+  elseif ind != 0
     26712+    " block-tag (opening or closing)
     26713+    return s:CheckBlockTag(a:itag, ind)
     26714+  " else ind==0 (other tag found): keep indent
     26715+  endif
     26716+  return ""
     26717+endfunc "}}}
     26718+
     26719+" Used by s:CheckTag(). Returns an empty string or "SCRIPT".
     26720+func! s:CheckBlockTag(blocktag, ind)
     26721+  "{{{
     26722+  if a:ind > 0
     26723+    " a block starts here
     26724+    if s:block != 0
     26725+      " already in a block (nesting) - ignore
     26726+      " especially ignore comments after other blocktags
     26727+      return ""
     26728+    endif
     26729+    let s:block = a:ind                " block type
     26730+    if s:countonly
     26731+      return ""
     26732+    endif
     26733+    let b:hi_newstate.blocklnr = v:lnum
     26734+    " save allover indent for the endtag
     26735+    let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth()
     26736+    if a:ind == 3
     26737+      return "SCRIPT"    " all except this must be lowercase
     26738+      " line is to be checked again for the type attribute
     26739+    endif
     26740+  else
     26741+    let s:block = 0
     26742+    " we get here if starting and closing a block-tag on the same line
     26743+  endif
     26744+  return ""
     26745+endfunc "}}}
     26746+
     26747+" Return the <script> type: either "javascript" or ""
     26748+func! s:GetScriptType(str)
     26749+  "{{{
     26750+  if a:str == "" || a:str =~ "java"
     26751+    return "javascript"
     26752+  else
     26753+    return ""
     26754+  endif
     26755+endfunc "}}}
     26756+
     26757+" Look back in the file, starting at a:lnum - 1, to compute a state for the
     26758+" start of line a:lnum.  Return the new state.
     26759+func! s:FreshState(lnum)
     26760+  "{{{
     26761+  " A state is to know ALL relevant details about the
     26762+  " lines 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
     26763+  " fast (incremental).
     26764+  " TODO: this should be split up in detecting the block type and computing the
     26765+  " indent for the block type, so that when we do not know the indent we do
     26766+  " not need to clear the whole state and re-detect the block type again.
     26767+  " State:
     26768+  "    lnum            last indented line == prevnonblank(a:lnum - 1)
     26769+  "    block = 0       a:lnum located within special tag: 0:none, 2:<pre>,
     26770+  "                    3:<script>, 4:<style>, 5:<!--
     26771+  "    baseindent      use this indent for line a:lnum as a start - kind of
     26772+  "                    autoindent (if block==0)
     26773+  "    scripttype = '' type attribute of a script tag (if block==3)
     26774+  "    blocktagind     indent for current opening (get) and closing (set)
     26775+  "                    blocktag (if block!=0)
     26776+  "    blocklnr        lnum of starting blocktag (if block!=0)
     26777+  "    inattr          line {lnum} starts with attributes of a tag
     26778+  let state = {}
     26779+  let state.lnum = prevnonblank(a:lnum - 1)
     26780+  let state.scripttype = ""
     26781+  let state.blocktagind = -1
     26782+  let state.block = 0
     26783+  let state.baseindent = 0
     26784+  let state.blocklnr = 0
     26785+  let state.inattr = 0
     26786+
     26787+  if state.lnum == 0
     26788+    return state
     26789+  endif
     26790 
     26791-func! s:FreshState(lnum) "{{{
     26792-    " Look back in the file (lines 1 to a:lnum-1) to calc a state for line
     26793-    " a:lnum.  A state is to know ALL relevant details about the lines
     26794-    " 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
     26795-    " fast (incremental).
     26796-    " State:
     26797-    "  lnum            last indented line == prevnonblank(a:lnum - 1)
     26798-    "  block = 0       a:lnum located within special tag: 0:none, 2:<pre>,
     26799-    "                  3:<script>, 4:<style>, 5:<!--
     26800-    "  baseindent      use this indent for line a:lnum as a start - kind of
     26801-    "                  autoindent (if block==0)
     26802-    "  scripttype = '' type attribute of a script tag (if block==3)
     26803-    "  blocktagind     indent for current opening (get) and closing (set)
     26804-    "                  blocktag (if block!=0)
     26805-    "  blocklnr        lnum of starting blocktag (if block!=0)
     26806-    "  inattr          line {lnum} starts with attributes of a tag
     26807-    let state = {}
     26808-    let state.lnum = prevnonblank(a:lnum - 1)
     26809-    let state.scripttype = ""
     26810-    let state.blocktagind = -1
     26811-    let state.block = 0
     26812-    let state.baseindent = 0
     26813-    let state.blocklnr = 0
     26814-    let state.inattr = 0
     26815-
     26816-    if state.lnum == 0
     26817-       return state
     26818-    endif
     26819-
     26820-    " Heuristic:
     26821-    " remember startline state.lnum
     26822-    " look back for <pre, </pre, <script, </script, <style, </style tags
     26823-    " remember stopline
     26824-    " if opening tag found,
     26825-    "  assume a:lnum within block
     26826-    " else
     26827-    "  look back in result range (stopline, startline) for comment
     26828-    "      \ delimiters (<!--, -->)
     26829-    "  if comment opener found,
     26830-    "      assume a:lnum within comment
     26831-    "  else
     26832-    "      assume usual html for a:lnum
     26833-    "      if a:lnum-1 has a closing comment
     26834-    "          look back to get indent of comment opener
     26835-    " FI
     26836-
     26837-    " look back for blocktag
     26838-    call cursor(a:lnum, 1)
     26839-    let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
     26840+  " Heuristic:
     26841+  " remember startline state.lnum
     26842+  " look back for <pre, </pre, <script, </script, <style, </style tags
     26843+  " remember stopline
     26844+  " if opening tag found,
     26845+  "    assume a:lnum within block
     26846+  " else
     26847+  "    look back in result range (stopline, startline) for comment
     26848+  "        \ delimiters (<!--, -->)
     26849+  "    if comment opener found,
     26850+  "        assume a:lnum within comment
     26851+  "    else
     26852+  "        assume usual html for a:lnum
     26853+  "        if a:lnum-1 has a closing comment
     26854+  "            look back to get indent of comment opener
     26855+  " FI
     26856+
     26857+  " look back for a blocktag
     26858+  call cursor(a:lnum, 1)
     26859+  let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
     26860+  if stopline > 0
     26861     " fugly ... why isn't there searchstr()
     26862     let tagline = tolower(getline(stopline))
     26863-    let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol-1)
     26864-    if stopline > 0 && blocktag[0] != "/"
     26865-       " opening tag found, assume a:lnum within block
     26866-       let state.block = s:indent_tags[blocktag]
     26867-       if state.block == 3
     26868-           let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
     26869-       endif
     26870-       let state.blocklnr = stopline
     26871-       " check preceding tags in the line:
     26872-       let s:altline = tagline[: stopcol-2]
     26873-       call s:CountITags(1)
     26874-       let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth()
     26875-       return state
     26876+    let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol - 1)
     26877+    if blocktag[0] != "/"
     26878+      " opening tag found, assume a:lnum within block
     26879+      let state.block = s:indent_tags[blocktag]
     26880+      if state.block == 3
     26881+        let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
     26882+      endif
     26883+      let state.blocklnr = stopline
     26884+      " check preceding tags in the line:
     26885+      call s:CountITags(tagline[: stopcol-2])
     26886+      let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth()
     26887+      return state
     26888     elseif stopline == state.lnum
     26889-       " handle special case: previous line (= state.lnum) contains a
     26890-       " closing blocktag which is preceded by line-noise;
     26891-       " blocktag == "/..."
     26892-       let swendtag = match(tagline, '^\s*</') >= 0
     26893-       if !swendtag
     26894-           let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
     26895-           let s:altline = tolower(getline(bline)[: bcol-2])
     26896-           call s:CountITags(1)
     26897-           let state.baseindent = indent(bline) + (s:nextrel+s:curline) * s:ShiftWidth()
     26898-           return state
     26899-       endif
     26900-    endif
     26901-
     26902-    " else look back for comment
     26903-    call cursor(a:lnum, 1)
     26904-    let [comline, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
     26905-    if found == 2
     26906-       " comment opener found, assume a:lnum within comment
     26907-       let state.block = 5
     26908-       let state.blocklnr = comline
     26909-       " check preceding tags in the line:
     26910-       let s:altline = tolower(getline(comline)[: comcol-2])
     26911-       call s:CountITags(1)
     26912-       let state.blocktagind = indent(comline) + (s:curind + s:nextrel) * s:ShiftWidth()
     26913-       return state
     26914-    endif
     26915-
     26916-    " else within usual html
     26917-    let s:altline = tolower(getline(state.lnum))
     26918-    " check a:lnum-1 for closing comment (we need indent from the opening line)
     26919-    let comcol = stridx(s:altline, '-->')
     26920-    if comcol >= 0
     26921-       call cursor(state.lnum, comcol+1)
     26922-       let [comline, comcol] = searchpos('<!--', 'bW')
     26923-       if comline == state.lnum
     26924-           let s:altline = s:altline[: comcol-2]
     26925-       else
     26926-           let s:altline = tolower(getline(comline)[: comcol-2])
     26927-       endif
     26928-       call s:CountITags(1)
     26929-       let state.baseindent = indent(comline) + (s:nextrel+s:curline) * s:ShiftWidth()
     26930-       return state
     26931-       " TODO check tags that follow "-->"
     26932-    endif
     26933-
     26934-    " else no comments
     26935-    call s:CountITags(1)
     26936-    let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth()
     26937-    " line starts with end tag
     26938-    let swendtag = match(s:altline, '^\s*</') >= 0
     26939-    if !swendtag
     26940-       let state.baseindent += s:curind * s:ShiftWidth()
     26941+      " handle special case: previous line (= state.lnum) contains a
     26942+      " closing blocktag which is preceded by line-noise;
     26943+      " blocktag == "/..."
     26944+      let swendtag = match(tagline, '^\s*</') >= 0
     26945+      if !swendtag
     26946+        let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
     26947+        call s:CountITags(tolower(getline(bline)[: bcol-2]))
     26948+        let state.baseindent = indent(bline) + (s:curind + s:nextrel) * s:ShiftWidth()
     26949+        return state
     26950+      endif
     26951+    endif
     26952+  endif
     26953+
     26954+  " else look back for comment
     26955+  call cursor(a:lnum, 1)
     26956+  let [comlnum, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
     26957+  if found == 2
     26958+    " comment opener found, assume a:lnum within comment
     26959+    let state.block = 5
     26960+    let state.blocklnr = comlnum
     26961+    " check preceding tags in the line:
     26962+    call s:CountITags(tolower(getline(comlnum)[: comcol-2]))
     26963+    let state.blocktagind = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth()
     26964+    return state
     26965+  endif
     26966+
     26967+  " else within usual HTML
     26968+  let text = tolower(getline(state.lnum))
     26969+
     26970+  " Check a:lnum-1 for closing comment (we need indent from the opening line).
     26971+  " Not when other tags follow (might be --> inside a string).
     26972+  let comcol = stridx(text, '-->')
     26973+  if comcol >= 0 && match(text, '[<>]', comcol) <= 0
     26974+    call cursor(state.lnum, comcol + 1)
     26975+    let [comlnum, comcol] = searchpos('<!--', 'bW')
     26976+    if comlnum == state.lnum
     26977+      let text = text[: comcol-2]
     26978+    else
     26979+      let text = tolower(getline(comlnum)[: comcol-2])
     26980     endif
     26981+    call s:CountITags(text)
     26982+    let state.baseindent = indent(comlnum) + (s:curind + s:nextrel) * s:ShiftWidth()
     26983+    " TODO check tags that follow "-->"
     26984     return state
     26985-endfunc "}}}
     26986+  endif
     26987+
     26988+  " Check if the previous line starts with end tag.
     26989+  let swendtag = match(text, '^\s*</') >= 0
     26990 
     26991-func! s:Alien2() "{{{
     26992-    " <pre> block
     26993+  " If previous line ended in a closing tag, line up with the opening tag.
     26994+  if !swendtag && text =~ '</\w\+\s*>\s*$'
     26995+    call cursor(state.lnum, 99999)
     26996+    normal F<
     26997+    let start_lnum = HtmlIndent_FindStartTag()
     26998+    if start_lnum > 0
     26999+      let state.baseindent = indent(start_lnum)
     27000+      if col('.') > 2
     27001+        " check for tags before the matching opening tag.
     27002+        let text = getline(start_lnum)
     27003+        let swendtag = match(text, '^\s*</') >= 0
     27004+        call s:CountITags(text[: col('.') - 2])
     27005+        let state.baseindent += s:nextrel * s:ShiftWidth()
     27006+        if !swendtag
     27007+          let state.baseindent += s:curind * s:ShiftWidth()
     27008+        endif
     27009+      endif
     27010+      return state
     27011+    endif
     27012+  endif
     27013+
     27014+  " Else: no comments. Skip backwards to find the tag we're inside.
     27015+  let [state.lnum, found] = HtmlIndent_FindTagStart(state.lnum)
     27016+  " Check if that line starts with end tag.
     27017+  let text = getline(state.lnum)
     27018+  let swendtag = match(text, '^\s*</') >= 0
     27019+  call s:CountITags(tolower(text))
     27020+  let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth()
     27021+  if !swendtag
     27022+    let state.baseindent += s:curind * s:ShiftWidth()
     27023+  endif
     27024+  return state
     27025+endfunc "}}}
     27026+
     27027+" Indent inside a <pre> block: Keep indent as-is.
     27028+func! s:Alien2()
     27029+  "{{{
     27030+  return -1
     27031+endfunc "}}}
     27032+
     27033+" Return the indent inside a <script> block for javascript.
     27034+func! s:Alien3()
     27035+  "{{{
     27036+  let lnum = prevnonblank(v:lnum - 1)
     27037+  while lnum > 1 && getline(lnum) =~ '^\s*/[/*]'
     27038+    " Skip over comments to avoid that cindent() aligns with the <script> tag
     27039+    let lnum = prevnonblank(lnum - 1)
     27040+  endwhile
     27041+  if lnum == b:hi_indent.blocklnr
     27042+    " indent for the first line after <script>
     27043+    return eval(b:hi_js1indent)
     27044+  endif
     27045+  if b:hi_indent.scripttype == "javascript"
     27046+    return cindent(v:lnum)
     27047+  else
     27048     return -1
     27049+  endif
     27050 endfunc "}}}
     27051-func! s:Alien3() "{{{
     27052-    " <script> javascript
     27053-    if prevnonblank(v:lnum-1) == b:indent.blocklnr
     27054-       " indent for the first line after <script>
     27055-       return eval(s:js1indent)
     27056-    endif
     27057-    if b:indent.scripttype == "javascript"
     27058-       return cindent(v:lnum)
     27059+
     27060+" Return the indent inside a <style> block.
     27061+func! s:Alien4()
     27062+  "{{{
     27063+  if prevnonblank(v:lnum-1) == b:hi_indent.blocklnr
     27064+    " indent for first content line
     27065+    return eval(b:hi_css1indent)
     27066+  endif
     27067+  return s:CSSIndent()
     27068+endfunc "}}}
     27069+
     27070+" Indending inside a <style> block.  Returns the indent.
     27071+func! s:CSSIndent()
     27072+  "{{{
     27073+  " This handles standard CSS and also Closure stylesheets where special lines
     27074+  " start with @.
     27075+  " When the line starts with '*' or the previous line starts with "/*"
     27076+  " and does not end in "*/", use C indenting to format the comment.
     27077+  " Adopted $VIMRUNTIME/indent/css.vim
     27078+  let curtext = getline(v:lnum)
     27079+  if curtext =~ '^\s*[*]'
     27080+        \ || (v:lnum > 1 && getline(v:lnum - 1) =~ '\s*/\*'
     27081+        \     && getline(v:lnum - 1) !~ '\*/\s*$')
     27082+    return cindent(v:lnum)
     27083+  endif
     27084+
     27085+  let min_lnum = b:hi_indent.blocklnr
     27086+  let prev_lnum = s:CssPrevNonComment(v:lnum - 1, min_lnum)
     27087+  let [prev_lnum, found] = HtmlIndent_FindTagStart(prev_lnum)
     27088+  if prev_lnum <= min_lnum
     27089+    " Just below the <style> tag, indent for first content line after comments.
     27090+    return eval(b:hi_css1indent)
     27091+  endif
     27092+
     27093+  " If the current line starts with "}" align with it's match.
     27094+  if curtext =~ '^\s*}'
     27095+    call cursor(v:lnum, 1)
     27096+    try
     27097+      normal! %
     27098+      " Found the matching "{", align with it after skipping unfinished lines.
     27099+      let align_lnum = s:CssFirstUnfinished(line('.'), min_lnum)
     27100+      return indent(align_lnum)
     27101+    catch
     27102+      " can't find it, try something else, but it's most likely going to be
     27103+      " wrong
     27104+    endtry
     27105+  endif
     27106+
     27107+  " add indent after {
     27108+  let brace_counts = HtmlIndent_CountBraces(prev_lnum)
     27109+  let extra = brace_counts.c_open * s:ShiftWidth()
     27110+
     27111+  let prev_text = getline(prev_lnum)
     27112+  let below_end_brace = prev_text =~ '}\s*$'
     27113+
     27114+  " Search back to align with the first line that's unfinished.
     27115+  let align_lnum = s:CssFirstUnfinished(prev_lnum, min_lnum)
     27116+
     27117+  " Handle continuation lines if aligning with previous line and not after a
     27118+  " "}".
     27119+  if extra == 0 && align_lnum == prev_lnum && !below_end_brace
     27120+    let prev_hasfield = prev_text =~ '^\s*[a-zA-Z0-9-]\+:'
     27121+    let prev_special = prev_text =~ '^\s*\(/\*\|@\)'
     27122+    if curtext =~ '^\s*\(/\*\|@\)'
     27123+      " if the current line is not a comment or starts with @ (used by template
     27124+      " systems) reduce indent if previous line is a continuation line
     27125+      if !prev_hasfield && !prev_special
     27126+        let extra = -s:ShiftWidth()
     27127+      endif
     27128     else
     27129-       return -1
     27130+      let cur_hasfield = curtext =~ '^\s*[a-zA-Z0-9-]\+:'
     27131+      let prev_unfinished = s:CssUnfinished(prev_text)
     27132+      if !cur_hasfield && (prev_hasfield || prev_unfinished)
     27133+        " Continuation line has extra indent if the previous line was not a
     27134+        " continuation line.
     27135+        let extra = s:ShiftWidth()
     27136+        " Align with @if
     27137+        if prev_text =~ '^\s*@if '
     27138+          let extra = 4
     27139+        endif
     27140+      elseif cur_hasfield && !prev_hasfield && !prev_special
     27141+        " less indent below a continuation line
     27142+        let extra = -s:ShiftWidth()
     27143+      endif
     27144+    endif
     27145+  endif
     27146+
     27147+  if below_end_brace
     27148+    " find matching {, if that line starts with @ it's not the start of a rule
     27149+    " but something else from a template system
     27150+    call cursor(prev_lnum, 1)
     27151+    call search('}\s*$')
     27152+    try
     27153+      normal! %
     27154+      " Found the matching "{", align with it.
     27155+      let align_lnum = s:CssFirstUnfinished(line('.'), min_lnum)
     27156+      let special = getline(align_lnum) =~ '^\s*@'
     27157+    catch
     27158+      let special = 0
     27159+    endtry
     27160+    if special
     27161+      " do not reduce indent below @{ ... }
     27162+      if extra < 0
     27163+        let extra += s:ShiftWidth()
     27164+      endif
     27165+    else
     27166+      let extra -= (brace_counts.c_close - (prev_text =~ '^\s*}')) * s:ShiftWidth()
     27167     endif
     27168-endfunc "}}}
     27169-func! s:Alien4() "{{{
     27170-    " <style>
     27171-    if prevnonblank(v:lnum-1) == b:indent.blocklnr
     27172-       " indent for first content line
     27173-       return eval(s:css1indent)
     27174-    endif
     27175-    return s:CSSIndent()
     27176-endfunc
     27177-
     27178-func! s:CSSIndent() "{{{
     27179-    " adopted $VIMRUNTIME/indent/css.vim
     27180-    if getline(v:lnum) =~ '^\s*[*}]'
     27181-       return cindent(v:lnum)
     27182-    endif
     27183-    let minline = b:indent.blocklnr
     27184-    let pnum = s:css_prevnoncomment(v:lnum - 1, minline)
     27185-    if pnum <= minline
     27186-       " < is to catch errors
     27187-       " indent for first content line after comments
     27188-       return eval(s:css1indent)
     27189-    endif
     27190-    let ind = indent(pnum) + s:css_countbraces(pnum, 1) * s:ShiftWidth()
     27191-    let pline = getline(pnum)
     27192-    if pline =~ '}\s*$'
     27193-       let ind -= (s:css_countbraces(pnum, 0) - (pline =~ '^\s*}')) * s:ShiftWidth()
     27194-    endif
     27195-    return ind
     27196-endfunc "}}}
     27197-func! s:css_prevnoncomment(lnum, stopline) "{{{
     27198-    " caller starts from a line a:lnum-1 that is not a comment
     27199-    let lnum = prevnonblank(a:lnum)
     27200+  endif
     27201+
     27202+  " if no extra indent yet...
     27203+  if extra == 0
     27204+    if brace_counts.p_open > brace_counts.p_close
     27205+      " previous line has more ( than ): add a shiftwidth
     27206+      let extra = s:ShiftWidth()
     27207+    elseif brace_counts.p_open < brace_counts.p_close
     27208+      " previous line has more ) than (: subtract a shiftwidth
     27209+      let extra = -s:ShiftWidth()
     27210+    endif
     27211+  endif
     27212+
     27213+  return indent(align_lnum) + extra
     27214+endfunc "}}}
     27215+
     27216+" Inside <style>: Whether a line is unfinished.
     27217+func! s:CssUnfinished(text)
     27218+  "{{{
     27219+  return a:text =~ '\s\(||\|&&\|:\)\s*$'
     27220+endfunc "}}}
     27221+
     27222+" Search back for the first unfinished line above "lnum".
     27223+func! s:CssFirstUnfinished(lnum, min_lnum)
     27224+  "{{{
     27225+  let align_lnum = a:lnum
     27226+  while align_lnum > a:min_lnum && s:CssUnfinished(getline(align_lnum - 1))
     27227+    let align_lnum -= 1
     27228+  endwhile
     27229+  return align_lnum
     27230+endfunc "}}}
     27231+
     27232+" Find the non-empty line at or before "lnum" that is not a comment.
     27233+func! s:CssPrevNonComment(lnum, stopline)
     27234+  "{{{
     27235+  " caller starts from a line a:lnum + 1 that is not a comment
     27236+  let lnum = prevnonblank(a:lnum)
     27237+  while 1
     27238     let ccol = match(getline(lnum), '\*/')
     27239     if ccol < 0
     27240-       return lnum
     27241+      " No comment end thus its something else.
     27242+      return lnum
     27243     endif
     27244-    call cursor(lnum, ccol+1)
     27245+    call cursor(lnum, ccol + 1)
     27246+    " Search back for the /* that starts the comment
     27247     let lnum = search('/\*', 'bW', a:stopline)
     27248-    if indent(".") == virtcol(".")-1
     27249-       return prevnonblank(lnum-1)
     27250+    if indent(".") == virtcol(".") - 1
     27251+      " The  found /* is at the start of the line. Now go back to the line
     27252+      " above it and again check if it is a comment.
     27253+      let lnum = prevnonblank(lnum - 1)
     27254     else
     27255-       return lnum
     27256+      " /* is after something else, thus it's not a comment line.
     27257+      return lnum
     27258     endif
     27259+  endwhile
     27260 endfunc "}}}
     27261-func! s:css_countbraces(lnum, count_open) "{{{
     27262-    let brs = substitute(getline(a:lnum),'[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}]','','g')
     27263-    let n_open = 0
     27264-    let n_close = 0
     27265-    for brace in split(brs, '\zs')
     27266-       if brace == "{"
     27267-           let n_open += 1
     27268-       elseif brace == "}"
     27269-           if n_open > 0
     27270-               let n_open -= 1
     27271-           else
     27272-               let n_close += 1
     27273-           endif
     27274-       endif
     27275-    endfor
     27276-    return a:count_open ? n_open : n_close
     27277-endfunc "}}}
     27278-
     27279-"}}}
     27280-func! s:Alien5() "{{{
     27281-    " <!-- -->
     27282-    return -1
     27283-endfunc "}}}
     27284-
     27285-func! HtmlIndent() "{{{
     27286-    let s:curline = tolower(getline(v:lnum))
     27287-    let indentunit = s:ShiftWidth()
     27288 
     27289-    let s:newstate = {}
     27290-    let s:newstate.lnum = v:lnum
     27291+" Check the number of {} and () in line "lnum". Return a dict with the counts.
     27292+func! HtmlIndent_CountBraces(lnum)
     27293+  "{{{
     27294+  let brs = substitute(getline(a:lnum), '[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}()]', '', 'g')
     27295+  let c_open = 0
     27296+  let c_close = 0
     27297+  let p_open = 0
     27298+  let p_close = 0
     27299+  for brace in split(brs, '\zs')
     27300+    if brace == "{"
     27301+      let c_open += 1
     27302+    elseif brace == "}"
     27303+      if c_open > 0
     27304+        let c_open -= 1
     27305+      else
     27306+        let c_close += 1
     27307+      endif
     27308+    elseif brace == '('
     27309+      let p_open += 1
     27310+    elseif brace == ')'
     27311+      if p_open > 0
     27312+        let p_open -= 1
     27313+      else
     27314+        let p_close += 1
     27315+      endif
     27316+    endif
     27317+  endfor
     27318+  return {'c_open': c_open,
     27319+        \ 'c_close': c_close,
     27320+        \ 'p_open': p_open,
     27321+        \ 'p_close': p_close}
     27322+endfunc "}}}
     27323+
     27324+" Return the indent for a comment: <!-- -->
     27325+func! s:Alien5()
     27326+  "{{{
     27327+  let curtext = getline(v:lnum)
     27328+  if curtext =~ '^\s*\zs-->'
     27329+    " current line starts with end of comment, line up with comment start.
     27330+    call cursor(v:lnum, 0)
     27331+    let lnum = search('<!--', 'b')
     27332+    if lnum > 0
     27333+      " TODO: what if <!-- is not at the start of the line?
     27334+      return indent(lnum)
     27335+    endif
     27336 
     27337-    " does the line start with a closing tag?
     27338-    let swendtag = match(s:curline, '^\s*</') >= 0
     27339+    " Strange, can't find it.
     27340+    return -1
     27341+  endif
     27342 
     27343-    if prevnonblank(v:lnum-1) == b:indent.lnum && s:usestate
     27344-       " use state (continue from previous line)
     27345+  let prevlnum = prevnonblank(v:lnum - 1)
     27346+  let prevtext = getline(prevlnum)
     27347+  let idx = match(prevtext, '^\s*\zs<!--')
     27348+  if idx >= 0
     27349+    " just below comment start, add a shiftwidth
     27350+    return idx + s:ShiftWidth()
     27351+  endif
     27352+
     27353+  " Some files add 4 spaces just below a TODO line.  It's difficult to detect
     27354+  " the end of the TODO, so let's not do that.
     27355+
     27356+  " Align with the previous non-blank line.
     27357+  return indent(prevlnum)
     27358+endfunc "}}}
     27359+
     27360+" When the "lnum" line ends in ">" find the line containing the matching "<".
     27361+func! HtmlIndent_FindTagStart(lnum)
     27362+  "{{{
     27363+  " Avoids using the indent of a continuation line.
     27364+  " Moves the cursor.
     27365+  " Return two values:
     27366+  " - the matching line number or "lnum".
     27367+  " - a flag indicating whether we found the end of a tag.
     27368+  " This method is global so that HTML-like indenters can use it.
     27369+  " To avoid matching " > " or " < " inside a string require that the opening
     27370+  " "<" is followed by a word character and the closing ">" comes after a
     27371+  " non-white character.
     27372+  let idx = match(getline(a:lnum), '\S>\s*$')
     27373+  if idx > 0
     27374+    call cursor(a:lnum, idx)
     27375+    let lnum = searchpair('<\w', '' , '\S>', 'bW', '', max([a:lnum - b:html_indent_line_limit, 0]))
     27376+    if lnum > 0
     27377+      return [lnum, 1]
     27378+    endif
     27379+  endif
     27380+  return [a:lnum, 0]
     27381+endfunc "}}}
     27382+
     27383+" Find the unclosed start tag from the current cursor position.
     27384+func! HtmlIndent_FindStartTag()
     27385+  "{{{
     27386+  " The cursor must be on or before a closing tag.
     27387+  " If found, positions the cursor at the match and returns the line number.
     27388+  " Otherwise returns 0.
     27389+  let tagname = matchstr(getline('.')[col('.') - 1:], '</\zs\w\+\ze')
     27390+  let start_lnum = searchpair('<' . tagname . '\>', '', '</' . tagname . '\>', 'bW')
     27391+  if start_lnum > 0
     27392+    return start_lnum
     27393+  endif
     27394+  return 0
     27395+endfunc "}}}
     27396+
     27397+" Moves the cursor from a "<" to the matching ">".
     27398+func! HtmlIndent_FindTagEnd()
     27399+  "{{{
     27400+  " Call this with the cursor on the "<" of a start tag.
     27401+  " This will move the cursor to the ">" of the matching end tag or, when it's
     27402+  " a self-closing tag, to the matching ">".
     27403+  " Limited to look up to b:html_indent_line_limit lines away.
     27404+  let text = getline('.')
     27405+  let tagname = matchstr(text, '\w\+\|!--', col('.'))
     27406+  if tagname == '!--'
     27407+    call search('--\zs>')
     27408+  elseif s:get_tag('/' . tagname) != 0
     27409+    " tag with a closing tag, find matching "</tag>"
     27410+    call searchpair('<' . tagname, '', '</' . tagname . '\zs>', 'W', '', line('.') + b:html_indent_line_limit)
     27411+  else
     27412+    " self-closing tag, find the ">"
     27413+    call search('\S\zs>')
     27414+  endif
     27415+endfunc "}}}
     27416+
     27417+" Indenting inside a start tag. Return the correct indent or -1 if unknown.
     27418+func! s:InsideTag(foundHtmlString)
     27419+  "{{{
     27420+  if a:foundHtmlString
     27421+    " Inside an attribute string.
     27422+    " Align with the previous line or use an external function.
     27423+    let lnum = v:lnum - 1
     27424+    if lnum > 1
     27425+      if exists('b:html_indent_tag_string_func')
     27426+        return b:html_indent_tag_string_func(lnum)
     27427+      endif
     27428+      return indent(lnum)
     27429+    endif
     27430+  endif
     27431+
     27432+  " Should be another attribute: " attr="val".  Align with the previous
     27433+  " attribute start.
     27434+  let lnum = v:lnum
     27435+  while lnum > 1
     27436+    let lnum -= 1
     27437+    let text = getline(lnum)
     27438+    " Find a match with one of these, align with "attr":
     27439+    "       attr=
     27440+    "  <tag attr=
     27441+    "  text<tag attr=
     27442+    "  <tag>text</tag>text<tag attr=
     27443+    " For long lines search for the first match, finding the last match
     27444+    " gets very slow.
     27445+    if len(text) < 300
     27446+      let idx = match(text, '.*\s\zs[_a-zA-Z0-9-]\+="')
     27447     else
     27448-       " start over (know nothing)
     27449-       let b:indent = s:FreshState(v:lnum)
     27450+      let idx = match(text, '\s\zs[_a-zA-Z0-9-]\+="')
     27451     endif
     27452+    if idx > 0
     27453+      " Found the attribute.  TODO: assumes spaces, no Tabs.
     27454+      return idx
     27455+    endif
     27456+  endwhile
     27457+  return -1
     27458+endfunc "}}}
     27459+
     27460+" THE MAIN INDENT FUNCTION. Return the amount of indent for v:lnum.
     27461+func! HtmlIndent()
     27462+  "{{{
     27463+  if prevnonblank(v:lnum - 1) <= 1
     27464+    " First non-blank line has no indent.
     27465+    return 0
     27466+  endif
     27467+
     27468+  let curtext = tolower(getline(v:lnum))
     27469+  let indentunit = s:ShiftWidth()
     27470+
     27471+  let b:hi_newstate = {}
     27472+  let b:hi_newstate.lnum = v:lnum
     27473+
     27474+  " When syntax HL is enabled, detect we are inside a tag.  Indenting inside
     27475+  " a tag works very differently. Do not do this when the line starts with
     27476+  " "<", it gets the "htmlTag" ID but we are not inside a tag then.
     27477+  if curtext !~ '^\s*<'
     27478+    normal ^
     27479+    let stack = synstack(v:lnum, col('.'))  " assumes there are no tabs
     27480+    let foundHtmlString = 0
     27481+    for synid in reverse(stack)
     27482+      let name = synIDattr(synid, "name")
     27483+      if index(b:hi_insideStringNames, name) >= 0
     27484+        let foundHtmlString = 1
     27485+      elseif index(b:hi_insideTagNames, name) >= 0
     27486+        " Yes, we are inside a tag.
     27487+        let indent = s:InsideTag(foundHtmlString)
     27488+        if indent >= 0
     27489+          " Do not keep the state. TODO: could keep the block type.
     27490+          let b:hi_indent.lnum = 0
     27491+          return indent
     27492+        endif
     27493+      endif
     27494+    endfor
     27495+  endif
     27496+
     27497+  " does the line start with a closing tag?
     27498+  let swendtag = match(curtext, '^\s*</') >= 0
     27499 
     27500-    if b:indent.block >= 2
     27501-       " within block
     27502-       let endtag = s:endtags[b:indent.block-2]
     27503-       let blockend = stridx(s:curline, endtag)
     27504-       if blockend >= 0
     27505-           " block ends here
     27506-           let s:newstate.block = 0
     27507-           " calc indent for REST OF LINE (may start more blocks):
     27508-           let s:curline = strpart(s:curline, blockend+strlen(endtag))
     27509-           call s:CountITags()
     27510-           if swendtag && b:indent.block != 5
     27511-               let indent = b:indent.blocktagind + s:curind * indentunit
     27512-               let s:newstate.baseindent = indent + s:nextrel * indentunit
     27513-           else
     27514-               let indent = s:Alien{b:indent.block}()
     27515-               let s:newstate.baseindent = b:indent.blocktagind + s:nextrel * indentunit
     27516-           endif
     27517-           call extend(b:indent, s:newstate, "force")
     27518-           return indent
     27519-       else
     27520-           " block continues
     27521-           " indent this line with alien method
     27522-           let indent = s:Alien{b:indent.block}()
     27523-           call extend(b:indent, s:newstate, "force")
     27524-           return indent
     27525-       endif
     27526+  if prevnonblank(v:lnum - 1) == b:hi_indent.lnum && b:hi_lasttick == b:changedtick - 1
     27527+    " use state (continue from previous line)
     27528+  else
     27529+    " start over (know nothing)
     27530+    let b:hi_indent = s:FreshState(v:lnum)
     27531+  endif
     27532+
     27533+  if b:hi_indent.block >= 2
     27534+    " within block
     27535+    let endtag = s:endtags[b:hi_indent.block]
     27536+    let blockend = stridx(curtext, endtag)
     27537+    if blockend >= 0
     27538+      " block ends here
     27539+      let b:hi_newstate.block = 0
     27540+      " calc indent for REST OF LINE (may start more blocks):
     27541+      call s:CountTagsAndState(strpart(curtext, blockend + strlen(endtag)))
     27542+      if swendtag && b:hi_indent.block != 5
     27543+        let indent = b:hi_indent.blocktagind + s:curind * indentunit
     27544+        let b:hi_newstate.baseindent = indent + s:nextrel * indentunit
     27545+      else
     27546+        let indent = s:Alien{b:hi_indent.block}()
     27547+        let b:hi_newstate.baseindent = b:hi_indent.blocktagind + s:nextrel * indentunit
     27548+      endif
     27549     else
     27550-       " not within a block - within usual html
     27551-       " if < 2 then always 0
     27552-       let s:newstate.block = b:indent.block
     27553-       call s:CountITags()
     27554-       if swendtag
     27555-           let indent = b:indent.baseindent + s:curind * indentunit
     27556-           let s:newstate.baseindent = indent + s:nextrel * indentunit
     27557-       else
     27558-           let indent = b:indent.baseindent
     27559-           let s:newstate.baseindent = indent + (s:curind + s:nextrel) * indentunit
     27560-       endif
     27561-       call extend(b:indent, s:newstate, "force")
     27562-       return indent
     27563+      " block continues
     27564+      " indent this line with alien method
     27565+      let indent = s:Alien{b:hi_indent.block}()
     27566+    endif
     27567+  else
     27568+    " not within a block - within usual html
     27569+    let b:hi_newstate.block = b:hi_indent.block
     27570+    if swendtag
     27571+      " The current line starts with an end tag, align with its start tag.
     27572+      call cursor(v:lnum, 1)
     27573+      let start_lnum = HtmlIndent_FindStartTag()
     27574+      if start_lnum > 0
     27575+        " check for the line starting with something inside a tag:
     27576+        " <sometag               <- align here
     27577+        "    attr=val><open>     not here
     27578+        let text = getline(start_lnum)
     27579+        let angle = matchstr(text, '[<>]')
     27580+        if angle == '>'
     27581+          call cursor(start_lnum, 1)
     27582+          normal! f>%
     27583+          let start_lnum = line('.')
     27584+          let text = getline(start_lnum)
     27585+        endif
     27586+
     27587+        let indent = indent(start_lnum)
     27588+        if col('.') > 2
     27589+          let swendtag = match(text, '^\s*</') >= 0
     27590+          call s:CountITags(text[: col('.') - 2])
     27591+          let indent += s:nextrel * s:ShiftWidth()
     27592+          if !swendtag
     27593+            let indent += s:curind * s:ShiftWidth()
     27594+          endif
     27595+        endif
     27596+      else
     27597+        " not sure what to do
     27598+        let indent = b:hi_indent.baseindent
     27599+      endif
     27600+      let b:hi_newstate.baseindent = indent
     27601+    else
     27602+      call s:CountTagsAndState(curtext)
     27603+      let indent = b:hi_indent.baseindent
     27604+      let b:hi_newstate.baseindent = indent + (s:curind + s:nextrel) * indentunit
     27605     endif
     27606+  endif
     27607 
     27608+  let b:hi_lasttick = b:changedtick
     27609+  call extend(b:hi_indent, b:hi_newstate, "force")
     27610+  return indent
     27611 endfunc "}}}
     27612 
     27613-" check user settings (first time), clear cpo, Modeline: {{{1
     27614-
     27615-" DEBUG:
     27616-com! -nargs=* IndHtmlLocal <args>
     27617-
     27618+" Check user settings when loading this script the first time.
     27619 call HtmlIndent_CheckUserSettings()
     27620 
     27621 let &cpo = s:cpo_save
     27622 unlet s:cpo_save
     27623 
     27624-" vim:set fdm=marker ts=8:
     27625+" vim: fdm=marker ts=8 sw=2 tw=78
    2512727626diff -Naur vim74.orig/runtime/indent/j.vim vim74/runtime/indent/j.vim
    2512827627--- vim74.orig/runtime/indent/j.vim     1970-01-01 00:00:00.000000000 +0000
    25129 +++ vim74/runtime/indent/j.vim  2014-06-01 00:42:56.970857356 +0000
     27628+++ vim74/runtime/indent/j.vim  2014-07-21 23:33:19.843518913 +0000
    2513027629@@ -0,0 +1,50 @@
    2513127630+" Vim indent file
     
    2517927678+  return indent
    2518027679+endfunction
     27680diff -Naur vim74.orig/runtime/indent/json.vim vim74/runtime/indent/json.vim
     27681--- vim74.orig/runtime/indent/json.vim  1970-01-01 00:00:00.000000000 +0000
     27682+++ vim74/runtime/indent/json.vim       2014-07-21 23:33:19.916852055 +0000
     27683@@ -0,0 +1,13 @@
     27684+" Vim indent file
     27685+" Language:            JSON
     27686+" Maintainer:          David Barnett <daviebdawg+vim@gmail.com>
     27687+" Last Change:         2014 Jul 16
     27688+
     27689+if exists('b:did_indent')
     27690+   finish
     27691+endif
     27692+
     27693+" JSON is a subset of JavaScript. JavaScript indenting should work fine.
     27694+runtime! indent/javascript.vim
     27695+
     27696+let b:did_indent = 1
    2518127697diff -Naur vim74.orig/runtime/indent/php.vim vim74/runtime/indent/php.vim
    2518227698--- vim74.orig/runtime/indent/php.vim   2013-08-07 09:36:56.000000000 +0000
    25183 +++ vim74/runtime/indent/php.vim        2014-06-01 00:42:57.737522071 +0000
     27699+++ vim74/runtime/indent/php.vim        2014-07-21 23:33:20.656850124 +0000
    2518427700@@ -3,8 +3,8 @@
    2518527701 " Author:      John Wellesz <John.wellesz (AT) teaser (DOT) fr>
     
    2547927995            if openedparent != lnum
    2548027996                let ind = indent(openedparent)
     27997diff -Naur vim74.orig/runtime/indent/rhelp.vim vim74/runtime/indent/rhelp.vim
     27998--- vim74.orig/runtime/indent/rhelp.vim 1970-01-01 00:00:00.000000000 +0000
     27999+++ vim74/runtime/indent/rhelp.vim      2014-07-21 23:33:20.750183214 +0000
     28000@@ -0,0 +1,111 @@
     28001+" Vim indent file
     28002+" Language:    R Documentation (Help), *.Rd
     28003+" Author:      Jakson Alves de Aquino <jalvesaq@gmail.com>
     28004+" Last Change: Wed Jul 09, 2014  07:34PM
     28005+
     28006+
     28007+" Only load this indent file when no other was loaded.
     28008+if exists("b:did_indent")
     28009+  finish
     28010+endif
     28011+runtime indent/r.vim
     28012+let s:RIndent = function(substitute(&indentexpr, "()", "", ""))
     28013+let b:did_indent = 1
     28014+
     28015+setlocal indentkeys=0{,0},:,!^F,o,O,e
     28016+setlocal indentexpr=GetRHelpIndent()
     28017+
     28018+" Only define the function once.
     28019+if exists("*GetRHelpIndent")
     28020+  finish
     28021+endif
     28022+
     28023+setlocal noautoindent
     28024+setlocal nocindent
     28025+setlocal nosmartindent
     28026+setlocal nolisp
     28027+
     28028+setlocal indentkeys=0{,0},:,!^F,o,O,e
     28029+setlocal indentexpr=GetCorrectRHelpIndent()
     28030+
     28031+function s:SanitizeRHelpLine(line)
     28032+  let newline = substitute(a:line, '\\\\', "x", "g")
     28033+  let newline = substitute(newline, '\\{', "x", "g")
     28034+  let newline = substitute(newline, '\\}', "x", "g")
     28035+  let newline = substitute(newline, '\\%', "x", "g")
     28036+  let newline = substitute(newline, '%.*', "", "")
     28037+  let newline = substitute(newline, '\s*$', "", "")
     28038+  return newline
     28039+endfunction
     28040+
     28041+function GetRHelpIndent()
     28042+
     28043+  let clnum = line(".")    " current line
     28044+  if clnum == 1
     28045+    return 0
     28046+  endif
     28047+  let cline = getline(clnum)
     28048+
     28049+  if cline =~ '^\s*}\s*$'
     28050+    let i = clnum
     28051+    let bb = -1
     28052+    while bb != 0 && i > 1
     28053+      let i -= 1
     28054+      let line = s:SanitizeRHelpLine(getline(i))
     28055+      let line2 = substitute(line, "{", "", "g")
     28056+      let openb = strlen(line) - strlen(line2)
     28057+      let line3 = substitute(line2, "}", "", "g")
     28058+      let closeb = strlen(line2) - strlen(line3)
     28059+      let bb += openb - closeb
     28060+    endwhile
     28061+    return indent(i)
     28062+  endif
     28063+
     28064+  if cline =~ '^\s*#ifdef\>' || cline =~ '^\s*#endif\>'
     28065+    return 0
     28066+  endif
     28067+
     28068+  let lnum = clnum - 1
     28069+  let line = getline(lnum)
     28070+  if line =~ '^\s*#ifdef\>' || line =~ '^\s*#endif\>'
     28071+    let lnum -= 1
     28072+    let line = getline(lnum)
     28073+  endif
     28074+  while lnum > 1 && (line =~ '^\s*$' || line =~ '^#ifdef' || line =~ '^#endif')
     28075+    let lnum -= 1
     28076+    let line = getline(lnum)
     28077+  endwhile
     28078+  if lnum == 1
     28079+    return 0
     28080+  endif
     28081+  let line = s:SanitizeRHelpLine(line)
     28082+  let line2 = substitute(line, "{", "", "g")
     28083+  let openb = strlen(line) - strlen(line2)
     28084+  let line3 = substitute(line2, "}", "", "g")
     28085+  let closeb = strlen(line2) - strlen(line3)
     28086+  let bb = openb - closeb
     28087+
     28088+  let ind = indent(lnum) + (bb * &sw)
     28089+
     28090+  if line =~ '^\s*}\s*$'
     28091+    let ind = indent(lnum)
     28092+  endif
     28093+
     28094+  if ind < 0
     28095+    return 0
     28096+  endif
     28097+
     28098+  return ind
     28099+endfunction
     28100+
     28101+function GetCorrectRHelpIndent()
     28102+  let lastsection = search('^\\[a-z]*{', "bncW")
     28103+  let secname = getline(lastsection)
     28104+  if secname =~ '^\\usage{' || secname =~ '^\\examples{' || secname =~ '^\\dontshow{' || secname =~ '^\\dontrun{' || secname =~ '^\\donttest{' || secname =~ '^\\testonly{' || secname =~ '^\\method{.*}{.*}('
     28105+    return s:RIndent()
     28106+  else
     28107+    return GetRHelpIndent()
     28108+  endif
     28109+endfunction
     28110+
     28111+" vim: sw=2
     28112diff -Naur vim74.orig/runtime/indent/rmd.vim vim74/runtime/indent/rmd.vim
     28113--- vim74.orig/runtime/indent/rmd.vim   1970-01-01 00:00:00.000000000 +0000
     28114+++ vim74/runtime/indent/rmd.vim        2014-07-21 23:33:20.753516538 +0000
     28115@@ -0,0 +1,46 @@
     28116+" Vim indent file
     28117+" Language:    Rmd
     28118+" Author:      Jakson Alves de Aquino <jalvesaq@gmail.com>
     28119+" Last Change: Wed Jul 09, 2014  07:33PM
     28120+
     28121+
     28122+" Only load this indent file when no other was loaded.
     28123+if exists("b:did_indent")
     28124+  finish
     28125+endif
     28126+runtime indent/r.vim
     28127+let s:RIndent = function(substitute(&indentexpr, "()", "", ""))
     28128+let b:did_indent = 1
     28129+
     28130+setlocal indentkeys=0{,0},:,!^F,o,O,e
     28131+setlocal indentexpr=GetRmdIndent()
     28132+
     28133+if exists("*GetRmdIndent")
     28134+  finish
     28135+endif
     28136+
     28137+function GetMdIndent()
     28138+  let pline = getline(v:lnum - 1)
     28139+  let cline = getline(v:lnum)
     28140+  if prevnonblank(v:lnum - 1) < v:lnum - 1 || cline =~ '^\s*[-\+\*]\s' || cline =~ '^\s*\d\+\.\s\+'
     28141+    return indent(v:lnum)
     28142+  elseif pline =~ '^\s*[-\+\*]\s'
     28143+    return indent(v:lnum - 1) + 2
     28144+  elseif pline =~ '^\s*\d\+\.\s\+'
     28145+    return indent(v:lnum - 1) + 3
     28146+  endif
     28147+  return indent(prevnonblank(v:lnum - 1))
     28148+endfunction
     28149+
     28150+function GetRmdIndent()
     28151+  if getline(".") =~ '^```{r .*}$' || getline(".") =~ '^```$'
     28152+    return 0
     28153+  endif
     28154+  if search('^```{r', "bncW") > search('^```$', "bncW")
     28155+    return s:RIndent()
     28156+  else
     28157+    return GetMdIndent()
     28158+  endif
     28159+endfunction
     28160+
     28161+" vim: sw=2
     28162diff -Naur vim74.orig/runtime/indent/rnoweb.vim vim74/runtime/indent/rnoweb.vim
     28163--- vim74.orig/runtime/indent/rnoweb.vim        1970-01-01 00:00:00.000000000 +0000
     28164+++ vim74/runtime/indent/rnoweb.vim     2014-07-21 23:33:20.756849863 +0000
     28165@@ -0,0 +1,35 @@
     28166+" Vim indent file
     28167+" Language:    Rnoweb
     28168+" Author:      Jakson Alves de Aquino <jalvesaq@gmail.com>
     28169+" Last Change: Wed Jul 09, 2014  07:28PM
     28170+
     28171+
     28172+" Only load this indent file when no other was loaded.
     28173+if exists("b:did_indent")
     28174+  finish
     28175+endif
     28176+runtime indent/tex.vim
     28177+let s:TeXIndent = function(substitute(&indentexpr, "()", "", ""))
     28178+unlet b:did_indent
     28179+runtime indent/r.vim
     28180+let s:RIndent = function(substitute(&indentexpr, "()", "", ""))
     28181+let b:did_indent = 1
     28182+
     28183+setlocal indentkeys=0{,0},!^F,o,O,e,},=\bibitem,=\item
     28184+setlocal indentexpr=GetRnowebIndent()
     28185+
     28186+if exists("*GetRnowebIndent")
     28187+  finish
     28188+endif
     28189+
     28190+function GetRnowebIndent()
     28191+  if getline(".") =~ "^<<.*>>=$"
     28192+    return 0
     28193+  endif
     28194+  if search("^<<", "bncW") > search("^@", "bncW")
     28195+    return s:RIndent()
     28196+  endif
     28197+  return s:TeXIndent()
     28198+endfunction
     28199+
     28200+" vim: sw=2
     28201diff -Naur vim74.orig/runtime/indent/rrst.vim vim74/runtime/indent/rrst.vim
     28202--- vim74.orig/runtime/indent/rrst.vim  1970-01-01 00:00:00.000000000 +0000
     28203+++ vim74/runtime/indent/rrst.vim       2014-07-21 23:33:20.780183135 +0000
     28204@@ -0,0 +1,46 @@
     28205+" Vim indent file
     28206+" Language:    Rrst
     28207+" Author:      Jakson Alves de Aquino <jalvesaq@gmail.com>
     28208+" Last Change: Wed Jul 09, 2014  07:33PM
     28209+
     28210+
     28211+" Only load this indent file when no other was loaded.
     28212+if exists("b:did_indent")
     28213+  finish
     28214+endif
     28215+runtime indent/r.vim
     28216+let s:RIndent = function(substitute(&indentexpr, "()", "", ""))
     28217+let b:did_indent = 1
     28218+
     28219+setlocal indentkeys=0{,0},:,!^F,o,O,e
     28220+setlocal indentexpr=GetRrstIndent()
     28221+
     28222+if exists("*GetRrstIndent")
     28223+  finish
     28224+endif
     28225+
     28226+function GetRstIndent()
     28227+  let pline = getline(v:lnum - 1)
     28228+  let cline = getline(v:lnum)
     28229+  if prevnonblank(v:lnum - 1) < v:lnum - 1 || cline =~ '^\s*[-\+\*]\s' || cline =~ '^\s*\d\+\.\s\+'
     28230+    return indent(v:lnum)
     28231+  elseif pline =~ '^\s*[-\+\*]\s'
     28232+    return indent(v:lnum - 1) + 2
     28233+  elseif pline =~ '^\s*\d\+\.\s\+'
     28234+    return indent(v:lnum - 1) + 3
     28235+  endif
     28236+  return indent(prevnonblank(v:lnum - 1))
     28237+endfunction
     28238+
     28239+function GetRrstIndent()
     28240+  if getline(".") =~ '^\.\. {r .*}$' || getline(".") =~ '^\.\. \.\.$'
     28241+    return 0
     28242+  endif
     28243+  if search('^\.\. {r', "bncW") > search('^\.\. \.\.$', "bncW")
     28244+    return s:RIndent()
     28245+  else
     28246+    return GetRstIndent()
     28247+  endif
     28248+endfunction
     28249+
     28250+" vim: sw=2
    2548128251diff -Naur vim74.orig/runtime/indent/sh.vim vim74/runtime/indent/sh.vim
    2548228252--- vim74.orig/runtime/indent/sh.vim    2010-05-15 11:03:29.000000000 +0000
    25483 +++ vim74/runtime/indent/sh.vim 2014-06-01 00:42:57.920854937 +0000
     28253+++ vim74/runtime/indent/sh.vim 2014-07-21 23:33:20.870182901 +0000
    2548428254@@ -1,7 +1,8 @@
    2548528255 " Vim indent file
     
    2551828288diff -Naur vim74.orig/runtime/indent/systemverilog.vim vim74/runtime/indent/systemverilog.vim
    2551928289--- vim74.orig/runtime/indent/systemverilog.vim 1970-01-01 00:00:00.000000000 +0000
    25520 +++ vim74/runtime/indent/systemverilog.vim      2014-06-01 00:42:57.954188186 +0000
     28290+++ vim74/runtime/indent/systemverilog.vim      2014-07-21 23:33:20.903516147 +0000
    2552128291@@ -0,0 +1,230 @@
    2552228292+" Vim indent file
     
    2575228522diff -Naur vim74.orig/runtime/macros/less.vim vim74/runtime/macros/less.vim
    2575328523--- vim74.orig/runtime/macros/less.vim  2012-05-18 18:58:54.000000000 +0000
    25754 +++ vim74/runtime/macros/less.vim       2014-06-01 00:43:00.600848113 +0000
     28524+++ vim74/runtime/macros/less.vim       2014-07-21 23:33:23.516842660 +0000
    2575528525@@ -1,6 +1,6 @@
    2575628526 " Vim script to work like "less"
     
    2583728607 
    2583828608 " vim: sw=2
     28609diff -Naur vim74.orig/runtime/menu.vim vim74/runtime/menu.vim
     28610--- vim74.orig/runtime/menu.vim 2013-05-17 11:01:55.000000000 +0000
     28611+++ vim74/runtime/menu.vim      2014-07-21 23:33:23.866841747 +0000
     28612@@ -2,7 +2,7 @@
     28613 " You can also use this as a start for your own set of menus.
     28614 "
     28615 " Maintainer:  Bram Moolenaar <Bram@vim.org>
     28616-" Last Change: 2013 May 17
     28617+" Last Change: 2014 May 22
     28618 
     28619 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
     28620 " in all modes and avoid side effects from mappings defined by the user.
     28621@@ -477,6 +477,7 @@
     28622   an 40.340.110 &Tools.&Folding.&Enable/Disable\ folds<Tab>zi          zi
     28623   an 40.340.120 &Tools.&Folding.&View\ Cursor\ Line<Tab>zv             zv
     28624   an 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx     zMzx
     28625+  inoremenu 40.340.120 &Tools.&Folding.Vie&w\ Cursor\ Line\ only<Tab>zMzx  <C-O>zM<C-O>zx
     28626   an 40.340.130 &Tools.&Folding.C&lose\ more\ folds<Tab>zm             zm
     28627   an 40.340.140 &Tools.&Folding.&Close\ all\ folds<Tab>zM              zM
     28628   an 40.340.150 &Tools.&Folding.O&pen\ more\ folds<Tab>zr              zr
    2583928629diff -Naur vim74.orig/runtime/optwin.vim vim74/runtime/optwin.vim
    2584028630--- vim74.orig/runtime/optwin.vim       2013-06-29 12:32:06.000000000 +0000
    25841 +++ vim74/runtime/optwin.vim    2014-06-01 00:43:00.977513821 +0000
     28631+++ vim74/runtime/optwin.vim    2014-07-21 23:33:23.893508344 +0000
    2584228632@@ -1,7 +1,7 @@
    2584328633 " These commands create the option window.
     
    2584928639 " If there already is an option window, jump to that one.
    2585028640 if bufwinnr("option-window") > 0
    25851 @@ -855,7 +855,7 @@
     28641@@ -324,6 +324,12 @@
     28642 call append("$", "linebreak\twrap long lines at a character in 'breakat'")
     28643 call append("$", "\t(local to window)")
     28644 call <SID>BinOptionL("lbr")
     28645+call append("$", "breakindent\tpreserve indentation in wrapped text")
     28646+call append("$", "\t(local to window)")
     28647+call <SID>BinOptionL("bri")
     28648+call append("$", "breakindentopt\tadjust breakindent behaviour")
     28649+call append("$", "\t(local to window)")
     28650+call <SID>OptionL("briopt")
     28651 call append("$", "breakat\twhich characters might cause a line break")
     28652 call <SID>OptionG("brk", &brk)
     28653 call append("$", "showbreak\tstring to put before wrapped screen lines")
     28654@@ -855,7 +861,7 @@
    2585228655   call append("$", "\t(local to buffer)")
    2585328656   call <SID>BinOptionL("lisp")
     
    2586028663diff -Naur vim74.orig/runtime/plugin/getscriptPlugin.vim vim74/runtime/plugin/getscriptPlugin.vim
    2586128664--- vim74.orig/runtime/plugin/getscriptPlugin.vim       2013-04-17 13:40:44.000000000 +0000
    25862 +++ vim74/runtime/plugin/getscriptPlugin.vim    2014-06-01 00:43:01.010847069 +0000
     28665+++ vim74/runtime/plugin/getscriptPlugin.vim    2014-07-21 23:33:23.926841590 +0000
    2586328666@@ -1,7 +1,7 @@
    2586428667 " ---------------------------------------------------------------------
     
    2588928692 set cpo&vim
    2589028693 
     28694diff -Naur vim74.orig/runtime/plugin/matchparen.vim vim74/runtime/plugin/matchparen.vim
     28695--- vim74.orig/runtime/plugin/matchparen.vim    2013-05-08 03:15:53.000000000 +0000
     28696+++ vim74/runtime/plugin/matchparen.vim 2014-07-21 23:33:23.963508161 +0000
     28697@@ -1,6 +1,6 @@
     28698 " Vim plugin for showing matching parens
     28699 " Maintainer:  Bram Moolenaar <Bram@vim.org>
     28700-" Last Change: 2013 May 08
     28701+" Last Change: 2014 Jul 19
     28702 
     28703 " Exit quickly when:
     28704 " - this plugin was already loaded (or disabled)
     28705@@ -39,7 +39,7 @@
     28706 function! s:Highlight_Matching_Pair()
     28707   " Remove any previous match.
     28708   if exists('w:paren_hl_on') && w:paren_hl_on
     28709-    3match none
     28710+    silent! call matchdelete(3)
     28711     let w:paren_hl_on = 0
     28712   endif
     28713 
     28714@@ -54,14 +54,15 @@
     28715   let c_col = col('.')
     28716   let before = 0
     28717 
     28718-  let c = getline(c_lnum)[c_col - 1]
     28719+  let text = getline(c_lnum)
     28720+  let c = text[c_col - 1]
     28721   let plist = split(&matchpairs, '.\zs[:,]')
     28722   let i = index(plist, c)
     28723   if i < 0
     28724     " not found, in Insert mode try character before the cursor
     28725     if c_col > 1 && (mode() == 'i' || mode() == 'R')
     28726       let before = 1
     28727-      let c = getline(c_lnum)[c_col - 2]
     28728+      let c = text[c_col - 2]
     28729       let i = index(plist, c)
     28730     endif
     28731     if i < 0
     28732@@ -87,7 +88,13 @@
     28733   " Find the match.  When it was just before the cursor move it there for a
     28734   " moment.
     28735   if before > 0
     28736-    let save_cursor = winsaveview()
     28737+    let has_getcurpos = exists("*getcurpos")
     28738+    if has_getcurpos
     28739+      " getcurpos() is more efficient but doesn't exist before 7.4.313.
     28740+      let save_cursor = getcurpos()
     28741+    else
     28742+      let save_cursor = winsaveview()
     28743+    endif
     28744     call cursor(c_lnum, c_col - before)
     28745   endif
     28746 
     28747@@ -147,19 +154,27 @@
     28748   endtry
     28749 
     28750   if before > 0
     28751-    call winrestview(save_cursor)
     28752+    if has_getcurpos
     28753+      call setpos('.', save_cursor)
     28754+    else
     28755+      call winrestview(save_cursor)
     28756+    endif
     28757   endif
     28758 
     28759   " If a match is found setup match highlighting.
     28760   if m_lnum > 0 && m_lnum >= stoplinetop && m_lnum <= stoplinebottom
     28761-    exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
     28762-         \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
     28763+    if exists('*matchaddpos')
     28764+      call matchaddpos('MatchParen', [[c_lnum, c_col - before], [m_lnum, m_col]], 10, 3)
     28765+    else
     28766+      exe '3match MatchParen /\(\%' . c_lnum . 'l\%' . (c_col - before) .
     28767+           \ 'c\)\|\(\%' . m_lnum . 'l\%' . m_col . 'c\)/'
     28768+    endif
     28769     let w:paren_hl_on = 1
     28770   endif
     28771 endfunction
     28772 
     28773 " Define commands that will disable and enable the plugin.
     28774-command! NoMatchParen windo 3match none | unlet! g:loaded_matchparen |
     28775+command! NoMatchParen windo silent! call matchdelete(3) | unlet! g:loaded_matchparen |
     28776          \ au! matchparen
     28777 command! DoMatchParen runtime plugin/matchparen.vim | windo doau CursorMoved
     28778 
    2589128779diff -Naur vim74.orig/runtime/plugin/netrwPlugin.vim vim74/runtime/plugin/netrwPlugin.vim
    2589228780--- vim74.orig/runtime/plugin/netrwPlugin.vim   2013-05-19 03:28:33.000000000 +0000
    25893 +++ vim74/runtime/plugin/netrwPlugin.vim        2014-06-01 00:43:01.040846993 +0000
     28781+++ vim74/runtime/plugin/netrwPlugin.vim        2014-07-21 23:33:23.980174785 +0000
    2589428782@@ -1,9 +1,9 @@
    2589528783 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
     
    2607528963diff -Naur vim74.orig/runtime/syntax/a65.vim vim74/runtime/syntax/a65.vim
    2607628964--- vim74.orig/runtime/syntax/a65.vim   2010-05-15 11:03:57.000000000 +0000
    26077 +++ vim74/runtime/syntax/a65.vim        2014-06-01 00:43:04.117505825 +0000
     28965+++ vim74/runtime/syntax/a65.vim        2014-07-21 23:33:27.223499654 +0000
    2607828966@@ -1,7 +1,7 @@
    2607928967 " Vim syntax file
     
    2608828976diff -Naur vim74.orig/runtime/syntax/apache.vim vim74/runtime/syntax/apache.vim
    2608928977--- vim74.orig/runtime/syntax/apache.vim        2010-05-15 11:03:57.000000000 +0000
    26090 +++ vim74/runtime/syntax/apache.vim     2014-06-01 00:43:04.257505469 +0000
     28978+++ vim74/runtime/syntax/apache.vim     2014-07-21 23:33:27.420165808 +0000
    2609128979@@ -1,11 +1,9 @@
    2609228980 " Vim syntax file
     
    2612629014diff -Naur vim74.orig/runtime/syntax/arduino.vim vim74/runtime/syntax/arduino.vim
    2612729015--- vim74.orig/runtime/syntax/arduino.vim       1970-01-01 00:00:00.000000000 +0000
    26128 +++ vim74/runtime/syntax/arduino.vim    2014-06-01 00:43:04.297505367 +0000
     29016+++ vim74/runtime/syntax/arduino.vim    2014-07-21 23:33:27.493498950 +0000
    2612929017@@ -0,0 +1,61 @@
    2613029018+" Vim syntax file
     
    2619129079diff -Naur vim74.orig/runtime/syntax/asm.vim vim74/runtime/syntax/asm.vim
    2619229080--- vim74.orig/runtime/syntax/asm.vim   2012-04-09 19:37:34.000000000 +0000
    26193 +++ vim74/runtime/syntax/asm.vim        2014-06-01 00:43:04.327505291 +0000
     29081+++ vim74/runtime/syntax/asm.vim        2014-07-21 23:33:27.513498898 +0000
    2619429082@@ -3,7 +3,7 @@
    2619529083 " Maintainer:  Erik Wognsen <erik.wognsen@gmail.com>
     
    2621629104diff -Naur vim74.orig/runtime/syntax/bib.vim vim74/runtime/syntax/bib.vim
    2621729105--- vim74.orig/runtime/syntax/bib.vim   2011-12-30 11:30:00.000000000 +0000
    26218 +++ vim74/runtime/syntax/bib.vim        2014-06-01 00:43:04.514171482 +0000
     29106+++ vim74/runtime/syntax/bib.vim        2014-07-21 23:33:27.706831726 +0000
    2621929107@@ -2,7 +2,7 @@
    2622029108 " Language:    BibTeX (bibliographic database format for (La)TeX)
     
    2623529123 syn keyword bibEntryKw contained       address annote author booktitle chapter
    2623629124 syn keyword bibEntryKw contained       crossref edition editor howpublished
     29125diff -Naur vim74.orig/runtime/syntax/c.vim vim74/runtime/syntax/c.vim
     29126--- vim74.orig/runtime/syntax/c.vim     2013-07-05 16:09:23.000000000 +0000
     29127+++ vim74/runtime/syntax/c.vim  2014-07-21 23:33:27.810164790 +0000
     29128@@ -1,7 +1,7 @@
     29129 " Vim syntax file
     29130 " Language:    C
     29131 " Maintainer:  Bram Moolenaar <Bram@vim.org>
     29132-" Last Change: 2013 Jul 05
     29133+" Last Change: 2014 May 26
     29134 
     29135 " Quit when a (custom) syntax file was already loaded
     29136 if exists("b:current_syntax")
     29137@@ -322,6 +322,9 @@
     29138   syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
     29139   syn keyword cConstant TMP_MAX stderr stdin stdout
     29140   syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
     29141+  " POSIX 2001
     29142+  syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG
     29143+  syn keyword cConstant SIGVTALRM SIGXCPU SIGXFSZ
     29144   " Add POSIX errors as well
     29145   syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
     29146   syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
    2623729147diff -Naur vim74.orig/runtime/syntax/clean.vim vim74/runtime/syntax/clean.vim
    2623829148--- vim74.orig/runtime/syntax/clean.vim 2013-06-19 19:34:33.000000000 +0000
    26239 +++ vim74/runtime/syntax/clean.vim      2014-06-01 00:43:04.847503967 +0000
     29149+++ vim74/runtime/syntax/clean.vim      2014-07-21 23:33:28.053497488 +0000
    2624029150@@ -2,7 +2,7 @@
    2624129151 " Language:            Clean
     
    2629929209diff -Naur vim74.orig/runtime/syntax/clojure.vim vim74/runtime/syntax/clojure.vim
    2630029210--- vim74.orig/runtime/syntax/clojure.vim       2013-02-06 14:35:23.000000000 +0000
    26301 +++ vim74/runtime/syntax/clojure.vim    2014-06-01 00:43:04.904170489 +0000
     29211+++ vim74/runtime/syntax/clojure.vim    2014-07-21 23:33:28.110164007 +0000
    2630229212@@ -1,34 +1,37 @@
    2630329213 " Vim syntax file
     
    2656729477diff -Naur vim74.orig/runtime/syntax/cpp.vim vim74/runtime/syntax/cpp.vim
    2656829478--- vim74.orig/runtime/syntax/cpp.vim   2013-03-13 17:34:49.000000000 +0000
    26569 +++ vim74/runtime/syntax/cpp.vim        2014-06-01 00:43:05.014170209 +0000
     29479+++ vim74/runtime/syntax/cpp.vim        2014-07-21 23:33:28.220163720 +0000
    2657029480@@ -2,7 +2,7 @@
    2657129481 " Language:    C++
     
    2659629506diff -Naur vim74.orig/runtime/syntax/css.vim vim74/runtime/syntax/css.vim
    2659729507--- vim74.orig/runtime/syntax/css.vim   2013-07-23 19:08:29.000000000 +0000
    26598 +++ vim74/runtime/syntax/css.vim        2014-06-01 00:43:05.110836629 +0000
     29508+++ vim74/runtime/syntax/css.vim        2014-07-21 23:33:28.326830108 +0000
    2659929509@@ -6,7 +6,7 @@
    2660029510 "               Nikolai Weibull (Add CSS2 support)
     
    2734930259diff -Naur vim74.orig/runtime/syntax/d.vim vim74/runtime/syntax/d.vim
    2735030260--- vim74.orig/runtime/syntax/d.vim     2013-05-23 20:52:24.000000000 +0000
    27351 +++ vim74/runtime/syntax/d.vim  2014-06-01 00:43:05.267502897 +0000
     30261+++ vim74/runtime/syntax/d.vim  2014-07-21 23:33:28.486829691 +0000
    2735230262@@ -2,8 +2,8 @@
    2735330263 "
     
    2744230352diff -Naur vim74.orig/runtime/syntax/datascript.vim vim74/runtime/syntax/datascript.vim
    2744330353--- vim74.orig/runtime/syntax/datascript.vim    2012-04-30 10:59:58.000000000 +0000
    27444 +++ vim74/runtime/syntax/datascript.vim 2014-06-01 00:43:05.270836222 +0000
     30354+++ vim74/runtime/syntax/datascript.vim 2014-07-21 23:33:28.490163016 +0000
    2744530355@@ -1,7 +1,7 @@
    2744630356 " Vim syntax file
     
    2749130401diff -Naur vim74.orig/runtime/syntax/debchangelog.vim vim74/runtime/syntax/debchangelog.vim
    2749230402--- vim74.orig/runtime/syntax/debchangelog.vim  2013-05-17 15:25:15.000000000 +0000
    27493 +++ vim74/runtime/syntax/debchangelog.vim       2014-06-01 00:43:05.340836044 +0000
     30403+++ vim74/runtime/syntax/debchangelog.vim       2014-07-21 23:33:28.536829560 +0000
    2749430404@@ -3,7 +3,7 @@
    2749530405 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
     
    2749730407 "                     Wichert Akkerman <wakkerma@debian.org>
    2749830408-" Last Change: 2013 May 05
    27499 +" Last Change: 2014 Jan 20
     30409+" Last Change: 2014 Jul 11
    2750030410 " URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
    2750130411 
     
    2750630416 syn match debchangelogUrgency  contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
    2750730417-syn match debchangelogTarget   contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|raring|saucy)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
    27508 +syn match debchangelogTarget   contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|saucy|trusty)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
     30418+syn match debchangelogTarget   contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(devel|lucid|precise|trusty|utopic)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
    2750930419 syn match debchangelogVersion  contained "(.\{-})"
    2751030420 syn match debchangelogCloses   contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
     
    2751230422diff -Naur vim74.orig/runtime/syntax/debcontrol.vim vim74/runtime/syntax/debcontrol.vim
    2751330423--- vim74.orig/runtime/syntax/debcontrol.vim    2013-05-21 10:54:11.000000000 +0000
    27514 +++ vim74/runtime/syntax/debcontrol.vim 2014-06-01 00:43:05.344169369 +0000
     30424+++ vim74/runtime/syntax/debcontrol.vim 2014-07-21 23:33:28.540162885 +0000
    2751530425@@ -3,7 +3,7 @@
    2751630426 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
     
    2751830428 "                     Wichert Akkerman <wakkerma@debian.org>
    2751930429-" Last Change: 2013 May 05
    27520 +" Last Change: 2013 Oct 28
     30430+" Last Change: 2014 May 01
    2752130431 " URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
    2752230432 
    2752330433 " Standard syntax initialization
    27524 @@ -24,7 +24,7 @@
     30434@@ -13,6 +13,9 @@
     30435   finish
     30436 endif
     30437 
     30438+let s:cpo_save = &cpo
     30439+set cpo&vim
     30440+
     30441 " Should match case except for the keys of each field
     30442 syn case match
     30443 
     30444@@ -23,8 +26,17 @@
     30445 syn match debControlComma ", *"
    2752530446 syn match debControlSpace " "
    2752630447 
     30448+let s:kernels = '\%(linux\|hurd\|kfreebsd\|knetbsd\|kopensolaris\|netbsd\)'
     30449+let s:archs = '\%(alpha\|amd64\|armeb\|armel\|armhf\|arm64\|avr32\|hppa\|i386'
     30450+      \ . '\|ia64\|lpia\|m32r\|m68k\|mipsel\|mips\|powerpcspe\|powerpc\|ppc64el'
     30451+      \ . '\|ppc64\|s390x\|s390\|sh3eb\|sh3\|sh4eb\|sh4\|sh\|sparc64\|sparc\|x32\)'
     30452+let s:pairs = 'hurd-i386\|kfreebsd-i386\|kfreebsd-amd64\|knetbsd-i386\|kopensolaris-i386\|netbsd-alpha\|netbsd-i386'
     30453+
    2752730454 " Define some common expressions we can use later on
    2752830455-syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
    27529 +syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\|64\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\%(spe\)\=\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|x32\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
     30456+exe 'syn match debcontrolArchitecture contained "\%(all\|'. s:kernels .'-any\|\%(any-\)\='. s:archs .'\|'. s:pairs .'\|any\)"'
     30457+
     30458+unlet s:kernels s:archs s:pairs
     30459+
    2753030460 syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
    2753130461 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
    2753230462 syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
     30463@@ -108,4 +120,7 @@
     30464 
     30465 let b:current_syntax = "debcontrol"
     30466 
     30467+let &cpo = s:cpo_save
     30468+unlet s:cpo_save
     30469+
     30470 " vim: ts=8 sw=2
    2753330471diff -Naur vim74.orig/runtime/syntax/debsources.vim vim74/runtime/syntax/debsources.vim
    2753430472--- vim74.orig/runtime/syntax/debsources.vim    2013-05-17 15:25:15.000000000 +0000
    27535 +++ vim74/runtime/syntax/debsources.vim 2014-06-01 00:43:05.357502668 +0000
     30473+++ vim74/runtime/syntax/debsources.vim 2014-07-21 23:33:28.560162833 +0000
    2753630474@@ -2,7 +2,7 @@
    2753730475 " Language:     Debian sources.list
     
    2753930477 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
    2754030478-" Last Change: 2013 May 05
    27541 +" Last Change: 2014 Jan 20
     30479+" Last Change: 2014 Jul 11
    2754230480 " URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
    2754330481 
     
    2754830486 syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^'   <>"]\++
    2754930487-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
    27550 +syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|saucy\|trusty\)\([-[:alnum:]_./]*\)+
     30488+syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|jessie\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|devel\|lucid\|precise\|trusty\|utopic\)\([-[:alnum:]_./]*\)+
    2755130489 
    2755230490 " Associate our matches and regions with pretty colours
     
    2755430492diff -Naur vim74.orig/runtime/syntax/diff.vim vim74/runtime/syntax/diff.vim
    2755530493--- vim74.orig/runtime/syntax/diff.vim  2013-07-24 09:47:50.000000000 +0000
    27556 +++ vim74/runtime/syntax/diff.vim       2014-06-01 00:43:05.440835789 +0000
     30494+++ vim74/runtime/syntax/diff.vim       2014-07-21 23:33:28.650162598 +0000
    2755730495@@ -2,7 +2,7 @@
    2755830496 " Language:    Diff (context or unified)
     
    2757530513diff -Naur vim74.orig/runtime/syntax/dircolors.vim vim74/runtime/syntax/dircolors.vim
    2757630514--- vim74.orig/runtime/syntax/dircolors.vim     2012-04-25 09:42:39.000000000 +0000
    27577 +++ vim74/runtime/syntax/dircolors.vim  2014-06-01 00:43:05.454169089 +0000
     30515+++ vim74/runtime/syntax/dircolors.vim  2014-07-21 23:33:28.660162572 +0000
    2757830516@@ -1,751 +1,213 @@
    2757930517 " Vim syntax file
     
    2852231460diff -Naur vim74.orig/runtime/syntax/dnsmasq.vim vim74/runtime/syntax/dnsmasq.vim
    2852331461--- vim74.orig/runtime/syntax/dnsmasq.vim       2012-05-19 12:57:09.000000000 +0000
    28524 +++ vim74/runtime/syntax/dnsmasq.vim    2014-06-01 00:43:05.514168936 +0000
     31462+++ vim74/runtime/syntax/dnsmasq.vim    2014-07-21 23:33:28.723495740 +0000
    2852531463@@ -1,26 +1,19 @@
    2852631464 " Vim syntax file
     
    2866131599diff -Naur vim74.orig/runtime/syntax/dts.vim vim74/runtime/syntax/dts.vim
    2866231600--- vim74.orig/runtime/syntax/dts.vim   2013-04-05 14:25:40.000000000 +0000
    28663 +++ vim74/runtime/syntax/dts.vim        2014-06-01 00:43:05.680835178 +0000
     31601+++ vim74/runtime/syntax/dts.vim        2014-07-21 23:33:28.863495375 +0000
    2866431602@@ -1,7 +1,7 @@
    2866531603 " Vim syntax file
     
    2869231630diff -Naur vim74.orig/runtime/syntax/euphoria3.vim vim74/runtime/syntax/euphoria3.vim
    2869331631--- vim74.orig/runtime/syntax/euphoria3.vim     1970-01-01 00:00:00.000000000 +0000
    28694 +++ vim74/runtime/syntax/euphoria3.vim  2014-06-01 00:43:05.907501268 +0000
     31632+++ vim74/runtime/syntax/euphoria3.vim  2014-07-21 23:33:29.090161450 +0000
    2869531633@@ -0,0 +1,135 @@
    2869631634+" Vim syntax file
     
    2883131769diff -Naur vim74.orig/runtime/syntax/euphoria4.vim vim74/runtime/syntax/euphoria4.vim
    2883231770--- vim74.orig/runtime/syntax/euphoria4.vim     1970-01-01 00:00:00.000000000 +0000
    28833 +++ vim74/runtime/syntax/euphoria4.vim  2014-06-01 00:43:05.914167917 +0000
     31771+++ vim74/runtime/syntax/euphoria4.vim  2014-07-21 23:33:29.100161424 +0000
    2883431772@@ -0,0 +1,247 @@
    2883531773+" Vim syntax file
     
    2908232020diff -Naur vim74.orig/runtime/syntax/help.vim vim74/runtime/syntax/help.vim
    2908332021--- vim74.orig/runtime/syntax/help.vim  2013-07-07 11:27:18.000000000 +0000
    29084 +++ vim74/runtime/syntax/help.vim       2014-06-01 00:43:06.510833065 +0000
     32022+++ vim74/runtime/syntax/help.vim       2014-07-21 23:33:29.650159989 +0000
    2908532023@@ -1,7 +1,7 @@
    2908632024 " Vim syntax file
     
    2912532063diff -Naur vim74.orig/runtime/syntax/j.vim vim74/runtime/syntax/j.vim
    2912632064--- vim74.orig/runtime/syntax/j.vim     1970-01-01 00:00:00.000000000 +0000
    29127 +++ vim74/runtime/syntax/j.vim  2014-06-01 00:43:06.840832224 +0000
    29128 @@ -0,0 +1,134 @@
     32065+++ vim74/runtime/syntax/j.vim  2014-07-21 23:33:29.993492426 +0000
     32066@@ -0,0 +1,140 @@
    2912932067+" Vim syntax file
    2913032068+" Language:    J
    2913132069+" Maintainer:  David BÃŒrgin <676c7473@gmail.com>
    2913232070+" URL:         https://github.com/glts/vim-j
    29133 +" Last Change: 2014-04-05
     32071+" Last Change: 2014-05-25
    2913432072+
    2913532073+if exists('b:current_syntax')
     
    2917532113+" made. See http://www.jsoftware.com/help/dictionary/dcons.htm for reference.
    2917632114+syntax match jNumber /\<_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(r_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(r_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\=\)\|\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\=\)\|\%([px]_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\%(\%(j\|a[dr]\|r\)_\=\d\+\%(\.\d*\)\=\%([eE]_\=\d\+\)\=\)\=\)\)\=/
    29177 +syntax match jNumber /\<_\=\d\+\%([eE]\d\+\)\=b_\=[0-9a-z]\+/
     32115+syntax match jNumber /\<_\=\d\+\%([eE]\d\+\)\=b_\=[0-9a-z]\+\%(\.[0-9a-z]\+\)\=/
    2917832116+syntax match jNumber /\<__\=\>/
    2917932117+syntax match jNumber /\<_\./
     
    2919332131+syntax match jConjunction /;\.\|\^:\|![.:]/
    2919432132+
    29195 +" Explicit noun definition. The difficulty is that the define expression
    29196 +" "0 : 0" can occur in the middle of a line but the jNounDefine region must
    29197 +" only start on the next line. The trick is to split the problem into two
    29198 +" regions and link them with "nextgroup=".
     32133+" Explicit noun definition. The difficulty is that the define expression can
     32134+" occur in the middle of a line but the jNounDefine region must only start on
     32135+" the next line. The trick is to split the problem into two regions and link
     32136+" them with "nextgroup=". The fold wrapper provides syntax folding.
     32137+syntax region jNounDefineFold
     32138+    \ matchgroup=NONE start=/\<\%(\%(0\|noun\)\s\+\%(\:\s*0\|def\s\+0\|define\)\>\)\@=/
     32139+    \ keepend matchgroup=NONE end=/^\s*)\s*$/
     32140+    \ contains=jNounDefineStart
     32141+    \ fold
    2919932142+syntax region jNounDefineStart
    2920032143+    \ matchgroup=jDefineExpression start=/\<\%(0\|noun\)\s\+\%(\:\s*0\|def\s\+0\|define\)\>/
    2920132144+    \ keepend matchgroup=NONE end=/$/
    2920232145+    \ contains=@jStdlibItems,@jPrimitiveItems,jNumber,jString,jParenGroup,jParen,jComment
    29203 +    \ oneline skipempty nextgroup=jDefineEnd,jNounDefine
     32146+    \ contained oneline skipempty nextgroup=jDefineEnd,jNounDefine
    2920432147+" These two items must have "contained", which allows them to match only after
    2920532148+" jNounDefineStart thanks to the "nextgroup=" above.
     
    2921632159+    \ matchgroup=jDefineEnd end=/^\s*)\s*$/
    2921732160+    \ contains=jControl,@jStdlibItems,@jPrimitiveItems,jNumber,jString,jArgument,jParenGroup,jParen,jComment,jDefineMonadDyad
     32161+    \ fold
    2921832162+syntax match jDefineMonadDyad contained /^\s*:\s*$/
    2921932163+
     
    2926132205+let &cpo = s:save_cpo
    2926232206+unlet s:save_cpo
     32207diff -Naur vim74.orig/runtime/syntax/json.vim vim74/runtime/syntax/json.vim
     32208--- vim74.orig/runtime/syntax/json.vim  1970-01-01 00:00:00.000000000 +0000
     32209+++ vim74/runtime/syntax/json.vim       2014-07-21 23:33:30.130158736 +0000
     32210@@ -0,0 +1,16 @@
     32211+" Vim syntax file
     32212+" Language:            JSON
     32213+" Maintainer:          David Barnett <daviebdawg+vim@gmail.com>
     32214+" Last Change:         2014 Jul 16
     32215+
     32216+" For version 5.x: Clear all syntax items.
     32217+" For version 6.x and later: Quit when a syntax file was already loaded.
     32218+if exists('b:current_syntax')
     32219+  finish
     32220+endif
     32221+
     32222+" Use JavaScript syntax. JSON is a subset of JavaScript.
     32223+runtime! syntax/javascript.vim
     32224+unlet b:current_syntax
     32225+
     32226+let b:current_syntax = 'json'
     32227diff -Naur vim74.orig/runtime/syntax/kivy.vim vim74/runtime/syntax/kivy.vim
     32228--- vim74.orig/runtime/syntax/kivy.vim  1970-01-01 00:00:00.000000000 +0000
     32229+++ vim74/runtime/syntax/kivy.vim       2014-07-21 23:33:30.163491982 +0000
     32230@@ -0,0 +1,36 @@
     32231+" Vim syntax file
     32232+" Language:    Kivy
     32233+" Maintainer:  Corey Prophitt <prophitt.corey@gmail.com>
     32234+" Last Change: May 29th, 2014
     32235+" Version:     1
     32236+" URL:         http://kivy.org/
     32237+
     32238+if exists("b:current_syntax")
     32239+    finish
     32240+endif
     32241+
     32242+" Load Python syntax first (Python can be used within Kivy)
     32243+syn include @pyth $VIMRUNTIME/syntax/python.vim
     32244+
     32245+" Kivy language rules can be found here
     32246+"   http://kivy.org/docs/guide/lang.html
     32247+
     32248+" Define Kivy syntax
     32249+syn match kivyPreProc   /#:.*/
     32250+syn match kivyComment   /#.*/
     32251+syn match kivyRule      /<\I\i*\(,\s*\I\i*\)*>:/
     32252+syn match kivyAttribute /\<\I\i*\>/ nextgroup=kivyValue
     32253+
     32254+syn region kivyValue start=":" end=/$/  contains=@pyth skipwhite
     32255+
     32256+syn region kivyAttribute matchgroup=kivyIdent start=/[\a_][\a\d_]*:/ end=/$/ contains=@pyth skipwhite
     32257+
     32258+hi def link kivyPreproc   PreProc
     32259+hi def link kivyComment   Comment
     32260+hi def link kivyRule      Function
     32261+hi def link kivyIdent     Statement
     32262+hi def link kivyAttribute Label
     32263+
     32264+let b:current_syntax = "kivy"
     32265+
     32266+" vim: ts=8
    2926332267diff -Naur vim74.orig/runtime/syntax/mail.vim vim74/runtime/syntax/mail.vim
    2926432268--- vim74.orig/runtime/syntax/mail.vim  2013-07-15 21:28:26.000000000 +0000
    29265 +++ vim74/runtime/syntax/mail.vim       2014-06-01 00:43:07.424164072 +0000
     32269+++ vim74/runtime/syntax/mail.vim       2014-07-21 23:33:30.653490704 +0000
    2926632270@@ -2,7 +2,7 @@
    2926732271 " Language:            Mail file
     
    2928432288diff -Naur vim74.orig/runtime/syntax/masm.vim vim74/runtime/syntax/masm.vim
    2928532289--- vim74.orig/runtime/syntax/masm.vim  2012-02-04 19:24:10.000000000 +0000
    29286 +++ vim74/runtime/syntax/masm.vim       2014-06-01 00:43:07.554163741 +0000
     32290+++ vim74/runtime/syntax/masm.vim       2014-07-21 23:33:30.760157092 +0000
    2928732291@@ -2,14 +2,11 @@
    2928832292 " Language:    Microsoft Macro Assembler (80x86)
     
    2942332427diff -Naur vim74.orig/runtime/syntax/mix.vim vim74/runtime/syntax/mix.vim
    2942432428--- vim74.orig/runtime/syntax/mix.vim   1970-01-01 00:00:00.000000000 +0000
    29425 +++ vim74/runtime/syntax/mix.vim        2014-06-01 00:43:07.694163385 +0000
     32429+++ vim74/runtime/syntax/mix.vim        2014-07-21 23:33:30.886823428 +0000
    2942632430@@ -0,0 +1,83 @@
    2942732431+" Vim syntax file
     
    2951032514diff -Naur vim74.orig/runtime/syntax/netrw.vim vim74/runtime/syntax/netrw.vim
    2951132515--- vim74.orig/runtime/syntax/netrw.vim 2013-02-25 17:23:59.000000000 +0000
    29512 +++ vim74/runtime/syntax/netrw.vim      2014-06-01 00:43:08.124162290 +0000
     32516+++ vim74/runtime/syntax/netrw.vim      2014-07-21 23:33:31.230155866 +0000
    2951332517@@ -1,7 +1,7 @@
    2951432518 " Language   : Netrw Remote-Directory Listing Syntax
     
    2955632560  hi default link netrwHideSep  netrwComment
    2955732561  hi default link netrwList     Statement
     32562diff -Naur vim74.orig/runtime/syntax/ninja.vim vim74/runtime/syntax/ninja.vim
     32563--- vim74.orig/runtime/syntax/ninja.vim 2013-04-16 20:48:25.000000000 +0000
     32564+++ vim74/runtime/syntax/ninja.vim      2014-07-21 23:33:31.240155840 +0000
     32565@@ -1,10 +1,10 @@
     32566 " ninja build file syntax.
     32567 " Language: ninja build file as described at
     32568 "           http://martine.github.com/ninja/manual.html
     32569-" Version: 1.3
     32570-" Last Change: 2013/04/16
     32571+" Version: 1.4
     32572+" Last Change: 2014/05/13
     32573 " Maintainer: Nicolas Weber <nicolasweber@gmx.de>
     32574-" Version 1.3 of this script is in the upstream vim repository and will be
     32575+" Version 1.4 of this script is in the upstream vim repository and will be
     32576 " included in the next vim release. If you change this, please send your change
     32577 " upstream.
     32578 
     32579@@ -55,6 +55,7 @@
     32580 " $simple_varname -> variable
     32581 " ${varname} -> variable
     32582 
     32583+syn match   ninjaDollar "\$\$"
     32584 syn match   ninjaWrapLineOperator "\$$"
     32585 syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
     32586 syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
     32587@@ -70,6 +71,7 @@
     32588 hi def link ninjaKeyword Keyword
     32589 hi def link ninjaRuleCommand Statement
     32590 hi def link ninjaPoolCommand Statement
     32591+hi def link ninjaDollar ninjaOperator
     32592 hi def link ninjaWrapLineOperator ninjaOperator
     32593 hi def link ninjaOperator Operator
     32594 hi def link ninjaSimpleVar ninjaVar
    2955832595diff -Naur vim74.orig/runtime/syntax/php.vim vim74/runtime/syntax/php.vim
    2955932596--- vim74.orig/runtime/syntax/php.vim   2012-12-11 20:15:31.000000000 +0000
    29560 +++ vim74/runtime/syntax/php.vim        2014-06-01 00:43:08.470828074 +0000
     32597+++ vim74/runtime/syntax/php.vim        2014-07-21 23:33:31.533488407 +0000
    2956132598@@ -1,7 +1,7 @@
    2956232599 " Vim syntax file
     
    2959732634   if exists("php_oldStyle")
    2959832635   hi  phpIntVar guifg=Red ctermfg=DarkRed
     32636diff -Naur vim74.orig/runtime/syntax/python.vim vim74/runtime/syntax/python.vim
     32637--- vim74.orig/runtime/syntax/python.vim        2013-02-26 17:28:59.000000000 +0000
     32638+++ vim74/runtime/syntax/python.vim     2014-07-21 23:33:31.893487468 +0000
     32639@@ -1,7 +1,7 @@
     32640 " Vim syntax file
     32641 " Language:    Python
     32642 " Maintainer:  Neil Schemenauer <nas@python.ca>
     32643-" Last Change: 2013 Feb 26
     32644+" Last Change: 2014 Jul 16
     32645 " Credits:     Zvezdan Petkovic <zpetkovic@acm.org>
     32646 "              Neil Schemenauer <nas@python.ca>
     32647 "              Dmitry Vasiliev
     32648@@ -113,7 +113,7 @@
     32649 syn match   pythonEscape       "\\x\x\{2}" contained
     32650 syn match   pythonEscape       "\%(\\u\x\{4}\|\\U\x\{8}\)" contained
     32651 " Python allows case-insensitive Unicode IDs: http://www.unicode.org/charts/
     32652-syn match   pythonEscape       "\\N{\a\+\%(\s\a\+\)*}" contained
     32653+syn match   pythonEscape       "\\N{.\{-}}" contained
     32654 syn match   pythonEscape       "\\$"
     32655 
     32656 if exists("python_highlight_all")
     32657diff -Naur vim74.orig/runtime/syntax/r.vim vim74/runtime/syntax/r.vim
     32658--- vim74.orig/runtime/syntax/r.vim     2013-06-01 21:00:21.000000000 +0000
     32659+++ vim74/runtime/syntax/r.vim  2014-07-21 23:33:31.916820740 +0000
     32660@@ -3,7 +3,7 @@
     32661 " Maintainer:        Jakson Aquino <jalvesaq@gmail.com>
     32662 " Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com>
     32663 "                    Tom Payne <tom@tompayne.org>
     32664-" Last Change:       Sun May 19, 2013  05:59PM
     32665+" Last Change:       Wed Jul 09, 2014  10:29PM
     32666 " Filenames:         *.R *.r *.Rhistory *.Rt
     32667 "
     32668 " NOTE: The highlighting of R functions is defined in the
     32669@@ -30,14 +30,16 @@
     32670 syn case match
     32671 
     32672 " Comment
     32673-syn match rComment contains=@Spell "#.*"
     32674+syn match rCommentTodo contained "\(BUG\|FIXME\|NOTE\|TODO\):"
     32675+syn match rComment contains=@Spell,rCommentTodo "#.*"
     32676 
     32677 " Roxygen
     32678 syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|include\|docType\)"
     32679 syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
     32680 syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
     32681 syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\)"
     32682-syn match rOKeyword contained "@\(method\|nord\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
     32683+syn match rOKeyword contained "@\(method\|noRd\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
     32684+syn match rOKeyword contained "@\(family\|template\|templateVar\|description\|details\|inheritsParams\)"
     32685 syn match rOComment contains=@Spell,rOKeyword "#'.*"
     32686 
     32687 
     32688@@ -119,7 +121,7 @@
     32689 else
     32690   syn match rOperator    "[|!<>^~`/:]"
     32691 endif
     32692-syn match rOperator    "%\{2}\|%\S*%"
     32693+syn match rOperator    "%\{2}\|%\S\{-}%"
     32694 syn match rOpError  '\*\{3}'
     32695 syn match rOpError  '//'
     32696 syn match rOpError  '&&&'
     32697@@ -164,8 +166,8 @@
     32698 syn keyword rPreProc     library require attach detach source
     32699 
     32700 if &filetype == "rhelp"
     32701-    syn match rHelpIdent '\\method'
     32702-    syn match rHelpIdent '\\S4method'
     32703+  syn match rHelpIdent '\\method'
     32704+  syn match rHelpIdent '\\S4method'
     32705 endif
     32706 
     32707 " Type
     32708@@ -187,6 +189,7 @@
     32709 hi def link rBoolean     Boolean
     32710 hi def link rBraceError  Error
     32711 hi def link rComment     Comment
     32712+hi def link rCommentTodo Todo
     32713 hi def link rOComment    Comment
     32714 hi def link rComplex     Number
     32715 hi def link rConditional Conditional
     32716diff -Naur vim74.orig/runtime/syntax/rhelp.vim vim74/runtime/syntax/rhelp.vim
     32717--- vim74.orig/runtime/syntax/rhelp.vim 2011-10-20 14:48:41.000000000 +0000
     32718+++ vim74/runtime/syntax/rhelp.vim      2014-07-21 23:33:32.083486972 +0000
     32719@@ -2,9 +2,7 @@
     32720 " Language:    R Help File
     32721 " Maintainer: Jakson Aquino <jalvesaq@gmail.com>
     32722 " Former Maintainer: Johannes Ranke <jranke@uni-bremen.de>
     32723-" Last Change: Fri Oct 14, 2011  09:54PM
     32724-" Version:     0.7.4
     32725-" SVN:            $Id: rhelp.vim 90 2010-11-22 10:58:11Z ranke $
     32726+" Last Change: Wed Jul 09, 2014  10:28PM
     32727 " Remarks:     - Includes R syntax highlighting in the appropriate
     32728 "                sections if an r.vim file is in the same directory or in the
     32729 "                default debian location.
     32730@@ -23,6 +21,8 @@
     32731   finish
     32732 endif
     32733 
     32734+setlocal iskeyword=@,48-57,_,.
     32735+
     32736 syn case match
     32737 
     32738 " R help identifiers {{{1
     32739@@ -51,7 +51,12 @@
     32740 syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpIdentifier,rhelpS4method
     32741 syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end="}" contains=@R
     32742 syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end="}" contains=@R
     32743-syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@<!{.\{-}\\\@<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
     32744+
     32745+if v:version > 703
     32746+  syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@1<!{.\{-}\\\@1<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
     32747+else
     32748+  syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@<!{.\{-}\\\@<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
     32749+endif
     32750 syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=")" contains=@R,rhelpDots
     32751 syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end="}" contains=@R
     32752 
     32753@@ -127,8 +132,13 @@
     32754 syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend extend
     32755 
     32756 " Verbatim like {{{1
     32757-syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32758-syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32759+if v:version > 703
     32760+  syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32761+  syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@1<!{.\{-}\\\@1<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32762+else
     32763+  syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32764+  syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
     32765+endif
     32766 
     32767 " Type Styles {{{1
     32768 syn match rhelpType            "\\emph\>"
     32769@@ -200,6 +210,8 @@
     32770 syn match rhelpCurlyError /[)\]]/ contained
     32771 syn match rhelpParenError /[\]}]/ contained
     32772 
     32773+syntax sync match rhelpSyncRcode grouphere rhelpRcode "\\examples{"
     32774+
     32775 " Define the default highlighting {{{1
     32776 " For version 5.7 and earlier: only when not done already
     32777 " For version 5.8 and later: only when an item doesn't have highlighting yet
     32778@@ -233,4 +245,5 @@
     32779 endif
     32780 
     32781 let   b:current_syntax = "rhelp"
     32782-" vim: foldmethod=marker:
     32783+
     32784+" vim: foldmethod=marker sw=2
     32785diff -Naur vim74.orig/runtime/syntax/rmd.vim vim74/runtime/syntax/rmd.vim
     32786--- vim74.orig/runtime/syntax/rmd.vim   1970-01-01 00:00:00.000000000 +0000
     32787+++ vim74/runtime/syntax/rmd.vim        2014-07-21 23:33:32.123486868 +0000
     32788@@ -0,0 +1,87 @@
     32789+" markdown Text with R statements
     32790+" Language: markdown with R code chunks
     32791+" Last Change: Wed Jul 09, 2014  10:29PM
     32792+"
     32793+" CONFIGURATION:
     32794+"   To highlight chunk headers as R code, put in your vimrc:
     32795+"   let rmd_syn_hl_chunk = 1
     32796+
     32797+" for portability
     32798+if version < 600
     32799+  syntax clear
     32800+elseif exists("b:current_syntax")
     32801+  finish
     32802+endif
     32803+
     32804+" load all of pandoc info
     32805+runtime syntax/pandoc.vim
     32806+if exists("b:current_syntax")
     32807+  let rmdIsPandoc = 1
     32808+  unlet b:current_syntax
     32809+else
     32810+  let rmdIsPandoc = 0
     32811+  runtime syntax/markdown.vim
     32812+  if exists("b:current_syntax")
     32813+    unlet b:current_syntax
     32814+  endif
     32815+endif
     32816+
     32817+" load all of the r syntax highlighting rules into @R
     32818+syntax include @R syntax/r.vim
     32819+if exists("b:current_syntax")
     32820+  unlet b:current_syntax
     32821+endif
     32822+
     32823+if exists("g:rmd_syn_hl_chunk")
     32824+  " highlight R code inside chunk header
     32825+  syntax match rmdChunkDelim "^[ \t]*```{r" contained
     32826+  syntax match rmdChunkDelim "}$" contained
     32827+else
     32828+  syntax match rmdChunkDelim "^[ \t]*```{r.*}$" contained
     32829+endif
     32830+syntax match rmdChunkDelim "^[ \t]*```$" contained
     32831+syntax region rmdChunk start="^[ \t]*``` *{r.*}$" end="^[ \t]*```$" contains=@R,rmdChunkDelim keepend fold
     32832+
     32833+" also match and syntax highlight in-line R code
     32834+syntax match rmdEndInline "`" contained
     32835+syntax match rmdBeginInline "`r " contained
     32836+syntax region rmdrInline start="`r "  end="`" contains=@R,rmdBeginInline,rmdEndInline keepend
     32837+
     32838+" match slidify special marker
     32839+syntax match rmdSlidifySpecial "\*\*\*"
     32840+
     32841+
     32842+if rmdIsPandoc == 0
     32843+  syn match rmdBlockQuote /^\s*>.*\n\(.*\n\@<!\n\)*/ skipnl
     32844+  " LaTeX
     32845+  syntax include @LaTeX syntax/tex.vim
     32846+  if exists("b:current_syntax")
     32847+    unlet b:current_syntax
     32848+  endif
     32849+  " Inline
     32850+  syntax match rmdLaTeXInlDelim "\$"
     32851+  syntax match rmdLaTeXInlDelim "\\\$"
     32852+  syn region texMathZoneX      matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"       matchgroup=Delimiter end="\$" end="%stopzone\>" contains=@texMathZoneGroup
     32853+  " Region
     32854+  syntax match rmdLaTeXRegDelim "\$\$" contained
     32855+  syntax match rmdLaTeXRegDelim "\$\$latex$" contained
     32856+  syntax region rmdLaTeXRegion start="^\$\$" skip="\\\$" end="\$\$$" contains=@LaTeX,rmdLaTeXSt,rmdLaTeXRegDelim keepend
     32857+  syntax region rmdLaTeXRegion2 start="^\\\[" end="\\\]" contains=@LaTeX,rmdLaTeXSt,rmdLaTeXRegDelim keepend
     32858+  hi def link rmdLaTeXSt Statement
     32859+  hi def link rmdLaTeXInlDelim Special
     32860+  hi def link rmdLaTeXRegDelim Special
     32861+endif
     32862+
     32863+setlocal iskeyword=@,48-57,_,.
     32864+
     32865+syn sync match rmdSyncChunk grouphere rmdChunk "^[ \t]*``` *{r"
     32866+
     32867+hi def link rmdChunkDelim Special
     32868+hi def link rmdBeginInline Special
     32869+hi def link rmdEndInline Special
     32870+hi def link rmdBlockQuote Comment
     32871+hi def link rmdSlidifySpecial Special
     32872+
     32873+let b:current_syntax = "rmd"
     32874+
     32875+" vim: ts=8 sw=2
     32876diff -Naur vim74.orig/runtime/syntax/rrst.vim vim74/runtime/syntax/rrst.vim
     32877--- vim74.orig/runtime/syntax/rrst.vim  1970-01-01 00:00:00.000000000 +0000
     32878+++ vim74/runtime/syntax/rrst.vim       2014-07-21 23:33:32.563485720 +0000
     32879@@ -0,0 +1,47 @@
     32880+" reStructured Text with R statements
     32881+" Language: reST with R code chunks
     32882+" Maintainer: Alex Zvoleff, azvoleff@mail.sdsu.edu
     32883+" Last Change: Wed Jul 09, 2014  10:29PM
     32884+"
     32885+" CONFIGURATION:
     32886+"   To highlight chunk headers as R code, put in your vimrc:
     32887+"   let rrst_syn_hl_chunk = 1
     32888+
     32889+" for portability
     32890+if version < 600
     32891+  syntax clear
     32892+elseif exists("b:current_syntax")
     32893+  finish
     32894+endif
     32895+
     32896+" load all of the rst info
     32897+runtime syntax/rst.vim
     32898+unlet b:current_syntax
     32899+
     32900+" load all of the r syntax highlighting rules into @R
     32901+syntax include @R syntax/r.vim
     32902+
     32903+setlocal iskeyword=@,48-57,_,.
     32904+
     32905+" highlight R chunks
     32906+if exists("g:rrst_syn_hl_chunk")
     32907+  " highlight R code inside chunk header
     32908+  syntax match rrstChunkDelim "^\.\. {r" contained
     32909+  syntax match rrstChunkDelim "}$" contained
     32910+else
     32911+  syntax match rrstChunkDelim "^\.\. {r .*}$" contained
     32912+endif
     32913+syntax match rrstChunkDelim "^\.\. \.\.$" contained
     32914+syntax region rrstChunk start="^\.\. {r.*}$" end="^\.\. \.\.$" contains=@R,rrstChunkDelim keepend transparent fold
     32915+
     32916+" also highlight in-line R code
     32917+syntax match rrstInlineDelim "`" contained
     32918+syntax match rrstInlineDelim ":r:" contained
     32919+syntax region rrstInline start=":r: *`" skip=/\\\\\|\\`/ end="`" contains=@R,rrstInlineDelim keepend
     32920+
     32921+hi def link rrstChunkDelim Special
     32922+hi def link rrstInlineDelim Special
     32923+
     32924+let b:current_syntax = "rrst"
     32925+
     32926+" vim: ts=8 sw=2
    2959932927diff -Naur vim74.orig/runtime/syntax/rst.vim vim74/runtime/syntax/rst.vim
    2960032928--- vim74.orig/runtime/syntax/rst.vim   2013-06-04 14:41:25.000000000 +0000
    29601 +++ vim74/runtime/syntax/rst.vim        2014-06-01 00:43:09.164159642 +0000
     32929+++ vim74/runtime/syntax/rst.vim        2014-07-21 23:33:32.570152369 +0000
    2960232930@@ -1,7 +1,7 @@
    2960332931 " Vim syntax file
     
    2962032948diff -Naur vim74.orig/runtime/syntax/sh.vim vim74/runtime/syntax/sh.vim
    2962132949--- vim74.orig/runtime/syntax/sh.vim    2013-07-05 16:35:45.000000000 +0000
    29622 +++ vim74/runtime/syntax/sh.vim 2014-06-01 00:43:09.417492330 +0000
     32950+++ vim74/runtime/syntax/sh.vim 2014-07-21 23:33:33.180150777 +0000
    2962332951@@ -2,10 +2,10 @@
    2962432952 " Language:            shell (sh) Korn shell (ksh) bash (sh)
     
    2973833066diff -Naur vim74.orig/runtime/syntax/spec.vim vim74/runtime/syntax/spec.vim
    2973933067--- vim74.orig/runtime/syntax/spec.vim  2010-05-15 11:03:57.000000000 +0000
    29740 +++ vim74/runtime/syntax/spec.vim       2014-06-01 00:43:09.717491566 +0000
     33068+++ vim74/runtime/syntax/spec.vim       2014-07-21 23:33:33.780149212 +0000
    2974133069@@ -1,8 +1,9 @@
    2974233070 " Filename:    spec.vim
     
    2977333101diff -Naur vim74.orig/runtime/syntax/svn.vim vim74/runtime/syntax/svn.vim
    2977433102--- vim74.orig/runtime/syntax/svn.vim   2012-07-25 13:08:55.000000000 +0000
    29775 +++ vim74/runtime/syntax/svn.vim        2014-06-01 00:43:09.984157553 +0000
     33103+++ vim74/runtime/syntax/svn.vim        2014-07-21 23:33:34.856813069 +0000
    2977633104@@ -2,15 +2,18 @@
    2977733105 " Language:     Subversion (svn) commit file
     
    2983833166diff -Naur vim74.orig/runtime/syntax/systemverilog.vim vim74/runtime/syntax/systemverilog.vim
    2983933167--- vim74.orig/runtime/syntax/systemverilog.vim 1970-01-01 00:00:00.000000000 +0000
    29840 +++ vim74/runtime/syntax/systemverilog.vim      2014-06-01 00:43:10.054157375 +0000
     33168+++ vim74/runtime/syntax/systemverilog.vim      2014-07-21 23:33:34.916812912 +0000
    2984133169@@ -0,0 +1,101 @@
    2984233170+" Vim syntax file
     
    2994333271diff -Naur vim74.orig/runtime/syntax/tcl.vim vim74/runtime/syntax/tcl.vim
    2994433272--- vim74.orig/runtime/syntax/tcl.vim   2010-05-15 11:03:56.000000000 +0000
    29945 +++ vim74/runtime/syntax/tcl.vim        2014-06-01 00:43:10.170823745 +0000
     33273+++ vim74/runtime/syntax/tcl.vim        2014-07-21 23:33:35.043479248 +0000
    2994633274@@ -6,11 +6,9 @@
    2994733275 "              (previously Matt Neumann <mattneu@purpleturtle.com>)
     
    3007833406diff -Naur vim74.orig/runtime/syntax/tex.vim vim74/runtime/syntax/tex.vim
    3007933407--- vim74.orig/runtime/syntax/tex.vim   2013-07-05 16:35:45.000000000 +0000
    30080 +++ vim74/runtime/syntax/tex.vim        2014-06-01 00:43:10.227490267 +0000
     33408+++ vim74/runtime/syntax/tex.vim        2014-07-21 23:33:35.256812025 +0000
    3008133409@@ -1,8 +1,8 @@
    3008233410 " Vim syntax file
     
    3022133549diff -Naur vim74.orig/runtime/syntax/upstreamlog.vim vim74/runtime/syntax/upstreamlog.vim
    3022233550--- vim74.orig/runtime/syntax/upstreamlog.vim   2013-08-03 15:47:26.000000000 +0000
    30223 +++ vim74/runtime/syntax/upstreamlog.vim        2014-06-01 00:43:10.500822905 +0000
     33551+++ vim74/runtime/syntax/upstreamlog.vim        2014-07-21 23:33:35.950143549 +0000
    3022433552@@ -1,7 +1,7 @@
    3022533553 " Vim syntax file
     
    3025033578diff -Naur vim74.orig/runtime/syntax/usserverlog.vim vim74/runtime/syntax/usserverlog.vim
    3025133579--- vim74.orig/runtime/syntax/usserverlog.vim   2013-08-03 15:47:26.000000000 +0000
    30252 +++ vim74/runtime/syntax/usserverlog.vim        2014-06-01 00:43:10.510822879 +0000
     33580+++ vim74/runtime/syntax/usserverlog.vim        2014-07-21 23:33:35.960143523 +0000
    3025333581@@ -1,7 +1,7 @@
    3025433582 " Vim syntax file
     
    3027933607diff -Naur vim74.orig/runtime/syntax/usw2kagtlog.vim vim74/runtime/syntax/usw2kagtlog.vim
    3028033608--- vim74.orig/runtime/syntax/usw2kagtlog.vim   2013-08-03 15:47:26.000000000 +0000
    30281 +++ vim74/runtime/syntax/usw2kagtlog.vim        2014-06-01 00:43:10.510822879 +0000
     33609+++ vim74/runtime/syntax/usw2kagtlog.vim        2014-07-21 23:33:35.963476848 +0000
    3028233610@@ -1,7 +1,7 @@
    3028333611 " Vim syntax file
     
    3030833636diff -Naur vim74.orig/runtime/syntax/vhdl.vim vim74/runtime/syntax/vhdl.vim
    3030933637--- vim74.orig/runtime/syntax/vhdl.vim  2012-06-01 16:05:47.000000000 +0000
    30310 +++ vim74/runtime/syntax/vhdl.vim       2014-06-01 00:43:10.607489300 +0000
     33638+++ vim74/runtime/syntax/vhdl.vim       2014-07-21 23:33:36.056809938 +0000
    3031133639@@ -1,12 +1,12 @@
    3031233640 " Vim syntax file
     
    3046233790diff -Naur vim74.orig/runtime/syntax/vim.vim vim74/runtime/syntax/vim.vim
    3046333791--- vim74.orig/runtime/syntax/vim.vim   2013-07-05 16:35:45.000000000 +0000
    30464 +++ vim74/runtime/syntax/vim.vim        2014-06-01 00:43:10.670822472 +0000
     33792+++ vim74/runtime/syntax/vim.vim        2014-07-21 23:33:36.110143132 +0000
    3046533793@@ -1,8 +1,8 @@
    3046633794 " Vim syntax file
     
    3056733895diff -Naur vim74.orig/runtime/syntax/yacc.vim vim74/runtime/syntax/yacc.vim
    3056833896--- vim74.orig/runtime/syntax/yacc.vim  2012-11-15 01:25:58.000000000 +0000
    30569 +++ vim74/runtime/syntax/yacc.vim       2014-06-01 00:43:11.070821453 +0000
     33897+++ vim74/runtime/syntax/yacc.vim       2014-07-21 23:33:36.570141932 +0000
    3057033898@@ -1,8 +1,8 @@
    3057133899 " Vim syntax file
     
    3059033918diff -Naur vim74.orig/runtime/syntax/yaml.vim vim74/runtime/syntax/yaml.vim
    3059133919--- vim74.orig/runtime/syntax/yaml.vim  2010-10-08 13:33:39.000000000 +0000
    30592 +++ vim74/runtime/syntax/yaml.vim       2014-06-01 00:43:11.080821428 +0000
     33920+++ vim74/runtime/syntax/yaml.vim       2014-07-21 23:33:36.576808581 +0000
    3059333921@@ -108,9 +108,10 @@
    3059433922 syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter
     
    3060633934diff -Naur vim74.orig/runtime/tutor/tutor vim74/runtime/tutor/tutor
    3060733935--- vim74.orig/runtime/tutor/tutor      2012-10-03 13:29:40.000000000 +0000
    30608 +++ vim74/runtime/tutor/tutor   2014-06-01 00:43:11.947485887 +0000
     33936+++ vim74/runtime/tutor/tutor   2014-07-21 23:33:36.940140966 +0000
    3060933937@@ -55,8 +55,8 @@
    3061033938   2. Type:     :q! <ENTER>.
     
    3062033948diff -Naur vim74.orig/runtime/tutor/tutor.es vim74/runtime/tutor/tutor.es
    3062133949--- vim74.orig/runtime/tutor/tutor.es   2010-05-15 11:04:02.000000000 +0000
    30622 +++ vim74/runtime/tutor/tutor.es        2014-06-01 00:43:12.157485353 +0000
     33950+++ vim74/runtime/tutor/tutor.es        2014-07-21 23:33:37.110140523 +0000
    3062333951@@ -121,7 +121,7 @@
    3062433952         h (izquierda)     j (abajo)      k (arriba)      l (derecha)
     
    3063233960diff -Naur vim74.orig/runtime/tutor/tutor.it vim74/runtime/tutor/tutor.it
    3063333961--- vim74.orig/runtime/tutor/tutor.it   2010-05-23 09:00:00.000000000 +0000
    30634 +++ vim74/runtime/tutor/tutor.it        2014-06-01 00:43:12.324151595 +0000
     33962+++ vim74/runtime/tutor/tutor.it        2014-07-21 23:33:37.230140209 +0000
    3063533963@@ -638,7 +638,7 @@
    3063633964 NOTA: Se esci da Vim e riesegui Vim battendo  vim TEST , il file aperto
     
    3064433972diff -Naur vim74.orig/runtime/tutor/tutor.it.utf-8 vim74/runtime/tutor/tutor.it.utf-8
    3064533973--- vim74.orig/runtime/tutor/tutor.it.utf-8     2010-05-23 10:11:46.000000000 +0000
    30646 +++ vim74/runtime/tutor/tutor.it.utf-8  2014-06-01 00:43:12.337484894 +0000
     33974+++ vim74/runtime/tutor/tutor.it.utf-8  2014-07-21 23:33:37.246806833 +0000
    3064733975@@ -638,7 +638,7 @@
    3064833976 NOTA: Se esci da Vim e riesegui Vim battendo  vim TEST , il file aperto
     
    3065633984diff -Naur vim74.orig/runtime/tutor/tutor.pt vim74/runtime/tutor/tutor.pt
    3065733985--- vim74.orig/runtime/tutor/tutor.pt   2010-08-11 20:54:33.000000000 +0000
    30658 +++ vim74/runtime/tutor/tutor.pt        2014-06-01 00:43:12.544151035 +0000
     33986+++ vim74/runtime/tutor/tutor.pt        2014-07-21 23:33:37.463472934 +0000
    3065933987@@ -58,11 +58,11 @@
    3066033988      Isso sai do editor SEM salvar qualquer mudança que tenha sido feita.
     
    3068334011diff -Naur vim74.orig/runtime/tutor/tutor.pt.utf-8 vim74/runtime/tutor/tutor.pt.utf-8
    3068434012--- vim74.orig/runtime/tutor/tutor.pt.utf-8     2010-08-11 20:54:33.000000000 +0000
    30685 +++ vim74/runtime/tutor/tutor.pt.utf-8  2014-06-01 00:43:12.567484309 +0000
     34013+++ vim74/runtime/tutor/tutor.pt.utf-8  2014-07-21 23:33:37.470139583 +0000
    3068634014@@ -58,11 +58,11 @@
    3068734015      Isso sai do editor SEM salvar qualquer mudança que tenha sido feita.
     
    3070834036 
    3070934037   3. Agora digite  :s/aa/a/g   significando substituir globalmente na linha.
     34038diff -Naur vim74.orig/runtime/tutor/tutor.sr.cp1250 vim74/runtime/tutor/tutor.sr.cp1250
     34039--- vim74.orig/runtime/tutor/tutor.sr.cp1250    1970-01-01 00:00:00.000000000 +0000
     34040+++ vim74/runtime/tutor/tutor.sr.cp1250 2014-07-21 23:33:37.566805998 +0000
     34041@@ -0,0 +1,971 @@
     34042+===============================================================================
     34043+=    D o b r o d o š l i   u   VIM   p r i r u è n i k  -    Verzija 1.7      =
     34044+===============================================================================
     34045+
     34046+     Vim je moæan editor sa mnogo komandi, suviše da bismo ih ovde sve
     34047+     opisali.  Priruènik je zamišljen da opiše dovoljno komandi da biste
     34048+     mogli lagodno da koristite Vim kao editor opšte namene.
     34049+
     34050+     Približno vreme potrebno za uspešan završetak priruènika je izmeðu
     34051+     25 i 30 minuta, u zavisnosti od vremena potrošenog na vežbu.
     34052+
     34053+     UPOZORENJE:
     34054+     Komande u lekcijama æe menjati tekst.  Iskopirajte ovaj fajl i
     34055+     vežbajte na kopiji (ako ste pokrenuli "vimtutor" ovo je veæ kopija).
     34056+
     34057+     Važno je upamtiti da je ovaj priruènik zamišljen za aktivnu vežbu.
     34058+     To znaèi da morate upotrebljavati komande o kojima èitate da biste
     34059+     ih nauèili.  Ako samo èitate tekst, zaboraviæete komande!
     34060+
     34061+     Ako je Caps Lock ukljuèen ISKLJUÈITE ga.  Pritisnite taster  j  dovoljno
     34062+     puta da lekcija 1.1 cela stane na ekran.
     34063+
     34064+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34065+                     Lekcija 1.1:  POMERANJE KURSORA
     34066+
     34067+
     34068+ ** Za pomeranje kursora, pritiskajte tastere h,j,k,l kako je prikazano **
     34069+            ^
     34070+            k              Savet: h je s leve strane i pomera kursor u levo.
     34071+       < h      l >               l je s desne strane i pomera kursor u desno.
     34072+            j                     j izgleda kao strelica naniže.
     34073+            v
     34074+  1. Pomerajte kursor po ekranu dok se ne naviknete na komande.
     34075+
     34076+  2. Pritisnite taster (j) dok ne poène da se ponavlja.
     34077+     Sada znate kako da doðete do naredne lekcije.
     34078+
     34079+  3. Koristeæi taster j preðite na lekciju 1.2.
     34080+
     34081+NAPOMENA:  Ako niste sigurni šta ste zapravo pritisnuli, pritisnite <ESC>
     34082+           za prelazak u Normal mod i pokušajte ponovo.
     34083+
     34084+NAPOMENA:  Strelice takoðe pomeraju kursor, ali korišæenje tastera hjkl je
     34085+           znatno brže, kad se jednom naviknete na njih.  Zaista!
     34086+
     34087+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34088+                          Lekcija 1.2: IZLAZAK IZ VIM-a
     34089+
     34090+
     34091+  !! UPOZORENJE: Pre izvoðenja bilo kog koraka, proèitajte celu lekciju!!
     34092+
     34093+  1. Pritisnite <ESC> (editor je sada u Normal modu).
     34094+
     34095+  2. Otkucajte:        :q! <ENTER>.
     34096+     Ovime se izlazi iz editora, sa GUBITKOM svih izmena.
     34097+
     34098+  3. Kada se pojavi komandni prompt, unesite komandu koja je pokrenula
     34099+     ovaj priruènik:           vimtutor <ENTER>
     34100+
     34101+  4. Ako ste upamtili ove korake, izvršite ih redom od 1 do 3 da biste
     34102+     izašli iz editora i ponovo ga pokrenuli.
     34103+
     34104+NAPOMENA:  :q! <ENTER>  poništava sve izmene koje ste napravili.
     34105+           U narednim lekcijama nauèiæete kako da saèuvate izmene.
     34106+
     34107+  5. Pomerite kursor na lekciju 1.3.
     34108+
     34109+
     34110+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34111+                   Lekcija 1.3: IZMENA TEKSTA - BRISANJE
     34112+
     34113+
     34114+             ** Pritisnite  x  za brisanje znaka pod kursorom. **
     34115+
     34116+  1. Pomerite kursor na red oznaèen sa --->.
     34117+
     34118+  2. Da biste ispravili greške, pomerajte kursor dok se
     34119+     ne naðe na slovu koje treba izbrisati.
     34120+
     34121+  3. Pritisnite taster  x  da izbrišete neželjeno slovo.
     34122+
     34123+  4. Ponavljajte korake od 2 do 4 dok ne ispravite sve greške.
     34124+
     34125+---> RRRibaa riibi grizzze rrreepp.
     34126+
     34127+  5. Kad ispravite red, preðite na lekciju 1.4.
     34128+
     34129+NAPOMENA:  Dok koristite priruènik, nemojte uèiti komande napamet,
     34130+           veæ vežbajte njihovu primenu.
     34131+
     34132+
     34133+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34134+                Lekcija 1.4: IZMENA TEKSTA - UBACIVANJE
     34135+
     34136+
     34137+         ** Pritisnite  i  za ubacivanje teksta ispred kursora. **
     34138+
     34139+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34140+
     34141+  2. Da biste tekst prvog reda izjednaèili s tekstom drugog, namestite
     34142+     kursor na prvi znak POSLE kog æete ubaciti potreban tekst.
     34143+
     34144+  3. Pritisnite  i  pa unesite potrebne dopune.
     34145+
     34146+  4. Po ispravci svake greške pritisnite <ESC> da se vratite u Normal mod.
     34147+     Ponovite korake od 2 do 4 da biste ispravili celu reèenicu.
     34148+
     34149+---> Do teka neoje v red.
     34150+---> Deo teksta nedostaje iz ovog reda.
     34151+
     34152+  5. Preðite na sledeæu lekciju.
     34153+
     34154+
     34155+
     34156+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34157+                   Lekcija 1.5: IZMENA TEKSTA - DODAVANJE
     34158+
     34159+
     34160+                  ** Pritisnite  A  za dodavanje teksta. **
     34161+
     34162+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34163+     Nije važno gde se nalazi kursor u tom redu.
     34164+
     34165+  2. Pritisnite  A  i unesite dodatni tekst.
     34166+
     34167+  3. Pošto ste dodali tekst, pritisnite <ESC> za povratak u
     34168+     Normal mod.
     34169+
     34170+  4. Pomerite kursor na drugi red oznaèen sa ---> i ponavljajte
     34171+     korake 2 i 3 dok ne ispravite tekst.
     34172+
     34173+---> Deo teksta nedostaje u
     34174+     Deo teksta nedostaje u ovom redu.
     34175+---> Deo teksta nedostaje
     34176+     Deo teksta nedostaje i ovde.
     34177+
     34178+  5. Preðite na lekciju 1.6.
     34179+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34180+                    Lekcija 1.6: IZMENA FAJLA
     34181+
     34182+
     34183+     ** Upotrebite  :wq  za snimanje teksta i izlazak iz editora. **
     34184+
     34185+  !! UPOZORENJE: Pre izvoðenja bilo kog koraka, proèitajte celu lekciju!!
     34186+
     34187+  1. Izaðite iz editora kao u lekciji 1.2:  :q!
     34188+
     34189+  2. Na komandnom promptu unesite sledeæu komandu:  vim tutor <ENTER>
     34190+     'vim' je komanda za pokretanja Vim editora, 'tutor' je ime fajla koji
     34191+     želite da menjate.  Koristite fajl koji imate pravo da menjate.
     34192+
     34193+  3. Ubacujte i brišite tekst kao u prethodnim lekcijama.
     34194+
     34195+  4. Snimite izmenjeni tekst i izaðite iz Vim-a:  :wq <ENTER>
     34196+
     34197+  5. Ponovo pokrenite vimtutor i proèitajte rezime koji sledi.
     34198+
     34199+  6. Pošto proèitate korake iznad i u potpunosti ih razumete:
     34200+     izvršite ih.
     34201+
     34202+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34203+                             REZIME lekcije 1
     34204+
     34205+
     34206+  1. Kursor se pomera strelicama ili pomoæu tastera hjkl .
     34207+       h (levo)        j (dole)        k (gore)        l (desno)
     34208+
     34209+  2. Za pokretanje Vim-a iz shell-a:  vim IME_FAJLA <ENTER>
     34210+
     34211+  3. Izlaz:    <ESC>   :q! <ENTER>     sve promene su izgubljene.
     34212+       ILI:    <ESC>   :wq <ENTER>     promene su saèuvane.
     34213+
     34214+  4. Brisanje znaka na kome se nalazi kursor:  x
     34215+
     34216+  5. Ubacivanja ili dodavanje teksta:
     34217+        i   unesite tekst <ESC>        unos ispred kursora
     34218+        A   unesite tekst <ESC>        dodavanje na kraju reda
     34219+
     34220+NAPOMENA:  Pritiskom na <ESC> prebacujete Vim u Normal mod i
     34221+           prekidate neželjenu ili delimièno izvršenu komandu.
     34222+
     34223+Nastavite sa lekcijom 2.
     34224+
     34225+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34226+                       Lekcija 2.1: NAREDBE BRISANJA
     34227+
     34228+
     34229+                ** Otkucajte  dw  za brisanje reèi. **
     34230+
     34231+  1. Pritisnite  <ESC>  da biste bili sigurni da ste u Normal modu.
     34232+
     34233+  2. Pomerite kursor na red oznaèen sa --->.
     34234+
     34235+  3. Pomerite kursor na poèetak reèi koju treba izbrisati.
     34236+
     34237+  4. Otkucajte  dw  da biste uklonili reè.
     34238+
     34239+NAPOMENA:  Slovo  d  æe se pojaviti na dnu ekrana kad ga otkucate.  Vim èeka
     34240+          da otkucate  w .  Ako je prikazano neko drugo slovo, pogrešili ste u
     34241+          kucanju; pritisnite <ESC> i pokušajte ponovo.  (Ako se ne pojavi
     34242+          ništa, možda je iskljuèena opcija 'showcmd': vidi lekciju 6.5.)
     34243+
     34244+---> Neke reèi smešno ne pripadaju na papir ovoj reèenici.
     34245+
     34246+  5. Ponavljajte korake 3 i 4 dok ne ispravite reèenicu, pa
     34247+     preðite na lekciju 2.2.
     34248+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34249+                     Lekcija 2.2: JOŠ BRISANJA
     34250+
     34251+
     34252+       ** Otkucajte  d$  za brisanje znakova do kraja reda. **
     34253+
     34254+  1. Pritisnite  <ESC>  da biste bili sigurni da ste u Normal modu.
     34255+
     34256+  2. Pomerite kursor na red oznaèen sa  --->.
     34257+
     34258+  3. Pomerite kursor do kraja ispravnog dela reèenice
     34259+     (POSLE prve . ).
     34260+
     34261+  4. Otkucajte  d$  za brisanje ostatka reda.
     34262+
     34263+---> Neko je uneo kraj ovog reda dvaput. kraj ovog reda dvaput.
     34264+
     34265+  5. Preðite na lekciju 2.3 za podrobnije objašnjenje.
     34266+
     34267+
     34268+
     34269+
     34270+
     34271+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34272+             Lekcija 2.3: O OPERATORIMA I POKRETIMA
     34273+
     34274+
     34275+  Mnoge komande za izmenu teksta sastoje se od operatora i pokreta.
     34276+  Oblik komande brisanja sa  d  operatorom je sledeæi:
     34277+
     34278+       d   pokret
     34279+
     34280+  Pri èemu je:
     34281+    d      - operator brisanja.
     34282+    pokret - ono na èemu æe se operacija izvršavati (opisano u nastavku).
     34283+
     34284+  Kratak spisak pokreta:
     34285+    w - sve do poèetka sledeæe reèi, NE UKLJUÈUJUÆI prvo slovo.
     34286+    e - sve do kraja tekuæe reèi, UKLJUÈUJUÆI poslednje slovo.
     34287+    $ - sve do kraje reda, UKLJUÈUJUÆI poslednje slovo.
     34288+
     34289+  Kucanjem  de  brisaæe se tekst od kursora do kraja reèi.
     34290+
     34291+NAPOMENA:  Pritiskom samo na taster pokreta dok ste u Normal modu, bez
     34292+           operatora, kursor se pomera kao što je opisano.
     34293+
     34294+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34295+                 Lekcija 2.4: KORIŠÆENJE BROJANJA ZA POKRETE
     34296+
     34297+
     34298+  ** Unošenjem nekog broja pre pokreta, pokret se izvršava taj broj puta. **
     34299+
     34300+  1. Pomerite kursor na red oznaèen sa --->.
     34301+
     34302+  2. Otkucajte  2w  da pomerite kursor dve reèi napred.
     34303+
     34304+  3. Otkucajte  3e  da pomerite kursor na kraj treæe reèi napred.
     34305+
     34306+  4. Otkucajte  0  (nulu) da pomerite kursor na poèetak reda.
     34307+
     34308+  5. Ponovite korake 2 i 3 s nekim drugim brojevima.
     34309+
     34310+---> Reèenica sa reèima po kojoj možete pomerati kursor.
     34311+
     34312+  6. Preðite na lekciju 2.5.
     34313+
     34314+
     34315+
     34316+
     34317+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34318+             Lekcija 2.5: KORIŠÆENJE BROJANJA ZA VEÆE BRISANJE
     34319+
     34320+
     34321+  ** Unošenje nekog broja s operatorom ponavlja operator taj broj puta. **
     34322+
     34323+  U kombinaciji operatora brisanja s pokretima spomenutim iznad
     34324+  možete uneti broj pre pokreta da biste izbrisali više znakova:
     34325+
     34326+        d   broj   pokret
     34327+
     34328+  1. Pomerite kursor na prvo slovo u reèi s VELIKIM SLOVIMA u redu
     34329+     oznaèenom sa --->.
     34330+
     34331+  2. Otkucajte  d2w  da izbrišete dve reèi sa VELIKIM SLOVIMA
     34332+
     34333+  3. Ponovite korake 1 i 2 sa razlièitim brojevima da izbrišete
     34334+     uzastopne reèi sa VELIKIM SLOVIMA korišæenjem samo jedne komande.
     34335+
     34336+---> ovaj ABCÈÆ DÐE red FGHI JK LMN OP s reèima je RSŠ TUVZŽ ispravljen.
     34337+
     34338+
     34339+
     34340+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34341+                    Lekcija 2.6: OPERACIJE NAD REDOVIMA
     34342+
     34343+
     34344+              ** Otkucajte  dd  za brisanje celog reda. **
     34345+
     34346+  Zbog uèestalosti brisanja celih redova, autori Vi-ja odluèili su da
     34347+  je lakše brisati redove ako se otkuca  d  dvaput.
     34348+
     34349+  1. Pomerite kursor na drugi red u donjoj strofi.
     34350+  2. Otkucajte  dd  da ga izbrišete.
     34351+  3. Pomerite kursor na èetvrti red.
     34352+  4. Otkucajte   2dd   da biste izbrisali dva reda.
     34353+
     34354+--->  1)  Sedlo mi je od marame,
     34355+--->  2)  blato na sve strane,
     34356+--->  3)  uzda od kanapa,
     34357+--->  4)  auto mi je ovde,
     34358+--->  5)  satovi pokazuju vreme,
     34359+--->  6)  a biè mi je od oèina
     34360+--->  7)  prebijena štapa.
     34361+
     34362+
     34363+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34364+                     Lekcija 2.7: PONIŠTAVANJE PROMENA
     34365+
     34366+
     34367+  ** Pritisnite  u  za poništavanje poslednje komande,  U  za ceo red. **
     34368+
     34369+  1. Pomerite kursor na red oznaèen sa ---> i postavite ga na mesto
     34370+     prve greške.
     34371+  2. Otkucajte  x  da izbrišete prvi neželjeni znak.
     34372+  3. Otkucajte  u  da poništite poslednju izvršenu komandu.
     34373+  4. Sad ispravite sve greške u redu koristeæi komandu  x  .
     34374+  5. Otkucajte veliko  U  da biste vratili sadržaj reda u prvobitno
     34375+     stanje.
     34376+  6. Onda otkucajte  u  nekoliko puta da biste poništili  U
     34377+     i prethodne komande.
     34378+  7. Sad otkucajte CTRL-R (držeæi  CTRL  dok pritiskate R)
     34379+     nekoliko puta da biste vratili izmene (poništili poništavanja).
     34380+
     34381+---> Iiisspravite greške uu ovvom redu ii pooništiteee ih.
     34382+
     34383+  8. Ovo su veoma korisne komande.  Preðite na rezime lekcije 2.
     34384+
     34385+
     34386+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34387+                             REZIME lekcije 2
     34388+
     34389+
     34390+  1. Brisanje od kursora do sledeæe reèi:      dw
     34391+  2. Brisanje od kursora do kraja reda:                d$
     34392+  3. Brisanje celog reda:                      dd
     34393+
     34394+  4. Za ponavljanje pokreta prethodno unesite broj:  2w
     34395+  5. Oblik komande za izmenu:
     34396+               operator   [broj]   pokret
     34397+     gde je:
     34398+       operator - šta uraditi, recimo  d  za brisanje
     34399+       [broj]   - neobavezan broj ponavljanja pokreta
     34400+       pokret   - kretanje po tekstu na kome se radi,
     34401+                  kao što je: w (reè), $ (kraj reda), itd.
     34402+
     34403+  6. Pomeranje kursora na poèetak reda:  0
     34404+
     34405+  7. Za poništavanje prethodnih izmena, pritisnite:    u  (malo u)
     34406+     Za poništavanje svih promena u redu, pritisnite:  U  (veliko U)
     34407+     Za vraæanja promena, otkucajte:                   CTRL-R
     34408+
     34409+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34410+                      Lekcija 3.1: KOMANDA POSTAVLJANJA
     34411+
     34412+
     34413+  ** Otkucajte  p  da postavite prethodno izbrisan tekst iza kursora. **
     34414+
     34415+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34416+
     34417+  2. Otkucajte  dd  da izbrišete red i smestite ga u Vim registar.
     34418+
     34419+  3. Pomerite kursor na red c), IZNAD mesta gde treba postaviti izbrisan red.
     34420+
     34421+  4. Otkucajte  p  da postavite red ispod kursora.
     34422+
     34423+  5. Ponavljajte korake 2 do 4 da biste postavili sve linije u pravilnom
     34424+     redosledu.
     34425+
     34426+---> d) prebijena štapa.
     34427+---> b) uzda od kanapa,
     34428+---> c) a biè mi je od oèina
     34429+---> a) Sedlo mi je od marame,
     34430+
     34431+
     34432+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34433+                      Lekcija 3.2: KOMANDA ZAMENE
     34434+
     34435+
     34436+      ** Otkucajte  rx  da zamenite znak ispod kursora slovom  x . **
     34437+
     34438+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34439+
     34440+  2. Pomerite kursor tako da se nalazi na prvoj grešci.
     34441+
     34442+  3. Otkucajte  r  i onda znak koji treba da tu stoji.
     34443+
     34444+  4. Ponavljajte korake 2 i 3 sve dok prvi red ne bude
     34445+     isti kao drugi.
     34446+
     34447+--->  Kedi ju ovej red ugašen, nako je protresao pustašne testere!
     34448+--->  Kada je ovaj red unošen, neko je pritiskao pogrešne tastere!
     34449+
     34450+  5. Preðite na lekciju 3.2.
     34451+
     34452+NAPOMENA:  Setite se da treba da uèite vežbanjem, ne pamæenjem.
     34453+
     34454+
     34455+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34456+                   Lekcija 3.3: OPERATOR IZMENE
     34457+
     34458+
     34459+         ** Za izmenu teksta do kraja reèi, otkucajte  ce  .**
     34460+
     34461+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34462+
     34463+  2. Postavite kursor na  a  u  rakdur.
     34464+
     34465+  3. Otkucajte  ce  i ispravite reè (u ovom sluèaju otkucajte  ed  ).
     34466+
     34467+  4. Pritisnite <ESC> i pomerite kursor na sledeæi znak koji
     34468+     treba ispraviti.
     34469+
     34470+  5. Ponavljajte korake 3 i 4 sve dok prva reèenica ne bude ista
     34471+     kao druga.
     34472+
     34473+---> Ovaj rakdur ima nekoliko rejga koje treflja isprpikati operagrom izmene.
     34474+---> Ovaj red ima nekoliko reèi koje treba ispraviti operatorom izmene.
     34475+
     34476+Uoèite da  ce  briše reè i postavlja editor u Insert mod.
     34477+
     34478+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34479+                Lekcija 3.4: DALJE IZMENE UPOTREBOM c
     34480+
     34481+
     34482+    ** Komanda izmene se koristi sa istim pokretima kao i brisanje. **
     34483+
     34484+  1. Operator izmene se koristi na isti naèin kao i operator brisanja:
     34485+
     34486+         c    [broj]   pokret
     34487+
     34488+  2. Pokreti su isti, recimo:   w (reè) i  $ (kraj reda).
     34489+
     34490+  3. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34491+
     34492+  4. Pomerite kursor na prvu grešku.
     34493+
     34494+  5. Otkucajte  c$  i unesite ostatak reda tako da bude isti kao
     34495+     drugi red, pa pritisnite <ESC>.
     34496+
     34497+---> Kraj ovog reda treba izmeniti tako da izgleda kao red ispod.
     34498+---> Kraj ovog reda treba ispraviti korišæenjem c$ komande.
     34499+
     34500+NAPOMENA:  Za ispravljanje grešaka možete koristiti Backspace .
     34501+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34502+                             REZIME lekcije 3
     34503+
     34504+
     34505+  1. Za postavljanje teksta koji ste upravo izbrisali, pritisnite  p . Ovo
     34506+     postavlja tekst IZA kursora (ako je bio izbrisan jedan ili više redova
     34507+     sadržaj æe doæi na red ispod kursora).
     34508+
     34509+  2. Za zamenu znaka na kome se nalazi kursor, pritisnite  r  i onda
     34510+     željeni znak.
     34511+
     34512+  3. Operator izmene dozvoljava promenu teksta od kursora do pozicije gde
     34513+     se završava pokret.  Primera radi, kucajte  ce  za izmenu od kursora do
     34514+     kraja reèi, ili  c$  za izmenu od kursora do kraja reda.
     34515+
     34516+  4. Oblik operacije izmene je:
     34517+
     34518+        c   [broj]   pokret
     34519+
     34520+Preðite na narednu lekciju.
     34521+
     34522+
     34523+
     34524+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34525+             Lekcija 4.1: POZICIJA KURSORA I STATUS FAJLA
     34526+
     34527+  ** Pritisnite CTRL-G za prikaz pozicije kursora u tekstu i status fajla.
     34528+     Pritisnite  G  za pomeranje kursora na neki red u tekstu. **
     34529+
     34530+NAPOMENA:  Proèitajte celu lekciju pre izvoðenja bilo kog koraka!!
     34531+
     34532+  1. Držite taster CTRL i pritisnite  g .  Ovo zovemo CTRL-G.
     34533+     Editor æe na dnu ekrana ispisati poruku sa imenom fajla i pozicijom
     34534+     kursora u tekstu.  Zapamtite broj reda za 3. korak.
     34535+
     34536+NAPOMENA:  U donjem desnom uglu može se videti poziciju kursora ako je
     34537+           ukljuèena opcija 'ruler' (vidi  :help ruler  ili lekciju 6.5.)
     34538+
     34539+  2. Pritisnite  G  za pomeranje kursora na kraj teksta.
     34540+     Pritisnite  1G  ili  gg  za pomranje kursora na poèetak teksta.
     34541+
     34542+  3. Otkucajte broj reda na kome ste malopre bili i onda  G .  Kursor
     34543+     æe se vratiti na red na kome je bio kad ste otkucali CTRL-G.
     34544+
     34545+  4. Ako ste spremni, izvršite korake od 1 do 3.
     34546+
     34547+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34548+                   Lekcija 4.2: KOMANDE PRETRAŽIVANJA
     34549+
     34550+       ** Otkucajte  /  i onda izraz koji želite da potražite. **
     34551+
     34552+  1. U Normal modu otkucajte znak  / .  Primietite da se znak pojavio
     34553+     zajedno sa kursorom na dnu ekrana kao i kod komande  : .
     34554+
     34555+  2. Sada otkucajte 'grrreška' <ENTER>.  (Bez razmaka i navodnika.)
     34556+     To je reè koju tražite.
     34557+
     34558+  3. Za ponovno traženje istog izraza, otkucajte  n .
     34559+     Za traženje istog izraza u suprotnom smeru, otkucajte  N .
     34560+
     34561+  4. Za traženje izraza unatrag, koristite  ?  umesto  / .
     34562+
     34563+  5. Za povratak na prethodnu poziciju otkucajte CTRL-O (držite CTRL dok
     34564+     pritiskate O ).  Ponavljajte za ranije pozicije.  CTRL-I ide napred.
     34565+
     34566+---> "grrreška" je pogrešno; umesto grrreška treba da stoji greška.
     34567+
     34568+NAPOMENA:  Ako pretraga doðe do kraja teksta traženje æe se nastaviti od
     34569+          njegovog poèetka osim ako je opcija 'wrapscan' iskljuèena.
     34570+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34571+                 Lekcija 4.3: TRAŽENJE PARA ZAGRADE
     34572+
     34573+
     34574+       ** Otkucajte  %  za nalaženje para ), ] ili } . **
     34575+
     34576+  1. Postavite kursor na bilo koju od  ( ,  [  ili  {
     34577+     otvorenih zagrada u redu oznaèenom sa --->.
     34578+
     34579+  2. Otkucajte znak  % .
     34580+
     34581+  3. Kursor æe se pomeriti na odgovarajuæu zatvorenu zagradu.
     34582+
     34583+  4. Otkucajte  %  da pomerite kursor na prvu zagradu u paru.
     34584+
     34585+      5. Pomerite kursor na neku od (,),[,],{ ili } i ponovite komandu  % .
     34586+
     34587+---> Red ( testiranja obiènih ( [ uglastih ] i { vitièastih } zagrada.))
     34588+
     34589+
     34590+NAPOMENA:  Vrlo korisno u ispravljanju koda sa rasparenim zagradama!
     34591+
     34592+
     34593+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34594+                     Lekcija 4.4: KOMANDA ZAMENE
     34595+
     34596+
     34597+       ** Otkucajte  :s/staro/novo/g  da zamenite 'staro' za 'novo'. **
     34598+
     34599+  1. Pomerite kursor na red oznaèen sa --->.
     34600+
     34601+  2. Otkucajte  :s/rdi/ri/ <ENTER> .  Primetite da ova komanda zamenjuje
     34602+     samo prvo "rdi" u redu.
     34603+
     34604+  3. Otkucajte  :s/rdi/ri/g .  Dodavanje opcije  g  znaèi da æe se komanda
     34605+     izvršiti u celom redu, zamenom svih pojava niza "rdi".
     34606+
     34607+---> rdiba rdibi grdize rep.
     34608+
     34609+  4. Za zamenu svih izraza izmeðu neka dva reda,
     34610+     otkucajte :#,#s/staro/novo/g   gde su #,# krajnji brojevi redova u opsegu
     34611+                                    u kome æe se obaviti zamena.
     34612+     Otkucajte :%s/staro/novo/g     za zamenu svih izraza u celom tekstu.
     34613+     Otkucajte :%s/staro/novo/gc    za nalaženje svih izraza u tekstu i
     34614+                                   potvrdu zamene.
     34615+
     34616+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34617+                             REZIME lekcije 4
     34618+
     34619+
     34620+  1. CTRL-G  prikazuje poziciju kursora u tekstu i status fajla.
     34621+             G  pomera kursor na kraj teksta.
     34622+     broj    G  pomera kursor na navedeni red.
     34623+            gg  pomera kursor na prvi red teksta.
     34624+
     34625+  2. Kucanjem  /  sa izrazom taj izraz se traži UNAPRED.
     34626+     Kucanjem  ?  sa izrazom taj izraz se traži UNAZAD.
     34627+     Posle komande traženja koristite  n  za nalaženje izraza u istom
     34628+     smeru, a  N  za nalaženje u suprotnom smeru.
     34629+     CTRL-O vraæa kursor na prethodnu poziciju, a CTRL-I na narednu.
     34630+
     34631+  3. Kucanjem  %  kad je kursor na zagradi on se pomera na njen par.
     34632+
     34633+  4. Za zamenu prvog izraza staro za izraz novo            :s/staro/novo/
     34634+     Za zamenu svih izraza u celom redu                    :s/staro/novo/g
     34635+     Za zamenu svih izraza u opsegu linija #,#             :#,#s/staro/novo/g
     34636+     Za zamenu u celom tekstu                              :%s/staro/novo/g
     34637+     Za potvrdu svake zamene dodajte 'c'                  :%s/staro/novo/gc
     34638+
     34639+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34640+               Lekcija 5.1: IZVRŠAVANJE SPOLJAŠNJIH KOMANDI
     34641+
     34642+
     34643+  ** Otkucajte  :!  pa spoljašnju komandu koju želite da izvršite. **
     34644+
     34645+  1. Otkucajte poznatu komandu  :  da biste namestili kursor na dno
     34646+     ekrana.  Time omoguæavate unos komande u komandnoj liniji editora.
     34647+
     34648+  2. Otkucajte znak  !  (uzviènik).  Ovime omoguæavate
     34649+     izvršavanje bilo koje spoljašnje komande.
     34650+
     34651+  3. Kao primer otkucajte   ls   posle ! i pritisnite <ENTER>.  Ovo æe
     34652+     prikazati sadržaj direktorijuma, kao da ste na komandnom promptu.
     34653+     Otkucajte   :!dir   ako   :!ls   ne radi.
     34654+
     34655+NAPOMENA:  Na ovaj naèin moguæe je izvršiti bilo koju spoljašnju komandu,
     34656+           zajedno sa njenim argumentima.
     34657+
     34658+NAPOMENA:  Sve  :  komande se izvršavaju pošto pritisnete <ENTER> .
     34659+          U daljem tekstu to neæemo uvek napominjati.
     34660+
     34661+
     34662+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34663+                  Lekcija 5.2: VIŠE O SNIMANJU FAJLOVA
     34664+
     34665+           ** Za snimanje promena, otkucajte  :w IME_FAJLA . **
     34666+
     34667+  1. Otkucajte  :!dir  ili  :!ls  za pregled sadržaja direktorijuma.
     34668+     Veæ znate da morate pritisnuti <ENTER> posle toga.
     34669+
     34670+  2. Izaberite ime fajla koji još ne postoji, npr. TEST.
     34671+
     34672+  3. Otkucajte:         :w TEST   (gde je TEST ime koje ste izabrali.)
     34673+
     34674+  4. Time æete snimiti ceo fajl (Vim Tutor) pod imenom TEST.
     34675+     Za proveru, otkucajte opet  :!dir  ili  :!ls za pregled
     34676+     sadržaja direktorijuma.
     34677+
     34678+NAPOMENA:  Ako biste napustili Vim i ponovo ga pokrenuli sa vim TEST ,
     34679+           tekst bi bio taèna kopija ovog fajla u trenutku kad ste
     34680+          ga snimili.
     34681+
     34682+  5. Izbrišite fajl tako što æete otkucati (MS-DOS):   :!del TEST
     34683+                                        ili (Unix):    :!rm TEST
     34684+
     34685+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34686+                 Lekcija 5.3: SNIMANJE OZNAÈENOG TEKSTA
     34687+
     34688+
     34689+   ** Da biste snimili deo teksta, otkucajte  v  pokret  :w IME_FAJLA **
     34690+
     34691+  1. Pomerite kursor na ovu liniju.
     34692+
     34693+  2. Pritisnite  v  i pomerite kursor pet redova ispod.  Primetite da je
     34694+     tekst oznaèen inverzno.
     34695+
     34696+  3. Pritisnite  : .  Na dnu ekrana pojaviæe se  :'<,'> .
     34697+
     34698+  4. Otkucajte  w TEST  , gde je TEST ime fajla koji još ne postoji.
     34699+     Proverite da zaista piše  :'<,'>w TEST  pre nego što pritisnete <ENTER>.
     34700+
     34701+  5. Vim æe snimiti oznaèeni tekst u TEST.  Proverite sa  :!dir  ili  !ls .
     34702+     Nemojte još brisati fajl!  Koristiæemo ga u narednoj lekciji.
     34703+
     34704+NAPOMENA:  Komanda  v  zapoèinje vizuelno oznaèavanje.  Možete pomerati kursor
     34705+           i tako menjati velièinu oznaèenog teksta.  Onda možete upotrebiti
     34706+           operatore nad tekstom.  Na primer,  d  æe izbrisati oznaèeni tekst.
     34707+
     34708+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34709+                  Lekcija 5.4: UÈITAVANJE FAJLA U TEKST
     34710+
     34711+
     34712+       ** Za ubacivanje sadržaja fajla, otkucajte  :r IME_FAJLA  **
     34713+
     34714+  1. Postavite kursor iznad ove linije.
     34715+
     34716+NAPOMENA:  Pošto izvršite 2. korak videæete tekst iz lekcije 5.3.  Tada
     34717+           pomerite kursor DOLE da biste ponovo videli ovu lekciju.
     34718+
     34719+  2. Uèitajte fajl TEST koristeæi komandu  :r TEST  gde je TEST ime fajla
     34720+     koje ste koristili u prethodnoj lekciji.  Sadržaj uèitanog fajla je
     34721+     ubaèen ispod kursora.
     34722+
     34723+  3. Da biste proverili da je fajl uèitan, vratite kursor unazad i
     34724+     primetite dve kopije lekcije 5.3, originalnu i onu iz fajla.
     34725+
     34726+NAPOMENA:  Takoðe možete uèitati izlaz spoljašnje komande.  Na primer,
     34727+          :r !ls  æe uèitati izlaz komande  ls  i postaviti ga ispod
     34728+           kursora.
     34729+
     34730+
     34731+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34732+                             REZIME lekcije 5
     34733+
     34734+
     34735+  1.  :!komanda  izvršava spoljašnju komandu.
     34736+
     34737+      Korisni primeri:
     34738+        (MS-DOS)         (Unix)
     34739+         :!dir            :!ls            -  pregled sadržaja direktorijuma.
     34740+         :!del FAJL       :!rm FAJL       -  briše fajl FAJL.
     34741+
     34742+  2.  :w FAJL  zapisuje trenutni tekst na disk pod imenom FAJL.
     34743+
     34744+  3.  v  pokret  :w IME_FAJLA  snima vizuelno oznaèene redove u fajl
     34745+      IME_FAJLA.
     34746+
     34747+  4.  :r IME_FAJLA  uèitava fajl IME_FAJLA sa diska i stavlja
     34748+      njegov sadržaj ispod kursora.
     34749+
     34750+  5.  :r !dir  uèitava izlaz komande dir i postavlja ga ispod kursora.
     34751+
     34752+
     34753+
     34754+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34755+                        Lekcija 6.1: KOMANDA OTVORI
     34756+
     34757+
     34758+       ** Pritisnite  o  da biste otvorili red ispod kursora
     34759+          i prešli u Insert mod. **
     34760+
     34761+  1. Pomerite kursor na sledeæi red oznaèen sa --->.
     34762+
     34763+  2. Otkucajte malo  o  da biste otvorili novi red ISPOD kursora
     34764+     i prešli u Insert mod.
     34765+
     34766+  3. Otkucajte neki tekst i onda pritisnite <ESC> da biste izašli
     34767+     iz Insert moda.
     34768+
     34769+---> Kad pritisnete  o  kursor prelazi u novootvoreni red u Insert modu.
     34770+
     34771+  4. Za otvaranje reda IZNAD kursora, umesto malog otkucajte veliko O .
     34772+     Isprobajte na donjem redu oznaèenom sa --->.
     34773+
     34774+---> Otvorite red iznad ovog kucanjem velikog  O  dok je kursor u ovom redu.
     34775+
     34776+
     34777+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34778+                       Lekcija 6.2: KOMANDA DODAJ
     34779+
     34780+
     34781+            ** Otkucajte  a  za dodavanje teksta IZA kursora. **
     34782+
     34783+  1. Pomerite kursor na poèetak sledeæeg reda oznaèenog sa --->.
     34784
     34785+  2. Kucajte  e  dok kursor ne doðe na kraj reèi  re .
     34786+
     34787+  3. Otkucajte  a  (malo) da biste dodali tekst IZA kursora.
     34788+
     34789+  4. Dopunite reè kao što je u redu ispod.  Pritisnite <ESC> za izlazak
     34790+     iz Insert moda.
     34791+
     34792+  5. Sa  e  preðite na narednu nepotpunu reè i ponovite korake 3 i 4.
     34793
     34794+---> Ovaj re omoguæava ve dodav teksta u nekom redu.
     34795+---> Ovaj red omoguæava vežbanje dodavanja teksta u nekom redu.
     34796+
     34797+NAPOMENA:  Komande a, i, i  A  aktiviraju isti Insert mod, jedina
     34798+           razlika je u poziciji od koje æe se tekst ubacivati.
     34799+
     34800+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34801+                   Lekcija 6.3: DRUGI NAÈIN ZAMENE
     34802+
     34803+
     34804+      ** Otkucajte veliko  R  da biste zamenili više od jednog znaka. **
     34805+
     34806+  1. Pomerite kursor na prvi sledeæi red oznaèen sa --->.
     34807+     Pomerite kursor na poèetak prvog  xxx .
     34808+
     34809+  2. Pritisnite  R  i otkucajte broj koji je red ispod,
     34810+     tako da zameni xxx .
     34811+
     34812+  3. Pritisnite <ESC> za izlazak iz Replace moda.
     34813+     Primetite da je ostatak reda ostao nepromenjen.
     34814+
     34815+  4. Ponovite korake da biste zamenili drugo xxx.
     34816+
     34817+---> Dodavanje 123 na xxx daje xxx.
     34818+---> Dodavanje 123 na 456 daje 579.
     34819+
     34820+NAPOMENA:  Replace mod je kao Insert mod, s tom razlikom što svaki
     34821+           uneti znak briše veæ postojeæi.
     34822+
     34823+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34824+               Lekcija 6.4: KOPIRANJE I LEPLJENJE TEKSTA
     34825+
     34826+
     34827+    ** Koristite operator  y  za kopiranje a  p  za lepljenje teksta. **
     34828+
     34829+  1. Pomerite kursor na red sa --->  i postavite kursor posle "a)".
     34830
     34831+  2. Aktivirajte Visual mod sa  v  i pomerite kursor sve do ispred "prvi".
     34832
     34833+  3. Pritisnite  y  da biste kopirali oznaèeni tekst u interni bafer.
     34834+
     34835+  4. Pomerite kursor do kraja sledeæeg reda:  j$
     34836+
     34837+  5. Pritisnite  p  da biste zalepili tekst.  Onda otkucajte:  a drugi <ESC> .
     34838+
     34839+  6. Upotrebite Visual mod da oznaèite " red.", kopirajte sa  y , kursor
     34840+     pomerite na kraj sledeæeg reda sa  j$  i tamo zalepite tekst sa  p .
     34841+
     34842+--->  a) ovo je prvi red.
     34843+      b)
     34844+
     34845+NAPOMENA:  takoðe možete koristiti  y  kao operator;  yw  kopira jednu reè.
     34846+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34847+                   Lekcija 6.5: POSTAVLJANJE OPCIJA
     34848+
     34849+
     34850+ ** Postavite opciju tako da traženje i zamena ignorišu velièinu slova **
     34851+
     34852+  1. Potražite reè 'razlika':  /razlika <ENTER>
     34853+     Ponovite nekoliko puta pritiskom na  n .
     34854+
     34855+  2. Aktivirajte opciju 'ic' (Ignore case):  :set ic
     34856+
     34857+  3. Ponovo potražite reè 'razlika' pritiskom na  n
     34858+     Primetite da su sada pronaðeni i RAZLIKA i Razlika.
     34859+
     34860+  4. Aktivirajte opcije 'hlsearch' i 'incsearch':  :set hls is
     34861+
     34862+  5. Ponovo otkucajte komandu traženja i uoèite razlike:  /razlika <ENTER>
     34863+
     34864+  6. Za deaktiviranje opcije  ic  kucajte:  :set noic
     34865+
     34866+NAPOMENA:  Za neoznaèavanje pronaðenih izraza otkucajte:  :nohlsearch
     34867+NAPOMENA:  Ako želite da ne razlikujete velièinu slova u samo jednoj komandi
     34868+          traženja, dodajte  \c  u izraz:  /razlika\c <ENTER>
     34869+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34870+                             REZIME lekcije 6
     34871+
     34872+  1. Pritisnite  o  za otvaranje reda ISPOD kursora i prelazak u Insert mod.
     34873+     Pritisnite  O  za otvaranje reda IZNAD kursora.
     34874+
     34875+  2. Pritisnite  a  za unos teksta IZA kursora.
     34876+     Pritisnite  A  za unos teksta na kraju reda.
     34877+
     34878+  3. Komanda  e  pomera kursor na kraj reèi.
     34879+
     34880+  4. Operator  y  kopira tekst,  p  ga lepi.
     34881+
     34882+  5. Kucanje velikog  R  aktivira Replace mod dok ne pritisnete <ESC> .
     34883+
     34884+  6. Kucanje ":set xxx" aktivira opciju "xxx".  Neke opcije su:
     34885+       'ic' 'ignorecase'       ne razlikuje velika/mala slova pri traženju
     34886+       'is' 'incsearch'        prikazuje pronaðen tekst dok kucate izraz
     34887+       'hls' 'hlsearch'        oznaèava inverzno sve pronaðene izraze
     34888+     Možete koristite dugo ili kratko ime opcije.
     34889+
     34890+  7. Ispred imena opcije stavite "no" da je deaktivirate:  :set noic
     34891+
     34892+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34893+                      Lekcija 7.1: DOBIJANJE POMOÆI
     34894+
     34895+
     34896+                  ** Koristite on-line sistem za pomoæ **
     34897+
     34898+  Vim ima detaljan on-line sistem za pomoæ.  Za poèetak, pokušajte nešto
     34899+  od sledeæeg:
     34900+       - pritisnite taster <HELP> (ako ga imate na tastaturi)
     34901+       - pritisnite taster <F1> (ako ga imate na tastaturi)
     34902+       - otkucajte  :help <ENTER>
     34903+
     34904+  Proèitajte tekst u prozoru pomoæi da biste nauèili pomoæ radi.
     34905+  Kucanjem  CTRL-W CTRL-W  prelazite iz jednog prozora u drugi.
     34906+  Otkucajte  :q <ENTER>  da zatvorite prozor pomoæi.
     34907+
     34908+  Pomoæ o praktièno bilo kojoj temi možete dobiti dodavanjem argumenta
     34909+  komandi ":help".  Pokušajte ovo (ne zaboravite <ENTER> na kraju):
     34910+
     34911+       :help w
     34912+       :help c_CTRL-D
     34913+       :help insert-index
     34914+       :help user-manual
     34915+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34916+               Lekcija 7.2: PRAVLJENJE STARTNOG SKRIPTA
     34917+
     34918+
     34919+                  ** Aktivirajte moguænosti editora **
     34920+
     34921+  Vim ima mnogo više moguænosti nego Vi, ali veæina nije automatski
     34922+  aktivirana.  Za dodatne moguænosti napravite "vimrc" fajl.
     34923+
     34924+  1. Otvorite "vimrc" fajl.  Ovo zavisi od vašeg sistema:
     34925+       :e ~/.vimrc             za Unix
     34926+       :e $VIM/_vimrc          za MS-Windows
     34927+
     34928+  2. Onda uèitajte primer sadržaja "vimrc" fajla:
     34929+       :r $VIMRUNTIME/vimrc_example.vim
     34930+
     34931+  3. Snimite fajl sa:
     34932+       :w
     34933+
     34934+  Sledeæi put kada pokrenete Vim, bojenje sintakse teksta biæe
     34935+  aktivirano. Sva svoja podešavanja možete dodati u "vimrc" fajl.
     34936+  Za više informacija otkucajte  :help vimrc-intro
     34937+
     34938+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34939+                    Lekcija 7.3: AUTOMATSKO DOVRŠAVANJE
     34940+
     34941+
     34942+       ** Dovršavanje komandne linije sa CTRL-D i <TAB> **
     34943+
     34944+  1. Podesite Vim da ne bude u Vi-kompatibilnom modu:  :set nocp
     34945+
     34946+  2. Pogledajte koji fajlovi postoje u direktorijumu:  :!ls  ili  :!dir
     34947+
     34948+  3. Otkucajte poèetak komande:  :e
     34949+
     34950+  4. Otkucajte  CTRL-D  i Vim æe prikazati spisak komandi koje poèinju sa "e".
     34951+
     34952+  5. Pritisnite <TAB>  i Vim æe dopuniti ime komande u ":edit".
     34953+
     34954+  6. Dodajte razmak i poèetak imena postojeæeg fajla:  :edit FA
     34955+
     34956+  7. Pritisnite <TAB>.  Vim æe dopuniti ime fajla (ako je jedinstveno).
     34957+
     34958+NAPOMENA:  Moguæe je dopuniti mnoge komande.  Samo probajte CTRL-D i <TAB>.
     34959+           Naroèito je korisno za  :help  komande.
     34960+
     34961+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34962+                             REZIME lekcije 7
     34963+
     34964+
     34965+  1. Otkucajte  :help  ili pritisnite <F1> ili <Help>  za pomoæ.
     34966+
     34967+  2. Otkucajte  :help komanda  biste dobili pomoæ za tu komandu.
     34968+
     34969+  3. Otkucajte  CTRL-W CTRL-W  za prelazak u drugi prozor.
     34970+
     34971+  4. Otkucajte  :q  da zatvorite prozor pomoæi.
     34972+
     34973+  5. Napravite vimrc startni skript za aktiviranje podešavanja koja
     34974+     vam odgovaraju.
     34975+
     34976+  6. Dok kucate neku od  :  komandi, pritisnite CTRL-D da biste videli moguæe
     34977+     vrednosti.  Pritisnite <TAB> da odaberete jednu od njih.
     34978+
     34979+
     34980+
     34981+
     34982+
     34983+
     34984+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     34985+  Ovim je priruènik završen.  Njegov cilj je bio kratak pregled Vim editora,
     34986+  koliko da omoguæi njegovo relativno jednostavno korišæenje.  Priruènik nije
     34987+  potpun, jer Vim ima mnogo više komandi.  Kao sledeæe, proèitajte priruènik:
     34988+  ":help user-manual".
     34989+
     34990+  Za dalje èitanje i uèenje, preporuèujemo knjigu:
     34991+       Vim - Vi Improved - by Steve Oualline
     34992+       Izdavaè: New Riders
     34993+  Prva knjiga potpuno posveæena Vim-u.  Naroèito korisna za poèetnike.
     34994+  Ima mnoštvo primera i slika.
     34995+  Vidite http://iccf-holland.org/click5.html
     34996+
     34997+  Sledeæa knjiga je starija i više govori o Vi-u nego o Vim-u, ali je takoðe
     34998+  preporuèujemo:
     34999+       Learning the Vi Editor - by Linda Lamb
     35000+       Izdavaè: O'Reilly & Associates Inc.
     35001+  Dobra knjiga iz koje možete saznati skoro sve što možete raditi u Vi-ju.
     35002+  Šesto izdanje ima i informacija o Vim-u.
     35003+
     35004+  Ovaj priruènik su napisali: Michael C. Pierce i Robert K. Ware,
     35005+  Colorado School of Mines koristeæi ideje Charlesa Smitha,
     35006+  Colorado State University.  E-mail: bware@mines.colorado.edu.
     35007+
     35008+  Prilagoðavanje za Vim uradio je Bram Moolenaar.
     35009+
     35010+  Prevod na srpski: Ivan Nejgebauer <ian@uns.ac.rs>
     35011+  Verzija 1.0, maj/juni 2014.
     35012+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35013diff -Naur vim74.orig/runtime/tutor/tutor.sr.utf-8 vim74/runtime/tutor/tutor.sr.utf-8
     35014--- vim74.orig/runtime/tutor/tutor.sr.utf-8     1970-01-01 00:00:00.000000000 +0000
     35015+++ vim74/runtime/tutor/tutor.sr.utf-8  2014-07-21 23:33:37.576805972 +0000
     35016@@ -0,0 +1,971 @@
     35017+===============================================================================
     35018+=    D o b r o d o Å¡ l i   u   VIM   p r i r u č n i k  -    Verzija 1.7      =
     35019+===============================================================================
     35020+
     35021+     Vim je moćan editor sa mnogo komandi, suviÅ¡e da bismo ih ovde sve
     35022+     opisali.  Priručnik je zamiÅ¡ljen da opiÅ¡e dovoljno komandi da biste
     35023+     mogli lagodno da koristite Vim kao editor opÅ¡te namene.
     35024+
     35025+     PribliÅŸno vreme potrebno za uspeÅ¡an zavrÅ¡etak priručnika je između
     35026+     25 i 30 minuta, u zavisnosti od vremena potroÅ¡enog na veÅŸbu.
     35027+
     35028+     UPOZORENJE:
     35029+     Komande u lekcijama će menjati tekst.  Iskopirajte ovaj fajl i
     35030+     veÅŸbajte na kopiji (ako ste pokrenuli "vimtutor" ovo je već kopija).
     35031+
     35032+     VaÅŸno je upamtiti da je ovaj priručnik zamiÅ¡ljen za aktivnu veÅŸbu.
     35033+     To znači da morate upotrebljavati komande o kojima čitate da biste
     35034+     ih naučili.  Ako samo čitate tekst, zaboravićete komande!
     35035+
     35036+     Ako je Caps Lock uključen ISKLJUČITE ga.  Pritisnite taster  j  dovoljno
     35037+     puta da lekcija 1.1 cela stane na ekran.
     35038+
     35039+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35040+                     Lekcija 1.1:  POMERANJE KURSORA
     35041+
     35042+
     35043+ ** Za pomeranje kursora, pritiskajte tastere h,j,k,l kako je prikazano **
     35044+            ^
     35045+            k              Savet: h je s leve strane i pomera kursor u levo.
     35046+       < h      l >               l je s desne strane i pomera kursor u desno.
     35047+            j                     j izgleda kao strelica naniÅŸe.
     35048+            v
     35049+  1. Pomerajte kursor po ekranu dok se ne naviknete na komande.
     35050+
     35051+  2. Pritisnite taster (j) dok ne počne da se ponavlja.
     35052+     Sada znate kako da dođete do naredne lekcije.
     35053+
     35054+  3. Koristeći taster j pređite na lekciju 1.2.
     35055+
     35056+NAPOMENA:  Ako niste sigurni Å¡ta ste zapravo pritisnuli, pritisnite <ESC>
     35057+           za prelazak u Normal mod i pokuÅ¡ajte ponovo.
     35058+
     35059+NAPOMENA:  Strelice takođe pomeraju kursor, ali korišćenje tastera hjkl je
     35060+           znatno brÅŸe, kad se jednom naviknete na njih.  Zaista!
     35061+
     35062+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35063+                          Lekcija 1.2: IZLAZAK IZ VIM-a
     35064+
     35065+
     35066+  !! UPOZORENJE: Pre izvođenja bilo kog koraka, pročitajte celu lekciju!!
     35067+
     35068+  1. Pritisnite <ESC> (editor je sada u Normal modu).
     35069+
     35070+  2. Otkucajte:        :q! <ENTER>.
     35071+     Ovime se izlazi iz editora, sa GUBITKOM svih izmena.
     35072+
     35073+  3. Kada se pojavi komandni prompt, unesite komandu koja je pokrenula
     35074+     ovaj priručnik:          vimtutor <ENTER>
     35075+
     35076+  4. Ako ste upamtili ove korake, izvrÅ¡ite ih redom od 1 do 3 da biste
     35077+     izaÅ¡li iz editora i ponovo ga pokrenuli.
     35078+
     35079+NAPOMENA:  :q! <ENTER>  poniÅ¡tava sve izmene koje ste napravili.
     35080+           U narednim lekcijama naučićete kako da sačuvate izmene.
     35081+
     35082+  5. Pomerite kursor na lekciju 1.3.
     35083+
     35084+
     35085+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35086+                   Lekcija 1.3: IZMENA TEKSTA - BRISANJE
     35087+
     35088+
     35089+             ** Pritisnite  x  za brisanje znaka pod kursorom. **
     35090+
     35091+  1. Pomerite kursor na red označen sa --->.
     35092+
     35093+  2. Da biste ispravili greÅ¡ke, pomerajte kursor dok se
     35094+     ne nađe na slovu koje treba izbrisati.
     35095+
     35096+  3. Pritisnite taster  x  da izbriÅ¡ete neÅŸeljeno slovo.
     35097+
     35098+  4. Ponavljajte korake od 2 do 4 dok ne ispravite sve greÅ¡ke.
     35099+
     35100+---> RRRibaa riibi grizzze rrreepp.
     35101+
     35102+  5. Kad ispravite red, pređite na lekciju 1.4.
     35103+
     35104+NAPOMENA:  Dok koristite priručnik, nemojte učiti komande napamet,
     35105+           već veÅŸbajte njihovu primenu.
     35106+
     35107+
     35108+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35109+                Lekcija 1.4: IZMENA TEKSTA - UBACIVANJE
     35110+
     35111+
     35112+         ** Pritisnite  i  za ubacivanje teksta ispred kursora. **
     35113+
     35114+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35115+
     35116+  2. Da biste tekst prvog reda izjednačili s tekstom drugog, namestite
     35117+     kursor na prvi znak POSLE kog ćete ubaciti potreban tekst.
     35118+
     35119+  3. Pritisnite  i  pa unesite potrebne dopune.
     35120+
     35121+  4. Po ispravci svake greÅ¡ke pritisnite <ESC> da se vratite u Normal mod.
     35122+     Ponovite korake od 2 do 4 da biste ispravili celu rečenicu.
     35123+
     35124+---> Do teka neoje v red.
     35125+---> Deo teksta nedostaje iz ovog reda.
     35126+
     35127+  5. Pređite na sledeću lekciju.
     35128+
     35129+
     35130+
     35131+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35132+                   Lekcija 1.5: IZMENA TEKSTA - DODAVANJE
     35133+
     35134+
     35135+                  ** Pritisnite  A  za dodavanje teksta. **
     35136+
     35137+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35138+     Nije vaÅŸno gde se nalazi kursor u tom redu.
     35139+
     35140+  2. Pritisnite  A  i unesite dodatni tekst.
     35141+
     35142+  3. PoÅ¡to ste dodali tekst, pritisnite <ESC> za povratak u
     35143+     Normal mod.
     35144+
     35145+  4. Pomerite kursor na drugi red označen sa ---> i ponavljajte
     35146+     korake 2 i 3 dok ne ispravite tekst.
     35147+
     35148+---> Deo teksta nedostaje u
     35149+     Deo teksta nedostaje u ovom redu.
     35150+---> Deo teksta nedostaje
     35151+     Deo teksta nedostaje i ovde.
     35152+
     35153+  5. Pređite na lekciju 1.6.
     35154+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35155+                    Lekcija 1.6: IZMENA FAJLA
     35156+
     35157+
     35158+     ** Upotrebite  :wq  za snimanje teksta i izlazak iz editora. **
     35159+
     35160+  !! UPOZORENJE: Pre izvođenja bilo kog koraka, pročitajte celu lekciju!!
     35161+
     35162+  1. Izađite iz editora kao u lekciji 1.2:  :q!
     35163+
     35164+  2. Na komandnom promptu unesite sledeću komandu:  vim tutor <ENTER>
     35165+     'vim' je komanda za pokretanja Vim editora, 'tutor' je ime fajla koji
     35166+     ÅŸelite da menjate.  Koristite fajl koji imate pravo da menjate.
     35167+
     35168+  3. Ubacujte i briÅ¡ite tekst kao u prethodnim lekcijama.
     35169+
     35170+  4. Snimite izmenjeni tekst i izađite iz Vim-a:  :wq <ENTER>
     35171+
     35172+  5. Ponovo pokrenite vimtutor i pročitajte rezime koji sledi.
     35173+
     35174+  6. PoÅ¡to pročitate korake iznad i u potpunosti ih razumete:
     35175+     izvrÅ¡ite ih.
     35176+
     35177+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35178+                             REZIME lekcije 1
     35179+
     35180+
     35181+  1. Kursor se pomera strelicama ili pomoću tastera hjkl .
     35182+       h (levo)        j (dole)        k (gore)        l (desno)
     35183+
     35184+  2. Za pokretanje Vim-a iz shell-a:  vim IME_FAJLA <ENTER>
     35185+
     35186+  3. Izlaz:    <ESC>   :q! <ENTER>     sve promene su izgubljene.
     35187+       ILI:    <ESC>   :wq <ENTER>     promene su sačuvane.
     35188+
     35189+  4. Brisanje znaka na kome se nalazi kursor:  x
     35190+
     35191+  5. Ubacivanja ili dodavanje teksta:
     35192+        i   unesite tekst <ESC>        unos ispred kursora
     35193+        A   unesite tekst <ESC>        dodavanje na kraju reda
     35194+
     35195+NAPOMENA:  Pritiskom na <ESC> prebacujete Vim u Normal mod i
     35196+           prekidate neÅŸeljenu ili delimično izvrÅ¡enu komandu.
     35197+
     35198+Nastavite sa lekcijom 2.
     35199+
     35200+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35201+                       Lekcija 2.1: NAREDBE BRISANJA
     35202+
     35203+
     35204+                ** Otkucajte  dw  za brisanje reči. **
     35205+
     35206+  1. Pritisnite  <ESC>  da biste bili sigurni da ste u Normal modu.
     35207+
     35208+  2. Pomerite kursor na red označen sa --->.
     35209+
     35210+  3. Pomerite kursor na početak reči koju treba izbrisati.
     35211+
     35212+  4. Otkucajte  dw  da biste uklonili reč.
     35213+
     35214+NAPOMENA:  Slovo  d  će se pojaviti na dnu ekrana kad ga otkucate.  Vim čeka
     35215+          da otkucate  w .  Ako je prikazano neko drugo slovo, pogreÅ¡ili ste u
     35216+          kucanju; pritisnite <ESC> i pokuÅ¡ajte ponovo.  (Ako se ne pojavi
     35217+          niÅ¡ta, moÅŸda je isključena opcija 'showcmd': vidi lekciju 6.5.)
     35218+
     35219+---> Neke reči smeÅ¡no ne pripadaju na papir ovoj rečenici.
     35220+
     35221+  5. Ponavljajte korake 3 i 4 dok ne ispravite rečenicu, pa
     35222+     pređite na lekciju 2.2.
     35223+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35224+                     Lekcija 2.2: JOÅ  BRISANJA
     35225+
     35226+
     35227+       ** Otkucajte  d$  za brisanje znakova do kraja reda. **
     35228+
     35229+  1. Pritisnite  <ESC>  da biste bili sigurni da ste u Normal modu.
     35230+
     35231+  2. Pomerite kursor na red označen sa  --->.
     35232+
     35233+  3. Pomerite kursor do kraja ispravnog dela rečenice
     35234+     (POSLE prve . ).
     35235+
     35236+  4. Otkucajte  d$  za brisanje ostatka reda.
     35237+
     35238+---> Neko je uneo kraj ovog reda dvaput. kraj ovog reda dvaput.
     35239+
     35240+  5. Pređite na lekciju 2.3 za podrobnije objaÅ¡njenje.
     35241+
     35242+
     35243+
     35244+
     35245+
     35246+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35247+             Lekcija 2.3: O OPERATORIMA I POKRETIMA
     35248+
     35249+
     35250+  Mnoge komande za izmenu teksta sastoje se od operatora i pokreta.
     35251+  Oblik komande brisanja sa  d  operatorom je sledeći:
     35252+
     35253+       d   pokret
     35254+
     35255+  Pri čemu je:
     35256+    d      - operator brisanja.
     35257+    pokret - ono na čemu će se operacija izvrÅ¡avati (opisano u nastavku).
     35258+
     35259+  Kratak spisak pokreta:
     35260+    w - sve do početka sledeće reči, NE UKLJUČUJUĆI prvo slovo.
     35261+    e - sve do kraja tekuće reči, UKLJUČUJUĆI poslednje slovo.
     35262+    $ - sve do kraje reda, UKLJUČUJUĆI poslednje slovo.
     35263+
     35264+  Kucanjem  de  brisaće se tekst od kursora do kraja reči.
     35265+
     35266+NAPOMENA:  Pritiskom samo na taster pokreta dok ste u Normal modu, bez
     35267+           operatora, kursor se pomera kao Å¡to je opisano.
     35268+
     35269+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35270+                 Lekcija 2.4: KORIŠĆENJE BROJANJA ZA POKRETE
     35271+
     35272+
     35273+  ** UnoÅ¡enjem nekog broja pre pokreta, pokret se izvrÅ¡ava taj broj puta. **
     35274+
     35275+  1. Pomerite kursor na red označen sa --->.
     35276+
     35277+  2. Otkucajte  2w  da pomerite kursor dve reči napred.
     35278+
     35279+  3. Otkucajte  3e  da pomerite kursor na kraj treće reči napred.
     35280+
     35281+  4. Otkucajte  0  (nulu) da pomerite kursor na početak reda.
     35282+
     35283+  5. Ponovite korake 2 i 3 s nekim drugim brojevima.
     35284+
     35285+---> Rečenica sa rečima po kojoj moÅŸete pomerati kursor.
     35286+
     35287+  6. Pređite na lekciju 2.5.
     35288+
     35289+
     35290+
     35291+
     35292+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35293+             Lekcija 2.5: KORIŠĆENJE BROJANJA ZA VEĆE BRISANJE
     35294+
     35295+
     35296+  ** UnoÅ¡enje nekog broja s operatorom ponavlja operator taj broj puta. **
     35297+
     35298+  U kombinaciji operatora brisanja s pokretima spomenutim iznad
     35299+  moÅŸete uneti broj pre pokreta da biste izbrisali viÅ¡e znakova:
     35300+
     35301+        d   broj   pokret
     35302+
     35303+  1. Pomerite kursor na prvo slovo u reči s VELIKIM SLOVIMA u redu
     35304+     označenom sa --->.
     35305+
     35306+  2. Otkucajte  d2w  da izbriÅ¡ete dve reči sa VELIKIM SLOVIMA
     35307+
     35308+  3. Ponovite korake 1 i 2 sa različitim brojevima da izbriÅ¡ete
     35309+     uzastopne reči sa VELIKIM SLOVIMA korišćenjem samo jedne komande.
     35310+
     35311+---> ovaj ABCČĆ DĐE red FGHI JK LMN OP s rečima je RSÅ  TUVZÅœ ispravljen.
     35312+
     35313+
     35314+
     35315+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35316+                    Lekcija 2.6: OPERACIJE NAD REDOVIMA
     35317+
     35318+
     35319+              ** Otkucajte  dd  za brisanje celog reda. **
     35320+
     35321+  Zbog učestalosti brisanja celih redova, autori Vi-ja odlučili su da
     35322+  je lakÅ¡e brisati redove ako se otkuca  d  dvaput.
     35323+
     35324+  1. Pomerite kursor na drugi red u donjoj strofi.
     35325+  2. Otkucajte  dd  da ga izbriÅ¡ete.
     35326+  3. Pomerite kursor na četvrti red.
     35327+  4. Otkucajte   2dd   da biste izbrisali dva reda.
     35328+
     35329+--->  1)  Sedlo mi je od marame,
     35330+--->  2)  blato na sve strane,
     35331+--->  3)  uzda od kanapa,
     35332+--->  4)  auto mi je ovde,
     35333+--->  5)  satovi pokazuju vreme,
     35334+--->  6)  a bič mi je od očina
     35335+--->  7)  prebijena Å¡tapa.
     35336+
     35337+
     35338+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35339+                     Lekcija 2.7: PONIÅ TAVANJE PROMENA
     35340+
     35341+
     35342+  ** Pritisnite  u  za poniÅ¡tavanje poslednje komande,  U  za ceo red. **
     35343+
     35344+  1. Pomerite kursor na red označen sa ---> i postavite ga na mesto
     35345+     prve greÅ¡ke.
     35346+  2. Otkucajte  x  da izbriÅ¡ete prvi neÅŸeljeni znak.
     35347+  3. Otkucajte  u  da poniÅ¡tite poslednju izvrÅ¡enu komandu.
     35348+  4. Sad ispravite sve greÅ¡ke u redu koristeći komandu  x  .
     35349+  5. Otkucajte veliko  U  da biste vratili sadrÅŸaj reda u prvobitno
     35350+     stanje.
     35351+  6. Onda otkucajte  u  nekoliko puta da biste poniÅ¡tili  U
     35352+     i prethodne komande.
     35353+  7. Sad otkucajte CTRL-R (drÅŸeći  CTRL  dok pritiskate R)
     35354+     nekoliko puta da biste vratili izmene (poniÅ¡tili poniÅ¡tavanja).
     35355+
     35356+---> Iiisspravite greÅ¡ke uu ovvom redu ii pooniÅ¡titeee ih.
     35357+
     35358+  8. Ovo su veoma korisne komande.  Pređite na rezime lekcije 2.
     35359+
     35360+
     35361+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35362+                             REZIME lekcije 2
     35363+
     35364+
     35365+  1. Brisanje od kursora do sledeće reči:    dw
     35366+  2. Brisanje od kursora do kraja reda:                d$
     35367+  3. Brisanje celog reda:                      dd
     35368+
     35369+  4. Za ponavljanje pokreta prethodno unesite broj:  2w
     35370+  5. Oblik komande za izmenu:
     35371+               operator   [broj]   pokret
     35372+     gde je:
     35373+       operator - Å¡ta uraditi, recimo  d  za brisanje
     35374+       [broj]   - neobavezan broj ponavljanja pokreta
     35375+       pokret   - kretanje po tekstu na kome se radi,
     35376+                  kao Å¡to je: w (reč), $ (kraj reda), itd.
     35377+
     35378+  6. Pomeranje kursora na početak reda:  0
     35379+
     35380+  7. Za poniÅ¡tavanje prethodnih izmena, pritisnite:   u  (malo u)
     35381+     Za poniÅ¡tavanje svih promena u redu, pritisnite: U  (veliko U)
     35382+     Za vraćanja promena, otkucajte:                  CTRL-R
     35383+
     35384+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35385+                      Lekcija 3.1: KOMANDA POSTAVLJANJA
     35386+
     35387+
     35388+  ** Otkucajte  p  da postavite prethodno izbrisan tekst iza kursora. **
     35389+
     35390+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35391+
     35392+  2. Otkucajte  dd  da izbriÅ¡ete red i smestite ga u Vim registar.
     35393+
     35394+  3. Pomerite kursor na red c), IZNAD mesta gde treba postaviti izbrisan red.
     35395+
     35396+  4. Otkucajte  p  da postavite red ispod kursora.
     35397+
     35398+  5. Ponavljajte korake 2 do 4 da biste postavili sve linije u pravilnom
     35399+     redosledu.
     35400+
     35401+---> d) prebijena Å¡tapa.
     35402+---> b) uzda od kanapa,
     35403+---> c) a bič mi je od očina
     35404+---> a) Sedlo mi je od marame,
     35405+
     35406+
     35407+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35408+                      Lekcija 3.2: KOMANDA ZAMENE
     35409+
     35410+
     35411+      ** Otkucajte  rx  da zamenite znak ispod kursora slovom  x . **
     35412+
     35413+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35414+
     35415+  2. Pomerite kursor tako da se nalazi na prvoj greÅ¡ci.
     35416+
     35417+  3. Otkucajte  r  i onda znak koji treba da tu stoji.
     35418+
     35419+  4. Ponavljajte korake 2 i 3 sve dok prvi red ne bude
     35420+     isti kao drugi.
     35421+
     35422+--->  Kedi ju ovej red ugaÅ¡en, nako je protresao pustaÅ¡ne testere!
     35423+--->  Kada je ovaj red unoÅ¡en, neko je pritiskao pogreÅ¡ne tastere!
     35424+
     35425+  5. Pređite na lekciju 3.2.
     35426+
     35427+NAPOMENA:  Setite se da treba da učite veÅŸbanjem, ne pamćenjem.
     35428+
     35429+
     35430+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35431+                   Lekcija 3.3: OPERATOR IZMENE
     35432+
     35433+
     35434+         ** Za izmenu teksta do kraja reči, otkucajte  ce  .**
     35435+
     35436+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35437+
     35438+  2. Postavite kursor na  a  u  rakdur.
     35439+
     35440+  3. Otkucajte  ce  i ispravite reč (u ovom slučaju otkucajte  ed  ).
     35441+
     35442+  4. Pritisnite <ESC> i pomerite kursor na sledeći znak koji
     35443+     treba ispraviti.
     35444+
     35445+  5. Ponavljajte korake 3 i 4 sve dok prva rečenica ne bude ista
     35446+     kao druga.
     35447+
     35448+---> Ovaj rakdur ima nekoliko rejga koje treflja isprpikati operagrom izmene.
     35449+---> Ovaj red ima nekoliko reči koje treba ispraviti operatorom izmene.
     35450+
     35451+Uočite da  ce  briÅ¡e reč i postavlja editor u Insert mod.
     35452+
     35453+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35454+                Lekcija 3.4: DALJE IZMENE UPOTREBOM c
     35455+
     35456+
     35457+    ** Komanda izmene se koristi sa istim pokretima kao i brisanje. **
     35458+
     35459+  1. Operator izmene se koristi na isti način kao i operator brisanja:
     35460+
     35461+         c    [broj]   pokret
     35462+
     35463+  2. Pokreti su isti, recimo:   w (reč) i  $ (kraj reda).
     35464+
     35465+  3. Pomerite kursor na prvi sledeći red označen sa --->.
     35466+
     35467+  4. Pomerite kursor na prvu greÅ¡ku.
     35468+
     35469+  5. Otkucajte  c$  i unesite ostatak reda tako da bude isti kao
     35470+     drugi red, pa pritisnite <ESC>.
     35471+
     35472+---> Kraj ovog reda treba izmeniti tako da izgleda kao red ispod.
     35473+---> Kraj ovog reda treba ispraviti korišćenjem c$ komande.
     35474+
     35475+NAPOMENA:  Za ispravljanje greÅ¡aka moÅŸete koristiti Backspace .
     35476+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35477+                             REZIME lekcije 3
     35478+
     35479+
     35480+  1. Za postavljanje teksta koji ste upravo izbrisali, pritisnite  p . Ovo
     35481+     postavlja tekst IZA kursora (ako je bio izbrisan jedan ili viÅ¡e redova
     35482+     sadrÅŸaj će doći na red ispod kursora).
     35483+
     35484+  2. Za zamenu znaka na kome se nalazi kursor, pritisnite  r  i onda
     35485+     ÅŸeljeni znak.
     35486+
     35487+  3. Operator izmene dozvoljava promenu teksta od kursora do pozicije gde
     35488+     se zavrÅ¡ava pokret.  Primera radi, kucajte  ce  za izmenu od kursora do
     35489+     kraja reči, ili  c$  za izmenu od kursora do kraja reda.
     35490+
     35491+  4. Oblik operacije izmene je:
     35492+
     35493+        c   [broj]   pokret
     35494+
     35495+Pređite na narednu lekciju.
     35496+
     35497+
     35498+
     35499+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35500+             Lekcija 4.1: POZICIJA KURSORA I STATUS FAJLA
     35501+
     35502+  ** Pritisnite CTRL-G za prikaz pozicije kursora u tekstu i status fajla.
     35503+     Pritisnite  G  za pomeranje kursora na neki red u tekstu. **
     35504+
     35505+NAPOMENA:  Pročitajte celu lekciju pre izvođenja bilo kog koraka!!
     35506+
     35507+  1. DrÅŸite taster CTRL i pritisnite  g .  Ovo zovemo CTRL-G.
     35508+     Editor će na dnu ekrana ispisati poruku sa imenom fajla i pozicijom
     35509+     kursora u tekstu.  Zapamtite broj reda za 3. korak.
     35510+
     35511+NAPOMENA:  U donjem desnom uglu moÅŸe se videti poziciju kursora ako je
     35512+           uključena opcija 'ruler' (vidi  :help ruler  ili lekciju 6.5.)
     35513+
     35514+  2. Pritisnite  G  za pomeranje kursora na kraj teksta.
     35515+     Pritisnite  1G  ili  gg  za pomranje kursora na početak teksta.
     35516+
     35517+  3. Otkucajte broj reda na kome ste malopre bili i onda  G .  Kursor
     35518+     Ä‡e se vratiti na red na kome je bio kad ste otkucali CTRL-G.
     35519+
     35520+  4. Ako ste spremni, izvrÅ¡ite korake od 1 do 3.
     35521+
     35522+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35523+                   Lekcija 4.2: KOMANDE PRETRAÅœIVANJA
     35524+
     35525+       ** Otkucajte  /  i onda izraz koji ÅŸelite da potraÅŸite. **
     35526+
     35527+  1. U Normal modu otkucajte znak  / .  Primietite da se znak pojavio
     35528+     zajedno sa kursorom na dnu ekrana kao i kod komande  : .
     35529+
     35530+  2. Sada otkucajte 'grrreÅ¡ka' <ENTER>.  (Bez razmaka i navodnika.)
     35531+     To je reč koju traÅŸite.
     35532+
     35533+  3. Za ponovno traÅŸenje istog izraza, otkucajte  n .
     35534+     Za traÅŸenje istog izraza u suprotnom smeru, otkucajte  N .
     35535+
     35536+  4. Za traÅŸenje izraza unatrag, koristite  ?  umesto  / .
     35537+
     35538+  5. Za povratak na prethodnu poziciju otkucajte CTRL-O (drÅŸite CTRL dok
     35539+     pritiskate O ).  Ponavljajte za ranije pozicije.  CTRL-I ide napred.
     35540+
     35541+---> "grrreÅ¡ka" je pogreÅ¡no; umesto grrreÅ¡ka treba da stoji greÅ¡ka.
     35542+
     35543+NAPOMENA:  Ako pretraga dođe do kraja teksta traÅŸenje će se nastaviti od
     35544+          njegovog početka osim ako je opcija 'wrapscan' isključena.
     35545+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35546+                 Lekcija 4.3: TRAÅœENJE PARA ZAGRADE
     35547+
     35548+
     35549+       ** Otkucajte  %  za nalaÅŸenje para ), ] ili } . **
     35550+
     35551+  1. Postavite kursor na bilo koju od  ( ,  [  ili  {
     35552+     otvorenih zagrada u redu označenom sa --->.
     35553+
     35554+  2. Otkucajte znak  % .
     35555+
     35556+  3. Kursor će se pomeriti na odgovarajuću zatvorenu zagradu.
     35557+
     35558+  4. Otkucajte  %  da pomerite kursor na prvu zagradu u paru.
     35559+
     35560+      5. Pomerite kursor na neku od (,),[,],{ ili } i ponovite komandu  % .
     35561+
     35562+---> Red ( testiranja običnih ( [ uglastih ] i { vitičastih } zagrada.))
     35563+
     35564+
     35565+NAPOMENA:  Vrlo korisno u ispravljanju koda sa rasparenim zagradama!
     35566+
     35567+
     35568+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35569+                     Lekcija 4.4: KOMANDA ZAMENE
     35570+
     35571+
     35572+       ** Otkucajte  :s/staro/novo/g  da zamenite 'staro' za 'novo'. **
     35573+
     35574+  1. Pomerite kursor na red označen sa --->.
     35575+
     35576+  2. Otkucajte  :s/rdi/ri/ <ENTER> .  Primetite da ova komanda zamenjuje
     35577+     samo prvo "rdi" u redu.
     35578+
     35579+  3. Otkucajte  :s/rdi/ri/g .  Dodavanje opcije  g  znači da će se komanda
     35580+     izvrÅ¡iti u celom redu, zamenom svih pojava niza "rdi".
     35581+
     35582+---> rdiba rdibi grdize rep.
     35583+
     35584+  4. Za zamenu svih izraza između neka dva reda,
     35585+     otkucajte :#,#s/staro/novo/g   gde su #,# krajnji brojevi redova u opsegu
     35586+                                    u kome će se obaviti zamena.
     35587+     Otkucajte :%s/staro/novo/g     za zamenu svih izraza u celom tekstu.
     35588+     Otkucajte :%s/staro/novo/gc    za nalaÅŸenje svih izraza u tekstu i
     35589+                                   potvrdu zamene.
     35590+
     35591+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35592+                             REZIME lekcije 4
     35593+
     35594+
     35595+  1. CTRL-G  prikazuje poziciju kursora u tekstu i status fajla.
     35596+             G  pomera kursor na kraj teksta.
     35597+     broj    G  pomera kursor na navedeni red.
     35598+            gg  pomera kursor na prvi red teksta.
     35599+
     35600+  2. Kucanjem  /  sa izrazom taj izraz se traÅŸi UNAPRED.
     35601+     Kucanjem  ?  sa izrazom taj izraz se traÅŸi UNAZAD.
     35602+     Posle komande traÅŸenja koristite  n  za nalaÅŸenje izraza u istom
     35603+     smeru, a  N  za nalaÅŸenje u suprotnom smeru.
     35604+     CTRL-O vraća kursor na prethodnu poziciju, a CTRL-I na narednu.
     35605+
     35606+  3. Kucanjem  %  kad je kursor na zagradi on se pomera na njen par.
     35607+
     35608+  4. Za zamenu prvog izraza staro za izraz novo            :s/staro/novo/
     35609+     Za zamenu svih izraza u celom redu                    :s/staro/novo/g
     35610+     Za zamenu svih izraza u opsegu linija #,#             :#,#s/staro/novo/g
     35611+     Za zamenu u celom tekstu                              :%s/staro/novo/g
     35612+     Za potvrdu svake zamene dodajte 'c'                  :%s/staro/novo/gc
     35613+
     35614+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35615+               Lekcija 5.1: IZVRÅ AVANJE SPOLJAÅ NJIH KOMANDI
     35616+
     35617+
     35618+  ** Otkucajte  :!  pa spoljaÅ¡nju komandu koju ÅŸelite da izvrÅ¡ite. **
     35619+
     35620+  1. Otkucajte poznatu komandu  :  da biste namestili kursor na dno
     35621+     ekrana.  Time omogućavate unos komande u komandnoj liniji editora.
     35622+
     35623+  2. Otkucajte znak  !  (uzvičnik).  Ovime omogućavate
     35624+     izvrÅ¡avanje bilo koje spoljaÅ¡nje komande.
     35625+
     35626+  3. Kao primer otkucajte   ls   posle ! i pritisnite <ENTER>.  Ovo će
     35627+     prikazati sadrÅŸaj direktorijuma, kao da ste na komandnom promptu.
     35628+     Otkucajte   :!dir   ako   :!ls   ne radi.
     35629+
     35630+NAPOMENA:  Na ovaj način moguće je izvrÅ¡iti bilo koju spoljaÅ¡nju komandu,
     35631+           zajedno sa njenim argumentima.
     35632+
     35633+NAPOMENA:  Sve  :  komande se izvrÅ¡avaju poÅ¡to pritisnete <ENTER> .
     35634+          U daljem tekstu to nećemo uvek napominjati.
     35635+
     35636+
     35637+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35638+                  Lekcija 5.2: VIÅ E O SNIMANJU FAJLOVA
     35639+
     35640+           ** Za snimanje promena, otkucajte  :w IME_FAJLA . **
     35641+
     35642+  1. Otkucajte  :!dir  ili  :!ls  za pregled sadrÅŸaja direktorijuma.
     35643+     Već znate da morate pritisnuti <ENTER> posle toga.
     35644+
     35645+  2. Izaberite ime fajla koji joÅ¡ ne postoji, npr. TEST.
     35646+
     35647+  3. Otkucajte:         :w TEST   (gde je TEST ime koje ste izabrali.)
     35648+
     35649+  4. Time ćete snimiti ceo fajl (Vim Tutor) pod imenom TEST.
     35650+     Za proveru, otkucajte opet  :!dir  ili  :!ls za pregled
     35651+     sadrÅŸaja direktorijuma.
     35652+
     35653+NAPOMENA:  Ako biste napustili Vim i ponovo ga pokrenuli sa vim TEST ,
     35654+           tekst bi bio tačna kopija ovog fajla u trenutku kad ste
     35655+          ga snimili.
     35656+
     35657+  5. IzbriÅ¡ite fajl tako Å¡to ćete otkucati (MS-DOS):        :!del TEST
     35658+                                        ili (Unix):    :!rm TEST
     35659+
     35660+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35661+                 Lekcija 5.3: SNIMANJE OZNAČENOG TEKSTA
     35662+
     35663+
     35664+   ** Da biste snimili deo teksta, otkucajte  v  pokret  :w IME_FAJLA **
     35665+
     35666+  1. Pomerite kursor na ovu liniju.
     35667+
     35668+  2. Pritisnite  v  i pomerite kursor pet redova ispod.  Primetite da je
     35669+     tekst označen inverzno.
     35670+
     35671+  3. Pritisnite  : .  Na dnu ekrana pojaviće se  :'<,'> .
     35672+
     35673+  4. Otkucajte  w TEST  , gde je TEST ime fajla koji joÅ¡ ne postoji.
     35674+     Proverite da zaista piÅ¡e  :'<,'>w TEST  pre nego Å¡to pritisnete <ENTER>.
     35675+
     35676+  5. Vim će snimiti označeni tekst u TEST.  Proverite sa  :!dir  ili  !ls .
     35677+     Nemojte joÅ¡ brisati fajl!  Koristićemo ga u narednoj lekciji.
     35678+
     35679+NAPOMENA:  Komanda  v  započinje vizuelno označavanje.  MoÅŸete pomerati kursor
     35680+           i tako menjati veličinu označenog teksta.  Onda moÅŸete upotrebiti
     35681+           operatore nad tekstom.  Na primer,  d  će izbrisati označeni tekst.
     35682+
     35683+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35684+                  Lekcija 5.4: UČITAVANJE FAJLA U TEKST
     35685+
     35686+
     35687+       ** Za ubacivanje sadrÅŸaja fajla, otkucajte  :r IME_FAJLA  **
     35688+
     35689+  1. Postavite kursor iznad ove linije.
     35690+
     35691+NAPOMENA:  PoÅ¡to izvrÅ¡ite 2. korak videćete tekst iz lekcije 5.3.  Tada
     35692+           pomerite kursor DOLE da biste ponovo videli ovu lekciju.
     35693+
     35694+  2. Učitajte fajl TEST koristeći komandu  :r TEST  gde je TEST ime fajla
     35695+     koje ste koristili u prethodnoj lekciji.  SadrÅŸaj učitanog fajla je
     35696+     ubačen ispod kursora.
     35697+
     35698+  3. Da biste proverili da je fajl učitan, vratite kursor unazad i
     35699+     primetite dve kopije lekcije 5.3, originalnu i onu iz fajla.
     35700+
     35701+NAPOMENA:  Takođe moÅŸete učitati izlaz spoljaÅ¡nje komande.  Na primer,
     35702+          :r !ls  će učitati izlaz komande  ls  i postaviti ga ispod
     35703+           kursora.
     35704+
     35705+
     35706+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35707+                             REZIME lekcije 5
     35708+
     35709+
     35710+  1.  :!komanda  izvrÅ¡ava spoljaÅ¡nju komandu.
     35711+
     35712+      Korisni primeri:
     35713+        (MS-DOS)         (Unix)
     35714+         :!dir            :!ls            -  pregled sadrÅŸaja direktorijuma.
     35715+         :!del FAJL       :!rm FAJL       -  briÅ¡e fajl FAJL.
     35716+
     35717+  2.  :w FAJL  zapisuje trenutni tekst na disk pod imenom FAJL.
     35718+
     35719+  3.  v  pokret  :w IME_FAJLA  snima vizuelno označene redove u fajl
     35720+      IME_FAJLA.
     35721+
     35722+  4.  :r IME_FAJLA  učitava fajl IME_FAJLA sa diska i stavlja
     35723+      njegov sadrÅŸaj ispod kursora.
     35724+
     35725+  5.  :r !dir  učitava izlaz komande dir i postavlja ga ispod kursora.
     35726+
     35727+
     35728+
     35729+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35730+                        Lekcija 6.1: KOMANDA OTVORI
     35731+
     35732+
     35733+       ** Pritisnite  o  da biste otvorili red ispod kursora
     35734+          i preÅ¡li u Insert mod. **
     35735+
     35736+  1. Pomerite kursor na sledeći red označen sa --->.
     35737+
     35738+  2. Otkucajte malo  o  da biste otvorili novi red ISPOD kursora
     35739+     i preÅ¡li u Insert mod.
     35740+
     35741+  3. Otkucajte neki tekst i onda pritisnite <ESC> da biste izaÅ¡li
     35742+     iz Insert moda.
     35743+
     35744+---> Kad pritisnete  o  kursor prelazi u novootvoreni red u Insert modu.
     35745+
     35746+  4. Za otvaranje reda IZNAD kursora, umesto malog otkucajte veliko O .
     35747+     Isprobajte na donjem redu označenom sa --->.
     35748+
     35749+---> Otvorite red iznad ovog kucanjem velikog  O  dok je kursor u ovom redu.
     35750+
     35751+
     35752+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35753+                       Lekcija 6.2: KOMANDA DODAJ
     35754+
     35755+
     35756+            ** Otkucajte  a  za dodavanje teksta IZA kursora. **
     35757+
     35758+  1. Pomerite kursor na početak sledećeg reda označenog sa --->.
     35759
     35760+  2. Kucajte  e  dok kursor ne dođe na kraj reči  re .
     35761+
     35762+  3. Otkucajte  a  (malo) da biste dodali tekst IZA kursora.
     35763+
     35764+  4. Dopunite reč kao Å¡to je u redu ispod.  Pritisnite <ESC> za izlazak
     35765+     iz Insert moda.
     35766+
     35767+  5. Sa  e  pređite na narednu nepotpunu reč i ponovite korake 3 i 4.
     35768
     35769+---> Ovaj re omogućava ve dodav teksta u nekom redu.
     35770+---> Ovaj red omogućava veÅŸbanje dodavanja teksta u nekom redu.
     35771+
     35772+NAPOMENA:  Komande a, i, i  A  aktiviraju isti Insert mod, jedina
     35773+           razlika je u poziciji od koje će se tekst ubacivati.
     35774+
     35775+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35776+                   Lekcija 6.3: DRUGI NAČIN ZAMENE
     35777+
     35778+
     35779+      ** Otkucajte veliko  R  da biste zamenili viÅ¡e od jednog znaka. **
     35780+
     35781+  1. Pomerite kursor na prvi sledeći red označen sa --->.
     35782+     Pomerite kursor na početak prvog  xxx .
     35783+
     35784+  2. Pritisnite  R  i otkucajte broj koji je red ispod,
     35785+     tako da zameni xxx .
     35786+
     35787+  3. Pritisnite <ESC> za izlazak iz Replace moda.
     35788+     Primetite da je ostatak reda ostao nepromenjen.
     35789+
     35790+  4. Ponovite korake da biste zamenili drugo xxx.
     35791+
     35792+---> Dodavanje 123 na xxx daje xxx.
     35793+---> Dodavanje 123 na 456 daje 579.
     35794+
     35795+NAPOMENA:  Replace mod je kao Insert mod, s tom razlikom Å¡to svaki
     35796+           uneti znak briÅ¡e već postojeći.
     35797+
     35798+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35799+               Lekcija 6.4: KOPIRANJE I LEPLJENJE TEKSTA
     35800+
     35801+
     35802+    ** Koristite operator  y  za kopiranje a  p  za lepljenje teksta. **
     35803+
     35804+  1. Pomerite kursor na red sa --->  i postavite kursor posle "a)".
     35805
     35806+  2. Aktivirajte Visual mod sa  v  i pomerite kursor sve do ispred "prvi".
     35807
     35808+  3. Pritisnite  y  da biste kopirali označeni tekst u interni bafer.
     35809+
     35810+  4. Pomerite kursor do kraja sledećeg reda:  j$
     35811+
     35812+  5. Pritisnite  p  da biste zalepili tekst.  Onda otkucajte:  a drugi <ESC> .
     35813+
     35814+  6. Upotrebite Visual mod da označite " red.", kopirajte sa  y , kursor
     35815+     pomerite na kraj sledećeg reda sa  j$  i tamo zalepite tekst sa  p .
     35816+
     35817+--->  a) ovo je prvi red.
     35818+      b)
     35819+
     35820+NAPOMENA:  takođe moÅŸete koristiti  y  kao operator;  yw  kopira jednu reč.
     35821+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35822+                   Lekcija 6.5: POSTAVLJANJE OPCIJA
     35823+
     35824+
     35825+ ** Postavite opciju tako da traÅŸenje i zamena ignoriÅ¡u veličinu slova **
     35826+
     35827+  1. PotraÅŸite reč 'razlika':  /razlika <ENTER>
     35828+     Ponovite nekoliko puta pritiskom na  n .
     35829+
     35830+  2. Aktivirajte opciju 'ic' (Ignore case):  :set ic
     35831+
     35832+  3. Ponovo potraÅŸite reč 'razlika' pritiskom na  n
     35833+     Primetite da su sada pronađeni i RAZLIKA i Razlika.
     35834+
     35835+  4. Aktivirajte opcije 'hlsearch' i 'incsearch':  :set hls is
     35836+
     35837+  5. Ponovo otkucajte komandu traÅŸenja i uočite razlike:  /razlika <ENTER>
     35838+
     35839+  6. Za deaktiviranje opcije  ic  kucajte:  :set noic
     35840+
     35841+NAPOMENA:  Za neoznačavanje pronađenih izraza otkucajte:  :nohlsearch
     35842+NAPOMENA:  Ako ÅŸelite da ne razlikujete veličinu slova u samo jednoj komandi
     35843+          traÅŸenja, dodajte  \c  u izraz:  /razlika\c <ENTER>
     35844+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35845+                             REZIME lekcije 6
     35846+
     35847+  1. Pritisnite  o  za otvaranje reda ISPOD kursora i prelazak u Insert mod.
     35848+     Pritisnite  O  za otvaranje reda IZNAD kursora.
     35849+
     35850+  2. Pritisnite  a  za unos teksta IZA kursora.
     35851+     Pritisnite  A  za unos teksta na kraju reda.
     35852+
     35853+  3. Komanda  e  pomera kursor na kraj reči.
     35854+
     35855+  4. Operator  y  kopira tekst,  p  ga lepi.
     35856+
     35857+  5. Kucanje velikog  R  aktivira Replace mod dok ne pritisnete <ESC> .
     35858+
     35859+  6. Kucanje ":set xxx" aktivira opciju "xxx".  Neke opcije su:
     35860+       'ic' 'ignorecase'       ne razlikuje velika/mala slova pri traÅŸenju
     35861+       'is' 'incsearch'        prikazuje pronađen tekst dok kucate izraz
     35862+       'hls' 'hlsearch'        označava inverzno sve pronađene izraze
     35863+     MoÅŸete koristite dugo ili kratko ime opcije.
     35864+
     35865+  7. Ispred imena opcije stavite "no" da je deaktivirate:  :set noic
     35866+
     35867+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35868+                      Lekcija 7.1: DOBIJANJE POMOĆI
     35869+
     35870+
     35871+                  ** Koristite on-line sistem za pomoć **
     35872+
     35873+  Vim ima detaljan on-line sistem za pomoć.  Za početak, pokuÅ¡ajte neÅ¡to
     35874+  od sledećeg:
     35875+       - pritisnite taster <HELP> (ako ga imate na tastaturi)
     35876+       - pritisnite taster <F1> (ako ga imate na tastaturi)
     35877+       - otkucajte  :help <ENTER>
     35878+
     35879+  Pročitajte tekst u prozoru pomoći da biste naučili pomoć radi.
     35880+  Kucanjem  CTRL-W CTRL-W  prelazite iz jednog prozora u drugi.
     35881+  Otkucajte  :q <ENTER>  da zatvorite prozor pomoći.
     35882+
     35883+  Pomoć o praktično bilo kojoj temi moÅŸete dobiti dodavanjem argumenta
     35884+  komandi ":help".  PokuÅ¡ajte ovo (ne zaboravite <ENTER> na kraju):
     35885+
     35886+       :help w
     35887+       :help c_CTRL-D
     35888+       :help insert-index
     35889+       :help user-manual
     35890+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35891+               Lekcija 7.2: PRAVLJENJE STARTNOG SKRIPTA
     35892+
     35893+
     35894+                  ** Aktivirajte mogućnosti editora **
     35895+
     35896+  Vim ima mnogo viÅ¡e mogućnosti nego Vi, ali većina nije automatski
     35897+  aktivirana.  Za dodatne mogućnosti napravite "vimrc" fajl.
     35898+
     35899+  1. Otvorite "vimrc" fajl.  Ovo zavisi od vaÅ¡eg sistema:
     35900+       :e ~/.vimrc             za Unix
     35901+       :e $VIM/_vimrc          za MS-Windows
     35902+
     35903+  2. Onda učitajte primer sadrÅŸaja "vimrc" fajla:
     35904+       :r $VIMRUNTIME/vimrc_example.vim
     35905+
     35906+  3. Snimite fajl sa:
     35907+       :w
     35908+
     35909+  Sledeći put kada pokrenete Vim, bojenje sintakse teksta biće
     35910+  aktivirano. Sva svoja podeÅ¡avanja moÅŸete dodati u "vimrc" fajl.
     35911+  Za viÅ¡e informacija otkucajte  :help vimrc-intro
     35912+
     35913+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35914+                    Lekcija 7.3: AUTOMATSKO DOVRÅ AVANJE
     35915+
     35916+
     35917+       ** DovrÅ¡avanje komandne linije sa CTRL-D i <TAB> **
     35918+
     35919+  1. Podesite Vim da ne bude u Vi-kompatibilnom modu:  :set nocp
     35920+
     35921+  2. Pogledajte koji fajlovi postoje u direktorijumu:  :!ls  ili  :!dir
     35922+
     35923+  3. Otkucajte početak komande:  :e
     35924+
     35925+  4. Otkucajte  CTRL-D  i Vim će prikazati spisak komandi koje počinju sa "e".
     35926+
     35927+  5. Pritisnite <TAB>  i Vim će dopuniti ime komande u ":edit".
     35928+
     35929+  6. Dodajte razmak i početak imena postojećeg fajla:  :edit FA
     35930+
     35931+  7. Pritisnite <TAB>.  Vim će dopuniti ime fajla (ako je jedinstveno).
     35932+
     35933+NAPOMENA:  Moguće je dopuniti mnoge komande.  Samo probajte CTRL-D i <TAB>.
     35934+           Naročito je korisno za  :help  komande.
     35935+
     35936+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35937+                             REZIME lekcije 7
     35938+
     35939+
     35940+  1. Otkucajte  :help  ili pritisnite <F1> ili <Help>  za pomoć.
     35941+
     35942+  2. Otkucajte  :help komanda  biste dobili pomoć za tu komandu.
     35943+
     35944+  3. Otkucajte  CTRL-W CTRL-W  za prelazak u drugi prozor.
     35945+
     35946+  4. Otkucajte  :q  da zatvorite prozor pomoći.
     35947+
     35948+  5. Napravite vimrc startni skript za aktiviranje podeÅ¡avanja koja
     35949+     vam odgovaraju.
     35950+
     35951+  6. Dok kucate neku od  :  komandi, pritisnite CTRL-D da biste videli moguće
     35952+     vrednosti.  Pritisnite <TAB> da odaberete jednu od njih.
     35953+
     35954+
     35955+
     35956+
     35957+
     35958+
     35959+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35960+  Ovim je priručnik zavrÅ¡en.  Njegov cilj je bio kratak pregled Vim editora,
     35961+  koliko da omogući njegovo relativno jednostavno korišćenje.  Priručnik nije
     35962+  potpun, jer Vim ima mnogo viÅ¡e komandi.  Kao sledeće, pročitajte priručnik:
     35963+  ":help user-manual".
     35964+
     35965+  Za dalje čitanje i učenje, preporučujemo knjigu:
     35966+       Vim - Vi Improved - by Steve Oualline
     35967+       Izdavač: New Riders
     35968+  Prva knjiga potpuno posvećena Vim-u.  Naročito korisna za početnike.
     35969+  Ima mnoÅ¡tvo primera i slika.
     35970+  Vidite http://iccf-holland.org/click5.html
     35971+
     35972+  Sledeća knjiga je starija i viÅ¡e govori o Vi-u nego o Vim-u, ali je takođe
     35973+  preporučujemo:
     35974+       Learning the Vi Editor - by Linda Lamb
     35975+       Izdavač: O'Reilly & Associates Inc.
     35976+  Dobra knjiga iz koje moÅŸete saznati skoro sve Å¡to moÅŸete raditi u Vi-ju.
     35977+  Å esto izdanje ima i informacija o Vim-u.
     35978+
     35979+  Ovaj priručnik su napisali: Michael C. Pierce i Robert K. Ware,
     35980+  Colorado School of Mines koristeći ideje Charlesa Smitha,
     35981+  Colorado State University.  E-mail: bware@mines.colorado.edu.
     35982+
     35983+  Prilagođavanje za Vim uradio je Bram Moolenaar.
     35984+
     35985+  Prevod na srpski: Ivan Nejgebauer <ian@uns.ac.rs>
     35986+  Verzija 1.0, maj/juni 2014.
     35987+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     35988diff -Naur vim74.orig/runtime/tutor/tutor.vim vim74/runtime/tutor/tutor.vim
     35989--- vim74.orig/runtime/tutor/tutor.vim  2012-09-21 12:23:48.000000000 +0000
     35990+++ vim74/runtime/tutor/tutor.vim       2014-07-21 23:33:37.640139140 +0000
     35991@@ -1,7 +1,7 @@
     35992 " Vim tutor support file
     35993 " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
     35994 " Maintainer: Bram Moolenaar
     35995-" Last Change: 2012 Sep 21
     35996+" Last Change: 2014 Jun 25
     35997 
     35998 " This Vim script is used for detecting if a translation of the
     35999 " tutor file exist, i.e., a tutor.xx file, where xx is the language.
     36000@@ -36,6 +36,8 @@
     36001       let s:ext = ".pl"
     36002     elseif s:lang =~ "Slovak"
     36003       let s:ext = ".sk"
     36004+    elseif s:lang =~ "Serbian"
     36005+      let s:ext = ".sr"
     36006     elseif s:lang =~ "Czech"
     36007       let s:ext = ".cs"
     36008     elseif s:lang =~ "Dutch"
     36009@@ -122,6 +124,15 @@
     36010   endif
     36011 endif
     36012 
     36013+" The Slovak tutor is available in two encodings, guess which one to use
     36014+" Note that the utf-8 version is the original, the cp1250 version is created
     36015+" from it.
     36016+if s:ext =~? '\.sr'
     36017+  if &enc =~ 1250
     36018+    let s:ext = ".sr.cp1250"
     36019+  endif
     36020+endif
     36021+
     36022 " The Czech tutor is available in three encodings, guess which one to use
     36023 if s:ext =~? '\.cs'
     36024   if &enc =~ 1250
    3071036025diff -Naur vim74.orig/runtime/vimlogo.eps vim74/runtime/vimlogo.eps
    3071136026--- vim74.orig/runtime/vimlogo.eps      2010-05-15 11:03:57.000000000 +0000
    30712 +++ vim74/runtime/vimlogo.eps   2014-06-01 00:43:12.880816844 +0000
     36027+++ vim74/runtime/vimlogo.eps   2014-07-21 23:33:37.830138644 +0000
    3071336028@@ -1,791 +1,803 @@
    3071436029-%!PS-Adobe-3.0 EPSF-3.0
     
    3230737622diff -Naur vim74.orig/runtime/vimrc_example.vim vim74/runtime/vimrc_example.vim
    3230837623--- vim74.orig/runtime/vimrc_example.vim        2011-04-15 18:58:36.000000000 +0000
    32309 +++ vim74/runtime/vimrc_example.vim     2014-06-01 00:43:12.944150016 +0000
     37624+++ vim74/runtime/vimrc_example.vim     2014-07-21 23:33:37.886805163 +0000
    3231037625@@ -1,7 +1,7 @@
    3231137626 " An example for a vimrc file.
     
    3232937644diff -Naur vim74.orig/src/GvimExt/Make_cyg.mak vim74/src/GvimExt/Make_cyg.mak
    3233037645--- vim74.orig/src/GvimExt/Make_cyg.mak 2011-09-30 14:45:49.000000000 +0000
    32331 +++ vim74/src/GvimExt/Make_cyg.mak      2014-06-01 00:43:13.007483188 +0000
     37646+++ vim74/src/GvimExt/Make_cyg.mak      2014-07-21 23:33:37.970138279 +0000
    3233237647@@ -31,12 +31,12 @@
    3233337648 ifeq ($(CROSS),yes)
     
    3234837663diff -Naur vim74.orig/src/Make_bc5.mak vim74/src/Make_bc5.mak
    3234937664--- vim74.orig/src/Make_bc5.mak 2013-06-03 18:09:58.000000000 +0000
    32350 +++ vim74/src/Make_bc5.mak      2014-06-01 00:43:13.324149048 +0000
     37665+++ vim74/src/Make_bc5.mak      2014-07-21 23:33:38.200137678 +0000
    3235137666@@ -419,7 +419,7 @@
    3235237667 ALIGNARG = -a$(ALIGN)
     
    3236037675diff -Naur vim74.orig/src/Make_cyg.mak vim74/src/Make_cyg.mak
    3236137676--- vim74.orig/src/Make_cyg.mak 2013-07-06 11:32:11.000000000 +0000
    32362 +++ vim74/src/Make_cyg.mak      2014-06-01 00:43:13.337482348 +0000
     37677+++ vim74/src/Make_cyg.mak      2014-07-21 23:33:38.213470977 +0000
    3236337678@@ -1,6 +1,6 @@
    3236437679 #
     
    3239837713diff -Naur vim74.orig/src/Make_ming.mak vim74/src/Make_ming.mak
    3239937714--- vim74.orig/src/Make_ming.mak        2013-07-06 11:32:11.000000000 +0000
    32400 +++ vim74/src/Make_ming.mak     2014-06-01 00:43:13.407482170 +0000
     37715+++ vim74/src/Make_ming.mak     2014-07-21 23:33:38.293470768 +0000
    3240137716@@ -359,6 +359,7 @@
    3240237717 
     
    3243937754diff -Naur vim74.orig/src/Make_mvc.mak vim74/src/Make_mvc.mak
    3244037755--- vim74.orig/src/Make_mvc.mak 2013-07-09 11:13:12.000000000 +0000
    32441 +++ vim74/src/Make_mvc.mak      2014-06-01 00:43:13.444148743 +0000
     37756+++ vim74/src/Make_mvc.mak      2014-07-21 23:33:38.343470638 +0000
    3244237757@@ -424,6 +424,12 @@
    3244337758 !if "$(_NMAKE_VER)" == "11.00.60610.1"
     
    3251237827diff -Naur vim74.orig/src/Make_vms.mms vim74/src/Make_vms.mms
    3251337828--- vim74.orig/src/Make_vms.mms 2013-05-06 02:06:04.000000000 +0000
    32514 +++ vim74/src/Make_vms.mms      2014-06-01 00:43:13.494148616 +0000
     37829+++ vim74/src/Make_vms.mms      2014-07-21 23:33:38.380137209 +0000
    3251537830@@ -2,7 +2,7 @@
    3251637831 # Makefile for Vim on OpenVMS
     
    3262837943diff -Naur vim74.orig/src/Makefile vim74/src/Makefile
    3262937944--- vim74.orig/src/Makefile     2013-08-10 12:21:15.000000000 +0000
    32630 +++ vim74/src/Makefile  2014-06-01 00:43:13.524148539 +0000
     37945+++ vim74/src/Makefile  2014-07-21 23:33:38.420137104 +0000
    3263137946@@ -546,6 +546,7 @@
    3263237947 # again.
     
    3273938054diff -Naur vim74.orig/src/auto/configure vim74/src/auto/configure
    3274038055--- vim74.orig/src/auto/configure       2013-08-04 18:01:06.000000000 +0000
    32741 +++ vim74/src/auto/configure    2014-06-01 00:43:13.910814221 +0000
     38056+++ vim74/src/auto/configure    2014-07-21 23:33:38.890135878 +0000
    3274238057@@ -1,11 +1,9 @@
    3274338058 #! /bin/sh
     
    3676242077diff -Naur vim74.orig/src/blowfish.c vim74/src/blowfish.c
    3676342078--- vim74.orig/src/blowfish.c   2010-12-17 18:58:18.000000000 +0000
    36764 +++ vim74/src/blowfish.c        2014-06-01 00:43:13.954147444 +0000
     42079+++ vim74/src/blowfish.c        2014-07-21 23:33:38.936802423 +0000
    3676542080@@ -6,7 +6,7 @@
    3676642081  * Do ":help credits" in Vim to see a list of people who contributed.
     
    3689042205diff -Naur vim74.orig/src/buffer.c vim74/src/buffer.c
    3689142206--- vim74.orig/src/buffer.c     2013-07-17 14:39:00.000000000 +0000
    36892 +++ vim74/src/buffer.c  2014-06-01 00:43:13.980814043 +0000
     42207+++ vim74/src/buffer.c  2014-07-21 23:33:38.956802371 +0000
    3689342208@@ -211,7 +211,12 @@
    3689442209 
     
    3690442219     /*
    3690542220      * Set/reset the Changed flag first, autocmds may change the buffer.
    36906 @@ -671,8 +676,16 @@
     42221@@ -366,7 +371,11 @@
     42222        unload_buf = TRUE;
     42223 #endif
     42224 
     42225-    if (win != NULL)
     42226+    if (win != NULL
     42227+#ifdef FEAT_WINDOWS
     42228+       && win_valid(win)       /* in case autocommands closed the window */
     42229+#endif
     42230+           )
     42231     {
     42232        /* Set b_last_cursor when closing the last window for the buffer.
     42233         * Remember the last cursor position and window options of the buffer.
     42234@@ -671,8 +680,16 @@
    3690742235 #endif
    3690842236 #ifdef FEAT_AUTOCMD
     
    3692242250 
    3692342251 /*
    36924 @@ -989,6 +1002,50 @@
     42252@@ -989,6 +1006,50 @@
    3692542253 #if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
    3692642254        || defined(FEAT_PYTHON3) || defined(PROTO)
     
    3697342301  * Implementation of the commands for the buffer list.
    3697442302  *
    36975 @@ -1109,7 +1166,6 @@
     42303@@ -1109,7 +1170,6 @@
    3697642304     if (unload)
    3697742305     {
     
    3698142309        /* When unloading or deleting a buffer that's already unloaded and
    3698242310         * unlisted: fail silently. */
    36983 @@ -1150,30 +1206,7 @@
     42311@@ -1150,30 +1210,7 @@
    3698442312            if (bp->b_p_bl && bp != buf)
    3698542313                break;
     
    3701342341 #ifdef FEAT_WINDOWS
    3701442342        /*
    37015 @@ -1186,7 +1219,10 @@
     42343@@ -1186,7 +1223,10 @@
    3701642344                   && !(curwin->w_closing || curwin->w_buffer->b_closing)
    3701742345 # endif
     
    3702542353 
    3702642354        /*
    37027 @@ -1204,7 +1240,8 @@
     42355@@ -1204,7 +1244,8 @@
    3702842356 
    3702942357        /*
     
    3703542363         * Then prefer the buffer we most recently visited.
    3703642364         * Else try to find one that is loaded, after the current buffer,
    37037 @@ -1303,6 +1340,13 @@
     42365@@ -1303,6 +1344,13 @@
    3703842366        }
    3703942367     }
     
    3704942377      * make buf current buffer
    3705042378      */
    37051 @@ -1396,10 +1440,8 @@
     42379@@ -1396,10 +1444,8 @@
    3705242380        curwin->w_alt_fnum = curbuf->b_fnum; /* remember alternate file */
    3705342381     buflist_altfpos(curwin);                    /* remember curpos */
     
    3706042388     /* close_windows() or apply_autocmds() may change curbuf */
    3706142389     prevbuf = curbuf;
    37062 @@ -1647,7 +1689,11 @@
     42390@@ -1647,7 +1693,11 @@
    3706342391            buf->b_p_bl = TRUE;
    3706442392 #ifdef FEAT_AUTOCMD
     
    3707242400        }
    3707342401        return buf;
    37074 @@ -1823,8 +1869,14 @@
     42402@@ -1823,8 +1873,14 @@
    3707542403     if (!(flags & BLN_DUMMY))
    3707642404     {
     
    3708742415        if (aborting())         /* autocmds may abort script processing */
    3708842416            return NULL;
    37089 @@ -1941,6 +1993,10 @@
     42417@@ -1941,6 +1997,10 @@
    3709042418     clear_string_option(&buf->b_p_qe);
    3709142419 #endif
     
    3709842426 
    3709942427 /*
    37100 @@ -4059,7 +4115,8 @@
     42428@@ -4059,7 +4119,8 @@
    3710142429                item[curitem].minwid = -syn_namen2id(t, (int)(s - t));
    3710242430                curitem++;
     
    3710842436        }
    3710942437 
    37110 @@ -5468,6 +5525,10 @@
     42438@@ -5468,6 +5529,10 @@
    3711142439     return;
    3711242440 }
     
    3711942447 buf_change_sign_type(buf, markId, typenr)
    3712042448     buf_T      *buf;           /* buffer to store sign in */
    37121 @@ -5636,6 +5697,14 @@
     42449@@ -5636,6 +5701,14 @@
    3712242450 {
    3712342451     signlist_T *next;
    3712442452 
    3712542453+    /* When deleting the last sign need to redraw the windows to remove the
    37126 +     * sign column. */
    37127 +    if (buf->b_signlist != NULL)
     42454+     * sign column. Not when curwin is NULL (this means we're exiting). */
     42455+    if (buf->b_signlist != NULL && curwin != NULL)
    3712842456+    {
    3712942457+       redraw_buf_later(buf, NOT_VALID);
     
    3713442462     {
    3713542463        next = buf->b_signlist->next;
    37136 @@ -5654,11 +5723,7 @@
     42464@@ -5654,11 +5727,7 @@
    3713742465 
    3713842466     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
     
    3714842476diff -Naur vim74.orig/src/charset.c vim74/src/charset.c
    3714942477--- vim74.orig/src/charset.c    2013-02-06 15:20:01.000000000 +0000
    37150 +++ vim74/src/charset.c 2014-06-01 00:43:14.000813992 +0000
    37151 @@ -1380,10 +1380,7 @@
     42478+++ vim74/src/charset.c 2014-07-21 23:33:38.990135617 +0000
     42479@@ -867,9 +867,10 @@
     42480     char_u     *s;
     42481 {
     42482     colnr_T    col = startcol;
     42483+    char_u     *line = s; /* pointer to start of line, for breakindent */
     42484 
     42485     while (*s != NUL)
     42486-       col += lbr_chartabsize_adv(&s, col);
     42487+       col += lbr_chartabsize_adv(line, &s, col);
     42488     return (int)col;
     42489 }
     42490 
     42491@@ -877,16 +878,17 @@
     42492  * Like linetabsize(), but for a given window instead of the current one.
     42493  */
     42494     int
     42495-win_linetabsize(wp, p, len)
     42496+win_linetabsize(wp, line, len)
     42497     win_T      *wp;
     42498-    char_u     *p;
     42499+    char_u     *line;
     42500     colnr_T    len;
     42501 {
     42502     colnr_T    col = 0;
     42503     char_u     *s;
     42504 
     42505-    for (s = p; *s != NUL && (len == MAXCOL || s < p + len); mb_ptr_adv(s))
     42506-       col += win_lbr_chartabsize(wp, s, col, NULL);
     42507+    for (s = line; *s != NUL && (len == MAXCOL || s < line + len);
     42508+                                                               mb_ptr_adv(s))
     42509+       col += win_lbr_chartabsize(wp, line, s, col, NULL);
     42510     return (int)col;
     42511 }
     42512 
     42513@@ -1021,12 +1023,13 @@
     42514  * like chartabsize(), but also check for line breaks on the screen
     42515  */
     42516     int
     42517-lbr_chartabsize(s, col)
     42518+lbr_chartabsize(line, s, col)
     42519+    char_u             *line UNUSED; /* start of the line */
     42520     unsigned char      *s;
     42521     colnr_T            col;
     42522 {
     42523 #ifdef FEAT_LINEBREAK
     42524-    if (!curwin->w_p_lbr && *p_sbr == NUL)
     42525+    if (!curwin->w_p_lbr && *p_sbr == NUL && !curwin->w_p_bri)
     42526     {
     42527 #endif
     42528 #ifdef FEAT_MBYTE
     42529@@ -1036,7 +1039,7 @@
     42530        RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col)
     42531 #ifdef FEAT_LINEBREAK
     42532     }
     42533-    return win_lbr_chartabsize(curwin, s, col, NULL);
     42534+    return win_lbr_chartabsize(curwin, line == NULL ? s : line, s, col, NULL);
     42535 #endif
     42536 }
     42537 
     42538@@ -1044,13 +1047,14 @@
     42539  * Call lbr_chartabsize() and advance the pointer.
     42540  */
     42541     int
     42542-lbr_chartabsize_adv(s, col)
     42543+lbr_chartabsize_adv(line, s, col)
     42544+    char_u     *line; /* start of the line */
     42545     char_u     **s;
     42546     colnr_T    col;
     42547 {
     42548     int                retval;
     42549 
     42550-    retval = lbr_chartabsize(*s, col);
     42551+    retval = lbr_chartabsize(line, *s, col);
     42552     mb_ptr_adv(*s);
     42553     return retval;
     42554 }
     42555@@ -1063,8 +1067,9 @@
     42556  * value, init to 0 before calling.
     42557  */
     42558     int
     42559-win_lbr_chartabsize(wp, s, col, headp)
     42560+win_lbr_chartabsize(wp, line, s, col, headp)
     42561     win_T      *wp;
     42562+    char_u     *line UNUSED; /* start of the line */
     42563     char_u     *s;
     42564     colnr_T    col;
     42565     int                *headp UNUSED;
     42566@@ -1073,6 +1078,7 @@
     42567     int                c;
     42568     int                size;
     42569     colnr_T    col2;
     42570+    colnr_T    col_adj = 0; /* col + screen size of tab */
     42571     colnr_T    colmax;
     42572     int                added;
     42573 # ifdef FEAT_MBYTE
     42574@@ -1086,9 +1092,9 @@
     42575     int                n;
     42576 
     42577     /*
     42578-     * No 'linebreak' and 'showbreak': return quickly.
     42579+     * No 'linebreak', 'showbreak' and 'breakindent': return quickly.
     42580      */
     42581-    if (!wp->w_p_lbr && *p_sbr == NUL)
     42582+    if (!wp->w_p_lbr && !wp->w_p_bri && *p_sbr == NUL)
     42583 #endif
     42584     {
     42585 #ifdef FEAT_MBYTE
     42586@@ -1104,6 +1110,8 @@
     42587      */
     42588     size = win_chartabsize(wp, s, col);
     42589     c = *s;
     42590+    if (tab_corr)
     42591+       col_adj = size - 1;
     42592 
     42593     /*
     42594      * If 'linebreak' set check at a blank before a non-blank if the line
     42595@@ -1112,7 +1120,6 @@
     42596     if (wp->w_p_lbr
     42597            && vim_isbreak(c)
     42598            && !vim_isbreak(s[1])
     42599-           && !wp->w_p_list
     42600            && wp->w_p_wrap
     42601 # ifdef FEAT_VERTSPLIT
     42602            && wp->w_width != 0
     42603@@ -1125,12 +1132,13 @@
     42604         */
     42605        numberextra = win_col_off(wp);
     42606        col2 = col;
     42607-       colmax = (colnr_T)(W_WIDTH(wp) - numberextra);
     42608+       colmax = (colnr_T)(W_WIDTH(wp) - numberextra - col_adj);
     42609        if (col >= colmax)
     42610        {
     42611-           n = colmax + win_col_off2(wp);
     42612+           colmax += col_adj;
     42613+           n = colmax +  win_col_off2(wp);
     42614            if (n > 0)
     42615-               colmax += (((col - colmax) / n) + 1) * n;
     42616+               colmax += (((col - colmax) / n) + 1) * n - col_adj;
     42617        }
     42618 
     42619        for (;;)
     42620@@ -1147,7 +1155,7 @@
     42621            col2 += win_chartabsize(wp, s, col2);
     42622            if (col2 >= colmax)         /* doesn't fit */
     42623            {
     42624-               size = colmax - col;
     42625+               size = colmax - col + col_adj;
     42626                tab_corr = FALSE;
     42627                break;
     42628            }
     42629@@ -1163,11 +1171,12 @@
     42630 # endif
     42631 
     42632     /*
     42633-     * May have to add something for 'showbreak' string at start of line
     42634+     * May have to add something for 'breakindent' and/or 'showbreak'
     42635+     * string at start of line.
     42636      * Set *headp to the size of what we add.
     42637      */
     42638     added = 0;
     42639-    if (*p_sbr != NUL && wp->w_p_wrap && col != 0)
     42640+    if ((*p_sbr != NUL || wp->w_p_bri) && wp->w_p_wrap && col != 0)
     42641     {
     42642        numberextra = win_col_off(wp);
     42643        col += numberextra + mb_added;
     42644@@ -1180,7 +1189,12 @@
     42645        }
     42646        if (col == 0 || col + size > (colnr_T)W_WIDTH(wp))
     42647        {
     42648-           added = vim_strsize(p_sbr);
     42649+           added = 0;
     42650+           if (*p_sbr != NUL)
     42651+               added += vim_strsize(p_sbr);
     42652+           if (wp->w_p_bri)
     42653+               added += get_breakindent_win(wp, line);
     42654+
     42655            if (tab_corr)
     42656                size += (added / wp->w_buffer->b_p_ts) * wp->w_buffer->b_p_ts;
     42657            else
     42658@@ -1274,13 +1288,14 @@
     42659     colnr_T    vcol;
     42660     char_u     *ptr;           /* points to current char */
     42661     char_u     *posptr;        /* points to char at pos->col */
     42662+    char_u     *line;          /* start of the line */
     42663     int                incr;
     42664     int                head;
     42665     int                ts = wp->w_buffer->b_p_ts;
     42666     int                c;
     42667 
     42668     vcol = 0;
     42669-    ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
     42670+    line = ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE);
     42671     if (pos->col == MAXCOL)
     42672        posptr = NULL;  /* continue until the NUL */
     42673     else
     42674@@ -1288,12 +1303,13 @@
     42675 
     42676     /*
     42677      * This function is used very often, do some speed optimizations.
     42678-     * When 'list', 'linebreak' and 'showbreak' are not set use a simple loop.
     42679+     * When 'list', 'linebreak', 'showbreak' and 'breakindent' are not set
     42680+     * use a simple loop.
     42681      * Also use this when 'list' is set but tabs take their normal size.
     42682      */
     42683     if ((!wp->w_p_list || lcs_tab1 != NUL)
     42684 #ifdef FEAT_LINEBREAK
     42685-           && !wp->w_p_lbr && *p_sbr == NUL
     42686+           && !wp->w_p_lbr && *p_sbr == NUL && !wp->w_p_bri
     42687 #endif
     42688        )
     42689     {
     42690@@ -1355,7 +1371,7 @@
     42691        {
     42692            /* A tab gets expanded, depending on the current column */
     42693            head = 0;
     42694-           incr = win_lbr_chartabsize(wp, ptr, vcol, &head);
     42695+           incr = win_lbr_chartabsize(wp, line, ptr, vcol, &head);
     42696            /* make sure we don't go past the end of the line */
     42697            if (*ptr == NUL)
     42698            {
     42699@@ -1380,10 +1396,7 @@
    3715242700                && (State & NORMAL)
    3715342701                && !wp->w_p_list
     
    3716142709            *cursor = vcol + incr - 1;      /* cursor at end */
    3716242710        else
    37163 @@ -1463,7 +1460,6 @@
     42711@@ -1463,7 +1476,6 @@
    3716442712 }
    3716542713 #endif
     
    3716942717  * Get the leftmost and rightmost virtual column of pos1 and pos2.
    3717042718  * Used for Visual block mode.
    37171 @@ -1500,7 +1496,6 @@
     42719@@ -1500,7 +1512,6 @@
    3717242720     else
    3717342721        *right = to1;
     
    3717942727diff -Naur vim74.orig/src/config.h.in vim74/src/config.h.in
    3718042728--- vim74.orig/src/config.h.in  2013-02-26 13:18:19.000000000 +0000
    37181 +++ vim74/src/config.h.in       2014-06-01 00:43:14.020813941 +0000
     42729+++ vim74/src/config.h.in       2014-07-21 23:33:39.016802214 +0000
    3718242730@@ -37,10 +37,10 @@
    3718342731 #undef UNIX
     
    3720842756+/* Define if we have AvailabilityMacros.h on Mac OS X */
    3720942757+#undef HAVE_AVAILABILITYMACROS_H
     42758diff -Naur vim74.orig/src/config.mk.in vim74/src/config.mk.in
     42759--- vim74.orig/src/config.mk.in 2010-11-03 21:26:24.000000000 +0000
     42760+++ vim74/src/config.mk.in      2014-07-21 23:33:39.036802162 +0000
     42761@@ -164,6 +164,8 @@
     42762 ### If the *.po files are to be translated to *.mo files.
     42763 MAKEMO         = @MAKEMO@
     42764 
     42765+MSGFMT         = @MSGFMT@
     42766+
     42767 # Make sure that "make first" will run "make all" once configure has done its
     42768 # work.  This is needed when using the Makefile in the top directory.
     42769 first: all
    3721042770diff -Naur vim74.orig/src/configure.in vim74/src/configure.in
    3721142771--- vim74.orig/src/configure.in 2013-08-04 18:00:50.000000000 +0000
    37212 +++ vim74/src/configure.in      2014-06-01 00:43:14.080813788 +0000
     42772+++ vim74/src/configure.in      2014-07-21 23:33:39.076802058 +0000
    3721342773@@ -14,6 +14,7 @@
    3721442774 AC_PROG_CC     dnl required by almost everything
     
    3773343293diff -Naur vim74.orig/src/diff.c vim74/src/diff.c
    3773443294--- vim74.orig/src/diff.c       2013-07-17 11:43:15.000000000 +0000
    37735 +++ vim74/src/diff.c    2014-06-01 00:43:14.104147062 +0000
     43295+++ vim74/src/diff.c    2014-07-21 23:33:39.123468602 +0000
    3773643296@@ -622,6 +622,7 @@
    3773743297                    wp->w_topfill = (n < 0 ? 0 : n);
     
    3775143311            /* Set 'diff', 'scrollbind' off and 'wrap' on. If option values
    3775243312             * were saved in diff_win_options() restore them. */
     43313diff -Naur vim74.orig/src/digraph.c vim74/src/digraph.c
     43314--- vim74.orig/src/digraph.c    2012-01-10 20:57:16.000000000 +0000
     43315+++ vim74/src/digraph.c 2014-07-21 23:33:39.150135200 +0000
     43316@@ -1425,6 +1425,8 @@
     43317        {'W', '=', 0x20a9},
     43318        {'=', 'e', 0x20ac}, /* euro */
     43319        {'E', 'u', 0x20ac}, /* euro */
     43320+       {'=', 'R', 0x20bd}, /* rouble */
     43321+       {'=', 'P', 0x20bd}, /* rouble */
     43322        {'o', 'C', 0x2103},
     43323        {'c', 'o', 0x2105},
     43324        {'o', 'F', 0x2109},
    3775343325diff -Naur vim74.orig/src/dosinst.c vim74/src/dosinst.c
    3775443326--- vim74.orig/src/dosinst.c    2013-05-06 02:06:04.000000000 +0000
    37755 +++ vim74/src/dosinst.c 2014-06-01 00:43:14.177480209 +0000
     43327+++ vim74/src/dosinst.c 2014-07-21 23:33:39.196801744 +0000
    3775643328@@ -1192,23 +1192,29 @@
    3775743329        fprintf(fd, "  if arg3 =~ ' ' | let arg3 = '\"' . arg3 . '\"' | endif\n");
     
    3780643378diff -Naur vim74.orig/src/edit.c vim74/src/edit.c
    3780743379--- vim74.orig/src/edit.c       2013-07-04 18:22:25.000000000 +0000
    37808 +++ vim74/src/edit.c    2014-06-01 00:43:14.210813457 +0000
     43380+++ vim74/src/edit.c    2014-07-21 23:33:39.273468211 +0000
    3780943381@@ -199,7 +199,7 @@
    3781043382 static void spell_back_to_badword __ARGS((void));
     
    3801943591 
    3802043592 /*
     43593@@ -1951,7 +1956,7 @@
     43594            else
     43595 #endif
     43596                ++new_cursor_col;
     43597-           vcol += lbr_chartabsize(ptr + new_cursor_col, (colnr_T)vcol);
     43598+           vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol);
     43599        }
     43600        vcol = last_vcol;
     43601 
    3802143602@@ -3467,7 +3472,6 @@
    3802243603     }
     
    3808843669                else if (first_match_pos.lnum == last_match_pos.lnum
    3808943670                                 && first_match_pos.col == last_match_pos.col)
    38090 @@ -5184,9 +5196,21 @@
     43671@@ -4580,7 +4592,10 @@
     43672      */
     43673     i = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
     43674     backspace_until_column(i);
     43675+
     43676+    /* Not sure what is still valid, better redraw everything. */
     43677     changed_cline_bef_curs();
     43678+    redraw_curbuf_later(NOT_VALID);
     43679 }
     43680 
     43681 /* Insert the new text being completed. */
     43682@@ -5184,9 +5199,21 @@
    3809143683        }
    3809243684        else if (ctrl_x_mode == CTRL_X_FILES)
     
    3811343705            compl_pattern = addstar(line + compl_col, compl_length,
    3811443706                                                                EXPAND_FILES);
    38115 @@ -5262,7 +5286,8 @@
     43707@@ -5262,7 +5289,8 @@
    3811643708            {
    3811743709                ctrl_x_mode = 0;
     
    3812343715            }
    3812443716 
    38125 @@ -5521,15 +5546,18 @@
     43717@@ -5521,15 +5549,18 @@
    3812643718 
    3812743719     /* Show a message about what (completion) mode we're in. */
     
    3814943741     /* Show the popup menu, unless we got interrupted. */
    3815043742     if (!compl_interrupted)
    38151 @@ -6687,7 +6715,7 @@
     43743@@ -6687,7 +6718,7 @@
    3815243744     if (!arrow_used)       /* something has been inserted */
    3815343745     {
     
    3815843750     }
    3815943751 #ifdef FEAT_SPELL
    38160 @@ -6776,9 +6804,10 @@
     43752@@ -6776,9 +6807,10 @@
    3816143753  * to another window/buffer.
    3816243754  */
     
    3817043762     int                cc;
    3817143763     char_u     *ptr;
    38172 @@ -6849,7 +6878,7 @@
     43764@@ -6849,7 +6881,7 @@
    3817343765         * Do this when ESC was used or moving the cursor up/down.
    3817443766         * Check for the old position still being valid, just in case the text
     
    3817943771                && end_insert_pos->lnum <= curbuf->b_ml.ml_line_count)
    3818043772        {
    38181 @@ -6872,7 +6901,6 @@
     43773@@ -6872,7 +6904,6 @@
    3818243774            else if (cc != NUL)
    3818343775                ++curwin->w_cursor.col; /* put cursor back on the NUL */
     
    3818743779             * deleted characters. */
    3818843780            if (VIsual_active && VIsual.lnum == curwin->w_cursor.lnum)
    38189 @@ -6882,12 +6910,11 @@
     43781@@ -6882,12 +6913,11 @@
    3819043782                if (VIsual.col > len)
    3819143783                {
     
    3820243794     }
    3820343795     did_ai = FALSE;
    38204 @@ -6902,6 +6929,7 @@
     43796@@ -6902,6 +6932,7 @@
    3820543797     if (end_insert_pos != NULL)
    3820643798     {
     
    3821043802     }
    3821143803 }
    38212 @@ -7845,8 +7873,7 @@
     43804@@ -7098,9 +7129,10 @@
     43805        for (;;)
     43806        {
     43807            coladvance(v - width);
     43808-           /* getviscol() is slow, skip it when 'showbreak' is empty and
     43809-            * there are no multi-byte characters */
     43810-           if ((*p_sbr == NUL
     43811+           /* getviscol() is slow, skip it when 'showbreak' is empty,
     43812+            * 'breakindent' is not set and there are no multi-byte
     43813+            * characters */
     43814+           if ((*p_sbr == NUL && !curwin->w_p_bri
     43815 #  ifdef FEAT_MBYTE
     43816                        && !has_mbyte
     43817 #  endif
     43818@@ -7845,8 +7877,7 @@
    3821343819            if (try_match && keytyped == ':')
    3821443820            {
     
    3822043826                /* Need to get the line again after cin_islabel(). */
    3822143827                p = ml_get_curline();
    38222 @@ -7856,7 +7883,7 @@
     43828@@ -7856,7 +7887,7 @@
    3822343829                {
    3822443830                    p[curwin->w_cursor.col - 1] = ' ';
     
    3822943835                    p[curwin->w_cursor.col - 1] = ':';
    3823043836                    if (i)
    38231 @@ -8084,9 +8111,7 @@
     43837@@ -8084,9 +8115,7 @@
    3823243838     int                need_redraw = FALSE;
    3823343839     int                regname;
     
    3823943845     /*
    3824043846      * If we are going to wait for a character, show a '"'.
    38241 @@ -8190,11 +8215,9 @@
     43847@@ -8190,11 +8219,9 @@
    3824243848     if (need_redraw || stuff_empty())
    3824343849        edit_unputchar();
     
    3825143857 
    3825243858 /*
    38253 @@ -8237,6 +8260,7 @@
     43859@@ -8237,6 +8264,7 @@
    3825443860 
    3825543861                  /* Need to reset Insstart, esp. because a BS that joins
     
    3825943865                  break;
    3826043866 
    38261 @@ -8366,7 +8390,7 @@
     43867@@ -8366,7 +8394,7 @@
    3826243868            disabled_redraw = TRUE;
    3826343869            return FALSE;       /* repeat the insert */
     
    3826843874     }
    3826943875 
    38270 @@ -8390,11 +8414,7 @@
     43876@@ -8390,11 +8418,7 @@
    3827143877 #endif
    3827243878               )
     
    3828143887            && !revins_on
    3828243888 #endif
    38283 @@ -8496,7 +8516,6 @@
     43889@@ -8496,7 +8520,6 @@
    3828443890 }
    3828543891 #endif
     
    3828943895  * If 'keymodel' contains "startsel", may start selection.
    3829043896  * Returns TRUE when a CTRL-O and other keys stuffed.
    38291 @@ -8552,7 +8571,6 @@
     43897@@ -8552,7 +8575,6 @@
    3829243898        }
    3829343899     return FALSE;
     
    3829743903 /*
    3829843904  * <Insert> key in Insert mode: toggle insert/replace mode.
    38299 @@ -8672,7 +8690,7 @@
     43905@@ -8672,7 +8694,7 @@
    3830043906     {
    3830143907        temp = curwin->w_cursor.col;
     
    3830643912        else
    3830743913            curwin->w_cursor.col = temp;
    38308 @@ -8747,8 +8765,8 @@
     43914@@ -8747,8 +8769,8 @@
    3830943915                ((curwin->w_cursor.lnum == 1 && curwin->w_cursor.col == 0)
    3831043916                    || (!can_bs(BS_START)
     
    3831743923                                         && curwin->w_cursor.col <= ai_col)
    3831843924                    || (!can_bs(BS_EOL) && curwin->w_cursor.col == 0))))
    38319 @@ -8799,8 +8817,8 @@
     43925@@ -8799,8 +8821,8 @@
    3832043926      */
    3832143927     if (curwin->w_cursor.col == 0)
     
    3832843934                        || revins_on
    3832943935 #endif
    38330 @@ -8809,8 +8827,8 @@
     43936@@ -8809,8 +8831,8 @@
    3833143937            if (u_save((linenr_T)(curwin->w_cursor.lnum - 2),
    3833243938                               (linenr_T)(curwin->w_cursor.lnum + 1)) == FAIL)
     
    3833943945        /*
    3834043946         * In replace mode:
    38341 @@ -8853,7 +8871,7 @@
     43947@@ -8853,7 +8875,7 @@
    3834243948                        ptr[len - 1] = NUL;
    3834343949                }
     
    3834843954                    inc_cursor();
    3834943955            }
    38350 @@ -8946,7 +8964,7 @@
     43956@@ -8946,7 +8968,7 @@
    3835143957 
    3835243958            *inserted_space_p = FALSE;
     
    3835743963                ts = (int)get_sts_value();
    3835843964            /* Compute the virtual column where we want to be.  Since
    38359 @@ -8968,9 +8986,9 @@
     43965@@ -8968,9 +8990,9 @@
    3836043966            while (vcol < want_vcol)
    3836143967            {
     
    3837043976 #ifdef FEAT_VREPLACE
    3837143977                if (State & VREPLACE_FLAG)
    38372 @@ -9058,8 +9076,8 @@
     43978@@ -9058,8 +9080,8 @@
    3837343979                revins_on ||
    3837443980 #endif
     
    3838143987     }
    3838243988 #ifdef FEAT_SMARTINDENT
    38383 @@ -9077,9 +9095,9 @@
     43989@@ -9077,9 +9099,9 @@
    3838443990     AppendCharToRedobuff(c);
    3838543991 
     
    3839444000     /* vi behaviour: the cursor moves backward but the character that
    3839544001      *              was there remains visible
    38396 @@ -9635,7 +9653,7 @@
     44002@@ -9635,7 +9657,7 @@
    3839744003      * When nothing special, insert TAB like a normal character
    3839844004      */
     
    3840344009        return TRUE;
    3840444010 
    38405 @@ -9651,7 +9669,7 @@
     44011@@ -9651,7 +9673,7 @@
    3840644012     AppendToRedobuff((char_u *)"\t");
    3840744013 
     
    3841244018        temp = (int)get_sts_value();
    3841344019     else                       /* otherwise use 'tabstop' */
     44020@@ -9740,11 +9762,11 @@
     44021        getvcol(curwin, &fpos, &vcol, NULL, NULL);
     44022        getvcol(curwin, cursor, &want_vcol, NULL, NULL);
     44023 
     44024-       /* Use as many TABs as possible.  Beware of 'showbreak' and
     44025-        * 'linebreak' adding extra virtual columns. */
     44026+       /* Use as many TABs as possible.  Beware of 'breakindent', 'showbreak'
     44027+        * and 'linebreak' adding extra virtual columns. */
     44028        while (vim_iswhite(*ptr))
     44029        {
     44030-           i = lbr_chartabsize((char_u *)"\t", vcol);
     44031+           i = lbr_chartabsize(NULL, (char_u *)"\t", vcol);
     44032            if (vcol + i > want_vcol)
     44033                break;
     44034            if (*ptr != TAB)
     44035@@ -9766,11 +9788,12 @@
     44036        if (change_col >= 0)
     44037        {
     44038            int repl_off = 0;
     44039+           char_u *line = ptr;
     44040 
     44041            /* Skip over the spaces we need. */
     44042            while (vcol < want_vcol && *ptr == ' ')
     44043            {
     44044-               vcol += lbr_chartabsize(ptr, vcol);
     44045+               vcol += lbr_chartabsize(line, ptr, vcol);
     44046                ++ptr;
     44047                ++repl_off;
     44048            }
     44049@@ -10011,6 +10034,7 @@
     44050     int            c;
     44051     int            temp;
     44052     char_u  *ptr, *prev_ptr;
     44053+    char_u  *line;
     44054 
     44055     if (lnum < 1 || lnum > curbuf->b_ml.ml_line_count)
     44056     {
     44057@@ -10020,13 +10044,13 @@
     44058 
     44059     /* try to advance to the cursor column */
     44060     temp = 0;
     44061-    ptr = ml_get(lnum);
     44062+    line = ptr = ml_get(lnum);
     44063     prev_ptr = ptr;
     44064     validate_virtcol();
     44065     while ((colnr_T)temp < curwin->w_virtcol && *ptr != NUL)
     44066     {
     44067        prev_ptr = ptr;
     44068-       temp += lbr_chartabsize_adv(&ptr, (colnr_T)temp);
     44069+       temp += lbr_chartabsize_adv(line, &ptr, (colnr_T)temp);
     44070     }
     44071     if ((colnr_T)temp > curwin->w_virtcol)
     44072        ptr = prev_ptr;
    3841444073diff -Naur vim74.orig/src/eval.c vim74/src/eval.c
    3841544074--- vim74.orig/src/eval.c       2013-07-05 16:23:42.000000000 +0000
    38416 +++ vim74/src/eval.c    2014-06-01 00:43:14.237480056 +0000
     44075+++ vim74/src/eval.c    2014-07-21 23:33:39.406801197 +0000
    3841744076@@ -125,9 +125,6 @@
    3841844077  */
     
    3842544084  * When recursively copying lists and dicts we need to remember which ones we
    3842644085  * have done to avoid endless recursiveness.  This unique ID is used for that.
    38427 @@ -156,6 +153,11 @@
     44086@@ -137,6 +134,9 @@
     44087 #define COPYID_INC 2
     44088 #define COPYID_MASK (~0x1)
     44089 
     44090+/* Abort conversion to string after a recursion error. */
     44091+static int  did_echo_string_emsg = FALSE;
     44092+
     44093 /*
     44094  * Array to hold the hashtab with variables local to each sourced script.
     44095  * Each item holds a variable (nameless) that points to the dict_T.
     44096@@ -156,6 +156,11 @@
    3842844097 /* Values for trans_function_name() argument: */
    3842944098 #define TFN_INT                1       /* internal function name OK */
     
    3843744106 /*
    3843844107  * Structure to hold info for a user function.
    38439 @@ -356,8 +358,10 @@
     44108@@ -356,8 +361,10 @@
    3844044109     {VV_NAME("mouse_col",       VAR_NUMBER), 0},
    3844144110     {VV_NAME("operator",        VAR_STRING), VV_RO},
     
    3844844117 
    3844944118 /* shorthand */
    38450 @@ -389,7 +393,7 @@
     44119@@ -389,7 +396,7 @@
    3845144120 static char_u *list_arg_vars __ARGS((exarg_T *eap, char_u *arg, int *first));
    3845244121 static char_u *ex_let_one __ARGS((char_u *arg, typval_T *tv, int copy, char_u *endchars, char_u *op));
     
    3845744126 static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
    3845844127 static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u  *op));
    38459 @@ -444,7 +448,7 @@
     44128@@ -444,7 +451,7 @@
    3846044129 #endif
    3846144130 static int get_env_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
     
    3846644135 static int call_func __ARGS((char_u *funcname, int len, typval_T *rettv, int argcount, typval_T *argvars, linenr_T firstline, linenr_T lastline, int *doesrange, int evaluate, dict_T *selfdict));
    3846744136 static void emsg_funcname __ARGS((char *ermsg, char_u *name));
    38468 @@ -459,6 +463,7 @@
     44137@@ -459,6 +466,7 @@
    3846944138 static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
    3847044139 static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
     
    3847444143 #ifdef FEAT_FLOAT
    3847544144 static void f_asin __ARGS((typval_T *argvars, typval_T *rettv));
    38476 @@ -474,7 +479,9 @@
     44145@@ -474,7 +482,9 @@
    3847744146 static void f_bufnr __ARGS((typval_T *argvars, typval_T *rettv));
    3847844147 static void f_bufwinnr __ARGS((typval_T *argvars, typval_T *rettv));
     
    3848444153 #ifdef FEAT_FLOAT
    3848544154 static void f_ceil __ARGS((typval_T *argvars, typval_T *rettv));
    38486 @@ -508,6 +515,7 @@
     44155@@ -508,6 +518,7 @@
    3848744156 static void f_eval __ARGS((typval_T *argvars, typval_T *rettv));
    3848844157 static void f_eventhandler __ARGS((typval_T *argvars, typval_T *rettv));
     
    3849244161 #ifdef FEAT_FLOAT
    3849344162 static void f_exp __ARGS((typval_T *argvars, typval_T *rettv));
    38494 @@ -552,6 +560,7 @@
     44163@@ -552,6 +563,7 @@
    3849544164 static void f_getline __ARGS((typval_T *argvars, typval_T *rettv));
    3849644165 static void f_getmatches __ARGS((typval_T *argvars, typval_T *rettv));
     
    3850044169 static void f_getqflist __ARGS((typval_T *argvars, typval_T *rettv));
    3850144170 static void f_getreg __ARGS((typval_T *argvars, typval_T *rettv));
    38502 @@ -719,6 +728,7 @@
     44171@@ -610,6 +622,7 @@
     44172 static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
     44173 static void f_match __ARGS((typval_T *argvars, typval_T *rettv));
     44174 static void f_matchadd __ARGS((typval_T *argvars, typval_T *rettv));
     44175+static void f_matchaddpos __ARGS((typval_T *argvars, typval_T *rettv));
     44176 static void f_matcharg __ARGS((typval_T *argvars, typval_T *rettv));
     44177 static void f_matchdelete __ARGS((typval_T *argvars, typval_T *rettv));
     44178 static void f_matchend __ARGS((typval_T *argvars, typval_T *rettv));
     44179@@ -719,6 +732,7 @@
    3850344180 static void f_synstack __ARGS((typval_T *argvars, typval_T *rettv));
    3850444181 static void f_synconcealed __ARGS((typval_T *argvars, typval_T *rettv));
     
    3850844185 static void f_tabpagenr __ARGS((typval_T *argvars, typval_T *rettv));
    3850944186 static void f_tabpagewinnr __ARGS((typval_T *argvars, typval_T *rettv));
    38510 @@ -739,6 +749,7 @@
     44187@@ -739,6 +753,7 @@
    3851144188 static void f_type __ARGS((typval_T *argvars, typval_T *rettv));
    3851244189 static void f_undofile __ARGS((typval_T *argvars, typval_T *rettv));
     
    3851644193 static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv));
    3851744194 static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv));
    38518 @@ -755,7 +766,7 @@
     44195@@ -755,7 +770,7 @@
    3851944196 static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
    3852044197 static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
     
    3852544202 static int get_env_len __ARGS((char_u **arg));
    3852644203 static int get_id_len __ARGS((char_u **arg));
    38527 @@ -767,7 +778,7 @@
     44204@@ -767,7 +782,7 @@
    3852844205 static char_u * make_expanded_name __ARGS((char_u *in_start, char_u *expr_start, char_u *expr_end, char_u *in_end));
    3852944206 static int eval_isnamec __ARGS((int c));
     
    3853444211 static typval_T *alloc_tv __ARGS((void));
    3853544212 static typval_T *alloc_string_tv __ARGS((char_u *string));
    38536 @@ -778,8 +789,8 @@
     44213@@ -778,8 +793,8 @@
    3853744214 static char_u *get_tv_string __ARGS((typval_T *varp));
    3853844215 static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
     
    3854544222 static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
    3854644223 static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
    38547 @@ -799,7 +810,7 @@
     44224@@ -799,7 +814,7 @@
    3854844225 static void list_func_head __ARGS((ufunc_T *fp, int indent));
    3854944226 static ufunc_T *find_func __ARGS((char_u *name));
     
    3855444231 static void func_do_profile __ARGS((ufunc_T *fp));
    3855544232 static void prof_sort_list __ARGS((FILE *fd, ufunc_T **sorttab, int st_len, char *title, int prefer_self));
    38556 @@ -828,6 +839,8 @@
     44233@@ -828,6 +843,8 @@
    3855744234 static int searchpair_cmn __ARGS((typval_T *argvars, pos_T *match_pos));
    3855844235 static int search_cmn __ARGS((typval_T *argvars, pos_T *match_pos, int *flagsp));
     
    3856344240 
    3856444241 #ifdef EBCDIC
    38565 @@ -869,6 +882,7 @@
     44242@@ -869,6 +886,7 @@
    3856644243            hash_add(&compat_hashtab, p->vv_di.di_key);
    3856744244     }
     
    3857144248 
    3857244249 #ifdef EBCDIC
    38573 @@ -915,12 +929,13 @@
     44250@@ -915,12 +933,13 @@
    3857444251     /* autoloaded script names */
    3857544252     ga_clear_strings(&ga_loaded);
     
    3858844265 
    3858944266     /* unreferenced lists and dicts */
    38590 @@ -1054,7 +1069,7 @@
     44267@@ -1054,7 +1073,7 @@
    3859144268     ga_init2(&redir_ga, (int)sizeof(char), 500);
    3859244269 
     
    3859744274     if (redir_endp == NULL || redir_lval->ll_name == NULL || *redir_endp != NUL)
    3859844275     {
    38599 @@ -1145,7 +1160,7 @@
     44276@@ -1145,7 +1164,7 @@
    3860044277            /* Call get_lval() again, if it's inside a Dict or List it may
    3860144278             * have changed. */
     
    3860644283                set_var_lval(redir_lval, redir_endp, &tv, FALSE, (char_u *)".");
    3860744284            clear_lval(redir_lval);
    38608 @@ -1848,8 +1863,9 @@
     44285@@ -1848,8 +1867,9 @@
    3860944286        return;
    3861044287     if (argend > arg && argend[-1] == '.')  /* for var.='str' */
     
    3861844295        /*
    3861944296         * ":let" without "=": list variables
    38620 @@ -1878,12 +1894,14 @@
     44297@@ -1878,12 +1898,14 @@
    3862144298     {
    3862244299        op[0] = '=';
     
    3863744314        if (eap->skip)
    3863844315            ++emsg_skip;
    38639 @@ -2234,7 +2252,7 @@
     44316@@ -2234,7 +2256,7 @@
    3864044317            {
    3864144318                if (tofree != NULL)
     
    3864644323                else
    3864744324                {
    38648 @@ -2445,7 +2463,7 @@
     44325@@ -2445,7 +2467,7 @@
    3864944326            p = get_tv_string_chk(tv);
    3865044327            if (p != NULL && op != NULL && *op == '.')
     
    3865544332                {
    3865644333                    p = ptofree = concat_str(s, p);
    38657 @@ -2469,7 +2487,7 @@
     44334@@ -2469,7 +2491,7 @@
    3865844335     {
    3865944336        lval_T  lv;
     
    3866444341        {
    3866544342            if (endchars != NULL && vim_strchr(endchars, *skipwhite(p)) == NULL)
    38666 @@ -2514,18 +2532,22 @@
     44343@@ -2514,18 +2536,22 @@
    3866744344  * "unlet" is TRUE for ":unlet": slightly different behavior when something is
    3866844345  * wrong; must end in space or cmd separator.
     
    3868944366 {
    3869044367     char_u     *p;
    38691 @@ -2539,6 +2561,7 @@
     44368@@ -2539,6 +2565,7 @@
    3869244369     char_u     *key = NULL;
    3869344370     int                len;
     
    3869744374     /* Clear everything in "lp". */
    3869844375     vim_memset(lp, 0, sizeof(lval_T));
    38699 @@ -2586,7 +2609,7 @@
     44376@@ -2586,7 +2613,7 @@
    3870044377 
    3870144378     cc = *p;
     
    3870644383        EMSG2(_(e_undefvar), lp->ll_name);
    3870744384     *p = cc;
    38708 @@ -2899,7 +2922,7 @@
     44385@@ -2899,7 +2926,7 @@
    3870944386 
    3871044387                /* handle +=, -= and .= */
     
    3871544392                    if (tv_op(&tv, rettv, op) == OK)
    3871644393                        set_var(lp->ll_name, &tv, FALSE);
    38717 @@ -3420,7 +3443,7 @@
     44394@@ -3420,7 +3447,7 @@
    3871844395 
    3871944396     /* If it is the name of a variable of type VAR_FUNC use its contents. */
     
    3872444401     /* Skip white space to allow ":call func ()".  Not good, but required for
    3872544402      * backward compatibility. */
    38726 @@ -3551,7 +3574,7 @@
     44403@@ -3551,7 +3578,7 @@
    3872744404     do
    3872844405     {
     
    3873344410        if (lv.ll_name == NULL)
    3873444411            error = TRUE;           /* error but continue parsing */
    38735 @@ -3704,7 +3727,7 @@
     44412@@ -3704,7 +3731,7 @@
    3873644413            ret = FAIL;
    3873744414        else
     
    3874244419                ret = FAIL;
    3874344420            else
    38744 @@ -4410,7 +4433,7 @@
     44421@@ -4410,7 +4437,7 @@
    3874544422                    if (rettv->v_type != var2.v_type)
    3874644423                        EMSG(_("E691: Can only compare List with List"));
     
    3875144428                    clear_tv(&var2);
    3875244429                    return FAIL;
    38753 @@ -5103,7 +5126,8 @@
     44430@@ -5103,7 +5130,8 @@
    3875444431                if (evaluate)
    3875544432                {
     
    3876144438                if (**arg != NUL)
    3876244439                    ++*arg;
    38763 @@ -5147,7 +5171,7 @@
     44440@@ -5147,7 +5175,7 @@
    3876444441            {
    3876544442                /* If "s" is the name of a variable of type VAR_FUNC
     
    3877044447                /* Invoke the function. */
    3877144448                ret = get_func_tv(s, len, rettv, arg,
    38772 @@ -5174,7 +5198,7 @@
     44449@@ -5174,7 +5202,7 @@
    3877344450                }
    3877444451            }
     
    3877944456                ret = OK;
    3878044457        }
    38781 @@ -5976,7 +6000,7 @@
     44458@@ -5976,7 +6004,7 @@
    3878244459     list_T  *l;
    3878344460     listitem_T *item;
     
    3878844465 }
    3878944466 
    38790 @@ -6413,6 +6437,16 @@
     44467@@ -6413,6 +6441,16 @@
    3879144468     if (ni == NULL)
    3879244469        return FAIL;
     
    3880544482        /* Append new item at end of list. */
    3880644483        list_append(l, ni);
    38807 @@ -6434,7 +6468,6 @@
     44484@@ -6434,7 +6472,6 @@
    3880844485        item->li_prev = ni;
    3880944486        ++l->lv_len;
     
    3881344490 
    3881444491 /*
    38815 @@ -6546,9 +6579,11 @@
     44492@@ -6546,9 +6583,11 @@
    3881644493 /*
    3881744494  * Remove items "item" to "item2" from list "l".
     
    3882644503     listitem_T *item;
    3882744504     listitem_T *item2;
    38828 @@ -7767,7 +7802,7 @@
     44505@@ -6651,6 +6690,8 @@
     44506        }
     44507 
     44508        line_breakcheck();
     44509+       if (did_echo_string_emsg)  /* recursion error, bail out */
     44510+           break;
     44511     }
     44512 
     44513     /* Allocate result buffer with its total size, avoid re-allocation and
     44514@@ -7425,8 +7466,10 @@
     44515            if (s != NULL)
     44516                ga_concat(&ga, s);
     44517            vim_free(tofree);
     44518-           if (s == NULL)
     44519+           if (s == NULL || did_echo_string_emsg)
     44520                break;
     44521+           line_breakcheck();
     44522+
     44523        }
     44524     }
     44525     if (todo > 0)
     44526@@ -7584,9 +7627,16 @@
     44527 
     44528     if (recurse >= DICT_MAXNEST)
     44529     {
     44530-       EMSG(_("E724: variable nested too deep for displaying"));
     44531+       if (!did_echo_string_emsg)
     44532+       {
     44533+           /* Only give this message once for a recursive call to avoid
     44534+            * flooding the user with errors.  And stop iterating over lists
     44535+            * and dicts. */
     44536+           did_echo_string_emsg = TRUE;
     44537+           EMSG(_("E724: variable nested too deep for displaying"));
     44538+       }
     44539        *tofree = NULL;
     44540-       return NULL;
     44541+       return (char_u *)"{E724}";
     44542     }
     44543     ++recurse;
     44544 
     44545@@ -7654,7 +7704,8 @@
     44546            *tofree = NULL;
     44547     }
     44548 
     44549-    --recurse;
     44550+    if (--recurse == 0)
     44551+       did_echo_string_emsg = FALSE;
     44552     return r;
     44553 }
     44554 
     44555@@ -7767,7 +7818,7 @@
    3882944556  * Get the value of an environment variable.
    3883044557  * "arg" is pointing to the '$'.  It is advanced to after the name.
     
    3883544562     static int
    3883644563 get_env_tv(arg, rettv, evaluate)
    38837 @@ -7786,32 +7821,33 @@
     44564@@ -7786,32 +7837,33 @@
    3883844565     len = get_env_len(arg);
    3883944566     if (evaluate)
     
    3889144618        rettv->vval.v_string = string;
    3889244619     }
    38893 @@ -7841,6 +7877,7 @@
     44620@@ -7841,6 +7893,7 @@
    3889444621     {"append",         2, 2, f_append},
    3889544622     {"argc",           0, 0, f_argc},
     
    3889944626 #ifdef FEAT_FLOAT
    3890044627     {"asin",           1, 1, f_asin},  /* WJMc */
    38901 @@ -7860,6 +7897,7 @@
     44628@@ -7860,6 +7913,7 @@
    3890244629     {"bufwinnr",       1, 1, f_bufwinnr},
    3890344630     {"byte2line",      1, 1, f_byte2line},
     
    3890744634 #ifdef FEAT_FLOAT
    3890844635     {"ceil",           1, 1, f_ceil},
    38909 @@ -7893,6 +7931,7 @@
     44636@@ -7893,6 +7947,7 @@
    3891044637     {"eval",           1, 1, f_eval},
    3891144638     {"eventhandler",   0, 0, f_eventhandler},
     
    3891544642 #ifdef FEAT_FLOAT
    3891644643     {"exp",            1, 1, f_exp},
    38917 @@ -7929,6 +7968,7 @@
     44644@@ -7929,6 +7984,7 @@
    3891844645     {"getcmdline",     0, 0, f_getcmdline},
    3891944646     {"getcmdpos",      0, 0, f_getcmdpos},
     
    3892344650     {"getfontname",    0, 1, f_getfontname},
    3892444651     {"getfperm",       1, 1, f_getfperm},
    38925 @@ -7941,7 +7981,7 @@
     44652@@ -7941,7 +7997,7 @@
    3892644653     {"getpid",         0, 0, f_getpid},
    3892744654     {"getpos",         1, 1, f_getpos},
     
    3893244659     {"gettabvar",      2, 3, f_gettabvar},
    3893344660     {"gettabwinvar",   3, 4, f_gettabwinvar},
    38934 @@ -7949,7 +7989,7 @@
     44661@@ -7949,7 +8005,7 @@
    3893544662     {"getwinposy",     0, 0, f_getwinposy},
    3893644663     {"getwinvar",      2, 3, f_getwinvar},
     
    3894144668     {"has_key",                2, 2, f_has_key},
    3894244669     {"haslocaldir",    0, 0, f_haslocaldir},
    38943 @@ -7992,7 +8032,7 @@
     44670@@ -7992,13 +8048,14 @@
    3894444671     {"log10",          1, 1, f_log10},
    3894544672 #endif
     
    3895044677     {"map",            2, 2, f_map},
    3895144678     {"maparg",         1, 4, f_maparg},
    38952 @@ -8100,7 +8140,7 @@
     44679     {"mapcheck",       1, 3, f_mapcheck},
     44680     {"match",          2, 4, f_match},
     44681     {"matchadd",       2, 4, f_matchadd},
     44682+    {"matchaddpos",    2, 4, f_matchaddpos},
     44683     {"matcharg",       1, 1, f_matcharg},
     44684     {"matchdelete",    1, 1, f_matchdelete},
     44685     {"matchend",       2, 4, f_matchend},
     44686@@ -8100,7 +8157,7 @@
    3895344687     {"strridx",                2, 3, f_strridx},
    3895444688     {"strtrans",       1, 1, f_strtrans},
     
    3895944693     {"synID",          3, 3, f_synID},
    3896044694     {"synIDattr",      2, 3, f_synIDattr},
    38961 @@ -8108,6 +8148,7 @@
     44695@@ -8108,6 +8165,7 @@
    3896244696     {"synconcealed",   2, 2, f_synconcealed},
    3896344697     {"synstack",       2, 2, f_synstack},
     
    3896744701     {"tabpagenr",      0, 1, f_tabpagenr},
    3896844702     {"tabpagewinnr",   1, 2, f_tabpagewinnr},
    38969 @@ -8128,6 +8169,7 @@
     44703@@ -8128,6 +8186,7 @@
    3897044704     {"type",           1, 1, f_type},
    3897144705     {"undofile",       1, 1, f_undofile},
     
    3897544709     {"virtcol",                1, 1, f_virtcol},
    3897644710     {"visualmode",     0, 1, f_visualmode},
    38977 @@ -8269,16 +8311,17 @@
     44711@@ -8269,16 +8328,17 @@
    3897844712  * name it contains, otherwise return "name".
    3897944713  */
     
    3899544729     if (v != NULL && v->di_tv.v_type == VAR_FUNC)
    3899644730     {
    38997 @@ -8449,33 +8492,39 @@
     44731@@ -8449,33 +8509,39 @@
    3899844732     /* execute the function if no errors detected and executing */
    3899944733     if (evaluate && error == ERROR_NONE)
     
    3904144775 
    3904244776            if (fp != NULL)
    39043 @@ -8814,6 +8863,41 @@
     44777@@ -8814,6 +8880,41 @@
    3904444778 }
    3904544779 
     
    3908344817  */
    3908444818     static void
    39085 @@ -9176,13 +9260,11 @@
     44819@@ -9176,13 +9277,11 @@
    3908644820 #endif
    3908744821 }
     
    3909944833 #ifdef FEAT_MBYTE
    3910044834     char_u     *t;
    39101 @@ -9202,7 +9284,10 @@
     44835@@ -9202,7 +9301,10 @@
    3910244836     {
    3910344837        if (*t == NUL)          /* EOL reached */
     
    3911144845     rettv->vval.v_number = (varnumber_T)(t - str);
    3911244846 #else
    39113 @@ -9211,6 +9296,28 @@
     44847@@ -9211,6 +9313,28 @@
    3911444848 #endif
    3911544849 }
     
    3914044874 func_call(name, args, selfdict, rettv)
    3914144875     char_u     *name;
    39142 @@ -9731,14 +9838,17 @@
     44876@@ -9731,14 +9855,17 @@
    3914344877     if (argvars[1].v_type == VAR_UNKNOWN)
    3914444878     {
     
    3915944893     else
    3916044894     {
    39161 @@ -9994,7 +10104,22 @@
     44895@@ -9994,7 +10121,22 @@
    3916244896     typval_T   *argvars;
    3916344897     typval_T   *rettv;
     
    3918344917 
    3918444918 /*
    39185 @@ -10010,8 +10135,6 @@
     44919@@ -10010,8 +10152,6 @@
    3918644920     int                n = FALSE;
    3918744921     int                len = 0;
     
    3919244926     if (*p == '$')                     /* environment variable */
    3919344927     {
    39194 @@ -10062,7 +10185,7 @@
     44928@@ -10062,7 +10202,7 @@
    3919544929        {
    3919644930            if (tofree != NULL)
     
    3920144935            {
    3920244936                /* handle d.key, l[idx], f(expr) */
    39203 @@ -10078,8 +10201,6 @@
     44937@@ -10078,8 +10218,6 @@
    3920444938     }
    3920544939 
     
    3921044944 
    3921144945 #ifdef FEAT_FLOAT
    39212 @@ -11090,6 +11211,8 @@
     44946@@ -11090,6 +11228,8 @@
    3921344947 {
    3921444948     char_u     *p;
     
    3921944953        return;
    3922044954 
    39221 @@ -11102,8 +11225,6 @@
     44955@@ -11102,8 +11242,6 @@
    3922244956            p = ml_get_buf(buf, start, FALSE);
    3922344957        else
     
    3922844962     }
    3922944963     else
    39230 @@ -11234,13 +11355,14 @@
     44964@@ -11234,13 +11372,14 @@
    3923144965            n = safe_vgetc();
    3923244966        else if (get_tv_number_chk(&argvars[0], &error) == 1)
     
    3924544979            continue;
    3924644980        break;
    39247 @@ -11660,6 +11782,19 @@
     44981@@ -11630,6 +11769,7 @@
     44982 #ifdef FEAT_SEARCH_EXTRA
     44983     dict_T     *dict;
     44984     matchitem_T        *cur = curwin->w_match_head;
     44985+    int                i;
     44986 
     44987     if (rettv_list_alloc(rettv) == OK)
     44988     {
     44989@@ -11638,8 +11778,36 @@
     44990            dict = dict_alloc();
     44991            if (dict == NULL)
     44992                return;
     44993+           if (cur->match.regprog == NULL)
     44994+           {
     44995+               /* match added with matchaddpos() */
     44996+               for (i = 0; i < MAXPOSMATCH; ++i)
     44997+               {
     44998+                   llpos_T     *llpos;
     44999+                   char        buf[6];
     45000+                   list_T      *l;
     45001+
     45002+                   llpos = &cur->pos.pos[i];
     45003+                   if (llpos->lnum == 0)
     45004+                       break;
     45005+                   l = list_alloc();
     45006+                   if (l == NULL)
     45007+                       break;
     45008+                   list_append_number(l, (varnumber_T)llpos->lnum);
     45009+                   if (llpos->col > 0)
     45010+                   {
     45011+                       list_append_number(l, (varnumber_T)llpos->col);
     45012+                       list_append_number(l, (varnumber_T)llpos->len);
     45013+                   }
     45014+                   sprintf(buf, "pos%d", i + 1);
     45015+                   dict_add_list(dict, buf, l);
     45016+               }
     45017+           }
     45018+           else
     45019+           {
     45020+               dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
     45021+           }
     45022            dict_add_nr_str(dict, "group", 0L, syn_id2name(cur->hlg_id));
     45023-           dict_add_nr_str(dict, "pattern", 0L, cur->pattern);
     45024            dict_add_nr_str(dict, "priority", (long)cur->priority, NULL);
     45025            dict_add_nr_str(dict, "id", (long)cur->id, NULL);
     45026            list_append_dict(rettv->vval.v_list, dict);
     45027@@ -11660,6 +11828,19 @@
    3924845028     rettv->vval.v_number = mch_get_pid();
    3924945029 }
     
    3926545045  * "getpos(string)" function
    3926645046  */
    39267 @@ -11668,6 +11803,15 @@
     45047@@ -11668,6 +11849,15 @@
    3926845048     typval_T   *argvars;
    3926945049     typval_T   *rettv;
     
    3928145061     list_T     *l;
    3928245062     int                fnum = -1;
    39283 @@ -11675,7 +11819,10 @@
     45063@@ -11675,7 +11865,10 @@
    3928445064     if (rettv_list_alloc(rettv) == OK)
    3928545065     {
     
    3929345073            list_append_number(l, (varnumber_T)fnum);
    3929445074        else
    39295 @@ -11690,6 +11837,8 @@
     45075@@ -11690,6 +11883,8 @@
    3929645076                                (fp != NULL) ? (varnumber_T)fp->coladd :
    3929745077 #endif
     
    3930245082     else
    3930345083        rettv->vval.v_number = FALSE;
    39304 @@ -11734,6 +11883,7 @@
     45084@@ -11734,6 +11929,7 @@
    3930545085     char_u     *strregname;
    3930645086     int                regname;
     
    3931045090 
    3931145091     if (argvars[0].v_type != VAR_UNKNOWN)
    39312 @@ -11741,17 +11891,34 @@
     45092@@ -11741,17 +11937,34 @@
    3931345093        strregname = get_tv_string_chk(&argvars[0]);
    3931445094        error = strregname == NULL;
     
    3934845128 
    3934945129 /*
    39350 @@ -11791,12 +11958,10 @@
     45130@@ -11791,12 +12004,10 @@
    3935145131     {
    3935245132        case MLINE: buf[0] = 'V'; break;
     
    3936145141     rettv->v_type = VAR_STRING;
    3936245142     rettv->vval.v_string = vim_strsave(buf);
    39363 @@ -12056,18 +12221,37 @@
     45143@@ -12056,18 +12267,37 @@
    3936445144     char_u     buf1[NUMBUFLEN];
    3936545145     char_u     *file = get_tv_string_buf_chk(&argvars[1], buf1);
     
    3940645186 
    3940745187 /*
    39408 @@ -12135,6 +12319,9 @@
     45188@@ -12135,6 +12365,9 @@
    3940945189 #ifndef CASE_INSENSITIVE_FILENAME
    3941045190        "fname_case",
     
    3941645196        "arabic",
    3941745197 #endif
    39418 @@ -12507,9 +12694,7 @@
     45198@@ -12507,9 +12740,7 @@
    3941945199 #ifdef FEAT_VIRTUALEDIT
    3942045200        "virtualedit",
     
    3942645206        "visualextra",
    3942745207 #endif
    39428 @@ -12538,7 +12723,12 @@
     45208@@ -12538,7 +12769,12 @@
    3942945209        "xfontset",
    3943045210 #endif
     
    3944045220 #ifdef USE_XSMP
    3944145221        "xsmp",
    39442 @@ -12569,7 +12759,26 @@
     45222@@ -12569,7 +12805,26 @@
    3944345223     if (n == FALSE)
    3944445224     {
     
    3946845248            n = (starting != 0);
    3946945249 #ifdef FEAT_MBYTE
    39470 @@ -13045,9 +13254,18 @@
     45250@@ -13045,9 +13300,18 @@
    3947145251        }
    3947245252 
     
    3948745267                && argvars[1].v_type != VAR_UNKNOWN
    3948845268                && argvars[2].v_type != VAR_UNKNOWN)
    39489 @@ -13298,8 +13516,8 @@
     45269@@ -13298,8 +13562,8 @@
    3949045270     dictitem_T *di;
    3949145271 
     
    3949845278     {
    3949945279        if (*end != NUL)
    39500 @@ -13312,7 +13530,7 @@
     45280@@ -13312,7 +13576,7 @@
    3950145281                    rettv->vval.v_number = 1;       /* always locked */
    3950245282                else
     
    3950745287                    {
    3950845288                        /* Consider a variable locked when:
    39509 @@ -13846,6 +14064,7 @@
     45289@@ -13846,6 +14110,7 @@
    3951045290     int                type;
    3951145291 {
     
    3951545295     char_u     *pat;
    3951645296     regmatch_T regmatch;
    39517 @@ -13885,7 +14104,10 @@
     45297@@ -13885,7 +14150,10 @@
    3951845298        li = l->lv_first;
    3951945299     }
     
    3952645306     pat = get_tv_string_buf_chk(&argvars[1], patbuf);
    3952745307     if (pat == NULL)
    39528 @@ -13909,7 +14131,7 @@
     45308@@ -13909,7 +14177,7 @@
    3952945309        {
    3953045310            if (start < 0)
     
    3953545315            /* When "count" argument is there ignore matches before "start",
    3953645316             * otherwise skip part of the string.  Differs when pattern is "^"
    39537 @@ -13917,7 +14139,10 @@
     45317@@ -13917,7 +14185,10 @@
    3953845318            if (argvars[3].v_type != VAR_UNKNOWN)
    3953945319                startcol = start;
     
    3954645326 
    3954745327        if (argvars[3].v_type != VAR_UNKNOWN)
    39548 @@ -13967,6 +14192,12 @@
     45328@@ -13967,6 +14238,12 @@
    3954945329 #else
    3955045330                startcol = (colnr_T)(regmatch.startp[0] + 1 - str);
     
    3955945339        }
    3956045340 
    39561 @@ -14095,8 +14326,8 @@
     45341@@ -14067,7 +14344,58 @@
     45342        return;
     45343     }
     45344 
     45345-    rettv->vval.v_number = match_add(curwin, grp, pat, prio, id);
     45346+    rettv->vval.v_number = match_add(curwin, grp, pat, prio, id, NULL);
     45347+#endif
     45348+}
     45349+
     45350+/*
     45351+ * "matchaddpos()" function
     45352+ */
     45353+    static void
     45354+f_matchaddpos(argvars, rettv)
     45355+    typval_T   *argvars UNUSED;
     45356+    typval_T   *rettv UNUSED;
     45357+{
     45358+#ifdef FEAT_SEARCH_EXTRA
     45359+    char_u     buf[NUMBUFLEN];
     45360+    char_u     *group;
     45361+    int                prio = 10;
     45362+    int                id = -1;
     45363+    int                error = FALSE;
     45364+    list_T     *l;
     45365+
     45366+    rettv->vval.v_number = -1;
     45367+
     45368+    group = get_tv_string_buf_chk(&argvars[0], buf);
     45369+    if (group == NULL)
     45370+       return;
     45371+
     45372+    if (argvars[1].v_type != VAR_LIST)
     45373+    {
     45374+       EMSG2(_(e_listarg), "matchaddpos()");
     45375+       return;
     45376+    }
     45377+    l = argvars[1].vval.v_list;
     45378+    if (l == NULL)
     45379+       return;
     45380+
     45381+    if (argvars[2].v_type != VAR_UNKNOWN)
     45382+    {
     45383+       prio = get_tv_number_chk(&argvars[2], &error);
     45384+       if (argvars[3].v_type != VAR_UNKNOWN)
     45385+           id = get_tv_number_chk(&argvars[3], &error);
     45386+    }
     45387+    if (error == TRUE)
     45388+       return;
     45389+
     45390+    /* id == 3 is ok because matchaddpos() is supposed to substitute :3match */
     45391+    if (id == 1 || id == 2)
     45392+    {
     45393+       EMSGN("E798: ID is reserved for \":match\": %ld", id);
     45394+       return;
     45395+    }
     45396+
     45397+    rettv->vval.v_number = match_add(curwin, group, NULL, prio, id, l);
     45398 #endif
     45399 }
     45400 
     45401@@ -14095,8 +14423,8 @@
    3956245402            }
    3956345403            else
     
    3957045410        }
    3957145411 #endif
    39572 @@ -14292,14 +14523,23 @@
     45412@@ -14292,14 +14620,23 @@
    3957345413        return;
    3957445414 
     
    3960045440 #endif
    3960145441 
    39602 @@ -14316,7 +14556,6 @@
     45442@@ -14316,7 +14653,6 @@
    3960345443     buf[1] = NUL;
    3960445444     buf[2] = NUL;
     
    3960845448     {
    3960945449        if (VIsual_select)
    39610 @@ -14324,9 +14563,7 @@
     45450@@ -14324,9 +14660,7 @@
    3961145451        else
    3961245452            buf[0] = VIsual_mode;
     
    3961945459     {
    3962045460        buf[0] = 'r';
    39621 @@ -15289,7 +15526,7 @@
     45461@@ -15289,7 +15623,7 @@
    3962245462            if (argvars[2].v_type == VAR_UNKNOWN)
    3962345463            {
     
    3962845468                vim_free(item);
    3962945469            }
    39630 @@ -15315,7 +15552,7 @@
     45470@@ -15315,7 +15649,7 @@
    3963145471                        EMSG(_(e_invrange));
    3963245472                    else
     
    3963745477                        {
    3963845478                            l = rettv->vval.v_list;
    39639 @@ -16583,12 +16820,13 @@
     45479@@ -16564,7 +16898,7 @@
     45480            match_add(curwin, get_dict_string(d, (char_u *)"group", FALSE),
     45481                    get_dict_string(d, (char_u *)"pattern", FALSE),
     45482                    (int)get_dict_number(d, (char_u *)"priority"),
     45483-                   (int)get_dict_number(d, (char_u *)"id"));
     45484+                   (int)get_dict_number(d, (char_u *)"id"), NULL);
     45485            li = li->li_next;
     45486        }
     45487        rettv->vval.v_number = 0;
     45488@@ -16583,12 +16917,13 @@
    3964045489     pos_T      pos;
    3964145490     int                fnum;
     
    3965245501            if (--pos.col < 0)
    3965345502                pos.col = 0;
    39654 @@ -16598,6 +16836,8 @@
     45503@@ -16598,6 +16933,8 @@
    3965545504                if (fnum == curbuf->b_fnum)
    3965645505                {
     
    3966145510                    rettv->vval.v_number = 0;
    3966245511                }
    39663 @@ -16655,8 +16895,6 @@
     45512@@ -16655,8 +16992,6 @@
    3966445513     regname = *strregname;
    3966545514     if (regname == 0 || regname == '@')
     
    3967045519     if (argvars[2].v_type != VAR_UNKNOWN)
    3967145520     {
    39672 @@ -16675,7 +16913,6 @@
     45521@@ -16675,7 +17010,6 @@
    3967345522                case 'V': case 'l':     /* line-wise selection */
    3967445523                    yank_type = MLINE;
     
    3967845527                    yank_type = MBLOCK;
    3967945528                    if (VIM_ISDIGIT(stropt[1]))
    39680 @@ -16685,14 +16922,62 @@
     45529@@ -16685,20 +17019,68 @@
    3968145530                        --stropt;
    3968245531                    }
     
    3968845537-    strval = get_tv_string_chk(&argvars[1]);
    3968945538-    if (strval != NULL)
     45539-       write_reg_contents_ex(regname, strval, -1,
     45540-                                               append, yank_type, block_len);
     45541-    rettv->vval.v_number = 0;
     45542-}
    3969045543+    if (argvars[1].v_type == VAR_LIST)
    3969145544+    {
     
    3969745550+       int             len = argvars[1].vval.v_list->lv_len;
    3969845551+       listitem_T      *li;
    39699 +
     45552 
     45553-/*
     45554- * "settabvar()" function
     45555- */
    3970045556+       /* First half: use for pointers to result lines; second half: use for
    3970145557+        * pointers to allocated copies. */
     
    3973845594+       if (strval == NULL)
    3973945595+           return;
    39740         write_reg_contents_ex(regname, strval, -1,
    39741                                                 append, yank_type, block_len);
     45596+       write_reg_contents_ex(regname, strval, -1,
     45597+                                               append, yank_type, block_len);
    3974245598+    }
    39743      rettv->vval.v_number = 0;
    39744  }
    39745  
    39746 @@ -16869,7 +17154,7 @@
     45599+    rettv->vval.v_number = 0;
     45600+}
     45601+
     45602+/*
     45603+ * "settabvar()" function
     45604+ */
     45605     static void
     45606 f_settabvar(argvars, rettv)
     45607     typval_T   *argvars;
     45608@@ -16869,7 +17251,7 @@
    3974745609     typval_T   *rettv;
    3974845610 {
     
    3975345615 }
    3975445616 
    39755 @@ -16881,7 +17166,7 @@
     45617@@ -16881,7 +17263,7 @@
    3975645618     typval_T   *argvars UNUSED;
    3975745619     typval_T   *rettv;
     
    3976245624 
    3976345625 /*
    39764 @@ -16951,10 +17236,11 @@
     45626@@ -16947,14 +17329,24 @@
     45627 #endif
     45628        item_compare2 __ARGS((const void *s1, const void *s2));
     45629 
     45630+/* struct used in the array that's given to qsort() */
     45631+typedef struct
     45632+{
     45633+    listitem_T *item;
     45634+    int                idx;
     45635+} sortItem_T;
     45636+
     45637 static int     item_compare_ic;
     45638+static int     item_compare_numeric;
    3976545639 static char_u  *item_compare_func;
    3976645640 static dict_T  *item_compare_selfdict;
    3976745641 static int     item_compare_func_err;
     45642+static int     item_compare_keep_zero;
    3976845643+static void    do_sort_uniq __ARGS((typval_T *argvars, typval_T *rettv, int sort));
    3976945644 #define ITEM_COMPARE_FAIL 999
     
    3977545650     static int
    3977645651 #ifdef __BORLANDC__
    39777 @@ -17028,9 +17314,10 @@
     45652@@ -16964,22 +17356,41 @@
     45653     const void *s1;
     45654     const void *s2;
     45655 {
     45656+    sortItem_T  *si1, *si2;
     45657     char_u     *p1, *p2;
     45658     char_u     *tofree1, *tofree2;
     45659     int                res;
     45660     char_u     numbuf1[NUMBUFLEN];
     45661     char_u     numbuf2[NUMBUFLEN];
     45662 
     45663-    p1 = tv2string(&(*(listitem_T **)s1)->li_tv, &tofree1, numbuf1, 0);
     45664-    p2 = tv2string(&(*(listitem_T **)s2)->li_tv, &tofree2, numbuf2, 0);
     45665+    si1 = (sortItem_T *)s1;
     45666+    si2 = (sortItem_T *)s2;
     45667+    p1 = tv2string(&si1->item->li_tv, &tofree1, numbuf1, 0);
     45668+    p2 = tv2string(&si2->item->li_tv, &tofree2, numbuf2, 0);
     45669     if (p1 == NULL)
     45670        p1 = (char_u *)"";
     45671     if (p2 == NULL)
     45672        p2 = (char_u *)"";
     45673-    if (item_compare_ic)
     45674-       res = STRICMP(p1, p2);
     45675+    if (!item_compare_numeric)
     45676+    {
     45677+       if (item_compare_ic)
     45678+           res = STRICMP(p1, p2);
     45679+       else
     45680+           res = STRCMP(p1, p2);
     45681+    }
     45682     else
     45683-       res = STRCMP(p1, p2);
     45684+    {
     45685+       double n1, n2;
     45686+       n1 = strtod((char *)p1, (char **)&p1);
     45687+       n2 = strtod((char *)p2, (char **)&p2);
     45688+       res = n1 == n2 ? 0 : n1 > n2 ? 1 : -1;
     45689+    }
     45690+
     45691+    /* When the result would be zero, compare the pointers themselves.  Makes
     45692+     * the sort stable. */
     45693+    if (res == 0 && !item_compare_keep_zero)
     45694+       res = si1->idx > si2->idx ? 1 : -1;
     45695+
     45696     vim_free(tofree1);
     45697     vim_free(tofree2);
     45698     return res;
     45699@@ -16993,6 +17404,7 @@
     45700     const void *s1;
     45701     const void *s2;
     45702 {
     45703+    sortItem_T  *si1, *si2;
     45704     int                res;
     45705     typval_T   rettv;
     45706     typval_T   argv[3];
     45707@@ -17002,10 +17414,13 @@
     45708     if (item_compare_func_err)
     45709        return 0;
     45710 
     45711-    /* copy the values.  This is needed to be able to set v_lock to VAR_FIXED
     45712+    si1 = (sortItem_T *)s1;
     45713+    si2 = (sortItem_T *)s2;
     45714+
     45715+    /* Copy the values.  This is needed to be able to set v_lock to VAR_FIXED
     45716      * in the copy without changing the original list items. */
     45717-    copy_tv(&(*(listitem_T **)s1)->li_tv, &argv[0]);
     45718-    copy_tv(&(*(listitem_T **)s2)->li_tv, &argv[1]);
     45719+    copy_tv(&si1->item->li_tv, &argv[0]);
     45720+    copy_tv(&si2->item->li_tv, &argv[1]);
     45721 
     45722     rettv.v_type = VAR_UNKNOWN;                /* clear_tv() uses this */
     45723     res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
     45724@@ -17021,6 +17436,12 @@
     45725     if (item_compare_func_err)
     45726        res = ITEM_COMPARE_FAIL;  /* return value has wrong type */
     45727     clear_tv(&rettv);
     45728+
     45729+    /* When the result would be zero, compare the pointers themselves.  Makes
     45730+     * the sort stable. */
     45731+    if (res == 0 && !item_compare_keep_zero)
     45732+       res = si1->idx > si2->idx ? 1 : -1;
     45733+
     45734     return res;
     45735 }
     45736 
     45737@@ -17028,23 +17449,24 @@
    3977845738  * "sort({list})" function
    3977945739  */
     
    3978745747     list_T     *l;
    3978845748     listitem_T *li;
    39789 @@ -17039,12 +17326,12 @@
     45749-    listitem_T **ptrs;
     45750+    sortItem_T *ptrs;
     45751     long       len;
    3979045752     long       i;
    3979145753 
     
    3980245764        rettv->vval.v_list = l;
    3980345765        rettv->v_type = VAR_LIST;
    39804 @@ -17091,29 +17378,72 @@
    39805         ptrs = (listitem_T **)alloc((int)(len * sizeof(listitem_T *)));
     45766@@ -17055,6 +17477,7 @@
     45767            return;     /* short list sorts pretty quickly */
     45768 
     45769        item_compare_ic = FALSE;
     45770+       item_compare_numeric = FALSE;
     45771        item_compare_func = NULL;
     45772        item_compare_selfdict = NULL;
     45773        if (argvars[1].v_type != VAR_UNKNOWN)
     45774@@ -17073,6 +17496,19 @@
     45775                    item_compare_ic = TRUE;
     45776                else
     45777                    item_compare_func = get_tv_string(&argvars[1]);
     45778+               if (item_compare_func != NULL)
     45779+               {
     45780+                   if (STRCMP(item_compare_func, "n") == 0)
     45781+                   {
     45782+                       item_compare_func = NULL;
     45783+                       item_compare_numeric = TRUE;
     45784+                   }
     45785+                   else if (STRCMP(item_compare_func, "i") == 0)
     45786+                   {
     45787+                       item_compare_func = NULL;
     45788+                       item_compare_ic = TRUE;
     45789+                   }
     45790+               }
     45791            }
     45792 
     45793            if (argvars[2].v_type != VAR_UNKNOWN)
     45794@@ -17088,32 +17524,81 @@
     45795        }
     45796 
     45797        /* Make an array with each entry pointing to an item in the List. */
     45798-       ptrs = (listitem_T **)alloc((int)(len * sizeof(listitem_T *)));
     45799+       ptrs = (sortItem_T *)alloc((int)(len * sizeof(sortItem_T)));
    3980645800        if (ptrs == NULL)
    3980745801            return;
    39808 -       i = 0;
     45802+
     45803        i = 0;
    3980945804-       for (li = l->lv_first; li != NULL; li = li->li_next)
    3981045805-           ptrs[i++] = li;
     45806+       if (sort)
     45807+       {
     45808+           /* sort(): ptrs will be the list to sort */
     45809+           for (li = l->lv_first; li != NULL; li = li->li_next)
     45810+           {
     45811+               ptrs[i].item = li;
     45812+               ptrs[i].idx = i;
     45813+               ++i;
     45814+           }
    3981145815 
    3981245816-       item_compare_func_err = FALSE;
     
    3981445818-       if (item_compare_func != NULL
    3981545819-               && item_compare2((void *)&ptrs[0], (void *)&ptrs[1])
    39816 +       i = 0;
    39817 +       if (sort)
    39818 +       {
    39819 +           /* sort(): ptrs will be the list to sort */
    39820 +           for (li = l->lv_first; li != NULL; li = li->li_next)
    39821 +               ptrs[i++] = li;
    39822 +
    3982345820+           item_compare_func_err = FALSE;
     45821+           item_compare_keep_zero = FALSE;
    3982445822+           /* test the compare function */
    3982545823+           if (item_compare_func != NULL
     
    3983145829+           {
    3983245830+               /* Sort the array with item pointers. */
    39833 +               qsort((void *)ptrs, (size_t)len, sizeof(listitem_T *),
     45831+               qsort((void *)ptrs, (size_t)len, sizeof(sortItem_T),
    3983445832+                   item_compare_func == NULL ? item_compare : item_compare2);
    3983545833+
     
    3984045838+                   l->lv_len = 0;
    3984145839+                   for (i = 0; i < len; ++i)
    39842 +                       list_append(l, ptrs[i]);
     45840+                       list_append(l, ptrs[i].item);
    3984345841+               }
    3984445842+           }
     
    3985345851+           /* f_uniq(): ptrs will be a stack of items to remove */
    3985445852+           item_compare_func_err = FALSE;
     45853+           item_compare_keep_zero = TRUE;
    3985545854+           item_compare_func_ptr = item_compare_func
    3985645855+                                              ? item_compare2 : item_compare;
     
    3986145860+               if (item_compare_func_ptr((void *)&li, (void *)&li->li_next)
    3986245861+                                                                        == 0)
    39863 +                   ptrs[i++] = li;
     45862+                   ptrs[i++].item = li;
    3986445863+               if (item_compare_func_err)
    3986545864+               {
     
    3987845877+               while (--i >= 0)
    3987945878+               {
    39880 +                   li = ptrs[i]->li_next;
    39881 +                   ptrs[i]->li_next = li->li_next;
     45879+                   li = ptrs[i].item->li_next;
     45880+                   ptrs[i].item->li_next = li->li_next;
    3988245881+                   if (li->li_next != NULL)
    39883 +                       li->li_next->li_prev = ptrs[i];
     45882+                       li->li_next->li_prev = ptrs[i].item;
    3988445883+                   else
    39885 +                       l->lv_last = ptrs[i];
     45884+                       l->lv_last = ptrs[i].item;
    3988645885+                   list_fix_watch(l, li);
    3988745886+                   listitem_free(li);
     
    3989145890        }
    3989245891 
    39893 @@ -17122,6 +17452,28 @@
     45892@@ -17122,6 +17607,28 @@
    3989445893 }
    3989545894 
     
    3992045919  */
    3992145920     static void
    39922 @@ -17709,9 +18061,29 @@
     45921@@ -17709,9 +18216,29 @@
    3992345922     typval_T   *argvars;
    3992445923     typval_T   *rettv;
     
    3995345952 
    3995445953 /*
    39955 @@ -17979,13 +18351,11 @@
     45954@@ -17979,13 +18506,11 @@
    3995645955 #endif
    3995745956 }
     
    3996945968     char_u     *res = NULL;
    3997045969     char_u     *p;
    39971 @@ -17993,9 +18363,12 @@
     45970@@ -17993,9 +18518,12 @@
    3997245971     char_u     buf[NUMBUFLEN];
    3997345972     int                err = FALSE;
     
    3998345982     if (argvars[1].v_type != VAR_UNKNOWN)
    3998445983     {
    39985 @@ -18006,74 +18379,159 @@
     45984@@ -18006,74 +18534,159 @@
    3998645985        if ((infile = vim_tempname('i')) == NULL)
    3998745986        {
     
    4005046049+       if (res == NULL)
    4005146050+           goto errret;
    40052 +
     46051 
     46052-       for (s = res; *s; ++s)
    4005346053+       list = list_alloc();
    4005446054+       if (list == NULL)
    4005546055+           goto errret;
    40056  
    40057 -       for (s = res; *s; ++s)
     46056+
    4005846057+       for (i = 0; i < len; ++i)
    4005946058        {
     
    4017746176 
    4017846177 /*
    40179 @@ -18688,7 +19146,6 @@
     46178@@ -18688,7 +19301,6 @@
    4018046179     typval_T   *argvars UNUSED;
    4018146180     typval_T   *rettv UNUSED;
     
    4018546184 
    4018646185     rettv->v_type = VAR_STRING;
    40187 @@ -18699,7 +19156,6 @@
     46186@@ -18699,7 +19311,6 @@
    4018846187     /* A non-zero number or non-empty string argument: reset mode. */
    4018946188     if (non_zero_arg(&argvars[0]))
     
    4019346192 
    4019446193 /*
    40195 @@ -18839,20 +19295,30 @@
     46194@@ -18839,20 +19450,30 @@
    4019646195        EMSG(_(e_invarg));
    4019746196     else
     
    4023346232        check_cursor();
    4023446233        win_new_height(curwin, curwin->w_height);
    40235 @@ -18923,6 +19389,49 @@
     46234@@ -18923,6 +19544,49 @@
    4023646235 }
    4023746236 
     
    4028346282  */
    4028446283     static void
    40285 @@ -18933,10 +19442,7 @@
     46284@@ -18933,10 +19597,7 @@
    4028646285     int                binary = FALSE;
    4028746286     char_u     *fname;
     
    4029446293     if (check_restricted() || check_secure())
    4029546294        return;
    40296 @@ -18963,33 +19469,8 @@
     46295@@ -18963,33 +19624,8 @@
    4029746296     }
    4029846297     else
     
    4033046329     }
    4033146330 
    40332 @@ -19073,14 +19554,12 @@
     46331@@ -19073,14 +19709,12 @@
    4033346332        return NULL;
    4033446333     if (name[0] == '.')                                /* cursor */
     
    4034546344     {
    4034646345        pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
    40347 @@ -19135,21 +19614,22 @@
     46346@@ -19135,21 +19769,22 @@
    4034846347  * validity.
    4034946348  */
     
    4037246371 
    4037346372     if (fnump != NULL)
    40374 @@ -19173,13 +19653,16 @@
     46373@@ -19173,13 +19808,16 @@
    4037546374     posp->col = n;
    4037646375 
     
    4039046389 }
    4039146390 
    40392 @@ -19719,11 +20202,12 @@
     46391@@ -19719,11 +20357,12 @@
    4039346392  * Return OK or FAIL.
    4039446393  */
     
    4040446403     int                ret = OK;
    4040546404     typval_T   *tv = NULL;
    40406 @@ -19750,7 +20234,7 @@
     46405@@ -19750,7 +20389,7 @@
    4040746406      */
    4040846407     else
     
    4041346412            tv = &v->di_tv;
    4041446413     }
    40415 @@ -19790,24 +20274,30 @@
     46414@@ -19790,24 +20429,30 @@
    4041646415     while (ret == OK
    4041746416            && (**arg == '['
     
    4045046449            /* Stop the expression evaluation when immediately aborting on
    4045146450             * error, or when an interrupt occurred or an exception was thrown
    40452 @@ -20094,6 +20584,9 @@
     46451@@ -20094,6 +20739,9 @@
    4045346452     return res != NULL ? res : (char_u *)"";
    4045446453 }
     
    4046046459 get_tv_string_chk(varp)
    4046146460     typval_T   *varp;
    40462 @@ -20146,9 +20639,10 @@
     46461@@ -20146,9 +20794,10 @@
    4046346462  * hashtab_T used.
    4046446463  */
     
    4047246471     char_u     *varname;
    4047346472     hashtab_T  *ht;
    40474 @@ -20158,7 +20652,7 @@
     46473@@ -20158,7 +20807,7 @@
    4047546474        *htp = ht;
    4047646475     if (ht == NULL)
     
    4048146480 
    4048246481 /*
    40483 @@ -20166,11 +20660,11 @@
     46482@@ -20166,11 +20815,11 @@
    4048446483  * Returns NULL if not found.
    4048546484  */
     
    4049546494     hashitem_T *hi;
    4049646495 
    40497 @@ -20202,7 +20696,7 @@
     46496@@ -20202,7 +20851,7 @@
    4049846497         * worked find the variable again.  Don't auto-load a script if it was
    4049946498         * loaded already, otherwise it would be loaded every time when
     
    4050446503            /* Note: script_autoload() may make "hi" invalid. It must either
    4050546504             * be obtained again or not used. */
    40506 @@ -20282,7 +20776,7 @@
     46505@@ -20282,7 +20931,7 @@
    4050746506 {
    4050846507     dictitem_T *v;
     
    4051346512        return NULL;
    4051446513     return get_tv_string(&v->di_tv);
    40515 @@ -20560,6 +21054,13 @@
     46514@@ -20560,6 +21209,13 @@
    4051646515                v->di_tv.vval.v_number = get_tv_number(tv);
    4051746516                if (STRCMP(varname, "searchforward") == 0)
     
    4052746526            return;
    4052846527        }
    40529 @@ -20650,7 +21151,8 @@
     46528@@ -20650,7 +21306,8 @@
    4053046529     char_u *name;    /* points to start of variable name */
    4053146530     int    new_var;  /* TRUE when creating the variable */
     
    4053746536                                                     ? name[2] : name[0]))
    4053846537     {
    40539 @@ -21206,6 +21708,8 @@
     46538@@ -21206,6 +21863,8 @@
    4054046539      * dict.func    existing dict entry that's not a Funcref
    4054146540      *             "name" == NULL, "fudi.fd_dict" set,
     
    4054646545     p = eap->arg;
    4054746546     name = trans_function_name(&p, eap->skip, 0, &fudi);
    40548 @@ -21361,6 +21865,7 @@
     46547@@ -21361,6 +22020,7 @@
    4054946548                if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
    4055046549                {
     
    4055446553                }
    4055546554 
    40556 @@ -21604,7 +22109,7 @@
     46555@@ -21604,7 +22264,7 @@
    4055746556      */
    4055846557     if (fudi.fd_dict == NULL)
     
    4056346562        {
    4056446563            emsg_funcname(N_("E707: Function name conflicts with variable: %s"),
    40565 @@ -21762,8 +22267,9 @@
     46564@@ -21762,8 +22422,9 @@
    4056646565  * Also handles a Funcref in a List or Dictionary.
    4056746566  * Returns the function name in allocated memory, or NULL for failure.
     
    4057546574  */
    4057646575     static char_u *
    40577 @@ -21801,7 +22307,8 @@
     46576@@ -21801,7 +22462,8 @@
    4057846577     if (lead > 2)
    4057946578        start += lead;
     
    4058546584     if (end == start)
    4058646585     {
    40587 @@ -21863,14 +22370,14 @@
     46586@@ -21863,14 +22525,14 @@
    4058846587     if (lv.ll_exp_name != NULL)
    4058946588     {
     
    4060246601            name = NULL;
    4060346602     }
    40604 @@ -21878,6 +22385,14 @@
     46603@@ -21878,6 +22540,14 @@
    4060546604     {
    4060646605        name = vim_strsave(name);
     
    4061746616     }
    4061846617 
    40619 @@ -21896,7 +22411,8 @@
     46618@@ -21896,7 +22566,8 @@
    4062046619     }
    4062146620     else
     
    4062746626        len = (int)(end - lv.ll_name);
    4062846627     }
    40629 @@ -21924,11 +22440,23 @@
     46628@@ -21924,11 +22595,23 @@
    4063046629            lead += (int)STRLEN(sid_buf);
    4063146630        }
     
    4065346652     if (name != NULL)
    4065446653     {
    40655 @@ -21941,7 +22469,7 @@
     46654@@ -21941,7 +22624,7 @@
    4065646655                STRCPY(name + 3, sid_buf);
    4065746656        }
     
    4066246661     *pp = end;
    4066346662 
    40664 @@ -22062,7 +22590,7 @@
     46663@@ -22062,7 +22745,7 @@
    4066546664 translated_function_exists(name)
    4066646665     char_u     *name;
     
    4067146670     return find_func(name) != NULL;
    4067246671 }
    40673 @@ -22078,7 +22606,8 @@
     46672@@ -22078,7 +22761,8 @@
    4067446673     char_u  *p;
    4067546674     int            n = FALSE;
     
    4068146680 
    4068246681     /* Only accept "funcname", "funcname ", "funcname (..." and
    40683 @@ -22109,14 +22638,20 @@
     46682@@ -22109,14 +22793,20 @@
    4068446683 
    4068546684 /*
     
    4070646705 
    4070746706 #if defined(FEAT_PROFILE) || defined(PROTO)
    40708 @@ -22325,10 +22860,6 @@
     46707@@ -22325,10 +23015,6 @@
    4070946708     int                ret = FALSE;
    4071046709     int                i;
     
    4071746716     p = vim_strchr(name, AUTOLOAD_CHAR);
    4071846717     if (p == NULL || p == name)
    40719 @@ -24260,6 +24791,17 @@
     46718@@ -22772,7 +23458,10 @@
     46719                        msg_outnum((long)argvars[i].vval.v_number);
     46720                    else
     46721                    {
     46722+                       /* Do not want errors such as E724 here. */
     46723+                       ++emsg_off;
     46724                        s = tv2string(&argvars[i], &tofree, numbuf2, 0);
     46725+                       --emsg_off;
     46726                        if (s != NULL)
     46727                        {
     46728                            if (vim_strsize(s) > MSG_BUF_CLEN)
     46729@@ -22864,8 +23553,10 @@
     46730 
     46731            /* The value may be very long.  Skip the middle part, so that we
     46732             * have some idea how it starts and ends. smsg() would always
     46733-            * truncate it at the end. */
     46734+            * truncate it at the end. Don't want errors such as E724 here. */
     46735+           ++emsg_off;
     46736            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
     46737+           --emsg_off;
     46738            if (s != NULL)
     46739            {
     46740                if (vim_strsize(s) > MSG_BUF_CLEN)
     46741@@ -24260,6 +24951,17 @@
    4072046742        }
    4072146743     }
     
    4073546757 }
    4073646758 
    40737 @@ -24283,6 +24825,7 @@
     46759@@ -24283,6 +24985,7 @@
    4073846760     garray_T   ga;
    4073946761     char_u     *ret;
     
    4074346765     /* Make 'cpoptions' empty, so that the 'l' flag doesn't work here */
    4074446766     save_cpo = p_cpo;
    40745 @@ -24299,6 +24842,19 @@
     46767@@ -24299,6 +25002,22 @@
    4074646768        tail = str;
    4074746769        while (vim_regexec_nl(&regmatch, str, (colnr_T)(tail - str)))
     
    4075346775+               {
    4075446776+                   /* avoid getting stuck on a match with an empty string */
    40755 +                   *((char_u *)ga.ga_data + ga.ga_len) = *tail++;
    40756 +                   ++ga.ga_len;
     46777+                   i = MB_PTR2LEN(tail);
     46778+                   mch_memmove((char_u *)ga.ga_data + ga.ga_len, tail,
     46779+                                                                  (size_t)i);
     46780+                   ga.ga_len += i;
     46781+                   tail += i;
    4075746782+                   continue;
    4075846783+               }
     
    4076346788             * Get some space for a temporary buffer to do the substitution
    4076446789             * into.  It will contain:
    40765 @@ -24321,20 +24877,9 @@
     46790@@ -24321,20 +25040,9 @@
    4076646791            (void)vim_regsub(&regmatch, sub, (char_u *)ga.ga_data
    4076746792                                          + ga.ga_len + i, TRUE, TRUE, FALSE);
     
    4078946814diff -Naur vim74.orig/src/ex_cmds.c vim74/src/ex_cmds.c
    4079046815--- vim74.orig/src/ex_cmds.c    2013-08-07 13:15:51.000000000 +0000
    40791 +++ vim74/src/ex_cmds.c 2014-06-01 00:43:14.247480031 +0000
     46816+++ vim74/src/ex_cmds.c 2014-07-21 23:33:39.466801040 +0000
    4079246817@@ -1012,7 +1012,18 @@
    4079346818 
     
    4085346878      */
    4085446879     STRCPY(buf, cmd);
    40855 @@ -3253,21 +3280,21 @@
     46880@@ -1977,11 +2004,14 @@
     46881     {
     46882        fclose(fp_in);
     46883 
     46884-       /*
     46885-        * In case of an error keep the original viminfo file.
     46886-        * Otherwise rename the newly written file.
     46887-        */
     46888-       if (viminfo_errcnt || vim_rename(tempname, fname) == -1)
     46889+       /* In case of an error keep the original viminfo file.  Otherwise
     46890+        * rename the newly written file.  Give an error if that fails. */
     46891+       if (viminfo_errcnt == 0 && vim_rename(tempname, fname) == -1)
     46892+       {
     46893+           ++viminfo_errcnt;
     46894+           EMSG2(_("E886: Can't rename viminfo file to %s!"), fname);
     46895+       }
     46896+       if (viminfo_errcnt > 0)
     46897            mch_remove(tempname);
     46898 
     46899 #ifdef WIN3264
     46900@@ -3253,21 +3283,21 @@
    4085646901     if (  ((!other_file && !(flags & ECMD_OLDBUF))
    4085746902            || (curbuf->b_nwindows == 1
     
    4087946924 #ifdef FEAT_AUTOCMD
    4088046925     if ((command != NULL || newlnum > (linenr_T)0)
    40881 @@ -3332,6 +3359,12 @@
     46926@@ -3332,6 +3362,12 @@
    4088246927 #endif
    4088346928            buf = buflist_new(ffname, sfname, 0L,
     
    4089246937        if (buf == NULL)
    4089346938            goto theend;
    40894 @@ -4097,12 +4130,12 @@
     46939@@ -4097,12 +4133,12 @@
    4089546940      * 'scroll' */
    4089646941     if (eap->forceit)
     
    4090846953        bigness = 1;
    4090946954 
    40910 @@ -4298,7 +4331,7 @@
     46955@@ -4298,7 +4334,7 @@
    4091146956     pos_T      old_cursor = curwin->w_cursor;
    4091246957     int                start_nsubs;
     
    4091746962 
    4091846963     cmd = eap->arg;
    40919 @@ -4409,6 +4442,31 @@
     46964@@ -4409,6 +4445,31 @@
    4092046965        endcolumn = (curwin->w_curswant == MAXCOL);
    4092146966     }
     
    4094946994      * Find trailing options.  When '&' is used, keep old options.
    4095046995      */
    40951 @@ -4740,11 +4798,17 @@
     46996@@ -4740,11 +4801,17 @@
    4095246997                            char_u      *resp;
    4095346998                            colnr_T     sc, ec;
     
    4096847013                            for (i = 0; i < (long)sc; ++i)
    4096947014                                msg_putchar(' ');
    40970 @@ -5928,14 +5992,18 @@
     47015@@ -5928,14 +5995,18 @@
    4097147016                               "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
    4097247017                               "/\\?", "/\\z(\\)", "\\=", ":s\\=",
     
    4098947034 
    4099047035     d = IObuff;                    /* assume IObuff is long enough! */
    40991 @@ -5974,7 +6042,7 @@
     47036@@ -5974,7 +6045,7 @@
    4099247037          /* Replace:
    4099347038           * "[:...:]" with "\[:...:]"
     
    4099847043            if ((arg[0] == '[' && (arg[1] == ':'
    4099947044                         || (arg[1] == '+' && arg[2] == '+')))
    41000 @@ -7223,7 +7291,10 @@
     47045@@ -7223,7 +7294,10 @@
    4100147046            else
    4100247047                /* ":sign place {id} file={fname}": change sign type */
     
    4101047055        else
    4101147056            EMSG(_(e_invarg));
    41012 @@ -7658,7 +7729,7 @@
     47057@@ -7658,7 +7732,7 @@
    4101347058 # ifdef FEAT_WINDOWS
    4101447059            ++emsg_off;
     
    4102147066diff -Naur vim74.orig/src/ex_cmds.h vim74/src/ex_cmds.h
    4102247067--- vim74.orig/src/ex_cmds.h    2013-06-08 13:08:20.000000000 +0000
    41023 +++ vim74/src/ex_cmds.h 2014-06-01 00:43:14.250813355 +0000
     47068+++ vim74/src/ex_cmds.h 2014-07-21 23:33:39.473467689 +0000
    4102447069@@ -477,6 +477,8 @@
    4102547070                        NEEDARG|EXTRA|NOTRLCOM),
     
    4105947104diff -Naur vim74.orig/src/ex_cmds2.c vim74/src/ex_cmds2.c
    4106047105--- vim74.orig/src/ex_cmds2.c   2013-06-28 18:14:53.000000000 +0000
    41061 +++ vim74/src/ex_cmds2.c        2014-06-01 00:43:14.284146604 +0000
     47106+++ vim74/src/ex_cmds2.c        2014-07-21 23:33:39.490134312 +0000
    4106247107@@ -1436,20 +1436,20 @@
    4106347108 }
     
    4116647211diff -Naur vim74.orig/src/ex_docmd.c vim74/src/ex_docmd.c
    4116747212--- vim74.orig/src/ex_docmd.c   2013-07-24 13:09:37.000000000 +0000
    41168 +++ vim74/src/ex_docmd.c        2014-06-01 00:43:14.294146578 +0000
     47213+++ vim74/src/ex_docmd.c        2014-07-21 23:33:39.516800909 +0000
    4116947214@@ -316,7 +316,6 @@
    4117047215 static void    ex_operators __ARGS((exarg_T *eap));
     
    4156147606 }
    4156247607 
     47608@@ -11453,7 +11489,7 @@
     47609 
     47610            c = *end;
     47611            *end = NUL;
     47612-           match_add(curwin, g, p + 1, 10, id);
     47613+           match_add(curwin, g, p + 1, 10, id, NULL);
     47614            vim_free(g);
     47615            *end = c;
     47616        }
    4156347617diff -Naur vim74.orig/src/ex_eval.c vim74/src/ex_eval.c
    4156447618--- vim74.orig/src/ex_eval.c    2013-06-08 13:50:28.000000000 +0000
    41565 +++ vim74/src/ex_eval.c 2014-06-01 00:43:14.320813177 +0000
     47619+++ vim74/src/ex_eval.c 2014-07-21 23:33:39.536800857 +0000
    4156647620@@ -321,6 +321,17 @@
    4156747621 }
     
    4174947803diff -Naur vim74.orig/src/ex_getln.c vim74/src/ex_getln.c
    4175047804--- vim74.orig/src/ex_getln.c   2013-07-05 17:44:21.000000000 +0000
    41751 +++ vim74/src/ex_getln.c        2014-06-01 00:43:14.327479827 +0000
    41752 @@ -2280,7 +2280,7 @@
     47805+++ vim74/src/ex_getln.c        2014-07-21 23:33:39.570134104 +0000
     47806@@ -342,6 +342,13 @@
     47807     do_digraph(-1);            /* init digraph typeahead */
     47808 #endif
     47809 
     47810+    /* If something above caused an error, reset the flags, we do want to type
     47811+     * and execute commands. Display may be messed up a bit. */
     47812+    if (did_emsg)
     47813+       redrawcmd();
     47814+    did_emsg = FALSE;
     47815+    got_int = FALSE;
     47816+
     47817     /*
     47818      * Collect the command string, handling editing keys.
     47819      */
     47820@@ -2188,6 +2195,7 @@
     47821     int                vcol = 0;
     47822     char_u     *p;
     47823     int                prev_char;
     47824+    int                len;
     47825 
     47826     /* Switch cursor on now.  This avoids that it happens after the "\n", which
     47827      * confuses the system function that computes tabstops. */
     47828@@ -2264,7 +2272,17 @@
     47829            {
     47830                if (line_ga.ga_len > 0)
     47831                {
     47832-                   --line_ga.ga_len;
     47833+#ifdef FEAT_MBYTE
     47834+                   if (has_mbyte)
     47835+                   {
     47836+                       p = (char_u *)line_ga.ga_data;
     47837+                       p[line_ga.ga_len] = NUL;
     47838+                       len = (*mb_head_off)(p, p + line_ga.ga_len - 1) + 1;
     47839+                       line_ga.ga_len -= len;
     47840+                   }
     47841+                   else
     47842+#endif
     47843+                       --line_ga.ga_len;
     47844                    goto redraw;
     47845                }
     47846                continue;
     47847@@ -2280,14 +2298,14 @@
    4175347848 
    4175447849            if (c1 == Ctrl_T)
    4175547850            {
    4175647851-               long        sw = get_sw_value();
    41757 +               long        sw = get_sw_value(curbuf);
     47852+               long        sw = get_sw_value(curbuf);
    4175847853 
    4175947854                p = (char_u *)line_ga.ga_data;
    4176047855                p[line_ga.ga_len] = NUL;
    41761 @@ -2337,7 +2337,7 @@
     47856-               indent = get_indent_str(p, 8);
     47857+               indent = get_indent_str(p, 8, FALSE);
     47858                indent += sw - indent % sw;
     47859 add_indent:
     47860-               while (get_indent_str(p, 8) < indent)
     47861+               while (get_indent_str(p, 8, FALSE) < indent)
     47862                {
     47863                    char_u *s = skipwhite(p);
     47864 
     47865@@ -2300,8 +2318,9 @@
     47866                /* redraw the line */
     47867                msg_col = startcol;
     47868                vcol = 0;
     47869-               for (p = (char_u *)line_ga.ga_data;
     47870-                         p < (char_u *)line_ga.ga_data + line_ga.ga_len; ++p)
     47871+               p = (char_u *)line_ga.ga_data;
     47872+               p[line_ga.ga_len] = NUL;
     47873+               while (p < (char_u *)line_ga.ga_data + line_ga.ga_len)
     47874                {
     47875                    if (*p == TAB)
     47876                    {
     47877@@ -2309,11 +2328,14 @@
     47878                        {
     47879                            msg_putchar(' ');
     47880                        } while (++vcol % 8);
     47881+                       ++p;
     47882                    }
     47883                    else
     47884                    {
     47885-                       msg_outtrans_len(p, 1);
     47886-                       vcol += char2cells(*p);
     47887+                       len = MB_PTR2LEN(p);
     47888+                       msg_outtrans_len(p, len);
     47889+                       vcol += ptr2cells(p);
     47890+                       p += len;
     47891                    }
     47892                }
     47893                msg_clr_eos();
     47894@@ -2335,11 +2357,11 @@
     47895                else
     47896                {
    4176247897                    p[line_ga.ga_len] = NUL;
    41763                     indent = get_indent_str(p, 8);
     47898-                   indent = get_indent_str(p, 8);
     47899+                   indent = get_indent_str(p, 8, FALSE);
    4176447900                    --indent;
    4176547901-                   indent -= indent % get_sw_value();
    4176647902+                   indent -= indent % get_sw_value(curbuf);
    4176747903                }
    41768                 while (get_indent_str(p, 8) > indent)
     47904-               while (get_indent_str(p, 8) > indent)
     47905+               while (get_indent_str(p, 8, FALSE) > indent)
    4176947906                {
    41770 @@ -3852,9 +3852,9 @@
     47907                    char_u *s = skipwhite(p);
     47908 
     47909@@ -2362,7 +2384,16 @@
     47910 
     47911        if (IS_SPECIAL(c1))
     47912            c1 = '?';
     47913-       ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
     47914+#ifdef FEAT_MBYTE
     47915+       if (has_mbyte)
     47916+           len = (*mb_char2bytes)(c1,
     47917+                                 (char_u *)line_ga.ga_data + line_ga.ga_len);
     47918+       else
     47919+#endif
     47920+       {
     47921+           len = 1;
     47922+           ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1;
     47923+       }
     47924        if (c1 == '\n')
     47925            msg_putchar('\n');
     47926        else if (c1 == TAB)
     47927@@ -2376,10 +2407,10 @@
     47928        else
     47929        {
     47930            msg_outtrans_len(
     47931-                    ((char_u *)line_ga.ga_data) + line_ga.ga_len, 1);
     47932+                    ((char_u *)line_ga.ga_data) + line_ga.ga_len, len);
     47933            vcol += char2cells(c1);
     47934        }
     47935-       ++line_ga.ga_len;
     47936+       line_ga.ga_len += len;
     47937        escaped = FALSE;
     47938 
     47939        windgoto(msg_row, msg_col);
     47940@@ -3852,9 +3883,9 @@
    4177147941     char_u     buf[20];
    4177247942     int                j = 0;
     
    4178047950     buf[j] = NUL;
    4178147951     p = vim_strsave_escaped(fname, buf);
    41782 @@ -4178,7 +4178,7 @@
     47952@@ -4178,7 +4209,7 @@
    4178347953 /*
    4178447954  * Prepare a string for expansion.
     
    4178947959  * the name into allocated memory and prepend "^".
    4179047960  */
    41791 @@ -5095,9 +5095,9 @@
     47961@@ -5095,9 +5126,9 @@
    4179247962     char_u     ***file;
    4179347963     char       *dirnames[];
     
    4180047970     int                i;
    4180147971     int                pat_len;
    41802 @@ -5116,33 +5116,27 @@
     47972@@ -5116,33 +5147,27 @@
    4180347973            return FAIL;
    4180447974        }
     
    4185148021        return FAIL;
    4185248022 
    41853 @@ -5160,33 +5154,28 @@
     48023@@ -5160,33 +5185,28 @@
    4185448024 #if defined(FEAT_CMDL_COMPL) || defined(FEAT_EVAL) || defined(PROTO)
    4185548025 /*
     
    4189048060     while (*path != NUL)
    4189148061     {
    41892 @@ -5207,30 +5196,23 @@
     48062@@ -5207,30 +5227,23 @@
    4189348063                             WILD_SILENT|expand_options) != FAIL && num_p > 0)
    4189448064            {
     
    4192648096 
    4192748097 #endif
    41928 @@ -5498,6 +5480,9 @@
     48098@@ -5498,6 +5511,9 @@
    4192948099     if (hislen == 0)           /* no history */
    4193048100        return;
     
    4193848108diff -Naur vim74.orig/src/feature.h vim74/src/feature.h
    4193948109--- vim74.orig/src/feature.h    2013-05-18 18:18:20.000000000 +0000
    41940 +++ vim74/src/feature.h 2014-06-01 00:43:14.384146349 +0000
     48110+++ vim74/src/feature.h 2014-07-21 23:33:39.613467324 +0000
    4194148111@@ -211,18 +211,11 @@
    4194248112 #endif
     
    4200548175diff -Naur vim74.orig/src/fileio.c vim74/src/fileio.c
    4200648176--- vim74.orig/src/fileio.c     2013-08-05 19:58:03.000000000 +0000
    42007 +++ vim74/src/fileio.c  2014-06-01 00:43:14.407479623 +0000
     48177+++ vim74/src/fileio.c  2014-07-21 23:33:39.653467220 +0000
    4200848178@@ -428,13 +428,13 @@
    4200948179        }
     
    4221748387            fname = vim_strsave(fname);
    4221848388        else
    42219 @@ -9536,13 +9549,19 @@
     48389@@ -9536,13 +9549,26 @@
    4222048390 
    4222148391     /*
    4222248392      * When stopping to execute autocommands, restore the search patterns and
    4222348393-     * the redo buffer.
    42224 +     * the redo buffer.  Free buffers in the au_pending_free_buf list.
     48394+     * the redo buffer.  Free any buffers in the au_pending_free_buf list and
     48395+     * free any windows in the au_pending_free_win list.
    4222548396      */
    4222648397     if (!autocmd_busy)
     
    4223548406+           au_pending_free_buf = b;
    4223648407+       }
     48408+       while (au_pending_free_win != NULL)
     48409+       {
     48410+           win_T *w = au_pending_free_win->w_next;
     48411+           vim_free(au_pending_free_win);
     48412+           au_pending_free_win = w;
     48413+       }
    4223748414     }
    4223848415 
     
    4224048417diff -Naur vim74.orig/src/fold.c vim74/src/fold.c
    4224148418--- vim74.orig/src/fold.c       2013-06-15 14:57:24.000000000 +0000
    42242 +++ vim74/src/fold.c    2014-06-01 00:43:14.437479547 +0000
     48419+++ vim74/src/fold.c    2014-07-21 23:33:39.676800492 +0000
    4224348420@@ -430,11 +430,9 @@
    4224448421     }
     
    4229248469diff -Naur vim74.orig/src/getchar.c vim74/src/getchar.c
    4229348470--- vim74.orig/src/getchar.c    2013-06-29 11:43:27.000000000 +0000
    42294 +++ vim74/src/getchar.c 2014-06-01 00:43:14.447479521 +0000
     48471+++ vim74/src/getchar.c 2014-07-21 23:33:39.713467063 +0000
    4229548472@@ -40,13 +40,13 @@
    4229648473 
     
    4277648953 #ifdef FEAT_EVAL
    4277748954                        /* Copy the values from *mp that are used, because
     48955@@ -2632,7 +2675,7 @@
     48956                                {
     48957                                    if (!vim_iswhite(ptr[col]))
     48958                                        curwin->w_wcol = vcol;
     48959-                                   vcol += lbr_chartabsize(ptr + col,
     48960+                                   vcol += lbr_chartabsize(ptr, ptr + col,
     48961                                                               (colnr_T)vcol);
     48962 #ifdef FEAT_MBYTE
     48963                                    if (has_mbyte)
    4277848964diff -Naur vim74.orig/src/globals.h vim74/src/globals.h
    4277948965--- vim74.orig/src/globals.h    2013-07-04 17:53:44.000000000 +0000
    42780 +++ vim74/src/globals.h 2014-06-01 00:43:14.474146120 +0000
    42781 @@ -386,6 +386,11 @@
     48966+++ vim74/src/globals.h 2014-07-21 23:33:39.756800283 +0000
     48967@@ -386,6 +386,13 @@
    4278248968 /* When deleting the current buffer, another one must be loaded.  If we know
    4278348969  * which one is preferred, au_new_curbuf is set to it */
    4278448970 EXTERN buf_T   *au_new_curbuf INIT(= NULL);
    4278548971+
    42786 +/* When deleting the buffer and autocmd_busy is TRUE, do not free the buffer
    42787 + * but link it in the list starting with au_pending_free_buf, using b_next.
    42788 + * Free the buffer when autocmd_busy is set to FALSE. */
     48972+/* When deleting a buffer/window and autocmd_busy is TRUE, do not free the
     48973+ * buffer/window. but link it in the list starting with
     48974+ * au_pending_free_buf/ap_pending_free_win, using b_next/w_next.
     48975+ * Free the buffer/window when autocmd_busy is being set to FALSE. */
    4278948976+EXTERN buf_T   *au_pending_free_buf INIT(= NULL);
     48977+EXTERN win_T   *au_pending_free_win INIT(= NULL);
    4279048978 #endif
    4279148979 
    4279248980 #ifdef FEAT_MOUSE
    42793 @@ -596,6 +601,7 @@
     48981@@ -596,6 +603,7 @@
    4279448982  * to this when the window is using the global argument list.
    4279548983  */
     
    4279948987                                               global_alist */
    4280048988 
    42801 @@ -662,7 +668,6 @@
     48989@@ -662,7 +670,6 @@
    4280248990                                /* set to TRUE when "-s" commandline argument
    4280348991                                 * used for ex */
     
    4280748995 EXTERN int     VIsual_active INIT(= FALSE);
    4280848996                                /* whether Visual mode is active */
    42809 @@ -677,7 +682,6 @@
     48997@@ -677,7 +684,6 @@
    4281048998 
    4281148999 EXTERN int     redo_VIsual_busy INIT(= FALSE);
     
    4281549003 #ifdef FEAT_MOUSE
    4281649004 /*
    42817 @@ -752,6 +756,12 @@
     49005@@ -752,6 +758,12 @@
    4281849006  */
    4281949007 EXTERN pos_T   Insstart;               /* This is where the latest
     
    4282849016 /*
    4282949017  * Stuff for VREPLACE mode.
    42830 @@ -979,11 +989,6 @@
     49018@@ -979,11 +991,6 @@
    4283149019 EXTERN int     readonlymode INIT(= FALSE); /* Set to TRUE for "view" */
    4283249020 EXTERN int     recoverymode INIT(= FALSE); /* Set to TRUE for "-r" option */
     
    4284049028 #ifdef DO_INIT
    4284149029                    = {NULL, NULL, 0, 0, 0, 0, 0, 0, 0}
    42842 @@ -1177,11 +1182,9 @@
     49030@@ -1177,11 +1184,9 @@
    4284349031 EXTERN int     fill_diff INIT(= '-');
    4284449032 #endif
     
    4285249040 #ifdef FEAT_CMDWIN
    4285349041 EXTERN int     cedit_key INIT(= -1);   /* key value of 'cedit' option */
    42854 @@ -1331,6 +1334,9 @@
     49042@@ -1331,6 +1336,9 @@
    4285549043 #if defined(UNIX) || defined(VMS)
    4285649044 EXTERN int     term_is_xterm INIT(= FALSE);    /* xterm-like 'term' */
     
    4286249050 #ifdef BACKSLASH_IN_FILENAME
    4286349051 EXTERN char    psepc INIT(= '\\');     /* normal path separator character */
    42864 @@ -1490,6 +1496,7 @@
     49052@@ -1490,6 +1498,7 @@
    4286549053 EXTERN char_u e_notopen[]      INIT(= N_("E484: Can't open file %s"));
    4286649054 EXTERN char_u e_notread[]      INIT(= N_("E485: Can't read file %s"));
     
    4287249060diff -Naur vim74.orig/src/gui.c vim74/src/gui.c
    4287349061--- vim74.orig/src/gui.c        2013-06-30 15:41:48.000000000 +0000
    42874 +++ vim74/src/gui.c     2014-06-01 00:43:14.494146069 +0000
     49062+++ vim74/src/gui.c     2014-07-21 23:33:39.796800179 +0000
    4287549063@@ -3132,11 +3132,9 @@
    4287649064      */
     
    4288549073        /*
    4288649074         * When 'mousemodel' is "popup", shift-left is translated to right.
     49075diff -Naur vim74.orig/src/gui_beval.c vim74/src/gui_beval.c
     49076--- vim74.orig/src/gui_beval.c  2013-05-06 02:06:04.000000000 +0000
     49077+++ vim74/src/gui_beval.c       2014-07-21 23:33:39.853466698 +0000
     49078@@ -1193,11 +1193,13 @@
     49079            XmFontList fl;
     49080 
     49081            fl = gui_motif_fontset2fontlist(&gui.tooltip_fontset);
     49082-           if (fl != NULL)
     49083+           if (fl == NULL)
     49084            {
     49085-               XmStringExtent(fl, s, &w, &h);
     49086-               XmFontListFree(fl);
     49087+               XmStringFree(s);
     49088+               return;
     49089            }
     49090+           XmStringExtent(fl, s, &w, &h);
     49091+           XmFontListFree(fl);
     49092        }
     49093        w += gui.border_offset << 1;
     49094        h += gui.border_offset << 1;
    4288749095diff -Naur vim74.orig/src/gui_gtk_x11.c vim74/src/gui_gtk_x11.c
    4288849096--- vim74.orig/src/gui_gtk_x11.c        2013-06-30 15:42:13.000000000 +0000
    42889 +++ vim74/src/gui_gtk_x11.c     2014-06-01 00:43:14.634145713 +0000
     49097+++ vim74/src/gui_gtk_x11.c     2014-07-21 23:33:39.930133164 +0000
    4289049098@@ -732,7 +732,10 @@
    4289149099 gui_mch_start_blink(void)
     
    4292649134     }
    4292749135 #endif
     49136@@ -5957,27 +5965,48 @@
     49137         * Decide whether we need to scale.  Allow one pixel of border
     49138         * width to be cut off, in order to avoid excessive scaling for
     49139         * tiny differences in font size.
     49140+        * Do scale to fit the height to avoid gaps because of linespacing.
     49141         */
     49142        need_scale = (width > SIGN_WIDTH + 2
     49143-                     || height > SIGN_HEIGHT + 2
     49144+                     || height != SIGN_HEIGHT
     49145                      || (width < 3 * SIGN_WIDTH / 4
     49146                          && height < 3 * SIGN_HEIGHT / 4));
     49147        if (need_scale)
     49148        {
     49149-           double aspect;
     49150+           double  aspect;
     49151+           int     w = width;
     49152+           int     h = height;
     49153 
     49154            /* Keep the original aspect ratio */
     49155            aspect = (double)height / (double)width;
     49156            width  = (double)SIGN_WIDTH * SIGN_ASPECT / aspect;
     49157            width  = MIN(width, SIGN_WIDTH);
     49158-           height = (double)width * aspect;
     49159+           if (((double)(MAX(height, SIGN_HEIGHT)) /
     49160+                (double)(MIN(height, SIGN_HEIGHT))) < 1.15)
     49161+           {
     49162+               /* Change the aspect ratio by at most 15% to fill the
     49163+                * available space completly. */
     49164+               height = (double)SIGN_HEIGHT * SIGN_ASPECT / aspect;
     49165+               height = MIN(height, SIGN_HEIGHT);
     49166+           }
     49167+           else
     49168+               height = (double)width * aspect;
     49169 
     49170-           /* This doesn't seem to be worth caching, and doing so
     49171-            * would complicate the code quite a bit. */
     49172-           sign = gdk_pixbuf_scale_simple(sign, width, height,
     49173-                                          GDK_INTERP_BILINEAR);
     49174-           if (sign == NULL)
     49175-               return; /* out of memory */
     49176+           if (w == width && h == height)
     49177+           {
     49178+               /* no change in dimensions; don't decrease reference counter
     49179+                * (below) */
     49180+               need_scale = FALSE;
     49181+           }
     49182+           else
     49183+           {
     49184+               /* This doesn't seem to be worth caching, and doing so would
     49185+                * complicate the code quite a bit. */
     49186+               sign = gdk_pixbuf_scale_simple(sign, width, height,
     49187+                                                        GDK_INTERP_BILINEAR);
     49188+               if (sign == NULL)
     49189+                   return; /* out of memory */
     49190+           }
     49191        }
     49192 
     49193        /* The origin is the upper-left corner of the pixmap.  Therefore
    4292849194diff -Naur vim74.orig/src/gui_mac.c vim74/src/gui_mac.c
    4292949195--- vim74.orig/src/gui_mac.c    2013-05-06 02:06:04.000000000 +0000
    42930 +++ vim74/src/gui_mac.c 2014-06-01 00:43:14.654145662 +0000
     49196+++ vim74/src/gui_mac.c 2014-07-21 23:33:39.973466385 +0000
    4293149197@@ -1068,11 +1068,7 @@
    4293249198     }
     
    4296149227diff -Naur vim74.orig/src/gui_w48.c vim74/src/gui_w48.c
    4296249228--- vim74.orig/src/gui_w48.c    2013-08-10 11:36:45.000000000 +0000
    42963 +++ vim74/src/gui_w48.c 2014-06-01 00:43:14.767478706 +0000
     49229+++ vim74/src/gui_w48.c 2014-07-21 23:33:40.123465993 +0000
    4296449230@@ -1008,7 +1008,7 @@
    4296549231     static LPARAM last_lParam = 0L;
     
    4302349289diff -Naur vim74.orig/src/if_lua.c vim74/src/if_lua.c
    4302449290--- vim74.orig/src/if_lua.c     2013-06-23 10:55:02.000000000 +0000
    43025 +++ vim74/src/if_lua.c  2014-06-01 00:43:14.997478121 +0000
     49291+++ vim74/src/if_lua.c  2014-07-21 23:33:40.400131938 +0000
    4302649292@@ -734,7 +734,7 @@
    4302749293     if (li == NULL) return 0;
     
    4303549301diff -Naur vim74.orig/src/if_perl.xs vim74/src/if_perl.xs
    4303649302--- vim74.orig/src/if_perl.xs   2013-08-02 17:28:50.000000000 +0000
    43037 +++ vim74/src/if_perl.xs        2014-06-01 00:43:15.084144567 +0000
     49303+++ vim74/src/if_perl.xs        2014-07-21 23:33:40.470131755 +0000
    4303849304@@ -14,7 +14,8 @@
    4303949305 #define IN_PERL_FILE   /* don't include if_perl.pro from proto.h */
     
    4311049376 #  define Perl_croak_nocontext dll_Perl_croak_nocontext
    4311149377 #  define Perl_call_argv dll_Perl_call_argv
    43112 @@ -246,7 +266,9 @@
     49378@@ -171,6 +191,9 @@
     49379 # define Perl_pop_scope dll_Perl_pop_scope
     49380 # define Perl_push_scope dll_Perl_push_scope
     49381 # define Perl_save_int dll_Perl_save_int
     49382+# if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
     49383+#  define Perl_save_strlen dll_Perl_save_strlen
     49384+# endif
     49385 # define Perl_stack_grow dll_Perl_stack_grow
     49386 # define Perl_set_context dll_Perl_set_context
     49387 # if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
     49388@@ -246,7 +269,9 @@
    4311349389 # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
    4311449390 # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
     
    4312149397 
    4312249398 /*
    43123 @@ -262,10 +284,13 @@
     49399@@ -262,10 +287,13 @@
    4312449400 static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
    4312549401 static void* (*Perl_get_context)(void);
     
    4313749413 static void (*Perl_croak_nocontext)(const char*, ...);
    4313849414 static I32 (*Perl_dowantarray)(pTHX);
    43139 @@ -337,7 +362,12 @@
     49415@@ -286,6 +314,9 @@
     49416 static void (*Perl_pop_scope)(pTHX);
     49417 static void (*Perl_push_scope)(pTHX);
     49418 static void (*Perl_save_int)(pTHX_ int*);
     49419+#if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
     49420+static void (*Perl_save_strlen)(pTHX_ STRLEN* ptr);
     49421+#endif
     49422 static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
     49423 static SV** (*Perl_set_context)(void*);
     49424 #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
     49425@@ -337,7 +368,12 @@
    4314049426 static XPV** (*Perl_TXpv_ptr)(register PerlInterpreter*);
    4314149427 static STRLEN* (*Perl_Tna_ptr)(register PerlInterpreter*);
     
    4315049436 static void (*Perl_sys_term)(void);
    4315149437 static void (*Perl_call_list)(pTHX_ I32, AV*);
    43152 @@ -360,7 +390,9 @@
     49438@@ -360,7 +396,9 @@
    4315349439 #endif
    4315449440 
     
    4316049446 static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
    4316149447 static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
    43162 @@ -384,12 +416,12 @@
     49448@@ -384,12 +422,12 @@
    4316349449     {"perl_parse", (PERL_PROC*)&perl_parse},
    4316449450     {"Perl_get_context", (PERL_PROC*)&Perl_get_context},
     
    4317549461     {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
    4317649462     {"Perl_gv_stashpv", (PERL_PROC*)&Perl_gv_stashpv},
    43177 @@ -481,7 +513,9 @@
     49463@@ -408,6 +446,9 @@
     49464     {"Perl_pop_scope", (PERL_PROC*)&Perl_pop_scope},
     49465     {"Perl_push_scope", (PERL_PROC*)&Perl_push_scope},
     49466     {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
     49467+#if (PERL_REVISION == 5) && (PERL_VERSION >= 20)
     49468+    {"Perl_save_strlen", (PERL_PROC*)&Perl_save_strlen},
     49469+#endif
     49470     {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
     49471     {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
     49472 #if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
     49473@@ -481,7 +522,9 @@
    4317849474 # endif
    4317949475 #endif
     
    4318549481     {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
    4318649482     {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
    43187 @@ -492,6 +526,14 @@
     49483@@ -492,6 +535,14 @@
    4318849484     {"", NULL},
    4318949485 };
     
    4320249498diff -Naur vim74.orig/src/if_py_both.h vim74/src/if_py_both.h
    4320349499--- vim74.orig/src/if_py_both.h 2013-07-24 15:09:19.000000000 +0000
    43204 +++ vim74/src/if_py_both.h      2014-06-01 00:43:15.114144490 +0000
     49500+++ vim74/src/if_py_both.h      2014-07-21 23:33:40.640131312 +0000
    4320549501@@ -13,6 +13,11 @@
    4320649502  * Common code for if_python.c and if_python3.c.
     
    4403850334diff -Naur vim74.orig/src/if_python.c vim74/src/if_python.c
    4403950335--- vim74.orig/src/if_python.c  2013-07-09 19:40:11.000000000 +0000
    44040 +++ vim74/src/if_python.c       2014-06-01 00:43:15.180810987 +0000
     50336+++ vim74/src/if_python.c       2014-07-21 23:33:40.713464454 +0000
    4404150337@@ -196,6 +196,7 @@
    4404250338 # define PyTuple_Size dll_PyTuple_Size
     
    4414050436diff -Naur vim74.orig/src/if_python3.c vim74/src/if_python3.c
    4414150437--- vim74.orig/src/if_python3.c 2013-07-09 19:53:21.000000000 +0000
    44142 +++ vim74/src/if_python3.c      2014-06-01 00:43:15.214144236 +0000
     50438+++ vim74/src/if_python3.c      2014-07-21 23:33:40.770130973 +0000
    4414350439@@ -97,6 +97,19 @@
    4414450440 #define Py_ssize_t_fmt "n"
     
    4429750593diff -Naur vim74.orig/src/if_ruby.c vim74/src/if_ruby.c
    4429850594--- vim74.orig/src/if_ruby.c    2013-05-20 10:47:48.000000000 +0000
    44299 +++ vim74/src/if_ruby.c 2014-06-01 00:43:15.230810860 +0000
     50595+++ vim74/src/if_ruby.c 2014-07-21 23:33:40.823464167 +0000
    4430050596@@ -88,14 +88,20 @@
    4430150597 # define rb_int2big rb_int2big_stub
     
    4440450700diff -Naur vim74.orig/src/if_tcl.c vim74/src/if_tcl.c
    4440550701--- vim74.orig/src/if_tcl.c     2013-08-02 17:31:15.000000000 +0000
    44406 +++ vim74/src/if_tcl.c  2014-06-01 00:43:15.274144083 +0000
     50702+++ vim74/src/if_tcl.c  2014-07-21 23:33:40.893463984 +0000
    4440750703@@ -165,6 +165,7 @@
    4440850704  */
     
    4443550731                stubs_initialized = TRUE;
    4443650732            }
     50733diff -Naur vim74.orig/src/installman.sh vim74/src/installman.sh
     50734--- vim74.orig/src/installman.sh        2010-05-15 11:04:07.000000000 +0000
     50735+++ vim74/src/installman.sh     2014-07-21 23:33:40.926797230 +0000
     50736@@ -43,10 +43,13 @@
     50737    fi
     50738 fi
     50739 
     50740+# Note: setting LC_ALL to C is required to avoid illegal byte errors from sed
     50741+# on some systems.
     50742+
     50743 if test $what = "install"; then
     50744    # vim.1
     50745    echo installing $destdir/$exename.1
     50746-   sed -e s+/usr/local/lib/vim+$vimloc+ \
     50747+   LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
     50748           -e s+$vimloc/doc+$helpsubloc+ \
     50749           -e s+$vimloc/print+$printsubloc+ \
     50750           -e s+$vimloc/syntax+$synsubloc+ \
     50751@@ -64,7 +67,7 @@
     50752 
     50753    # vimtutor.1
     50754    echo installing $destdir/$exename""tutor.1
     50755-   sed -e s+/usr/local/lib/vim+$vimloc+ \
     50756+   LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
     50757           -e s+$vimloc/tutor+$tutorsubloc+ \
     50758           $helpsource/vimtutor$langadd.1 > $destdir/$exename""tutor.1
     50759    chmod $manmod $destdir/$exename""tutor.1
     50760@@ -76,7 +79,7 @@
     50761 
     50762    # evim.1
     50763    echo installing $destdir/$evimname.1
     50764-   sed -e s+/usr/local/lib/vim+$vimloc+ \
     50765+   LC_ALL=C sed -e s+/usr/local/lib/vim+$vimloc+ \
     50766           -e s+$vimloc/evim.vim+$scriptloc/evim.vim+ \
     50767           $helpsource/evim$langadd.1 > $destdir/$evimname.1
     50768    chmod $manmod $destdir/$evimname.1
    4443750769diff -Naur vim74.orig/src/macros.h vim74/src/macros.h
    4443850770--- vim74.orig/src/macros.h     2013-06-12 15:07:32.000000000 +0000
    44439 +++ vim74/src/macros.h  2014-06-01 00:43:15.400810427 +0000
     50771+++ vim74/src/macros.h  2014-07-21 23:33:41.010130346 +0000
    4444050772@@ -264,7 +264,7 @@
    4444150773 # define mb_ptr_adv(p)     p += has_mbyte ? (*mb_ptr2len)(p) : 1
     
    4444950781diff -Naur vim74.orig/src/main.c vim74/src/main.c
    4445050782--- vim74.orig/src/main.c       2013-07-03 10:36:49.000000000 +0000
    44451 +++ vim74/src/main.c    2014-06-01 00:43:15.424143701 +0000
     50783+++ vim74/src/main.c    2014-07-21 23:33:41.050130242 +0000
    4445250784@@ -322,6 +322,7 @@
    4445350785     init_yank();               /* init yank buffers */
     
    4458550917diff -Naur vim74.orig/src/mark.c vim74/src/mark.c
    4458650918--- vim74.orig/src/mark.c       2013-08-02 15:22:10.000000000 +0000
    44587 +++ vim74/src/mark.c    2014-06-01 00:43:15.447476975 +0000
     50919+++ vim74/src/mark.c    2014-07-21 23:33:41.063463541 +0000
    4458850920@@ -98,7 +98,6 @@
    4458950921        return OK;
     
    4470151033diff -Naur vim74.orig/src/mbyte.c vim74/src/mbyte.c
    4470251034--- vim74.orig/src/mbyte.c      2013-07-05 18:07:21.000000000 +0000
    44703 +++ vim74/src/mbyte.c   2014-06-01 00:43:15.490810198 +0000
     51035+++ vim74/src/mbyte.c   2014-07-21 23:33:41.080130164 +0000
    4470451036@@ -83,10 +83,18 @@
    4470551037 # ifndef WIN32_LEAN_AND_MEAN
     
    4478351115diff -Naur vim74.orig/src/memfile.c vim74/src/memfile.c
    4478451116--- vim74.orig/src/memfile.c    2013-05-23 20:22:22.000000000 +0000
    44785 +++ vim74/src/memfile.c 2014-06-01 00:43:15.514143472 +0000
     51117+++ vim74/src/memfile.c 2014-07-21 23:33:41.096796787 +0000
    4478651118@@ -1358,7 +1358,7 @@
    4478751119        if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
     
    4479551127diff -Naur vim74.orig/src/memline.c vim74/src/memline.c
    4479651128--- vim74.orig/src/memline.c    2013-05-06 02:01:02.000000000 +0000
    44797 +++ vim74/src/memline.c 2014-06-01 00:43:15.537476746 +0000
     51129+++ vim74/src/memline.c 2014-07-21 23:33:41.143463332 +0000
    4479851130@@ -289,6 +289,9 @@
    4479951131     buf->b_ml.ml_chunksize = NULL;
     
    4499351325diff -Naur vim74.orig/src/menu.c vim74/src/menu.c
    4499451326--- vim74.orig/src/menu.c       2011-04-11 13:17:21.000000000 +0000
    44995 +++ vim74/src/menu.c    2014-06-01 00:43:15.557476695 +0000
     51327+++ vim74/src/menu.c    2014-07-21 23:33:41.163463280 +0000
    4499651328@@ -1640,7 +1640,6 @@
    4499751329        idx = MENU_INDEX_INSERT;
     
    4502751359diff -Naur vim74.orig/src/message.c vim74/src/message.c
    4502851360--- vim74.orig/src/message.c    2013-08-09 18:30:45.000000000 +0000
    45029 +++ vim74/src/message.c 2014-06-01 00:43:15.597476593 +0000
     51361+++ vim74/src/message.c 2014-07-21 23:33:41.193463201 +0000
    4503051362@@ -887,6 +887,8 @@
    4503151363     int                oldState;
     
    4507051402diff -Naur vim74.orig/src/misc1.c vim74/src/misc1.c
    4507151403--- vim74.orig/src/misc1.c      2013-08-03 15:29:33.000000000 +0000
    45072 +++ vim74/src/misc1.c   2014-06-01 00:43:15.620809867 +0000
    45073 @@ -303,10 +303,18 @@
     51404+++ vim74/src/misc1.c   2014-07-21 23:33:41.260129694 +0000
     51405@@ -32,7 +32,7 @@
     51406     int
     51407 get_indent()
     51408 {
     51409-    return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts);
     51410+    return get_indent_str(ml_get_curline(), (int)curbuf->b_p_ts, FALSE);
     51411 }
     51412 
     51413 /*
     51414@@ -42,7 +42,7 @@
     51415 get_indent_lnum(lnum)
     51416     linenr_T   lnum;
     51417 {
     51418-    return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts);
     51419+    return get_indent_str(ml_get(lnum), (int)curbuf->b_p_ts, FALSE);
     51420 }
     51421 
     51422 #if defined(FEAT_FOLDING) || defined(PROTO)
     51423@@ -55,7 +55,7 @@
     51424     buf_T      *buf;
     51425     linenr_T   lnum;
     51426 {
     51427-    return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts);
     51428+    return get_indent_str(ml_get_buf(buf, lnum, FALSE), (int)buf->b_p_ts, FALSE);
     51429 }
     51430 #endif
     51431 
     51432@@ -64,16 +64,23 @@
     51433  * 'tabstop' at "ts"
     51434  */
     51435     int
     51436-get_indent_str(ptr, ts)
     51437+get_indent_str(ptr, ts, list)
     51438     char_u     *ptr;
     51439     int                ts;
     51440+    int                list; /* if TRUE, count only screen size for tabs */
     51441 {
     51442     int                count = 0;
     51443 
     51444     for ( ; *ptr; ++ptr)
     51445     {
     51446-       if (*ptr == TAB)    /* count a tab for what it is worth */
     51447-           count += ts - (count % ts);
     51448+       if (*ptr == TAB)
     51449+       {
     51450+           if (!list || lcs_tab1)    /* count a tab for what it is worth */
     51451+               count += ts - (count % ts);
     51452+           else
     51453+       /* in list mode, when tab is not set, count screen char width for Tab: ^I */
     51454+               count += ptr2cells(ptr);
     51455+       }
     51456        else if (*ptr == ' ')
     51457            ++count;            /* count a space for one */
     51458        else
     51459@@ -303,10 +310,18 @@
    4507451460        ml_replace(curwin->w_cursor.lnum, newline, FALSE);
    4507551461        if (flags & SIN_CHANGED)
     
    4509451480     }
    4509551481     else
    45096 @@ -1397,7 +1405,7 @@
     51482@@ -468,6 +483,61 @@
     51483     return (int)col;
     51484 }
     51485 
     51486+#if defined(FEAT_LINEBREAK) || defined(PROTO)
     51487+/*
     51488+ * Return appropriate space number for breakindent, taking influencing
     51489+ * parameters into account. Window must be specified, since it is not
     51490+ * necessarily always the current one.
     51491+ */
     51492+    int
     51493+get_breakindent_win(wp, line)
     51494+    win_T      *wp;
     51495+    char_u     *line; /* start of the line */
     51496+{
     51497+    static int     prev_indent = 0;  /* cached indent value */
     51498+    static long            prev_ts     = 0L; /* cached tabstop value */
     51499+    static char_u   *prev_line = NULL; /* cached pointer to line */
     51500+    static int     prev_tick = 0;   /* changedtick of cached value */
     51501+    int                    bri = 0;
     51502+    /* window width minus window margin space, i.e. what rests for text */
     51503+    const int      eff_wwidth = W_WIDTH(wp)
     51504+                           - ((wp->w_p_nu || wp->w_p_rnu)
     51505+                               && (vim_strchr(p_cpo, CPO_NUMCOL) == NULL)
     51506+                                               ? number_width(wp) + 1 : 0);
     51507+
     51508+    /* used cached indent, unless pointer or 'tabstop' changed */
     51509+    if (prev_line != line || prev_ts != wp->w_buffer->b_p_ts
     51510+                                 || prev_tick != wp->w_buffer->b_changedtick)
     51511+    {
     51512+       prev_line = line;
     51513+       prev_ts = wp->w_buffer->b_p_ts;
     51514+       prev_tick = wp->w_buffer->b_changedtick;
     51515+       prev_indent = get_indent_str(line,
     51516+                                    (int)wp->w_buffer->b_p_ts, wp->w_p_list);
     51517+    }
     51518+    bri = prev_indent + wp->w_p_brishift;
     51519+
     51520+    /* indent minus the length of the showbreak string */
     51521+    if (wp->w_p_brisbr)
     51522+       bri -= vim_strsize(p_sbr);
     51523+
     51524+    /* Add offset for number column, if 'n' is in 'cpoptions' */
     51525+    bri += win_col_off2(wp);
     51526+
     51527+    /* never indent past left window margin */
     51528+    if (bri < 0)
     51529+       bri = 0;
     51530+    /* always leave at least bri_min characters on the left,
     51531+     * if text width is sufficient */
     51532+    else if (bri > eff_wwidth - wp->w_p_brimin)
     51533+       bri = (eff_wwidth - wp->w_p_brimin < 0)
     51534+                           ? 0 : eff_wwidth - wp->w_p_brimin;
     51535+
     51536+    return bri;
     51537+}
     51538+#endif
     51539+
     51540+
     51541 #if defined(FEAT_CINDENT) || defined(FEAT_SMARTINDENT)
     51542 
     51543 static int cin_is_cinword __ARGS((char_u *line));
     51544@@ -670,7 +740,7 @@
     51545        /*
     51546         * count white space on current line
     51547         */
     51548-       newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
     51549+       newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE);
     51550        if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
     51551            newindent = second_line_indent; /* for ^^D command in insert mode */
     51552 
     51553@@ -1193,7 +1263,7 @@
     51554                                        || do_si
     51555 #endif
     51556                                                           )
     51557-                       newindent = get_indent_str(leader, (int)curbuf->b_p_ts);
     51558+                       newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE);
     51559 
     51560                    /* Add the indent offset */
     51561                    if (newindent + off < 0)
     51562@@ -1397,7 +1467,7 @@
    4509751563 #ifdef FEAT_SMARTINDENT
    4509851564        if (did_si)
     
    4510351569            if (p_sr)
    4510451570                newindent -= newindent % sw;
    45105 @@ -1581,9 +1589,9 @@
     51571@@ -1581,9 +1651,9 @@
    4510651572 
    4510751573 #if defined(FEAT_COMMENTS) || defined(PROTO)
     
    4511651582  * comment leader.
    4511751583  * "backward" must be true for the "O" command.
    45118 @@ -3117,6 +3125,9 @@
     51584@@ -1986,6 +2056,7 @@
     51585     char_u     *s;
     51586     int                lines = 0;
     51587     int                width;
     51588+    char_u     *line;
     51589 
     51590 #ifdef FEAT_DIFF
     51591     /* Check for filler lines above this buffer line.  When folded the result
     51592@@ -2001,12 +2072,12 @@
     51593        return lines + 1;
     51594 #endif
     51595 
     51596-    s = ml_get_buf(wp->w_buffer, lnum, FALSE);
     51597+    line = s = ml_get_buf(wp->w_buffer, lnum, FALSE);
     51598 
     51599     col = 0;
     51600     while (*s != NUL && --column >= 0)
     51601     {
     51602-       col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL);
     51603+       col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL);
     51604        mb_ptr_adv(s);
     51605     }
     51606 
     51607@@ -2018,7 +2089,7 @@
     51608      * 'ts') -- webb.
     51609      */
     51610     if (*s == TAB && (State & NORMAL) && (!wp->w_p_list || lcs_tab1))
     51611-       col += win_lbr_chartabsize(wp, s, (colnr_T)col, NULL) - 1;
     51612+       col += win_lbr_chartabsize(wp, line, s, (colnr_T)col, NULL) - 1;
     51613 
     51614     /*
     51615      * Add column offset for 'number', 'relativenumber', 'foldcolumn', etc.
     51616@@ -3117,6 +3188,9 @@
    4511951617            if (hasAnyFolding(wp))
    4512051618                set_topline(wp, wp->w_topline);
     
    4512651624     }
    4512751625 
    45128 @@ -4800,9 +4811,9 @@
     51626@@ -4800,9 +4874,9 @@
    4512951627 
    4513051628     if (fname == NULL)
     
    4513851636        mb_ptr_adv(p2);
    4513951637     }
    45140 @@ -4921,7 +4932,8 @@
     51638@@ -4921,7 +4995,8 @@
    4514151639 }
    4514251640 
     
    4514851646     int
    4514951647 vim_ispathsep(c)
    45150 @@ -4944,6 +4956,20 @@
     51648@@ -4944,6 +5019,20 @@
    4515151649 #endif
    4515251650 }
     
    4516951667 /*
    4517051668  * return TRUE if 'c' is a path list separator.
    45171 @@ -5168,11 +5194,18 @@
     51669@@ -5168,11 +5257,18 @@
    4517251670 #if defined(FEAT_CINDENT) || defined(FEAT_SYN_HL)
    4517351671 
     
    4518851686 find_start_comment(ind_maxcomment)         /* XXX */
    4518951687     int                ind_maxcomment;
    45190 @@ -5290,7 +5323,7 @@
     51688@@ -5286,11 +5382,12 @@
     51689 static char_u  *cin_skipcomment __ARGS((char_u *));
     51690 static int     cin_nocode __ARGS((char_u *));
     51691 static pos_T   *find_line_comment __ARGS((void));
     51692+static int     cin_has_js_key __ARGS((char_u *text));
     51693 static int     cin_islabel_skip __ARGS((char_u **));
    4519151694 static int     cin_isdefault __ARGS((char_u *));
    4519251695 static char_u  *after_label __ARGS((char_u *l));
     
    4519751700 static int     cin_get_equal_amount __ARGS((linenr_T lnum));
    4519851701 static int     cin_ispreproc __ARGS((char_u *));
    45199 @@ -5299,28 +5332,26 @@
     51702@@ -5299,28 +5396,27 @@
    4520051703 static int     cin_islinecomment __ARGS((char_u *));
    4520151704 static int     cin_isterminated __ARGS((char_u *, int, int));
     
    4522351726+static pos_T   *find_start_brace __ARGS((void));
    4522451727+static pos_T   *find_match_paren __ARGS((int));
     51728+static pos_T   *find_match_char __ARGS((int c, int ind_maxparen));
    4522551729+static int     corr_ind_maxparen __ARGS((pos_T *startpos));
    4522651730 static int     find_last_paren __ARGS((char_u *l, int start, int end));
     
    4523451738  * Skip over white space and C comments within the line.
    4523551739  * Also skip over Perl/shell comments if desired.
    45236 @@ -5337,7 +5368,7 @@
     51740@@ -5337,7 +5433,7 @@
    4523751741 
    4523851742        /* Perl/shell # comment comment continues until eol.  Require a space
     
    4524351747            s += STRLEN(s);
    4524451748            break;
    45245 @@ -5423,8 +5454,7 @@
     51749@@ -5400,7 +5496,38 @@
     51750 }
     51751 
     51752 /*
     51753+ * Return TRUE if "text" starts with "key:".
     51754+ */
     51755+    static int
     51756+cin_has_js_key(text)
     51757+    char_u *text;
     51758+{
     51759+    char_u *s = skipwhite(text);
     51760+    int            quote = 0;
     51761+
     51762+    if (*s == '\'' || *s == '"')
     51763+    {
     51764+       /* can be 'key': or "key": */
     51765+       quote = *s;
     51766+       ++s;
     51767+    }
     51768+    if (!vim_isIDc(*s))            /* need at least one ID character */
     51769+       return FALSE;
     51770+
     51771+    while (vim_isIDc(*s))
     51772+       ++s;
     51773+    if (*s == quote)
     51774+       ++s;
     51775+
     51776+    s = cin_skipcomment(s);
     51777+
     51778+    /* "::" is not a label, it's C++ */
     51779+    return (*s == ':' && s[1] != ':');
     51780+}
     51781+
     51782+/*
     51783  * Check if string matches "label:"; move to character after ':' if true.
     51784+ * "*s" must point to the start of the label, if there is one.
     51785  */
     51786     static int
     51787 cin_islabel_skip(s)
     51788@@ -5423,8 +5550,7 @@
    4524651789  * Note: curwin->w_cursor must be where we are looking for the label.
    4524751790  */
     
    4525351796     char_u     *s;
    4525451797 
    45255 @@ -5458,7 +5488,7 @@
     51798@@ -5458,7 +5584,7 @@
    4525651799             * If we're in a comment now, skip to the start of the comment.
    4525751800             */
     
    4526251805 
    4526351806            line = ml_get_curline();
    45264 @@ -5704,10 +5734,9 @@
     51807@@ -5704,10 +5830,9 @@
    4526551808  *             ^
    4526651809  */
     
    4527451817     char_u     *l;
    4527551818     int                amount;
    45276 @@ -5717,8 +5746,7 @@
     51819@@ -5717,8 +5842,7 @@
    4527751820     curwin->w_cursor.lnum = lnum;
    4527851821     l = ml_get_curline();
     
    4528451827        amount = get_indent_nolabel(lnum);
    4528551828        l = after_label(ml_get_curline());
    45286 @@ -5962,12 +5990,10 @@
     51829@@ -5962,12 +6086,10 @@
    4528751830  * "min_lnum" is the line before which we will not be looking.
    4528851831  */
     
    4529851841     char_u     *s;
    4529951842     linenr_T   lnum = first_lnum;
    45300 @@ -5981,7 +6007,7 @@
     51843@@ -5981,7 +6103,7 @@
    4530151844        s = *sp;
    4530251845 
     
    4530751850        lnum = trypos->lnum;
    4530851851        if (lnum < min_lnum)
    45309 @@ -6089,10 +6115,9 @@
     51852@@ -6089,10 +6211,9 @@
    4531051853  * ')' and ';'. The condition may be spread over several lines.
    4531151854  */
     
    4531951862     pos_T      cursor_save;
    4532051863     pos_T      *trypos;
    45321 @@ -6112,7 +6137,8 @@
     51864@@ -6112,7 +6233,8 @@
    4532251865            ++p;
    4532351866            ++curwin->w_cursor.col;
     
    4532951872            retval = TRUE;
    4533051873        curwin->w_cursor = cursor_save;
    45331 @@ -6175,10 +6201,8 @@
     51874@@ -6175,10 +6297,8 @@
    4533251875  * Adjust the cursor to the line with "while".
    4533351876  */
     
    4534151884     char_u     *line;
    4534251885     char_u     *p;
    45343 @@ -6202,7 +6226,7 @@
     51886@@ -6202,7 +6322,7 @@
    4534451887                 * before the matching '('.  XXX */
    4534551888                i = (int)(p - line);
     
    4535051893                {
    4535151894                    s = cin_skipcomment(ml_get(trypos->lnum));
    45352 @@ -6394,11 +6418,8 @@
     51895@@ -6394,11 +6514,8 @@
    4535351896 }
    4535451897 
     
    4536351906     int                amount;
    4536451907     colnr_T    vcol;
    45365 @@ -6408,11 +6429,10 @@
     51908@@ -6408,11 +6525,10 @@
    4536651909     {
    4536751910        amount = get_indent();
     
    4537751920     else
    4537851921     {
    45379 @@ -6420,8 +6440,8 @@
     51922@@ -6420,8 +6536,8 @@
    4538051923        getvcol(curwin, &curwin->w_cursor, &vcol, NULL, NULL);
    4538151924        amount = (int)vcol;
     
    4538851931 }
    4538951932 
    45390 @@ -6505,8 +6525,7 @@
     51933@@ -6505,8 +6621,7 @@
    4539151934 /* }       */
    4539251935 
     
    4539851941     pos_T      cursor_save;
    4539951942     pos_T      *trypos;
    45400 @@ -6522,7 +6541,7 @@
     51943@@ -6522,7 +6637,7 @@
    4540151944        pos = NULL;
    4540251945        /* ignore the { if it's in a // or / *  * / comment */
     
    4540751950        if (pos != NULL)
    4540851951            curwin->w_cursor.lnum = pos->lnum;
    45409 @@ -6536,9 +6555,8 @@
     51952@@ -6532,20 +6647,27 @@
     51953 }
     51954 
     51955 /*
     51956- * Find the matching '(', failing if it is in a comment.
     51957+ * Find the matching '(', ignoring it if it is in a comment.
    4541051958  * Return NULL if no match found.
    4541151959  */
     
    4541351961-find_match_paren(ind_maxparen, ind_maxcomment)     /* XXX */
    4541451962+find_match_paren(ind_maxparen)     /* XXX */
     51963+    int                ind_maxparen;
     51964+{
     51965+    return find_match_char('(', ind_maxparen);
     51966+}
     51967+
     51968+    static pos_T *
     51969+find_match_char(c, ind_maxparen)           /* XXX */
     51970+    int                c;
    4541551971     int                ind_maxparen;
    4541651972-    int                ind_maxcomment;
     
    4541851974     pos_T      cursor_save;
    4541951975     pos_T      *trypos;
    45420 @@ -6555,7 +6573,7 @@
     51976     static pos_T pos_copy;
     51977 
     51978     cursor_save = curwin->w_cursor;
     51979-    if ((trypos = findmatchlimit(NULL, '(', 0, ind_maxparen)) != NULL)
     51980+    if ((trypos = findmatchlimit(NULL, c, 0, ind_maxparen)) != NULL)
     51981     {
     51982        /* check if the ( is in a // comment */
     51983        if ((colnr_T)cin_skip2pos(trypos) > trypos->col)
     51984@@ -6555,7 +6677,7 @@
    4542151985            pos_copy = *trypos;     /* copy trypos, findmatch will change it */
    4542251986            trypos = &pos_copy;
     
    4542751991        }
    4542851992     }
    45429 @@ -6570,15 +6588,14 @@
     51993@@ -6564,21 +6686,46 @@
     51994 }
     51995 
     51996 /*
     51997+ * Find the matching '(', ignoring it if it is in a comment or before an
     51998+ * unmatched {.
     51999+ * Return NULL if no match found.
     52000+ */
     52001+    static pos_T *
     52002+find_match_paren_after_brace(ind_maxparen)         /* XXX */
     52003+    int                ind_maxparen;
     52004+{
     52005+    pos_T      *trypos = find_match_paren(ind_maxparen);
     52006+
     52007+    if (trypos != NULL)
     52008+    {
     52009+       pos_T   *tryposBrace = find_start_brace();
     52010+
     52011+       /* If both an unmatched '(' and '{' is found.  Ignore the '('
     52012+        * position if the '{' is further down. */
     52013+       if (tryposBrace != NULL
     52014+               && (trypos->lnum != tryposBrace->lnum
     52015+                   ? trypos->lnum < tryposBrace->lnum
     52016+                   : trypos->col < tryposBrace->col))
     52017+           trypos = NULL;
     52018+    }
     52019+    return trypos;
     52020+}
     52021+
     52022+/*
     52023  * Return ind_maxparen corrected for the difference in line number between the
     52024  * cursor position and "startpos".  This makes sure that searching for a
     52025  * matching paren above the cursor line doesn't find a match because of
    4543052026  * looking a few lines further.
    4543152027  */
     
    4544752043 
    4544852044 /*
    45449 @@ -6616,201 +6633,229 @@
     52045@@ -6616,201 +6763,229 @@
    4545052046     return retval;
    4545152047 }
     
    4548052076 
    4548152077-    int ind_level = sw;
    45482 -
     52078+    /* Spaces from the edge of the line an open brace that's at the end of a
     52079+     * line is imagined to be. */
     52080+    buf->b_ind_open_imag = 0;
     52081 
    4548352082-    /*
    4548452083-     * spaces from the edge of the line an open brace that's at the end of a
     
    4548652085-     */
    4548752086-    int ind_open_imag = 0;
    45488 +    /* Spaces from the edge of the line an open brace that's at the end of a
    45489 +     * line is imagined to be. */
    45490 +    buf->b_ind_open_imag = 0;
     52087+    /* Spaces from the prevailing indent for a line that is not preceded by
     52088+     * an opening brace. */
     52089+    buf->b_ind_no_brace = 0;
    4549152090 
    4549252091-    /*
     
    4549552094-     */
    4549652095-    int ind_no_brace = 0;
    45497 +    /* Spaces from the prevailing indent for a line that is not preceded by
    45498 +     * an opening brace. */
    45499 +    buf->b_ind_no_brace = 0;
     52096+    /* Column where the first { of a function should be located }. */
     52097+    buf->b_ind_first_open = 0;
    4550052098 
    4550152099-    /*
     
    4550352101-     */
    4550452102-    int ind_first_open = 0;
    45505 +    /* Column where the first { of a function should be located }. */
    45506 +    buf->b_ind_first_open = 0;
     52103+    /* Spaces from the prevailing indent a leftmost open brace should be
     52104+     * located. */
     52105+    buf->b_ind_open_extra = 0;
    4550752106 
    4550852107-    /*
     
    4551152110-     */
    4551252111-    int ind_open_extra = 0;
    45513 +    /* Spaces from the prevailing indent a leftmost open brace should be
    45514 +     * located. */
    45515 +    buf->b_ind_open_extra = 0;
    45516  
     52112-
    4551752113-    /*
    4551852114-     * spaces from the matching open brace (real location for one at the left
     
    4574652342+     * while(). */
    4574752343+    buf->b_ind_if_for_while = 0;
    45748 +
     52344 
    4574952345+    for (p = buf->b_p_cino; *p; )
    4575052346+    {
     
    4578152377+       if (l[1] == '-')
    4578252378+           n = -n;
    45783  
     52379+
    4578452380+       /* When adding an entry here, also update the default 'cinoptions' in
    4578552381+        * doc/indent.txt, and add explanation for it! */
     
    4583352429     int                amount;
    4583452430     int                scope_amount;
    45835 @@ -6845,10 +6890,6 @@
     52431@@ -6842,13 +7017,11 @@
     52432 #define LOOKFOR_NOBREAK                8
     52433 #define LOOKFOR_CPP_BASECLASS  9
     52434 #define LOOKFOR_ENUM_OR_INIT   10
     52435+#define LOOKFOR_JS_KEY         11
     52436+#define LOOKFOR_NO_COMMA       12
    4583652437 
    4583752438     int                whilelevel;
     
    4584452445     int                iscase;
    4584552446     int                lookfor_break;
    45846 @@ -6857,83 +6898,8 @@
     52447@@ -6856,84 +7029,10 @@
     52448     int                cont_amount = 0;    /* amount for continuation line */
    4584752449     int                original_line_islabel;
    4584852450     int                added_to_amount = 0;
     52451+    int                js_cur_has_key = 0;
    4584952452 
    4585052453-    for (options = curbuf->b_p_cino; *options; )
     
    4593052533     /* remember where the cursor was when we started */
    4593152534     cur_curpos = curwin->w_cursor;
    45932 @@ -6967,22 +6933,21 @@
     52535@@ -6967,22 +7066,21 @@
    4593352536 
    4593452537     curwin->w_cursor.col = 0;
     
    4595752560        amount = 0;
    4595852561     }
    45959 @@ -7004,7 +6969,8 @@
     52562@@ -7004,7 +7102,8 @@
    4596052563      * comment, try using the 'comments' option.
    4596152564      */
     
    4596752570        int     lead_start_len = 2;
    4596852571        int     lead_middle_len = 1;
    45969 @@ -7138,7 +7104,7 @@
     52572@@ -7138,7 +7237,7 @@
    4597052573            }
    4597152574            if (amount == -1)                       /* use the comment opener */
     
    4597652579                    start = ml_get(trypos->lnum);
    4597752580                    look = start + trypos->col + 2; /* skip / and * */
    45978 @@ -7147,8 +7113,8 @@
     52581@@ -7147,18 +7246,28 @@
    4597952582                }
    4598052583                getvcol(curwin, trypos, &col, NULL, NULL);
     
    4598752590        }
    4598852591     }
    45989 @@ -7156,9 +7122,9 @@
     52592 
    4599052593     /*
     52594+     * Are we looking at a ']' that has a match?
     52595+     */
     52596+    else if (*skipwhite(theline) == ']'
     52597+           && (trypos = find_match_char('[', curbuf->b_ind_maxparen)) != NULL)
     52598+    {
     52599+       /* align with the line containing the '['. */
     52600+       amount = get_indent_lnum(trypos->lnum);
     52601+    }
     52602+
     52603+    /*
    4599152604      * Are we inside parentheses or braces?
    4599252605      */                                                    /* XXX */
     
    4600052613     {
    4600152614       if (trypos != NULL && tryposBrace != NULL)
    46002 @@ -7179,7 +7145,7 @@
     52615@@ -7179,7 +7288,7 @@
    4600352616         * If the matching paren is more than one line away, use the indent of
    4600452617         * a previous non-empty line that matches the same paren.
     
    4600952622            /* Line up with the start of the matching paren line. */
    4601052623            amount = get_indent_lnum(curwin->w_cursor.lnum - 1);  /* XXX */
    46011 @@ -7198,7 +7164,7 @@
     52624@@ -7198,7 +7307,7 @@
    4601252625                curwin->w_cursor.lnum = lnum;
    4601352626 
     
    4601852631                    lnum = trypos->lnum + 1;
    4601952632                    continue;
    46020 @@ -7206,8 +7172,7 @@
     52633@@ -7206,8 +7315,7 @@
    4602152634 
    4602252635                /* XXX */
     
    4602852641                        && trypos->col == our_paren_pos.col)
    4602952642                {
    46030 @@ -7235,7 +7200,7 @@
     52643@@ -7235,7 +7343,7 @@
    4603152644            int     ignore_paren_col = 0;
    4603252645            int     is_if_for_while = 0;
     
    4603752650                /* Look for the outermost opening parenthesis on this line
    4603852651                 * and check whether it belongs to an "if", "for" or "while". */
    46039 @@ -7250,7 +7215,7 @@
     52652@@ -7250,7 +7358,7 @@
    4604052653                    curwin->w_cursor.lnum = outermost.lnum;
    4604152654                    curwin->w_cursor.col = outermost.col;
     
    4604652659 
    4604752660                curwin->w_cursor = cursor_save;
    46048 @@ -7261,7 +7226,7 @@
     52661@@ -7261,7 +7369,7 @@
    4604952662                    cin_is_if_for_while_before_offset(line, &outermost.col);
    4605052663            }
     
    4605552668            if (*look == '(')
    4605652669            {
    46057 @@ -7275,7 +7240,8 @@
     52670@@ -7275,7 +7383,8 @@
    4605852671                line = ml_get_curline();
    4605952672                look_col = (int)(look - line);
     
    4606552678                          && trypos->lnum == our_paren_pos.lnum
    4606652679                          && trypos->col < our_paren_pos.col)
    46067 @@ -7284,24 +7250,25 @@
     52680@@ -7284,24 +7393,25 @@
    4606852681                curwin->w_cursor.lnum = save_lnum;
    4606952682                look = ml_get(our_paren_pos.lnum) + look_col;
     
    4609652709                    {
    4609752710                        /* look for opening unmatched paren, indent one level
    46098 @@ -7323,9 +7290,9 @@
     52711@@ -7323,9 +7433,9 @@
    4609952712                        }
    4610052713 
     
    4610852721                    else
    4610952722                    {
    46110 @@ -7351,12 +7318,12 @@
     52723@@ -7351,12 +7461,12 @@
    4611152724                }
    4611252725            }
     
    4612452737            {
    4612552738                if (cur_amount != MAXCOL)
    46126 @@ -7364,39 +7331,39 @@
     52739@@ -7364,39 +7474,40 @@
    4612752740            }
    4612852741            else
     
    4616152774-                   if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
    4616252775-                       amount += ind_unclosed2;
    46163 +                   if (find_match_paren(curbuf->b_ind_maxparen) != NULL)
     52776+                   if (find_match_paren_after_brace(curbuf->b_ind_maxparen)
     52777+                                                                     != NULL)
    4616452778+                       amount += curbuf->b_ind_unclosed2;
    4616552779                    else
     
    4617452788                }
    4617552789                /*
    46176 @@ -7414,7 +7381,7 @@
     52790@@ -7414,16 +7525,15 @@
    4617752791 
    4617852792        /* add extra indent for a comment */
     
    4618152795+           amount += curbuf->b_ind_comment;
    4618252796       }
    46183  
    46184        /*
    46185 @@ -7457,8 +7424,8 @@
    46186              */
     52797-
     52798-      /*
     52799-       * Are we at least inside braces, then?
     52800-       */
     52801       else
     52802       {
     52803+       /*
     52804+        * We are inside braces, there is a { before this line at the position
     52805+        * stored in tryposBrace.
     52806+        */
     52807        trypos = tryposBrace;
     52808-
     52809        ourscope = trypos->lnum;
     52810        start = ml_get(ourscope);
     52811 
     52812@@ -7445,39 +7555,40 @@
     52813        }
     52814        else
     52815        {
     52816-           /*
     52817-            * that opening brace might have been on a continuation
     52818-            * line.  if so, find the start of the line.
     52819-            */
     52820+           /* That opening brace might have been on a continuation
     52821+            * line.  if so, find the start of the line. */
     52822            curwin->w_cursor.lnum = ourscope;
     52823 
     52824-           /*
     52825-            * position the cursor over the rightmost paren, so that
     52826-            * matching it will take us back to the start of the line.
     52827-            */
     52828+           /* Position the cursor over the rightmost paren, so that
     52829+            * matching it will take us back to the start of the line. */
    4618752830            lnum = ourscope;
    4618852831            if (find_last_paren(start, '(', ')')
     
    4619352836                lnum = trypos->lnum;
    4619452837 
    46195             /*
    46196 @@ -7467,11 +7434,11 @@
     52838-           /*
     52839-            * It could have been something like
     52840+           /* It could have been something like
     52841             *     case 1: if (asdf &&
    4619752842             *                  ldfd) {
    4619852843             *              }
    4619952844             */
    4620052845-           if (ind_js || (ind_keep_case_label
    46201 +           if (curbuf->b_ind_js || (curbuf->b_ind_keep_case_label
    46202                            && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
     52846-                          && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
     52847+           if ((curbuf->b_ind_js || curbuf->b_ind_keep_case_label)
     52848+                          && cin_iscase(skipwhite(ml_get_curline()), FALSE))
    4620352849                amount = get_indent();
     52850+           else if (curbuf->b_ind_js)
     52851+               amount = get_indent_lnum(lnum);
    4620452852            else
    4620552853-               amount = skip_label(lnum, &l, ind_maxcomment);
     
    4620852856            start_brace = BRACE_AT_END;
    4620952857        }
    46210 @@ -7487,7 +7454,7 @@
     52858 
     52859+       /* For Javascript check if the line starts with "key:". */
     52860+       if (curbuf->b_ind_js)
     52861+           js_cur_has_key = cin_has_js_key(theline);
     52862+
     52863        /*
     52864-        * if we're looking at a closing brace, that's where
     52865+        * If we're looking at a closing brace, that's where
     52866         * we want to be.  otherwise, add the amount of room
     52867         * that an indent is supposed to be.
     52868         */
     52869@@ -7487,7 +7598,7 @@
    4621152870             * they may want closing braces to line up with something
    4621252871             * other than the open brace.  indulge them, if so.
     
    4621752876        else
    4621852877        {
    46219 @@ -7500,14 +7467,12 @@
     52878@@ -7500,14 +7611,12 @@
    4622052879            lookfor = LOOKFOR_INITIAL;
    4622152880            if (cin_iselse(theline))
     
    4623452893                    amount = get_indent();      /* XXX */
    4623552894                    goto theend;
    46236 @@ -7524,12 +7489,12 @@
     52895@@ -7524,12 +7633,12 @@
    4623752896            /*
    4623852897             * if the '{' is  _really_ at the left margin, use the imaginary
     
    4624952908            }
    4625052909            else if (start_brace == BRACE_AT_START &&
    46251 @@ -7542,16 +7507,16 @@
     52910@@ -7542,16 +7651,16 @@
    4625252911            {
    4625352912                if (start_brace == BRACE_AT_END)    /* '{' is at end of line */
     
    4627052929                        amount = 0;
    4627152930                }
    46272 @@ -7562,20 +7527,22 @@
     52931@@ -7562,20 +7671,22 @@
    4627352932            if (cin_iscase(theline, FALSE))     /* it's a switch() label */
    4627452933            {
     
    4629752956            scope_amount = amount;
    4629852957            whilelevel = 0;
    46299 @@ -7613,14 +7580,14 @@
     52958@@ -7584,7 +7695,7 @@
     52959             * Search backwards.  If we find something we recognize, line up
     52960             * with that.
     52961             *
     52962-            * if we're looking at an open brace, indent
     52963+            * If we're looking at an open brace, indent
     52964             * the usual amount relative to the conditional
     52965             * that opens the block.
     52966             */
     52967@@ -7613,14 +7724,14 @@
    4630052968                    {
    4630152969                        if (curwin->w_cursor.lnum == 0
     
    4631652984                            break;
    4631752985                        }
    46318 @@ -7631,7 +7598,7 @@
     52986@@ -7631,7 +7742,7 @@
    4631952987                         * If we're in a comment now, skip to the start of the
    4632052988                         * comment.
     
    4632552993                        {
    4632652994                            curwin->w_cursor.lnum = trypos->lnum + 1;
    46327 @@ -7656,8 +7623,7 @@
     52995@@ -7656,8 +7767,7 @@
    4632852996                         * (it's a variable declaration).
    4632952997                         */
     
    4633553003                            /* if the line is terminated with another ','
    4633653004                             * it is a continued variable initialization.
    46337 @@ -7688,11 +7654,11 @@
     53005@@ -7688,11 +7798,11 @@
    4633853006                             */                                 /* XXX */
    4633953007                            trypos = NULL;
     
    4635053018                            if (trypos != NULL)
    4635153019                            {
    46352 @@ -7727,8 +7693,8 @@
     53020@@ -7727,8 +7837,8 @@
    4635353021                            amount = scope_amount;
    4635453022                            if (theline[0] == '{')
     
    4636153029                        }
    4636253030 
    46363 @@ -7750,7 +7716,7 @@
     53031@@ -7750,7 +7860,7 @@
    4636453032 
    4636553033                            /* If we're in a comment now, skip to the start of
     
    4637053038                            {
    4637153039                                curwin->w_cursor.lnum = trypos->lnum + 1;
    46372 @@ -7765,7 +7731,8 @@
     53040@@ -7765,7 +7875,8 @@
    4637353041                            /* Finally the actual check for "namespace". */
    4637453042                            if (cin_is_cpp_namespace(l))
     
    4638053048                            }
    4638153049 
    46382 @@ -7779,7 +7746,7 @@
     53050@@ -7779,7 +7890,7 @@
    4638353051                /*
    4638453052                 * If we're in a comment now, skip to the start of the comment.
     
    4638953057                    curwin->w_cursor.lnum = trypos->lnum + 1;
    4639053058                    curwin->w_cursor.col = 0;
    46391 @@ -7833,8 +7800,8 @@
     53059@@ -7833,8 +7944,8 @@
    4639253060                         * Check that this case label is not for another
    4639353061                         * switch()
     
    4640053068                            amount = get_indent();      /* XXX */
    4640153069                            break;
    46402 @@ -7877,9 +7844,10 @@
     53070@@ -7877,9 +7988,10 @@
    4640353071                        if (l != NULL && cin_is_cinword(l))
    4640453072                        {
     
    4641353081                        break;
    4641453082                    }
    46415 @@ -7893,8 +7861,10 @@
     53083@@ -7893,8 +8005,10 @@
    4641653084                     * ->   y = 1;
    4641753085                     */
     
    4642653094                }
    4642753095 
    46428 @@ -7904,8 +7874,8 @@
     53096@@ -7904,8 +8018,8 @@
    4642953097                 */
    4643053098                if (lookfor == LOOKFOR_CASE || lookfor == LOOKFOR_SCOPEDECL)
     
    4643753105                        curwin->w_cursor.lnum = trypos->lnum + 1;
    4643853106                        curwin->w_cursor.col = 0;
    46439 @@ -7916,7 +7886,7 @@
     53107@@ -7916,7 +8030,7 @@
    4644053108                /*
    4644153109                 * Ignore jump labels with nothing after them.
     
    4644653114                    l = after_label(ml_get_curline());
    4644753115                    if (l == NULL || cin_nocode(l))
    46448 @@ -7939,7 +7909,7 @@
     53116@@ -7939,7 +8053,7 @@
    4644953117                 * constructor initialization?
    4645053118                 */                                                 /* XXX */
     
    4645553123                    n = cin_is_cpp_baseclass(&col);
    4645653124                    l = ml_get_curline();
    46457 @@ -7962,8 +7932,7 @@
     53125@@ -7962,8 +8076,7 @@
    4645853126                    }
    4645953127                    else
     
    4646553133                }
    4646653134                else if (lookfor == LOOKFOR_CPP_BASECLASS)
    46467 @@ -8005,9 +7974,7 @@
     53135@@ -7990,6 +8103,41 @@
     53136                 */
     53137                terminated = cin_isterminated(l, FALSE, TRUE);
     53138 
     53139+               if (js_cur_has_key)
     53140+               {
     53141+                   js_cur_has_key = 0; /* only check the first line */
     53142+                   if (curbuf->b_ind_js && terminated == ',')
     53143+                   {
     53144+                       /* For Javascript we might be inside an object:
     53145+                        *   key: something,  <- align with this
     53146+                        *   key: something
     53147+                        * or:
     53148+                        *   key: something +  <- align with this
     53149+                        *       something,
     53150+                        *   key: something
     53151+                        */
     53152+                       lookfor = LOOKFOR_JS_KEY;
     53153+                   }
     53154+               }
     53155+               if (lookfor == LOOKFOR_JS_KEY && cin_has_js_key(l))
     53156+               {
     53157+                   amount = get_indent();
     53158+                   break;
     53159+               }
     53160+               if (lookfor == LOOKFOR_NO_COMMA)
     53161+               {
     53162+                   if (terminated != ',')
     53163+                       /* line below current line is the one that starts a
     53164+                        * (possibly broken) line ending in a comma. */
     53165+                       break;
     53166+                   amount = get_indent();
     53167+                   if (curwin->w_cursor.lnum - 1 == ourscope)
     53168+                       /* line above is start of the scope, thus current line
     53169+                        * is the one that stars a (possibly broken) line
     53170+                        * ending in a comma. */
     53171+                       break;
     53172+               }
     53173+
     53174                if (terminated == 0 || (lookfor != LOOKFOR_UNTERM
     53175                                                        && terminated == ','))
     53176                {
     53177@@ -8001,13 +8149,16 @@
     53178                     *              bar )
     53179                     */
     53180                    /*
     53181-                    * position the cursor over the rightmost paren, so that
     53182+                    * Position the cursor over the rightmost paren, so that
    4646853183                     * matching it will take us back to the start of the line.
     53184+                    * Ignore a match before the start of the block.
    4646953185                     */
    4647053186                    (void)find_last_paren(l, '(', ')');
     
    4647353189-                                                             ind_maxcomment);
    4647453190+                   trypos = find_match_paren(corr_ind_maxparen(&cur_curpos));
     53191+                   if (trypos != NULL && (trypos->lnum < tryposBrace->lnum
     53192+                               || (trypos->lnum == tryposBrace->lnum
     53193+                                   && trypos->col < tryposBrace->col)))
     53194+                       trypos = NULL;
    4647553195 
    4647653196                    /*
    4647753197                     * If we are looking for ',', we also look for matching
    46478 @@ -8015,7 +7982,7 @@
     53198@@ -8015,7 +8166,7 @@
    4647953199                     */
    4648053200                    if (trypos == NULL && terminated == ','
     
    4648553205                    if (trypos != NULL)
    4648653206                    {
    46487 @@ -8058,9 +8025,8 @@
     53207@@ -8058,11 +8209,10 @@
    4648853208                     * Get indent and pointer to text for current line,
    4648953209                     * ignoring any jump label.     XXX
     
    4649253212-                       cur_amount = skip_label(curwin->w_cursor.lnum,
    4649353213-                                                         &l, ind_maxcomment);
    46494 +                   if (!curbuf->b_ind_js)
     53214-                   else
     53215+                   if (curbuf->b_ind_js)
     53216                        cur_amount = get_indent();
     53217+                   else
    4649553218+                       cur_amount = skip_label(curwin->w_cursor.lnum, &l);
    46496                     else
    46497                         cur_amount = get_indent();
    4649853219                    /*
    46499 @@ -8075,16 +8041,16 @@
     53220                     * If this is just above the line we are indenting, and it
     53221                     * starts with a '{', line it up with this line.
     53222@@ -8075,16 +8225,16 @@
    4650053223                    {
    4650153224                        amount = cur_amount;
     
    4651353236 
    4651453237-                       if (ind_cpp_baseclass)
    46515 +                       if (curbuf->b_ind_cpp_baseclass)
     53238+                       if (curbuf->b_ind_cpp_baseclass && !curbuf->b_ind_js)
    4651653239                        {
    4651753240                            /* have to look back, whether it is a cpp base
    4651853241                             * class declaration or initialization */
    46519 @@ -8132,10 +8098,11 @@
     53242@@ -8132,10 +8282,11 @@
    4652053243                         */
    4652153244                        amount = cur_amount;
     
    4653153254                        }
    4653253255 
    46533 @@ -8169,10 +8136,9 @@
     53256@@ -8169,10 +8320,9 @@
    4653453257                                curwin->w_cursor.col =
    4653553258                                          (colnr_T)(l - ml_get_curline()) + 1;
     
    4654553268                        }
    4654653269                    }
    46547 @@ -8209,7 +8175,7 @@
     53270@@ -8209,7 +8359,7 @@
    4654853271                             * enumerations/initializations. */
    4654953272                            if (terminated == ',')
     
    4655453277 
    4655553278                                lookfor = LOOKFOR_CPP_BASECLASS;
    46556 @@ -8267,8 +8233,7 @@
     53279@@ -8244,8 +8394,41 @@
     53280                             */
     53281                            if (lookfor == LOOKFOR_INITIAL && terminated == ',')
     53282                            {
     53283-                               lookfor = LOOKFOR_ENUM_OR_INIT;
     53284-                               cont_amount = cin_first_id_amount();
     53285+                               if (curbuf->b_ind_js)
     53286+                               {
     53287+                                   /* Search for a line ending in a comma
     53288+                                    * and line up with the line below it
     53289+                                    * (could be the current line).
     53290+                                    * some = [
     53291+                                    *     1,     <- line up here
     53292+                                    *     2,
     53293+                                    * some = [
     53294+                                    *     3 +    <- line up here
     53295+                                    *       4 *
     53296+                                    *        5,
     53297+                                    *     6,
     53298+                                    */
     53299+                                   lookfor = LOOKFOR_NO_COMMA;
     53300+                                   amount = get_indent();          /* XXX */
     53301+                                   trypos = find_match_char('[',
     53302+                                                     curbuf->b_ind_maxparen);
     53303+                                   if (trypos != NULL)
     53304+                                   {
     53305+                                       if (trypos->lnum
     53306+                                                == curwin->w_cursor.lnum - 1)
     53307+                                       {
     53308+                                           /* Current line is first inside
     53309+                                            * [], line up with it. */
     53310+                                           break;
     53311+                                       }
     53312+                                       ourscope = trypos->lnum;
     53313+                                   }
     53314+                               }
     53315+                               else
     53316+                               {
     53317+                                   lookfor = LOOKFOR_ENUM_OR_INIT;
     53318+                                   cont_amount = cin_first_id_amount();
     53319+                               }
     53320                            }
     53321                            else
     53322                            {
     53323@@ -8255,7 +8438,8 @@
     53324                                                                /* XXX */
     53325                                    cont_amount = cin_get_equal_amount(
     53326                                                       curwin->w_cursor.lnum);
     53327-                               if (lookfor != LOOKFOR_TERM)
     53328+                               if (lookfor != LOOKFOR_TERM
     53329+                                                && lookfor != LOOKFOR_JS_KEY)
     53330                                    lookfor = LOOKFOR_UNTERM;
     53331                            }
     53332                        }
     53333@@ -8266,9 +8450,7 @@
     53334                 * Check if we are after a while (cond);
    4655753335                 * If so: Ignore until the matching "do".
    4655853336                 */
    46559                                                         /* XXX */
     53337-                                                       /* XXX */
    4656053338-               else if (cin_iswhileofdo_end(terminated, ind_maxparen,
    4656153339-                                                             ind_maxcomment))
    46562 +               else if (cin_iswhileofdo_end(terminated))
     53340+               else if (cin_iswhileofdo_end(terminated)) /* XXX */
    4656353341                {
    4656453342                    /*
    4656553343                     * Found an unterminated line after a while ();, line up
    46566 @@ -8292,7 +8257,7 @@
     53344@@ -8292,7 +8474,7 @@
    4656753345                        lookfor = LOOKFOR_TERM;
    4656853346                        amount = get_indent();      /* XXX */
     
    4657353351                    ++whilelevel;
    4657453352                }
    46575 @@ -8385,8 +8350,8 @@
     53353@@ -8385,8 +8567,8 @@
    4657653354 term_again:
    4657753355                        l = ml_get_curline();
     
    4658453362                            /*
    4658553363                             * Check if we are on a case label now.  This is
    46586 @@ -8413,21 +8378,21 @@
     53364@@ -8413,21 +8595,21 @@
    4658753365                         *      stat;
    4658853366                         * }
     
    4661253390 
    4661353391                        /*
    46614 @@ -8443,10 +8408,9 @@
     53392@@ -8443,10 +8625,9 @@
    4661553393                                && cin_iselse(l)
    4661653394                                && whilelevel == 0)
     
    4662653404                            continue;
    4662753405                        }
    46628 @@ -8456,9 +8420,8 @@
     53406@@ -8456,9 +8637,8 @@
    4662953407                         * that block.
    4663053408                         */
     
    4663853416                            curwin->w_cursor = *trypos;
    4663953417                            /* if not "else {" check for terminated again */
    46640 @@ -8477,11 +8440,11 @@
     53418@@ -8477,24 +8657,22 @@
    4664153419 
    4664253420       /* add extra indent for a comment */
     
    4665153429+         amount -= curbuf->b_ind_jump_label;
    4665253430     }
    46653  
    46654      /*
    46655 @@ -8502,7 +8465,7 @@
     53431-
     53432-    /*
     53433-     * ok -- we're not inside any sort of structure at all!
     53434-     *
     53435-     * this means we're at the top level, and everything should
     53436-     * basically just match where the previous line is, except
     53437-     * for the lines immediately following a function declaration,
     53438-     * which are K&R-style parameters and need to be indented.
     53439-     */
     53440     else
     53441     {
     53442        /*
     53443+        * ok -- we're not inside any sort of structure at all!
     53444+        *
     53445+        * This means we're at the top level, and everything should
     53446+        * basically just match where the previous line is, except
     53447+        * for the lines immediately following a function declaration,
     53448+        * which are K&R-style parameters and need to be indented.
     53449+        *
     53450         * if our line starts with an open brace, forget about any
     53451         * prevailing indent and make sure it looks like the start
     53452         * of a function
     53453@@ -8502,7 +8680,7 @@
    4665653454 
    4665753455        if (theline[0] == '{')
     
    4666253460 
    4666353461        /*
    46664 @@ -8519,11 +8482,10 @@
     53462@@ -8519,11 +8697,10 @@
    4666553463                && !cin_ends_in(theline, (char_u *)":", NULL)
    4666653464                && !cin_ends_in(theline, (char_u *)",", NULL)
     
    4667653474        else
    4667753475        {
    46678 @@ -8542,7 +8504,7 @@
     53476@@ -8542,7 +8719,7 @@
    4667953477                /*
    4668053478                 * If we're in a comment now, skip to the start of the comment.
     
    4668553483                    curwin->w_cursor.lnum = trypos->lnum + 1;
    4668653484                    curwin->w_cursor.col = 0;
    46687 @@ -8554,7 +8516,7 @@
     53485@@ -8554,7 +8731,7 @@
    4668853486                 * constructor initialization?
    4668953487                 */                                                 /* XXX */
     
    4669453492                    n = cin_is_cpp_baseclass(&col);
    4669553493                    l = ml_get_curline();
    46696 @@ -8562,8 +8524,7 @@
     53494@@ -8562,8 +8739,7 @@
    4669753495                if (n)
    4669853496                {
     
    4670453502                }
    4670553503 
    46706 @@ -8594,8 +8555,8 @@
     53504@@ -8594,8 +8770,8 @@
    4670753505                {
    4670853506                    /* take us back to opening paren */
     
    4671553513 
    4671653514                    /* For a line ending in ',' that is a continuation line go
    46717 @@ -8626,8 +8587,7 @@
     53515@@ -8626,8 +8802,7 @@
    4671853516                 * If the line looks like a function declaration, and we're
    4671953517                 * not in a comment, put it the left margin.
     
    4672553523                l = ml_get_curline();
    4672653524 
    46727 @@ -8675,10 +8635,9 @@
     53525@@ -8648,6 +8823,18 @@
     53526                    break;
     53527 
     53528                /*
     53529+                * If the previous line ends on '[' we are probably in an
     53530+                * array constant:
     53531+                * something = [
     53532+                *     234,  <- extra indent
     53533+                */
     53534+               if (cin_ends_in(l, (char_u *)"[", NULL))
     53535+               {
     53536+                   amount = get_indent() + ind_continuation;
     53537+                   break;
     53538+               }
     53539+
     53540+               /*
     53541                 * Find a line only has a semicolon that belongs to a previous
     53542                 * line ending in '}', e.g. before an #endif.  Don't increase
     53543                 * indent then.
     53544@@ -8675,10 +8862,9 @@
    4672853545                 * line (and the ones that follow) needs to be indented as
    4672953546                 * parameters.
     
    4673853555                }
    4673953556 
    46740 @@ -8707,8 +8666,7 @@
     53557@@ -8707,8 +8893,7 @@
    4674153558                 */
    4674253559                find_last_paren(l, '(', ')');
     
    4674853565                amount = get_indent();      /* XXX */
    4674953566                break;
    46750 @@ -8716,7 +8674,7 @@
     53567@@ -8716,7 +8901,7 @@
    4675153568 
    4675253569            /* add extra indent for a comment */
     
    4675753574            /* add extra indent if the previous line ended in a backslash:
    4675853575             *        "asdfasdf\
    46759 @@ -8751,11 +8709,9 @@
     53576@@ -8751,11 +8936,9 @@
    4676053577 }
    4676153578 
     
    4677053587     char_u     *look;
    4677153588     pos_T      *theirscope;
    46772 @@ -8785,13 +8741,13 @@
     53589@@ -8785,13 +8968,13 @@
    4677353590        if (cin_iselse(look)
    4677453591                || cin_isif(look)
     
    4678653603                break;
    4678753604 
    46788 @@ -8829,7 +8785,7 @@
     53605@@ -8829,7 +9012,7 @@
    4678953606             * if it was a "while" then we need to go back to
    4679053607             * another "do", so increment whilelevel.  XXX
     
    4679553612                ++whilelevel;
    4679653613                continue;
    46797 @@ -8926,7 +8882,7 @@
     53614@@ -8926,7 +9109,7 @@
    4679853615 {
    4679953616     char_u     buf[LSIZE];
     
    4680453621     while (*word != NUL)
    4680553622     {
    46806 @@ -9174,6 +9130,8 @@
     53623@@ -9046,10 +9229,12 @@
     53624                amount = 2;
     53625            else
     53626            {
     53627+               char_u *line = that;
     53628+
     53629                amount = 0;
     53630                while (*that && col)
     53631                {
     53632-                   amount += lbr_chartabsize_adv(&that, (colnr_T)amount);
     53633+                   amount += lbr_chartabsize_adv(line, &that, (colnr_T)amount);
     53634                    col--;
     53635                }
     53636 
     53637@@ -9072,7 +9257,7 @@
     53638 
     53639                    while (vim_iswhite(*that))
     53640                    {
     53641-                       amount += lbr_chartabsize(that, (colnr_T)amount);
     53642+                       amount += lbr_chartabsize(line, that, (colnr_T)amount);
     53643                        ++that;
     53644                    }
     53645 
     53646@@ -9110,15 +9295,16 @@
     53647                                                               && !quotecount)
     53648                                    --parencount;
     53649                                if (*that == '\\' && *(that+1) != NUL)
     53650-                                   amount += lbr_chartabsize_adv(&that,
     53651-                                                            (colnr_T)amount);
     53652-                               amount += lbr_chartabsize_adv(&that,
     53653-                                                            (colnr_T)amount);
     53654+                                   amount += lbr_chartabsize_adv(
     53655+                                               line, &that, (colnr_T)amount);
     53656+                               amount += lbr_chartabsize_adv(
     53657+                                               line, &that, (colnr_T)amount);
     53658                            }
     53659                        }
     53660                        while (vim_iswhite(*that))
     53661                        {
     53662-                           amount += lbr_chartabsize(that, (colnr_T)amount);
     53663+                           amount += lbr_chartabsize(
     53664+                                                line, that, (colnr_T)amount);
     53665                            that++;
     53666                        }
     53667                        if (!*that || *that == ';')
     53668@@ -9174,6 +9360,8 @@
    4680753669 /*
    4680853670  * Preserve files and exit.
     
    4681353675     void
    4681453676 preserve_exit()
    46815 @@ -9196,7 +9154,7 @@
     53677@@ -9196,7 +9384,7 @@
    4681653678     {
    4681753679        if (buf->b_ml.ml_mfp != NULL && buf->b_ml.ml_mfp->mf_fname != NULL)
     
    4682253684            out_flush();
    4682353685            ml_sync_all(FALSE, FALSE);  /* preserve all swap files */
    46824 @@ -9206,7 +9164,7 @@
     53686@@ -9206,7 +9394,7 @@
    4682553687 
    4682653688     ml_close_all(FALSE);           /* close all memfiles, without deleting */
     
    4683153693     getout(1);
    4683253694 }
    46833 @@ -10381,9 +10339,6 @@
     53695@@ -10381,9 +10569,6 @@
    4683453696 {
    4683553697     char_u     *curdir;
     
    4684153703 
    4684253704     if ((curdir = alloc((unsigned)MAXPATHL)) == NULL)
    46843 @@ -10396,37 +10351,13 @@
     53705@@ -10396,37 +10581,13 @@
    4684453706     if (path_ga.ga_len == 0)
    4684553707        return 0;
     
    4688153743     return gap->ga_len;
    4688253744 }
    46883 @@ -10710,7 +10641,7 @@
     53745@@ -10710,7 +10871,7 @@
    4688453746     else
    4688553747 #endif
     
    4689053752     if (buffer == NULL)
    4689153753        return 0;
    46892 @@ -10773,7 +10704,7 @@
     53754@@ -10773,7 +10934,7 @@
    4689353755        return;
    4689453756 
     
    4689953761 
    4690053762     /* Make room for another item in the file list. */
    46901 @@ -10810,13 +10741,16 @@
     53763@@ -10810,13 +10971,16 @@
    4690253764 
    4690353765 /*
     
    4691753779     char_u     *tempname;
    4691853780     char_u     *command;
    46919 @@ -10886,7 +10820,7 @@
     53781@@ -10886,7 +11050,7 @@
    4692053782        vim_free(buffer);
    4692153783        buffer = NULL;
     
    4692653788        /* Change NUL into SOH, otherwise the string is truncated. */
    4692753789        for (i = 0; i < len; ++i)
    46928 @@ -10895,6 +10829,8 @@
     53790@@ -10895,6 +11059,8 @@
    4692953791 
    4693053792        buffer[len] = NUL;      /* make sure the buffer is terminated */
     
    4693553797 done:
    4693653798     vim_free(tempname);
    46937 @@ -10936,3 +10872,41 @@
     53799@@ -10936,3 +11102,41 @@
    4693853800 {
    4693953801     return (p_im && stuff_empty() && typebuf_typed());
     
    4697953841diff -Naur vim74.orig/src/misc2.c vim74/src/misc2.c
    4698053842--- vim74.orig/src/misc2.c      2013-07-07 14:03:35.000000000 +0000
    46981 +++ vim74/src/misc2.c   2014-06-01 00:43:15.634143166 +0000
     53843+++ vim74/src/misc2.c   2014-07-21 23:33:41.296796265 +0000
    4698253844@@ -31,9 +31,7 @@
    4698353845     if (virtual_op != MAYBE)
     
    4700053862                    || ((ve_flags & VE_ONEMORE) && wcol < MAXCOL)
    4700153863 #endif
     53864@@ -205,10 +201,10 @@
     53865        {
     53866            /* Count a tab for what it's worth (if list mode not on) */
     53867 #ifdef FEAT_LINEBREAK
     53868-           csize = win_lbr_chartabsize(curwin, ptr, col, &head);
     53869+           csize = win_lbr_chartabsize(curwin, line, ptr, col, &head);
     53870            mb_ptr_adv(ptr);
     53871 #else
     53872-           csize = lbr_chartabsize_adv(&ptr, col);
     53873+           csize = lbr_chartabsize_adv(line, &ptr, col);
     53874 #endif
     53875            col += csize;
     53876        }
    4700253877@@ -487,7 +483,7 @@
    4700353878        {
     
    4711853993     }
    4711953994     return s;
    47120 @@ -3286,17 +3290,14 @@
     53995@@ -2152,7 +2156,8 @@
     53996     }
     53997 }
     53998 
     53999-#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
     54000+#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264) \
     54001+       || defined(PROTO)
     54002 /*
     54003  * Append the text in "gap" below the cursor line and clear "gap".
     54004  */
     54005@@ -3286,17 +3291,14 @@
    4712154006 {
    4712254007     if (State & NORMAL)
     
    4713854023     return State;
    4713954024 }
    47140 @@ -3734,7 +3735,6 @@
     54025@@ -3734,7 +3736,6 @@
    4714154026     }
    4714254027     if (finish_op)
     
    4714654031     {
    4714754032        if (*p_sel == 'e')
    47148 @@ -3742,7 +3742,6 @@
     54033@@ -3742,7 +3743,6 @@
    4714954034        else
    4715054035            return SHAPE_IDX_V;
     
    4715454039 }
    4715554040 #endif
    47156 @@ -4695,8 +4694,8 @@
     54041@@ -4695,8 +4695,8 @@
    4715754042        else
    4715854043        {
     
    4716554050 
    4716654051            if (p > search_ctx->ffsc_fix_path)
    47167 @@ -6496,13 +6495,15 @@
     54052@@ -6496,13 +6496,15 @@
    4716854053 get4c(fd)
    4716954054     FILE       *fd;
     
    4719054075diff -Naur vim74.orig/src/move.c vim74/src/move.c
    4719154076--- vim74.orig/src/move.c       2012-11-28 17:15:42.000000000 +0000
    47192 +++ vim74/src/move.c    2014-06-01 00:43:15.670809739 +0000
     54077+++ vim74/src/move.c    2014-07-21 23:33:41.333462836 +0000
    4719354078@@ -20,6 +20,7 @@
    4719454079 #include "vim.h"
     
    4733354218diff -Naur vim74.orig/src/netbeans.c vim74/src/netbeans.c
    4733454219--- vim74.orig/src/netbeans.c   2012-06-20 17:56:18.000000000 +0000
    47335 +++ vim74/src/netbeans.c        2014-06-01 00:43:15.750809536 +0000
     54220+++ vim74/src/netbeans.c        2014-07-21 23:33:41.400129329 +0000
    4733654221@@ -2232,11 +2232,9 @@
    4733754222 
     
    4734854233diff -Naur vim74.orig/src/normal.c vim74/src/normal.c
    4734954234--- vim74.orig/src/normal.c     2013-07-14 11:24:37.000000000 +0000
    47350 +++ vim74/src/normal.c  2014-06-01 00:43:15.757476185 +0000
     54235+++ vim74/src/normal.c  2014-07-21 23:33:41.430129250 +0000
    4735154236@@ -14,17 +14,15 @@
    4735254237 
     
    4899555880diff -Naur vim74.orig/src/ops.c vim74/src/ops.c
    4899655881--- vim74.orig/src/ops.c        2013-08-09 17:34:32.000000000 +0000
    48997 +++ vim74/src/ops.c     2014-06-01 00:43:15.767476160 +0000
     55882+++ vim74/src/ops.c     2014-07-21 23:33:41.460129172 +0000
    4899855883@@ -57,9 +57,7 @@
    4899955884     char_u     **y_array;      /* pointer to array of line pointers */
     
    4909755982     struct block_def   bd;
    4909855983     int                        incr;
    49099 @@ -733,14 +718,10 @@
     55984@@ -435,7 +420,9 @@
     55985        }
     55986        for ( ; vim_iswhite(*bd.textstart); )
     55987        {
     55988-           incr = lbr_chartabsize_adv(&bd.textstart, (colnr_T)(bd.start_vcol));
     55989+           /* TODO: is passing bd.textstart for start of the line OK? */
     55990+           incr = lbr_chartabsize_adv(bd.textstart, &bd.textstart,
     55991+                                                   (colnr_T)(bd.start_vcol));
     55992            total += incr;
     55993            bd.start_vcol += incr;
     55994        }
     55995@@ -495,7 +482,7 @@
     55996 
     55997        while (vim_iswhite(*non_white))
     55998        {
     55999-           incr = lbr_chartabsize_adv(&non_white, non_white_col);
     56000+           incr = lbr_chartabsize_adv(bd.textstart, &non_white, non_white_col);
     56001            non_white_col += incr;
     56002        }
     56003 
     56004@@ -520,7 +507,11 @@
     56005            verbatim_copy_width -= bd.start_char_vcols;
     56006        while (verbatim_copy_width < destination_col)
     56007        {
     56008-           incr = lbr_chartabsize(verbatim_copy_end, verbatim_copy_width);
     56009+           char_u *line = verbatim_copy_end;
     56010+
     56011+           /* TODO: is passing verbatim_copy_end for start of the line OK? */
     56012+           incr = lbr_chartabsize(line, verbatim_copy_end,
     56013+                                                        verbatim_copy_width);
     56014            if (verbatim_copy_width + incr > destination_col)
     56015                break;
     56016            verbatim_copy_width += incr;
     56017@@ -733,14 +724,10 @@
    4910056018      * there is no change still need to remove the Visual highlighting. */
    4910156019     if (last_changed != 0)
     
    4911256030     if (oap->line_count > p_report)
    4911356031     {
    49114 @@ -948,7 +929,6 @@
     56032@@ -948,7 +935,6 @@
    4911556033 }
    4911656034 #endif
     
    4912056038  * Obtain the contents of a "normal" register. The register is made empty.
    4912156039  * The returned pointer has allocated memory, use put_register() later.
    49122 @@ -1016,10 +996,10 @@
     56040@@ -1016,10 +1002,10 @@
    4912356041     *y_current = *(struct yankreg *)reg;
    4912456042     vim_free(reg);
     
    4913356051 
    4913456052     void
    49135 @@ -1034,7 +1014,6 @@
     56053@@ -1034,7 +1020,6 @@
    4913656054     vim_free(reg);
    4913756055     *y_current = tmp;
     
    4914156059 #if defined(FEAT_MOUSE) || defined(PROTO)
    4914256060 /*
    49143 @@ -1634,10 +1613,8 @@
     56061@@ -1634,10 +1619,8 @@
    4914456062     int                        n;
    4914556063     linenr_T           lnum;
     
    4915256070     int                        did_yank = FALSE;
    4915356071     int                        orig_regname = oap->regname;
    49154 @@ -1670,10 +1647,8 @@
     56072@@ -1670,10 +1653,8 @@
    4915556073      * delete linewise.  Don't do this for the change command or Visual mode.
    4915656074      */
     
    4916356081            && oap->motion_force == NUL
    4916456082            && oap->op_type == OP_DELETE)
    49165 @@ -1787,7 +1762,6 @@
     56083@@ -1787,7 +1768,6 @@
    4916656084        }
    4916756085     }
     
    4917156089      * block mode delete
    4917256090      */
    49173 @@ -1838,9 +1812,7 @@
     56091@@ -1838,9 +1818,7 @@
    4917456092                                                       oap->end.lnum + 1, 0L);
    4917556093        oap->line_count = 0;        /* no lines deleted */
     
    4918256100        if (oap->op_type == OP_CHANGE)
    4918356101        {
    49184 @@ -1924,13 +1896,10 @@
     56102@@ -1924,13 +1902,10 @@
    4918556103                return FAIL;
    4918656104 
     
    4919856116 
    4919956117            n = oap->end.col - oap->start.col + 1 - !oap->inclusive;
    49200 @@ -1967,11 +1936,8 @@
     56118@@ -1967,11 +1942,8 @@
    4920156119            }
    4920256120            else
     
    4921256130        }
    4921356131        else                            /* delete characters between lines */
    49214 @@ -2008,15 +1974,12 @@
     56132@@ -2008,15 +1980,12 @@
    4921556133            {
    4921656134                /* delete from start of line until op_end */
     
    4923156149     }
    4923256150 
    49233 @@ -2025,14 +1988,12 @@
     56151@@ -2025,14 +1994,12 @@
    4923456152 #ifdef FEAT_VIRTUALEDIT
    4923556153 setmarks:
     
    4924656164     curbuf->b_op_start = oap->start;
    4924756165 
    49248 @@ -2074,10 +2035,15 @@
     56166@@ -2074,10 +2041,15 @@
    4924956167     char_u             *newp, *oldp;
    4925056168     size_t             oldlen;
     
    4926256180     if (has_mbyte)
    4926356181        mb_adjust_opend(oap);
    49264 @@ -2164,25 +2130,44 @@
     56182@@ -2164,25 +2136,44 @@
    4926556183            /* insert pre-spaces */
    4926656184            copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
     
    4931956237     }
    4932056238     else
    49321 @@ -2294,9 +2279,7 @@
     56239@@ -2294,9 +2285,7 @@
    4932256240     oparg_T    *oap;
    4932356241 {
     
    4932956247 
    4933056248     if (u_save((linenr_T)(oap->start.lnum - 1),
    49331 @@ -2304,7 +2287,6 @@
     56249@@ -2304,7 +2293,6 @@
    4933256250        return;
    4933356251 
     
    4933756255     {
    4933856256        for (; pos.lnum <= oap->end.lnum; ++pos.lnum)
    49339 @@ -2316,7 +2298,7 @@
     56257@@ -2316,7 +2304,7 @@
    4934056258            one_change = swapchars(oap->op_type, &pos, bd.textlen);
    4934156259            did_change |= one_change;
     
    4934656264            {
    4934756265                char_u *ptr = ml_get_buf(curbuf, pos.lnum, FALSE);
    49348 @@ -2326,13 +2308,12 @@
     56266@@ -2326,13 +2314,12 @@
    4934956267                netbeans_inserted(curbuf, pos.lnum, bd.textcol,
    4935056268                                                &ptr[bd.textcol], bd.textlen);
     
    4936156279        if (oap->motion_type == MLINE)
    4936256280        {
    49363 @@ -2388,11 +2369,9 @@
     56281@@ -2388,11 +2375,9 @@
    4936456282        }
    4936556283     }
     
    4937356291     /*
    4937456292      * Set '[ and '] marks.
    49375 @@ -2617,6 +2596,47 @@
     56293@@ -2617,6 +2602,47 @@
    4937656294     {
    4937756295        struct block_def        bd2;
     
    4942156339         * Spaces and tabs in the indent may have changed to other spaces and
    4942256340         * tabs.  Get the starting column again and correct the length.
    49423 @@ -2953,10 +2973,8 @@
     56341@@ -2953,10 +2979,8 @@
    4942456342     if (       oap->motion_type == MCHAR
    4942556343            && oap->start.col == 0
     
    4943256350            && yanklines > 1)
    4943356351     {
    49434 @@ -2967,9 +2985,7 @@
     56352@@ -2967,9 +2991,7 @@
    4943556353 
    4943656354     y_current->y_size = yanklines;
     
    4944256360                                                            yanklines), TRUE);
    4944356361 
    49444 @@ -2982,7 +2998,6 @@
     56362@@ -2982,7 +3004,6 @@
    4944556363     y_idx = 0;
    4944656364     lnum = oap->start.lnum;
     
    4945056368     {
    4945156369        /* Visual block mode */
    49452 @@ -2992,19 +3007,16 @@
     56370@@ -2992,19 +3013,16 @@
    4945356371        if (curwin->w_curswant == MAXCOL && y_current->y_width > 0)
    4945456372            y_current->y_width--;
     
    4947056388            case MLINE:
    4947156389                if ((y_current->y_array[y_idx] =
    49472 @@ -3141,9 +3153,7 @@
     56390@@ -3138,12 +3156,12 @@
     56391        vim_free(y_current->y_array);
     56392        y_current = curr;
     56393     }
     56394+    if (curwin->w_p_rnu)
     56395+       redraw_later(SOME_VALID);       /* cursor moved to start */
    4947356396     if (mess)                  /* Display message about yank? */
    4947456397     {
     
    4948056403            yanklines = 0;
    4948156404        /* Some versions of Vi use ">=" here, some don't...  */
    49482 @@ -3153,17 +3163,13 @@
     56405@@ -3153,17 +3171,13 @@
    4948356406            update_topline_redraw();
    4948456407            if (yanklines == 1)
     
    4949856421                smsg((char_u *)_("%ld lines yanked"), yanklines);
    4949956422        }
    49500 @@ -3174,11 +3180,7 @@
     56423@@ -3174,11 +3188,7 @@
    4950156424      */
    4950256425     curbuf->b_op_start = oap->start;
     
    4951156434        curbuf->b_op_start.col = 0;
    4951256435        curbuf->b_op_end.col = MAXCOL;
    49513 @@ -3315,7 +3317,6 @@
     56436@@ -3315,7 +3325,6 @@
    4951456437     long       i;                      /* index in y_array[] */
    4951556438     int                y_type;
     
    4951956442     long       y_width = 0;
    4952056443     colnr_T    vcol;
    49521 @@ -3323,7 +3324,6 @@
     56444@@ -3323,7 +3332,6 @@
    4952256445     int                incr = 0;
    4952356446     long       j;
     
    4952756450     long       nr_lines = 0;
    4952856451     pos_T      new_cursor;
    49529 @@ -3432,14 +3432,11 @@
     56452@@ -3432,14 +3440,11 @@
    4953056453        get_yank_register(regname, FALSE);
    4953156454 
     
    4954256465     {
    4954356466        if (flags & PUT_LINE_SPLIT)
    49544 @@ -3470,7 +3467,6 @@
     56467@@ -3470,7 +3475,6 @@
    4954556468        curbuf->b_op_start = curwin->w_cursor;  /* default for '[ mark */
    4954656469        curbuf->b_op_end = curwin->w_cursor;    /* default for '] mark */
     
    4955056473     if (flags & PUT_LINE)      /* :put command or "p" in Visual line mode. */
    4955156474        y_type = MLINE;
    49552 @@ -3482,7 +3478,6 @@
     56475@@ -3482,7 +3486,6 @@
    4955356476        goto end;
    4955456477     }
     
    4955856481     {
    4955956482        lnum = curwin->w_cursor.lnum + y_size + 1;
    49560 @@ -3491,9 +3486,7 @@
     56483@@ -3491,9 +3494,7 @@
    4956156484        if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
    4956256485            goto end;
     
    4956956492        lnum = curwin->w_cursor.lnum;
    4957056493 #ifdef FEAT_FOLDING
    49571 @@ -3545,7 +3538,6 @@
     56494@@ -3545,7 +3546,6 @@
    4957256495     lnum = curwin->w_cursor.lnum;
    4957356496     col = curwin->w_cursor.col;
     
    4957756500      * Block mode
    4957856501      */
    49579 @@ -3727,7 +3719,6 @@
     56502@@ -3623,7 +3623,7 @@
     56503            for (ptr = oldp; vcol < col && *ptr; )
     56504            {
     56505                /* Count a tab for what it's worth (if list mode not on) */
     56506-               incr = lbr_chartabsize_adv(&ptr, (colnr_T)vcol);
     56507+               incr = lbr_chartabsize_adv(oldp, &ptr, (colnr_T)vcol);
     56508                vcol += incr;
     56509            }
     56510            bd.textcol = (colnr_T)(ptr - oldp);
     56511@@ -3657,7 +3657,7 @@
     56512            /* calculate number of spaces required to fill right side of block*/
     56513            spaces = y_width + 1;
     56514            for (j = 0; j < yanklen; j++)
     56515-               spaces -= lbr_chartabsize(&y_array[i][j], 0);
     56516+               spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0);
     56517            if (spaces < 0)
     56518                spaces = 0;
     56519 
     56520@@ -3727,7 +3727,6 @@
    4958056521            curwin->w_cursor.lnum = lnum;
    4958156522     }
     
    4958556526        /*
    4958656527         * Character or Line mode
    49587 @@ -3776,25 +3767,35 @@
     56528@@ -3776,25 +3775,35 @@
    4958856529         */
    4958956530        if (y_type == MCHAR && y_size == 1)
     
    4963856579            /* For "CTRL-O p" in Insert mode, put cursor after last char */
    4963956580            if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND)))
    49640 @@ -3955,6 +3956,8 @@
     56581@@ -3955,6 +3964,8 @@
    4964156582     if (regname == '=')
    4964256583        vim_free(y_array);
     
    4964756588     adjust_cursor_eol();
    4964856589 }
    49649 @@ -4005,7 +4008,8 @@
     56590@@ -4005,7 +4016,8 @@
    4965056591 #  endif
    4965156592 # endif
     
    4965756598        ;
    4965856599 }
    49659 @@ -4319,17 +4323,20 @@
     56600@@ -4319,17 +4331,20 @@
    4966056601 /*
    4966156602  * Join 'count' lines (minimal 2) at cursor position.
     
    4968156622     char_u     *curr = NULL;
    4968256623     char_u      *curr_start = NULL;
    49683 @@ -4380,6 +4387,12 @@
     56624@@ -4380,6 +4395,12 @@
    4968456625     for (t = 0; t < count; ++t)
    4968556626     {
     
    4969456635        if (remove_comments)
    4969556636        {
    49696 @@ -4496,6 +4509,13 @@
     56637@@ -4496,6 +4517,13 @@
    4969756638     }
    4969856639     ml_replace(curwin->w_cursor.lnum, newp, FALSE);
     
    4970856649      * the deleted line. */
    4970956650     changed_lines(curwin->w_cursor.lnum, currsize,
    49710 @@ -4631,11 +4651,9 @@
     56651@@ -4631,11 +4659,9 @@
    4971156652        return;
    4971256653     curwin->w_cursor = oap->start;
     
    4972056661     /* Set '[ mark at the start of the formatted area */
    4972156662     curbuf->b_op_start = oap->start;
    49722 @@ -4667,7 +4685,6 @@
     56663@@ -4667,7 +4693,6 @@
    4972356664        saved_cursor.lnum = 0;
    4972456665     }
     
    4972856669     {
    4972956670        win_T   *wp;
    49730 @@ -4685,7 +4702,6 @@
     56671@@ -4685,7 +4710,6 @@
    4973156672            }
    4973256673        }
     
    4973656677 
    4973756678 #if defined(FEAT_EVAL) || defined(PROTO)
    49738 @@ -4696,11 +4712,9 @@
     56679@@ -4696,11 +4720,9 @@
    4973956680 op_formatexpr(oap)
    4974056681     oparg_T    *oap;
     
    4974856689     if (fex_format(oap->start.lnum, oap->line_count, NUL) != 0)
    4974956690        /* As documented: when 'formatexpr' returns non-zero fall back to
    49750 @@ -4971,7 +4985,7 @@
     56691@@ -4971,7 +4993,7 @@
    4975156692 
    4975256693            /*
     
    4975756698            if (!is_end_par)
    4975856699            {
    49759 @@ -4981,13 +4995,27 @@
     56700@@ -4981,13 +5003,27 @@
    4976056701                if (line_count < 0 && u_save_cursor() == FAIL)
    4976156702                    break;
     
    4978756728                    beep_flush();
    4978856729                    break;
    49789 @@ -5126,7 +5154,6 @@
     56730@@ -5126,7 +5162,6 @@
    4979056731     return FALSE;
    4979156732 }
     
    4979556736  * prepare a few things for block mode yank/delete/tilde
    4979656737  *
    49797 @@ -5285,7 +5312,6 @@
     56738@@ -5174,7 +5209,7 @@
     56739     while (bdp->start_vcol < oap->start_vcol && *pstart)
     56740     {
     56741        /* Count a tab for what it's worth (if list mode not on) */
     56742-       incr = lbr_chartabsize(pstart, (colnr_T)bdp->start_vcol);
     56743+       incr = lbr_chartabsize(line, pstart, (colnr_T)bdp->start_vcol);
     56744        bdp->start_vcol += incr;
     56745 #ifdef FEAT_VISUALEXTRA
     56746        if (vim_iswhite(*pstart))
     56747@@ -5243,7 +5278,10 @@
     56748            {
     56749                /* Count a tab for what it's worth (if list mode not on) */
     56750                prev_pend = pend;
     56751-               incr = lbr_chartabsize_adv(&pend, (colnr_T)bdp->end_vcol);
     56752+               /* TODO: is passing prev_pend for start of the line OK?
     56753+                * perhaps it should be "line". */
     56754+               incr = lbr_chartabsize_adv(prev_pend, &pend,
     56755+                                                     (colnr_T)bdp->end_vcol);
     56756                bdp->end_vcol += incr;
     56757            }
     56758            if (bdp->end_vcol <= oap->end_vcol
     56759@@ -5285,7 +5323,6 @@
    4979856760     bdp->textcol = (colnr_T) (pstart - line);
    4979956761     bdp->textstart = pstart;
     
    4980356765 #ifdef FEAT_RIGHTLEFT
    4980456766 static void reverse_line __ARGS((char_u *s));
    49805 @@ -5636,19 +5662,13 @@
     56767@@ -5636,19 +5673,13 @@
    4980656768        str = skipwhite(skiptowhite(str));
    4980756769        if (STRNCMP(str, "CHAR", 4) == 0)
     
    4982356785 
    4982456786     while (!(eof = viminfo_readline(virp))
    49825 @@ -5756,11 +5776,9 @@
     56787@@ -5756,11 +5787,9 @@
    4982656788            case MCHAR:
    4982756789                type = (char_u *)"CHAR";
     
    4983556797                sprintf((char *)IObuff, _("E574: Unknown register type %d"),
    4983656798                                                            y_regs[i].y_type);
    49837 @@ -5774,13 +5792,7 @@
     56799@@ -5774,13 +5803,7 @@
    4983856800        fprintf(fp, "\"%c", c);
    4983956801        if (c == execreg_lastc)
     
    4985056812        /* If max_num_lines < 0, then we save ALL the lines in the register */
    4985156813        if (max_num_lines > 0 && num_lines > max_num_lines)
    49852 @@ -5927,10 +5939,8 @@
     56814@@ -5927,10 +5950,8 @@
    4985356815 {
    4985456816     struct yankreg *old_y_previous, *old_y_current;
     
    4986156823     int                old_set_curswant;
    4986256824     pos_T      old_op_start, old_op_end;
    49863 @@ -5951,10 +5961,8 @@
     56825@@ -5951,10 +5972,8 @@
    4986456826        old_set_curswant = curwin->w_set_curswant;
    4986556827        old_op_start = curbuf->b_op_start;
     
    4987256834        oa.regname = (cbd == &clip_plus ? '+' : '*');
    4987356835        oa.op_type = OP_YANK;
    49874 @@ -5972,10 +5980,8 @@
     56836@@ -5972,10 +5991,8 @@
    4987556837        curwin->w_set_curswant = old_set_curswant;
    4987656838        curbuf->b_op_start = old_op_start;
     
    4988356845     else
    4988456846     {
    49885 @@ -6005,7 +6011,7 @@
     56847@@ -6005,7 +6022,7 @@
    4988656848 
    4988756849     clip_free_selection(cbd);
     
    4989256854 
    4989356855 /*
    49894 @@ -6078,7 +6084,6 @@
     56856@@ -6078,7 +6095,6 @@
    4989556857 }
    4989656858 
     
    4990056862  * If we have written to a clipboard register, send the text to the clipboard.
    4990156863  */
    49902 @@ -6096,7 +6101,6 @@
     56864@@ -6096,7 +6112,6 @@
    4990356865        clip_gen_set_selection(&clip_plus);
    4990456866     }
     
    4990856870 #endif /* FEAT_CLIPBOARD || PROTO */
    4990956871 
    49910 @@ -6115,7 +6119,7 @@
     56872@@ -6115,7 +6130,7 @@
    4991156873     curr = y_current;
    4991256874     y_current = &y_regs[TILDE_REGISTER];
     
    4991756879 }
    4991856880 #endif
    49919 @@ -6154,30 +6158,63 @@
     56881@@ -6154,30 +6169,63 @@
    4992056882     regname = may_get_selection(regname);
    4992156883 #endif
     
    4998756949     long       i;
    4998856950     char_u     *retval;
    49989 @@ -6187,13 +6224,11 @@
     56951@@ -6187,13 +6235,11 @@
    4999056952     /* Don't allow using an expression register inside an expression */
    4999156953     if (regname == '=')
     
    5000656968 
    5000756969     if (regname == '@')            /* "@@" is used for unnamed register */
    50008 @@ -6211,15 +6246,33 @@
     56970@@ -6211,15 +6257,33 @@
    5000956971     {
    5001056972        if (retval == NULL)
     
    5004357005      * Compute length of resulting string.
    5004457006      */
    50045 @@ -6261,6 +6314,47 @@
     57007@@ -6261,6 +6325,47 @@
    5004657008     return retval;
    5004757009 }
     
    5009157053  * Store string "str" in register "name".
    5009257054  * "maxlen" is the maximum number of bytes to use, -1 for all bytes.
    50093 @@ -6281,6 +6375,51 @@
     57055@@ -6281,6 +6386,51 @@
    5009457056 }
    5009557057 
     
    5014357105     int                name;
    5014457106     char_u     *str;
    50145 @@ -6317,45 +6456,22 @@
     57107@@ -6317,45 +6467,22 @@
    5014657108            s = concat_str(get_expr_line_src(), p);
    5014757109            vim_free(p);
     
    5019457156 #endif /* FEAT_EVAL */
    5019557157 
    50196 @@ -6365,12 +6481,13 @@
     57158@@ -6365,12 +6492,13 @@
    5019757159  * is appended.
    5019857160  */
     
    5020957171     int                type;                   /* MCHAR, MLINE or MBLOCK */
    5021057172     int                lnum;
    50211 @@ -6381,16 +6498,16 @@
     57173@@ -6381,16 +6509,16 @@
    5021257174     int                extraline = 0;          /* extra line at the end */
    5021357175     int                append = FALSE;         /* append to last line in register */
     
    5022957191     else
    5023057192        type = yank_type;
    50231 @@ -6399,18 +6516,26 @@
     57193@@ -6399,18 +6527,26 @@
    5023257194      * Count the number of lines within the string
    5023357195      */
     
    5026557227 
    5026657228     /*
    50267 @@ -6425,58 +6550,65 @@
     57229@@ -6425,58 +6561,65 @@
    5026857230        pp[lnum] = y_ptr->y_array[lnum];
    5026957231     vim_free(y_ptr->y_array);
     
    5036757329 #endif /* FEAT_CLIPBOARD || FEAT_EVAL || PROTO */
    5036857330 
    50369 @@ -6570,12 +6702,10 @@
     57331@@ -6570,12 +6713,10 @@
    5037057332     long       word_count_cursor = 0;
    5037157333     int                eol_size;
     
    5038057342     /*
    5038157343      * Compute the length of the file in characters.
    50382 @@ -6591,7 +6721,6 @@
     57344@@ -6591,7 +6732,6 @@
    5038357345        else
    5038457346            eol_size = 1;
     
    5038857350        {
    5038957351            if (lt(VIsual, curwin->w_cursor))
    50390 @@ -6635,7 +6764,6 @@
     57352@@ -6635,7 +6775,6 @@
    5039157353            }
    5039257354            line_count_selected = max_pos.lnum - min_pos.lnum + 1;
     
    5039657358        for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
    5039757359        {
    50398 @@ -6648,7 +6776,6 @@
     57360@@ -6648,7 +6787,6 @@
    5039957361                last_check = byte_count + 100000L;
    5040057362            }
     
    5040457366            if (VIsual_active
    5040557367                    && lnum >= min_pos.lnum && lnum <= max_pos.lnum)
    50406 @@ -6659,13 +6786,13 @@
     57368@@ -6659,13 +6797,13 @@
    5040757369                switch (VIsual_mode)
    5040857370                {
     
    5042257384                        len = (long)bd.textlen;
    5042357385                        break;
    50424 @@ -6697,7 +6824,6 @@
     57386@@ -6697,7 +6835,6 @@
    5042557387                }
    5042657388            }
     
    5043057392                /* In non-visual mode, check for the line the cursor is on */
    5043157393                if (lnum == curwin->w_cursor.lnum)
    50432 @@ -6719,7 +6845,6 @@
     57394@@ -6719,7 +6856,6 @@
    5043357395        if (!curbuf->b_p_eol && curbuf->b_p_bin)
    5043457396            byte_count -= eol_size;
     
    5043857400        {
    5043957401            if (VIsual_mode == Ctrl_V && curwin->w_curswant < MAXCOL)
    50440 @@ -6750,7 +6875,6 @@
     57402@@ -6750,13 +6886,13 @@
    5044157403                        byte_count_cursor, byte_count);
    5044257404        }
     
    5044657408            p = ml_get_curline();
    5044757409            validate_virtcol();
     57410            col_print(buf1, sizeof(buf1), (int)curwin->w_cursor.col + 1,
     57411                    (int)curwin->w_virtcol + 1);
     57412-           col_print(buf2, sizeof(buf2), (int)STRLEN(p), linetabsize(p));
     57413+           col_print(buf2, sizeof(buf2), (int)STRLEN(p),
     57414+                               linetabsize(p));
     57415 
     57416            if (char_count_cursor == byte_count_cursor
     57417                    && char_count == byte_count)
    5044857418diff -Naur vim74.orig/src/option.c vim74/src/option.c
    5044957419--- vim74.orig/src/option.c     2013-07-17 19:39:13.000000000 +0000
    50450 +++ vim74/src/option.c  2014-06-01 00:43:15.777476134 +0000
     57420+++ vim74/src/option.c  2014-07-21 23:33:41.516795691 +0000
    5045157421@@ -134,6 +134,7 @@
    5045257422 #define PV_KP          OPT_BOTH(OPT_BUF(BV_KP))
     
    5045757427 #define PV_MA          OPT_BUF(BV_MA)
    5045857428 #define PV_ML          OPT_BUF(BV_ML)
    50459 @@ -234,6 +235,7 @@
     57429@@ -187,6 +188,10 @@
     57430 #ifdef FEAT_ARABIC
     57431 # define PV_ARAB       OPT_WIN(WV_ARAB)
     57432 #endif
     57433+#ifdef FEAT_LINEBREAK
     57434+# define PV_BRI                OPT_WIN(WV_BRI)
     57435+# define PV_BRIOPT     OPT_WIN(WV_BRIOPT)
     57436+#endif
     57437 #ifdef FEAT_DIFF
     57438 # define PV_DIFF       OPT_WIN(WV_DIFF)
     57439 #endif
     57440@@ -234,6 +239,7 @@
    5046057441 #ifdef FEAT_STL_OPT
    5046157442 # define PV_STL                OPT_BOTH(OPT_WIN(WV_STL))
     
    5046557446 # define PV_WFH                OPT_WIN(WV_WFH)
    5046657447 #endif
    50467 @@ -1627,11 +1629,7 @@
     57448@@ -646,6 +652,24 @@
     57449                            {(char_u *)0L, (char_u *)0L}
     57450 #endif
     57451                            SCRIPTID_INIT},
     57452+    {"breakindent",   "bri",  P_BOOL|P_VI_DEF|P_VIM|P_RWIN,
     57453+#ifdef FEAT_LINEBREAK
     57454+                           (char_u *)VAR_WIN, PV_BRI,
     57455+                           {(char_u *)FALSE, (char_u *)0L}
     57456+#else
     57457+                           (char_u *)NULL, PV_NONE,
     57458+                           {(char_u *)0L, (char_u *)0L}
     57459+#endif
     57460+                           SCRIPTID_INIT},
     57461+    {"breakindentopt", "briopt", P_STRING|P_ALLOCED|P_VI_DEF|P_RBUF|P_COMMA|P_NODUP,
     57462+#ifdef FEAT_LINEBREAK
     57463+                           (char_u *)VAR_WIN, PV_BRIOPT,
     57464+                           {(char_u *)"", (char_u *)NULL}
     57465+#else
     57466+                           (char_u *)NULL, PV_NONE,
     57467+                           {(char_u *)"", (char_u *)NULL}
     57468+#endif
     57469+                           SCRIPTID_INIT},
     57470     {"browsedir",   "bsdir",P_STRING|P_VI_DEF,
     57471 #ifdef FEAT_BROWSE
     57472                            (char_u *)&p_bsdir, PV_NONE,
     57473@@ -1390,7 +1414,7 @@
     57474                            SCRIPTID_INIT},
     57475     {"history",            "hi",   P_NUM|P_VIM,
     57476                            (char_u *)&p_hi, PV_NONE,
     57477-                           {(char_u *)0L, (char_u *)20L} SCRIPTID_INIT},
     57478+                           {(char_u *)0L, (char_u *)50L} SCRIPTID_INIT},
     57479     {"hkmap",      "hk",   P_BOOL|P_VI_DEF|P_VIM,
     57480 #ifdef FEAT_RIGHTLEFT
     57481                            (char_u *)&p_hkmap, PV_NONE,
     57482@@ -1627,11 +1651,7 @@
    5046857483 #endif
    5046957484                            SCRIPTID_INIT},
     
    5047757492     {"keywordprg",  "kp",   P_STRING|P_EXPAND|P_VI_DEF|P_SECURE,
    5047857493                            (char_u *)&p_kp, PV_KP,
    50479 @@ -1654,7 +1652,7 @@
     57494@@ -1654,7 +1674,7 @@
    5048057495 #endif
    5048157496 #endif
     
    5048657501                            (char_u *)&p_langmap, PV_NONE,
    5048757502                            {(char_u *)"",      /* unmatched } */
    50488 @@ -1717,7 +1715,7 @@
     57503@@ -1717,7 +1737,7 @@
    5048957504                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
    5049057505     {"lispwords",   "lw",   P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
     
    5049557510 #else
    5049657511                            (char_u *)NULL, PV_NONE,
    50497 @@ -2188,19 +2186,11 @@
     57512@@ -2188,19 +2208,11 @@
    5049857513                            (char_u *)&p_secure, PV_NONE,
    5049957514                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     
    5051557530     {"sessionoptions", "ssop", P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
    5051657531 #ifdef FEAT_SESSION
    50517 @@ -2683,7 +2673,7 @@
     57532@@ -2683,7 +2695,7 @@
    5051857533 #endif
    5051957534                            {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     
    5052457539 #if defined(UNIX) || defined(WIN3264) || defined(OS2) || defined(VMS)
    5052557540                            (char_u *)1000L,
    50526 @@ -2977,13 +2967,9 @@
     57541@@ -2977,13 +2989,9 @@
    5052757542 static char *(p_wak_values[]) = {"yes", "menu", "no", NULL};
    5052857543 #endif
     
    5053857553 static char *(p_bsdir_values[]) = {"current", "last", "buffer", NULL};
    5053957554 #endif
    50540 @@ -3313,6 +3299,7 @@
     57555@@ -3066,6 +3074,7 @@
     57556 static char_u *get_varp_scope __ARGS((struct vimoption *p, int opt_flags));
     57557 static char_u *get_varp __ARGS((struct vimoption *));
     57558 static void option_value2string __ARGS((struct vimoption *, int opt_flags));
     57559+static void check_winopt __ARGS((winopt_T *wop));
     57560 static int wc_use_keyname __ARGS((char_u *varp, long *wcp));
     57561 #ifdef FEAT_LANGMAP
     57562 static void langmap_init __ARGS((void));
     57563@@ -3313,6 +3322,7 @@
    5054157564 
    5054257565     curbuf->b_p_initialized = TRUE;
     
    5054657569     check_win_options(curwin);
    5054757570     check_options();
    50548 @@ -3817,37 +3804,7 @@
     57571@@ -3817,37 +3827,7 @@
    5054957572     else
    5055057573        do_sp = !(options[idx_sp].flags & P_WAS_SET);
     
    5058557608     {
    5058657609        /*
    50587 @@ -3888,6 +3845,7 @@
     57610@@ -3888,6 +3868,7 @@
    5058857611                    || fnamecmp(p, "zsh") == 0
    5058957612                    || fnamecmp(p, "zsh-beta") == 0
     
    5059357616                    || fnamecmp(p, "cmd") == 0
    5059457617                    || fnamecmp(p, "sh.exe") == 0
    50595 @@ -4512,8 +4470,16 @@
     57618@@ -4512,8 +4493,16 @@
    5059657619                                                ((flags & P_VI_DEF) || cp_val)
    5059757620                                                 ?  VI_DEFAULT : VIM_DEFAULT];
     
    5061257635                                    || (long *)varp == &p_wcm)
    5061357636                                && (*arg == '<'
    50614 @@ -5372,6 +5338,7 @@
     57637@@ -5290,6 +5279,9 @@
     57638     /* set cedit_key */
     57639     (void)check_cedit();
     57640 #endif
     57641+#ifdef FEAT_LINEBREAK
     57642+    briopt_check();
     57643+#endif
     57644 }
     57645 
     57646 /*
     57647@@ -5372,6 +5364,7 @@
    5061557648 #ifdef FEAT_CINDENT
    5061657649     check_string_option(&buf->b_p_cink);
     
    5062057653 #ifdef FEAT_AUTOCMD
    5062157654     check_string_option(&buf->b_p_ft);
    50622 @@ -5401,6 +5368,9 @@
     57655@@ -5401,6 +5394,9 @@
    5062357656     check_string_option(&buf->b_p_dict);
    5062457657     check_string_option(&buf->b_p_tsr);
     
    5063057663 
    5063157664 /*
    50632 @@ -6563,7 +6533,6 @@
     57665@@ -5739,6 +5735,14 @@
     57666                     *p_pm == '.' ? p_pm + 1 : p_pm) == 0)
     57667            errmsg = (char_u *)N_("E589: 'backupext' and 'patchmode' are equal");
     57668     }
     57669+#ifdef FEAT_LINEBREAK
     57670+    /* 'breakindentopt' */
     57671+    else if (varp == &curwin->w_p_briopt)
     57672+    {
     57673+       if (briopt_check() == FAIL)
     57674+           errmsg = e_invarg;
     57675+    }
     57676+#endif
     57677 
     57678     /*
     57679      * 'isident', 'iskeyword', 'isprint or 'isfname' option: refill chartab[]
     57680@@ -6563,7 +6567,6 @@
    5063357681     }
    5063457682 #endif
     
    5063857686     else if (varp == &p_sel)
    5063957687     {
    50640 @@ -6578,7 +6547,6 @@
     57688@@ -6578,7 +6581,6 @@
    5064157689        if (check_opt_strings(p_slm, p_slm_values, TRUE) != OK)
    5064257690            errmsg = e_invarg;
     
    5064657694 #ifdef FEAT_BROWSE
    5064757695     /* 'browsedir' */
    50648 @@ -6590,7 +6558,6 @@
     57696@@ -6590,7 +6592,6 @@
    5064957697     }
    5065057698 #endif
     
    5065457702     else if (varp == &p_km)
    5065557703     {
    50656 @@ -6602,7 +6569,6 @@
     57704@@ -6602,7 +6603,6 @@
    5065757705            km_startsel = (vim_strchr(p_km, 'a') != NULL);
    5065857706        }
     
    5066257710     /* 'mousemodel' */
    5066357711     else if (varp == &p_mousem)
    50664 @@ -6990,6 +6956,15 @@
     57712@@ -6990,6 +6990,15 @@
    5066557713     }
    5066657714 #endif
     
    5067857726     else
    5067957727     {
    50680 @@ -7102,6 +7077,11 @@
     57728@@ -7102,6 +7111,11 @@
    5068157729        if (varp == &(curwin->w_s->b_p_spl))
    5068257730        {
     
    5069057738            /*
    5069157739             * Source the spell/LANG.vim in 'runtimepath'.
    50692 @@ -7109,11 +7089,10 @@
     57740@@ -7109,11 +7123,10 @@
    5069357741             * Use the first name in 'spelllang' up to '_region' or
    5069457742             * '.encoding'.
     
    5070457752        }
    5070557753 #endif
    50706 @@ -7791,7 +7770,7 @@
     57754@@ -7791,7 +7804,7 @@
    5070757755     /* when 'hlsearch' is set or reset: reset no_hlsearch */
    5070857756     else if ((int *)varp == &p_hls)
     
    5071357761 #endif
    5071457762 
    50715 @@ -8338,14 +8317,24 @@
     57763@@ -8338,14 +8351,24 @@
    5071657764            curwin->w_p_fdc = 12;
    5071757765        }
     
    5073957787 #ifdef FEAT_MBYTE
    5074057788     /* 'maxcombine' */
    50741 @@ -8467,6 +8456,13 @@
     57789@@ -8467,6 +8490,13 @@
    5074257790        u_sync(TRUE);
    5074357791        p_ul = value;
     
    5075357801 #ifdef FEAT_LINEBREAK
    5075457802     /* 'numberwidth' must be positive */
    50755 @@ -8820,7 +8816,7 @@
     57803@@ -8599,6 +8629,11 @@
     57804        errmsg = e_positive;
     57805        p_hi = 0;
     57806     }
     57807+    else if (p_hi > 10000)
     57808+    {
     57809+       errmsg = e_invarg;
     57810+       p_hi = 10000;
     57811+    }
     57812     if (p_re < 0 || p_re > 2)
     57813     {
     57814        errmsg = e_invarg;
     57815@@ -8820,7 +8855,7 @@
    5075657816 }
    5075757817 #endif
     
    5076257822  * Returns the option attributes and its value. Unlike the above function it
    5076357823  * will return either global value or local value of the option depending on
    50764 @@ -8833,7 +8829,8 @@
     57824@@ -8833,7 +8868,8 @@
    5076557825  * opt_type). Uses
    5076657826  *
     
    5077257832  *
    5077357833  * Possible opt_type values: see SREQ_* in vim.h
    50774 @@ -8956,6 +8953,68 @@
     57834@@ -8956,6 +8992,68 @@
    5077557835 
    5077657836     return r;
     
    5084157901 
    5084257902 /*
    50843 @@ -9700,7 +9759,6 @@
     57903@@ -9700,7 +9798,6 @@
    5084457904 /*
    5084557905  * Unset local option value, similar to ":set opt<".
     
    5084957909 unset_global_local_option(name, from)
    5085057910     char_u     *name;
    50851 @@ -9773,6 +9831,14 @@
     57911@@ -9773,6 +9870,14 @@
    5085257912            clear_string_option(&((win_T *)from)->w_p_stl);
    5085357913            break;
     
    5086457924 }
    5086557925 
    50866 @@ -9821,6 +9887,10 @@
     57926@@ -9821,6 +9926,10 @@
    5086757927 #ifdef FEAT_STL_OPT
    5086857928            case PV_STL:  return (char_u *)&(curwin->w_p_stl);
     
    5087557935        return NULL; /* "cannot happen" */
    5087657936     }
    50877 @@ -9885,6 +9955,12 @@
     57937@@ -9885,6 +9994,12 @@
    5087857938        case PV_STL:    return *curwin->w_p_stl != NUL
    5087957939                                    ? (char_u *)&(curwin->w_p_stl) : p->var;
     
    5088857948 #ifdef FEAT_ARABIC
    5088957949        case PV_ARAB:   return (char_u *)&(curwin->w_p_arab);
    50890 @@ -10425,6 +10501,7 @@
     57950@@ -9937,6 +10052,8 @@
     57951        case PV_WRAP:   return (char_u *)&(curwin->w_p_wrap);
     57952 #ifdef FEAT_LINEBREAK
     57953        case PV_LBR:    return (char_u *)&(curwin->w_p_lbr);
     57954+       case PV_BRI:    return (char_u *)&(curwin->w_p_bri);
     57955+       case PV_BRIOPT: return (char_u *)&(curwin->w_p_briopt);
     57956 #endif
     57957 #ifdef FEAT_SCROLLBIND
     57958        case PV_SCBIND: return (char_u *)&(curwin->w_p_scb);
     57959@@ -10126,6 +10243,8 @@
     57960 #endif
     57961 #ifdef FEAT_LINEBREAK
     57962     to->wo_lbr = from->wo_lbr;
     57963+    to->wo_bri = from->wo_bri;
     57964+    to->wo_briopt = vim_strsave(from->wo_briopt);
     57965 #endif
     57966 #ifdef FEAT_SCROLLBIND
     57967     to->wo_scb = from->wo_scb;
     57968@@ -10187,7 +10306,7 @@
     57969 /*
     57970  * Check for NULL pointers in a winopt_T and replace them with empty_option.
     57971  */
     57972-    void
     57973+    static void
     57974 check_winopt(wop)
     57975     winopt_T   *wop UNUSED;
     57976 {
     57977@@ -10213,6 +10332,9 @@
     57978 #ifdef FEAT_CONCEAL
     57979     check_string_option(&wop->wo_cocu);
     57980 #endif
     57981+#ifdef FEAT_LINEBREAK
     57982+    check_string_option(&wop->wo_briopt);
     57983+#endif
     57984 }
     57985 
     57986 /*
     57987@@ -10232,6 +10354,9 @@
     57988 # endif
     57989     clear_string_option(&wop->wo_fmr);
     57990 #endif
     57991+#ifdef FEAT_LINEBREAK
     57992+    clear_string_option(&wop->wo_briopt);
     57993+#endif
     57994 #ifdef FEAT_RIGHTLEFT
     57995     clear_string_option(&wop->wo_rlc);
     57996 #endif
     57997@@ -10425,6 +10550,7 @@
    5089157998            /* options that are normally global but also have a local value
    5089257999             * are not copied, start using the global value */
     
    5089658003            buf->b_p_gp = empty_option;
    5089758004            buf->b_p_mp = empty_option;
    50898 @@ -10457,6 +10534,9 @@
     58005@@ -10457,6 +10583,9 @@
    5089958006 #ifdef FEAT_PERSISTENT_UNDO
    5090058007            buf->b_p_udf = p_udf;
     
    5090658013            /*
    5090758014             * Don't copy the options set by ex_help(), use the saved values,
    50908 @@ -11729,9 +11809,10 @@
     58015@@ -11729,9 +11858,10 @@
    5090958016  * 'tabstop' value when 'shiftwidth' is zero.
    5091058017  */
     
    5091958026 
    5092058027 /*
    50921 @@ -11741,7 +11822,7 @@
     58028@@ -11741,7 +11871,7 @@
    5092258029     long
    5092358030 get_sts_value()
     
    5092858035 
    5092958036 /*
     58037@@ -11841,3 +11971,49 @@
     58038            ++ptr;
     58039     }
     58040 }
     58041+
     58042+#if defined(FEAT_LINEBREAK) || defined(PROTO)
     58043+/*
     58044+ * This is called when 'breakindentopt' is changed and when a window is
     58045+ * initialized.
     58046+ */
     58047+    int
     58048+briopt_check()
     58049+{
     58050+    char_u     *p;
     58051+    int                bri_shift = 0;
     58052+    long       bri_min = 20;
     58053+    int                bri_sbr = FALSE;
     58054+
     58055+    p = curwin->w_p_briopt;
     58056+    while (*p != NUL)
     58057+    {
     58058+       if (STRNCMP(p, "shift:", 6) == 0
     58059+                && ((p[6] == '-' && VIM_ISDIGIT(p[7])) || VIM_ISDIGIT(p[6])))
     58060+       {
     58061+           p += 6;
     58062+           bri_shift = getdigits(&p);
     58063+       }
     58064+       else if (STRNCMP(p, "min:", 4) == 0 && VIM_ISDIGIT(p[4]))
     58065+       {
     58066+           p += 4;
     58067+           bri_min = getdigits(&p);
     58068+       }
     58069+       else if (STRNCMP(p, "sbr", 3) == 0)
     58070+       {
     58071+           p += 3;
     58072+           bri_sbr = TRUE;
     58073+       }
     58074+       if (*p != ',' && *p != NUL)
     58075+           return FAIL;
     58076+       if (*p == ',')
     58077+           ++p;
     58078+    }
     58079+
     58080+    curwin->w_p_brishift = bri_shift;
     58081+    curwin->w_p_brimin   = bri_min;
     58082+    curwin->w_p_brisbr   = bri_sbr;
     58083+
     58084+    return OK;
     58085+}
     58086+#endif
    5093058087diff -Naur vim74.orig/src/option.h vim74/src/option.h
    5093158088--- vim74.orig/src/option.h     2013-06-26 16:41:39.000000000 +0000
    50932 +++ vim74/src/option.h  2014-06-01 00:43:15.780809459 +0000
     58089+++ vim74/src/option.h  2014-07-21 23:33:41.546795613 +0000
    5093358090@@ -31,9 +31,9 @@
    5093458091 #     define DFLT_EFM  "%A%p^,%C%%CC-%t-%m,%Cat line number %l in file %f,%f|%l| %m"
     
    5099058147     , BV_COUNT     /* must be the last one */
    5099158148 };
    50992 @@ -1109,3 +1108,6 @@
     58149@@ -1053,6 +1052,10 @@
     58150 #ifdef FEAT_CURSORBIND
     58151     , WV_CRBIND
     58152 #endif
     58153+#ifdef FEAT_LINEBREAK
     58154+    , WV_BRI
     58155+    , WV_BRIOPT
     58156+#endif
     58157 #ifdef FEAT_DIFF
     58158     , WV_DIFF
     58159 #endif
     58160@@ -1109,3 +1112,6 @@
    5099358161     , WV_WRAP
    5099458162     , WV_COUNT     /* must be the last one */
     
    5099958167diff -Naur vim74.orig/src/os_amiga.c vim74/src/os_amiga.c
    5100058168--- vim74.orig/src/os_amiga.c   2013-05-06 02:06:04.000000000 +0000
    51001 +++ vim74/src/os_amiga.c        2014-06-01 00:43:15.794142759 +0000
     58169+++ vim74/src/os_amiga.c        2014-07-21 23:33:41.560128911 +0000
    5100258170@@ -884,8 +884,9 @@
    5100358171  * Return -1 if unknown.
     
    5101358181diff -Naur vim74.orig/src/os_dos.h vim74/src/os_dos.h
    5101458182--- vim74.orig/src/os_dos.h     2013-06-12 18:09:44.000000000 +0000
    51015 +++ vim74/src/os_dos.h  2014-06-01 00:43:15.837475982 +0000
     58183+++ vim74/src/os_dos.h  2014-07-21 23:33:41.600128807 +0000
    5101658184@@ -109,7 +109,7 @@
    5101758185 #endif
     
    5103458202diff -Naur vim74.orig/src/os_mac.h vim74/src/os_mac.h
    5103558203--- vim74.orig/src/os_mac.h     2013-05-06 02:06:04.000000000 +0000
    51036 +++ vim74/src/os_mac.h  2014-06-01 00:43:15.847475956 +0000
     58204+++ vim74/src/os_mac.h  2014-07-21 23:33:41.610128781 +0000
    5103758205@@ -16,6 +16,11 @@
    5103858206 # define OPAQUE_TOOLBOX_STRUCTS 0
     
    5105858226diff -Naur vim74.orig/src/os_msdos.c vim74/src/os_msdos.c
    5105958227--- vim74.orig/src/os_msdos.c   2013-05-06 02:06:04.000000000 +0000
    51060 +++ vim74/src/os_msdos.c        2014-06-01 00:43:15.950809026 +0000
     58228+++ vim74/src/os_msdos.c        2014-07-21 23:33:41.723461818 +0000
    5106158229@@ -2270,9 +2270,7 @@
    5106258230                default:
     
    5110058268diff -Naur vim74.orig/src/os_mswin.c vim74/src/os_mswin.c
    5110158269--- vim74.orig/src/os_mswin.c   2013-06-16 14:41:11.000000000 +0000
    51102 +++ vim74/src/os_mswin.c        2014-06-01 00:43:15.970808975 +0000
     58270+++ vim74/src/os_mswin.c        2014-07-21 23:33:41.773461688 +0000
    5110358271@@ -456,7 +456,14 @@
    5110458272     int
     
    5150858676diff -Naur vim74.orig/src/os_os2_cfg.h vim74/src/os_os2_cfg.h
    5150958677--- vim74.orig/src/os_os2_cfg.h 2010-05-15 11:04:11.000000000 +0000
    51510 +++ vim74/src/os_os2_cfg.h      2014-06-01 00:43:15.987475600 +0000
     58678+++ vim74/src/os_os2_cfg.h      2014-07-21 23:33:41.796794960 +0000
    5151158679@@ -47,7 +47,7 @@
    5151258680 #undef UNIX    /* define always by current configure script */
     
    5152058688diff -Naur vim74.orig/src/os_qnx.c vim74/src/os_qnx.c
    5152158689--- vim74.orig/src/os_qnx.c     2011-09-21 17:48:08.000000000 +0000
    51522 +++ vim74/src/os_qnx.c  2014-06-01 00:43:16.000808899 +0000
     58690+++ vim74/src/os_qnx.c  2014-07-21 23:33:41.810128259 +0000
    5152358691@@ -78,9 +78,7 @@
    5152458692                default: /* fallthrough to line type */
     
    5154358711diff -Naur vim74.orig/src/os_unix.c vim74/src/os_unix.c
    5154458712--- vim74.orig/src/os_unix.c    2013-07-03 14:32:32.000000000 +0000
    51545 +++ vim74/src/os_unix.c 2014-06-01 00:43:16.020808848 +0000
     58713+++ vim74/src/os_unix.c 2014-07-21 23:33:41.840128181 +0000
    5154658714@@ -46,6 +46,14 @@
    5154758715 static int selinux_enabled = -1;
     
    5181558983 #  ifdef FEAT_GUI
    5181658984            && !gui.in_use
    51817 @@ -3601,32 +3740,49 @@
     58985@@ -3601,26 +3740,40 @@
    5181858986 # endif
    5181958987 
     
    5185759025        del_mouse_termcode(KS_PTERM_MOUSE);
    5185859026 # endif
    51859  # ifdef FEAT_MOUSE_URXVT
    51860      /* same as the dec mouse */
    51861      if (use_xterm_mouse() == 3
    51862 +#  ifdef FEAT_TERMRESPONSE
    51863 +           && !did_request_esc_sequence()
    51864 +#  endif
    51865  #  ifdef FEAT_GUI
    51866             && !gui.in_use
    51867  #  endif
    51868 @@ -3641,12 +3797,13 @@
     59027@@ -3641,12 +3794,14 @@
    5186959028            mch_setmouse(FALSE);
    5187059029            setmouse();
    5187159030        }
    51872 +       xterm_conflict_mouse = TRUE;
     59031+       /* It's OK to request the xterm version for uxterm. */
     59032+       resume_get_esc_sequence();
    5187359033     }
    5187459034     else
     
    5188159041 #  ifdef FEAT_GUI
    5188259042            && !gui.in_use
    51883 @@ -5028,6 +5185,7 @@
     59043@@ -5028,6 +5183,7 @@
    5188459044     return avail;
    5188559045 }
     
    5188959049  * Wait "msec" msec until a character is available from file descriptor "fd".
    5189059050  * "msec" == 0 will check for characters once.
    51891 @@ -5327,13 +5485,7 @@
     59051@@ -5327,13 +5483,7 @@
    5189259052        }
    5189359053 # endif
     
    5190359063        if (ret == -1 && errno == EINTR)
    5190459064        {
    51905 @@ -5455,8 +5607,6 @@
     59065@@ -5455,8 +5605,6 @@
    5190659066     return (ret > 0);
    5190759067 }
     
    5191259072 /*
    5191359073  * Expand a path into all matching files and/or directories.  Handles "*",
    51914 @@ -5569,7 +5719,7 @@
     59074@@ -5569,7 +5717,7 @@
    5191559075                    continue;
    5191659076 
     
    5192159081 
    5192259082                if (--files_free == 0)
    51923 @@ -5979,7 +6129,7 @@
     59083@@ -5979,7 +6127,7 @@
    5192459084        {
    5192559085            /* If there is a NUL, set did_find_nul, else set check_spaces */
     
    5193059090            else
    5193159091                check_spaces = TRUE;
    51932 @@ -6067,7 +6217,7 @@
     59092@@ -6067,7 +6215,7 @@
    5193359093            continue;
    5193459094 
     
    5193959099 
    5194059100        p = alloc((unsigned)(STRLEN((*file)[i]) + 1 + dir));
    51941 @@ -6294,7 +6444,7 @@
     59101@@ -6294,7 +6442,7 @@
    5194259102 
    5194359103 /* Reads gpm event and adds special keys to input buf. Returns length of
     
    5195059110diff -Naur vim74.orig/src/os_unix.h vim74/src/os_unix.h
    5195159111--- vim74.orig/src/os_unix.h    2013-06-12 18:09:44.000000000 +0000
    51952 +++ vim74/src/os_unix.h 2014-06-01 00:43:16.040808797 +0000
     59112+++ vim74/src/os_unix.h 2014-07-21 23:33:41.860128129 +0000
    5195359113@@ -225,6 +225,8 @@
    5195459114 # include <starlet.h>
     
    5199159151diff -Naur vim74.orig/src/os_vms.c vim74/src/os_vms.c
    5199259152--- vim74.orig/src/os_vms.c     2010-06-26 04:03:31.000000000 +0000
    51993 +++ vim74/src/os_vms.c  2014-06-01 00:43:16.060808746 +0000
     59153+++ vim74/src/os_vms.c  2014-07-21 23:33:41.880128076 +0000
    5199459154@@ -11,6 +11,23 @@
    5199559155 
     
    5223959399diff -Naur vim74.orig/src/os_vms_conf.h vim74/src/os_vms_conf.h
    5224059400--- vim74.orig/src/os_vms_conf.h        2010-07-28 17:07:48.000000000 +0000
    52241 +++ vim74/src/os_vms_conf.h     2014-06-01 00:43:16.077475370 +0000
     59401+++ vim74/src/os_vms_conf.h     2014-07-21 23:33:41.906794673 +0000
    5224259402@@ -23,7 +23,7 @@
    5224359403 #define HAVE_DATE_TIME
     
    5228159441diff -Naur vim74.orig/src/os_win16.h vim74/src/os_win16.h
    5228259442--- vim74.orig/src/os_win16.h   2013-05-06 02:06:04.000000000 +0000
    52283 +++ vim74/src/os_win16.h        2014-06-01 00:43:16.150808517 +0000
     59443+++ vim74/src/os_win16.h        2014-07-21 23:33:41.966794517 +0000
    5228459444@@ -55,8 +55,8 @@
    5228559445 
     
    5229559455diff -Naur vim74.orig/src/os_win32.c vim74/src/os_win32.c
    5229659456--- vim74.orig/src/os_win32.c   2013-08-10 10:39:12.000000000 +0000
    52297 +++ vim74/src/os_win32.c        2014-06-01 00:43:16.187475090 +0000
     59457+++ vim74/src/os_win32.c        2014-07-21 23:33:42.003461088 +0000
    5229859458@@ -78,16 +78,6 @@
    5229959459 # endif
     
    5242359583     if (!OpenProcessToken(GetCurrentProcess(),
    5242459584                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
     59585@@ -541,7 +619,7 @@
     59586        return FALSE;
     59587     }
     59588 
     59589-    tokenPrivileges.PrivilegeCount           = 1;
     59590+    tokenPrivileges.PrivilegeCount          = 1;
     59591     tokenPrivileges.Privileges[0].Luid       = luid;
     59592     tokenPrivileges.Privileges[0].Attributes = bEnable ?
     59593                                                    SE_PRIVILEGE_ENABLED : 0;
    5242559594@@ -573,6 +651,10 @@
    5242659595 
     
    5250159670            if (did_create_conin)
    5250259671                read_error_exit();
    52503 @@ -1800,7 +1882,7 @@
     59672@@ -1703,13 +1785,14 @@
     59673 #endif
     59674            {
     59675                int     n = 1;
     59676+               int     conv = FALSE;
     59677 
     59678-               /* A key may have one or two bytes. */
     59679                typeahead[typeaheadlen] = c;
     59680                if (ch2 != NUL)
     59681                {
     59682-                   typeahead[typeaheadlen + 1] = ch2;
     59683-                   ++n;
     59684+                   typeahead[typeaheadlen + 1] = 3;
     59685+                   typeahead[typeaheadlen + 2] = ch2;
     59686+                   n += 2;
     59687                }
     59688 #ifdef FEAT_MBYTE
     59689                /* Only convert normal characters, not special keys.  Need to
     59690@@ -1718,6 +1801,7 @@
     59691                if (input_conv.vc_type != CONV_NONE
     59692                                                && (ch2 == NUL || c != K_NUL))
     59693                {
     59694+                   conv = TRUE;
     59695                    typeaheadlen -= unconverted;
     59696                    n = convert_input_safe(typeahead + typeaheadlen,
     59697                                n + unconverted, TYPEAHEADLEN - typeaheadlen,
     59698@@ -1725,6 +1809,24 @@
     59699                }
     59700 #endif
     59701 
     59702+               if (conv)
     59703+               {
     59704+                   char_u *p = typeahead + typeaheadlen;
     59705+                   char_u *e = typeahead + TYPEAHEADLEN;
     59706+
     59707+                   while (*p && p < e)
     59708+                   {
     59709+                       if (*p == K_NUL)
     59710+                       {
     59711+                           ++p;
     59712+                           mch_memmove(p + 1, p, ((size_t)(e - p)) - 1);
     59713+                           *p = 3;
     59714+                           ++n;
     59715+                       }
     59716+                       ++p;
     59717+                   }
     59718+               }
     59719+
     59720                /* Use the ALT key to set the 8th bit of the character
     59721                 * when it's one byte, the 8th bit isn't set yet and not
     59722                 * using a double-byte encoding (would become a lead
     59723@@ -1800,7 +1902,7 @@
    5250459724  * TODO: Should somehow check if it's really executable.
    5250559725  */
     
    5251059730     char       *dum;
    5251159731     char       fname[_MAX_PATH];
    52512 @@ -1823,6 +1905,8 @@
     59732@@ -1823,6 +1925,8 @@
    5251359733                    return FALSE;
    5251459734                if (GetFileAttributesW(fnamew) & FILE_ATTRIBUTE_DIRECTORY)
     
    5251959739            }
    5252059740            /* Retry with non-wide function (for Windows 98). */
    52521 @@ -1833,6 +1917,8 @@
     59741@@ -1833,6 +1937,8 @@
    5252259742        return FALSE;
    5252359743     if (mch_isdir(fname))
     
    5252859748 }
    5252959749 
    52530 @@ -1914,7 +2000,7 @@
     59750@@ -1914,7 +2020,7 @@
    5253159751            vimrun_path = (char *)vim_strsave(vimrun_location);
    5253259752            s_dont_use_vimrun = FALSE;
     
    5253759757 
    5253859758        /* Don't give the warning for a missing vimrun.exe right now, but only
    52539 @@ -1928,7 +2014,7 @@
     59759@@ -1928,7 +2034,7 @@
    5254059760      * If "finstr.exe" doesn't exist, use "grep -n" for 'grepprg'.
    5254159761      * Otherwise the default "findstr /n" is used.
     
    5254659766 
    5254759767 #ifdef FEAT_CLIPBOARD
    52548 @@ -2500,9 +2586,125 @@
     59768@@ -2500,9 +2606,125 @@
    5254959769 }
    5255059770 
     
    5267259892     void
    5267359893 fname_case(
    52674 @@ -2520,11 +2722,44 @@
     59894@@ -2520,11 +2742,44 @@
    5267559895     int                        slen;
    5267659896 
     
    5271859938     porig = name;
    5271959939     ptrue = szTrueName;
    52720 @@ -2534,8 +2769,8 @@
     59940@@ -2534,8 +2789,8 @@
    5272159941        /* copy leading drive letter */
    5272259942        *ptrue++ = *porig++;
     
    5272859948     while (*porig != NUL)
    5272959949     {
    52730 @@ -2629,6 +2864,28 @@
     59950@@ -2629,6 +2884,28 @@
    5273159951     char szUserName[256 + 1];  /* UNLEN is 256 */
    5273259952     DWORD cch = sizeof szUserName;
     
    5275759977     {
    5275859978        vim_strncpy(s, szUserName, len - 1);
    52759 @@ -2649,6 +2906,28 @@
     59979@@ -2649,6 +2926,28 @@
    5276059980 {
    5276159981     DWORD cch = len;
     
    5278660006        vim_strncpy(s, "PC (Win32 Vim)", len - 1);
    5278760007 }
    52788 @@ -2695,6 +2974,8 @@
     60008@@ -2695,6 +2994,8 @@
    5278960009                return OK;
    5279060010            }
     
    5279560015     }
    5279660016 #endif
    52797 @@ -2702,18 +2983,17 @@
     60017@@ -2702,18 +3003,17 @@
    5279860018 }
    5279960019 
     
    5281860038 
    5281960039 
    52820 @@ -2736,7 +3016,7 @@
     60040@@ -2736,7 +3036,7 @@
    5282160041        {
    5282260042            n = _wchmod(p, perm);
     
    5282760047            /* Retry with non-wide function (for Windows 98). */
    5282860048        }
    52829 @@ -2955,8 +3235,7 @@
     60049@@ -2955,8 +3255,7 @@
    5283060050  * -1 : error
    5283160051  * else FILE_ATTRIBUTE_* defined in winnt.h
     
    5283760057 {
    5283860058     int                attr;
    52839 @@ -3055,7 +3334,7 @@
     60059@@ -3055,7 +3354,7 @@
    5284060060  * Return -1 if unknown.
    5284160061  */
     
    5284660066     char_u     buf[_MAX_PATH];
    5284760067     int                len = (int)STRLEN(name);
    52848 @@ -3068,7 +3347,7 @@
     60068@@ -3068,7 +3367,7 @@
    5284960069      * this with a Unix-shell like 'shell'. */
    5285060070     if (vim_strchr(gettail(name), '.') != NULL
     
    5285560075 
    5285660076     /*
    52857 @@ -3090,7 +3369,7 @@
     60077@@ -3090,7 +3389,7 @@
    5285860078        }
    5285960079        else
     
    5286460084     }
    5286560085     return FALSE;
    52866 @@ -3107,6 +3386,9 @@
     60086@@ -3107,6 +3406,9 @@
    5286760087 {
    5286860088     HANDLE     hFile;
     
    5287460094     /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to
    5287560095      * read from it later will cause Vim to hang.  Thus return NODE_WRITABLE
    52876 @@ -3114,14 +3396,41 @@
     60096@@ -3114,14 +3416,41 @@
    5287760097     if (STRNCMP(name, "\\\\.\\", 4) == 0)
    5287860098        return NODE_WRITABLE;
     
    5292360143        return NODE_NORMAL;
    5292460144 
    52925 @@ -3618,6 +3927,50 @@
     60145@@ -3618,6 +3947,50 @@
    5292660146 }
    5292760147 #endif /* FEAT_GUI_W32 */
     
    5297460194 
    5297560195 #if defined(FEAT_GUI_W32) || defined(PROTO)
    52976 @@ -3664,18 +4017,8 @@
     60196@@ -3664,18 +4037,8 @@
    5297760197        cmd += 3;
    5297860198 
     
    5299560215     /* Wait for the command to terminate before continuing */
    5299660216     if (g_PlatformId != VER_PLATFORM_WIN32s)
    52997 @@ -4007,22 +4350,11 @@
     60217@@ -4007,22 +4370,11 @@
    5299860218            p = cmd;
    5299960219     }
     
    5302360243     if (p != cmd)
    5302460244        vim_free(p);
    53025 @@ -4049,10 +4381,10 @@
     60245@@ -4049,10 +4401,10 @@
    5302660246     {
    5302760247        MSG     msg;
     
    5303660256 
    5303760257        /* write pipe information in the window */
    53038 @@ -4240,7 +4572,25 @@
     60258@@ -4240,7 +4592,25 @@
    5303960259 }
    5304060260 #else
     
    5306360283 #endif
    5306460284 
    53065 @@ -4325,6 +4675,7 @@
     60285@@ -4325,6 +4695,7 @@
    5306660286            DWORD               flags = CREATE_NEW_CONSOLE;
    5306760287            char_u              *p;
     
    5307160291            si.lpReserved = NULL;
    5307260292            si.lpDesktop = NULL;
    53073 @@ -4408,16 +4759,7 @@
     60293@@ -4408,16 +4779,7 @@
    5307460294             * inherit our handles which causes unpleasant dangling swap
    5307560295             * files if we exit before the spawned process
     
    5308960309            else
    5309060310            {
    53091 @@ -4430,9 +4772,9 @@
     60311@@ -4430,9 +4792,9 @@
    5309260312            if (newcmd != cmdbase)
    5309360313                vim_free(newcmd);
     
    5310160321            }
    5310260322            /* Close the handles to the subprocess, so that it goes away */
    53103 @@ -5716,7 +6058,7 @@
     60323@@ -5716,7 +6078,7 @@
    5310460324        {
    5310560325            f = _wopen(wn, flags, mode);
     
    5311060330            /* Retry with non-wide function (for Windows 98). Can't use
    5311160331             * GetLastError() here and it's unclear what errno gets set to if
    53112 @@ -5767,7 +6109,7 @@
     60332@@ -5767,7 +6129,7 @@
    5311360333        _set_fmode(oldMode);
    5311460334 # endif
     
    5311960339        /* Retry with non-wide function (for Windows 98). Can't use
    5312060340         * GetLastError() here and it's unclear what errno gets set to if
    53121 @@ -6102,6 +6444,7 @@
     60341@@ -6102,6 +6464,7 @@
    5312260342                    while (i > 0)
    5312360343                        free(argv[--i]);
     
    5312960349diff -Naur vim74.orig/src/os_win32.h vim74/src/os_win32.h
    5313060350--- vim74.orig/src/os_win32.h   2013-07-21 15:53:13.000000000 +0000
    53131 +++ vim74/src/os_win32.h        2014-06-01 00:43:16.214141689 +0000
     60351+++ vim74/src/os_win32.h        2014-07-21 23:33:42.043460983 +0000
    5313260352@@ -68,7 +68,7 @@
    5313360353 #endif
     
    5316160381diff -Naur vim74.orig/src/osdef.sh vim74/src/osdef.sh
    5316260382--- vim74.orig/src/osdef.sh     2010-05-15 11:04:08.000000000 +0000
    53163 +++ vim74/src/osdef.sh  2014-06-01 00:43:16.220808339 +0000
     60383+++ vim74/src/osdef.sh  2014-07-21 23:33:42.050127633 +0000
    5316460384@@ -47,11 +47,7 @@
    5316560385 #endif
     
    5317560395 # insert a space in front of each line, so that a function name at the
    5317660396 # start of the line is matched with "[)*,      ]\1[    (]"
     60397diff -Naur vim74.orig/src/po/Makefile vim74/src/po/Makefile
     60398--- vim74.orig/src/po/Makefile  2013-06-23 11:26:12.000000000 +0000
     60399+++ vim74/src/po/Makefile       2014-07-21 23:33:42.136794073 +0000
     60400@@ -1,5 +1,8 @@
     60401 # Makefile for the Vim message translations.
     60402 
     60403+# Include stuff found by configure.
     60404+include ../auto/config.mk
     60405+
     60406 # TODO make this configurable
     60407 # Note: ja.sjis, *.cp1250 and zh_CN.cp936 are only for MS-Windows, they are
     60408 # not installed on Unix
     60409@@ -133,7 +136,7 @@
     60410 # tools 0.10.37, which use a slightly different .po file format that is not
     60411 # compatible with Solaris (and old gettext implementations) unless these are
     60412 # set.  gettext 0.10.36 will not work!
     60413-MSGFMT = OLD_PO_FILE_INPUT=yes msgfmt -v
     60414+MSGFMTCMD = OLD_PO_FILE_INPUT=yes $(MSGFMT) -v
     60415 XGETTEXT = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes xgettext
     60416 MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_FILE_OUTPUT=yes msgmerge
     60417 
     60418@@ -142,7 +145,7 @@
     60419 .PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
     60420 
     60421 .po.mo:
     60422-       $(MSGFMT) -o $@ $<
     60423+       $(MSGFMTCMD) -o $@ $<
     60424 
     60425 .po.ck:
     60426        $(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
    5317760427diff -Naur vim74.orig/src/po/ca.po vim74/src/po/ca.po
    5317860428--- vim74.orig/src/po/ca.po     2012-01-18 18:40:35.000000000 +0000
    53179 +++ vim74/src/po/ca.po  2014-06-01 00:43:16.347474683 +0000
     60429+++ vim74/src/po/ca.po  2014-07-21 23:33:42.186793943 +0000
    5318060430@@ -448,7 +448,7 @@
    5318160431 msgid "E691: Can only compare List with List"
     
    5318960439diff -Naur vim74.orig/src/po/de.po vim74/src/po/de.po
    5319060440--- vim74.orig/src/po/de.po     2013-01-23 12:04:20.000000000 +0000
    53191 +++ vim74/src/po/de.po  2014-06-01 00:43:16.460807728 +0000
     60441+++ vim74/src/po/de.po  2014-07-21 23:33:42.256793760 +0000
    5319260442@@ -426,7 +426,7 @@
    5319360443 msgid "E691: Can only compare List with List"
     
    5320160451diff -Naur vim74.orig/src/po/eo.po vim74/src/po/eo.po
    5320260452--- vim74.orig/src/po/eo.po     2013-05-27 18:40:27.000000000 +0000
    53203 +++ vim74/src/po/eo.po  2014-06-01 00:43:16.487474326 +0000
     60453+++ vim74/src/po/eo.po  2014-07-21 23:33:42.300126980 +0000
    5320460454@@ -23,8 +23,8 @@
    5320560455 msgstr ""
     
    5396061210diff -Naur vim74.orig/src/po/es.po vim74/src/po/es.po
    5396161211--- vim74.orig/src/po/es.po     2011-05-19 10:45:41.000000000 +0000
    53962 +++ vim74/src/po/es.po  2014-06-01 00:43:16.504140951 +0000
     61212+++ vim74/src/po/es.po  2014-07-21 23:33:42.306793630 +0000
    5396361213@@ -582,8 +582,8 @@
    5396461214 msgstr "E691: Solo se puede comparar una lista con otra lista"
     
    5397461224diff -Naur vim74.orig/src/po/fi.po vim74/src/po/fi.po
    5397561225--- vim74.orig/src/po/fi.po     2013-04-20 13:49:08.000000000 +0000
    53976 +++ vim74/src/po/fi.po  2014-06-01 00:43:16.510807600 +0000
     61226+++ vim74/src/po/fi.po  2014-07-21 23:33:42.326793578 +0000
    5397761227@@ -471,7 +471,7 @@
    5397861228 msgid "E691: Can only compare List with List"
     
    5398661236diff -Naur vim74.orig/src/po/fr.po vim74/src/po/fr.po
    5398761237--- vim74.orig/src/po/fr.po     2013-05-27 08:41:50.000000000 +0000
    53988 +++ vim74/src/po/fr.po  2014-06-01 00:43:16.527474225 +0000
     61238+++ vim74/src/po/fr.po  2014-07-21 23:33:42.353460175 +0000
    5398961239@@ -543,8 +543,8 @@
    5399061240 msgid "E691: Can only compare List with List"
     
    5400061250diff -Naur vim74.orig/src/po/ga.po vim74/src/po/ga.po
    5400161251--- vim74.orig/src/po/ga.po     2011-05-19 10:46:33.000000000 +0000
    54002 +++ vim74/src/po/ga.po  2014-06-01 00:43:16.540807524 +0000
     61252+++ vim74/src/po/ga.po  2014-07-21 23:33:42.366793473 +0000
    5400361253@@ -443,7 +443,7 @@
    5400461254 msgid "E691: Can only compare List with List"
     
    5401261262diff -Naur vim74.orig/src/po/it.po vim74/src/po/it.po
    5401361263--- vim74.orig/src/po/it.po     2013-08-10 11:31:45.000000000 +0000
    54014 +++ vim74/src/po/it.po  2014-06-01 00:43:16.590807397 +0000
     61264+++ vim74/src/po/it.po  2014-07-21 23:33:42.436793291 +0000
    5401561265@@ -477,7 +477,7 @@
    5401661266 msgid "E691: Can only compare List with List"
     
    5402461274diff -Naur vim74.orig/src/po/ja.euc-jp.po vim74/src/po/ja.euc-jp.po
    5402561275--- vim74.orig/src/po/ja.euc-jp.po      2013-07-06 10:53:48.000000000 +0000
    54026 +++ vim74/src/po/ja.euc-jp.po   2014-06-01 00:43:16.594140721 +0000
     61276+++ vim74/src/po/ja.euc-jp.po   2014-07-21 23:33:42.473459862 +0000
    5402761277@@ -3,7 +3,7 @@
    5402861278 # Do ":help uganda"  in Vim to read copying and usage conditions.
     
    5404561295diff -Naur vim74.orig/src/po/ja.po vim74/src/po/ja.po
    5404661296--- vim74.orig/src/po/ja.po     2013-07-06 06:04:57.000000000 +0000
    54047 +++ vim74/src/po/ja.po  2014-06-01 00:43:16.640807269 +0000
     61297+++ vim74/src/po/ja.po  2014-07-21 23:33:42.513459757 +0000
    5404861298@@ -3,7 +3,7 @@
    5404961299 # Do ":help uganda"  in Vim to read copying and usage conditions.
     
    5406661316diff -Naur vim74.orig/src/po/ja.sjis.po vim74/src/po/ja.sjis.po
    5406761317--- vim74.orig/src/po/ja.sjis.po        2013-08-10 12:28:27.000000000 +0000
    54068 +++ vim74/src/po/ja.sjis.po     2014-06-01 00:43:16.647473919 +0000
     61318+++ vim74/src/po/ja.sjis.po     2014-07-21 23:33:42.560126302 +0000
    5406961319@@ -3,7 +3,7 @@
    5407061320 # Do ":help uganda"  in Vim to read copying and usage conditions.
     
    5408761337diff -Naur vim74.orig/src/po/ko.UTF-8.po vim74/src/po/ko.UTF-8.po
    5408861338--- vim74.orig/src/po/ko.UTF-8.po       2011-05-19 10:47:30.000000000 +0000
    54089 +++ vim74/src/po/ko.UTF-8.po    2014-06-01 00:43:16.650807244 +0000
     61339+++ vim74/src/po/ko.UTF-8.po    2014-07-21 23:33:42.596792873 +0000
    5409061340@@ -462,7 +462,7 @@
    5409161341 msgid "E691: Can only compare List with List"
     
    5409961349diff -Naur vim74.orig/src/po/ko.po vim74/src/po/ko.po
    5410061350--- vim74.orig/src/po/ko.po     2011-05-19 10:47:53.000000000 +0000
    54101 +++ vim74/src/po/ko.po  2014-06-01 00:43:16.657473894 +0000
     61351+++ vim74/src/po/ko.po  2014-07-21 23:33:42.633459444 +0000
    5410261352@@ -462,7 +462,7 @@
    5410361353 msgid "E691: Can only compare List with List"
     
    5411161361diff -Naur vim74.orig/src/po/nb.po vim74/src/po/nb.po
    5411261362--- vim74.orig/src/po/nb.po     2011-05-19 11:12:47.000000000 +0000
    54113 +++ vim74/src/po/nb.po  2014-06-01 00:43:16.660807218 +0000
     61363+++ vim74/src/po/nb.po  2014-07-21 23:33:42.653459392 +0000
    5411461364@@ -456,8 +456,8 @@
    5411561365 msgid "E691: Can only compare List with List"
     
    5412561375diff -Naur vim74.orig/src/po/nl.po vim74/src/po/nl.po
    5412661376--- vim74.orig/src/po/nl.po     2013-07-09 12:55:16.000000000 +0000
    54127 +++ vim74/src/po/nl.po  2014-06-01 00:43:16.667473868 +0000
     61377+++ vim74/src/po/nl.po  2014-07-21 23:33:42.680125989 +0000
    5412861378@@ -458,8 +458,8 @@
    5412961379 msgid "E691: Can only compare List with List"
     
    5413961389diff -Naur vim74.orig/src/po/no.po vim74/src/po/no.po
    5414061390--- vim74.orig/src/po/no.po     2011-05-19 10:48:14.000000000 +0000
    54141 +++ vim74/src/po/no.po  2014-06-01 00:43:16.670807193 +0000
     61391+++ vim74/src/po/no.po  2014-07-21 23:33:42.706792586 +0000
    5414261392@@ -456,8 +456,8 @@
    5414361393 msgid "E691: Can only compare List with List"
     
    5415361403diff -Naur vim74.orig/src/po/pl.UTF-8.po vim74/src/po/pl.UTF-8.po
    5415461404--- vim74.orig/src/po/pl.UTF-8.po       2013-07-09 12:25:44.000000000 +0000
    54155 +++ vim74/src/po/pl.UTF-8.po    2014-06-01 00:43:16.677473843 +0000
    54156 @@ -14,7 +14,7 @@
     61405+++ vim74/src/po/pl.UTF-8.po    2014-07-21 23:33:42.740125832 +0000
     61406@@ -12,9 +12,10 @@
     61407 "POT-Creation-Date: 2013-07-06 19:33+0200\n"
     61408 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
    5415761409 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
     61410+"Language-Team: \n"
    5415861411 "Language: pl\n"
    5415961412 "MIME-Version: 1.0\n"
     
    5416361416 "X-Generator: Lokalize 1.0\n"
    5416461417 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
    54165 @@ -475,7 +475,7 @@
     61418@@ -475,7 +476,7 @@
    5416661419 msgid "E691: Can only compare List with List"
    5416761420 msgstr "E691: Listę mogę porównać tylko z ListÄ
     
    5417561428diff -Naur vim74.orig/src/po/pl.cp1250.po vim74/src/po/pl.cp1250.po
    5417661429--- vim74.orig/src/po/pl.cp1250.po      2013-08-10 12:28:27.000000000 +0000
    54177 +++ vim74/src/po/pl.cp1250.po   2014-06-01 00:43:16.684140492 +0000
    54178 @@ -14,7 +14,7 @@
     61430+++ vim74/src/po/pl.cp1250.po   2014-07-21 23:33:42.793459027 +0000
     61431@@ -12,9 +12,10 @@
     61432 "POT-Creation-Date: 2013-07-06 19:33+0200\n"
     61433 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
    5417961434 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
     61435+"Language-Team: \n"
    5418061436 "Language: pl\n"
    5418161437 "MIME-Version: 1.0\n"
     
    5418561441 "X-Generator: Lokalize 1.0\n"
    5418661442 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
    54187 @@ -475,7 +475,7 @@
     61443@@ -475,7 +476,7 @@
    5418861444 msgid "E691: Can only compare List with List"
    5418961445 msgstr "E691: Listê mogê porównaæ tylko z List¹"
     
    5419661452diff -Naur vim74.orig/src/po/pl.po vim74/src/po/pl.po
    5419761453--- vim74.orig/src/po/pl.po     2013-07-09 12:25:10.000000000 +0000
    54198 +++ vim74/src/po/pl.po  2014-06-01 00:43:16.690807142 +0000
    54199 @@ -475,7 +475,7 @@
     61454+++ vim74/src/po/pl.po  2014-07-21 23:33:42.833458922 +0000
     61455@@ -12,6 +12,7 @@
     61456 "POT-Creation-Date: 2013-07-06 19:33+0200\n"
     61457 "PO-Revision-Date: 2010-08-10 18:15+0200\n"
     61458 "Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
     61459+"Language-Team: \n"
     61460 "Language: pl\n"
     61461 "MIME-Version: 1.0\n"
     61462 "Content-Type: text/plain; charset=ISO-8859-2\n"
     61463@@ -475,7 +476,7 @@
    5420061464 msgid "E691: Can only compare List with List"
    5420161465 msgstr "E691: Listê mogê porównaæ tylko z List±"
     
    5420861472diff -Naur vim74.orig/src/po/pt_BR.po vim74/src/po/pt_BR.po
    5420961473--- vim74.orig/src/po/pt_BR.po  2011-05-19 10:49:11.000000000 +0000
    54210 +++ vim74/src/po/pt_BR.po       2014-06-01 00:43:16.697473792 +0000
     61474+++ vim74/src/po/pt_BR.po       2014-07-21 23:33:42.866792169 +0000
    5421161475@@ -438,8 +438,8 @@
    5421261476 msgid "E691: Can only compare List with List"
     
    5422261486diff -Naur vim74.orig/src/po/ru.cp1251.po vim74/src/po/ru.cp1251.po
    5422361487--- vim74.orig/src/po/ru.cp1251.po      2013-08-10 12:28:27.000000000 +0000
    54224 +++ vim74/src/po/ru.cp1251.po   2014-06-01 00:43:16.704140441 +0000
     61488+++ vim74/src/po/ru.cp1251.po   2014-07-21 23:33:42.910125389 +0000
    5422561489@@ -3,14 +3,14 @@
    5422661490 # Îá óñëîâèÿõ èñïîëüçîâàíèÿ ÷èòàéòå â ðåäàêòîðå Vim ":help uganda"
     
    5448361747diff -Naur vim74.orig/src/po/ru.po vim74/src/po/ru.po
    5448461748--- vim74.orig/src/po/ru.po     2013-07-09 12:36:10.000000000 +0000
    54485 +++ vim74/src/po/ru.po  2014-06-01 00:43:16.710807091 +0000
     61749+++ vim74/src/po/ru.po  2014-07-21 23:33:42.953458609 +0000
    5448661750@@ -3,14 +3,14 @@
    5448761751 # Об услПвОяÑ
     
    5475262016diff -Naur vim74.orig/src/po/sk.cp1250.po vim74/src/po/sk.cp1250.po
    5475362017--- vim74.orig/src/po/sk.cp1250.po      2013-08-10 12:28:27.000000000 +0000
    54754 +++ vim74/src/po/sk.cp1250.po   2014-06-01 00:43:16.734140365 +0000
     62018+++ vim74/src/po/sk.cp1250.po   2014-07-21 23:33:42.986791855 +0000
    5475562019@@ -414,8 +414,8 @@
    5475662020 msgid "E691: Can only compare List with List"
     
    5476662030diff -Naur vim74.orig/src/po/sk.po vim74/src/po/sk.po
    5476762031--- vim74.orig/src/po/sk.po     2011-05-19 10:50:14.000000000 +0000
    54768 +++ vim74/src/po/sk.po  2014-06-01 00:43:16.740807015 +0000
     62032+++ vim74/src/po/sk.po  2014-07-21 23:33:43.016791777 +0000
    5476962033@@ -414,8 +414,8 @@
    5477062034 msgid "E691: Can only compare List with List"
     
    5478062044diff -Naur vim74.orig/src/po/sv.po vim74/src/po/sv.po
    5478162045--- vim74.orig/src/po/sv.po     2011-05-19 10:50:27.000000000 +0000
    54782 +++ vim74/src/po/sv.po  2014-06-01 00:43:16.744140339 +0000
     62046+++ vim74/src/po/sv.po  2014-07-21 23:33:43.043458374 +0000
    5478362047@@ -433,8 +433,8 @@
    5478462048 msgid "E691: Can only compare List with List"
     
    5479462058diff -Naur vim74.orig/src/po/uk.cp1251.po vim74/src/po/uk.cp1251.po
    5479562059--- vim74.orig/src/po/uk.cp1251.po      2013-08-10 12:28:27.000000000 +0000
    54796 +++ vim74/src/po/uk.cp1251.po   2014-06-01 00:43:16.754140314 +0000
     62060+++ vim74/src/po/uk.cp1251.po   2014-07-21 23:33:43.086791595 +0000
    5479762061@@ -2,19 +2,17 @@
    5479862062 # Ukrainian Vim translation [uk]
     
    5563662900diff -Naur vim74.orig/src/po/uk.po vim74/src/po/uk.po
    5563762901--- vim74.orig/src/po/uk.po     2013-01-17 12:11:55.000000000 +0000
    55638 +++ vim74/src/po/uk.po  2014-06-01 00:43:16.790806887 +0000
     62902+++ vim74/src/po/uk.po  2014-07-21 23:33:43.130124815 +0000
    5563962903@@ -2,19 +2,17 @@
    5564062904 # Ukrainian Vim translation [uk]
     
    5648863752diff -Naur vim74.orig/src/po/zh_CN.UTF-8.po vim74/src/po/zh_CN.UTF-8.po
    5648963753--- vim74.orig/src/po/zh_CN.UTF-8.po    2012-04-20 11:48:11.000000000 +0000
    56490 +++ vim74/src/po/zh_CN.UTF-8.po 2014-06-01 00:43:16.830806785 +0000
     63754+++ vim74/src/po/zh_CN.UTF-8.po 2014-07-21 23:33:43.186791334 +0000
    5649163755@@ -434,7 +434,7 @@
    5649263756 msgid "E691: Can only compare List with List"
     
    5650063764diff -Naur vim74.orig/src/po/zh_CN.cp936.po vim74/src/po/zh_CN.cp936.po
    5650163765--- vim74.orig/src/po/zh_CN.cp936.po    2013-08-10 12:28:27.000000000 +0000
    56502 +++ vim74/src/po/zh_CN.cp936.po 2014-06-01 00:43:16.834140110 +0000
     63766+++ vim74/src/po/zh_CN.cp936.po 2014-07-21 23:33:43.220124580 +0000
    5650363767@@ -435,7 +435,7 @@
    5650463768 msgid "E691: Can only compare List with List"
     
    5652163785diff -Naur vim74.orig/src/po/zh_CN.po vim74/src/po/zh_CN.po
    5652263786--- vim74.orig/src/po/zh_CN.po  2011-05-19 10:52:13.000000000 +0000
    56523 +++ vim74/src/po/zh_CN.po       2014-06-01 00:43:16.840806760 +0000
     63787+++ vim74/src/po/zh_CN.po       2014-07-21 23:33:43.240124528 +0000
    5652463788@@ -435,7 +435,7 @@
    5652563789 msgid "E691: Can only compare List with List"
     
    5653363797diff -Naur vim74.orig/src/popupmnu.c vim74/src/popupmnu.c
    5653463798--- vim74.orig/src/popupmnu.c   2011-08-17 16:04:28.000000000 +0000
    56535 +++ vim74/src/popupmnu.c        2014-06-01 00:43:16.890806633 +0000
     63799+++ vim74/src/popupmnu.c        2014-07-21 23:33:43.323457644 +0000
    5653663800@@ -282,6 +282,10 @@
    5653763801     int                round;
     
    5654563809     {
    5654663810        thumb_heigth = pum_height * pum_height / pum_size;
    56547 @@ -672,10 +676,6 @@
     63811@@ -563,7 +567,9 @@
     63812            g_do_tagpreview = 3;
     63813            if (p_pvh > 0 && p_pvh < g_do_tagpreview)
     63814                g_do_tagpreview = p_pvh;
     63815+           ++RedrawingDisabled;
     63816            resized = prepare_tagpreview(FALSE);
     63817+           --RedrawingDisabled;
     63818            g_do_tagpreview = 0;
     63819 
     63820            if (curwin->w_p_pvw)
     63821@@ -672,10 +678,6 @@
    5654863822 #endif
    5654963823     }
     
    5655863832diff -Naur vim74.orig/src/proto/blowfish.pro vim74/src/proto/blowfish.pro
    5655963833--- vim74.orig/src/proto/blowfish.pro   2013-08-10 11:37:06.000000000 +0000
    56560 +++ vim74/src/proto/blowfish.pro        2014-06-01 00:43:16.927473206 +0000
     63834+++ vim74/src/proto/blowfish.pro        2014-07-21 23:33:43.370124189 +0000
    5656163835@@ -1,6 +1,6 @@
    5656263836 /* blowfish.c */
     
    5656763841 void bf_crypt_decode __ARGS((char_u *ptr, long len));
    5656863842 void bf_crypt_init_keys __ARGS((char_u *passwd));
     63843diff -Naur vim74.orig/src/proto/charset.pro vim74/src/proto/charset.pro
     63844--- vim74.orig/src/proto/charset.pro    2013-08-10 11:37:07.000000000 +0000
     63845+++ vim74/src/proto/charset.pro 2014-07-21 23:33:43.400124110 +0000
     63846@@ -16,7 +16,7 @@
     63847 int chartabsize __ARGS((char_u *p, colnr_T col));
     63848 int linetabsize __ARGS((char_u *s));
     63849 int linetabsize_col __ARGS((int startcol, char_u *s));
     63850-int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
     63851+int win_linetabsize __ARGS((win_T *wp, char_u *line, colnr_T len));
     63852 int vim_isIDc __ARGS((int c));
     63853 int vim_iswordc __ARGS((int c));
     63854 int vim_iswordc_buf __ARGS((int c, buf_T *buf));
     63855@@ -26,9 +26,9 @@
     63856 int vim_isfilec_or_wc __ARGS((int c));
     63857 int vim_isprintc __ARGS((int c));
     63858 int vim_isprintc_strict __ARGS((int c));
     63859-int lbr_chartabsize __ARGS((unsigned char *s, colnr_T col));
     63860-int lbr_chartabsize_adv __ARGS((char_u **s, colnr_T col));
     63861-int win_lbr_chartabsize __ARGS((win_T *wp, char_u *s, colnr_T col, int *headp));
     63862+int lbr_chartabsize __ARGS((char_u *line, unsigned char *s, colnr_T col));
     63863+int lbr_chartabsize_adv __ARGS((char_u *line, char_u **s, colnr_T col));
     63864+int win_lbr_chartabsize __ARGS((win_T *wp, char_u *line, char_u *s, colnr_T col, int *headp));
     63865 int in_win_border __ARGS((win_T *wp, colnr_T vcol));
     63866 void getvcol __ARGS((win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor, colnr_T *end));
     63867 colnr_T getvcol_nolist __ARGS((pos_T *posp));
    5656963868diff -Naur vim74.orig/src/proto/eval.pro vim74/src/proto/eval.pro
    5657063869--- vim74.orig/src/proto/eval.pro       2013-08-10 11:37:09.000000000 +0000
    56571 +++ vim74/src/proto/eval.pro    2014-06-01 00:43:16.980806403 +0000
     63870+++ vim74/src/proto/eval.pro    2014-07-21 23:33:43.440124006 +0000
    5657263871@@ -59,7 +59,8 @@
    5657363872 int list_append_dict __ARGS((list_T *list, dict_T *dict));
     
    5658263881diff -Naur vim74.orig/src/proto/ex_cmds2.pro vim74/src/proto/ex_cmds2.pro
    5658363882--- vim74.orig/src/proto/ex_cmds2.pro   2013-08-10 11:37:10.000000000 +0000
    56584 +++ vim74/src/proto/ex_cmds2.pro        2014-06-01 00:43:17.000806353 +0000
     63883+++ vim74/src/proto/ex_cmds2.pro        2014-07-21 23:33:43.463457278 +0000
    5658563884@@ -35,7 +35,7 @@
    5658663885 int prof_def_func __ARGS((void));
     
    5659463893diff -Naur vim74.orig/src/proto/ex_docmd.pro vim74/src/proto/ex_docmd.pro
    5659563894--- vim74.orig/src/proto/ex_docmd.pro   2013-08-10 11:37:10.000000000 +0000
    56596 +++ vim74/src/proto/ex_docmd.pro        2014-06-01 00:43:17.007473002 +0000
     63895+++ vim74/src/proto/ex_docmd.pro        2014-07-21 23:33:43.470123928 +0000
    5659763896@@ -54,4 +54,5 @@
    5659863897 int put_line __ARGS((FILE *fd, char *s));
     
    5660363902diff -Naur vim74.orig/src/proto/ex_eval.pro vim74/src/proto/ex_eval.pro
    5660463903--- vim74.orig/src/proto/ex_eval.pro    2013-08-10 11:37:10.000000000 +0000
    56605 +++ vim74/src/proto/ex_eval.pro 2014-06-01 00:43:17.020806302 +0000
     63904+++ vim74/src/proto/ex_eval.pro 2014-07-21 23:33:43.483457226 +0000
    5660663905@@ -4,8 +4,10 @@
    5660763906 int should_abort __ARGS((int retcode));
     
    5661763916diff -Naur vim74.orig/src/proto/ex_getln.pro vim74/src/proto/ex_getln.pro
    5661863917--- vim74.orig/src/proto/ex_getln.pro   2013-08-10 11:37:11.000000000 +0000
    56619 +++ vim74/src/proto/ex_getln.pro        2014-06-01 00:43:17.020806302 +0000
     63918+++ vim74/src/proto/ex_getln.pro        2014-07-21 23:33:43.496790525 +0000
    5662063919@@ -32,7 +32,7 @@
    5662163920 void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
     
    5662963928diff -Naur vim74.orig/src/proto/getchar.pro vim74/src/proto/getchar.pro
    5663063929--- vim74.orig/src/proto/getchar.pro    2013-08-10 11:37:12.000000000 +0000
    56631 +++ vim74/src/proto/getchar.pro 2014-06-01 00:43:17.060806200 +0000
     63930+++ vim74/src/proto/getchar.pro 2014-07-21 23:33:43.536790420 +0000
    5663263931@@ -1,8 +1,9 @@
    5663363932 /* getchar.c */
     
    5664363942diff -Naur vim74.orig/src/proto/misc1.pro vim74/src/proto/misc1.pro
    5664463943--- vim74.orig/src/proto/misc1.pro      2013-08-10 11:37:20.000000000 +0000
    56645 +++ vim74/src/proto/misc1.pro   2014-06-01 00:43:17.457471856 +0000
    56646 @@ -69,6 +69,7 @@
     63944+++ vim74/src/proto/misc1.pro   2014-07-21 23:33:43.906789455 +0000
     63945@@ -2,9 +2,10 @@
     63946 int get_indent __ARGS((void));
     63947 int get_indent_lnum __ARGS((linenr_T lnum));
     63948 int get_indent_buf __ARGS((buf_T *buf, linenr_T lnum));
     63949-int get_indent_str __ARGS((char_u *ptr, int ts));
     63950+int get_indent_str __ARGS((char_u *ptr, int ts, int list));
     63951 int set_indent __ARGS((int size, int flags));
     63952 int get_number_indent __ARGS((linenr_T lnum));
     63953+int get_breakindent_win __ARGS((win_T *wp, char_u *ptr));
     63954 int open_line __ARGS((int dir, int flags, int second_line_indent));
     63955 int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
     63956 int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
     63957@@ -69,6 +70,7 @@
    5664763958 char_u *getnextcomp __ARGS((char_u *fname));
    5664863959 char_u *get_past_head __ARGS((char_u *path));
     
    5665263963 void shorten_dir __ARGS((char_u *str));
    5665363964 int dir_of_file_exists __ARGS((char_u *fname));
    56654 @@ -80,9 +81,10 @@
     63965@@ -80,9 +82,10 @@
    5665563966 char_u *FullName_save __ARGS((char_u *fname, int force));
    5665663967 pos_T *find_start_comment __ARGS((int ind_maxcomment));
     
    5666463975 int get_expr_indent __ARGS((void));
    5666563976 int get_lisp_indent __ARGS((void));
    56666 @@ -98,7 +100,8 @@
     63977@@ -98,7 +101,8 @@
    5666763978 void remove_duplicates __ARGS((garray_T *gap));
    5666863979 int gen_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
     
    5667663987diff -Naur vim74.orig/src/proto/misc2.pro vim74/src/proto/misc2.pro
    5667763988--- vim74.orig/src/proto/misc2.pro      2013-08-10 11:37:20.000000000 +0000
    56678 +++ vim74/src/proto/misc2.pro   2014-06-01 00:43:17.460805181 +0000
     63989+++ vim74/src/proto/misc2.pro   2014-07-21 23:33:43.936789377 +0000
    5667963990@@ -32,7 +32,7 @@
    5668063991 char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
     
    5669764008diff -Naur vim74.orig/src/proto/ops.pro vim74/src/proto/ops.pro
    5669864009--- vim74.orig/src/proto/ops.pro        2013-08-10 11:37:22.000000000 +0000
    56699 +++ vim74/src/proto/ops.pro     2014-06-01 00:43:17.494138430 +0000
     64010+++ vim74/src/proto/ops.pro     2014-07-21 23:33:43.970122623 +0000
    5670064011@@ -37,7 +37,7 @@
    5670164012 int preprocs_left __ARGS((void));
     
    5672164032diff -Naur vim74.orig/src/proto/option.pro vim74/src/proto/option.pro
    5672264033--- vim74.orig/src/proto/option.pro     2013-08-10 11:37:22.000000000 +0000
    56723 +++ vim74/src/proto/option.pro  2014-06-01 00:43:17.510805054 +0000
     64034+++ vim74/src/proto/option.pro  2014-07-21 23:33:43.983455922 +0000
    5672464035@@ -23,6 +23,7 @@
    5672564036 char_u *check_stl_option __ARGS((char_u *s));
     
    5673064041 char_u *get_term_code __ARGS((char_u *tname));
    5673164042 char_u *get_highlight_default __ARGS((void));
    56732 @@ -59,7 +60,7 @@
     64043@@ -39,7 +40,6 @@
     64044 void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
     64045 void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
     64046 void check_win_options __ARGS((win_T *win));
     64047-void check_winopt __ARGS((winopt_T *wop));
     64048 void clear_winopt __ARGS((winopt_T *wop));
     64049 void buf_copy_options __ARGS((buf_T *buf, int flags));
     64050 void reset_modifiable __ARGS((void));
     64051@@ -59,7 +59,8 @@
    5673364052 void save_file_ff __ARGS((buf_T *buf));
    5673464053 int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
     
    5673864057 long get_sts_value __ARGS((void));
    5673964058 void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
     64059+int briopt_check __ARGS((void));
    5674064060 /* vim: set ft=c : */
    5674164061diff -Naur vim74.orig/src/proto/os_amiga.pro vim74/src/proto/os_amiga.pro
    5674264062--- vim74.orig/src/proto/os_amiga.pro   2013-08-10 11:37:37.000000000 +0000
    56743 +++ vim74/src/proto/os_amiga.pro        2014-06-01 00:43:17.517471704 +0000
     64063+++ vim74/src/proto/os_amiga.pro        2014-07-21 23:33:44.013455843 +0000
    5674464064@@ -26,7 +26,7 @@
    5674564065 void mch_hide __ARGS((char_u *name));
     
    5675364073diff -Naur vim74.orig/src/proto/os_msdos.pro vim74/src/proto/os_msdos.pro
    5675464074--- vim74.orig/src/proto/os_msdos.pro   2013-08-10 11:37:37.000000000 +0000
    56755 +++ vim74/src/proto/os_msdos.pro        2014-06-01 00:43:17.564138251 +0000
     64075+++ vim74/src/proto/os_msdos.pro        2014-07-21 23:33:44.060122388 +0000
    5675664076@@ -38,7 +38,7 @@
    5675764077 int mch_setperm __ARGS((char_u *name, long perm));
     
    5676564085diff -Naur vim74.orig/src/proto/os_unix.pro vim74/src/proto/os_unix.pro
    5676664086--- vim74.orig/src/proto/os_unix.pro    2013-08-10 11:37:23.000000000 +0000
    56767 +++ vim74/src/proto/os_unix.pro 2014-06-01 00:43:17.584138200 +0000
     64087+++ vim74/src/proto/os_unix.pro 2014-07-21 23:33:44.080122336 +0000
    5676864088@@ -42,7 +42,7 @@
    5676964089 void mch_free_acl __ARGS((vim_acl_T aclent));
     
    5677764097diff -Naur vim74.orig/src/proto/os_vms.pro vim74/src/proto/os_vms.pro
    5677864098--- vim74.orig/src/proto/os_vms.pro     2013-08-10 11:37:40.000000000 +0000
    56779 +++ vim74/src/proto/os_vms.pro  2014-06-01 00:43:17.594138175 +0000
     64099+++ vim74/src/proto/os_vms.pro  2014-07-21 23:33:44.090122310 +0000
    5678064100@@ -7,6 +7,7 @@
    5678164101 int vms_sys __ARGS((char *cmd, char *out, char *inp));
     
    5678864108diff -Naur vim74.orig/src/proto/os_win32.pro vim74/src/proto/os_win32.pro
    5678964109--- vim74.orig/src/proto/os_win32.pro   2013-08-10 11:37:38.000000000 +0000
    56790 +++ vim74/src/proto/os_win32.pro        2014-06-01 00:43:17.610804799 +0000
     64110+++ vim74/src/proto/os_win32.pro        2014-07-21 23:33:44.106788933 +0000
    5679164111@@ -26,7 +26,7 @@
    5679264112 int mch_is_linked __ARGS((char_u *fname));
     
    5680064120diff -Naur vim74.orig/src/proto/regexp.pro vim74/src/proto/regexp.pro
    5680164121--- vim74.orig/src/proto/regexp.pro     2013-08-10 11:37:24.000000000 +0000
    56802 +++ vim74/src/proto/regexp.pro  2014-06-01 00:43:17.660804672 +0000
     64122+++ vim74/src/proto/regexp.pro  2014-07-21 23:33:44.156788803 +0000
    5680364123@@ -10,6 +10,7 @@
    5680464124 int vim_regsub __ARGS((regmatch_T *rmp, char_u *source, char_u *dest, int copy, int magic, int backslash));
     
    5681164131diff -Naur vim74.orig/src/proto/spell.pro vim74/src/proto/spell.pro
    5681264132--- vim74.orig/src/proto/spell.pro      2013-08-10 11:37:26.000000000 +0000
    56813 +++ vim74/src/proto/spell.pro   2014-06-01 00:43:17.687471271 +0000
     64133+++ vim74/src/proto/spell.pro   2014-07-21 23:33:44.173455426 +0000
    5681464134@@ -3,6 +3,7 @@
    5681564135 int spell_move_to __ARGS((win_T *wp, int dir, int allwords, int curline, hlf_T *attrp));
     
    5682264142diff -Naur vim74.orig/src/proto/term.pro vim74/src/proto/term.pro
    5682364143--- vim74.orig/src/proto/term.pro       2013-08-10 11:37:28.000000000 +0000
    56824 +++ vim74/src/proto/term.pro    2014-06-01 00:43:17.707471220 +0000
    56825 @@ -34,8 +34,9 @@
     64144+++ vim74/src/proto/term.pro    2014-07-21 23:33:44.200122023 +0000
     64145@@ -34,8 +34,10 @@
    5682664146 void settmode __ARGS((int tmode));
    5682764147 void starttermcap __ARGS((void));
    5682864148 void stoptermcap __ARGS((void));
    5682964149+int did_request_esc_sequence __ARGS((void));
     64150+void resume_get_esc_sequence __ARGS((void));
    5683064151 void may_req_termresponse __ARGS((void));
    5683164152-void may_req_ambiguous_character_width __ARGS((void));
     
    5683664157diff -Naur vim74.orig/src/proto/winclip.pro vim74/src/proto/winclip.pro
    5683764158--- vim74.orig/src/proto/winclip.pro    2013-08-10 11:37:39.000000000 +0000
    56838 +++ vim74/src/proto/winclip.pro 2014-06-01 00:43:17.754137768 +0000
     64159+++ vim74/src/proto/winclip.pro 2014-07-21 23:33:44.260121866 +0000
    5683964160@@ -11,4 +11,5 @@
    5684064161 short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
     
    5684564166diff -Naur vim74.orig/src/proto/window.pro vim74/src/proto/window.pro
    5684664167--- vim74.orig/src/proto/window.pro     2013-08-10 11:37:30.000000000 +0000
    56847 +++ vim74/src/proto/window.pro  2014-06-01 00:43:17.764137742 +0000
     64168+++ vim74/src/proto/window.pro  2014-07-21 23:33:44.273455165 +0000
    5684864169@@ -9,7 +9,7 @@
    5684964170 void win_equal __ARGS((win_T *next_curwin, int current, int dir));
     
    5685564176 void win_free_all __ARGS((void));
    5685664177 win_T *winframe_remove __ARGS((win_T *win, int *dirp, tabpage_T *tp));
     64178@@ -75,7 +75,7 @@
     64179 void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
     64180 void restore_buffer __ARGS((buf_T *save_curbuf));
     64181 int win_hasvertsplit __ARGS((void));
     64182-int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
     64183+int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id, list_T *pos));
     64184 int match_delete __ARGS((win_T *wp, int id, int perr));
     64185 void clear_matches __ARGS((win_T *wp));
     64186 matchitem_T *get_match __ARGS((win_T *wp, int id));
    5685764187diff -Naur vim74.orig/src/quickfix.c vim74/src/quickfix.c
    5685864188--- vim74.orig/src/quickfix.c   2013-07-01 19:16:44.000000000 +0000
    56859 +++ vim74/src/quickfix.c        2014-06-01 00:43:17.804137640 +0000
     64189+++ vim74/src/quickfix.c        2014-07-21 23:33:44.323455035 +0000
    5686064190@@ -751,7 +751,10 @@
    5686164191                fmt_start = fmt_ptr;
     
    5690464234diff -Naur vim74.orig/src/regexp.c vim74/src/regexp.c
    5690564235--- vim74.orig/src/regexp.c     2013-08-01 16:31:30.000000000 +0000
    56906 +++ vim74/src/regexp.c  2014-06-01 00:43:17.820804264 +0000
     64236+++ vim74/src/regexp.c  2014-07-21 23:33:44.396788177 +0000
    5690764237@@ -244,6 +244,7 @@
    5690864238 
     
    5692464254                 * branch which matches nothing. */
    5692564255                case '[':
    56926 @@ -3709,25 +3714,28 @@
     64256@@ -3104,15 +3109,25 @@
     64257            if (reg_magic >= MAGIC_OFF)
     64258            {
     64259                char_u *p = regparse + 1;
     64260+               int is_magic_all = (reg_magic == MAGIC_ALL);
     64261 
     64262-               /* ignore \c \C \m and \M after '$' */
     64263+               /* ignore \c \C \m \M \v \V and \Z after '$' */
     64264                while (p[0] == '\\' && (p[1] == 'c' || p[1] == 'C'
     64265-                               || p[1] == 'm' || p[1] == 'M' || p[1] == 'Z'))
     64266+                               || p[1] == 'm' || p[1] == 'M'
     64267+                               || p[1] == 'v' || p[1] == 'V' || p[1] == 'Z'))
     64268+               {
     64269+                   if (p[1] == 'v')
     64270+                       is_magic_all = TRUE;
     64271+                   else if (p[1] == 'm' || p[1] == 'M' || p[1] == 'V')
     64272+                       is_magic_all = FALSE;
     64273                    p += 2;
     64274+               }
     64275                if (p[0] == NUL
     64276                        || (p[0] == '\\'
     64277                            && (p[1] == '|' || p[1] == '&' || p[1] == ')'
     64278                                || p[1] == 'n'))
     64279+                       || (is_magic_all
     64280+                              && (p[0] == '|' || p[0] == '&' || p[0] == ')'))
     64281                        || reg_magic == MAGIC_ALL)
     64282                    curchr = Magic('$');
     64283            }
     64284@@ -3709,53 +3724,28 @@
    5692764285 /* TRUE if using multi-line regexp. */
    5692864286 #define REG_MULTI      (reg_match == NULL)
     
    5694264300     static int
    5694364301-bt_regexec(rmp, line, col)
    56944 +bt_regexec_nl(rmp, line, col, line_lbr)
    56945      regmatch_T *rmp;
    56946      char_u     *line;  /* string to match against */
    56947      colnr_T    col;    /* column to start looking for match */
    56948 +    int                line_lbr;
    56949  {
    56950      reg_match = rmp;
    56951      reg_mmatch = NULL;
    56952      reg_maxline = 0;
     64302-    regmatch_T *rmp;
     64303-    char_u     *line;  /* string to match against */
     64304-    colnr_T    col;    /* column to start looking for match */
     64305-{
     64306-    reg_match = rmp;
     64307-    reg_mmatch = NULL;
     64308-    reg_maxline = 0;
    5695364309-    reg_line_lbr = FALSE;
    56954 +    reg_line_lbr = line_lbr;
    56955      reg_buf = curbuf;
    56956      reg_win = NULL;
    56957      ireg_ic = rmp->rm_ic;
    56958 @@ -3738,35 +3746,6 @@
    56959      return (bt_regexec_both(line, col, NULL) != 0);
    56960  }
    56961  
     64310-    reg_buf = curbuf;
     64311-    reg_win = NULL;
     64312-    ireg_ic = rmp->rm_ic;
     64313-#ifdef FEAT_MBYTE
     64314-    ireg_icombine = FALSE;
     64315-#endif
     64316-    ireg_maxcol = 0;
     64317-    return (bt_regexec_both(line, col, NULL) != 0);
     64318-}
     64319-
    5696264320-#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
    5696364321-       || defined(FIND_REPLACE_DIALOG) || defined(PROTO)
     
    5697064328-    static int
    5697164329-bt_regexec_nl(rmp, line, col)
    56972 -    regmatch_T *rmp;
    56973 -    char_u     *line;  /* string to match against */
    56974 -    colnr_T    col;    /* column to start looking for match */
    56975 -{
    56976 -    reg_match = rmp;
    56977 -    reg_mmatch = NULL;
    56978 -    reg_maxline = 0;
     64330+bt_regexec_nl(rmp, line, col, line_lbr)
     64331     regmatch_T *rmp;
     64332     char_u     *line;  /* string to match against */
     64333     colnr_T    col;    /* column to start looking for match */
     64334+    int                line_lbr;
     64335 {
     64336     reg_match = rmp;
     64337     reg_mmatch = NULL;
     64338     reg_maxline = 0;
    5697964339-    reg_line_lbr = TRUE;
    56980 -    reg_buf = curbuf;
    56981 -    reg_win = NULL;
    56982 -    ireg_ic = rmp->rm_ic;
    56983 -#ifdef FEAT_MBYTE
    56984 -    ireg_icombine = FALSE;
     64340+    reg_line_lbr = line_lbr;
     64341     reg_buf = curbuf;
     64342     reg_win = NULL;
     64343     ireg_ic = rmp->rm_ic;
     64344@@ -3765,7 +3755,6 @@
     64345     ireg_maxcol = 0;
     64346     return (bt_regexec_both(line, col, NULL) != 0);
     64347 }
    5698564348-#endif
    56986 -    ireg_maxcol = 0;
    56987 -    return (bt_regexec_both(line, col, NULL) != 0);
    56988 -}
    56989 -#endif
    56990 -
     64349 
    5699164350 static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
    5699264351 
    56993  /*
    56994 @@ -4146,7 +4125,8 @@
     64352@@ -4146,7 +4135,8 @@
    5699564353            {
    5699664354                /* Only accept single line matches. */
     
    5700264360                        vim_strnsave(reg_getline(reg_startzpos[i].lnum)
    5700364361                                                       + reg_startzpos[i].col,
    57004 @@ -4179,9 +4159,8 @@
     64362@@ -4179,9 +4169,8 @@
    5700564363                            - (*mb_head_off)(regline, reginput - 1), reg_buf);
    5700664364     return -1;
     
    5701364371 
    5701464372 /*
    57015 @@ -4258,7 +4237,6 @@
     64373@@ -4258,7 +4247,6 @@
    5701664374     }
    5701764375     return TRUE;
     
    5702164379 #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
    5702264380 
    57023 @@ -4311,8 +4289,8 @@
     64381@@ -4311,8 +4299,8 @@
    5702464382    */
    5702564383   for (;;)
     
    5703264390 
    5703364391 #ifdef DEBUG
    57034 @@ -4440,9 +4418,7 @@
     64392@@ -4440,9 +4428,7 @@
    5703564393            break;
    5703664394 
     
    5704264400            break;
    5704364401 
    57044 @@ -4721,31 +4697,39 @@
     64402@@ -4721,31 +4707,39 @@
    5704564403                    /* match empty string always works; happens when "~" is
    5704664404                     * empty. */
     
    5709664454                }
    5709764455            }
    57098 @@ -4814,6 +4798,16 @@
     64456@@ -4814,6 +4808,16 @@
    5709964457                status = RA_NOMATCH;
    5710064458            break;
     
    5711364471          case NOTHING:
    5711464472            break;
    57115 @@ -6455,7 +6449,8 @@
     64473@@ -6455,7 +6459,8 @@
    5711664474 /*
    5711764475  * Check whether a backreference matches.
     
    5712364481     static int
    5712464482 match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen)
    57125 @@ -6511,6 +6506,8 @@
     64483@@ -6511,6 +6516,8 @@
    5712664484 
    5712764485        /* Advance to next line. */
     
    5713264490        ccol = 0;
    5713364491        if (got_int)
    57134 @@ -7381,6 +7378,7 @@
     64492@@ -7381,6 +7388,7 @@
    5713564493     reg_mmatch = NULL;
    5713664494     reg_maxline = 0;
     
    5714064498 }
    5714164499 #endif
    57142 @@ -7400,6 +7398,7 @@
     64500@@ -7400,6 +7408,7 @@
    5714364501     reg_buf = curbuf;          /* always works on the current buffer! */
    5714464502     reg_firstlnum = lnum;
     
    5714864506 }
    5714964507 
    57150 @@ -7898,17 +7897,92 @@
     64508@@ -7898,17 +7907,92 @@
    5715164509 
    5715264510     return retval;
     
    5724564603 #ifdef DEBUG
    5724664604     ,(char_u *)""
    57247 @@ -7922,11 +7996,7 @@
     64605@@ -7922,11 +8006,7 @@
    5724864606 {
    5724964607     nfa_regcomp,
     
    5725764615 #ifdef DEBUG
    5725864616     ,(char_u *)""
    57259 @@ -7975,8 +8045,8 @@
     64617@@ -7975,8 +8055,8 @@
    5726064618            regexp_engine = expr[4] - '0';
    5726164619            expr += 5;
     
    5726864626        }
    5726964627        else
    57270 @@ -8016,12 +8086,11 @@
     64628@@ -8016,12 +8096,11 @@
    5727164629        }
    5727264630 #endif
     
    5728464642 
    5728564643     return prog;
    57286 @@ -8051,7 +8120,7 @@
     64644@@ -8051,7 +8130,7 @@
    5728764645     char_u      *line;  /* string to match against */
    5728864646     colnr_T     col;    /* column to start looking for match */
     
    5729364651 
    5729464652 #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
    57295 @@ -8065,7 +8134,7 @@
     64653@@ -8065,7 +8144,7 @@
    5729664654     char_u *line;
    5729764655     colnr_T col;
     
    5730464662diff -Naur vim74.orig/src/regexp.h vim74/src/regexp.h
    5730564663--- vim74.orig/src/regexp.h     2013-06-11 08:53:14.000000000 +0000
    57306 +++ vim74/src/regexp.h  2014-06-01 00:43:17.844137538 +0000
     64664+++ vim74/src/regexp.h  2014-07-21 23:33:44.400121501 +0000
    5730764665@@ -149,11 +149,7 @@
    5730864666 {
     
    5732064678diff -Naur vim74.orig/src/regexp_nfa.c vim74/src/regexp_nfa.c
    5732164679--- vim74.orig/src/regexp_nfa.c 2013-08-01 16:27:51.000000000 +0000
    57322 +++ vim74/src/regexp_nfa.c      2014-06-01 00:43:17.864137487 +0000
     64680+++ vim74/src/regexp_nfa.c      2014-07-21 23:33:44.493454591 +0000
    5732364681@@ -29,11 +29,14 @@
    5732464682 # define NFA_REGEXP_DEBUG_LOG  "nfa_regexp_debug.log"
     
    5854165899diff -Naur vim74.orig/src/screen.c vim74/src/screen.c
    5854265900--- vim74.orig/src/screen.c     2013-07-13 10:23:00.000000000 +0000
    58543 +++ vim74/src/screen.c  2014-06-01 00:43:17.884137436 +0000
     65901+++ vim74/src/screen.c  2014-07-21 23:33:44.550121110 +0000
    5854465902@@ -42,7 +42,7 @@
    5854565903  *
     
    5855165909  * - w_skipcol (skipped window cells of first line)
    5855265910  *
    58553 @@ -446,8 +446,6 @@
     65911@@ -139,12 +139,13 @@
     65912 static void redraw_custom_statusline __ARGS((win_T *wp));
     65913 #endif
     65914 #ifdef FEAT_SEARCH_EXTRA
     65915-#define SEARCH_HL_PRIORITY 0
     65916+# define SEARCH_HL_PRIORITY 0
     65917 static void start_search_hl __ARGS((void));
     65918 static void end_search_hl __ARGS((void));
     65919 static void init_search_hl __ARGS((win_T *wp));
     65920 static void prepare_search_hl __ARGS((win_T *wp, linenr_T lnum));
     65921-static void next_search_hl __ARGS((win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol));
     65922+static void next_search_hl __ARGS((win_T *win, match_T *shl, linenr_T lnum, colnr_T mincol, matchitem_T *cur));
     65923+static int next_search_hl_pos __ARGS((match_T *shl, linenr_T lnum, posmatch_T *pos, colnr_T mincol));
     65924 #endif
     65925 static void screen_start_highlight __ARGS((int attr));
     65926 static void screen_char __ARGS((unsigned off, int row, int col));
     65927@@ -446,8 +447,6 @@
    5855465928 #endif
    5855565929 }
     
    5856065934  * update all windows that are editing the current buffer
    5856165935  */
    58562 @@ -458,7 +456,6 @@
     65936@@ -458,7 +457,6 @@
    5856365937     redraw_curbuf_later(type);
    5856465938     update_screen(type);
     
    5856865942 /*
    5856965943  * update_screen()
    58570 @@ -596,14 +593,12 @@
     65944@@ -596,14 +594,12 @@
    5857165945                    && curwin->w_botfill == curwin->w_old_botfill
    5857265946 #endif
     
    5858365957        curwin->w_redr_type = type;
    5858465958 
    58585 @@ -1030,10 +1025,8 @@
     65959@@ -1030,10 +1026,8 @@
    5858665960                                   updating.  0 when no mid area updating. */
    5858765961     int                bot_start = 999;/* first row of the bot area that needs
     
    5859465968     matchitem_T *cur;          /* points to the match list */
    5859565969     int                top_to_mod = FALSE;    /* redraw above mod_top */
    58596 @@ -1354,9 +1347,7 @@
     65970@@ -1354,9 +1348,7 @@
    5859765971                            /* Need to update rows that are new, stop at the
    5859865972                             * first one that scrolled down. */
     
    5860465978                            /* Move the entries that were scrolled, disable
    5860565979                             * the entries for the lines to be redrawn. */
    58606 @@ -1513,7 +1504,6 @@
     65980@@ -1513,7 +1505,6 @@
    5860765981        type = NOT_VALID;
    5860865982     }
     
    5861265986     if ((VIsual_active && buf == curwin->w_buffer)
    5861365987            || (wp->w_old_cursor_lnum != 0 && type != NOT_VALID))
    58614 @@ -1708,7 +1698,6 @@
     65988@@ -1708,7 +1699,6 @@
    5861565989        wp->w_old_visual_lnum = 0;
    5861665990        wp->w_old_visual_col = 0;
     
    5862065994 #if defined(FEAT_SYN_HL) || defined(FEAT_SEARCH_EXTRA)
    5862165995     /* reset got_int, otherwise regexp won't work */
    58622 @@ -2467,8 +2456,8 @@
     65996@@ -1779,8 +1769,10 @@
     65997                                        syntax_check_changed(lnum)))
     65998 #endif
     65999 #ifdef FEAT_SEARCH_EXTRA
     66000-                               /* match in fixed position might need redraw */
     66001-                               ||  wp->w_match_head != NULL
     66002+                               /* match in fixed position might need redraw
     66003+                                * if lines were inserted or deleted */
     66004+                               || (wp->w_match_head != NULL
     66005+                                                   && buf->b_mod_xlines != 0)
     66006 #endif
     66007                                )))))
     66008        {
     66009@@ -2467,8 +2459,8 @@
    5862366010        if (len > 0)
    5862466011        {
     
    5863166018            if (len > w + 1)
    5863266019                len = w + 1;
    58633 @@ -2670,7 +2659,6 @@
     66020@@ -2670,7 +2662,6 @@
    5863466021      * 6. set highlighting for the Visual area an other text.
    5863566022      * If all folded lines are in the Visual area, highlight the line.
     
    5863966026     {
    5864066027        if (ltoreq(curwin->w_cursor, VIsual))
    58641 @@ -2718,7 +2706,6 @@
     66028@@ -2718,7 +2709,6 @@
    5864266029            }
    5864366030        }
     
    5864766034 #ifdef FEAT_SYN_HL
    5864866035     /* Show 'cursorcolumn' in the fold line. */
    58649 @@ -2876,10 +2863,8 @@
     66036@@ -2853,6 +2843,7 @@
     66037     char_u     extra[18];              /* "%ld" and 'fdc' must fit in here */
     66038     int                n_extra = 0;            /* number of extra chars */
     66039     char_u     *p_extra = NULL;        /* string of extra chars, plus NUL */
     66040+    char_u     *p_extra_free = NULL;   /* p_extra needs to be freed */
     66041     int                c_extra = NUL;          /* extra chars, all the same */
     66042     int                extra_attr = 0;         /* attributes when n_extra != 0 */
     66043     static char_u *at_end_str = (char_u *)""; /* used for p_extra when
     66044@@ -2876,10 +2867,8 @@
    5865066045     int                fromcol, tocol;         /* start/end of inverting */
    5865166046     int                fromcol_prev = -2;      /* start of inverting after cursor */
     
    5865866053     long       v;
    5865966054 
    58660 @@ -3090,7 +3075,6 @@
     66055@@ -2944,6 +2933,8 @@
     66056     match_T    *shl;                   /* points to search_hl or a match */
     66057     int                shl_flag;               /* flag to indicate whether search_hl
     66058                                           has been processed or not */
     66059+    int                pos_inprogress;         /* marks that position match search is
     66060+                                          in progress */
     66061     int                prevcol_hl_flag;        /* flag to indicate whether prevcol
     66062                                           equals startcol of search_hl or one
     66063                                           of the matches */
     66064@@ -2974,10 +2965,15 @@
     66065 # define WL_SIGN       WL_FOLD         /* column for signs */
     66066 #endif
     66067 #define WL_NR          WL_SIGN + 1     /* line number */
     66068+#ifdef FEAT_LINEBREAK
     66069+# define WL_BRI                WL_NR + 1       /* 'breakindent' */
     66070+#else
     66071+# define WL_BRI                WL_NR
     66072+#endif
     66073 #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
     66074-# define WL_SBR                WL_NR + 1       /* 'showbreak' or 'diff' */
     66075+# define WL_SBR                WL_BRI + 1      /* 'showbreak' or 'diff' */
     66076 #else
     66077-# define WL_SBR                WL_NR
     66078+# define WL_SBR                WL_BRI
     66079 #endif
     66080 #define WL_LINE                WL_SBR + 1      /* text in the line */
     66081     int                draw_state = WL_START;  /* what to draw next */
     66082@@ -3090,7 +3086,6 @@
    5866166083      */
    5866266084     fromcol = -10;
     
    5866666088     {
    5866766089                                        /* Visual is after curwin->w_cursor */
    58668 @@ -3183,9 +3167,7 @@
     66090@@ -3183,9 +3178,7 @@
    5866966091     /*
    5867066092      * handle 'incsearch' and ":s///c" highlighting
     
    5867766099            && lnum >= curwin->w_cursor.lnum
    5867866100            && lnum <= curwin->w_cursor.lnum + search_match_lines)
    58679 @@ -3324,7 +3306,6 @@
     66101@@ -3316,7 +3309,7 @@
     66102 #endif
     66103        while (vcol < v && *ptr != NUL)
     66104        {
     66105-           c = win_lbr_chartabsize(wp, ptr, (colnr_T)vcol, NULL);
     66106+           c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL);
     66107            vcol += c;
     66108 #ifdef FEAT_MBYTE
     66109            prev_ptr = ptr;
     66110@@ -3324,7 +3317,6 @@
    5868066111            mb_ptr_adv(ptr);
    5868166112        }
     
    5868566116         * - 'cuc' is set, or
    5868666117         * - 'colorcolumn' is set, or
    58687 @@ -3333,27 +3314,16 @@
     66118@@ -3333,27 +3325,16 @@
    5868866119         * the end of the line may be before the start of the displayed part.
    5868966120         */
     
    5872066151        /* Handle a character that's not completely on the screen: Put ptr at
    5872166152         * that character but skip the first few screen characters. */
    58722 @@ -3583,11 +3553,7 @@
     66153@@ -3469,44 +3450,43 @@
     66154        shl->startcol = MAXCOL;
     66155        shl->endcol = MAXCOL;
     66156        shl->attr_cur = 0;
     66157-       if (shl->rm.regprog != NULL)
     66158-       {
     66159-           v = (long)(ptr - line);
     66160-           next_search_hl(wp, shl, lnum, (colnr_T)v);
     66161+       v = (long)(ptr - line);
     66162+       if (cur != NULL)
     66163+           cur->pos.cur = 0;
     66164+       next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
     66165 
     66166-           /* Need to get the line again, a multi-line regexp may have made it
     66167-            * invalid. */
     66168-           line = ml_get_buf(wp->w_buffer, lnum, FALSE);
     66169-           ptr = line + v;
     66170+       /* Need to get the line again, a multi-line regexp may have made it
     66171+        * invalid. */
     66172+       line = ml_get_buf(wp->w_buffer, lnum, FALSE);
     66173+       ptr = line + v;
     66174 
     66175-           if (shl->lnum != 0 && shl->lnum <= lnum)
     66176+       if (shl->lnum != 0 && shl->lnum <= lnum)
     66177+       {
     66178+           if (shl->lnum == lnum)
     66179+               shl->startcol = shl->rm.startpos[0].col;
     66180+           else
     66181+               shl->startcol = 0;
     66182+           if (lnum == shl->lnum + shl->rm.endpos[0].lnum
     66183+                                               - shl->rm.startpos[0].lnum)
     66184+               shl->endcol = shl->rm.endpos[0].col;
     66185+           else
     66186+               shl->endcol = MAXCOL;
     66187+           /* Highlight one character for an empty match. */
     66188+           if (shl->startcol == shl->endcol)
     66189            {
     66190-               if (shl->lnum == lnum)
     66191-                   shl->startcol = shl->rm.startpos[0].col;
     66192-               else
     66193-                   shl->startcol = 0;
     66194-               if (lnum == shl->lnum + shl->rm.endpos[0].lnum
     66195-                                                 - shl->rm.startpos[0].lnum)
     66196-                   shl->endcol = shl->rm.endpos[0].col;
     66197-               else
     66198-                   shl->endcol = MAXCOL;
     66199-               /* Highlight one character for an empty match. */
     66200-               if (shl->startcol == shl->endcol)
     66201-               {
     66202 #ifdef FEAT_MBYTE
     66203-                   if (has_mbyte && line[shl->endcol] != NUL)
     66204-                       shl->endcol += (*mb_ptr2len)(line + shl->endcol);
     66205-                   else
     66206+               if (has_mbyte && line[shl->endcol] != NUL)
     66207+                   shl->endcol += (*mb_ptr2len)(line + shl->endcol);
     66208+               else
     66209 #endif
     66210-                       ++shl->endcol;
     66211-               }
     66212-               if ((long)shl->startcol < v)  /* match at leftcol */
     66213-               {
     66214-                   shl->attr_cur = shl->attr;
     66215-                   search_attr = shl->attr;
     66216-               }
     66217-               area_highlighting = TRUE;
     66218+                   ++shl->endcol;
     66219+           }
     66220+           if ((long)shl->startcol < v)  /* match at leftcol */
     66221+           {
     66222+               shl->attr_cur = shl->attr;
     66223+               search_attr = shl->attr;
     66224            }
     66225+           area_highlighting = TRUE;
     66226        }
     66227        if (shl != &search_hl && cur != NULL)
     66228            cur = cur->next;
     66229@@ -3518,7 +3498,7 @@
     66230      * when Visual mode is active, because it's not clear what is selected
     66231      * then. */
     66232     if (wp->w_p_cul && lnum == wp->w_cursor.lnum
     66233-                                        && !(wp == curwin  && VIsual_active))
     66234+                                        && !(wp == curwin && VIsual_active))
     66235     {
     66236        line_attr = hl_attr(HLF_CUL);
     66237        area_highlighting = TRUE;
     66238@@ -3583,11 +3563,7 @@
    5872366239                draw_state = WL_SIGN;
    5872466240                /* Show the sign column when there are any signs in this
     
    5873366249                    int text_sign;
    5873466250 # ifdef FEAT_SIGN_ICONS
    58735 @@ -3599,7 +3565,11 @@
     66251@@ -3599,7 +3575,11 @@
    5873666252                    char_attr = hl_attr(HLF_SC);
    5873766253                    n_extra = 2;
     
    5874666262                        text_sign = buf_getsigntype(wp->w_buffer, lnum,
    5874766263                                                                   SIGN_TEXT);
    58748 @@ -4500,9 +4470,7 @@
     66264@@ -3698,6 +3678,44 @@
     66265                }
     66266            }
     66267 
     66268+#ifdef FEAT_LINEBREAK
     66269+           if (wp->w_p_brisbr && draw_state == WL_BRI - 1
     66270+                                            && n_extra == 0 && *p_sbr != NUL)
     66271+               /* draw indent after showbreak value */
     66272+               draw_state = WL_BRI;
     66273+           else if (wp->w_p_brisbr && draw_state == WL_SBR && n_extra == 0)
     66274+               /* After the showbreak, draw the breakindent */
     66275+               draw_state = WL_BRI - 1;
     66276+
     66277+           /* draw 'breakindent': indent wrapped text accordingly */
     66278+           if (draw_state == WL_BRI - 1 && n_extra == 0)
     66279+           {
     66280+               draw_state = WL_BRI;
     66281+# ifdef FEAT_DIFF
     66282+# endif
     66283+               if (wp->w_p_bri && n_extra == 0 && row != startrow
     66284+#ifdef FEAT_DIFF
     66285+                       && filler_lines == 0
     66286+#endif
     66287+                  )
     66288+               {
     66289+                   char_attr = 0; /* was: hl_attr(HLF_AT); */
     66290+#ifdef FEAT_DIFF
     66291+                   if (diff_hlf != (hlf_T)0)
     66292+                       char_attr = hl_attr(diff_hlf);
     66293+#endif
     66294+                   p_extra = NULL;
     66295+                   c_extra = ' ';
     66296+                   n_extra = get_breakindent_win(wp,
     66297+                                      ml_get_buf(wp->w_buffer, lnum, FALSE));
     66298+                   /* Correct end of highlighted area for 'breakindent',
     66299+                    * required when 'linebreak' is also set. */
     66300+                   if (tocol == vcol)
     66301+                       tocol += n_extra;
     66302+               }
     66303+           }
     66304+#endif
     66305+
     66306 #if defined(FEAT_LINEBREAK) || defined(FEAT_DIFF)
     66307            if (draw_state == WL_SBR - 1 && n_extra == 0)
     66308            {
     66309@@ -3822,7 +3840,11 @@
     66310                    }
     66311                    else
     66312                        shl = &cur->hl;
     66313-                   while (shl->rm.regprog != NULL)
     66314+                   if (cur != NULL)
     66315+                       cur->pos.cur = 0;
     66316+                   pos_inprogress = TRUE;
     66317+                   while (shl->rm.regprog != NULL
     66318+                                          || (cur != NULL && pos_inprogress))
     66319                    {
     66320                        if (shl->startcol != MAXCOL
     66321                                && v >= (long)shl->startcol
     66322@@ -3830,11 +3852,12 @@
     66323                        {
     66324                            shl->attr_cur = shl->attr;
     66325                        }
     66326-                       else if (v == (long)shl->endcol)
     66327+                       else if (v >= (long)shl->endcol)
     66328                        {
     66329                            shl->attr_cur = 0;
     66330-
     66331-                           next_search_hl(wp, shl, lnum, (colnr_T)v);
     66332+                           next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
     66333+                           pos_inprogress = cur == NULL || cur->pos.cur == 0
     66334+                                                             ? FALSE : TRUE;
     66335 
     66336                            /* Need to get the line again, a multi-line regexp
     66337                             * may have made it invalid. */
     66338@@ -4031,6 +4054,11 @@
     66339        }
     66340        else
     66341        {
     66342+           if (p_extra_free != NULL)
     66343+           {
     66344+               vim_free(p_extra_free);
     66345+               p_extra_free = NULL;
     66346+           }
     66347            /*
     66348             * Get a character from the line itself.
     66349             */
     66350@@ -4402,14 +4430,16 @@
     66351                /*
     66352                 * Found last space before word: check for line break.
     66353                 */
     66354-               if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr)
     66355-                                                            && !wp->w_p_list)
     66356+               if (wp->w_p_lbr && vim_isbreak(c) && !vim_isbreak(*ptr))
     66357                {
     66358-                   n_extra = win_lbr_chartabsize(wp, ptr - (
     66359+                   char_u *p = ptr - (
     66360 # ifdef FEAT_MBYTE
     66361                                has_mbyte ? mb_l :
     66362 # endif
     66363-                               1), (colnr_T)vcol, NULL) - 1;
     66364+                               1);
     66365+                   /* TODO: is passing p for start of the line OK? */
     66366+                   n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol,
     66367+                                                                   NULL) - 1;
     66368                    c_extra = ' ';
     66369                    if (vim_iswhite(c))
     66370                    {
     66371@@ -4418,7 +4448,8 @@
     66372                            /* See "Tab alignment" below. */
     66373                            FIX_FOR_BOGUSCOLS;
     66374 #endif
     66375-                       c = ' ';
     66376+                       if (!wp->w_p_list)
     66377+                           c = ' ';
     66378                    }
     66379                }
     66380 #endif
     66381@@ -4458,9 +4489,50 @@
     66382                 */
     66383                if (c == TAB && (!wp->w_p_list || lcs_tab1))
     66384                {
     66385+                   int tab_len = 0;
     66386                    /* tab amount depends on current column */
     66387-                   n_extra = (int)wp->w_buffer->b_p_ts
     66388+                   tab_len = (int)wp->w_buffer->b_p_ts
     66389                                        - vcol % (int)wp->w_buffer->b_p_ts - 1;
     66390+#ifdef FEAT_LINEBREAK
     66391+                   if (!wp->w_p_lbr)
     66392+#endif
     66393+                   /* tab amount depends on current column */
     66394+                       n_extra = tab_len;
     66395+#ifdef FEAT_LINEBREAK
     66396+                   else
     66397+                   {
     66398+                       char_u *p;
     66399+                       int     len = n_extra;
     66400+                       int     i;
     66401+                       int     saved_nextra = n_extra;
     66402+
     66403+                       /* if n_extra > 0, it gives the number of chars, to
     66404+                        * use for a tab, else we need to calculate the width
     66405+                        * for a tab */
     66406+#ifdef FEAT_MBYTE
     66407+                       len = (tab_len * mb_char2len(lcs_tab2));
     66408+                       if (n_extra > 0)
     66409+                           len += n_extra - tab_len;
     66410+#endif
     66411+                       c = lcs_tab1;
     66412+                       p = alloc((unsigned)(len + 1));
     66413+                       vim_memset(p, ' ', len);
     66414+                       p[len] = NUL;
     66415+                       p_extra_free = p;
     66416+                       for (i = 0; i < tab_len; i++)
     66417+                       {
     66418+#ifdef FEAT_MBYTE
     66419+                           mb_char2bytes(lcs_tab2, p);
     66420+                           p += mb_char2len(lcs_tab2);
     66421+                           n_extra += mb_char2len(lcs_tab2)
     66422+                                                - (saved_nextra > 0 ? 1 : 0);
     66423+#else
     66424+                           p[i] = lcs_tab2;
     66425+#endif
     66426+                       }
     66427+                       p_extra = p_extra_free;
     66428+                   }
     66429+#endif
     66430 #ifdef FEAT_CONCEAL
     66431                    /* Tab alignment should be identical regardless of
     66432                     * 'conceallevel' value. So tab compensates of all
     66433@@ -4476,8 +4548,13 @@
     66434                    if (wp->w_p_list)
     66435                    {
     66436                        c = lcs_tab1;
     66437-                       c_extra = lcs_tab2;
     66438-                       n_attr = n_extra + 1;
     66439+#ifdef FEAT_LINEBREAK
     66440+                       if (wp->w_p_lbr)
     66441+                           c_extra = NUL; /* using p_extra from above */
     66442+                       else
     66443+#endif
     66444+                           c_extra = lcs_tab2;
     66445+                       n_attr = tab_len + 1;
     66446                        extra_attr = hl_attr(HLF_8);
     66447                        saved_attr2 = char_attr; /* save current attr */
     66448 #ifdef FEAT_MBYTE
     66449@@ -4500,9 +4577,7 @@
    5874966450                        && ((wp->w_p_list && lcs_eol > 0)
    5875066451                            || ((fromcol >= 0 || fromcol_prev >= 0)
     
    5875666457 # ifdef FEAT_RIGHTLEFT
    5875766458                                    wp->w_p_rl ? (col >= 0) :
    58758 @@ -4854,11 +4822,9 @@
     66459@@ -4571,13 +4646,31 @@
     66460                else if (c != NUL)
     66461                {
     66462                    p_extra = transchar(c);
     66463+                   if (n_extra == 0)
     66464+                       n_extra = byte2cells(c) - 1;
     66465 #ifdef FEAT_RIGHTLEFT
     66466                    if ((dy_flags & DY_UHEX) && wp->w_p_rl)
     66467                        rl_mirror(p_extra);     /* reverse "<12>" */
     66468 #endif
     66469-                   n_extra = byte2cells(c) - 1;
     66470                    c_extra = NUL;
     66471-                   c = *p_extra++;
     66472+#ifdef FEAT_LINEBREAK
     66473+                   if (wp->w_p_lbr)
     66474+                   {
     66475+                       char_u *p;
     66476+
     66477+                       c = *p_extra;
     66478+                       p = alloc((unsigned)n_extra + 1);
     66479+                       vim_memset(p, ' ', n_extra);
     66480+                       STRNCPY(p, p_extra + 1, STRLEN(p_extra) - 1);
     66481+                       p[n_extra] = NUL;
     66482+                       p_extra_free = p_extra = p;
     66483+                   }
     66484+                   else
     66485+#endif
     66486+                   {
     66487+                       n_extra = byte2cells(c) - 1;
     66488+                       c = *p_extra++;
     66489+                   }
     66490                    if (!attr_pri)
     66491                    {
     66492                        n_attr = n_extra + 1;
     66493@@ -4854,11 +4947,9 @@
    5875966494 #endif
    5876066495            if (lcs_eol == lcs_eol_one
     
    5876866503 #ifdef FEAT_SEARCH_EXTRA
    5876966504                        /* highlight 'hlsearch' match at end of line */
    58770 @@ -6653,6 +6619,7 @@
     66505@@ -6653,6 +6744,7 @@
    5877166506     win_T      *wp;
    5877266507     int                draw_ruler;     /* TRUE or FALSE */
     
    5877666511     int                curattr;
    5877766512     int                row;
    58778 @@ -6671,6 +6638,13 @@
     66513@@ -6671,6 +6763,13 @@
    5877966514     win_T      *ewp;
    5878066515     int                p_crb_save;
     
    5879066525     if (wp == NULL)
    5879166526     {
    58792 @@ -6746,7 +6720,7 @@
     66527@@ -6746,7 +6845,7 @@
    5879366528     }
    5879466529 
     
    5879966534     /* Temporarily reset 'cursorbind', we don't want a side effect from moving
    5880066535      * the cursor away and back. */
    58801 @@ -6827,6 +6801,9 @@
     66536@@ -6827,6 +6926,9 @@
    5880266537        while (col < Columns)
    5880366538            TabPageIdxs[col++] = fillchar;
     
    5880966544 
    5881066545 #endif /* FEAT_STL_OPT */
    58811 @@ -6939,15 +6916,16 @@
     66546@@ -6939,15 +7041,16 @@
    5881266547  * a NUL.
    5881366548  */
     
    5882866563 #ifdef FEAT_MBYTE
    5882966564     unsigned   max_off;
    58830 @@ -7192,7 +7170,11 @@
     66565@@ -7192,7 +7295,11 @@
    5883166566            col += mbyte_cells;
    5883266567            ptr += mbyte_blen;
     
    5884066575        else
    5884166576 #endif
    58842 @@ -7447,7 +7429,7 @@
     66577@@ -7295,6 +7402,8 @@
     66578     match_T    *shl;           /* points to search_hl or a match */
     66579     int                shl_flag;       /* flag to indicate whether search_hl
     66580                                   has been processed or not */
     66581+    int                pos_inprogress; /* marks that position match search is
     66582+                                  in progress */
     66583     int                n;
     66584 
     66585     /*
     66586@@ -7329,10 +7438,16 @@
     66587                shl->first_lnum = wp->w_topline;
     66588 # endif
     66589            }
     66590+           if (cur != NULL)
     66591+               cur->pos.cur = 0;
     66592+           pos_inprogress = TRUE;
     66593            n = 0;
     66594-           while (shl->first_lnum < lnum && shl->rm.regprog != NULL)
     66595+           while (shl->first_lnum < lnum && (shl->rm.regprog != NULL
     66596+                                         || (cur != NULL && pos_inprogress)))
    5884366597            {
    58844                 /* don't free regprog in the match list, it's a copy */
    58845                 vim_regfree(shl->rm.regprog);
     66598-               next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n);
     66599+               next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n, cur);
     66600+               pos_inprogress = cur == NULL || cur->pos.cur == 0
     66601+                                                             ? FALSE : TRUE;
     66602                if (shl->lnum != 0)
     66603                {
     66604                    shl->first_lnum = shl->lnum
     66605@@ -7361,11 +7476,12 @@
     66606  * Careful: Any pointers for buffer lines will become invalid.
     66607  */
     66608     static void
     66609-next_search_hl(win, shl, lnum, mincol)
     66610-    win_T      *win;
     66611-    match_T    *shl;           /* points to search_hl or a match */
     66612-    linenr_T   lnum;
     66613-    colnr_T    mincol;         /* minimal column for a match */
     66614+next_search_hl(win, shl, lnum, mincol, cur)
     66615+    win_T          *win;
     66616+    match_T        *shl;       /* points to search_hl or a match */
     66617+    linenr_T       lnum;
     66618+    colnr_T        mincol;     /* minimal column for a match */
     66619+    matchitem_T            *cur;       /* to retrieve match positions if any */
     66620 {
     66621     linenr_T   l;
     66622     colnr_T    matchcol;
     66623@@ -7433,27 +7549,36 @@
     66624            matchcol = shl->rm.endpos[0].col;
     66625 
     66626        shl->lnum = lnum;
     66627-       nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum, matchcol,
     66628+       if (shl->rm.regprog != NULL)
     66629+       {
     66630+           nmatched = vim_regexec_multi(&shl->rm, win, shl->buf, lnum,
     66631+                   matchcol,
     66632 #ifdef FEAT_RELTIME
     66633-               &(shl->tm)
     66634+                   &(shl->tm)
     66635 #else
     66636-               NULL
     66637+                   NULL
     66638 #endif
     66639-               );
     66640-       if (called_emsg || got_int)
     66641-       {
     66642-           /* Error while handling regexp: stop using this regexp. */
     66643-           if (shl == &search_hl)
     66644+                   );
     66645+           if (called_emsg || got_int)
     66646            {
     66647-               /* don't free regprog in the match list, it's a copy */
     66648-               vim_regfree(shl->rm.regprog);
    5884666649-               no_hlsearch = TRUE;
    58847 +               SET_NO_HLSEARCH(TRUE);
     66650+               /* Error while handling regexp: stop using this regexp. */
     66651+               if (shl == &search_hl)
     66652+               {
     66653+                   /* don't free regprog in the match list, it's a copy */
     66654+                   vim_regfree(shl->rm.regprog);
     66655+                   SET_NO_HLSEARCH(TRUE);
     66656+               }
     66657+               shl->rm.regprog = NULL;
     66658+               shl->lnum = 0;
     66659+               got_int = FALSE;  /* avoid the "Type :quit to exit Vim"
     66660+                                    message */
     66661+               break;
    5884866662            }
    58849             shl->rm.regprog = NULL;
    58850             shl->lnum = 0;
    58851 @@ -9648,10 +9630,7 @@
     66663-           shl->rm.regprog = NULL;
     66664-           shl->lnum = 0;
     66665-           got_int = FALSE;  /* avoid the "Type :quit to exit Vim" message */
     66666-           break;
     66667        }
     66668+       else if (cur != NULL)
     66669+           nmatched = next_search_hl_pos(shl, lnum, &(cur->pos), matchcol);
     66670+       else
     66671+           nmatched = 0;
     66672        if (nmatched == 0)
     66673        {
     66674            shl->lnum = 0;              /* no match found */
     66675@@ -7469,6 +7594,62 @@
     66676        }
     66677     }
     66678 }
     66679+
     66680+    static int
     66681+next_search_hl_pos(shl, lnum, posmatch, mincol)
     66682+    match_T        *shl;       /* points to a match */
     66683+    linenr_T       lnum;
     66684+    posmatch_T     *posmatch;  /* match positions */
     66685+    colnr_T        mincol;     /* minimal column for a match */
     66686+{
     66687+    int            i;
     66688+    int            bot = -1;
     66689+
     66690+    shl->lnum = 0;
     66691+    for (i = posmatch->cur; i < MAXPOSMATCH; i++)
     66692+    {
     66693+       if (posmatch->pos[i].lnum == 0)
     66694+           break;
     66695+       if (posmatch->pos[i].col < mincol)
     66696+           continue;
     66697+       if (posmatch->pos[i].lnum == lnum)
     66698+       {
     66699+           if (shl->lnum == lnum)
     66700+           {
     66701+               /* partially sort positions by column numbers
     66702+                * on the same line */
     66703+               if (posmatch->pos[i].col < posmatch->pos[bot].col)
     66704+               {
     66705+                   llpos_T     tmp = posmatch->pos[i];
     66706+
     66707+                   posmatch->pos[i] = posmatch->pos[bot];
     66708+                   posmatch->pos[bot] = tmp;
     66709+               }
     66710+           }
     66711+           else
     66712+           {
     66713+               bot = i;
     66714+               shl->lnum = lnum;
     66715+           }
     66716+       }
     66717+    }
     66718+    posmatch->cur = 0;
     66719+    if (shl->lnum == lnum)
     66720+    {
     66721+       colnr_T start = posmatch->pos[bot].col == 0
     66722+                                            ? 0 : posmatch->pos[bot].col - 1;
     66723+       colnr_T end = posmatch->pos[bot].col == 0
     66724+                                   ? MAXCOL : start + posmatch->pos[bot].len;
     66725+
     66726+       shl->rm.startpos[0].lnum = 0;
     66727+       shl->rm.startpos[0].col = start;
     66728+       shl->rm.endpos[0].lnum = 0;
     66729+       shl->rm.endpos[0].col = end;
     66730+       posmatch->cur = bot + 1;
     66731+       return TRUE;
     66732+    }
     66733+    return FALSE;
     66734+}
     66735 #endif
     66736 
     66737       static void
     66738@@ -8853,8 +9034,8 @@
     66739        {
     66740            if (noinvcurs)
     66741                screen_stop_highlight();
     66742-           if (row == screen_cur_row && (col > screen_cur_col) &&
     66743-                                                               *T_CRI != NUL)
     66744+           if (row == screen_cur_row && (col > screen_cur_col)
     66745+                                                            && *T_CRI != NUL)
     66746                term_cursor_right(col - screen_cur_col);
     66747            else
     66748                term_windgoto(row, col);
     66749@@ -9648,10 +9829,7 @@
    5885266750     do_mode = ((p_smd && msg_silent == 0)
    5885366751            && ((State & INSERT)
     
    5886166759     {
    5886266760        /*
    58863 @@ -9704,7 +9683,8 @@
     66761@@ -9704,7 +9882,8 @@
    5886466762            }
    5886566763 #endif
     
    5887166769                /* These messages can get long, avoid a wrap in a narrow
    5887266770                 * window.  Prefer showing edit_submode_extra. */
    58873 @@ -9779,7 +9759,6 @@
     66771@@ -9779,7 +9958,6 @@
    5887466772                if ((State & INSERT) && p_paste)
    5887566773                    MSG_PUTS_ATTR(_(" (paste)"), attr);
     
    5887966777                {
    5888066778                    char *p;
    58881 @@ -9799,7 +9778,6 @@
     66779@@ -9799,7 +9977,6 @@
    5888266780                    }
    5888366781                    MSG_PUTS_ATTR(_(p), attr);
     
    5888766785            }
    5888866786 
    58889 @@ -9828,11 +9806,9 @@
     66787@@ -9828,11 +10005,9 @@
    5889066788        msg_clr_cmdline();
    5889166789 
     
    5890166799diff -Naur vim74.orig/src/search.c vim74/src/search.c
    5890266800--- vim74.orig/src/search.c     2013-07-17 17:20:47.000000000 +0000
    58903 +++ vim74/src/search.c  2014-06-01 00:43:17.920804010 +0000
     66801+++ vim74/src/search.c  2014-07-21 23:33:44.590121005 +0000
    5890466802@@ -201,7 +201,7 @@
    5890566803      * Save the currently used pattern in the appropriate place,
     
    5909966997     /*
    5910066998      * Search backwards for unclosed '(', '{', etc..
    59101 @@ -3638,7 +3623,6 @@
    59102                 if (decl(&curwin->w_cursor) != 0)
    59103                     break;
    59104             }
     66999@@ -3623,22 +3608,22 @@
     67000 
     67001     /*
     67002      * Try to exclude the '(', '{', ')', '}', etc. when "include" is FALSE.
     67003-     * If the ending '}' is only preceded by indent, skip that indent.
     67004-     * But only if the resulting area is not smaller than what we started with.
     67005+     * If the ending '}', ')' or ']' is only preceded by indent, skip that
     67006+     * indent.  But only if the resulting area is not smaller than what we
     67007+     * started with.
     67008      */
     67009     while (!include)
     67010     {
     67011        incl(&start_pos);
     67012        sol = (curwin->w_cursor.col == 0);
     67013        decl(&curwin->w_cursor);
     67014-       if (what == '{')
     67015-           while (inindent(1))
     67016-           {
     67017-               sol = TRUE;
     67018-               if (decl(&curwin->w_cursor) != 0)
     67019-                   break;
     67020-           }
    5910567021-#ifdef FEAT_VISUAL
     67022+       while (inindent(1))
     67023+       {
     67024+           sol = TRUE;
     67025+           if (decl(&curwin->w_cursor) != 0)
     67026+               break;
     67027+       }
     67028+
    5910667029        /*
    5910767030         * In Visual mode, when the resulting area is not bigger than what we
    5910867031         * started with, extend it to the next block, and then exclude again.
    59109 @@ -3663,11 +3647,9 @@
     67032@@ -3663,11 +3648,9 @@
    5911067033            curwin->w_cursor = *end_pos;
    5911167034        }
     
    5911967042     {
    5912067043        if (*p_sel == 'e')
    59121 @@ -3680,7 +3662,6 @@
     67044@@ -3680,7 +3663,6 @@
    5912267045        showmode();
    5912367046     }
     
    5912767050        oap->start = start_pos;
    5912867051        oap->motion_type = MCHAR;
    59129 @@ -3804,17 +3785,13 @@
     67052@@ -3804,17 +3786,13 @@
    5913067053     old_pos = curwin->w_cursor;
    5913167054     old_end = curwin->w_cursor;                    /* remember where we started */
     
    5914567068        setpcmark();
    5914667069 
    59147 @@ -3840,7 +3817,6 @@
     67070@@ -3840,7 +3818,6 @@
    5914867071            old_end = curwin->w_cursor;
    5914967072        }
     
    5915367076     {
    5915467077        old_start = VIsual;
    59155 @@ -3848,7 +3824,6 @@
     67078@@ -3848,7 +3825,6 @@
    5915667079     }
    5915767080     else
     
    5916167084 again:
    5916267085     /*
    59163 @@ -3948,7 +3923,6 @@
     67086@@ -3948,7 +3924,6 @@
    5916467087        }
    5916567088     }
     
    5916967092     {
    5917067093        /* If the end is before the start there is no text between tags, select
    59171 @@ -3963,7 +3937,6 @@
     67094@@ -3963,7 +3938,6 @@
    5917267095        showmode();
    5917367096     }
     
    5917767100        oap->start = start_pos;
    5917867101        oap->motion_type = MCHAR;
    59179 @@ -4007,7 +3980,6 @@
     67102@@ -4007,7 +3981,6 @@
    5918067103 
    5918167104     start_lnum = curwin->w_cursor.lnum;
     
    5918567108      * When visual area is more than one line: extend it.
    5918667109      */
    59187 @@ -4061,7 +4033,6 @@
     67110@@ -4061,7 +4034,6 @@
    5918867111        curwin->w_cursor.col = 0;
    5918967112        return retval;
     
    5919367116     /*
    5919467117      * First move back to the start_lnum of the paragraph or white lines
    59195 @@ -4133,7 +4104,6 @@
     67118@@ -4133,7 +4105,6 @@
    5919667119        while (start_lnum > 1 && linewhite(start_lnum - 1))
    5919767120            --start_lnum;
     
    5920167124     {
    5920267125        /* Problem: when doing "Vipipip" nothing happens in a single white
    59203 @@ -4146,7 +4116,6 @@
     67126@@ -4146,7 +4117,6 @@
    5920467127        showmode();
    5920567128     }
     
    5920967132        oap->start.lnum = start_lnum;
    5921067133        oap->start.col = 0;
    59211 @@ -4244,7 +4213,6 @@
     67134@@ -4244,7 +4214,6 @@
    5921267135     int                col_end;
    5921367136     int                col_start = curwin->w_cursor.col;
     
    5921767140     int                vis_bef_curs = FALSE;   /* Visual starts before cursor */
    5921867141     int                inside_quotes = FALSE;  /* Looks like "i'" done before */
    59219 @@ -4328,17 +4296,11 @@
     67142@@ -4328,17 +4297,11 @@
    5922067143        }
    5922167144     }
     
    5923667159        {
    5923767160            if (vis_bef_curs)
    59238 @@ -4346,7 +4308,7 @@
     67161@@ -4346,7 +4309,7 @@
    5923967162            else
    5924067163                first_col = find_prev_quote(line, col_start, quotechar, NULL);
     
    5924567168         * closing quote.  Search from the start of the line to find out.
    5924667169         * Also do this when there is a Visual area, a' may leave the cursor
    59247 @@ -4403,14 +4365,9 @@
     67170@@ -4403,14 +4366,9 @@
    5924867171 
    5924967172     /* Set start position.  After vi" another i" must include the ".
     
    5926167184     {
    5926267185        /* Set the start of the Visual area when the Visual area was empty, we
    59263 @@ -4430,7 +4387,6 @@
     67186@@ -4430,7 +4388,6 @@
    5926467187        }
    5926567188     }
     
    5926967192        oap->start = curwin->w_cursor;
    5927067193        oap->motion_type = MCHAR;
    59271 @@ -4438,14 +4394,10 @@
     67194@@ -4438,14 +4395,10 @@
    5927267195 
    5927367196     /* Set end position. */
     
    5928567208     {
    5928667209        if (vis_empty || vis_bef_curs)
    59287 @@ -4477,7 +4429,6 @@
     67210@@ -4477,7 +4430,6 @@
    5928867211        }
    5928967212     }
     
    5929367216        /* Set inclusive and other oap's flags. */
    5929467217        oap->inclusive = inclusive;
    59295 @@ -4488,7 +4439,6 @@
     67218@@ -4488,7 +4440,6 @@
    5929667219 
    5929767220 #endif /* FEAT_TEXTOBJ */
     
    5930167224 
    5930267225 /*
    59303 @@ -4541,7 +4491,10 @@
     67226@@ -4541,7 +4492,10 @@
    5930467227     /* Is the pattern is zero-width? */
    5930567228     one_char = is_one_char(spats[last_idx].pat);
     
    5931367236     /*
    5931467237      * The trick is to first search backwards and then search forward again,
    59315 @@ -4589,7 +4542,7 @@
     67238@@ -4589,7 +4543,7 @@
    5931667239                                ml_get(curwin->w_buffer->b_ml.ml_line_count));
    5931767240            }
     
    5932267245 
    5932367246     start_pos = pos;
    59324 @@ -4604,7 +4557,6 @@
     67247@@ -4604,7 +4558,6 @@
    5932567248     if (!VIsual_active)
    5932667249        VIsual = start_pos;
     
    5933067253     VIsual_active = TRUE;
    5933167254     VIsual_mode = 'v';
    59332 @@ -4677,15 +4629,14 @@
     67255@@ -4677,15 +4630,14 @@
    5933367256                && regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
    5933467257                && regmatch.startpos[0].col == regmatch.endpos[0].col);
     
    5934867271 #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
    5934967272        || defined(PROTO)
    59350 @@ -5559,7 +5510,9 @@
     67273@@ -5559,7 +5511,9 @@
    5935167274                spats[idx].off.off = off;
    5935267275 #ifdef FEAT_SEARCH_EXTRA
     
    5936167284diff -Naur vim74.orig/src/spell.c vim74/src/spell.c
    5936267285--- vim74.orig/src/spell.c      2013-07-17 15:28:28.000000000 +0000
    59363 +++ vim74/src/spell.c   2014-06-01 00:43:17.964137233 +0000
     67286+++ vim74/src/spell.c   2014-07-21 23:33:44.676787446 +0000
    5936467287@@ -317,7 +317,7 @@
    5936567288 
     
    5979267715diff -Naur vim74.orig/src/structs.h vim74/src/structs.h
    5979367716--- vim74.orig/src/structs.h    2013-07-03 13:35:59.000000000 +0000
    59794 +++ vim74/src/structs.h 2014-06-01 00:43:17.970803882 +0000
    59795 @@ -346,9 +346,7 @@
     67717+++ vim74/src/structs.h 2014-07-21 23:33:44.713454017 +0000
     67718@@ -134,6 +134,12 @@
     67719     int                wo_arab;
     67720 # define w_p_arab w_onebuf_opt.wo_arab /* 'arabic' */
     67721 #endif
     67722+#ifdef FEAT_LINEBREAK
     67723+    int                wo_bri;
     67724+# define w_p_bri w_onebuf_opt.wo_bri   /* 'breakindent' */
     67725+    char_u             *wo_briopt;
     67726+# define w_p_briopt w_onebuf_opt.wo_briopt /* 'breakindentopt' */
     67727+#endif
     67728 #ifdef FEAT_DIFF
     67729     int                wo_diff;
     67730 # define w_p_diff w_onebuf_opt.wo_diff /* 'diff' */
     67731@@ -346,9 +352,7 @@
    5979667732 #endif
    5979767733     int                uh_flags;       /* see below */
     
    5980367739     long       uh_save_nr;     /* set when the file was saved after the
    5980467740                                   changes in this block */
    59805 @@ -364,7 +362,7 @@
     67741@@ -364,7 +368,7 @@
    5980667742 /*
    5980767743  * structures used in undo.c
     
    5981267748 # define ALIGN_SIZE (sizeof(long))
    5981367749 #else
    59814 @@ -471,13 +469,17 @@
     67750@@ -471,13 +475,17 @@
    5981567751     blocknr_T  nt_new_bnum;            /* new, positive, number */
    5981667752 };
     
    5983267768 
    5983367769 /*
    59834 @@ -485,10 +487,10 @@
     67770@@ -485,10 +493,10 @@
    5983567771  */
    5983667772 struct buffheader
     
    5984767783 
    5984867784 /*
    59849 @@ -542,6 +544,8 @@
     67785@@ -542,6 +550,8 @@
    5985067786     int                keepmarks;              /* TRUE when ":keepmarks" was used */
    5985167787     int                keepjumps;              /* TRUE when ":keepjumps" was used */
     
    5985667792     char_u     *save_ei;               /* saved value of 'eventignore' */
    5985767793 # endif
    59858 @@ -568,7 +572,7 @@
     67794@@ -568,7 +578,7 @@
    5985967795     unsigned   mf_page_size;           /* number of bytes in a page */
    5986067796     int                mf_dirty;               /* TRUE if there are dirty blocks */
     
    5986567801 
    5986667802     /* Values for key, method and seed used for reading data blocks when
    59867 @@ -671,6 +675,7 @@
     67803@@ -671,6 +681,7 @@
    5986867804 {
    5986967805     garray_T   al_ga;          /* growarray with the array of file names */
     
    5987367809 
    5987467810 /*
    59875 @@ -963,7 +968,8 @@
     67811@@ -963,7 +974,8 @@
    5987667812     int                        typebuf_valid;      /* TRUE when save_typebuf valid */
    5987767813     int                        old_char;
     
    5988367819     char_u             *save_inputbuf;
    5988467820 #endif
    59885 @@ -1088,7 +1094,7 @@
     67821@@ -1088,7 +1100,7 @@
    5988667822 typedef long_u hash_T;         /* Type for hi_hash */
    5988767823 
     
    5989267828 #else
    5989367829 typedef int    varnumber_T;
    59894 @@ -1309,6 +1315,9 @@
     67830@@ -1309,6 +1321,9 @@
    5989567831     regprog_T  *b_cap_prog;    /* program for 'spellcapcheck' */
    5989667832     char_u     *b_p_spf;       /* 'spellfile' */
     
    5990267838 #if !defined(FEAT_SYN_HL) && !defined(FEAT_SPELL)
    5990367839     int                dummy;
    59904 @@ -1397,12 +1406,10 @@
     67840@@ -1397,12 +1412,10 @@
    5990567841 
    5990667842     pos_T      b_namedm[NMARKS]; /* current named marks (mark.c) */
     
    5991667852 
    5991767853     pos_T      b_last_cursor;  /* cursor position when last unloading this
    59918 @@ -1440,6 +1447,7 @@
     67854@@ -1440,6 +1453,7 @@
    5991967855      * start and end of an operator, also used for '[ and ']
    5992067856      */
     
    5992467860 
    5992567861 #ifdef FEAT_VIMINFO
    59926 @@ -1627,12 +1635,55 @@
     67862@@ -1627,12 +1641,55 @@
    5992767863     char_u     *b_p_dict;      /* 'dictionary' local value */
    5992867864     char_u     *b_p_tsr;       /* 'thesaurus' local value */
     
    5998067916                                 * write should not have an end-of-line */
    5998167917 
    59982 @@ -1927,7 +1978,6 @@
     67918@@ -1876,6 +1933,32 @@
     67919 #endif
     67920 } match_T;
     67921 
     67922+/* number of positions supported by matchaddpos() */
     67923+#define MAXPOSMATCH 8
     67924+
     67925+/*
     67926+ * Same as lpos_T, but with additional field len.
     67927+ */
     67928+typedef struct
     67929+{
     67930+    linenr_T   lnum;   /* line number */
     67931+    colnr_T    col;    /* column number */
     67932+    int                len;    /* length: 0 - to the end of line */
     67933+} llpos_T;
     67934+
     67935+/*
     67936+ * posmatch_T provides an array for storing match items for matchaddpos()
     67937+ * function.
     67938+ */
     67939+typedef struct posmatch posmatch_T;
     67940+struct posmatch
     67941+{
     67942+    llpos_T    pos[MAXPOSMATCH];       /* array of positions */
     67943+    int                cur;                    /* internal position counter */
     67944+    linenr_T   toplnum;                /* top buffer line */
     67945+    linenr_T   botlnum;                /* bottom buffer line */
     67946+};
     67947+
     67948 /*
     67949  * matchitem_T provides a linked list for storing match items for ":match" and
     67950  * the match functions.
     67951@@ -1889,6 +1972,7 @@
     67952     char_u     *pattern;   /* pattern to highlight */
     67953     int                hlg_id;     /* highlight group ID */
     67954     regmmatch_T        match;      /* regexp program for pattern */
     67955+    posmatch_T pos;        /* position matches */
     67956     match_T    hl;         /* struct for doing the actual highlighting */
     67957 };
     67958 
     67959@@ -1927,7 +2011,6 @@
    5998367960                                       time through cursupdate() to the
    5998467961                                       current virtual column */
     
    5998867965      * the next six are used to update the visual part
    5998967966      */
    59990 @@ -1938,7 +1988,6 @@
     67967@@ -1938,7 +2021,6 @@
    5999167968     linenr_T   w_old_visual_lnum;  /* last known start of visual part */
    5999267969     colnr_T    w_old_visual_col;   /* last known start of visual part */
     
    5999667973     /*
    5999767974      * "w_topline", "w_leftcol" and "w_skipcol" specify the offsets for
    59998 @@ -2240,10 +2289,8 @@
     67975@@ -2113,6 +2195,11 @@
     67976 #ifdef FEAT_SYN_HL
     67977     int                *w_p_cc_cols;       /* array of columns to highlight or NULL */
     67978 #endif
     67979+#ifdef FEAT_LINEBREAK
     67980+    int                w_p_brimin;         /* minimum width for breakindent */
     67981+    int                w_p_brishift;       /* additional shift for breakindent */
     67982+    int                w_p_brisbr;         /* sbr in 'briopt' */
     67983+#endif
     67984 
     67985     /* transform a pointer to a "onebuf" option into a "allbuf" option */
     67986 #define GLOBAL_WO(p)   ((char *)p + sizeof(winopt_T))
     67987@@ -2240,10 +2327,8 @@
    5999967988                                   (inclusive) */
    6000067989     int                empty;          /* op_start and op_end the same (only used by
     
    6000967998diff -Naur vim74.orig/src/syntax.c vim74/src/syntax.c
    6001067999--- vim74.orig/src/syntax.c     2013-06-08 14:10:08.000000000 +0000
    60011 +++ vim74/src/syntax.c  2014-06-01 00:43:18.047470354 +0000
     68000+++ vim74/src/syntax.c  2014-07-21 23:33:44.760120562 +0000
    6001268001@@ -6837,10 +6837,8 @@
    6001368002        CENT("SignColumn term=standout ctermbg=Grey ctermfg=DarkBlue",
     
    6004168030     }
    6004268031     recursive = FALSE;
     68032@@ -8047,8 +8043,14 @@
     68033 {
     68034     return (   HL_TABLE()[idx].sg_term_attr != 0
     68035            || HL_TABLE()[idx].sg_cterm_attr != 0
     68036+           || HL_TABLE()[idx].sg_cterm_fg != 0
     68037+           || HL_TABLE()[idx].sg_cterm_bg != 0
     68038 #ifdef FEAT_GUI
     68039            || HL_TABLE()[idx].sg_gui_attr != 0
     68040+           || HL_TABLE()[idx].sg_gui_fg_name != NULL
     68041+           || HL_TABLE()[idx].sg_gui_bg_name != NULL
     68042+           || HL_TABLE()[idx].sg_gui_sp_name != NULL
     68043+           || HL_TABLE()[idx].sg_font_name != NUL
     68044 #endif
     68045            || (check_link && (HL_TABLE()[idx].sg_set & SG_LINK)));
     68046 }
    6004368047diff -Naur vim74.orig/src/tag.c vim74/src/tag.c
    6004468048--- vim74.orig/src/tag.c        2013-06-15 20:26:26.000000000 +0000
    60045 +++ vim74/src/tag.c     2014-06-01 00:43:18.100803551 +0000
     68049+++ vim74/src/tag.c     2014-07-21 23:33:44.786787159 +0000
    6004668050@@ -741,8 +741,10 @@
    6004768051                            break;
     
    6011868122diff -Naur vim74.orig/src/term.c vim74/src/term.c
    6011968123--- vim74.orig/src/term.c       2013-07-04 20:29:28.000000000 +0000
    60120 +++ vim74/src/term.c    2014-06-01 00:43:18.190803322 +0000
     68124+++ vim74/src/term.c    2014-07-21 23:33:44.846787002 +0000
    6012168125@@ -153,6 +153,11 @@
    6012268126 static char_u *vim_tgetstr __ARGS((char *s, char_u **pp));
     
    6014068144        }
    6014168145 #endif
    60142 @@ -3307,6 +3312,27 @@
     68146@@ -3307,6 +3312,40 @@
    6014368147 }
    6014468148 
     
    6016268166+                                               || xt_index_out > xt_index_in;
    6016368167+}
     68168+
     68169+/*
     68170+ * If requesting the version was disabled in did_request_esc_sequence(),
     68171+ * enable it again.
     68172+ */
     68173+    void
     68174+resume_get_esc_sequence()
     68175+{
     68176+    if (crv_status == 0)
     68177+       crv_status = CRV_GET;
     68178+    if (u7_status == 0)
     68179+       u7_status = U7_GET;
     68180+}
    6016468181+# endif
    6016568182+
     
    6016868185  * Request version string (for xterm) when needed.
    6016968186  * Only do this after switching to raw mode, otherwise the result will be
    60170 @@ -3319,6 +3345,8 @@
     68187@@ -3319,6 +3358,8 @@
    6017168188  * Insert mode.
    6017268189  * On Unix only do it when both output and input are a tty (avoid writing
     
    6017768194  */
    6017868195     void
    60179 @@ -3332,6 +3360,7 @@
     68196@@ -3332,6 +3373,7 @@
    6018068197 # ifdef UNIX
    6018168198            && isatty(1)
     
    6018568202            && *T_CRV != NUL)
    6018668203     {
    60187 @@ -3356,7 +3385,7 @@
     68204@@ -3356,7 +3398,7 @@
    6018868205  * it must be called immediately after entering termcap mode.
    6018968206  */
     
    6019468211     if (u7_status == U7_GET
    6019568212            && cur_tmode == TMODE_RAW
    60196 @@ -3379,7 +3408,8 @@
     68213@@ -3379,7 +3421,8 @@
    6019768214         out_str(buf);
    6019868215         out_str(T_U7);
     
    6020468221         term_windgoto(0, 0);
    6020568222         /* check for the characters now, otherwise they might be eaten by
    60206 @@ -3455,12 +3485,9 @@
     68223@@ -3455,12 +3498,9 @@
    6020768224        return;
    6020868225     }
     
    6021868235     else if (State & INSERT)
    6021968236        checkfor = MOUSE_INSERT;
    60220 @@ -4185,24 +4212,38 @@
     68237@@ -3684,7 +3724,11 @@
     68238        return;
     68239     }
     68240 
     68241+#if defined(WIN3264) && !defined(FEAT_GUI)
     68242+    s = vim_strnsave(string, (int)STRLEN(string) + 1);
     68243+#else
     68244     s = vim_strsave(string);
     68245+#endif
     68246     if (s == NULL)
     68247        return;
     68248 
     68249@@ -3694,6 +3738,15 @@
     68250        STRMOVE(s, s + 1);
     68251        s[0] = term_7to8bit(string);
     68252     }
     68253+
     68254+#if defined(WIN3264) && !defined(FEAT_GUI)
     68255+    if (s[0] == K_NUL)
     68256+    {
     68257+        STRMOVE(s + 1, s);
     68258+        s[1] = 3;
     68259+    }
     68260+#endif
     68261+
     68262     len = (int)STRLEN(s);
     68263 
     68264     need_gather = TRUE;                /* need to fill termleader[] */
     68265@@ -4185,24 +4238,38 @@
    6022168266                            || (tp[0] == CSI && len >= 2))
    6022268267                        && (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
     
    6026268307                    char *aw = NULL;
    6026368308 
    60264 @@ -4211,18 +4252,16 @@
     68309@@ -4211,18 +4278,16 @@
    6026568310 # ifdef FEAT_AUTOCMD
    6026668311                    did_cursorhold = TRUE;
     
    6028468329                            char buf[100];
    6028568330                            int  r = redraw_asap(CLEAR);
    60286 @@ -4231,9 +4270,9 @@
     68331@@ -4231,9 +4296,9 @@
    6028768332                                                                           r);
    6028868333                            log_tr(buf);
     
    6029668341                    key_name[0] = (int)KS_EXTRA;
    6029768342                    key_name[1] = (int)KE_IGNORE;
    60298 @@ -5704,9 +5743,6 @@
     68343@@ -5704,9 +5769,6 @@
    6029968344  * termcap codes from the terminal itself.
    6030068345  * We get them one by one to avoid a very long response string.
     
    6030868353diff -Naur vim74.orig/src/testdir/Make_amiga.mak vim74/src/testdir/Make_amiga.mak
    6030968354--- vim74.orig/src/testdir/Make_amiga.mak       2013-07-09 11:40:02.000000000 +0000
    60310 +++ vim74/src/testdir/Make_amiga.mak    2014-06-01 00:43:18.240803195 +0000
    60311 @@ -33,7 +33,12 @@
     68355+++ vim74/src/testdir/Make_amiga.mak    2014-07-21 23:33:44.876786924 +0000
     68356@@ -33,7 +33,15 @@
    6031268357                test76.out test77.out test78.out test79.out test80.out \
    6031368358                test81.out test82.out test83.out test84.out test88.out \
     
    6031868363+               test104.out test105.out test106.out test107.out \
    6031968364+               test_autoformat_join.out \
     68365+               test_breakindent.out \
     68366+               test_listlbr.out \
     68367+               test_listlbr_utf8.out \
    6032068368+               test_eval.out \
    6032168369+               test_options.out
     
    6032368371 .SUFFIXES: .in .out
    6032468372 
    60325 @@ -148,3 +153,15 @@
     68373@@ -148,3 +156,18 @@
    6032668374 test96.out: test96.in
    6032768375 test97.out: test97.in
     
    6033768385+test107.out: test107.in
    6033868386+test_autoformat_join.out: test_autoformat_join.in
     68387+test_breakindent.out: test_breakindent.in
     68388+test_listlbr.out: test_listlbr.in
     68389+test_listlbr_utf8.out: test_listlbr_utf8.in
    6033968390+test_eval.out: test_eval.in
    6034068391+test_options.out: test_options.in
    6034168392diff -Naur vim74.orig/src/testdir/Make_dos.mak vim74/src/testdir/Make_dos.mak
    6034268393--- vim74.orig/src/testdir/Make_dos.mak 2013-07-09 11:40:30.000000000 +0000
    60343 +++ vim74/src/testdir/Make_dos.mak      2014-06-01 00:43:18.240803195 +0000
    60344 @@ -32,7 +32,12 @@
     68394+++ vim74/src/testdir/Make_dos.mak      2014-07-21 23:33:44.890120223 +0000
     68395@@ -32,7 +32,15 @@
    6034568396                test79.out test80.out test81.out test82.out test83.out \
    6034668397                test84.out test85.out test86.out test87.out test88.out \
     
    6035168402+               test105.out test106.out  test107.out\
    6035268403+               test_autoformat_join.out \
     68404+               test_breakindent.out \
     68405+               test_listlbr.out \
     68406+               test_listlbr_utf8.out \
    6035368407+               test_eval.out \
    6035468408+               test_options.out
     
    6035868412diff -Naur vim74.orig/src/testdir/Make_ming.mak vim74/src/testdir/Make_ming.mak
    6035968413--- vim74.orig/src/testdir/Make_ming.mak        2013-07-09 11:40:38.000000000 +0000
    60360 +++ vim74/src/testdir/Make_ming.mak     2014-06-01 00:43:18.244136520 +0000
    60361 @@ -52,7 +52,12 @@
     68414+++ vim74/src/testdir/Make_ming.mak     2014-07-21 23:33:44.903453521 +0000
     68415@@ -52,7 +52,15 @@
    6036268416                test79.out test80.out test81.out test82.out test83.out \
    6036368417                test84.out test85.out test86.out test87.out test88.out \
     
    6036868422+               test105.out test106.out test107.out \
    6036968423+               test_autoformat_join.out \
     68424+               test_breakindent.out \
     68425+               test_listlbr.out \
     68426+               test_listlbr_utf8.out \
    6037068427+               test_eval.out \
    6037168428+               test_options.out
     
    6037568432diff -Naur vim74.orig/src/testdir/Make_os2.mak vim74/src/testdir/Make_os2.mak
    6037668433--- vim74.orig/src/testdir/Make_os2.mak 2013-07-09 11:40:43.000000000 +0000
    60377 +++ vim74/src/testdir/Make_os2.mak      2014-06-01 00:43:18.244136520 +0000
    60378 @@ -34,7 +34,12 @@
     68434+++ vim74/src/testdir/Make_os2.mak      2014-07-21 23:33:44.913453495 +0000
     68435@@ -34,7 +34,15 @@
    6037968436                test76.out test77.out test78.out test79.out test80.out \
    6038068437                test81.out test82.out test83.out test84.out test88.out \
     
    6038668443+               test_autoformat_join.out \
    6038768444+               test_eval.out \
     68445+               test_breakindent.out \
     68446+               test_listlbr_utf8.out \
     68447+               test_listlbr.out \
    6038868448+               test_options.out
    6038968449 
     
    6039268452diff -Naur vim74.orig/src/testdir/Make_vms.mms vim74/src/testdir/Make_vms.mms
    6039368453--- vim74.orig/src/testdir/Make_vms.mms 2013-07-09 11:40:47.000000000 +0000
    60394 +++ vim74/src/testdir/Make_vms.mms      2014-06-01 00:43:18.247469845 +0000
     68454+++ vim74/src/testdir/Make_vms.mms      2014-07-21 23:33:44.920120144 +0000
    6039568455@@ -4,7 +4,7 @@
    6039668456 # Authors:     Zoltan Arpadffy, <arpadffy@polarhome.com>
     
    6043568495 # End of configuration section.
    6043668496 #
    60437 @@ -63,35 +78,47 @@
     68497@@ -63,35 +78,50 @@
    6043868498 
    6043968499 SCRIPT = test1.out  test2.out  test3.out  test4.out  test5.out  \
     
    6046468524+        test105.out test106.out test107.out \
    6046568525+        test_autoformat_join.out \
     68526+        test_breakindent.out \
     68527+        test_listlbr.out \
     68528+        test_listlbr_utf8.out \
    6046668529+        test_eval.out \
    6046768530+        test_options.out
     
    6049468557 .IFDEF WANT_GUI
    6049568558 SCRIPT_GUI = test16.out
    60496 @@ -99,7 +126,7 @@
     68559@@ -99,7 +129,7 @@
    6049768560 .ENDIF
    6049868561 
     
    6050368566 
    6050468567 .IFDEF WANT_WIN
    60505 @@ -114,6 +141,10 @@
     68568@@ -114,6 +144,10 @@
    6050668569 SCRIPT_MZSCH = test70.out
    6050768570 .ENDIF
     
    6051468577 SCRIPT_GZIP = test11.out
    6051568578 .ENDIF
    60516 @@ -122,10 +153,28 @@
     68579@@ -122,10 +156,28 @@
    6051768580 SCRIPT_GDIFF = test47.out
    6051868581 .ENDIF
     
    6054368606        -@ write sys$output "-----------------------------------------------"
    6054468607        -@ write sys$output "                "$*" "
    60545 @@ -138,9 +187,10 @@
     68608@@ -138,9 +190,10 @@
    6054668609        -@ if "''F$SEARCH("$*.out.*")'"   .NES. "" then differences /par $*.out $*.ok;
    6054768610        -@ !clean up after the test
     
    6055668619        -@ write sys$output "-----------------------------------------------"
    6055768620        -@ write sys$output "                All done"
    60558 @@ -163,13 +213,18 @@
     68621@@ -163,13 +216,18 @@
    6055968622        -@ write sys$output "                Test results:"
    6056068623        -@ write sys$output "-----------------------------------------------"
     
    6058268645        -@ write sys$output "-----------------------------------------------"
    6058368646        -@ type VMS.VIM
    60584 @@ -179,6 +234,9 @@
     68647@@ -179,6 +237,9 @@
    6058568648        -@ if "''F$SEARCH("test.log")'"     .NES. "" then delete/noconfirm/nolog test.log.*
    6058668649        -@ if "''F$SEARCH("test.ok")'"      .NES. "" then delete/noconfirm/nolog test.ok.*
     
    6059268655        -@ if "''F$SEARCH("*.failed")'"     .NES. "" then delete/noconfirm/nolog *.failed.*
    6059368656        -@ if "''F$SEARCH("*.rej")'"        .NES. "" then delete/noconfirm/nolog *.rej.*
    60594 @@ -186,6 +244,6 @@
     68657@@ -186,6 +247,6 @@
    6059568658        -@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
    6059668659        -@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
     
    6060268665diff -Naur vim74.orig/src/testdir/Makefile vim74/src/testdir/Makefile
    6060368666--- vim74.orig/src/testdir/Makefile     2013-08-10 12:20:20.000000000 +0000
    60604 +++ vim74/src/testdir/Makefile  2014-06-01 00:43:18.250803169 +0000
     68667+++ vim74/src/testdir/Makefile  2014-07-21 23:33:44.950120066 +0000
    6060568668@@ -3,6 +3,7 @@
    6060668669 #
     
    6061168674 # Uncomment this line to use valgrind for memory leaks and extra warnings.
    6061268675 #   The output goes into a file "valgrind.testN"
    60613 @@ -29,7 +30,12 @@
     68676@@ -29,7 +30,15 @@
    6061468677                test79.out test80.out test81.out test82.out test83.out \
    6061568678                test84.out test85.out test86.out test87.out test88.out \
     
    6062068683+               test104.out test105.out test106.out test107.out \
    6062168684+               test_autoformat_join.out \
     68685+               test_breakindent.out \
     68686+               test_listlbr.out \
     68687+               test_listlbr_utf8.out \
    6062268688+               test_eval.out \
    6062368689+               test_options.out
     
    6062568691 SCRIPTS_GUI = test16.out
    6062668692 
    60627 @@ -51,15 +57,19 @@
     68693@@ -51,15 +60,19 @@
    6062868694 
    6062968695 RM_ON_RUN = test.out X* viminfo
     
    6065068716diff -Naur vim74.orig/src/testdir/sautest/autoload/Test104.vim vim74/src/testdir/sautest/autoload/Test104.vim
    6065168717--- vim74.orig/src/testdir/sautest/autoload/Test104.vim 1970-01-01 00:00:00.000000000 +0000
    60652 +++ vim74/src/testdir/sautest/autoload/Test104.vim      2014-06-01 00:43:18.450802660 +0000
     68718+++ vim74/src/testdir/sautest/autoload/Test104.vim      2014-07-21 23:33:45.170119492 +0000
    6065368719@@ -0,0 +1 @@
    6065468720+let Test104#numvar = 123
    6065568721diff -Naur vim74.orig/src/testdir/sautest/autoload/footest.vim vim74/src/testdir/sautest/autoload/footest.vim
    6065668722--- vim74.orig/src/testdir/sautest/autoload/footest.vim 1970-01-01 00:00:00.000000000 +0000
    60657 +++ vim74/src/testdir/sautest/autoload/footest.vim      2014-06-01 00:43:18.464135959 +0000
     68723+++ vim74/src/testdir/sautest/autoload/footest.vim      2014-07-21 23:33:45.183452791 +0000
    6065868724@@ -0,0 +1,5 @@
    6065968725+" Autoload script used by test55 and test60
     
    6066468730diff -Naur vim74.orig/src/testdir/test1.in vim74/src/testdir/test1.in
    6066568731--- vim74.orig/src/testdir/test1.in     2012-04-05 14:37:37.000000000 +0000
    60666 +++ vim74/src/testdir/test1.in  2014-06-01 00:43:18.470802609 +0000
     68732+++ vim74/src/testdir/test1.in  2014-07-21 23:33:45.213452712 +0000
    6066768733@@ -18,6 +18,10 @@
    6066868734 Similar logic is applied to the +lua feature, using lua.vim.
     
    6067868744diff -Naur vim74.orig/src/testdir/test100.in vim74/src/testdir/test100.in
    6067968745--- vim74.orig/src/testdir/test100.in   1970-01-01 00:00:00.000000000 +0000
    60680 +++ vim74/src/testdir/test100.in        2014-06-01 00:43:18.517469157 +0000
     68746+++ vim74/src/testdir/test100.in        2014-07-21 23:33:45.243452634 +0000
    6068168747@@ -0,0 +1,50 @@
    6068268748+Tests for 'undolevel' and 'lispwords' settings being global-local
     
    6073268798diff -Naur vim74.orig/src/testdir/test100.ok vim74/src/testdir/test100.ok
    6073368799--- vim74.orig/src/testdir/test100.ok   1970-01-01 00:00:00.000000000 +0000
    60734 +++ vim74/src/testdir/test100.ok        2014-06-01 00:43:18.517469157 +0000
     68800+++ vim74/src/testdir/test100.ok        2014-07-21 23:33:45.256785933 +0000
    6073568801@@ -0,0 +1,51 @@
    6073668802+ONE: expecting global undolevels: 5, local undolevels: -123456 (default)
     
    6078768853diff -Naur vim74.orig/src/testdir/test101.in vim74/src/testdir/test101.in
    6078868854--- vim74.orig/src/testdir/test101.in   1970-01-01 00:00:00.000000000 +0000
    60789 +++ vim74/src/testdir/test101.in        2014-06-01 00:43:18.540802431 +0000
     68855+++ vim74/src/testdir/test101.in        2014-07-21 23:33:45.270119231 +0000
    6079068856@@ -0,0 +1,45 @@
    6079168857+Test for v:hlsearch     vim: set ft=vim :
     
    6083668902diff -Naur vim74.orig/src/testdir/test101.ok vim74/src/testdir/test101.ok
    6083768903--- vim74.orig/src/testdir/test101.ok   1970-01-01 00:00:00.000000000 +0000
    60838 +++ vim74/src/testdir/test101.ok        2014-06-01 00:43:18.544135756 +0000
     68904+++ vim74/src/testdir/test101.ok        2014-07-21 23:33:45.273452556 +0000
    6083968905@@ -0,0 +1,11 @@
    6084068906+start:
     
    6085168917diff -Naur vim74.orig/src/testdir/test102.in vim74/src/testdir/test102.in
    6085268918--- vim74.orig/src/testdir/test102.in   1970-01-01 00:00:00.000000000 +0000
    60853 +++ vim74/src/testdir/test102.in        2014-06-01 00:43:18.557469055 +0000
     68919+++ vim74/src/testdir/test102.in        2014-07-21 23:33:45.286785854 +0000
    6085468920@@ -0,0 +1,12 @@
    6085568921+Test if fnameescape is correct for special chars like !
     
    6086768933diff -Naur vim74.orig/src/testdir/test102.ok vim74/src/testdir/test102.ok
    6086868934--- vim74.orig/src/testdir/test102.ok   1970-01-01 00:00:00.000000000 +0000
    60869 +++ vim74/src/testdir/test102.ok        2014-06-01 00:43:18.560802380 +0000
     68935+++ vim74/src/testdir/test102.ok        2014-07-21 23:33:45.290119179 +0000
    6087068936@@ -0,0 +1,3 @@
    6087168937+
     
    6087468940diff -Naur vim74.orig/src/testdir/test103.in vim74/src/testdir/test103.in
    6087568941--- vim74.orig/src/testdir/test103.in   1970-01-01 00:00:00.000000000 +0000
    60876 +++ vim74/src/testdir/test103.in        2014-06-01 00:43:18.574135679 +0000
     68942+++ vim74/src/testdir/test103.in        2014-07-21 23:33:45.313452451 +0000
    6087768943@@ -0,0 +1,37 @@
    6087868944+Test for visual mode not being reset causing E315 error.
     
    6091568981diff -Naur vim74.orig/src/testdir/test103.ok vim74/src/testdir/test103.ok
    6091668982--- vim74.orig/src/testdir/test103.ok   1970-01-01 00:00:00.000000000 +0000
    60917 +++ vim74/src/testdir/test103.ok        2014-06-01 00:43:18.590802304 +0000
     68983+++ vim74/src/testdir/test103.ok        2014-07-21 23:33:45.320119101 +0000
    6091868984@@ -0,0 +1,2 @@
    6091968985+
     
    6092168987diff -Naur vim74.orig/src/testdir/test104.in vim74/src/testdir/test104.in
    6092268988--- vim74.orig/src/testdir/test104.in   1970-01-01 00:00:00.000000000 +0000
    60923 +++ vim74/src/testdir/test104.in        2014-06-01 00:43:18.600802278 +0000
     68989+++ vim74/src/testdir/test104.in        2014-07-21 23:33:45.330119075 +0000
    6092468990@@ -0,0 +1,30 @@
    6092568991+Tests for :let.  vim: set ft=vim ts=8 :
     
    6095569021diff -Naur vim74.orig/src/testdir/test104.ok vim74/src/testdir/test104.ok
    6095669022--- vim74.orig/src/testdir/test104.ok   1970-01-01 00:00:00.000000000 +0000
    60957 +++ vim74/src/testdir/test104.ok        2014-06-01 00:43:18.614135578 +0000
     69023+++ vim74/src/testdir/test104.ok        2014-07-21 23:33:45.356785672 +0000
    6095869024@@ -0,0 +1,13 @@
    6095969025+Results of test104:
     
    6097269038diff -Naur vim74.orig/src/testdir/test105.in vim74/src/testdir/test105.in
    6097369039--- vim74.orig/src/testdir/test105.in   1970-01-01 00:00:00.000000000 +0000
    60974 +++ vim74/src/testdir/test105.in        2014-06-01 00:43:18.620802227 +0000
     69040+++ vim74/src/testdir/test105.in        2014-07-21 23:33:45.360118996 +0000
    6097569041@@ -0,0 +1,45 @@
    6097669042+Test filename modifiers     vim: set ft=vim :
     
    6102169087diff -Naur vim74.orig/src/testdir/test105.ok vim74/src/testdir/test105.ok
    6102269088--- vim74.orig/src/testdir/test105.ok   1970-01-01 00:00:00.000000000 +0000
    61023 +++ vim74/src/testdir/test105.ok        2014-06-01 00:43:18.627468877 +0000
     69089+++ vim74/src/testdir/test105.ok        2014-07-21 23:33:45.366785646 +0000
    6102469090@@ -0,0 +1,29 @@
    6102569091+fnamemodify('.',              ':p'      )[-1:] '/'
     
    6105469120diff -Naur vim74.orig/src/testdir/test106.in vim74/src/testdir/test106.in
    6105569121--- vim74.orig/src/testdir/test106.in   1970-01-01 00:00:00.000000000 +0000
    61056 +++ vim74/src/testdir/test106.in        2014-06-01 00:43:18.644135501 +0000
     69122+++ vim74/src/testdir/test106.in        2014-07-21 23:33:45.383452269 +0000
    6105769123@@ -0,0 +1,16 @@
    6105869124+Tests for errorformat.  vim: set ft=vim ts=8 :
     
    6107469140diff -Naur vim74.orig/src/testdir/test106.ok vim74/src/testdir/test106.ok
    6107569141--- vim74.orig/src/testdir/test106.ok   1970-01-01 00:00:00.000000000 +0000
    61076 +++ vim74/src/testdir/test106.ok        2014-06-01 00:43:18.657468801 +0000
     69142+++ vim74/src/testdir/test106.ok        2014-07-21 23:33:45.396785567 +0000
    6107769143@@ -0,0 +1,4 @@
    6107869144+Results of test106:
     
    6108269148diff -Naur vim74.orig/src/testdir/test107.in vim74/src/testdir/test107.in
    6108369149--- vim74.orig/src/testdir/test107.in   1970-01-01 00:00:00.000000000 +0000
    61084 +++ vim74/src/testdir/test107.in        2014-06-01 00:43:18.657468801 +0000
     69150+++ vim74/src/testdir/test107.in        2014-07-21 23:33:45.410118866 +0000
    6108569151@@ -0,0 +1,38 @@
    6108669152+Tests for adjusting window and contents     vim: set ft=vim :
     
    6112469190diff -Naur vim74.orig/src/testdir/test107.ok vim74/src/testdir/test107.ok
    6112569191--- vim74.orig/src/testdir/test107.ok   1970-01-01 00:00:00.000000000 +0000
    61126 +++ vim74/src/testdir/test107.ok        2014-06-01 00:43:18.660802125 +0000
     69192+++ vim74/src/testdir/test107.ok        2014-07-21 23:33:45.413452191 +0000
    6112769193@@ -0,0 +1,4 @@
    6112869194+start:
     
    6113269198diff -Naur vim74.orig/src/testdir/test14.in vim74/src/testdir/test14.in
    6113369199--- vim74.orig/src/testdir/test14.in    2013-04-03 18:59:14.000000000 +0000
    61134 +++ vim74/src/testdir/test14.in 2014-06-01 00:43:18.754135221 +0000
     69200+++ vim74/src/testdir/test14.in 2014-07-21 23:33:45.573451773 +0000
    6113569201@@ -47,7 +47,19 @@
    6113669202 /two
     
    6116469230diff -Naur vim74.orig/src/testdir/test14.ok vim74/src/testdir/test14.ok
    6116569231--- vim74.orig/src/testdir/test14.ok    2013-04-03 18:59:14.000000000 +0000
    61166 +++ vim74/src/testdir/test14.ok 2014-06-01 00:43:18.767468520 +0000
     69232+++ vim74/src/testdir/test14.ok 2014-07-21 23:33:45.586785072 +0000
    6116769233@@ -20,3 +20,7 @@
    6116869234 1
     
    6117569241diff -Naur vim74.orig/src/testdir/test20.in vim74/src/testdir/test20.in
    6117669242--- vim74.orig/src/testdir/test20.in    2010-05-15 11:04:10.000000000 +0000
    61177 +++ vim74/src/testdir/test20.in 2014-06-01 00:43:18.927468113 +0000
     69243+++ vim74/src/testdir/test20.in 2014-07-21 23:33:45.733451356 +0000
    6117869244@@ -9,11 +9,17 @@
    6117969245 @auY:quit!
     
    6119869264diff -Naur vim74.orig/src/testdir/test20.ok vim74/src/testdir/test20.ok
    6119969265--- vim74.orig/src/testdir/test20.ok    2010-05-15 11:04:10.000000000 +0000
    61200 +++ vim74/src/testdir/test20.ok 2014-06-01 00:43:18.940801412 +0000
     69266+++ vim74/src/testdir/test20.ok 2014-07-21 23:33:45.746784654 +0000
    6120169267@@ -1,3 +1,7 @@
    6120269268+123start here56
     
    6120969275diff -Naur vim74.orig/src/testdir/test29.in vim74/src/testdir/test29.in
    6121069276--- vim74.orig/src/testdir/test29.in    2012-06-13 11:48:26.000000000 +0000
    61211 +++ vim74/src/testdir/test29.in 2014-06-01 00:43:19.107467655 +0000
     69277+++ vim74/src/testdir/test29.in 2014-07-21 23:33:45.913450886 +0000
    6121269278@@ -102,6 +102,34 @@
    6121369279 }
     
    6124769313diff -Naur vim74.orig/src/testdir/test29.ok vim74/src/testdir/test29.ok
    6124869314--- vim74.orig/src/testdir/test29.ok    2012-06-13 11:48:26.000000000 +0000
    61249 +++ vim74/src/testdir/test29.ok 2014-06-01 00:43:19.110800979 +0000
     69315+++ vim74/src/testdir/test29.ok 2014-07-21 23:33:45.926784185 +0000
    6125069316@@ -62,6 +62,15 @@
    6125169317     action();
     
    6126469330 {
    6126569331 /* Make sure the previous comment leader is not removed.  */
     69332diff -Naur vim74.orig/src/testdir/test3.in vim74/src/testdir/test3.in
     69333--- vim74.orig/src/testdir/test3.in     2013-03-07 11:39:35.000000000 +0000
     69334+++ vim74/src/testdir/test3.in  2014-07-21 23:33:45.936784158 +0000
     69335@@ -1432,7 +1432,7 @@
     69336 
     69337 STARTTEST
     69338 :set cino=(0,ts
     69339-2kdd=][
     69340+2kdd2j=][
     69341 ENDTEST
     69342 
     69343 void func(int a
     69344@@ -1446,7 +1446,7 @@
     69345 
     69346 STARTTEST
     69347 :set cino=(0
     69348-2kdd=][
     69349+2kdd2j=][
     69350 ENDTEST
     69351 
     69352 void
     69353@@ -1461,7 +1461,7 @@
     69354 
     69355 STARTTEST
     69356 :set cino&
     69357-2kdd=7][
     69358+2kdd2j=7][
     69359 ENDTEST
     69360 
     69361 void func(void)
     69362@@ -1538,7 +1538,7 @@
     69363 STARTTEST
     69364 :set cino&
     69365 :set cino+=l1
     69366-2kdd=][
     69367+2kdd2j=][
     69368 ENDTEST
     69369 
     69370 void func(void)
     69371@@ -1567,7 +1567,7 @@
     69372 
     69373 STARTTEST
     69374 :set cino&
     69375-2kdd=][
     69376+2kdd2j=][
     69377 ENDTEST
     69378 
     69379 void func(void)
     69380@@ -1592,7 +1592,7 @@
     69381 
     69382 STARTTEST
     69383 :set cino&
     69384-2kdd=][
     69385+2kdd2j=][
     69386 ENDTEST
     69387 
     69388 void func(void)
     69389@@ -1919,10 +1919,10 @@
     69390 
     69391 JSSTART
     69392 var foo = [
     69393-1,  // indent 8 more
     69394+1,
     69395 2,
     69396 3
     69397-];  // indent 8 less
     69398+];
     69399 JSEND
     69400 
     69401 STARTTEST
     69402@@ -1937,7 +1937,7 @@
     69403 1,
     69404 2,
     69405 3
     69406-];  // indent 16 less
     69407+];
     69408 }
     69409 JSEND
     69410 
     69411@@ -1950,6 +1950,12 @@
     69412 JSSTART
     69413 (function($){
     69414 
     69415+if (cond &&
     69416+cond) {
     69417+stmt;
     69418+}
     69419+window.something.left =
     69420+(width - 50 + offset) + "px";
     69421 var class_name='myclass';
     69422 
     69423 function private_method() {
     69424@@ -1965,15 +1971,15 @@
     69425 
     69426 $(this).data(class_name+'_public',$.extend({},{
     69427 foo: 'bar',
     69428-bar: 2,  // indent 8 more
     69429-foobar: [  // indent 8 more
     69430-1,  // indent 8 more
     69431-2,  // indent 16 more
     69432-3   // indent 16 more
     69433+bar: 2,
     69434+foobar: [
     69435+1,
     69436+2,
     69437+3
     69438 ],
     69439-callback: function(){  // indent 8 more
     69440-return true;  // indent 8 more
     69441-}  // indent 8 more
     69442+callback: function(){
     69443+return true;
     69444+}
     69445 }, options||{}));
     69446 }
     69447 
     69448@@ -2014,9 +2020,9 @@
     69449 foo: 'bar',
     69450 bar: 2,
     69451 foobar: [
     69452-1,  // indent 8 more
     69453-2,  // indent 8 more
     69454-3   // indent 8 more
     69455+1,
     69456+2,
     69457+3
     69458 ],
     69459 callback: function(){
     69460 return true;
     69461@@ -2036,15 +2042,15 @@
     69462 function init(options) {
     69463 $(this).data(class_name+'_public',$.extend({},{
     69464 foo: 'bar',
     69465-bar: 2,  // indent 8 more
     69466-foobar: [  // indent 8 more
     69467-1,  // indent 8 more
     69468-2,  // indent 16 more
     69469-3  // indent 16 more
     69470+bar: 2,
     69471+foobar: [
     69472+1,
     69473+2,
     69474+3
     69475 ],
     69476-callback: function(){  // indent 8 more
     69477-return true;  // indent 8 more
     69478-}  // indent 8 more
     69479+callback: function(){
     69480+return true;
     69481+}
     69482 }, options||{}));
     69483 }
     69484 })(jQuery);
     69485diff -Naur vim74.orig/src/testdir/test3.ok vim74/src/testdir/test3.ok
     69486--- vim74.orig/src/testdir/test3.ok     2013-03-07 11:40:03.000000000 +0000
     69487+++ vim74/src/testdir/test3.ok  2014-07-21 23:33:45.940117483 +0000
     69488@@ -1707,10 +1707,10 @@
     69489 
     69490 JSSTART
     69491 var foo = [
     69492-1,  // indent 8 more
     69493+       1,
     69494        2,
     69495        3
     69496-       ];  // indent 8 less
     69497+];
     69498 JSEND
     69499 
     69500 
     69501@@ -1720,7 +1720,7 @@
     69502                1,
     69503                2,
     69504                3
     69505-                       ];  // indent 16 less
     69506+       ];
     69507 }
     69508 JSEND
     69509 
     69510@@ -1728,6 +1728,12 @@
     69511 JSSTART
     69512 (function($){
     69513 
     69514+       if (cond &&
     69515+                       cond) {
     69516+               stmt;
     69517+       }
     69518+       window.something.left =
     69519+               (width - 50 + offset) + "px";
     69520        var class_name='myclass';
     69521 
     69522        function private_method() {
     69523@@ -1743,15 +1749,15 @@
     69524 
     69525                $(this).data(class_name+'_public',$.extend({},{
     69526                        foo: 'bar',
     69527-               bar: 2,  // indent 8 more
     69528-               foobar: [  // indent 8 more
     69529-                       1,  // indent 8 more
     69530-               2,  // indent 16 more
     69531-               3   // indent 16 more
     69532+                       bar: 2,
     69533+                       foobar: [
     69534+                               1,
     69535+                               2,
     69536+                               3
     69537                        ],
     69538-               callback: function(){  // indent 8 more
     69539-                       return true;  // indent 8 more
     69540-               }  // indent 8 more
     69541+                       callback: function(){
     69542+                               return true;
     69543+                       }
     69544                }, options||{}));
     69545        }
     69546 
     69547@@ -1787,9 +1793,9 @@
     69548                foo: 'bar',
     69549                bar: 2,
     69550                foobar: [
     69551-               1,  // indent 8 more
     69552-               2,  // indent 8 more
     69553-               3   // indent 8 more
     69554+                       1,
     69555+                       2,
     69556+                       3
     69557                ],
     69558                callback: function(){
     69559                        return true;
     69560@@ -1804,15 +1810,15 @@
     69561        function init(options) {
     69562                $(this).data(class_name+'_public',$.extend({},{
     69563                        foo: 'bar',
     69564-               bar: 2,  // indent 8 more
     69565-               foobar: [  // indent 8 more
     69566-                       1,  // indent 8 more
     69567-               2,  // indent 16 more
     69568-               3  // indent 16 more
     69569+                       bar: 2,
     69570+                       foobar: [
     69571+                               1,
     69572+                               2,
     69573+                               3
     69574                        ],
     69575-               callback: function(){  // indent 8 more
     69576-                       return true;  // indent 8 more
     69577-               }  // indent 8 more
     69578+                       callback: function(){
     69579+                               return true;
     69580+                       }
     69581                }, options||{}));
     69582        }
     69583 })(jQuery);
    6126669584diff -Naur vim74.orig/src/testdir/test32.in vim74/src/testdir/test32.in
    6126769585--- vim74.orig/src/testdir/test32.in    2010-05-15 11:04:10.000000000 +0000
    61268 +++ vim74/src/testdir/test32.in 2014-06-01 00:43:19.207467400 +0000
     69586+++ vim74/src/testdir/test32.in 2014-07-21 23:33:46.013450625 +0000
    6126969587@@ -36,6 +36,9 @@
    6127069588 :w Xtest11.one
     
    6127969597diff -Naur vim74.orig/src/testdir/test34.in vim74/src/testdir/test34.in
    6128069598--- vim74.orig/src/testdir/test34.in    2012-07-16 14:51:29.000000000 +0000
    61281 +++ vim74/src/testdir/test34.in 2014-06-01 00:43:19.244133973 +0000
     69599+++ vim74/src/testdir/test34.in 2014-07-21 23:33:46.073450469 +0000
    6128269600@@ -1,6 +1,7 @@
    6128369601 Test for user functions.
     
    6130969627diff -Naur vim74.orig/src/testdir/test34.ok vim74/src/testdir/test34.ok
    6131069628--- vim74.orig/src/testdir/test34.ok    2012-07-16 14:43:15.000000000 +0000
    61311 +++ vim74/src/testdir/test34.ok 2014-06-01 00:43:19.250800623 +0000
     69629+++ vim74/src/testdir/test34.ok 2014-07-21 23:33:46.080117118 +0000
    6131269630@@ -6,3 +6,5 @@
    6131369631 1. one again
     
    6131869636diff -Naur vim74.orig/src/testdir/test37.ok vim74/src/testdir/test37.ok
    6131969637--- vim74.orig/src/testdir/test37.ok    2010-05-15 11:04:10.000000000 +0000
    61320 +++ vim74/src/testdir/test37.ok 2014-06-01 00:43:19.300800496 +0000
     69638+++ vim74/src/testdir/test37.ok 2014-07-21 23:33:46.143450286 +0000
    6132169639@@ -27,7 +27,7 @@
    6132269640 
     
    6133269650diff -Naur vim74.orig/src/testdir/test39.in vim74/src/testdir/test39.in
    6133369651--- vim74.orig/src/testdir/test39.in    2013-03-07 17:30:38.000000000 +0000
    61334 +++ vim74/src/testdir/test39.in 2014-06-01 00:43:19.330800419 +0000
     69652+++ vim74/src/testdir/test39.in 2014-07-21 23:33:46.173450208 +0000
    6133569653@@ -19,6 +19,28 @@
    6133669654 :" Test block-change
     
    6140469722diff -Naur vim74.orig/src/testdir/test39.ok vim74/src/testdir/test39.ok
    6140569723--- vim74.orig/src/testdir/test39.ok    2013-03-07 17:28:51.000000000 +0000
    61406 +++ vim74/src/testdir/test39.ok 2014-06-01 00:43:19.334133744 +0000
     69724+++ vim74/src/testdir/test39.ok 2014-07-21 23:33:46.173450208 +0000
    6140769725@@ -3,6 +3,24 @@
    6140869726 axyzqqqqef mno        ghijklm
     
    6145869776diff -Naur vim74.orig/src/testdir/test44.in vim74/src/testdir/test44.in
    6145969777--- vim74.orig/src/testdir/test44.in    2013-05-26 12:16:31.000000000 +0000
    61460 +++ vim74/src/testdir/test44.in 2014-06-01 00:43:19.467466738 +0000
     69778+++ vim74/src/testdir/test44.in 2014-07-21 23:33:46.286783245 +0000
    6146169779@@ -1,9 +1,11 @@
    6146269780 Tests for regexp with multi-byte encoding and various magic settings.
     
    6147369791diff -Naur vim74.orig/src/testdir/test49.in vim74/src/testdir/test49.in
    6147469792--- vim74.orig/src/testdir/test49.in    2012-11-15 21:29:55.000000000 +0000
    61475 +++ vim74/src/testdir/test49.in 2014-06-01 00:43:19.560799833 +0000
     69793+++ vim74/src/testdir/test49.in 2014-07-21 23:33:46.400116283 +0000
    6147669794@@ -1,7 +1,7 @@
    6147769795 This is a test of the script language.
     
    6148569803diff -Naur vim74.orig/src/testdir/test53.in vim74/src/testdir/test53.in
    6148669804--- vim74.orig/src/testdir/test53.in    2013-06-30 12:31:56.000000000 +0000
    61487 +++ vim74/src/testdir/test53.in 2014-06-01 00:43:19.714132776 +0000
     69805+++ vim74/src/testdir/test53.in 2014-07-21 23:33:46.543449242 +0000
    6148869806@@ -4,6 +4,8 @@
    6148969807 
     
    6155969877diff -Naur vim74.orig/src/testdir/test53.ok vim74/src/testdir/test53.ok
    6156069878--- vim74.orig/src/testdir/test53.ok    2013-06-30 12:31:56.000000000 +0000
    61561 +++ vim74/src/testdir/test53.ok 2014-06-01 00:43:19.720799426 +0000
     69879+++ vim74/src/testdir/test53.ok 2014-07-21 23:33:46.550115892 +0000
    6156269880@@ -18,6 +18,28 @@
    6156369881 a
     
    6160869926diff -Naur vim74.orig/src/testdir/test55.in vim74/src/testdir/test55.in
    6160969927--- vim74.orig/src/testdir/test55.in    2013-03-07 13:33:12.000000000 +0000
    61610 +++ vim74/src/testdir/test55.in 2014-06-01 00:43:19.757465999 +0000
     69928+++ vim74/src/testdir/test55.in 2014-07-21 23:33:46.586782463 +0000
    6161169929@@ -282,6 +282,13 @@
    6161269930 :    $put =ps
     
    6162369941 :" a:000 function argument
    6162469942 :" first the tests that should fail
    61625 @@ -316,13 +323,15 @@
     69943@@ -316,13 +323,21 @@
    6162669944 :  $put ='caught ' . v:exception
    6162769945 :endtry
     
    6163869956 :$put =string(sort(reverse(sort(l))))
    6163969957+:$put =string(uniq(sort(l)))
     69958+:let l=[7, 9, 'one', 18, 12, 22, 'two', 10.0e-16, -1, 'three', 0xff, 0.22, 'four']
     69959+:$put =string(sort(copy(l), 'n'))
     69960+:let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', {}, []]
     69961+:$put =string(sort(copy(l), 1))
     69962+:$put =string(sort(copy(l), 'i'))
     69963+:$put =string(sort(copy(l)))
    6164069964 :"
    6164169965 :" splitting a string to a List
     
    6164369967diff -Naur vim74.orig/src/testdir/test55.ok vim74/src/testdir/test55.ok
    6164469968--- vim74.orig/src/testdir/test55.ok    2012-08-29 14:51:15.000000000 +0000
    61645 +++ vim74/src/testdir/test55.ok 2014-06-01 00:43:19.767465974 +0000
    61646 @@ -86,16 +86,21 @@
     69969+++ vim74/src/testdir/test55.ok 2014-07-21 23:33:46.596782436 +0000
     69970@@ -86,16 +86,25 @@
    6164769971 FFpFFpp
    6164869972 0000-000
     
    6166869992+['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
    6166969993+['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
     69994+[-1, 'one', 'two', 'three', 'four', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
     69995+['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
     69996+['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
     69997+['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
    6167069998 ['aa', 'bb']
    6167169999 ['aa', 'bb']
     
    6167370001diff -Naur vim74.orig/src/testdir/test60.in vim74/src/testdir/test60.in
    6167470002--- vim74.orig/src/testdir/test60.in    2010-05-15 11:04:10.000000000 +0000
    61675 +++ vim74/src/testdir/test60.in 2014-06-01 00:43:19.904132292 +0000
     70003+++ vim74/src/testdir/test60.in 2014-07-21 23:33:46.753448694 +0000
    6167670004@@ -1,4 +1,4 @@
    6167770005-Tests for the exists() function.  vim: set ft=vim :
     
    6175770085diff -Naur vim74.orig/src/testdir/test60.ok vim74/src/testdir/test60.ok
    6175870086--- vim74.orig/src/testdir/test60.ok    2010-05-15 11:04:10.000000000 +0000
    61759 +++ vim74/src/testdir/test60.ok 2014-06-01 00:43:19.930798891 +0000
     70087+++ vim74/src/testdir/test60.ok 2014-07-21 23:33:46.770115318 +0000
    6176070088@@ -71,6 +71,10 @@
    6176170089 OK
     
    6179270120diff -Naur vim74.orig/src/testdir/test62.in vim74/src/testdir/test62.in
    6179370121--- vim74.orig/src/testdir/test62.in    2013-07-14 11:37:12.000000000 +0000
    61794 +++ vim74/src/testdir/test62.in 2014-06-01 00:43:19.970798789 +0000
     70122+++ vim74/src/testdir/test62.in 2014-07-21 23:33:46.800115239 +0000
    6179570123@@ -2,6 +2,7 @@
    6179670124 
     
    6180170129 :tabnew
    6180270130 :let nr = tabpagenr()
     70131diff -Naur vim74.orig/src/testdir/test63.in vim74/src/testdir/test63.in
     70132--- vim74.orig/src/testdir/test63.in    2010-05-15 11:04:10.000000000 +0000
     70133+++ vim74/src/testdir/test63.in 2014-07-21 23:33:46.833448486 +0000
     70134@@ -1,5 +1,5 @@
     70135 Test for ":match", ":2match", ":3match", "clearmatches()", "getmatches()",
     70136-"matchadd()", "matcharg()", "matchdelete()", and "setmatches()".
     70137+"matchadd()", "matchaddpos", "matcharg()", "matchdelete()", and "setmatches()".
     70138 
     70139 STARTTEST
     70140 :so small.vim
     70141@@ -147,9 +147,26 @@
     70142 :unlet rf1
     70143 :unlet rf2
     70144 :unlet rf3
     70145-:highlight clear MyGroup1
     70146-:highlight clear MyGroup2
     70147-:highlight clear MyGroup3
     70148+:" --- Check that "matchaddpos()" positions matches correctly
     70149+:let @r .= "*** Test 11:\n"
     70150+:set nolazyredraw
     70151+:call setline(1, 'abcdefghijklmnopq')
     70152+:call matchaddpos("MyGroup1", [[1, 5], [1, 8, 3]], 10, 3)
     70153+:1
     70154+:redraw!
     70155+:let v1 = screenattr(1, 1)
     70156+:let v5 = screenattr(1, 5)
     70157+:let v6 = screenattr(1, 6)
     70158+:let v8 = screenattr(1, 8)
     70159+:let v10 = screenattr(1, 10)
     70160+:let v11 = screenattr(1, 11)
     70161+:let @r .= string(getmatches())."\n"
     70162+:if v1 != v5 && v6 == v1 && v8 == v5 && v10 == v5 && v11 == v1
     70163+:  let @r .= "OK\n"
     70164+:else
     70165+:  let @r .= "FAILED\n"
     70166+:endif
     70167+:call clearmatches()
     70168 G"rp
     70169 :/^Results/,$wq! test.out
     70170 ENDTEST
     70171diff -Naur vim74.orig/src/testdir/test63.ok vim74/src/testdir/test63.ok
     70172--- vim74.orig/src/testdir/test63.ok    2010-05-15 11:04:10.000000000 +0000
     70173+++ vim74/src/testdir/test63.ok 2014-07-21 23:33:46.850115109 +0000
     70174@@ -9,3 +9,6 @@
     70175 *** Test 8: OK
     70176 *** Test 9: OK
     70177 *** Test 10: OK
     70178+*** Test 11:
     70179+[{'group': 'MyGroup1', 'id': 3, 'priority': 10, 'pos1': [1, 5, 1], 'pos2': [1, 8, 3]}]
     70180+OK
    6180370181diff -Naur vim74.orig/src/testdir/test64.in vim74/src/testdir/test64.in
    6180470182--- vim74.orig/src/testdir/test64.in    2013-08-01 15:45:33.000000000 +0000
    61805 +++ vim74/src/testdir/test64.in 2014-06-01 00:43:20.014132012 +0000
     70183+++ vim74/src/testdir/test64.in 2014-07-21 23:33:46.900114978 +0000
    6180670184@@ -238,7 +238,11 @@
    6180770185 :call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
     
    6193770315diff -Naur vim74.orig/src/testdir/test64.ok vim74/src/testdir/test64.ok
    6193870316--- vim74.orig/src/testdir/test64.ok    2013-08-01 16:28:56.000000000 +0000
    61939 +++ vim74/src/testdir/test64.ok 2014-06-01 00:43:20.020798662 +0000
     70317+++ vim74/src/testdir/test64.ok 2014-07-21 23:33:46.923448251 +0000
    6194070318@@ -533,6 +533,18 @@
    6194170319 OK 0 - \v(a{-1,3})+
     
    6211870496diff -Naur vim74.orig/src/testdir/test68.in vim74/src/testdir/test68.in
    6211970497--- vim74.orig/src/testdir/test68.in    2012-07-25 13:57:06.000000000 +0000
    62120 +++ vim74/src/testdir/test68.in 2014-06-01 00:43:20.107465108 +0000
     70498+++ vim74/src/testdir/test68.in 2014-07-21 23:33:47.003448042 +0000
    6212170499@@ -62,6 +62,20 @@
    6212270500 }
     
    6214270520diff -Naur vim74.orig/src/testdir/test68.ok vim74/src/testdir/test68.ok
    6214370521--- vim74.orig/src/testdir/test68.ok    2012-07-25 14:03:05.000000000 +0000
    62144 +++ vim74/src/testdir/test68.ok 2014-06-01 00:43:20.117465083 +0000
     70522+++ vim74/src/testdir/test68.ok 2014-07-21 23:33:47.013448016 +0000
    6214570523@@ -43,6 +43,15 @@
    6214670524 
     
    6216170539diff -Naur vim74.orig/src/testdir/test69.in vim74/src/testdir/test69.in
    6216270540--- vim74.orig/src/testdir/test69.in    2013-03-07 17:30:50.000000000 +0000
    62163 +++ vim74/src/testdir/test69.in 2014-06-01 00:43:20.130798382 +0000
     70541+++ vim74/src/testdir/test69.in 2014-07-21 23:33:47.016781341 +0000
    6216470542@@ -1,6 +1,7 @@
    6216570543 Test for multi-byte text formatting.
     
    6217070548 STARTTEST
    6217170549 :so mbyte.vim
    62172 @@ -154,6 +155,31 @@
     70550@@ -154,6 +155,38 @@
    6217370551 ïœïœb
    6217470552 
     
    6219970577+
    6220070578+STARTTEST
     70579+/^substitute
     70580+:let y = substitute('', '\zs', 'a', 'g')    | put =y
     70581+ENDTEST
     70582+
     70583+substitute
     70584+
     70585+STARTTEST
    6220170586 :g/^STARTTEST/.,/^ENDTEST/d
    6220270587 :1;/^Results/,$wq! test.out
     
    6220470589diff -Naur vim74.orig/src/testdir/test69.ok vim74/src/testdir/test69.ok
    6220570590--- vim74.orig/src/testdir/test69.ok    2013-03-07 17:31:32.000000000 +0000
    62206 +++ vim74/src/testdir/test69.ok 2014-06-01 00:43:20.137465032 +0000
    62207 @@ -149,3 +149,14 @@
     70591+++ vim74/src/testdir/test69.ok 2014-07-21 23:33:47.033447964 +0000
     70592@@ -149,3 +149,18 @@
    6220870593 aaaa
    6220970594 aaa
     
    6222070605+[0, 1, 2, 4, 5, -1]
    6222170606+
     70607+
     70608+substitute
     70609+aaaa
     70610+
    6222270611diff -Naur vim74.orig/src/testdir/test72.in vim74/src/testdir/test72.in
    6222370612--- vim74.orig/src/testdir/test72.in    2012-01-04 18:04:17.000000000 +0000
    62224 +++ vim74/src/testdir/test72.in 2014-06-01 00:43:20.217464828 +0000
     70613+++ vim74/src/testdir/test72.in 2014-07-21 23:33:47.126781054 +0000
    6222570614@@ -105,7 +105,11 @@
    6222670615 u:.w >>test.out
     
    6223870627diff -Naur vim74.orig/src/testdir/test75.in vim74/src/testdir/test75.in
    6223970628--- vim74.orig/src/testdir/test75.in    2013-06-29 11:48:42.000000000 +0000
    62240 +++ vim74/src/testdir/test75.in 2014-06-01 00:43:20.277464675 +0000
     70629+++ vim74/src/testdir/test75.in 2014-07-21 23:33:47.193447546 +0000
    6224170630@@ -1,8 +1,11 @@
    6224270631-" Tests for functions.
     
    6227570664diff -Naur vim74.orig/src/testdir/test75.ok vim74/src/testdir/test75.ok
    6227670665--- vim74.orig/src/testdir/test75.ok    2013-06-29 11:50:08.000000000 +0000
    62277 +++ vim74/src/testdir/test75.ok 2014-06-01 00:43:20.294131299 +0000
     70666+++ vim74/src/testdir/test75.ok 2014-07-21 23:33:47.200114196 +0000
    6227870667@@ -4,3 +4,4 @@
    6227970668 {'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
     
    6228370672diff -Naur vim74.orig/src/testdir/test77a.com vim74/src/testdir/test77a.com
    6228470673--- vim74.orig/src/testdir/test77a.com  1970-01-01 00:00:00.000000000 +0000
    62285 +++ vim74/src/testdir/test77a.com       2014-06-01 00:43:20.344131172 +0000
     70674+++ vim74/src/testdir/test77a.com       2014-07-21 23:33:47.273447338 +0000
    6228670675@@ -0,0 +1,8 @@
    6228770676+$! test77a - help file creating checksum on VMS
     
    6229570684diff -Naur vim74.orig/src/testdir/test77a.in vim74/src/testdir/test77a.in
    6229670685--- vim74.orig/src/testdir/test77a.in   1970-01-01 00:00:00.000000000 +0000
    62297 +++ vim74/src/testdir/test77a.in        2014-06-01 00:43:20.347464497 +0000
     70686+++ vim74/src/testdir/test77a.in        2014-07-21 23:33:47.276780662 +0000
    6229870687@@ -0,0 +1,31 @@
    6229970688+Inserts 2 million lines with consecutive integers starting from 1
     
    6233070719diff -Naur vim74.orig/src/testdir/test77a.ok vim74/src/testdir/test77a.ok
    6233170720--- vim74.orig/src/testdir/test77a.ok   1970-01-01 00:00:00.000000000 +0000
    62332 +++ vim74/src/testdir/test77a.ok        2014-06-01 00:43:20.347464497 +0000
     70721+++ vim74/src/testdir/test77a.ok        2014-07-21 23:33:47.276780662 +0000
    6233370722@@ -0,0 +1 @@
    6233470723+  CHECKSUM$CHECKSUM = "844110470"
    6233570724diff -Naur vim74.orig/src/testdir/test79.in vim74/src/testdir/test79.in
    6233670725--- vim74.orig/src/testdir/test79.in    2013-04-13 09:16:38.000000000 +0000
    62337 +++ vim74/src/testdir/test79.in 2014-06-01 00:43:20.380797745 +0000
     70726+++ vim74/src/testdir/test79.in 2014-07-21 23:33:47.310113909 +0000
    6233870727@@ -1,6 +1,7 @@
    6233970728 Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
     
    6240470793diff -Naur vim74.orig/src/testdir/test79.ok vim74/src/testdir/test79.ok
    6240570794--- vim74.orig/src/testdir/test79.ok    2013-03-19 16:30:51.000000000 +0000
    62406 +++ vim74/src/testdir/test79.ok 2014-06-01 00:43:20.387464395 +0000
     70795+++ vim74/src/testdir/test79.ok 2014-07-21 23:33:47.316780558 +0000
    6240770796@@ -105,6 +105,7 @@
    6240870797 
     
    6243170820diff -Naur vim74.orig/src/testdir/test80.in vim74/src/testdir/test80.in
    6243270821--- vim74.orig/src/testdir/test80.in    2013-03-19 16:30:51.000000000 +0000
    62433 +++ vim74/src/testdir/test80.in 2014-06-01 00:43:20.430797618 +0000
     70822+++ vim74/src/testdir/test80.in 2014-07-21 23:33:47.360113778 +0000
    6243470823@@ -117,6 +117,7 @@
    6243570824 :set cpo&
     
    6247770866diff -Naur vim74.orig/src/testdir/test80.ok vim74/src/testdir/test80.ok
    6247870867--- vim74.orig/src/testdir/test80.ok    2013-03-19 16:31:45.000000000 +0000
    62479 +++ vim74/src/testdir/test80.ok 2014-06-01 00:43:20.450797567 +0000
     70868+++ vim74/src/testdir/test80.ok 2014-07-21 23:33:47.380113726 +0000
    6248070869@@ -90,6 +90,7 @@
    6248170870 
     
    6251570904diff -Naur vim74.orig/src/testdir/test86.in vim74/src/testdir/test86.in
    6251670905--- vim74.orig/src/testdir/test86.in    2013-07-13 12:00:31.000000000 +0000
    62517 +++ vim74/src/testdir/test86.in 2014-06-01 00:43:20.647463733 +0000
     70906+++ vim74/src/testdir/test86.in 2014-07-21 23:33:47.566779906 +0000
    6251870907@@ -39,6 +39,7 @@
    6251970908 py << EOF
     
    6285271241diff -Naur vim74.orig/src/testdir/test86.ok vim74/src/testdir/test86.ok
    6285371242--- vim74.orig/src/testdir/test86.ok    2013-06-23 14:38:39.000000000 +0000
    62854 +++ vim74/src/testdir/test86.ok 2014-06-01 00:43:20.687463631 +0000
     71243+++ vim74/src/testdir/test86.ok 2014-07-21 23:33:47.606779801 +0000
    6285571244@@ -41,6 +41,9 @@
    6285671245 [2, 3]
     
    6308071469diff -Naur vim74.orig/src/testdir/test87.in vim74/src/testdir/test87.in
    6308171470--- vim74.orig/src/testdir/test87.in    2013-07-06 11:41:30.000000000 +0000
    63082 +++ vim74/src/testdir/test87.in 2014-06-01 00:43:20.717463555 +0000
     71471+++ vim74/src/testdir/test87.in 2014-07-21 23:33:47.646779697 +0000
    6308371472@@ -33,6 +33,7 @@
    6308471473 py3 << EOF
     
    6344271831diff -Naur vim74.orig/src/testdir/test87.ok vim74/src/testdir/test87.ok
    6344371832--- vim74.orig/src/testdir/test87.ok    2013-06-23 14:38:39.000000000 +0000
    63444 +++ vim74/src/testdir/test87.ok 2014-06-01 00:43:20.747463478 +0000
     71833+++ vim74/src/testdir/test87.ok 2014-07-21 23:33:47.690112917 +0000
    6344571834@@ -41,6 +41,9 @@
    6344671835 [2, 3]
     
    6368172070diff -Naur vim74.orig/src/testdir/test92.in vim74/src/testdir/test92.in
    6368272071--- vim74.orig/src/testdir/test92.in    2013-04-18 21:33:45.000000000 +0000
    63683 +++ vim74/src/testdir/test92.in 2014-06-01 00:43:20.880796472 +0000
     72072+++ vim74/src/testdir/test92.in 2014-07-21 23:33:47.820112578 +0000
    6368472073@@ -33,7 +33,7 @@
    6368572074 :mksession! test.out
     
    6369372082diff -Naur vim74.orig/src/testdir/test93.in vim74/src/testdir/test93.in
    6369472083--- vim74.orig/src/testdir/test93.in    2013-02-26 16:13:01.000000000 +0000
    63695 +++ vim74/src/testdir/test93.in 2014-06-01 00:43:20.904129746 +0000
     72084+++ vim74/src/testdir/test93.in 2014-07-21 23:33:47.846779175 +0000
    6369672085@@ -33,7 +33,7 @@
    6369772086 :mksession! test.out
     
    6370572094diff -Naur vim74.orig/src/testdir/test95.in vim74/src/testdir/test95.in
    6370672095--- vim74.orig/src/testdir/test95.in    2013-07-21 14:53:52.000000000 +0000
    63707 +++ vim74/src/testdir/test95.in 2014-06-01 00:43:20.937462994 +0000
     72096+++ vim74/src/testdir/test95.in 2014-07-21 23:33:47.903445694 +0000
    6370872097@@ -50,6 +50,12 @@
    6370972098 :call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
     
    6375072139diff -Naur vim74.orig/src/testdir/test95.ok vim74/src/testdir/test95.ok
    6375172140--- vim74.orig/src/testdir/test95.ok    2013-07-21 15:01:22.000000000 +0000
    63752 +++ vim74/src/testdir/test95.ok 2014-06-01 00:43:20.940796319 +0000
     72141+++ vim74/src/testdir/test95.ok 2014-07-21 23:33:47.920112317 +0000
    6375372142@@ -67,6 +67,24 @@
    6375472143 OK 0 - .Ö¹Ö»
     
    6377872167diff -Naur vim74.orig/src/testdir/test97.in vim74/src/testdir/test97.in
    6377972168--- vim74.orig/src/testdir/test97.in    2013-08-02 12:55:50.000000000 +0000
    63780 +++ vim74/src/testdir/test97.in 2014-06-01 00:43:20.960796268 +0000
     72169+++ vim74/src/testdir/test97.in 2014-07-21 23:33:47.956778888 +0000
    6378172170@@ -3,14 +3,20 @@
    6378272171 
     
    6380672195diff -Naur vim74.orig/src/testdir/test97.ok vim74/src/testdir/test97.ok
    6380772196--- vim74.orig/src/testdir/test97.ok    2013-07-03 14:14:50.000000000 +0000
    63808 +++ vim74/src/testdir/test97.ok 2014-06-01 00:43:20.964129593 +0000
     72197+++ vim74/src/testdir/test97.ok 2014-07-21 23:33:47.960112213 +0000
    6380972198@@ -3,3 +3,6 @@
    6381072199 
     
    6381672205diff -Naur vim74.orig/src/testdir/test99.in vim74/src/testdir/test99.in
    6381772206--- vim74.orig/src/testdir/test99.in    1970-01-01 00:00:00.000000000 +0000
    63818 +++ vim74/src/testdir/test99.in 2014-06-01 00:43:21.017462791 +0000
     72207+++ vim74/src/testdir/test99.in 2014-07-21 23:33:47.990112134 +0000
    6381972208@@ -0,0 +1,68 @@
    6382072209+Tests for regexp with multi-byte encoding and various magic settings.
     
    6389472283diff -Naur vim74.orig/src/testdir/test99.ok vim74/src/testdir/test99.ok
    6389572284--- vim74.orig/src/testdir/test99.ok    1970-01-01 00:00:00.000000000 +0000
    63896 +++ vim74/src/testdir/test99.ok 2014-06-01 00:43:21.020796116 +0000
     72285+++ vim74/src/testdir/test99.ok 2014-07-21 23:33:47.993445459 +0000
    6389772286@@ -0,0 +1,24 @@
    6389872287+1 a aa abb abbcc
     
    6392772316diff -Naur vim74.orig/src/testdir/test_autoformat_join.in vim74/src/testdir/test_autoformat_join.in
    6392872317--- vim74.orig/src/testdir/test_autoformat_join.in      1970-01-01 00:00:00.000000000 +0000
    63929 +++ vim74/src/testdir/test_autoformat_join.in   2014-06-01 00:43:21.024129440 +0000
     72318+++ vim74/src/testdir/test_autoformat_join.in   2014-07-21 23:33:47.996778784 +0000
    6393072319@@ -0,0 +1,23 @@
    6393172320+Tests for setting the '[,'] marks when joining lines.
     
    6395472343diff -Naur vim74.orig/src/testdir/test_autoformat_join.ok vim74/src/testdir/test_autoformat_join.ok
    6395572344--- vim74.orig/src/testdir/test_autoformat_join.ok      1970-01-01 00:00:00.000000000 +0000
    63956 +++ vim74/src/testdir/test_autoformat_join.ok   2014-06-01 00:43:21.024129440 +0000
     72345+++ vim74/src/testdir/test_autoformat_join.ok   2014-07-21 23:33:48.000112108 +0000
    6395772346@@ -0,0 +1,8 @@
    6395872347+               O sodales, ludite, vos qui attamen consulite per voster honur.
     
    6396472353+First test: Start/End '[0, 16, 1, 0]/[0, 17, 1, 0]'
    6396572354+Second test: Start/End '[0, 19, 11, 0]/[0, 19, 67, 0]'
     72355diff -Naur vim74.orig/src/testdir/test_breakindent.in vim74/src/testdir/test_breakindent.in
     72356--- vim74.orig/src/testdir/test_breakindent.in  1970-01-01 00:00:00.000000000 +0000
     72357+++ vim74/src/testdir/test_breakindent.in       2014-07-21 23:33:48.010112082 +0000
     72358@@ -0,0 +1,79 @@
     72359+Test for breakindent
     72360+
     72361+STARTTEST
     72362+:so small.vim
     72363+:if !exists("+breakindent") | e! test.ok | w! test.out | qa! | endif
     72364+:10new|:vsp|:vert resize 20
     72365+:put =\"\tabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP\"
     72366+:set ts=4 sw=4 sts=4 breakindent
     72367+:fu! ScreenChar(width)
     72368+:      let c=''
     72369+:      for i in range(1,a:width)
     72370+:              let c.=nr2char(screenchar(line('.'), i))
     72371+:      endfor
     72372+:       let c.="\n"
     72373+:      for i in range(1,a:width)
     72374+:              let c.=nr2char(screenchar(line('.')+1, i))
     72375+:      endfor
     72376+:       let c.="\n"
     72377+:      for i in range(1,a:width)
     72378+:              let c.=nr2char(screenchar(line('.')+2, i))
     72379+:      endfor
     72380+:      return c
     72381+:endfu
     72382+:fu DoRecordScreen()
     72383+:      wincmd l
     72384+:      $put =printf(\"\n%s\", g:test)
     72385+:      $put =g:line1
     72386+:      wincmd p
     72387+:endfu
     72388+:let g:test="Test 1: Simple breakindent"
     72389+:let line1=ScreenChar(8)
     72390+:call DoRecordScreen()
     72391+:let g:test="Test 2: Simple breakindent + sbr=>>"
     72392+:set sbr=>>
     72393+:let line1=ScreenChar(8)
     72394+:call DoRecordScreen()
     72395+:let g:test ="Test 3: Simple breakindent + briopt:sbr"
     72396+:set briopt=sbr,min:0 sbr=++
     72397+:let line1=ScreenChar(8)
     72398+:call DoRecordScreen()
     72399+:let g:test ="Test 4: Simple breakindent + min width: 18"
     72400+:set sbr= briopt=min:18
     72401+:let line1=ScreenChar(8)
     72402+:call DoRecordScreen()
     72403+:let g:test =" Test 5: Simple breakindent + shift by 2"
     72404+:set briopt=shift:2,min:0
     72405+:let line1=ScreenChar(8)
     72406+:call DoRecordScreen()
     72407+:let g:test=" Test 6: Simple breakindent + shift by -1"
     72408+:set briopt=shift:-1,min:0
     72409+:let line1=ScreenChar(8)
     72410+:call DoRecordScreen()
     72411+:let g:test=" Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr"
     72412+:set briopt=shift:1,sbr,min:0 nu sbr=? nuw=4
     72413+:let line1=ScreenChar(10)
     72414+:call DoRecordScreen()
     72415+:let g:test=" Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr"
     72416+:set briopt=shift:1,sbr,min:0 nu sbr=# list
     72417+:let line1=ScreenChar(10)
     72418+:call DoRecordScreen()
     72419+:let g:test=" Test 9: breakindent + shift by +1 + 'nu' + sbr=# list"
     72420+:set briopt-=sbr
     72421+:let line1=ScreenChar(10)
     72422+:call DoRecordScreen()
     72423+:let g:test=" Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n"
     72424+:set cpo+=n sbr=~ nu nuw=4 nolist briopt=sbr,min:0
     72425+:let line1=ScreenChar(10)
     72426+:call DoRecordScreen()
     72427+:wincmd p
     72428+:let g:test="\n Test 11: strdisplaywidth when breakindent is on"
     72429+:set cpo-=n sbr=>> nu nuw=4 nolist briopt= ts=4
     72430+:let text=getline(2) "skip leading tab when calculating text width
     72431+:let width = strlen(text[1:])+indent(2)*4+strlen(&sbr)*3 " text wraps 3 times
     72432+:$put =g:test
     72433+:$put =printf(\"strdisplaywidth: %d == calculated: %d\", strdisplaywidth(text), width)
     72434+:%w! test.out
     72435+:qa!
     72436+ENDTEST
     72437+dummy text
     72438diff -Naur vim74.orig/src/testdir/test_breakindent.ok vim74/src/testdir/test_breakindent.ok
     72439--- vim74.orig/src/testdir/test_breakindent.ok  1970-01-01 00:00:00.000000000 +0000
     72440+++ vim74/src/testdir/test_breakindent.ok       2014-07-21 23:33:48.020112056 +0000
     72441@@ -0,0 +1,55 @@
     72442+
     72443+       abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
     72444+
     72445+Test 1: Simple breakindent
     72446+    abcd
     72447+    qrst
     72448+    GHIJ
     72449+
     72450+Test 2: Simple breakindent + sbr=>>
     72451+    abcd
     72452+    >>qr
     72453+    >>EF
     72454+
     72455+Test 3: Simple breakindent + briopt:sbr
     72456+    abcd
     72457+++  qrst
     72458+++  GHIJ
     72459+
     72460+Test 4: Simple breakindent + min width: 18
     72461+    abcd
     72462+  qrstuv
     72463+  IJKLMN
     72464+
     72465+ Test 5: Simple breakindent + shift by 2
     72466+    abcd
     72467+      qr
     72468+      EF
     72469+
     72470+ Test 6: Simple breakindent + shift by -1
     72471+    abcd
     72472+   qrstu
     72473+   HIJKL
     72474+
     72475+ Test 7: breakindent + shift by +1 + nu + sbr=? briopt:sbr
     72476+  2     ab
     72477+?        m
     72478+?        x
     72479+
     72480+ Test 8: breakindent + shift:1 + nu + sbr=# list briopt:sbr
     72481+  2 ^Iabcd
     72482+#      opq
     72483+#      BCD
     72484+
     72485+ Test 9: breakindent + shift by +1 + 'nu' + sbr=# list
     72486+  2 ^Iabcd
     72487+       #op
     72488+       #AB
     72489+
     72490+ Test 10: breakindent + shift by +1 + 'nu' + sbr=~ cpo+=n
     72491+  2     ab
     72492+~       mn
     72493+~       yz
     72494+
     72495+ Test 11: strdisplaywidth when breakindent is on
     72496+strdisplaywidth: 46 == calculated: 64
    6396672497diff -Naur vim74.orig/src/testdir/test_eval.in vim74/src/testdir/test_eval.in
    6396772498--- vim74.orig/src/testdir/test_eval.in 1970-01-01 00:00:00.000000000 +0000
    63968 +++ vim74/src/testdir/test_eval.in      2014-06-01 00:43:21.027462765 +0000
     72499+++ vim74/src/testdir/test_eval.in      2014-07-21 23:33:48.023445381 +0000
    6396972500@@ -0,0 +1,207 @@
    6397072501+Test for various eval features.   vim: set ft=vim :
     
    6417772708diff -Naur vim74.orig/src/testdir/test_eval.ok vim74/src/testdir/test_eval.ok
    6417872709--- vim74.orig/src/testdir/test_eval.ok 1970-01-01 00:00:00.000000000 +0000
    64179 +++ vim74/src/testdir/test_eval.ok      2014-06-01 00:43:21.030796090 +0000
     72710+++ vim74/src/testdir/test_eval.ok      2014-07-21 23:33:48.026778705 +0000
    6418072711@@ -0,0 +1,350 @@
    6418172712+{{{1 let tests
     
    6453573066diff -Naur vim74.orig/src/testdir/test_eval_func.vim vim74/src/testdir/test_eval_func.vim
    6453673067--- vim74.orig/src/testdir/test_eval_func.vim   1970-01-01 00:00:00.000000000 +0000
    64537 +++ vim74/src/testdir/test_eval_func.vim        2014-06-01 00:43:21.034129415 +0000
     73068+++ vim74/src/testdir/test_eval_func.vim        2014-07-21 23:33:48.030112030 +0000
    6453873069@@ -0,0 +1,10 @@
    6453973070+" Vim script used in test_eval.in.  Needed for script-local function.
     
    6454773078+$put ='Bar exists: ' . exists('Bar')
    6454873079+$put ='func Bar exists: ' . exists('*Bar')
     73080diff -Naur vim74.orig/src/testdir/test_listlbr.in vim74/src/testdir/test_listlbr.in
     73081--- vim74.orig/src/testdir/test_listlbr.in      1970-01-01 00:00:00.000000000 +0000
     73082+++ vim74/src/testdir/test_listlbr.in   2014-07-21 23:33:48.030112030 +0000
     73083@@ -0,0 +1,52 @@
     73084+Test for linebreak and list option (non-utf8)
     73085+
     73086+STARTTEST
     73087+:so small.vim
     73088+:if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
     73089+:10new|:vsp|:vert resize 20
     73090+:put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"
     73091+:norm! zt
     73092+:set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
     73093+:fu! ScreenChar(width)
     73094+:      let c=''
     73095+:      for j in range(1,4)
     73096+:          for i in range(1,a:width)
     73097+:              let c.=nr2char(screenchar(j, i))
     73098+:          endfor
     73099+:           let c.="\n"
     73100+:      endfor
     73101+:      return c
     73102+:endfu
     73103+:fu! DoRecordScreen()
     73104+:      wincmd l
     73105+:      $put =printf(\"\n%s\", g:test)
     73106+:      $put =g:line
     73107+:      wincmd p
     73108+:endfu
     73109+:let g:test="Test 1: set linebreak"
     73110+:redraw!
     73111+:let line=ScreenChar(winwidth(0))
     73112+:call DoRecordScreen()
     73113+:let g:test="Test 2: set linebreak + set list"
     73114+:set linebreak list listchars=
     73115+:redraw!
     73116+:let line=ScreenChar(winwidth(0))
     73117+:call DoRecordScreen()
     73118+:let g:test ="Test 3: set linebreak nolist"
     73119+:set nolist linebreak
     73120+:redraw!
     73121+:let line=ScreenChar(winwidth(0))
     73122+:call DoRecordScreen()
     73123+:let g:test ="Test 4: set linebreak with tab and 1 line as long as screen: should break!"
     73124+:set nolist linebreak ts=8
     73125+:let line="1\t".repeat('a', winwidth(0)-2)
     73126+:$put =line
     73127+:$
     73128+:norm! zt
     73129+:redraw!
     73130+:let line=ScreenChar(winwidth(0))
     73131+:call DoRecordScreen()
     73132+:%w! test.out
     73133+:qa!
     73134+ENDTEST
     73135+dummy text
     73136diff -Naur vim74.orig/src/testdir/test_listlbr.ok vim74/src/testdir/test_listlbr.ok
     73137--- vim74.orig/src/testdir/test_listlbr.ok      1970-01-01 00:00:00.000000000 +0000
     73138+++ vim74/src/testdir/test_listlbr.ok   2014-07-21 23:33:48.036778679 +0000
     73139@@ -0,0 +1,27 @@
     73140+
     73141+       abcdef hijklmn  pqrstuvwxyz_1060ABCDEFGHIJKLMNOP
     73142+
     73143+Test 1: set linebreak
     73144+    abcdef         
     73145++hijklmn           
     73146++pqrstuvwxyz_1060ABC
     73147++DEFGHIJKLMNOP     
     73148+
     73149+Test 2: set linebreak + set list
     73150+^Iabcdef hijklmn^I 
     73151++pqrstuvwxyz_1060ABC
     73152++DEFGHIJKLMNOP     
     73153+                   
     73154+
     73155+Test 3: set linebreak nolist
     73156+    abcdef         
     73157++hijklmn           
     73158++pqrstuvwxyz_1060ABC
     73159++DEFGHIJKLMNOP     
     73160+1      aaaaaaaaaaaaaaaaaa
     73161+
     73162+Test 4: set linebreak with tab and 1 line as long as screen: should break!
     73163+1                   
     73164++aaaaaaaaaaaaaaaaaa
     73165+~                   
     73166+~                   
     73167diff -Naur vim74.orig/src/testdir/test_listlbr_utf8.in vim74/src/testdir/test_listlbr_utf8.in
     73168--- vim74.orig/src/testdir/test_listlbr_utf8.in 1970-01-01 00:00:00.000000000 +0000
     73169+++ vim74/src/testdir/test_listlbr_utf8.in      2014-07-21 23:33:48.040112004 +0000
     73170@@ -0,0 +1,41 @@
     73171+Test for linebreak and list option in utf-8 mode
     73172+
     73173+STARTTEST
     73174+:so small.vim
     73175+:if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
     73176+:so mbyte.vim
     73177+:if &enc !=? 'utf-8'|:e! test.ok|:w! test.out|qa!|endif
     73178+:10new|:vsp|:vert resize 20
     73179+:put =\"\tabcdef hijklmn\tpqrstuvwxyz\u00a01060ABCDEFGHIJKLMNOP \"
     73180+:norm! zt
     73181+:set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
     73182+:fu! ScreenChar(width)
     73183+:      let c=''
     73184+:      for j in range(1,4)
     73185+:          for i in range(1,a:width)
     73186+:              let c.=nr2char(screenchar(j, i))
     73187+:          endfor
     73188+:           let c.="\n"
     73189+:      endfor
     73190+:      return c
     73191+:endfu
     73192+:fu! DoRecordScreen()
     73193+:      wincmd l
     73194+:      $put =printf(\"\n%s\", g:test)
     73195+:      $put =g:line
     73196+:      wincmd p
     73197+:endfu
     73198+:let g:test ="Test 1: set linebreak + set list + fancy listchars"
     73199+:exe "set linebreak list listchars=nbsp:\u2423,tab:\u2595\u2014,trail:\u02d1,eol:\ub6"
     73200+:redraw!
     73201+:let line=ScreenChar(winwidth(0))
     73202+:call DoRecordScreen()
     73203+:let g:test ="Test 2: set nolinebreak list"
     73204+:set list nolinebreak
     73205+:redraw!
     73206+:let line=ScreenChar(winwidth(0))
     73207+:call DoRecordScreen()
     73208+:%w! test.out
     73209+:qa!
     73210+ENDTEST
     73211+dummy text
     73212diff -Naur vim74.orig/src/testdir/test_listlbr_utf8.ok vim74/src/testdir/test_listlbr_utf8.ok
     73213--- vim74.orig/src/testdir/test_listlbr_utf8.ok 1970-01-01 00:00:00.000000000 +0000
     73214+++ vim74/src/testdir/test_listlbr_utf8.ok      2014-07-21 23:33:48.043445329 +0000
     73215@@ -0,0 +1,14 @@
     73216+
     73217+       abcdef hijklmn  pqrstuvwxyz 1060ABCDEFGHIJKLMNOP
     73218+
     73219+Test 1: set linebreak + set list + fancy listchars
     73220+▕———abcdef         
     73221++hijklmn▕———       
     73222++pqrstuvwxyz␣1060ABC
     73223++DEFGHIJKLMNOPˑ¶   
     73224+
     73225+Test 2: set nolinebreak list
     73226+▕———abcdef hijklmn▕—
     73227++pqrstuvwxyz␣1060ABC
     73228++DEFGHIJKLMNOPˑ¶   
     73229+¶                   
    6454973230diff -Naur vim74.orig/src/testdir/test_options.in vim74/src/testdir/test_options.in
    6455073231--- vim74.orig/src/testdir/test_options.in      1970-01-01 00:00:00.000000000 +0000
    64551 +++ vim74/src/testdir/test_options.in   2014-06-01 00:43:21.050796039 +0000
     73232+++ vim74/src/testdir/test_options.in   2014-07-21 23:33:48.046778653 +0000
    6455273233@@ -0,0 +1,17 @@
    6455373234+Test for ":options".
     
    6457073251diff -Naur vim74.orig/src/testdir/test_options.ok vim74/src/testdir/test_options.ok
    6457173252--- vim74.orig/src/testdir/test_options.ok      1970-01-01 00:00:00.000000000 +0000
    64572 +++ vim74/src/testdir/test_options.ok   2014-06-01 00:43:21.050796039 +0000
     73253+++ vim74/src/testdir/test_options.ok   2014-07-21 23:33:48.080111900 +0000
    6457373254@@ -0,0 +1,2 @@
    6457473255+result
     
    6457673257diff -Naur vim74.orig/src/ui.c vim74/src/ui.c
    6457773258--- vim74.orig/src/ui.c 2013-07-13 18:57:08.000000000 +0000
    64578 +++ vim74/src/ui.c      2014-06-01 00:43:21.167462409 +0000
     73259+++ vim74/src/ui.c      2014-07-21 23:33:48.650110412 +0000
     73260@@ -2324,7 +2324,7 @@
     73261     if (       *target != XA_STRING
     73262 #ifdef FEAT_MBYTE
     73263            && *target != vimenc_atom
     73264-           && *target != utf8_atom
     73265+           && (*target != utf8_atom || !enc_utf8)
     73266 #endif
     73267            && *target != vim_atom
     73268            && *target != text_atom
    6457973269@@ -2610,13 +2610,11 @@
    6458073270        if (on_sep_line)
     
    6466373353     curwin->w_curswant = col;
    6466473354     curwin->w_set_curswant = FALSE;    /* May still have been TRUE */
     73355@@ -3170,15 +3162,15 @@
     73356     /* try to advance to the specified column */
     73357     int                count = 0;
     73358     char_u     *ptr;
     73359-    char_u     *start;
     73360+    char_u     *line;
     73361 
     73362-    start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
     73363+    line = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
     73364     while (count < vcol && *ptr != NUL)
     73365     {
     73366-       count += win_lbr_chartabsize(wp, ptr, count, NULL);
     73367+       count += win_lbr_chartabsize(wp, line, ptr, count, NULL);
     73368        mb_ptr_adv(ptr);
     73369     }
     73370-    return (int)(ptr - start);
     73371+    return (int)(ptr - line);
     73372 }
     73373 #endif
     73374 
    6466573375diff -Naur vim74.orig/src/undo.c vim74/src/undo.c
    6466673376--- vim74.orig/src/undo.c       2013-06-10 18:13:37.000000000 +0000
    64667 +++ vim74/src/undo.c    2014-06-01 00:43:21.194129007 +0000
     73377+++ vim74/src/undo.c    2014-07-21 23:33:48.666777036 +0000
    6466873378@@ -83,6 +83,7 @@
    6466973379 
     
    6489773607diff -Naur vim74.orig/src/version.c vim74/src/version.c
    6489873608--- vim74.orig/src/version.c    2013-08-10 11:29:20.000000000 +0000
    64899 +++ vim74/src/version.c 2014-06-01 00:43:21.227462256 +0000
     73609+++ vim74/src/version.c 2014-07-21 23:33:48.780110073 +0000
    6490073610@@ -60,6 +60,11 @@
    6490173611 
     
    6494173651        NULL
    6494273652 };
    64943 @@ -728,6 +735,638 @@
     73653@@ -728,6 +735,752 @@
    6494473654 static int included_patches[] =
    6494573655 {   /* Add new patch number below this line */
    6494673656 /**/
     73657+    373,
     73658+/**/
     73659+    372,
     73660+/**/
     73661+    371,
     73662+/**/
     73663+    370,
     73664+/**/
     73665+    369,
     73666+/**/
     73667+    368,
     73668+/**/
     73669+    367,
     73670+/**/
     73671+    366,
     73672+/**/
     73673+    365,
     73674+/**/
     73675+    364,
     73676+/**/
     73677+    363,
     73678+/**/
     73679+    362,
     73680+/**/
     73681+    361,
     73682+/**/
     73683+    360,
     73684+/**/
     73685+    359,
     73686+/**/
     73687+    358,
     73688+/**/
     73689+    357,
     73690+/**/
     73691+    356,
     73692+/**/
     73693+    355,
     73694+/**/
     73695+    354,
     73696+/**/
     73697+    353,
     73698+/**/
     73699+    352,
     73700+/**/
     73701+    351,
     73702+/**/
     73703+    350,
     73704+/**/
     73705+    349,
     73706+/**/
     73707+    348,
     73708+/**/
     73709+    347,
     73710+/**/
     73711+    346,
     73712+/**/
     73713+    345,
     73714+/**/
     73715+    344,
     73716+/**/
     73717+    343,
     73718+/**/
     73719+    342,
     73720+/**/
     73721+    341,
     73722+/**/
     73723+    340,
     73724+/**/
     73725+    339,
     73726+/**/
     73727+    338,
     73728+/**/
     73729+    337,
     73730+/**/
     73731+    336,
     73732+/**/
     73733+    335,
     73734+/**/
     73735+    334,
     73736+/**/
     73737+    333,
     73738+/**/
     73739+    332,
     73740+/**/
     73741+    331,
     73742+/**/
     73743+    330,
     73744+/**/
     73745+    329,
     73746+/**/
     73747+    328,
     73748+/**/
     73749+    327,
     73750+/**/
     73751+    326,
     73752+/**/
     73753+    325,
     73754+/**/
     73755+    324,
     73756+/**/
     73757+    323,
     73758+/**/
     73759+    322,
     73760+/**/
     73761+    321,
     73762+/**/
     73763+    320,
     73764+/**/
     73765+    319,
     73766+/**/
     73767+    318,
     73768+/**/
     73769+    317,
     73770+/**/
    6494773771+    316,
    6494873772+/**/
     
    6558274406diff -Naur vim74.orig/src/vim.h vim74/src/vim.h
    6558374407--- vim74.orig/src/vim.h        2013-08-02 14:02:27.000000000 +0000
    65584 +++ vim74/src/vim.h     2014-06-01 00:43:21.297462078 +0000
     74408+++ vim74/src/vim.h     2014-07-21 23:33:48.826776618 +0000
    6558574409@@ -43,7 +43,7 @@
    6558674410  * it becomes zero.  This is likely a problem of not being able to run the
     
    6574474568diff -Naur vim74.orig/src/winclip.c vim74/src/winclip.c
    6574574569--- vim74.orig/src/winclip.c    2013-07-01 19:05:53.000000000 +0000
    65746 +++ vim74/src/winclip.c 2014-06-01 00:43:21.514128193 +0000
     74570+++ vim74/src/winclip.c 2014-07-21 23:33:49.033442746 +0000
    6574774571@@ -797,4 +797,29 @@
    6574874572        vim_free(widestr);
     
    6577774601diff -Naur vim74.orig/src/window.c vim74/src/window.c
    6577874602--- vim74.orig/src/window.c     2013-07-24 15:38:29.000000000 +0000
    65779 +++ vim74/src/window.c  2014-06-01 00:43:21.530794817 +0000
     74603+++ vim74/src/window.c  2014-07-21 23:33:49.070109317 +0000
    6578074604@@ -130,9 +130,7 @@
    6578174605     case Ctrl_S:
     
    6589674720                            postponed_split = Prenum;
    6589774721                        else
    65898 @@ -1216,8 +1192,8 @@
     74722@@ -710,6 +686,8 @@
     74723     int                layout;
     74724     frame_T    *frp, *curfrp;
     74725     int                before;
     74726+    int                minheight;
     74727+    int                wmh1;
     74728 
     74729     if (flags & WSP_TOP)
     74730        oldwin = firstwin;
     74731@@ -738,22 +716,32 @@
     74732 #ifdef FEAT_VERTSPLIT
     74733     if (flags & WSP_VERT)
     74734     {
     74735+       int     wmw1;
     74736+       int     minwidth;
     74737+
     74738        layout = FR_ROW;
     74739 
     74740        /*
     74741         * Check if we are able to split the current window and compute its
     74742         * width.
     74743         */
     74744-       needed = p_wmw + 1;
     74745+       /* Current window requires at least 1 space. */
     74746+       wmw1 = (p_wmw == 0 ? 1 : p_wmw);
     74747+       needed = wmw1 + 1;
     74748        if (flags & WSP_ROOM)
     74749-           needed += p_wiw - p_wmw;
     74750+           needed += p_wiw - wmw1;
     74751        if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
     74752        {
     74753+           minwidth = frame_minwidth(topframe, NOWIN);
     74754            available = topframe->fr_width;
     74755-           needed += frame_minwidth(topframe, NULL);
     74756+           needed += minwidth;
     74757        }
     74758        else
     74759-           available = oldwin->w_width;
     74760+       {
     74761+           minwidth = frame_minwidth(oldwin->w_frame, NOWIN);
     74762+           available = oldwin->w_frame->fr_width;
     74763+           needed += minwidth;
     74764+       }
     74765        if (available < needed && new_wp == NULL)
     74766        {
     74767            EMSG(_(e_noroom));
     74768@@ -761,10 +749,10 @@
     74769        }
     74770        if (new_size == 0)
     74771            new_size = oldwin->w_width / 2;
     74772-       if (new_size > oldwin->w_width - p_wmw - 1)
     74773-           new_size = oldwin->w_width - p_wmw - 1;
     74774-       if (new_size < p_wmw)
     74775-           new_size = p_wmw;
     74776+       if (new_size > available - minwidth - 1)
     74777+           new_size = available - minwidth - 1;
     74778+       if (new_size < wmw1)
     74779+           new_size = wmw1;
     74780 
     74781        /* if it doesn't fit in the current window, need win_equal() */
     74782        if (oldwin->w_width - new_size - 1 < p_wmw)
     74783@@ -805,18 +793,22 @@
     74784         * Check if we are able to split the current window and compute its
     74785         * height.
     74786         */
     74787-       needed = p_wmh + STATUS_HEIGHT + need_status;
     74788+       /* Current window requires at least 1 space. */
     74789+       wmh1 = (p_wmh == 0 ? 1 : p_wmh);
     74790+       needed = wmh1 + STATUS_HEIGHT;
     74791        if (flags & WSP_ROOM)
     74792-           needed += p_wh - p_wmh;
     74793+           needed += p_wh - wmh1;
     74794        if (p_ea || (flags & (WSP_BOT | WSP_TOP)))
     74795        {
     74796+           minheight = frame_minheight(topframe, NOWIN) + need_status;
     74797            available = topframe->fr_height;
     74798-           needed += frame_minheight(topframe, NULL);
     74799+           needed += minheight;
     74800        }
     74801        else
     74802        {
     74803-           available = oldwin->w_height;
     74804-           needed += p_wmh;
     74805+           minheight = frame_minheight(oldwin->w_frame, NOWIN) + need_status;
     74806+           available = oldwin->w_frame->fr_height;
     74807+           needed += minheight;
     74808        }
     74809        if (available < needed && new_wp == NULL)
     74810        {
     74811@@ -831,11 +823,10 @@
     74812        }
     74813        if (new_size == 0)
     74814            new_size = oldwin_height / 2;
     74815-
     74816-       if (new_size > oldwin_height - p_wmh - STATUS_HEIGHT)
     74817-           new_size = oldwin_height - p_wmh - STATUS_HEIGHT;
     74818-       if (new_size < p_wmh)
     74819-           new_size = p_wmh;
     74820+       if (new_size > available - minheight - STATUS_HEIGHT)
     74821+           new_size = available - minheight - STATUS_HEIGHT;
     74822+       if (new_size < wmh1)
     74823+           new_size = wmh1;
     74824 
     74825        /* if it doesn't fit in the current window, need win_equal() */
     74826        if (oldwin_height - new_size - STATUS_HEIGHT < p_wmh)
     74827@@ -1216,8 +1207,8 @@
    6589974828     else
    6590074829        copy_loclist(oldp, newp);
     
    6590774836     /* copy tagstack and folds */
    6590874837     for (i = 0; i < oldp->w_tagstacklen; i++)
    65909 @@ -2172,8 +2148,9 @@
     74838@@ -2172,8 +2163,9 @@
    6591074839  * If "free_buf" is TRUE related buffer may be unloaded.
    6591174840  *
     
    6591874847     win_T      *win;
    6591974848     int                free_buf;
    65920 @@ -2190,21 +2167,21 @@
     74849@@ -2190,21 +2182,21 @@
    6592174850     if (last_window())
    6592274851     {
     
    6594474873 #endif
    6594574874 
    65946 @@ -2212,7 +2189,7 @@
     74875@@ -2212,7 +2204,7 @@
    6594774876      * and then close the window and the tab page to avoid that curwin and
    6594874877      * curtab are invalid while we are freeing memory. */
     
    6595374882     /* When closing the help window, try restoring a snapshot after closing
    6595474883      * the window.  Otherwise clear the snapshot, it's now invalid. */
    65955 @@ -2240,22 +2217,22 @@
     74884@@ -2240,22 +2232,22 @@
    6595674885            win->w_closing = TRUE;
    6595774886            apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
     
    6598174910     }
    6598274911 #endif
    65983 @@ -2303,7 +2280,7 @@
     74912@@ -2303,7 +2295,7 @@
    6598474913      * other window or moved to another tab page. */
    6598574914     else if (!win_valid(win) || last_window() || curtab != prev_curtab
     
    6599074919     /* Free the memory used for the window and get the window that received
    6599174920      * the screen space. */
    65992 @@ -2383,6 +2360,7 @@
     74921@@ -2383,6 +2375,7 @@
    6599374922 #endif
    6599474923 
     
    6599874927 
    6599974928 /*
    66000 @@ -3724,9 +3702,7 @@
     74929@@ -2499,6 +2492,10 @@
     74930 
     74931     while (firstwin != NULL)
     74932        (void)win_free_mem(firstwin, &dummy, NULL);
     74933+
     74934+    /* No window should be used after this. Set curwin to NULL to crash
     74935+     * instead of using freed memory. */
     74936+    curwin = NULL;
     74937 }
     74938 #endif
     74939 
     74940@@ -3724,9 +3721,7 @@
    6600174941 {
    6600274942     tabpage_T  *tp = curtab;
     
    6600874948     if (trigger_leave_autocmds)
    6600974949     {
    66010 @@ -4027,12 +4003,10 @@
     74950@@ -4027,12 +4022,10 @@
    6601174951        return;
    6601274952 #endif
     
    6602174961 #ifdef FEAT_GUI
    6602274962     need_mouse_correct = TRUE;
    66023 @@ -5649,7 +5623,7 @@
     74963@@ -4276,6 +4269,11 @@
     74964     /* sync undo before leaving the current buffer */
     74965     if (undo_sync && curbuf != wp->w_buffer)
     74966        u_sync(FALSE);
     74967+
     74968+    /* Might need to scroll the old window before switching, e.g., when the
     74969+     * cursor was moved. */
     74970+    update_topline();
     74971+
     74972     /* may have to copy the buffer options when 'cpo' contains 'S' */
     74973     if (wp->w_buffer != curbuf)
     74974        buf_copy_options(wp->w_buffer, BCO_ENTER | BCO_NOHELP);
     74975@@ -4623,7 +4621,15 @@
     74976     if (wp != aucmd_win)
     74977 #endif
     74978        win_remove(wp, tp);
     74979-    vim_free(wp);
     74980+#ifdef FEAT_AUTOCMD
     74981+    if (autocmd_busy)
     74982+    {
     74983+       wp->w_next = au_pending_free_win;
     74984+       au_pending_free_win = wp;
     74985+    }
     74986+    else
     74987+#endif
     74988+       vim_free(wp);
     74989 
     74990 #ifdef FEAT_AUTOCMD
     74991     unblock_autocmds();
     74992@@ -4747,8 +4753,12 @@
     74993 win_free_lsize(wp)
     74994     win_T      *wp;
     74995 {
     74996-    vim_free(wp->w_lines);
     74997-    wp->w_lines = NULL;
     74998+    /* TODO: why would wp be NULL here? */
     74999+    if (wp != NULL)
     75000+    {
     75001+       vim_free(wp->w_lines);
     75002+       wp->w_lines = NULL;
     75003+    }
     75004 }
     75005 
     75006 /*
     75007@@ -4845,15 +4855,20 @@
     75008     garray_T   *gap;
     75009 {
     75010     win_T      *wp;
     75011-    int                i;
     75012+    int                i, j;
     75013 
     75014     if (win_count() * 2 == gap->ga_len)
     75015     {
     75016-       i = 0;
     75017-       for (wp = firstwin; wp != NULL; wp = wp->w_next)
     75018+       /* The order matters, because frames contain other frames, but it's
     75019+        * difficult to get right. The easy way out is to do it twice. */
     75020+       for (j = 0; j < 2; ++j)
     75021        {
     75022-           frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
     75023-           win_setheight_win(((int *)gap->ga_data)[i++], wp);
     75024+           i = 0;
     75025+           for (wp = firstwin; wp != NULL; wp = wp->w_next)
     75026+           {
     75027+               frame_setwidth(wp->w_frame, ((int *)gap->ga_data)[i++]);
     75028+               win_setheight_win(((int *)gap->ga_data)[i++], wp);
     75029+           }
     75030        }
     75031        /* recompute the window positions */
     75032        (void)win_comp_pos();
     75033@@ -5649,7 +5664,7 @@
    6602475034     win_T      *wp;
    6602575035 {
     
    6603075040 
    6603175041 /*
    66032 @@ -5664,6 +5638,7 @@
     75042@@ -5664,6 +5679,7 @@
    6603375043 {
    6603475044     linenr_T   lnum;
     
    6603875048     /* Don't want a negative height.  Happens when splitting a tiny window.
    6603975049      * Will equalize heights soon to fix it. */
    66040 @@ -5672,8 +5647,13 @@
     75050@@ -5672,8 +5688,18 @@
    6604175051     if (wp->w_height == height)
    6604275052        return;     /* nothing to do */
     
    6604775057+    {
    6604875058+       if (wp == curwin)
    66049 +           validate_cursor();          /* w_wrow needs to be valid */
     75059+           /* w_wrow needs to be valid. When setting 'laststatus' this may
     75060+            * call win_new_height() recursively. */
     75061+           validate_cursor();
     75062+       if (wp->w_height != prev_height)
     75063+           return;  /* Recursive call already changed the size, bail out here
     75064+                       to avoid the following to mess things up. */
    6605075065+       if (wp->w_wrow != wp->w_prev_fraction_row)
    6605175066+           set_fraction(wp);
     
    6605475069     wp->w_height = height;
    6605575070     wp->w_skipcol = 0;
    66056 @@ -5693,7 +5673,8 @@
     75071@@ -5693,7 +5719,8 @@
    6605775072        lnum = wp->w_cursor.lnum;
    6605875073        if (lnum < 1)           /* can happen when starting up */
     
    6606475079        sline = wp->w_wrow - line_size;
    6606575080 
    66066 @@ -5729,8 +5710,9 @@
     75081@@ -5729,8 +5756,9 @@
    6606775082                    --wp->w_wrow;
    6606875083                }
    6606975084            }
    66070 +            set_topline(wp, lnum);
     75085+           set_topline(wp, lnum);
    6607175086        }
    6607275087-       else
     
    6607575090            while (sline > 0 && lnum > 1)
    6607675091            {
    66077 @@ -5773,8 +5755,9 @@
     75092@@ -5773,8 +5801,9 @@
    6607875093                lnum = 1;
    6607975094                wp->w_wrow -= sline;
    6608075095            }
    6608175096+
    66082 +            set_topline(wp, lnum);
     75097+           set_topline(wp, lnum);
    6608375098        }
    6608475099-       set_topline(wp, lnum);
     
    6608675101 
    6608775102     if (wp == curwin)
    66088 @@ -5783,7 +5766,8 @@
     75103@@ -5783,7 +5812,8 @@
    6608975104            update_topline();
    6609075105        curs_columns(FALSE);    /* validate w_wrow */
     
    6609675111     win_comp_scroll(wp);
    6609775112     redraw_win_later(wp, SOME_VALID);
    66098 @@ -6035,7 +6019,6 @@
     75113@@ -6035,7 +6065,6 @@
    6609975114     long       count;
    6610075115     linenr_T   *file_lnum;
     
    6610475119     {
    6610575120        int     len;
    66106 @@ -6046,7 +6029,6 @@
     75121@@ -6046,7 +6075,6 @@
    6610775122        return find_file_name_in_path(ptr, len,
    6610875123                     FNAME_MESS|FNAME_EXP|FNAME_REL, count, curbuf->b_ffname);
     
    6611275127                               file_lnum);
    6611375128 
     75129@@ -6747,20 +6775,22 @@
     75130  * Return ID of added match, -1 on failure.
     75131  */
     75132     int
     75133-match_add(wp, grp, pat, prio, id)
     75134+match_add(wp, grp, pat, prio, id, pos_list)
     75135     win_T      *wp;
     75136     char_u     *grp;
     75137     char_u     *pat;
     75138     int                prio;
     75139     int                id;
     75140+    list_T     *pos_list;
     75141 {
     75142-    matchitem_T *cur;
     75143-    matchitem_T *prev;
     75144-    matchitem_T *m;
     75145+    matchitem_T        *cur;
     75146+    matchitem_T        *prev;
     75147+    matchitem_T        *m;
     75148     int                hlg_id;
     75149-    regprog_T  *regprog;
     75150+    regprog_T  *regprog = NULL;
     75151+    int                rtype = SOME_VALID;
     75152 
     75153-    if (*grp == NUL || *pat == NUL)
     75154+    if (*grp == NUL || (pat != NULL && *pat == NUL))
     75155        return -1;
     75156     if (id < -1 || id == 0)
     75157     {
     75158@@ -6785,7 +6815,7 @@
     75159        EMSG2(_(e_nogroup), grp);
     75160        return -1;
     75161     }
     75162-    if ((regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
     75163+    if (pat != NULL && (regprog = vim_regcomp(pat, RE_MAGIC)) == NULL)
     75164     {
     75165        EMSG2(_(e_invarg2), pat);
     75166        return -1;
     75167@@ -6803,15 +6833,112 @@
     75168     }
     75169 
     75170     /* Build new match. */
     75171-    m = (matchitem_T *)alloc(sizeof(matchitem_T));
     75172+    m = (matchitem_T *)alloc_clear(sizeof(matchitem_T));
     75173     m->id = id;
     75174     m->priority = prio;
     75175-    m->pattern = vim_strsave(pat);
     75176+    m->pattern = pat == NULL ? NULL : vim_strsave(pat);
     75177     m->hlg_id = hlg_id;
     75178     m->match.regprog = regprog;
     75179     m->match.rmm_ic = FALSE;
     75180     m->match.rmm_maxcol = 0;
     75181 
     75182+    /* Set up position matches */
     75183+    if (pos_list != NULL)
     75184+    {
     75185+       linenr_T        toplnum = 0;
     75186+       linenr_T        botlnum = 0;
     75187+       listitem_T      *li;
     75188+       int             i;
     75189+
     75190+       for (i = 0, li = pos_list->lv_first; li != NULL && i < MAXPOSMATCH;
     75191+                                                       i++, li = li->li_next)
     75192+       {
     75193+           linenr_T    lnum = 0;
     75194+           colnr_T     col = 0;
     75195+           int         len = 1;
     75196+           list_T      *subl;
     75197+           listitem_T  *subli;
     75198+           int         error = FALSE;
     75199+
     75200+           if (li->li_tv.v_type == VAR_LIST)
     75201+           {
     75202+               subl = li->li_tv.vval.v_list;
     75203+               if (subl == NULL)
     75204+                   goto fail;
     75205+               subli = subl->lv_first;
     75206+               if (subli == NULL)
     75207+                   goto fail;
     75208+               lnum = get_tv_number_chk(&subli->li_tv, &error);
     75209+               if (error == TRUE)
     75210+                   goto fail;
     75211+               if (lnum == 0)
     75212+               {
     75213+                   --i;
     75214+                   continue;
     75215+               }
     75216+               m->pos.pos[i].lnum = lnum;
     75217+               subli = subli->li_next;
     75218+               if (subli != NULL)
     75219+               {
     75220+                   col = get_tv_number_chk(&subli->li_tv, &error);
     75221+                   if (error == TRUE)
     75222+                       goto fail;
     75223+                   subli = subli->li_next;
     75224+                   if (subli != NULL)
     75225+                   {
     75226+                       len = get_tv_number_chk(&subli->li_tv, &error);
     75227+                       if (error == TRUE)
     75228+                           goto fail;
     75229+                   }
     75230+               }
     75231+               m->pos.pos[i].col = col;
     75232+               m->pos.pos[i].len = len;
     75233+           }
     75234+           else if (li->li_tv.v_type == VAR_NUMBER)
     75235+           {
     75236+               if (li->li_tv.vval.v_number == 0)
     75237+               {
     75238+                   --i;
     75239+                   continue;
     75240+               }
     75241+               m->pos.pos[i].lnum = li->li_tv.vval.v_number;
     75242+               m->pos.pos[i].col = 0;
     75243+               m->pos.pos[i].len = 0;
     75244+           }
     75245+           else
     75246+           {
     75247+               EMSG(_("List or number required"));
     75248+               goto fail;
     75249+           }
     75250+           if (toplnum == 0 || lnum < toplnum)
     75251+               toplnum = lnum;
     75252+           if (botlnum == 0 || lnum >= botlnum)
     75253+               botlnum = lnum + 1;
     75254+       }
     75255+
     75256+       /* Calculate top and bottom lines for redrawing area */
     75257+       if (toplnum != 0)
     75258+       {
     75259+           if (wp->w_buffer->b_mod_set)
     75260+           {
     75261+               if (wp->w_buffer->b_mod_top > toplnum)
     75262+                   wp->w_buffer->b_mod_top = toplnum;
     75263+               if (wp->w_buffer->b_mod_bot < botlnum)
     75264+                   wp->w_buffer->b_mod_bot = botlnum;
     75265+           }
     75266+           else
     75267+           {
     75268+               wp->w_buffer->b_mod_set = TRUE;
     75269+               wp->w_buffer->b_mod_top = toplnum;
     75270+               wp->w_buffer->b_mod_bot = botlnum;
     75271+               wp->w_buffer->b_mod_xlines = 0;
     75272+           }
     75273+           m->pos.toplnum = toplnum;
     75274+           m->pos.botlnum = botlnum;
     75275+           rtype = VALID;
     75276+       }
     75277+    }
     75278+
     75279     /* Insert new match.  The match list is in ascending order with regard to
     75280      * the match priorities. */
     75281     cur = wp->w_match_head;
     75282@@ -6827,8 +6954,12 @@
     75283        prev->next = m;
     75284     m->next = cur;
     75285 
     75286-    redraw_later(SOME_VALID);
     75287+    redraw_later(rtype);
     75288     return id;
     75289+
     75290+fail:
     75291+    vim_free(m);
     75292+    return -1;
     75293 }
     75294 
     75295 /*
     75296@@ -6841,8 +6972,9 @@
     75297     int                id;
     75298     int                perr;
     75299 {
     75300-    matchitem_T *cur = wp->w_match_head;
     75301-    matchitem_T *prev = cur;
     75302+    matchitem_T        *cur = wp->w_match_head;
     75303+    matchitem_T        *prev = cur;
     75304+    int                rtype = SOME_VALID;
     75305 
     75306     if (id < 1)
     75307     {
     75308@@ -6868,8 +7000,26 @@
     75309        prev->next = cur->next;
     75310     vim_regfree(cur->match.regprog);
     75311     vim_free(cur->pattern);
     75312+    if (cur->pos.toplnum != 0)
     75313+    {
     75314+       if (wp->w_buffer->b_mod_set)
     75315+       {
     75316+           if (wp->w_buffer->b_mod_top > cur->pos.toplnum)
     75317+               wp->w_buffer->b_mod_top = cur->pos.toplnum;
     75318+           if (wp->w_buffer->b_mod_bot < cur->pos.botlnum)
     75319+               wp->w_buffer->b_mod_bot = cur->pos.botlnum;
     75320+       }
     75321+       else
     75322+       {
     75323+           wp->w_buffer->b_mod_set = TRUE;
     75324+           wp->w_buffer->b_mod_top = cur->pos.toplnum;
     75325+           wp->w_buffer->b_mod_bot = cur->pos.botlnum;
     75326+           wp->w_buffer->b_mod_xlines = 0;
     75327+       }
     75328+       rtype = VALID;
     75329+    }
     75330     vim_free(cur);
     75331-    redraw_later(SOME_VALID);
     75332+    redraw_later(rtype);
     75333     return 0;
     75334 }
     75335 
    6611475336diff -Naur vim74.orig/src/xxd/Make_cyg.mak vim74/src/xxd/Make_cyg.mak
    6611575337--- vim74.orig/src/xxd/Make_cyg.mak     2010-05-15 11:04:06.000000000 +0000
    66116 +++ vim74/src/xxd/Make_cyg.mak  2014-06-01 00:43:21.840794027 +0000
     75338+++ vim74/src/xxd/Make_cyg.mak  2014-07-21 23:33:49.350108586 +0000
    6611775339@@ -8,7 +8,7 @@
    6611875340 DEFINES =
Note: See TracChangeset for help on using the changeset viewer.